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