X-Git-Url: https://scm.cri.ensmp.fr/git/ckeditor.git/blobdiff_plain/256592bf803e851aa7fc953e08a6e9e58d970f8c..871bad8291b6dbc29d489d95d185458caab25158:/skins/ckeditor/_source/plugins/panelbutton/plugin.js diff --git a/skins/ckeditor/_source/plugins/panelbutton/plugin.js b/skins/ckeditor/_source/plugins/panelbutton/plugin.js new file mode 100644 index 0000000..eba97cd --- /dev/null +++ b/skins/ckeditor/_source/plugins/panelbutton/plugin.js @@ -0,0 +1,144 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html 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 ); + } + + CKEDITOR.ui.panelButton = CKEDITOR.tools.createClass( + { + base : CKEDITOR.ui.button, + + $ : 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 + && panelDefinition.parent + && panelDefinition.parent.getDocument() ) + || CKEDITOR.document; + + panelDefinition.block = + { + attributes : panelDefinition.attributes + }; + + 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.getFirst().addClass( me.className + '_panel' ); + + me.setState( CKEDITOR.TRISTATE_ON ); + + _.on = 1; + + 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(); + 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. + * @constant + * @example + */ +CKEDITOR.UI_PANELBUTTON = 'panelbutton';