1 /* 2 Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved. 3 For licensing, see LICENSE.html or http://ckeditor.com/license 4 */ 5 6 CKEDITOR.plugins.add( 'menubutton', 7 { 8 requires : [ 'button' ], 9 beforeInit : function( editor ) 10 { 11 editor.ui.addHandler( CKEDITOR.UI_MENUBUTTON, CKEDITOR.ui.menuButton.handler ); 12 } 13 }); 14 15 /** 16 * Button UI element. 17 * @constant 18 * @example 19 */ 20 CKEDITOR.UI_MENUBUTTON = 5; 21 22 (function() 23 { 24 var clickFn = function( editor ) 25 { 26 var _ = this._; 27 28 // Do nothing if this button is disabled. 29 if ( _.state === CKEDITOR.TRISTATE_DISABLED ) 30 return; 31 32 _.previousState = _.state; 33 34 // Check if we already have a menu for it, otherwise just create it. 35 var menu = _.menu; 36 if ( !menu ) 37 { 38 menu = _.menu = new CKEDITOR.plugins.contextMenu( editor ); 39 40 menu.onHide = CKEDITOR.tools.bind( function() 41 { 42 this.setState( _.previousState ); 43 }, 44 this ); 45 46 // Initialize the menu items at this point. 47 if ( this.onMenu ) 48 { 49 menu.addListener( this.onMenu ); 50 } 51 } 52 53 if ( _.on ) 54 { 55 menu.hide(); 56 return; 57 } 58 59 this.setState( CKEDITOR.TRISTATE_ON ); 60 61 menu.show( CKEDITOR.document.getById( this._.id ), 4 ); 62 }; 63 64 65 CKEDITOR.ui.menuButton = CKEDITOR.tools.createClass( 66 { 67 base : CKEDITOR.ui.button, 68 69 $ : function( definition ) 70 { 71 // We don't want the panel definition in this object. 72 var panelDefinition = definition.panel; 73 delete definition.panel; 74 75 this.base( definition ); 76 77 this.hasArrow = true; 78 79 this.click = clickFn; 80 }, 81 82 statics : 83 { 84 handler : 85 { 86 create : function( definition ) 87 { 88 return new CKEDITOR.ui.menuButton( definition ); 89 } 90 } 91 } 92 }); 93 })(); 94