X-Git-Url: https://scm.cri.minesparis.psl.eu/git/ckeditor.git/blobdiff_plain/256592bf803e851aa7fc953e08a6e9e58d970f8c..871bad8291b6dbc29d489d95d185458caab25158:/skins/ckeditor/_source/plugins/menubutton/plugin.js diff --git a/skins/ckeditor/_source/plugins/menubutton/plugin.js b/skins/ckeditor/_source/plugins/menubutton/plugin.js new file mode 100644 index 0000000..6f07531 --- /dev/null +++ b/skins/ckeditor/_source/plugins/menubutton/plugin.js @@ -0,0 +1,98 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'menubutton', +{ + requires : [ 'button', 'menu' ], + beforeInit : function( editor ) + { + editor.ui.addHandler( CKEDITOR.UI_MENUBUTTON, CKEDITOR.ui.menuButton.handler ); + } +}); + +/** + * Button UI element. + * @constant + * @example + */ +CKEDITOR.UI_MENUBUTTON = 'menubutton'; + +(function() +{ + var clickFn = function( editor ) + { + var _ = this._; + + // Do nothing if this button is disabled. + if ( _.state === CKEDITOR.TRISTATE_DISABLED ) + return; + + _.previousState = _.state; + + // Check if we already have a menu for it, otherwise just create it. + var menu = _.menu; + if ( !menu ) + { + menu = _.menu = new CKEDITOR.menu( editor, + { + panel: + { + className : editor.skinClass + ' cke_contextmenu', + attributes : { 'aria-label' : editor.lang.common.options } + } + }); + + menu.onHide = CKEDITOR.tools.bind( function() + { + this.setState( this.modes && this.modes[ editor.mode ] ? _.previousState : CKEDITOR.TRISTATE_DISABLED ); + }, + this ); + + // Initialize the menu items at this point. + if ( this.onMenu ) + menu.addListener( this.onMenu ); + } + + if ( _.on ) + { + menu.hide(); + return; + } + + this.setState( CKEDITOR.TRISTATE_ON ); + + menu.show( CKEDITOR.document.getById( this._.id ), 4 ); + }; + + + CKEDITOR.ui.menuButton = 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.hasArrow = true; + + this.click = clickFn; + }, + + statics : + { + handler : + { + create : function( definition ) + { + return new CKEDITOR.ui.menuButton( definition ); + } + } + } + }); +})();