]> git.mxchange.org Git - friendica.git/blob - library/tinymce/jscripts/tiny_mce/plugins/style/js/props.js
update tinymce to 3.5b2 to fix issues with FF 11 and pasting into code blocks
[friendica.git] / library / tinymce / jscripts / tiny_mce / plugins / style / js / props.js
1 tinyMCEPopup.requireLangPack();\r
2 \r
3 var defaultFonts = "" + \r
4         "Arial, Helvetica, sans-serif=Arial, Helvetica, sans-serif;" + \r
5         "Times New Roman, Times, serif=Times New Roman, Times, serif;" + \r
6         "Courier New, Courier, mono=Courier New, Courier, mono;" + \r
7         "Times New Roman, Times, serif=Times New Roman, Times, serif;" + \r
8         "Georgia, Times New Roman, Times, serif=Georgia, Times New Roman, Times, serif;" + \r
9         "Verdana, Arial, Helvetica, sans-serif=Verdana, Arial, Helvetica, sans-serif;" + \r
10         "Geneva, Arial, Helvetica, sans-serif=Geneva, Arial, Helvetica, sans-serif";\r
11 \r
12 var defaultSizes = "9;10;12;14;16;18;24;xx-small;x-small;small;medium;large;x-large;xx-large;smaller;larger";\r
13 var defaultMeasurement = "+pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%";\r
14 var defaultSpacingMeasurement = "pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;+ems=em;exs=ex;%";\r
15 var defaultIndentMeasurement = "pixels=px;+points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%";\r
16 var defaultWeight = "normal;bold;bolder;lighter;100;200;300;400;500;600;700;800;900";\r
17 var defaultTextStyle = "normal;italic;oblique";\r
18 var defaultVariant = "normal;small-caps";\r
19 var defaultLineHeight = "normal";\r
20 var defaultAttachment = "fixed;scroll";\r
21 var defaultRepeat = "no-repeat;repeat;repeat-x;repeat-y";\r
22 var defaultPosH = "left;center;right";\r
23 var defaultPosV = "top;center;bottom";\r
24 var defaultVAlign = "baseline;sub;super;top;text-top;middle;bottom;text-bottom";\r
25 var defaultDisplay = "inline;block;list-item;run-in;compact;marker;table;inline-table;table-row-group;table-header-group;table-footer-group;table-row;table-column-group;table-column;table-cell;table-caption;none";\r
26 var defaultBorderStyle = "none;solid;dashed;dotted;double;groove;ridge;inset;outset";\r
27 var defaultBorderWidth = "thin;medium;thick";\r
28 var defaultListType = "disc;circle;square;decimal;lower-roman;upper-roman;lower-alpha;upper-alpha;none";\r
29 \r
30 function aggregateStyles(allStyles) {\r
31         var mergedStyles = {};\r
32 \r
33         tinymce.each(allStyles, function(style) {\r
34                 if (style !== '') {\r
35                         var parsedStyles = tinyMCEPopup.editor.dom.parseStyle(style);\r
36                         for (var name in parsedStyles) {\r
37                                 if (parsedStyles.hasOwnProperty(name)) {\r
38                                         if (mergedStyles[name] === undefined) {\r
39                                                 mergedStyles[name] = parsedStyles[name];\r
40                                         }\r
41                                         else if (name === 'text-decoration') {\r
42                                                 if (mergedStyles[name].indexOf(parsedStyles[name]) === -1) {\r
43                                                         mergedStyles[name] = mergedStyles[name] +' '+ parsedStyles[name];\r
44                                                 }\r
45                                         }\r
46                                 }\r
47                         }\r
48                 }\r
49         });\r
50 \r
51   return mergedStyles;\r
52 }\r
53 \r
54 var applyActionIsInsert;\r
55 var existingStyles;\r
56 \r
57 function init(ed) {\r
58         var ce = document.getElementById('container'), h;\r
59 \r
60         existingStyles = aggregateStyles(tinyMCEPopup.getWindowArg('styles'));\r
61         ce.style.cssText = tinyMCEPopup.editor.dom.serializeStyle(existingStyles);\r
62 \r
63         applyActionIsInsert = ed.getParam("edit_css_style_insert_span", false);\r
64         document.getElementById('toggle_insert_span').checked = applyActionIsInsert;\r
65 \r
66         h = getBrowserHTML('background_image_browser','background_image','image','advimage');\r
67         document.getElementById("background_image_browser").innerHTML = h;\r
68 \r
69         document.getElementById('text_color_pickcontainer').innerHTML = getColorPickerHTML('text_color_pick','text_color');\r
70         document.getElementById('background_color_pickcontainer').innerHTML = getColorPickerHTML('background_color_pick','background_color');\r
71         document.getElementById('border_color_top_pickcontainer').innerHTML = getColorPickerHTML('border_color_top_pick','border_color_top');\r
72         document.getElementById('border_color_right_pickcontainer').innerHTML = getColorPickerHTML('border_color_right_pick','border_color_right');\r
73         document.getElementById('border_color_bottom_pickcontainer').innerHTML = getColorPickerHTML('border_color_bottom_pick','border_color_bottom');\r
74         document.getElementById('border_color_left_pickcontainer').innerHTML = getColorPickerHTML('border_color_left_pick','border_color_left');\r
75 \r
76         fillSelect(0, 'text_font', 'style_font', defaultFonts, ';', true);\r
77         fillSelect(0, 'text_size', 'style_font_size', defaultSizes, ';', true);\r
78         fillSelect(0, 'text_size_measurement', 'style_font_size_measurement', defaultMeasurement, ';', true);\r
79         fillSelect(0, 'text_case', 'style_text_case', "capitalize;uppercase;lowercase", ';', true);\r
80         fillSelect(0, 'text_weight', 'style_font_weight', defaultWeight, ';', true);\r
81         fillSelect(0, 'text_style', 'style_font_style', defaultTextStyle, ';', true);\r
82         fillSelect(0, 'text_variant', 'style_font_variant', defaultVariant, ';', true);\r
83         fillSelect(0, 'text_lineheight', 'style_font_line_height', defaultLineHeight, ';', true);\r
84         fillSelect(0, 'text_lineheight_measurement', 'style_font_line_height_measurement', defaultMeasurement, ';', true);\r
85 \r
86         fillSelect(0, 'background_attachment', 'style_background_attachment', defaultAttachment, ';', true);\r
87         fillSelect(0, 'background_repeat', 'style_background_repeat', defaultRepeat, ';', true);\r
88 \r
89         fillSelect(0, 'background_hpos_measurement', 'style_background_hpos_measurement', defaultMeasurement, ';', true);\r
90         fillSelect(0, 'background_vpos_measurement', 'style_background_vpos_measurement', defaultMeasurement, ';', true);\r
91 \r
92         fillSelect(0, 'background_hpos', 'style_background_hpos', defaultPosH, ';', true);\r
93         fillSelect(0, 'background_vpos', 'style_background_vpos', defaultPosV, ';', true);\r
94 \r
95         fillSelect(0, 'block_wordspacing', 'style_wordspacing', 'normal', ';', true);\r
96         fillSelect(0, 'block_wordspacing_measurement', 'style_wordspacing_measurement', defaultSpacingMeasurement, ';', true);\r
97         fillSelect(0, 'block_letterspacing', 'style_letterspacing', 'normal', ';', true);\r
98         fillSelect(0, 'block_letterspacing_measurement', 'style_letterspacing_measurement', defaultSpacingMeasurement, ';', true);\r
99         fillSelect(0, 'block_vertical_alignment', 'style_vertical_alignment', defaultVAlign, ';', true);\r
100         fillSelect(0, 'block_text_align', 'style_text_align', "left;right;center;justify", ';', true);\r
101         fillSelect(0, 'block_whitespace', 'style_whitespace', "normal;pre;nowrap", ';', true);\r
102         fillSelect(0, 'block_display', 'style_display', defaultDisplay, ';', true);\r
103         fillSelect(0, 'block_text_indent_measurement', 'style_text_indent_measurement', defaultIndentMeasurement, ';', true);\r
104 \r
105         fillSelect(0, 'box_width_measurement', 'style_box_width_measurement', defaultMeasurement, ';', true);\r
106         fillSelect(0, 'box_height_measurement', 'style_box_height_measurement', defaultMeasurement, ';', true);\r
107         fillSelect(0, 'box_float', 'style_float', 'left;right;none', ';', true);\r
108         fillSelect(0, 'box_clear', 'style_clear', 'left;right;both;none', ';', true);\r
109         fillSelect(0, 'box_padding_left_measurement', 'style_padding_left_measurement', defaultMeasurement, ';', true);\r
110         fillSelect(0, 'box_padding_top_measurement', 'style_padding_top_measurement', defaultMeasurement, ';', true);\r
111         fillSelect(0, 'box_padding_bottom_measurement', 'style_padding_bottom_measurement', defaultMeasurement, ';', true);\r
112         fillSelect(0, 'box_padding_right_measurement', 'style_padding_right_measurement', defaultMeasurement, ';', true);\r
113         fillSelect(0, 'box_margin_left_measurement', 'style_margin_left_measurement', defaultMeasurement, ';', true);\r
114         fillSelect(0, 'box_margin_top_measurement', 'style_margin_top_measurement', defaultMeasurement, ';', true);\r
115         fillSelect(0, 'box_margin_bottom_measurement', 'style_margin_bottom_measurement', defaultMeasurement, ';', true);\r
116         fillSelect(0, 'box_margin_right_measurement', 'style_margin_right_measurement', defaultMeasurement, ';', true);\r
117 \r
118         fillSelect(0, 'border_style_top', 'style_border_style_top', defaultBorderStyle, ';', true);\r
119         fillSelect(0, 'border_style_right', 'style_border_style_right', defaultBorderStyle, ';', true);\r
120         fillSelect(0, 'border_style_bottom', 'style_border_style_bottom', defaultBorderStyle, ';', true);\r
121         fillSelect(0, 'border_style_left', 'style_border_style_left', defaultBorderStyle, ';', true);\r
122 \r
123         fillSelect(0, 'border_width_top', 'style_border_width_top', defaultBorderWidth, ';', true);\r
124         fillSelect(0, 'border_width_right', 'style_border_width_right', defaultBorderWidth, ';', true);\r
125         fillSelect(0, 'border_width_bottom', 'style_border_width_bottom', defaultBorderWidth, ';', true);\r
126         fillSelect(0, 'border_width_left', 'style_border_width_left', defaultBorderWidth, ';', true);\r
127 \r
128         fillSelect(0, 'border_width_top_measurement', 'style_border_width_top_measurement', defaultMeasurement, ';', true);\r
129         fillSelect(0, 'border_width_right_measurement', 'style_border_width_right_measurement', defaultMeasurement, ';', true);\r
130         fillSelect(0, 'border_width_bottom_measurement', 'style_border_width_bottom_measurement', defaultMeasurement, ';', true);\r
131         fillSelect(0, 'border_width_left_measurement', 'style_border_width_left_measurement', defaultMeasurement, ';', true);\r
132 \r
133         fillSelect(0, 'list_type', 'style_list_type', defaultListType, ';', true);\r
134         fillSelect(0, 'list_position', 'style_list_position', "inside;outside", ';', true);\r
135 \r
136         fillSelect(0, 'positioning_type', 'style_positioning_type', "absolute;relative;static", ';', true);\r
137         fillSelect(0, 'positioning_visibility', 'style_positioning_visibility', "inherit;visible;hidden", ';', true);\r
138 \r
139         fillSelect(0, 'positioning_width_measurement', 'style_positioning_width_measurement', defaultMeasurement, ';', true);\r
140         fillSelect(0, 'positioning_height_measurement', 'style_positioning_height_measurement', defaultMeasurement, ';', true);\r
141         fillSelect(0, 'positioning_overflow', 'style_positioning_overflow', "visible;hidden;scroll;auto", ';', true);\r
142 \r
143         fillSelect(0, 'positioning_placement_top_measurement', 'style_positioning_placement_top_measurement', defaultMeasurement, ';', true);\r
144         fillSelect(0, 'positioning_placement_right_measurement', 'style_positioning_placement_right_measurement', defaultMeasurement, ';', true);\r
145         fillSelect(0, 'positioning_placement_bottom_measurement', 'style_positioning_placement_bottom_measurement', defaultMeasurement, ';', true);\r
146         fillSelect(0, 'positioning_placement_left_measurement', 'style_positioning_placement_left_measurement', defaultMeasurement, ';', true);\r
147 \r
148         fillSelect(0, 'positioning_clip_top_measurement', 'style_positioning_clip_top_measurement', defaultMeasurement, ';', true);\r
149         fillSelect(0, 'positioning_clip_right_measurement', 'style_positioning_clip_right_measurement', defaultMeasurement, ';', true);\r
150         fillSelect(0, 'positioning_clip_bottom_measurement', 'style_positioning_clip_bottom_measurement', defaultMeasurement, ';', true);\r
151         fillSelect(0, 'positioning_clip_left_measurement', 'style_positioning_clip_left_measurement', defaultMeasurement, ';', true);\r
152 \r
153         TinyMCE_EditableSelects.init();\r
154         setupFormData();\r
155         showDisabledControls();\r
156 }\r
157 \r
158 function setupFormData() {\r
159         var ce = document.getElementById('container'), f = document.forms[0], s, b, i;\r
160 \r
161         // Setup text fields\r
162 \r
163         selectByValue(f, 'text_font', ce.style.fontFamily, true, true);\r
164         selectByValue(f, 'text_size', getNum(ce.style.fontSize), true, true);\r
165         selectByValue(f, 'text_size_measurement', getMeasurement(ce.style.fontSize));\r
166         selectByValue(f, 'text_weight', ce.style.fontWeight, true, true);\r
167         selectByValue(f, 'text_style', ce.style.fontStyle, true, true);\r
168         selectByValue(f, 'text_lineheight', getNum(ce.style.lineHeight), true, true);\r
169         selectByValue(f, 'text_lineheight_measurement', getMeasurement(ce.style.lineHeight));\r
170         selectByValue(f, 'text_case', ce.style.textTransform, true, true);\r
171         selectByValue(f, 'text_variant', ce.style.fontVariant, true, true);\r
172         f.text_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.color);\r
173         updateColor('text_color_pick', 'text_color');\r
174         f.text_underline.checked = inStr(ce.style.textDecoration, 'underline');\r
175         f.text_overline.checked = inStr(ce.style.textDecoration, 'overline');\r
176         f.text_linethrough.checked = inStr(ce.style.textDecoration, 'line-through');\r
177         f.text_blink.checked = inStr(ce.style.textDecoration, 'blink');\r
178         f.text_none.checked = inStr(ce.style.textDecoration, 'none');\r
179         updateTextDecorations();\r
180 \r
181         // Setup background fields\r
182 \r
183         f.background_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.backgroundColor);\r
184         updateColor('background_color_pick', 'background_color');\r
185         f.background_image.value = ce.style.backgroundImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
186         selectByValue(f, 'background_repeat', ce.style.backgroundRepeat, true, true);\r
187         selectByValue(f, 'background_attachment', ce.style.backgroundAttachment, true, true);\r
188         selectByValue(f, 'background_hpos', getNum(getVal(ce.style.backgroundPosition, 0)), true, true);\r
189         selectByValue(f, 'background_hpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 0)));\r
190         selectByValue(f, 'background_vpos', getNum(getVal(ce.style.backgroundPosition, 1)), true, true);\r
191         selectByValue(f, 'background_vpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 1)));\r
192 \r
193         // Setup block fields\r
194 \r
195         selectByValue(f, 'block_wordspacing', getNum(ce.style.wordSpacing), true, true);\r
196         selectByValue(f, 'block_wordspacing_measurement', getMeasurement(ce.style.wordSpacing));\r
197         selectByValue(f, 'block_letterspacing', getNum(ce.style.letterSpacing), true, true);\r
198         selectByValue(f, 'block_letterspacing_measurement', getMeasurement(ce.style.letterSpacing));\r
199         selectByValue(f, 'block_vertical_alignment', ce.style.verticalAlign, true, true);\r
200         selectByValue(f, 'block_text_align', ce.style.textAlign, true, true);\r
201         f.block_text_indent.value = getNum(ce.style.textIndent);\r
202         selectByValue(f, 'block_text_indent_measurement', getMeasurement(ce.style.textIndent));\r
203         selectByValue(f, 'block_whitespace', ce.style.whiteSpace, true, true);\r
204         selectByValue(f, 'block_display', ce.style.display, true, true);\r
205 \r
206         // Setup box fields\r
207 \r
208         f.box_width.value = getNum(ce.style.width);\r
209         selectByValue(f, 'box_width_measurement', getMeasurement(ce.style.width));\r
210 \r
211         f.box_height.value = getNum(ce.style.height);\r
212         selectByValue(f, 'box_height_measurement', getMeasurement(ce.style.height));\r
213         selectByValue(f, 'box_float', ce.style.cssFloat || ce.style.styleFloat, true, true);\r
214 \r
215         selectByValue(f, 'box_clear', ce.style.clear, true, true);\r
216 \r
217         setupBox(f, ce, 'box_padding', 'padding', '');\r
218         setupBox(f, ce, 'box_margin', 'margin', '');\r
219 \r
220         // Setup border fields\r
221 \r
222         setupBox(f, ce, 'border_style', 'border', 'Style');\r
223         setupBox(f, ce, 'border_width', 'border', 'Width');\r
224         setupBox(f, ce, 'border_color', 'border', 'Color');\r
225 \r
226         updateColor('border_color_top_pick', 'border_color_top');\r
227         updateColor('border_color_right_pick', 'border_color_right');\r
228         updateColor('border_color_bottom_pick', 'border_color_bottom');\r
229         updateColor('border_color_left_pick', 'border_color_left');\r
230 \r
231         f.elements.border_color_top.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_top.value);\r
232         f.elements.border_color_right.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_right.value);\r
233         f.elements.border_color_bottom.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_bottom.value);\r
234         f.elements.border_color_left.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_left.value);\r
235 \r
236         // Setup list fields\r
237 \r
238         selectByValue(f, 'list_type', ce.style.listStyleType, true, true);\r
239         selectByValue(f, 'list_position', ce.style.listStylePosition, true, true);\r
240         f.list_bullet_image.value = ce.style.listStyleImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
241 \r
242         // Setup box fields\r
243 \r
244         selectByValue(f, 'positioning_type', ce.style.position, true, true);\r
245         selectByValue(f, 'positioning_visibility', ce.style.visibility, true, true);\r
246         selectByValue(f, 'positioning_overflow', ce.style.overflow, true, true);\r
247         f.positioning_zindex.value = ce.style.zIndex ? ce.style.zIndex : "";\r
248 \r
249         f.positioning_width.value = getNum(ce.style.width);\r
250         selectByValue(f, 'positioning_width_measurement', getMeasurement(ce.style.width));\r
251 \r
252         f.positioning_height.value = getNum(ce.style.height);\r
253         selectByValue(f, 'positioning_height_measurement', getMeasurement(ce.style.height));\r
254 \r
255         setupBox(f, ce, 'positioning_placement', '', '', ['top', 'right', 'bottom', 'left']);\r
256 \r
257         s = ce.style.clip.replace(new RegExp("rect\\('?([^']*)'?\\)", 'gi'), "$1");\r
258         s = s.replace(/,/g, ' ');\r
259 \r
260         if (!hasEqualValues([getVal(s, 0), getVal(s, 1), getVal(s, 2), getVal(s, 3)])) {\r
261                 f.positioning_clip_top.value = getNum(getVal(s, 0));\r
262                 selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0)));\r
263                 f.positioning_clip_right.value = getNum(getVal(s, 1));\r
264                 selectByValue(f, 'positioning_clip_right_measurement', getMeasurement(getVal(s, 1)));\r
265                 f.positioning_clip_bottom.value = getNum(getVal(s, 2));\r
266                 selectByValue(f, 'positioning_clip_bottom_measurement', getMeasurement(getVal(s, 2)));\r
267                 f.positioning_clip_left.value = getNum(getVal(s, 3));\r
268                 selectByValue(f, 'positioning_clip_left_measurement', getMeasurement(getVal(s, 3)));\r
269         } else {\r
270                 f.positioning_clip_top.value = getNum(getVal(s, 0));\r
271                 selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0)));\r
272                 f.positioning_clip_right.value = f.positioning_clip_bottom.value = f.positioning_clip_left.value;\r
273         }\r
274 \r
275 //      setupBox(f, ce, '', 'border', 'Color');\r
276 }\r
277 \r
278 function getMeasurement(s) {\r
279         return s.replace(/^([0-9.]+)(.*)$/, "$2");\r
280 }\r
281 \r
282 function getNum(s) {\r
283         if (new RegExp('^(?:[0-9.]+)(?:[a-z%]+)$', 'gi').test(s))\r
284                 return s.replace(/[^0-9.]/g, '');\r
285 \r
286         return s;\r
287 }\r
288 \r
289 function inStr(s, n) {\r
290         return new RegExp(n, 'gi').test(s);\r
291 }\r
292 \r
293 function getVal(s, i) {\r
294         var a = s.split(' ');\r
295 \r
296         if (a.length > 1)\r
297                 return a[i];\r
298 \r
299         return "";\r
300 }\r
301 \r
302 function setValue(f, n, v) {\r
303         if (f.elements[n].type == "text")\r
304                 f.elements[n].value = v;\r
305         else\r
306                 selectByValue(f, n, v, true, true);\r
307 }\r
308 \r
309 function setupBox(f, ce, fp, pr, sf, b) {\r
310         if (typeof(b) == "undefined")\r
311                 b = ['Top', 'Right', 'Bottom', 'Left'];\r
312 \r
313         if (isSame(ce, pr, sf, b)) {\r
314                 f.elements[fp + "_same"].checked = true;\r
315 \r
316                 setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf]));\r
317                 f.elements[fp + "_top"].disabled = false;\r
318 \r
319                 f.elements[fp + "_right"].value = "";\r
320                 f.elements[fp + "_right"].disabled = true;\r
321                 f.elements[fp + "_bottom"].value = "";\r
322                 f.elements[fp + "_bottom"].disabled = true;\r
323                 f.elements[fp + "_left"].value = "";\r
324                 f.elements[fp + "_left"].disabled = true;\r
325 \r
326                 if (f.elements[fp + "_top_measurement"]) {\r
327                         selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf]));\r
328                         f.elements[fp + "_left_measurement"].disabled = true;\r
329                         f.elements[fp + "_bottom_measurement"].disabled = true;\r
330                         f.elements[fp + "_right_measurement"].disabled = true;\r
331                 }\r
332         } else {\r
333                 f.elements[fp + "_same"].checked = false;\r
334 \r
335                 setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf]));\r
336                 f.elements[fp + "_top"].disabled = false;\r
337 \r
338                 setValue(f, fp + "_right", getNum(ce.style[pr + b[1] + sf]));\r
339                 f.elements[fp + "_right"].disabled = false;\r
340 \r
341                 setValue(f, fp + "_bottom", getNum(ce.style[pr + b[2] + sf]));\r
342                 f.elements[fp + "_bottom"].disabled = false;\r
343 \r
344                 setValue(f, fp + "_left", getNum(ce.style[pr + b[3] + sf]));\r
345                 f.elements[fp + "_left"].disabled = false;\r
346 \r
347                 if (f.elements[fp + "_top_measurement"]) {\r
348                         selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf]));\r
349                         selectByValue(f, fp + '_right_measurement', getMeasurement(ce.style[pr + b[1] + sf]));\r
350                         selectByValue(f, fp + '_bottom_measurement', getMeasurement(ce.style[pr + b[2] + sf]));\r
351                         selectByValue(f, fp + '_left_measurement', getMeasurement(ce.style[pr + b[3] + sf]));\r
352                         f.elements[fp + "_left_measurement"].disabled = false;\r
353                         f.elements[fp + "_bottom_measurement"].disabled = false;\r
354                         f.elements[fp + "_right_measurement"].disabled = false;\r
355                 }\r
356         }\r
357 }\r
358 \r
359 function isSame(e, pr, sf, b) {\r
360         var a = [], i, x;\r
361 \r
362         if (typeof(b) == "undefined")\r
363                 b = ['Top', 'Right', 'Bottom', 'Left'];\r
364 \r
365         if (typeof(sf) == "undefined" || sf == null)\r
366                 sf = "";\r
367 \r
368         a[0] = e.style[pr + b[0] + sf];\r
369         a[1] = e.style[pr + b[1] + sf];\r
370         a[2] = e.style[pr + b[2] + sf];\r
371         a[3] = e.style[pr + b[3] + sf];\r
372 \r
373         for (i=0; i<a.length; i++) {\r
374                 if (a[i] == null)\r
375                         return false;\r
376 \r
377                 for (x=0; x<a.length; x++) {\r
378                         if (a[x] != a[i])\r
379                                 return false;\r
380                 }\r
381         }\r
382 \r
383         return true;\r
384 };\r
385 \r
386 function hasEqualValues(a) {\r
387         var i, x;\r
388 \r
389         for (i=0; i<a.length; i++) {\r
390                 if (a[i] == null)\r
391                         return false;\r
392 \r
393                 for (x=0; x<a.length; x++) {\r
394                         if (a[x] != a[i])\r
395                                 return false;\r
396                 }\r
397         }\r
398 \r
399         return true;\r
400 }\r
401 \r
402 function toggleApplyAction() {\r
403         applyActionIsInsert = ! applyActionIsInsert;\r
404 }\r
405 \r
406 function applyAction() {\r
407         var ce = document.getElementById('container'), ed = tinyMCEPopup.editor;\r
408 \r
409         generateCSS();\r
410 \r
411         tinyMCEPopup.restoreSelection();\r
412 \r
413         var newStyles = tinyMCEPopup.editor.dom.parseStyle(ce.style.cssText);\r
414 \r
415         if (applyActionIsInsert) {\r
416                 ed.formatter.register('plugin_style', {\r
417                         inline: 'span', styles: existingStyles\r
418                 });\r
419                 ed.formatter.remove('plugin_style');\r
420 \r
421                 ed.formatter.register('plugin_style', {\r
422                         inline: 'span', styles: newStyles\r
423                 });\r
424                 ed.formatter.apply('plugin_style');\r
425         } else {\r
426                 var nodes;\r
427 \r
428                 if (tinyMCEPopup.getWindowArg('applyStyleToBlocks')) {\r
429                         nodes = ed.selection.getSelectedBlocks();\r
430                 }\r
431                 else {\r
432                         nodes = ed.selection.getNode();\r
433                 }\r
434 \r
435                 ed.dom.setAttrib(nodes, 'style', tinyMCEPopup.editor.dom.serializeStyle(newStyles));\r
436         }\r
437 }\r
438 \r
439 function updateAction() {\r
440         applyAction();\r
441         tinyMCEPopup.close();\r
442 }\r
443 \r
444 function generateCSS() {\r
445         var ce = document.getElementById('container'), f = document.forms[0], num = new RegExp('[0-9]+', 'g'), s, t;\r
446 \r
447         ce.style.cssText = "";\r
448 \r
449         // Build text styles\r
450         ce.style.fontFamily = f.text_font.value;\r
451         ce.style.fontSize = f.text_size.value + (isNum(f.text_size.value) ? (f.text_size_measurement.value || 'px') : "");\r
452         ce.style.fontStyle = f.text_style.value;\r
453         ce.style.lineHeight = f.text_lineheight.value + (isNum(f.text_lineheight.value) ? f.text_lineheight_measurement.value : "");\r
454         ce.style.textTransform = f.text_case.value;\r
455         ce.style.fontWeight = f.text_weight.value;\r
456         ce.style.fontVariant = f.text_variant.value;\r
457         ce.style.color = f.text_color.value;\r
458 \r
459         s = "";\r
460         s += f.text_underline.checked ? " underline" : "";\r
461         s += f.text_overline.checked ? " overline" : "";\r
462         s += f.text_linethrough.checked ? " line-through" : "";\r
463         s += f.text_blink.checked ? " blink" : "";\r
464         s = s.length > 0 ? s.substring(1) : s;\r
465 \r
466         if (f.text_none.checked)\r
467                 s = "none";\r
468 \r
469         ce.style.textDecoration = s;\r
470 \r
471         // Build background styles\r
472 \r
473         ce.style.backgroundColor = f.background_color.value;\r
474         ce.style.backgroundImage = f.background_image.value != "" ? "url(" + f.background_image.value + ")" : "";\r
475         ce.style.backgroundRepeat = f.background_repeat.value;\r
476         ce.style.backgroundAttachment = f.background_attachment.value;\r
477 \r
478         if (f.background_hpos.value != "") {\r
479                 s = "";\r
480                 s += f.background_hpos.value + (isNum(f.background_hpos.value) ? f.background_hpos_measurement.value : "") + " ";\r
481                 s += f.background_vpos.value + (isNum(f.background_vpos.value) ? f.background_vpos_measurement.value : "");\r
482                 ce.style.backgroundPosition = s;\r
483         }\r
484 \r
485         // Build block styles\r
486 \r
487         ce.style.wordSpacing = f.block_wordspacing.value + (isNum(f.block_wordspacing.value) ? f.block_wordspacing_measurement.value : "");\r
488         ce.style.letterSpacing = f.block_letterspacing.value + (isNum(f.block_letterspacing.value) ? f.block_letterspacing_measurement.value : "");\r
489         ce.style.verticalAlign = f.block_vertical_alignment.value;\r
490         ce.style.textAlign = f.block_text_align.value;\r
491         ce.style.textIndent = f.block_text_indent.value + (isNum(f.block_text_indent.value) ? f.block_text_indent_measurement.value : "");\r
492         ce.style.whiteSpace = f.block_whitespace.value;\r
493         ce.style.display = f.block_display.value;\r
494 \r
495         // Build box styles\r
496 \r
497         ce.style.width = f.box_width.value + (isNum(f.box_width.value) ? f.box_width_measurement.value : "");\r
498         ce.style.height = f.box_height.value + (isNum(f.box_height.value) ? f.box_height_measurement.value : "");\r
499         ce.style.styleFloat = f.box_float.value;\r
500         ce.style.cssFloat = f.box_float.value;\r
501 \r
502         ce.style.clear = f.box_clear.value;\r
503 \r
504         if (!f.box_padding_same.checked) {\r
505                 ce.style.paddingTop = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : "");\r
506                 ce.style.paddingRight = f.box_padding_right.value + (isNum(f.box_padding_right.value) ? f.box_padding_right_measurement.value : "");\r
507                 ce.style.paddingBottom = f.box_padding_bottom.value + (isNum(f.box_padding_bottom.value) ? f.box_padding_bottom_measurement.value : "");\r
508                 ce.style.paddingLeft = f.box_padding_left.value + (isNum(f.box_padding_left.value) ? f.box_padding_left_measurement.value : "");\r
509         } else\r
510                 ce.style.padding = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : "");               \r
511 \r
512         if (!f.box_margin_same.checked) {\r
513                 ce.style.marginTop = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : "");\r
514                 ce.style.marginRight = f.box_margin_right.value + (isNum(f.box_margin_right.value) ? f.box_margin_right_measurement.value : "");\r
515                 ce.style.marginBottom = f.box_margin_bottom.value + (isNum(f.box_margin_bottom.value) ? f.box_margin_bottom_measurement.value : "");\r
516                 ce.style.marginLeft = f.box_margin_left.value + (isNum(f.box_margin_left.value) ? f.box_margin_left_measurement.value : "");\r
517         } else\r
518                 ce.style.margin = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : "");           \r
519 \r
520         // Build border styles\r
521 \r
522         if (!f.border_style_same.checked) {\r
523                 ce.style.borderTopStyle = f.border_style_top.value;\r
524                 ce.style.borderRightStyle = f.border_style_right.value;\r
525                 ce.style.borderBottomStyle = f.border_style_bottom.value;\r
526                 ce.style.borderLeftStyle = f.border_style_left.value;\r
527         } else\r
528                 ce.style.borderStyle = f.border_style_top.value;\r
529 \r
530         if (!f.border_width_same.checked) {\r
531                 ce.style.borderTopWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : "");\r
532                 ce.style.borderRightWidth = f.border_width_right.value + (isNum(f.border_width_right.value) ? f.border_width_right_measurement.value : "");\r
533                 ce.style.borderBottomWidth = f.border_width_bottom.value + (isNum(f.border_width_bottom.value) ? f.border_width_bottom_measurement.value : "");\r
534                 ce.style.borderLeftWidth = f.border_width_left.value + (isNum(f.border_width_left.value) ? f.border_width_left_measurement.value : "");\r
535         } else\r
536                 ce.style.borderWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : "");\r
537 \r
538         if (!f.border_color_same.checked) {\r
539                 ce.style.borderTopColor = f.border_color_top.value;\r
540                 ce.style.borderRightColor = f.border_color_right.value;\r
541                 ce.style.borderBottomColor = f.border_color_bottom.value;\r
542                 ce.style.borderLeftColor = f.border_color_left.value;\r
543         } else\r
544                 ce.style.borderColor = f.border_color_top.value;\r
545 \r
546         // Build list styles\r
547 \r
548         ce.style.listStyleType = f.list_type.value;\r
549         ce.style.listStylePosition = f.list_position.value;\r
550         ce.style.listStyleImage = f.list_bullet_image.value != "" ? "url(" + f.list_bullet_image.value + ")" : "";\r
551 \r
552         // Build positioning styles\r
553 \r
554         ce.style.position = f.positioning_type.value;\r
555         ce.style.visibility = f.positioning_visibility.value;\r
556 \r
557         if (ce.style.width == "")\r
558                 ce.style.width = f.positioning_width.value + (isNum(f.positioning_width.value) ? f.positioning_width_measurement.value : "");\r
559 \r
560         if (ce.style.height == "")\r
561                 ce.style.height = f.positioning_height.value + (isNum(f.positioning_height.value) ? f.positioning_height_measurement.value : "");\r
562 \r
563         ce.style.zIndex = f.positioning_zindex.value;\r
564         ce.style.overflow = f.positioning_overflow.value;\r
565 \r
566         if (!f.positioning_placement_same.checked) {\r
567                 ce.style.top = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : "");\r
568                 ce.style.right = f.positioning_placement_right.value + (isNum(f.positioning_placement_right.value) ? f.positioning_placement_right_measurement.value : "");\r
569                 ce.style.bottom = f.positioning_placement_bottom.value + (isNum(f.positioning_placement_bottom.value) ? f.positioning_placement_bottom_measurement.value : "");\r
570                 ce.style.left = f.positioning_placement_left.value + (isNum(f.positioning_placement_left.value) ? f.positioning_placement_left_measurement.value : "");\r
571         } else {\r
572                 s = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : "");\r
573                 ce.style.top = s;\r
574                 ce.style.right = s;\r
575                 ce.style.bottom = s;\r
576                 ce.style.left = s;\r
577         }\r
578 \r
579         if (!f.positioning_clip_same.checked) {\r
580                 s = "rect(";\r
581                 s += (isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto") + " ";\r
582                 s += (isNum(f.positioning_clip_right.value) ? f.positioning_clip_right.value + f.positioning_clip_right_measurement.value : "auto") + " ";\r
583                 s += (isNum(f.positioning_clip_bottom.value) ? f.positioning_clip_bottom.value + f.positioning_clip_bottom_measurement.value : "auto") + " ";\r
584                 s += (isNum(f.positioning_clip_left.value) ? f.positioning_clip_left.value + f.positioning_clip_left_measurement.value : "auto");\r
585                 s += ")";\r
586 \r
587                 if (s != "rect(auto auto auto auto)")\r
588                         ce.style.clip = s;\r
589         } else {\r
590                 s = "rect(";\r
591                 t = isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto";\r
592                 s += t + " ";\r
593                 s += t + " ";\r
594                 s += t + " ";\r
595                 s += t + ")";\r
596 \r
597                 if (s != "rect(auto auto auto auto)")\r
598                         ce.style.clip = s;\r
599         }\r
600 \r
601         ce.style.cssText = ce.style.cssText;\r
602 }\r
603 \r
604 function isNum(s) {\r
605         return new RegExp('[0-9]+', 'g').test(s);\r
606 }\r
607 \r
608 function showDisabledControls() {\r
609         var f = document.forms, i, a;\r
610 \r
611         for (i=0; i<f.length; i++) {\r
612                 for (a=0; a<f[i].elements.length; a++) {\r
613                         if (f[i].elements[a].disabled)\r
614                                 tinyMCEPopup.editor.dom.addClass(f[i].elements[a], "disabled");\r
615                         else\r
616                                 tinyMCEPopup.editor.dom.removeClass(f[i].elements[a], "disabled");\r
617                 }\r
618         }\r
619 }\r
620 \r
621 function fillSelect(f, s, param, dval, sep, em) {\r
622         var i, ar, p, se;\r
623 \r
624         f = document.forms[f];\r
625         sep = typeof(sep) == "undefined" ? ";" : sep;\r
626 \r
627         if (em)\r
628                 addSelectValue(f, s, "", "");\r
629 \r
630         ar = tinyMCEPopup.getParam(param, dval).split(sep);\r
631         for (i=0; i<ar.length; i++) {\r
632                 se = false;\r
633 \r
634                 if (ar[i].charAt(0) == '+') {\r
635                         ar[i] = ar[i].substring(1);\r
636                         se = true;\r
637                 }\r
638 \r
639                 p = ar[i].split('=');\r
640 \r
641                 if (p.length > 1) {\r
642                         addSelectValue(f, s, p[0], p[1]);\r
643 \r
644                         if (se)\r
645                                 selectByValue(f, s, p[1]);\r
646                 } else {\r
647                         addSelectValue(f, s, p[0], p[0]);\r
648 \r
649                         if (se)\r
650                                 selectByValue(f, s, p[0]);\r
651                 }\r
652         }\r
653 }\r
654 \r
655 function toggleSame(ce, pre) {\r
656         var el = document.forms[0].elements, i;\r
657 \r
658         if (ce.checked) {\r
659                 el[pre + "_top"].disabled = false;\r
660                 el[pre + "_right"].disabled = true;\r
661                 el[pre + "_bottom"].disabled = true;\r
662                 el[pre + "_left"].disabled = true;\r
663 \r
664                 if (el[pre + "_top_measurement"]) {\r
665                         el[pre + "_top_measurement"].disabled = false;\r
666                         el[pre + "_right_measurement"].disabled = true;\r
667                         el[pre + "_bottom_measurement"].disabled = true;\r
668                         el[pre + "_left_measurement"].disabled = true;\r
669                 }\r
670         } else {\r
671                 el[pre + "_top"].disabled = false;\r
672                 el[pre + "_right"].disabled = false;\r
673                 el[pre + "_bottom"].disabled = false;\r
674                 el[pre + "_left"].disabled = false;\r
675 \r
676                 if (el[pre + "_top_measurement"]) {\r
677                         el[pre + "_top_measurement"].disabled = false;\r
678                         el[pre + "_right_measurement"].disabled = false;\r
679                         el[pre + "_bottom_measurement"].disabled = false;\r
680                         el[pre + "_left_measurement"].disabled = false;\r
681                 }\r
682         }\r
683 \r
684         showDisabledControls();\r
685 }\r
686 \r
687 function synch(fr, to) {\r
688         var f = document.forms[0];\r
689 \r
690         f.elements[to].value = f.elements[fr].value;\r
691 \r
692         if (f.elements[fr + "_measurement"])\r
693                 selectByValue(f, to + "_measurement", f.elements[fr + "_measurement"].value);\r
694 }\r
695 \r
696 function updateTextDecorations(){\r
697         var el = document.forms[0].elements;\r
698 \r
699         var textDecorations = ["text_underline", "text_overline", "text_linethrough", "text_blink"];\r
700         var noneChecked = el["text_none"].checked;\r
701         tinymce.each(textDecorations, function(id) {\r
702                 el[id].disabled = noneChecked;\r
703                 if (noneChecked) {\r
704                         el[id].checked = false;\r
705                 }\r
706         });\r
707 }\r
708 \r
709 tinyMCEPopup.onInit.add(init);\r