JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
8b5cb32b10f8113e3aae03982e1883f0ac369a7a
[ckeditor.git] / _source / plugins / dialogadvtab / plugin.js
1 /*\r
2 Copyright (c) 2003-2013, 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:100%',\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.styles )\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                                                 validate : CKEDITOR.dialog.validate.inlineStyle( lang.invalidInlineStyle ),\r
136                                                 onChange : function(){},\r
137 \r
138                                                 getStyle : function( name, defaultValue )\r
139                                                 {\r
140                                                         var match = this.getValue().match( new RegExp( '(?:^|;)\\s*' + name + '\\s*:\\s*([^;]*)', 'i' ) );\r
141                                                         return match ? match[ 1 ] : defaultValue;\r
142                                                 },\r
143 \r
144                                                 updateStyle : function( name, value )\r
145                                                 {\r
146                                                         var styles = this.getValue();\r
147 \r
148                                                         var tmp = editor.document.createElement( 'span' );\r
149                                                         tmp.setAttribute( 'style', styles );\r
150                                                         tmp.setStyle( name, value );\r
151                                                         styles = CKEDITOR.tools.normalizeCssText( tmp.getAttribute( 'style' ) );\r
152 \r
153                                                         this.setValue( styles, 1 );\r
154                                                 },\r
155 \r
156                                                 setup : setupAdvParams,\r
157 \r
158                                                 commit : commitAdvParams\r
159 \r
160                                         });\r
161                         }\r
162 \r
163                         if ( tabConfig.classes )\r
164                         {\r
165                                 contents.push(\r
166                                         {\r
167                                                 type : 'hbox',\r
168                                                 widths : [ '45%', '55%' ],\r
169                                                 children :\r
170                                                 [\r
171                                                         {\r
172                                                                 id : 'advCSSClasses',\r
173                                                                 att : 'class',\r
174                                                                 type : 'text',\r
175                                                                 label : lang.cssClasses,\r
176                                                                 'default' : '',\r
177                                                                 setup : setupAdvParams,\r
178                                                                 commit : commitAdvParams\r
179 \r
180                                                         }\r
181                                                 ]\r
182                                         });\r
183                         }\r
184 \r
185                         result.elements[ 0 ].children.push(\r
186                                 {\r
187                                         type : 'hbox',\r
188                                         widths : [ '50%', '50%' ],\r
189                                         children : [].concat( contents )\r
190                                 });\r
191                 }\r
192 \r
193                 return result;\r
194         }\r
195 });\r
196 \r
197 })();\r