JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.4.3
[ckeditor.git] / _source / plugins / panelbutton / plugin.js
1 /*\r
2 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
3 For licensing, see LICENSE.html or http://ckeditor.com/license\r
4 */\r
5 \r
6 CKEDITOR.plugins.add( 'panelbutton',\r
7 {\r
8         requires : [ 'button' ],\r
9         beforeInit : function( editor )\r
10         {\r
11                 editor.ui.addHandler( CKEDITOR.UI_PANELBUTTON, CKEDITOR.ui.panelButton.handler );\r
12         }\r
13 });\r
14 \r
15 /**\r
16  * Button UI element.\r
17  * @constant\r
18  * @example\r
19  */\r
20 CKEDITOR.UI_PANELBUTTON = 4;\r
21 \r
22 (function()\r
23 {\r
24         var clickFn = function( editor )\r
25         {\r
26                 var _ = this._;\r
27 \r
28                 if ( _.state == CKEDITOR.TRISTATE_DISABLED )\r
29                         return;\r
30 \r
31                 this.createPanel( editor );\r
32 \r
33                 if ( _.on )\r
34                 {\r
35                         _.panel.hide();\r
36                         return;\r
37                 }\r
38 \r
39                 _.panel.showBlock( this._.id, this.document.getById( this._.id ), 4 );\r
40         };\r
41 \r
42 \r
43         CKEDITOR.ui.panelButton = CKEDITOR.tools.createClass(\r
44         {\r
45                 base : CKEDITOR.ui.button,\r
46 \r
47                 $ : function( definition )\r
48                 {\r
49                         // We don't want the panel definition in this object.\r
50                         var panelDefinition = definition.panel;\r
51                         delete definition.panel;\r
52 \r
53                         this.base( definition );\r
54 \r
55                         this.document = ( panelDefinition\r
56                                                                 && panelDefinition.parent\r
57                                                                 && panelDefinition.parent.getDocument() )\r
58                                                         || CKEDITOR.document;\r
59 \r
60                         panelDefinition.block =\r
61                         {\r
62                                 attributes : panelDefinition.attributes\r
63                         };\r
64 \r
65                         this.hasArrow = true;\r
66 \r
67                         this.click = clickFn;\r
68 \r
69                         this._ =\r
70                         {\r
71                                 panelDefinition : panelDefinition\r
72                         };\r
73                 },\r
74 \r
75                 statics :\r
76                 {\r
77                         handler :\r
78                         {\r
79                                 create : function( definition )\r
80                                 {\r
81                                         return new CKEDITOR.ui.panelButton( definition );\r
82                                 }\r
83                         }\r
84                 },\r
85 \r
86                 proto :\r
87                 {\r
88                         createPanel : function( editor )\r
89                         {\r
90                                 var _ = this._;\r
91 \r
92                                 if ( _.panel )\r
93                                         return;\r
94 \r
95                                 var panelDefinition = this._.panelDefinition || {},\r
96                                         panelBlockDefinition = this._.panelDefinition.block,\r
97                                         panelParentElement = panelDefinition.parent || CKEDITOR.document.getBody(),\r
98                                         panel = this._.panel = new CKEDITOR.ui.floatPanel( editor, panelParentElement, panelDefinition ),\r
99                                         block = panel.addBlock( _.id, panelBlockDefinition ),\r
100                                         me = this;\r
101 \r
102                                 panel.onShow = function()\r
103                                         {\r
104                                                 if ( me.className )\r
105                                                         this.element.getFirst().addClass( me.className + '_panel' );\r
106 \r
107                                                 me.setState( CKEDITOR.TRISTATE_ON );\r
108 \r
109                                                 _.on = 1;\r
110 \r
111                                                 if ( me.onOpen )\r
112                                                         me.onOpen();\r
113                                         };\r
114 \r
115                                 panel.onHide = function( preventOnClose )\r
116                                         {\r
117                                                 if ( me.className )\r
118                                                         this.element.getFirst().removeClass( me.className + '_panel' );\r
119 \r
120                                                 me.setState( me.modes && me.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );\r
121 \r
122                                                 _.on = 0;\r
123 \r
124                                                 if ( !preventOnClose && me.onClose )\r
125                                                         me.onClose();\r
126                                         };\r
127 \r
128                                 panel.onEscape = function()\r
129                                         {\r
130                                                 panel.hide();\r
131                                                 me.document.getById( _.id ).focus();\r
132                                         };\r
133 \r
134                                 if ( this.onBlock )\r
135                                         this.onBlock( panel, block );\r
136 \r
137                                 block.onHide = function()\r
138                                         {\r
139                                                 _.on = 0;\r
140                                                 me.setState( CKEDITOR.TRISTATE_OFF );\r
141                                         };\r
142                         }\r
143                 }\r
144         });\r
145 \r
146 })();\r