thomascube
2006-09-24 3381d45ef674884897efddb1c87a0aa2b777214f
commit | author | age
a0109c 1 var action, orgTableWidth, orgTableHeight;
S 2
3 function insertTable() {
4     var formObj = document.forms[0];
5     var inst = tinyMCE.selectedInstance;
6     var cols = 2, rows = 2, border = 0, cellpadding = -1, cellspacing = -1, align, width, height, className;
7     var html = '';
8     var elm = tinyMCE.tableElm;
9     var cellLimit, rowLimit, colLimit;
10
11     tinyMCEPopup.restoreSelection();
12
13     // Get form data
14     cols = formObj.elements['cols'].value;
15     rows = formObj.elements['rows'].value;
16     border = formObj.elements['border'].value != "" ? formObj.elements['border'].value  : 0;
17     cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : "";
18     cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : "";
19     align = formObj.elements['align'].options[formObj.elements['align'].selectedIndex].value;
20     width = formObj.elements['width'].value;
21     height = formObj.elements['height'].value;
22     bordercolor = formObj.elements['bordercolor'].value;
23     bgcolor = formObj.elements['bgcolor'].value;
24     className = formObj.elements['class'].options[formObj.elements['class'].selectedIndex].value;
25     id = formObj.elements['id'].value;
26     summary = formObj.elements['summary'].value;
27     style = formObj.elements['style'].value;
28     dir = formObj.elements['dir'].value;
29     lang = formObj.elements['lang'].value;
30     background = formObj.elements['backgroundimage'].value;
31
32     cellLimit = tinyMCE.getParam('table_cell_limit', false);
33     rowLimit = tinyMCE.getParam('table_row_limit', false);
34     colLimit = tinyMCE.getParam('table_col_limit', false);
35
36     // Validate table size
37     if (colLimit && cols > colLimit) {
38         alert(tinyMCE.getLang('lang_table_col_limit', '', true, {cols : colLimit}));
39         return false;
40     } else if (rowLimit && rows > rowLimit) {
41         alert(tinyMCE.getLang('lang_table_row_limit', '', true, {rows : rowLimit}));
42         return false;
43     } else if (cellLimit && cols * rows > cellLimit) {
44         alert(tinyMCE.getLang('lang_table_cell_limit', '', true, {cells : cellLimit}));
45         return false;
46     }
47
48     // Update table
49     if (action == "update") {
50         inst.execCommand('mceBeginUndoLevel');
51
52         tinyMCE.setAttrib(elm, 'cellPadding', cellpadding, true);
53         tinyMCE.setAttrib(elm, 'cellSpacing', cellspacing, true);
54         tinyMCE.setAttrib(elm, 'border', border, true);
55         tinyMCE.setAttrib(elm, 'align', align);
56         tinyMCE.setAttrib(elm, 'class', className);
57         tinyMCE.setAttrib(elm, 'style', style);
58         tinyMCE.setAttrib(elm, 'id', id);
59         tinyMCE.setAttrib(elm, 'summary', summary);
60         tinyMCE.setAttrib(elm, 'dir', dir);
61         tinyMCE.setAttrib(elm, 'lang', lang);
62
63         // Not inline styles
64         if (!tinyMCE.getParam("inline_styles"))
65             tinyMCE.setAttrib(elm, 'width', width, true);
66
67         // Remove these since they are not valid XHTML
68         tinyMCE.setAttrib(elm, 'borderColor', '');
69         tinyMCE.setAttrib(elm, 'bgColor', '');
70         tinyMCE.setAttrib(elm, 'background', '');
71         tinyMCE.setAttrib(elm, 'height', '');
72
73         if (background != '')
74             elm.style.backgroundImage = "url('" + background + "')";
75         else
76             elm.style.backgroundImage = '';
77
78         if (tinyMCE.getParam("inline_styles"))
79             elm.style.borderWidth = border + "px";
80
81         if (tinyMCE.getParam("inline_styles")) {
82             if (width != '')
83                 elm.style.width = getCSSSize(width);
84         }
85
86         if (bordercolor != "") {
87             elm.style.borderColor = bordercolor;
88             elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle;
89             elm.style.borderWidth = border == "" ? "1px" : border;
90         } else
91             elm.style.borderColor = '';
92
93         elm.style.backgroundColor = bgcolor;
94         elm.style.height = getCSSSize(height);
95
96         tinyMCE.handleVisualAid(tinyMCE.tableElm, false, inst.visualAid, inst);
97
98         // Fix for stange MSIE align bug
99         tinyMCE.tableElm.outerHTML = tinyMCE.tableElm.outerHTML;
100
101         tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst);
102         tinyMCE.triggerNodeChange();
103         inst.execCommand('mceEndUndoLevel');
104
105         // Repaint if dimensions changed
106         if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight)
107             inst.repaint();
108
109         tinyMCEPopup.close();
110         return true;
111     }
112
113     // Create new table
114     html += '<table';
115
116     html += makeAttrib('id', id);
117     html += makeAttrib('border', border);
118     html += makeAttrib('cellpadding', cellpadding);
119     html += makeAttrib('cellspacing', cellspacing);
120     html += makeAttrib('width', width);
121     //html += makeAttrib('height', height);
122     //html += makeAttrib('bordercolor', bordercolor);
123     //html += makeAttrib('bgcolor', bgcolor);
124     html += makeAttrib('align', align);
125     html += makeAttrib('class', tinyMCE.getVisualAidClass(className, border == 0));
126     html += makeAttrib('style', style);
127     html += makeAttrib('summary', summary);
128     html += makeAttrib('dir', dir);
129     html += makeAttrib('lang', lang);
130
131     html += '>';
132
133     for (var y=0; y<rows; y++) {
134         html += "<tr>";
135
136         for (var x=0; x<cols; x++)
137             html += '<td>&nbsp;</td>';
138
139         html += "</tr>";
140     }
141
142     html += "</table>";
143
144     inst.execCommand('mceBeginUndoLevel');
145     inst.execCommand('mceInsertContent', false, html);
146     tinyMCE.handleVisualAid(inst.getBody(), true, tinyMCE.settings['visual']);
147     inst.execCommand('mceEndUndoLevel');
148
149     tinyMCEPopup.close();
150 }
151
152 function makeAttrib(attrib, value) {
153     var formObj = document.forms[0];
154     var valueElm = formObj.elements[attrib];
155
156     if (typeof(value) == "undefined" || value == null) {
157         value = "";
158
159         if (valueElm)
160             value = valueElm.value;
161     }
162
163     if (value == "")
164         return "";
165
166     // XML encode it
167     value = value.replace(/&/g, '&amp;');
168     value = value.replace(/\"/g, '&quot;');
169     value = value.replace(/</g, '&lt;');
170     value = value.replace(/>/g, '&gt;');
171
172     return ' ' + attrib + '="' + value + '"';
173 }
174
175 function init() {
176     tinyMCEPopup.resizeToInnerSize();
177
178     document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
179     document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
180     document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');
181     document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
182
183     var cols = 2, rows = 2, border = 0, cellpadding = "", cellspacing = "";
184     var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = "";
185     var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "";
186     var inst = tinyMCE.selectedInstance;
187     var formObj = document.forms[0];
188     var elm = tinyMCE.getParentElement(inst.getFocusElement(), "table");
189
190     tinyMCE.tableElm = elm;
191     action = tinyMCE.getWindowArg('action');
192     if (action == null)
193         action = tinyMCE.tableElm ? "update" : "insert";
194
195     if (tinyMCE.tableElm && action != "insert") {
196         var rowsAr = tinyMCE.tableElm.rows;
197         var cols = 0;
198         for (var i=0; i<rowsAr.length; i++)
199             if (rowsAr[i].cells.length > cols)
200                 cols = rowsAr[i].cells.length;
201
202         cols = cols;
203         rows = rowsAr.length;
204
205         st = tinyMCE.parseStyle(tinyMCE.getAttrib(tinyMCE.tableElm, "style"));
206         border = trimSize(getStyle(elm, 'border', 'borderWidth'));
207         cellpadding = tinyMCE.getAttrib(tinyMCE.tableElm, 'cellpadding', "");
208         cellspacing = tinyMCE.getAttrib(tinyMCE.tableElm, 'cellspacing', "");
209         width = trimSize(getStyle(elm, 'width', 'width'));
210         height = trimSize(getStyle(elm, 'height', 'height'));
211         bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor'));
212         bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor'));
213         align = tinyMCE.getAttrib(tinyMCE.tableElm, 'align', align);
214         className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(tinyMCE.tableElm, 'class'), false);
215         id = tinyMCE.getAttrib(tinyMCE.tableElm, 'id');
216         summary = tinyMCE.getAttrib(tinyMCE.tableElm, 'summary');
217         style = tinyMCE.serializeStyle(st);
218         dir = tinyMCE.getAttrib(tinyMCE.tableElm, 'dir');
219         lang = tinyMCE.getAttrib(tinyMCE.tableElm, 'lang');
220         background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
221
222         orgTableWidth = width;
223         orgTableHeight = height;
224
225         action = "update";
226     }
227
228     addClassesToList('class', "table_styles");
229
230     // Update form
231     selectByValue(formObj, 'align', align);
232     selectByValue(formObj, 'class', className);
233     formObj.cols.value = cols;
234     formObj.rows.value = rows;
235     formObj.border.value = border;
236     formObj.cellpadding.value = cellpadding;
237     formObj.cellspacing.value = cellspacing;
238     formObj.width.value = width;
239     formObj.height.value = height;
240     formObj.bordercolor.value = bordercolor;
241     formObj.bgcolor.value = bgcolor;
242     formObj.id.value = id;
243     formObj.summary.value = summary;
244     formObj.style.value = style;
245     formObj.dir.value = dir;
246     formObj.lang.value = lang;
247     formObj.backgroundimage.value = background;
248     formObj.insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true); 
249
250     updateColor('bordercolor_pick', 'bordercolor');
251     updateColor('bgcolor_pick', 'bgcolor');
252
253     // Resize some elements
254     if (isVisible('backgroundimagebrowser'))
255         document.getElementById('backgroundimage').style.width = '180px';
256
257     // Disable some fields in update mode
258     if (action == "update") {
259         formObj.cols.disabled = true;
260         formObj.rows.disabled = true;
261     }
262 }
263
264 function changedSize() {
265     var formObj = document.forms[0];
266     var st = tinyMCE.parseStyle(formObj.style.value);
267
268     var width = formObj.width.value;
269     if (width != "")
270         st['width'] = tinyMCE.getParam("inline_styles") ? getCSSSize(width) : "";
271     else
272         st['width'] = "";
273
274     var height = formObj.height.value;
275     if (height != "")
276         st['height'] = getCSSSize(height);
277     else
278         st['height'] = "";
279
280     formObj.style.value = tinyMCE.serializeStyle(st);
281 }
282
283 function changedBackgroundImage() {
284     var formObj = document.forms[0];
285     var st = tinyMCE.parseStyle(formObj.style.value);
286
287     st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
288
289     formObj.style.value = tinyMCE.serializeStyle(st);
290 }
291
292 function changedBorder() {
293     var formObj = document.forms[0];
294     var st = tinyMCE.parseStyle(formObj.style.value);
295
296     // Update border width if the element has a color
297     if (formObj.border.value != "" && formObj.bordercolor.value != "")
298         st['border-width'] = formObj.border.value + "px";
299
300     formObj.style.value = tinyMCE.serializeStyle(st);
301 }
302
303 function changedColor() {
304     var formObj = document.forms[0];
305     var st = tinyMCE.parseStyle(formObj.style.value);
306
307     st['background-color'] = formObj.bgcolor.value;
308
309     if (formObj.bordercolor.value != "") {
310         st['border-color'] = formObj.bordercolor.value;
311
312         // Add border-width if it's missing
313         if (!st['border-width'])
314             st['border-width'] = formObj.border.value == "" ? "1px" : formObj.border.value + "px";
315     }
316
317     formObj.style.value = tinyMCE.serializeStyle(st);
318 }
319
320 function changedStyle() {
321     var formObj = document.forms[0];
322     var st = tinyMCE.parseStyle(formObj.style.value);
323
324     if (st['background-image'])
325         formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
326     else
327         formObj.backgroundimage.value = '';
328
329     if (st['width'])
330         formObj.width.value = trimSize(st['width']);
331
332     if (st['height'])
333         formObj.height.value = trimSize(st['height']);
334
335     if (st['background-color']) {
336         formObj.bgcolor.value = st['background-color'];
337         updateColor('bgcolor_pick','bgcolor');
338     }
339
340     if (st['border-color']) {
341         formObj.bordercolor.value = st['border-color'];
342         updateColor('bordercolor_pick','bordercolor');
343     }
344 }