JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.4
[ckeditor.git] / _source / plugins / dialogadvtab / 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 (function()\r
7 {\r
8 \r
9 function setupAdvParams( element )\r
10 {\r
11         var attrName = this.att;\r
12 \r
13         var value = element && element.hasAttribute( attrName ) && element.getAttribute( attrName ) || '';\r
14 \r
15         if ( value !== undefined )\r
16                 this.setValue( value );\r
17 }\r
18 \r
19 function commitAdvParams()\r
20 {\r
21         // Dialogs may use different parameters in the commit list, so, by\r
22         // definition, we take the first CKEDITOR.dom.element available.\r
23         var element;\r
24 \r
25         for ( var i = 0 ; i < arguments.length ; i++ )\r
26         {\r
27                 if ( arguments[ i ] instanceof CKEDITOR.dom.element )\r
28                 {\r
29                         element = arguments[ i ];\r
30                         break;\r
31                 }\r
32         }\r
33 \r
34         if ( element )\r
35         {\r
36                 var attrName = this.att,\r
37                         value = this.getValue();\r
38 \r
39                 if ( value )\r
40                         element.setAttribute( attrName, value );\r
41                 else\r
42                         element.removeAttribute( attrName, value );\r
43         }\r
44 }\r
45 \r
46 CKEDITOR.plugins.add( 'dialogadvtab',\r
47 {\r
48         /**\r
49          *\r
50          * @param tabConfig\r
51          * id, dir, classes, styles\r
52          */\r
53         createAdvancedTab : function( editor, tabConfig )\r
54         {\r
55                 if ( !tabConfig )\r
56                         tabConfig = { id:1, dir:1, classes:1, styles:1 };\r
57 \r
58                 var lang = editor.lang.common;\r
59 \r
60                 var result =\r
61                 {\r
62                         id : 'advanced',\r
63                         label : lang.advancedTab,\r
64                         title : lang.advancedTab,\r
65                         elements :\r
66                                 [\r
67                                         {\r
68                                                 type : 'vbox',\r
69                                                 padding : 1,\r
70                                                 children : []\r
71                                         }\r
72                                 ]\r
73                 };\r
74 \r
75                 var contents = [];\r
76 \r
77                 if ( tabConfig.id || tabConfig.dir )\r
78                 {\r
79                         if ( tabConfig.id )\r
80                         {\r
81                                 contents.push(\r
82                                         {\r
83                                                 id : 'advId',\r
84                                                 att : 'id',\r
85                                                 type : 'text',\r
86                                                 label : lang.id,\r
87                                                 setup : setupAdvParams,\r
88                                                 commit : commitAdvParams\r
89                                         });\r
90                         }\r
91 \r
92                         if ( tabConfig.dir )\r
93                         {\r
94                                 contents.push(\r
95                                         {\r
96                                                 id : 'advLangDir',\r
97                                                 att : 'dir',\r
98                                                 type : 'select',\r
99                                                 label : lang.langDir,\r
100                                                 'default' : '',\r
101                                                 style : 'width:110px',\r
102                                                 items :\r
103                                                 [\r
104                                                         [ lang.notSet, '' ],\r
105                                                         [ lang.langDirLTR, 'ltr' ],\r
106                                                         [ lang.langDirRTL, 'rtl' ]\r
107                                                 ],\r
108                                                 setup : setupAdvParams,\r
109                                                 commit : commitAdvParams\r
110                                         });\r
111                         }\r
112 \r
113                         result.elements[ 0 ].children.push(\r
114                                 {\r
115                                         type : 'hbox',\r
116                                         widths : [ '50%', '50%' ],\r
117                                         children : [].concat( contents )\r
118                                 });\r
119                 }\r
120 \r
121                 if ( tabConfig.styles || tabConfig.classes )\r
122                 {\r
123                         contents = [];\r
124 \r
125                         if ( tabConfig.id )\r
126                         {\r
127                                 contents.push(\r
128                                         {\r
129                                                 id : 'advStyles',\r
130                                                 att : 'style',\r
131                                                 type : 'text',\r
132                                                 label : lang.styles,\r
133                                                 'default' : '',\r
134 \r
135                                                 onChange : function(){},\r
136 \r
137                                                 getStyle : function( name, defaultValue )\r
138                                                 {\r
139                                                         var match = this.getValue().match( new RegExp( name + '\\s*:\s*([^;]*)', 'i') );\r
140                                                         return match ? match[ 1 ] : defaultValue;\r
141                                                 },\r
142 \r
143                                                 updateStyle : function( name, value )\r
144                                                 {\r
145                                                         var styles = this.getValue();\r
146 \r
147                                                         // Remove the current value.\r
148                                                         if ( styles )\r
149                                                         {\r
150                                                                 styles = styles\r
151                                                                         .replace( new RegExp( '\\s*' + name + '\s*:[^;]*(?:$|;\s*)', 'i' ), '' )\r
152                                                                         .replace( /^[;\s]+/, '' )\r
153                                                                         .replace( /\s+$/, '' );\r
154                                                         }\r
155 \r
156                                                         if ( value )\r
157                                                         {\r
158                                                                 styles && !(/;\s*$/).test( styles ) && ( styles += '; ' );\r
159                                                                 styles += name + ': ' + value;\r
160                                                         }\r
161 \r
162                                                         this.setValue( styles, true );\r
163 \r
164                                                 },\r
165 \r
166                                                 setup : setupAdvParams,\r
167 \r
168                                                 commit : commitAdvParams\r
169 \r
170                                         });\r
171                         }\r
172 \r
173                         if ( tabConfig.classes )\r
174                         {\r
175                                 contents.push(\r
176                                         {\r
177                                                 type : 'hbox',\r
178                                                 widths : [ '45%', '55%' ],\r
179                                                 children :\r
180                                                 [\r
181                                                         {\r
182                                                                 id : 'advCSSClasses',\r
183                                                                 att : 'class',\r
184                                                                 type : 'text',\r
185                                                                 label : lang.cssClasses,\r
186                                                                 'default' : '',\r
187                                                                 setup : setupAdvParams,\r
188                                                                 commit : commitAdvParams\r
189 \r
190                                                         }\r
191                                                 ]\r
192                                         });\r
193                         }\r
194 \r
195                         result.elements[ 0 ].children.push(\r
196                                 {\r
197                                         type : 'hbox',\r
198                                         widths : [ '50%', '50%' ],\r
199                                         children : [].concat( contents )\r
200                                 });\r
201                 }\r
202 \r
203                 return result;\r
204         }\r
205 });\r
206 \r
207 })();\r