liuxiaolong
2019-05-09 0d1d88cdb668e75ea8609417ac18ae19947e9525
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-2012, 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 );
                }
            }
        }
    });
})();