139 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
/**
 | 
						|
 * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
 | 
						|
 * For licensing, see LICENSE.md or http://ckeditor.com/license
 | 
						|
 */
 | 
						|
 | 
						|
CKEDITOR.plugins.add( 'panelbutton', {
 | 
						|
	requires: 'button',
 | 
						|
	onLoad: function() {
 | 
						|
		function clickFn( editor ) {
 | 
						|
			var _ = this._;
 | 
						|
 | 
						|
			if ( _.state == CKEDITOR.TRISTATE_DISABLED )
 | 
						|
				return;
 | 
						|
 | 
						|
			this.createPanel( editor );
 | 
						|
 | 
						|
			if ( _.on ) {
 | 
						|
				_.panel.hide();
 | 
						|
				return;
 | 
						|
			}
 | 
						|
 | 
						|
			_.panel.showBlock( this._.id, this.document.getById( this._.id ), 4 );
 | 
						|
		}
 | 
						|
 | 
						|
		/**
 | 
						|
		 * @class
 | 
						|
		 * @extends CKEDITOR.ui.button
 | 
						|
		 * @todo class and methods
 | 
						|
		 */
 | 
						|
		CKEDITOR.ui.panelButton = CKEDITOR.tools.createClass( {
 | 
						|
			base: CKEDITOR.ui.button,
 | 
						|
 | 
						|
			/**
 | 
						|
			 * Creates a panelButton class instance.
 | 
						|
			 *
 | 
						|
			 * @constructor
 | 
						|
			 */
 | 
						|
			$: function( definition ) {
 | 
						|
				// We don't want the panel definition in this object.
 | 
						|
				var panelDefinition = definition.panel || {};
 | 
						|
				delete definition.panel;
 | 
						|
 | 
						|
				this.base( definition );
 | 
						|
 | 
						|
				this.document = ( panelDefinition.parent && panelDefinition.parent.getDocument() ) || CKEDITOR.document;
 | 
						|
 | 
						|
				panelDefinition.block = {
 | 
						|
					attributes: panelDefinition.attributes
 | 
						|
				};
 | 
						|
				panelDefinition.toolbarRelated = true;
 | 
						|
 | 
						|
				this.hasArrow = true;
 | 
						|
 | 
						|
				this.click = clickFn;
 | 
						|
 | 
						|
				this._ = {
 | 
						|
					panelDefinition: panelDefinition
 | 
						|
				};
 | 
						|
			},
 | 
						|
 | 
						|
			statics: {
 | 
						|
				handler: {
 | 
						|
					create: function( definition ) {
 | 
						|
						return new CKEDITOR.ui.panelButton( definition );
 | 
						|
					}
 | 
						|
				}
 | 
						|
			},
 | 
						|
 | 
						|
			proto: {
 | 
						|
				createPanel: function( editor ) {
 | 
						|
					var _ = this._;
 | 
						|
 | 
						|
					if ( _.panel )
 | 
						|
						return;
 | 
						|
 | 
						|
					var panelDefinition = this._.panelDefinition,
 | 
						|
						panelBlockDefinition = this._.panelDefinition.block,
 | 
						|
						panelParentElement = panelDefinition.parent || CKEDITOR.document.getBody(),
 | 
						|
						panel = this._.panel = new CKEDITOR.ui.floatPanel( editor, panelParentElement, panelDefinition ),
 | 
						|
						block = panel.addBlock( _.id, panelBlockDefinition ),
 | 
						|
						me = this;
 | 
						|
 | 
						|
					panel.onShow = function() {
 | 
						|
						if ( me.className )
 | 
						|
							this.element.addClass( me.className + '_panel' );
 | 
						|
 | 
						|
						me.setState( CKEDITOR.TRISTATE_ON );
 | 
						|
 | 
						|
						_.on = 1;
 | 
						|
 | 
						|
						me.editorFocus && editor.focus();
 | 
						|
 | 
						|
						if ( me.onOpen )
 | 
						|
							me.onOpen();
 | 
						|
					};
 | 
						|
 | 
						|
					panel.onHide = function( preventOnClose ) {
 | 
						|
						if ( me.className )
 | 
						|
							this.element.getFirst().removeClass( me.className + '_panel' );
 | 
						|
 | 
						|
						me.setState( me.modes && me.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );
 | 
						|
 | 
						|
						_.on = 0;
 | 
						|
 | 
						|
						if ( !preventOnClose && me.onClose )
 | 
						|
							me.onClose();
 | 
						|
					};
 | 
						|
 | 
						|
					panel.onEscape = function() {
 | 
						|
						panel.hide( 1 );
 | 
						|
						me.document.getById( _.id ).focus();
 | 
						|
					};
 | 
						|
 | 
						|
					if ( this.onBlock )
 | 
						|
						this.onBlock( panel, block );
 | 
						|
 | 
						|
					block.onHide = function() {
 | 
						|
						_.on = 0;
 | 
						|
						me.setState( CKEDITOR.TRISTATE_OFF );
 | 
						|
					};
 | 
						|
				}
 | 
						|
			}
 | 
						|
		} );
 | 
						|
 | 
						|
	},
 | 
						|
	beforeInit: function( editor ) {
 | 
						|
		editor.ui.addHandler( CKEDITOR.UI_PANELBUTTON, CKEDITOR.ui.panelButton.handler );
 | 
						|
	}
 | 
						|
} );
 | 
						|
 | 
						|
/**
 | 
						|
 * Button UI element.
 | 
						|
 *
 | 
						|
 * @readonly
 | 
						|
 * @property {String} [='panelbutton']
 | 
						|
 * @member CKEDITOR
 | 
						|
 */
 | 
						|
CKEDITOR.UI_PANELBUTTON = 'panelbutton';
 |