summaryrefslogtreecommitdiff
path: root/_source/plugins/menubutton/plugin.js
diff options
context:
space:
mode:
Diffstat (limited to '_source/plugins/menubutton/plugin.js')
-rw-r--r--_source/plugins/menubutton/plugin.js93
1 files changed, 93 insertions, 0 deletions
diff --git a/_source/plugins/menubutton/plugin.js b/_source/plugins/menubutton/plugin.js
new file mode 100644
index 0000000..c533536
--- /dev/null
+++ b/_source/plugins/menubutton/plugin.js
@@ -0,0 +1,93 @@
+/*
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.add( 'menubutton',
+{
+ requires : [ 'button', 'contextmenu' ],
+ beforeInit : function( editor )
+ {
+ editor.ui.addHandler( CKEDITOR.UI_MENUBUTTON, CKEDITOR.ui.menuButton.handler );
+ }
+});
+
+/**
+ * Button UI element.
+ * @constant
+ * @example
+ */
+CKEDITOR.UI_MENUBUTTON = 5;
+
+(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.plugins.contextMenu( editor );
+
+ menu.onHide = CKEDITOR.tools.bind( function()
+ {
+ this.setState( _.previousState );
+ },
+ 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 );
+ }
+ }
+ }
+ });
+})();