Upgrade TinyMCE to v3.4.5
[citadel.git] / webcit / tiny_mce / plugins / table / js / row.js
1 tinyMCEPopup.requireLangPack();\r
2 \r
3 function init() {\r
4         tinyMCEPopup.resizeToInnerSize();\r
5 \r
6         document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');\r
7         document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');\r
8 \r
9         var inst = tinyMCEPopup.editor;\r
10         var dom = inst.dom;\r
11         var trElm = dom.getParent(inst.selection.getStart(), "tr");\r
12         var formObj = document.forms[0];\r
13         var st = dom.parseStyle(dom.getAttrib(trElm, "style"));\r
14 \r
15         // Get table row data\r
16         var rowtype = trElm.parentNode.nodeName.toLowerCase();\r
17         var align = dom.getAttrib(trElm, 'align');\r
18         var valign = dom.getAttrib(trElm, 'valign');\r
19         var height = trimSize(getStyle(trElm, 'height', 'height'));\r
20         var className = dom.getAttrib(trElm, 'class');\r
21         var bgcolor = convertRGBToHex(getStyle(trElm, 'bgcolor', 'backgroundColor'));\r
22         var backgroundimage = getStyle(trElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");\r
23         var id = dom.getAttrib(trElm, 'id');\r
24         var lang = dom.getAttrib(trElm, 'lang');\r
25         var dir = dom.getAttrib(trElm, 'dir');\r
26 \r
27         selectByValue(formObj, 'rowtype', rowtype);\r
28 \r
29         // Any cells selected\r
30         if (dom.select('td.mceSelected,th.mceSelected', trElm).length == 0) {\r
31                 // Setup form\r
32                 addClassesToList('class', 'table_row_styles');\r
33                 TinyMCE_EditableSelects.init();\r
34 \r
35                 formObj.bgcolor.value = bgcolor;\r
36                 formObj.backgroundimage.value = backgroundimage;\r
37                 formObj.height.value = height;\r
38                 formObj.id.value = id;\r
39                 formObj.lang.value = lang;\r
40                 formObj.style.value = dom.serializeStyle(st);\r
41                 selectByValue(formObj, 'align', align);\r
42                 selectByValue(formObj, 'valign', valign);\r
43                 selectByValue(formObj, 'class', className, true, true);\r
44                 selectByValue(formObj, 'dir', dir);\r
45 \r
46                 // Resize some elements\r
47                 if (isVisible('backgroundimagebrowser'))\r
48                         document.getElementById('backgroundimage').style.width = '180px';\r
49 \r
50                 updateColor('bgcolor_pick', 'bgcolor');\r
51         } else\r
52                 tinyMCEPopup.dom.hide('action');\r
53 }\r
54 \r
55 function updateAction() {\r
56         var inst = tinyMCEPopup.editor, dom = inst.dom, trElm, tableElm, formObj = document.forms[0];\r
57         var action = getSelectValue(formObj, 'action');\r
58 \r
59         if (!AutoValidator.validate(formObj)) {\r
60                 tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');\r
61                 return false;\r
62         }\r
63 \r
64         tinyMCEPopup.restoreSelection();\r
65         trElm = dom.getParent(inst.selection.getStart(), "tr");\r
66         tableElm = dom.getParent(inst.selection.getStart(), "table");\r
67 \r
68         // Update all selected rows\r
69         if (dom.select('td.mceSelected,th.mceSelected', trElm).length > 0) {\r
70                 tinymce.each(tableElm.rows, function(tr) {\r
71                         var i;\r
72 \r
73                         for (i = 0; i < tr.cells.length; i++) {\r
74                                 if (dom.hasClass(tr.cells[i], 'mceSelected')) {\r
75                                         updateRow(tr, true);\r
76                                         return;\r
77                                 }\r
78                         }\r
79                 });\r
80 \r
81                 inst.addVisual();\r
82                 inst.nodeChanged();\r
83                 inst.execCommand('mceEndUndoLevel');\r
84                 tinyMCEPopup.close();\r
85                 return;\r
86         }\r
87 \r
88         switch (action) {\r
89                 case "row":\r
90                         updateRow(trElm);\r
91                         break;\r
92 \r
93                 case "all":\r
94                         var rows = tableElm.getElementsByTagName("tr");\r
95 \r
96                         for (var i=0; i<rows.length; i++)\r
97                                 updateRow(rows[i], true);\r
98 \r
99                         break;\r
100 \r
101                 case "odd":\r
102                 case "even":\r
103                         var rows = tableElm.getElementsByTagName("tr");\r
104 \r
105                         for (var i=0; i<rows.length; i++) {\r
106                                 if ((i % 2 == 0 && action == "odd") || (i % 2 != 0 && action == "even"))\r
107                                         updateRow(rows[i], true, true);\r
108                         }\r
109 \r
110                         break;\r
111         }\r
112 \r
113         inst.addVisual();\r
114         inst.nodeChanged();\r
115         inst.execCommand('mceEndUndoLevel');\r
116         tinyMCEPopup.close();\r
117 }\r
118 \r
119 function updateRow(tr_elm, skip_id, skip_parent) {\r
120         var inst = tinyMCEPopup.editor;\r
121         var formObj = document.forms[0];\r
122         var dom = inst.dom;\r
123         var curRowType = tr_elm.parentNode.nodeName.toLowerCase();\r
124         var rowtype = getSelectValue(formObj, 'rowtype');\r
125         var doc = inst.getDoc();\r
126 \r
127         // Update row element\r
128         if (!skip_id)\r
129                 dom.setAttrib(tr_elm, 'id', formObj.id.value);\r
130 \r
131         dom.setAttrib(tr_elm, 'align', getSelectValue(formObj, 'align'));\r
132         dom.setAttrib(tr_elm, 'vAlign', getSelectValue(formObj, 'valign'));\r
133         dom.setAttrib(tr_elm, 'lang', formObj.lang.value);\r
134         dom.setAttrib(tr_elm, 'dir', getSelectValue(formObj, 'dir'));\r
135         dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));\r
136         dom.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));\r
137 \r
138         // Clear deprecated attributes\r
139         dom.setAttrib(tr_elm, 'background', '');\r
140         dom.setAttrib(tr_elm, 'bgColor', '');\r
141         dom.setAttrib(tr_elm, 'height', '');\r
142 \r
143         // Set styles\r
144         tr_elm.style.height = getCSSSize(formObj.height.value);\r
145         tr_elm.style.backgroundColor = formObj.bgcolor.value;\r
146 \r
147         if (formObj.backgroundimage.value != "")\r
148                 tr_elm.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";\r
149         else\r
150                 tr_elm.style.backgroundImage = '';\r
151 \r
152         // Setup new rowtype\r
153         if (curRowType != rowtype && !skip_parent) {\r
154                 // first, clone the node we are working on\r
155                 var newRow = tr_elm.cloneNode(1);\r
156 \r
157                 // next, find the parent of its new destination (creating it if necessary)\r
158                 var theTable = dom.getParent(tr_elm, "table");\r
159                 var dest = rowtype;\r
160                 var newParent = null;\r
161                 for (var i = 0; i < theTable.childNodes.length; i++) {\r
162                         if (theTable.childNodes[i].nodeName.toLowerCase() == dest)\r
163                                 newParent = theTable.childNodes[i];\r
164                 }\r
165 \r
166                 if (newParent == null) {\r
167                         newParent = doc.createElement(dest);\r
168 \r
169                         if (theTable.firstChild.nodeName == 'CAPTION')\r
170                                 inst.dom.insertAfter(newParent, theTable.firstChild);\r
171                         else\r
172                                 theTable.insertBefore(newParent, theTable.firstChild);\r
173                 }\r
174 \r
175                 // append the row to the new parent\r
176                 newParent.appendChild(newRow);\r
177 \r
178                 // remove the original\r
179                 tr_elm.parentNode.removeChild(tr_elm);\r
180 \r
181                 // set tr_elm to the new node\r
182                 tr_elm = newRow;\r
183         }\r
184 \r
185         dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(tr_elm.style.cssText)));\r
186 }\r
187 \r
188 function changedBackgroundImage() {\r
189         var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
190         var st = dom.parseStyle(formObj.style.value);\r
191 \r
192         st['background-image'] = "url('" + formObj.backgroundimage.value + "')";\r
193 \r
194         formObj.style.value = dom.serializeStyle(st);\r
195 }\r
196 \r
197 function changedStyle() {\r
198         var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
199         var st = dom.parseStyle(formObj.style.value);\r
200 \r
201         if (st['background-image'])\r
202                 formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
203         else\r
204                 formObj.backgroundimage.value = '';\r
205 \r
206         if (st['height'])\r
207                 formObj.height.value = trimSize(st['height']);\r
208 \r
209         if (st['background-color']) {\r
210                 formObj.bgcolor.value = st['background-color'];\r
211                 updateColor('bgcolor_pick','bgcolor');\r
212         }\r
213 }\r
214 \r
215 function changedSize() {\r
216         var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
217         var st = dom.parseStyle(formObj.style.value);\r
218 \r
219         var height = formObj.height.value;\r
220         if (height != "")\r
221                 st['height'] = getCSSSize(height);\r
222         else\r
223                 st['height'] = "";\r
224 \r
225         formObj.style.value = dom.serializeStyle(st);\r
226 }\r
227 \r
228 function changedColor() {\r
229         var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
230         var st = dom.parseStyle(formObj.style.value);\r
231 \r
232         st['background-color'] = formObj.bgcolor.value;\r
233 \r
234         formObj.style.value = dom.serializeStyle(st);\r
235 }\r
236 \r
237 tinyMCEPopup.onInit.add(init);\r