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