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'; |