123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- /**
- * @license Copyright (c) 2003-2015, 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';
|