Blame view

mobile/source/ext/ckeditor/_source/plugins/menubutton/plugin.js 1.86 KB
a1684257   Administrator   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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 );
  				}
  			}
  		}
  	});
  })();