]>
Commit | Line | Data |
---|---|---|
3332bebe | 1 | /**\r |
317f8f8f | 2 | * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\r |
3332bebe IB |
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license\r |
4 | */\r | |
5 | \r | |
6 | ( function() {\r | |
7 | \r | |
8 | function setupAdvParams( element ) {\r | |
9 | var attrName = this.att;\r | |
10 | \r | |
11 | var value = element && element.hasAttribute( attrName ) && element.getAttribute( attrName ) || '';\r | |
12 | \r | |
13 | if ( value !== undefined )\r | |
14 | this.setValue( value );\r | |
15 | }\r | |
16 | \r | |
17 | function commitAdvParams() {\r | |
18 | // Dialogs may use different parameters in the commit list, so, by\r | |
19 | // definition, we take the first CKEDITOR.dom.element available.\r | |
20 | var element;\r | |
21 | \r | |
22 | for ( var i = 0; i < arguments.length; i++ ) {\r | |
23 | if ( arguments[ i ] instanceof CKEDITOR.dom.element ) {\r | |
24 | element = arguments[ i ];\r | |
25 | break;\r | |
26 | }\r | |
27 | }\r | |
28 | \r | |
29 | if ( element ) {\r | |
30 | var attrName = this.att,\r | |
31 | value = this.getValue();\r | |
32 | \r | |
33 | if ( value )\r | |
34 | element.setAttribute( attrName, value );\r | |
35 | else\r | |
36 | element.removeAttribute( attrName, value );\r | |
37 | }\r | |
38 | }\r | |
39 | \r | |
40 | var defaultTabConfig = { id: 1, dir: 1, classes: 1, styles: 1 };\r | |
41 | \r | |
42 | CKEDITOR.plugins.add( 'dialogadvtab', {\r | |
43 | requires: 'dialog',\r | |
44 | \r | |
45 | // Returns allowed content rule for the content created by this plugin.\r | |
46 | allowedContent: function( tabConfig ) {\r | |
47 | if ( !tabConfig )\r | |
48 | tabConfig = defaultTabConfig;\r | |
49 | \r | |
50 | var allowedAttrs = [];\r | |
51 | if ( tabConfig.id )\r | |
52 | allowedAttrs.push( 'id' );\r | |
53 | if ( tabConfig.dir )\r | |
54 | allowedAttrs.push( 'dir' );\r | |
55 | \r | |
56 | var allowed = '';\r | |
57 | \r | |
58 | if ( allowedAttrs.length )\r | |
59 | allowed += '[' + allowedAttrs.join( ',' ) + ']';\r | |
60 | \r | |
61 | if ( tabConfig.classes )\r | |
62 | allowed += '(*)';\r | |
63 | if ( tabConfig.styles )\r | |
64 | allowed += '{*}';\r | |
65 | \r | |
66 | return allowed;\r | |
67 | },\r | |
68 | \r | |
69 | // @param tabConfig\r | |
70 | // id, dir, classes, styles\r | |
71 | createAdvancedTab: function( editor, tabConfig, element ) {\r | |
72 | if ( !tabConfig )\r | |
73 | tabConfig = defaultTabConfig;\r | |
74 | \r | |
75 | var lang = editor.lang.common;\r | |
76 | \r | |
77 | var result = {\r | |
78 | id: 'advanced',\r | |
79 | label: lang.advancedTab,\r | |
80 | title: lang.advancedTab,\r | |
81 | elements: [ {\r | |
82 | type: 'vbox',\r | |
83 | padding: 1,\r | |
84 | children: []\r | |
85 | } ]\r | |
86 | };\r | |
87 | \r | |
88 | var contents = [];\r | |
89 | \r | |
90 | if ( tabConfig.id || tabConfig.dir ) {\r | |
91 | if ( tabConfig.id ) {\r | |
92 | contents.push( {\r | |
93 | id: 'advId',\r | |
94 | att: 'id',\r | |
95 | type: 'text',\r | |
96 | requiredContent: element ? element + '[id]' : null,\r | |
97 | label: lang.id,\r | |
98 | setup: setupAdvParams,\r | |
99 | commit: commitAdvParams\r | |
100 | } );\r | |
101 | }\r | |
102 | \r | |
103 | if ( tabConfig.dir ) {\r | |
104 | contents.push( {\r | |
105 | id: 'advLangDir',\r | |
106 | att: 'dir',\r | |
107 | type: 'select',\r | |
108 | requiredContent: element ? element + '[dir]' : null,\r | |
109 | label: lang.langDir,\r | |
110 | 'default': '',\r | |
111 | style: 'width:100%',\r | |
112 | items: [\r | |
113 | [ lang.notSet, '' ],\r | |
114 | [ lang.langDirLTR, 'ltr' ],\r | |
115 | [ lang.langDirRTL, 'rtl' ]\r | |
116 | ],\r | |
117 | setup: setupAdvParams,\r | |
118 | commit: commitAdvParams\r | |
119 | } );\r | |
120 | }\r | |
121 | \r | |
122 | result.elements[ 0 ].children.push( {\r | |
123 | type: 'hbox',\r | |
124 | widths: [ '50%', '50%' ],\r | |
125 | children: [].concat( contents )\r | |
126 | } );\r | |
127 | }\r | |
128 | \r | |
129 | if ( tabConfig.styles || tabConfig.classes ) {\r | |
130 | contents = [];\r | |
131 | \r | |
132 | if ( tabConfig.styles ) {\r | |
133 | contents.push( {\r | |
134 | id: 'advStyles',\r | |
135 | att: 'style',\r | |
136 | type: 'text',\r | |
137 | requiredContent: element ? element + '{cke-xyz}' : null,\r | |
138 | label: lang.styles,\r | |
139 | 'default': '',\r | |
140 | \r | |
141 | validate: CKEDITOR.dialog.validate.inlineStyle( lang.invalidInlineStyle ),\r | |
142 | onChange: function() {},\r | |
143 | \r | |
144 | getStyle: function( name, defaultValue ) {\r | |
145 | var match = this.getValue().match( new RegExp( '(?:^|;)\\s*' + name + '\\s*:\\s*([^;]*)', 'i' ) );\r | |
146 | return match ? match[ 1 ] : defaultValue;\r | |
147 | },\r | |
148 | \r | |
149 | updateStyle: function( name, value ) {\r | |
150 | var styles = this.getValue();\r | |
151 | \r | |
152 | var tmp = editor.document.createElement( 'span' );\r | |
153 | tmp.setAttribute( 'style', styles );\r | |
154 | tmp.setStyle( name, value );\r | |
155 | styles = CKEDITOR.tools.normalizeCssText( tmp.getAttribute( 'style' ) );\r | |
156 | \r | |
157 | this.setValue( styles, 1 );\r | |
158 | },\r | |
159 | \r | |
160 | setup: setupAdvParams,\r | |
161 | \r | |
162 | commit: commitAdvParams\r | |
163 | \r | |
164 | } );\r | |
165 | }\r | |
166 | \r | |
167 | if ( tabConfig.classes ) {\r | |
168 | contents.push( {\r | |
169 | type: 'hbox',\r | |
170 | widths: [ '45%', '55%' ],\r | |
171 | children: [ {\r | |
172 | id: 'advCSSClasses',\r | |
173 | att: 'class',\r | |
174 | type: 'text',\r | |
175 | requiredContent: element ? element + '(cke-xyz)' : null,\r | |
176 | label: lang.cssClasses,\r | |
177 | 'default': '',\r | |
178 | setup: setupAdvParams,\r | |
179 | commit: commitAdvParams\r | |
180 | \r | |
181 | } ]\r | |
182 | } );\r | |
183 | }\r | |
184 | \r | |
185 | result.elements[ 0 ].children.push( {\r | |
186 | type: 'hbox',\r | |
187 | widths: [ '50%', '50%' ],\r | |
188 | children: [].concat( contents )\r | |
189 | } );\r | |
190 | }\r | |
191 | \r | |
192 | return result;\r | |
193 | }\r | |
194 | } );\r | |
195 | \r | |
196 | } )();\r |