thomascube
2011-04-20 a9251be2f09fb5f18a85d201c67668c70980efe3
commit | author | age
d9344f 1 tinyMCEPopup.requireLangPack();
S 2
3 var ed;
4
a0109c 5 function init() {
d9344f 6     ed = tinyMCEPopup.editor;
a0109c 7     tinyMCEPopup.resizeToInnerSize();
S 8
9     document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
10     document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');
11     document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor')
12
d9344f 13     var inst = ed;
69d05c 14     var tdElm = ed.dom.getParent(ed.selection.getStart(), "td,th");
a0109c 15     var formObj = document.forms[0];
d9344f 16     var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style"));
a0109c 17
S 18     // Get table cell data
19     var celltype = tdElm.nodeName.toLowerCase();
d9344f 20     var align = ed.dom.getAttrib(tdElm, 'align');
S 21     var valign = ed.dom.getAttrib(tdElm, 'valign');
a0109c 22     var width = trimSize(getStyle(tdElm, 'width', 'width'));
S 23     var height = trimSize(getStyle(tdElm, 'height', 'height'));
24     var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor'));
25     var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor'));
d9344f 26     var className = ed.dom.getAttrib(tdElm, 'class');
2011be 27     var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");
d9344f 28     var id = ed.dom.getAttrib(tdElm, 'id');
S 29     var lang = ed.dom.getAttrib(tdElm, 'lang');
30     var dir = ed.dom.getAttrib(tdElm, 'dir');
31     var scope = ed.dom.getAttrib(tdElm, 'scope');
a0109c 32
S 33     // Setup form
34     addClassesToList('class', 'table_cell_styles');
d9344f 35     TinyMCE_EditableSelects.init();
S 36
69d05c 37     if (!ed.dom.hasClass(tdElm, 'mceSelected')) {
A 38         formObj.bordercolor.value = bordercolor;
39         formObj.bgcolor.value = bgcolor;
40         formObj.backgroundimage.value = backgroundimage;
41         formObj.width.value = width;
42         formObj.height.value = height;
43         formObj.id.value = id;
44         formObj.lang.value = lang;
45         formObj.style.value = ed.dom.serializeStyle(st);
46         selectByValue(formObj, 'align', align);
47         selectByValue(formObj, 'valign', valign);
48         selectByValue(formObj, 'class', className, true, true);
49         selectByValue(formObj, 'celltype', celltype);
50         selectByValue(formObj, 'dir', dir);
51         selectByValue(formObj, 'scope', scope);
a0109c 52
69d05c 53         // Resize some elements
A 54         if (isVisible('backgroundimagebrowser'))
55             document.getElementById('backgroundimage').style.width = '180px';
a0109c 56
69d05c 57         updateColor('bordercolor_pick', 'bordercolor');
A 58         updateColor('bgcolor_pick', 'bgcolor');
59     } else
60         tinyMCEPopup.dom.hide('action');
a0109c 61 }
S 62
63 function updateAction() {
d9344f 64     var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0];
S 65
a0109c 66     tinyMCEPopup.restoreSelection();
69d05c 67     el = ed.selection.getStart();
d9344f 68     tdElm = ed.dom.getParent(el, "td,th");
S 69     trElm = ed.dom.getParent(el, "tr");
70     tableElm = ed.dom.getParent(el, "table");
a0109c 71
69d05c 72     // Cell is selected
A 73     if (ed.dom.hasClass(tdElm, 'mceSelected')) {
74         // Update all selected sells
75         tinymce.each(ed.dom.select('td.mceSelected,th.mceSelected'), function(td) {
76             updateCell(td);
77         });
78
79         ed.addVisual();
80         ed.nodeChanged();
81         inst.execCommand('mceEndUndoLevel');
82         tinyMCEPopup.close();
83         return;
84     }
85
a0109c 86     switch (getSelectValue(formObj, 'action')) {
S 87         case "cell":
88             var celltype = getSelectValue(formObj, 'celltype');
89             var scope = getSelectValue(formObj, 'scope');
90
29da64 91             function doUpdate(s) {
A 92                 if (s) {
93                     updateCell(tdElm);
a0109c 94
29da64 95                     ed.addVisual();
A 96                     ed.nodeChanged();
97                     inst.execCommand('mceEndUndoLevel');
98                     tinyMCEPopup.close();
99                 }
100             };
101
102             if (ed.getParam("accessibility_warnings", 1)) {
103                 if (celltype == "th" && scope == "")
104                     tinyMCEPopup.confirm(ed.getLang('table_dlg.missing_scope', '', true), doUpdate);
105                 else
106                     doUpdate(1);
107
108                 return;
a0109c 109             }
S 110
111             updateCell(tdElm);
112             break;
113
114         case "row":
115             var cell = trElm.firstChild;
116
117             if (cell.nodeName != "TD" && cell.nodeName != "TH")
118                 cell = nextCell(cell);
119
120             do {
121                 cell = updateCell(cell, true);
122             } while ((cell = nextCell(cell)) != null);
123
124             break;
125
126         case "all":
127             var rows = tableElm.getElementsByTagName("tr");
128
129             for (var i=0; i<rows.length; i++) {
130                 var cell = rows[i].firstChild;
131
132                 if (cell.nodeName != "TD" && cell.nodeName != "TH")
133                     cell = nextCell(cell);
134
135                 do {
136                     cell = updateCell(cell, true);
137                 } while ((cell = nextCell(cell)) != null);
138             }
139
140             break;
141     }
142
d9344f 143     ed.addVisual();
S 144     ed.nodeChanged();
a0109c 145     inst.execCommand('mceEndUndoLevel');
S 146     tinyMCEPopup.close();
147 }
148
149 function nextCell(elm) {
150     while ((elm = elm.nextSibling) != null) {
151         if (elm.nodeName == "TD" || elm.nodeName == "TH")
152             return elm;
153     }
154
155     return null;
156 }
157
158 function updateCell(td, skip_id) {
d9344f 159     var inst = ed;
a0109c 160     var formObj = document.forms[0];
S 161     var curCellType = td.nodeName.toLowerCase();
162     var celltype = getSelectValue(formObj, 'celltype');
163     var doc = inst.getDoc();
d9344f 164     var dom = ed.dom;
a0109c 165
S 166     if (!skip_id)
a9251b 167         dom.setAttrib(td, 'id', formObj.id.value);
a0109c 168
a9251b 169     dom.setAttrib(td, 'align', formObj.align.value);
T 170     dom.setAttrib(td, 'vAlign', formObj.valign.value);
171     dom.setAttrib(td, 'lang', formObj.lang.value);
172     dom.setAttrib(td, 'dir', getSelectValue(formObj, 'dir'));
173     dom.setAttrib(td, 'style', ed.dom.serializeStyle(ed.dom.parseStyle(formObj.style.value)));
174     dom.setAttrib(td, 'scope', formObj.scope.value);
175     dom.setAttrib(td, 'class', getSelectValue(formObj, 'class'));
a0109c 176
S 177     // Clear deprecated attributes
d9344f 178     ed.dom.setAttrib(td, 'width', '');
S 179     ed.dom.setAttrib(td, 'height', '');
180     ed.dom.setAttrib(td, 'bgColor', '');
181     ed.dom.setAttrib(td, 'borderColor', '');
182     ed.dom.setAttrib(td, 'background', '');
a0109c 183
S 184     // Set styles
185     td.style.width = getCSSSize(formObj.width.value);
186     td.style.height = getCSSSize(formObj.height.value);
187     if (formObj.bordercolor.value != "") {
188         td.style.borderColor = formObj.bordercolor.value;
189         td.style.borderStyle = td.style.borderStyle == "" ? "solid" : td.style.borderStyle;
190         td.style.borderWidth = td.style.borderWidth == "" ? "1px" : td.style.borderWidth;
191     } else
192         td.style.borderColor = '';
193
194     td.style.backgroundColor = formObj.bgcolor.value;
195
196     if (formObj.backgroundimage.value != "")
197         td.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";
198     else
199         td.style.backgroundImage = '';
200
201     if (curCellType != celltype) {
202         // changing to a different node type
203         var newCell = doc.createElement(celltype);
204
205         for (var c=0; c<td.childNodes.length; c++)
206             newCell.appendChild(td.childNodes[c].cloneNode(1));
207
d9344f 208         for (var a=0; a<td.attributes.length; a++)
S 209             ed.dom.setAttrib(newCell, td.attributes[a].name, ed.dom.getAttrib(td, td.attributes[a].name));
a0109c 210
S 211         td.parentNode.replaceChild(newCell, td);
212         td = newCell;
213     }
d9344f 214
S 215     dom.setAttrib(td, 'style', dom.serializeStyle(dom.parseStyle(td.style.cssText)));
a0109c 216
S 217     return td;
218 }
219
220 function changedBackgroundImage() {
221     var formObj = document.forms[0];
d9344f 222     var st = ed.dom.parseStyle(formObj.style.value);
a0109c 223
S 224     st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
225
d9344f 226     formObj.style.value = ed.dom.serializeStyle(st);
a0109c 227 }
S 228
229 function changedSize() {
230     var formObj = document.forms[0];
d9344f 231     var st = ed.dom.parseStyle(formObj.style.value);
a0109c 232
S 233     var width = formObj.width.value;
234     if (width != "")
235         st['width'] = getCSSSize(width);
236     else
237         st['width'] = "";
238
239     var height = formObj.height.value;
240     if (height != "")
241         st['height'] = getCSSSize(height);
242     else
243         st['height'] = "";
244
d9344f 245     formObj.style.value = ed.dom.serializeStyle(st);
a0109c 246 }
S 247
248 function changedColor() {
249     var formObj = document.forms[0];
d9344f 250     var st = ed.dom.parseStyle(formObj.style.value);
a0109c 251
S 252     st['background-color'] = formObj.bgcolor.value;
253     st['border-color'] = formObj.bordercolor.value;
254
d9344f 255     formObj.style.value = ed.dom.serializeStyle(st);
a0109c 256 }
S 257
258 function changedStyle() {
259     var formObj = document.forms[0];
d9344f 260     var st = ed.dom.parseStyle(formObj.style.value);
a0109c 261
S 262     if (st['background-image'])
263         formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
264     else
265         formObj.backgroundimage.value = '';
266
267     if (st['width'])
268         formObj.width.value = trimSize(st['width']);
269
270     if (st['height'])
271         formObj.height.value = trimSize(st['height']);
272
273     if (st['background-color']) {
274         formObj.bgcolor.value = st['background-color'];
275         updateColor('bgcolor_pick','bgcolor');
276     }
277
278     if (st['border-color']) {
279         formObj.bordercolor.value = st['border-color'];
280         updateColor('bordercolor_pick','bordercolor');
281     }
282 }
d9344f 283
S 284 tinyMCEPopup.onInit.add(init);