From 7adcb81e4f83f98c468889aaa5a85558ba88c770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= Date: Mon, 25 Jan 2016 17:45:33 +0100 Subject: Initial commit --- sources/plugins/menubutton/plugin.js | 101 +++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 sources/plugins/menubutton/plugin.js (limited to 'sources/plugins/menubutton') diff --git a/sources/plugins/menubutton/plugin.js b/sources/plugins/menubutton/plugin.js new file mode 100644 index 00000000..7f57f876 --- /dev/null +++ b/sources/plugins/menubutton/plugin.js @@ -0,0 +1,101 @@ +/** + * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +CKEDITOR.plugins.add( 'menubutton', { + requires: 'button,menu', + onLoad: function() { + var clickFn = function( editor ) { + var _ = this._, + menu = _.menu; + + // Do nothing if this button is disabled. + if ( _.state === CKEDITOR.TRISTATE_DISABLED ) + return; + + if ( _.on && menu ) { + menu.hide(); + return; + } + + _.previousState = _.state; + + // Check if we already have a menu for it, otherwise just create it. + if ( !menu ) { + menu = _.menu = new CKEDITOR.menu( editor, { + panel: { + className: 'cke_menu_panel', + attributes: { 'aria-label': editor.lang.common.options } + } + } ); + + menu.onHide = CKEDITOR.tools.bind( function() { + var modes = this.command ? editor.getCommand( this.command ).modes : this.modes; + this.setState( !modes || modes[ editor.mode ] ? _.previousState : CKEDITOR.TRISTATE_DISABLED ); + _.on = 0; + }, this ); + + // Initialize the menu items at this point. + if ( this.onMenu ) + menu.addListener( this.onMenu ); + } + + this.setState( CKEDITOR.TRISTATE_ON ); + _.on = 1; + + // This timeout is needed to give time for the panel get focus + // when JAWS is running. (#9842) + setTimeout( function() { + menu.show( CKEDITOR.document.getById( _.id ), 4 ); + }, 0 ); + }; + + /** + * @class + * @extends CKEDITOR.ui.button + * @todo + */ + CKEDITOR.ui.menuButton = CKEDITOR.tools.createClass( { + base: CKEDITOR.ui.button, + + /** + * Creates a menuButton class instance. + * + * @constructor + * @param Object definition + * @todo + */ + $: function( definition ) { + // We don't want the panel definition in this object. + delete definition.panel; + + this.base( definition ); + + this.hasArrow = true; + + this.click = clickFn; + }, + + statics: { + handler: { + create: function( definition ) { + return new CKEDITOR.ui.menuButton( definition ); + } + } + } + } ); + }, + beforeInit: function( editor ) { + editor.ui.addHandler( CKEDITOR.UI_MENUBUTTON, CKEDITOR.ui.menuButton.handler ); + } +} ); + +/** + * Button UI element. + * + * @readonly + * @property {String} [='menubutton'] + * @member CKEDITOR + */ +CKEDITOR.UI_MENUBUTTON = 'menubutton'; -- cgit v1.2.3