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