OSDN Git Service

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