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