7e188c3f0f37933d3bac325ee666c6b1d8d65828
[atutor.git] / docs / jscripts / 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         tinyMCEPopup.restoreSelection();\r
60         trElm = dom.getParent(inst.selection.getStart(), "tr");\r
61         tableElm = dom.getParent(inst.selection.getStart(), "table");\r
62 \r
63         // Update all selected rows\r
64         if (dom.select('td.mceSelected,th.mceSelected', trElm).length > 0) {\r
65                 tinymce.each(tableElm.rows, function(tr) {\r
66                         var i;\r
67 \r
68                         for (i = 0; i < tr.cells.length; i++) {\r
69                                 if (dom.hasClass(tr.cells[i], 'mceSelected')) {\r
70                                         updateRow(tr, true);\r
71                                         return;\r
72                                 }\r
73                         }\r
74                 });\r
75 \r
76                 inst.addVisual();\r
77                 inst.nodeChanged();\r
78                 inst.execCommand('mceEndUndoLevel');\r
79                 tinyMCEPopup.close();\r
80                 return;\r
81         }\r
82 \r
83         inst.execCommand('mceBeginUndoLevel');\r
84 \r
85         switch (action) {\r
86                 case "row":\r
87                         updateRow(trElm);\r
88                         break;\r
89 \r
90                 case "all":\r
91                         var rows = tableElm.getElementsByTagName("tr");\r
92 \r
93                         for (var i=0; i<rows.length; i++)\r
94                                 updateRow(rows[i], true);\r
95 \r
96                         break;\r
97 \r
98                 case "odd":\r
99                 case "even":\r
100                         var rows = tableElm.getElementsByTagName("tr");\r
101 \r
102                         for (var i=0; i<rows.length; i++) {\r
103                                 if ((i % 2 == 0 && action == "odd") || (i % 2 != 0 && action == "even"))\r
104                                         updateRow(rows[i], true, true);\r
105                         }\r
106 \r
107                         break;\r
108         }\r
109 \r
110         inst.addVisual();\r
111         inst.nodeChanged();\r
112         inst.execCommand('mceEndUndoLevel');\r
113         tinyMCEPopup.close();\r
114 }\r
115 \r
116 function updateRow(tr_elm, skip_id, skip_parent) {\r
117         var inst = tinyMCEPopup.editor;\r
118         var formObj = document.forms[0];\r
119         var dom = inst.dom;\r
120         var curRowType = tr_elm.parentNode.nodeName.toLowerCase();\r
121         var rowtype = getSelectValue(formObj, 'rowtype');\r
122         var doc = inst.getDoc();\r
123 \r
124         // Update row element\r
125         if (!skip_id)\r
126                 tr_elm.setAttribute('id', formObj.id.value);\r
127 \r
128         tr_elm.setAttribute('align', getSelectValue(formObj, 'align'));\r
129         tr_elm.setAttribute('vAlign', getSelectValue(formObj, 'valign'));\r
130         tr_elm.setAttribute('lang', formObj.lang.value);\r
131         tr_elm.setAttribute('dir', getSelectValue(formObj, 'dir'));\r
132         tr_elm.setAttribute('style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));\r
133         dom.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));\r
134 \r
135         // Clear deprecated attributes\r
136         tr_elm.setAttribute('background', '');\r
137         tr_elm.setAttribute('bgColor', '');\r
138         tr_elm.setAttribute('height', '');\r
139 \r
140         // Set styles\r
141         tr_elm.style.height = getCSSSize(formObj.height.value);\r
142         tr_elm.style.backgroundColor = formObj.bgcolor.value;\r
143 \r
144         if (formObj.backgroundimage.value != "")\r
145                 tr_elm.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";\r
146         else\r
147                 tr_elm.style.backgroundImage = '';\r
148 \r
149         // Setup new rowtype\r
150         if (curRowType != rowtype && !skip_parent) {\r
151                 // first, clone the node we are working on\r
152                 var newRow = tr_elm.cloneNode(1);\r
153 \r
154                 // next, find the parent of its new destination (creating it if necessary)\r
155                 var theTable = dom.getParent(tr_elm, "table");\r
156                 var dest = rowtype;\r
157                 var newParent = null;\r
158                 for (var i = 0; i < theTable.childNodes.length; i++) {\r
159                         if (theTable.childNodes[i].nodeName.toLowerCase() == dest)\r
160                                 newParent = theTable.childNodes[i];\r
161                 }\r
162 \r
163                 if (newParent == null) {\r
164                         newParent = doc.createElement(dest);\r
165 \r
166                         if (dest == "thead") {\r
167                                 if (theTable.firstChild.nodeName == 'CAPTION')\r
168                                         inst.dom.insertAfter(newParent, theTable.firstChild);\r
169                                 else\r
170                                         theTable.insertBefore(newParent, theTable.firstChild);\r
171                         } else\r
172                                 theTable.appendChild(newParent);\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