]> git.donarmstrong.com Git - roundcube.git/blob - program/js/tiny_mce/plugins/table/js/row.js
Imported Upstream version 0.5.2+dfsg
[roundcube.git] / program / js / 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         switch (action) {\r
84                 case "row":\r
85                         updateRow(trElm);\r
86                         break;\r
87 \r
88                 case "all":\r
89                         var rows = tableElm.getElementsByTagName("tr");\r
90 \r
91                         for (var i=0; i<rows.length; i++)\r
92                                 updateRow(rows[i], true);\r
93 \r
94                         break;\r
95 \r
96                 case "odd":\r
97                 case "even":\r
98                         var rows = tableElm.getElementsByTagName("tr");\r
99 \r
100                         for (var i=0; i<rows.length; i++) {\r
101                                 if ((i % 2 == 0 && action == "odd") || (i % 2 != 0 && action == "even"))\r
102                                         updateRow(rows[i], true, true);\r
103                         }\r
104 \r
105                         break;\r
106         }\r
107 \r
108         inst.addVisual();\r
109         inst.nodeChanged();\r
110         inst.execCommand('mceEndUndoLevel');\r
111         tinyMCEPopup.close();\r
112 }\r
113 \r
114 function updateRow(tr_elm, skip_id, skip_parent) {\r
115         var inst = tinyMCEPopup.editor;\r
116         var formObj = document.forms[0];\r
117         var dom = inst.dom;\r
118         var curRowType = tr_elm.parentNode.nodeName.toLowerCase();\r
119         var rowtype = getSelectValue(formObj, 'rowtype');\r
120         var doc = inst.getDoc();\r
121 \r
122         // Update row element\r
123         if (!skip_id)\r
124                 dom.setAttrib(tr_elm, 'id', formObj.id.value);\r
125 \r
126         dom.setAttrib(tr_elm, 'align', getSelectValue(formObj, 'align'));\r
127         dom.setAttrib(tr_elm, 'vAlign', getSelectValue(formObj, 'valign'));\r
128         dom.setAttrib(tr_elm, 'lang', formObj.lang.value);\r
129         dom.setAttrib(tr_elm, 'dir', getSelectValue(formObj, 'dir'));\r
130         dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));\r
131         dom.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));\r
132 \r
133         // Clear deprecated attributes\r
134         dom.setAttrib(tr_elm, 'background', '');\r
135         dom.setAttrib(tr_elm, 'bgColor', '');\r
136         dom.setAttrib(tr_elm, 'height', '');\r
137 \r
138         // Set styles\r
139         tr_elm.style.height = getCSSSize(formObj.height.value);\r
140         tr_elm.style.backgroundColor = formObj.bgcolor.value;\r
141 \r
142         if (formObj.backgroundimage.value != "")\r
143                 tr_elm.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";\r
144         else\r
145                 tr_elm.style.backgroundImage = '';\r
146 \r
147         // Setup new rowtype\r
148         if (curRowType != rowtype && !skip_parent) {\r
149                 // first, clone the node we are working on\r
150                 var newRow = tr_elm.cloneNode(1);\r
151 \r
152                 // next, find the parent of its new destination (creating it if necessary)\r
153                 var theTable = dom.getParent(tr_elm, "table");\r
154                 var dest = rowtype;\r
155                 var newParent = null;\r
156                 for (var i = 0; i < theTable.childNodes.length; i++) {\r
157                         if (theTable.childNodes[i].nodeName.toLowerCase() == dest)\r
158                                 newParent = theTable.childNodes[i];\r
159                 }\r
160 \r
161                 if (newParent == null) {\r
162                         newParent = doc.createElement(dest);\r
163 \r
164                         if (theTable.firstChild.nodeName == 'CAPTION')\r
165                                 inst.dom.insertAfter(newParent, theTable.firstChild);\r
166                         else\r
167                                 theTable.insertBefore(newParent, theTable.firstChild);\r
168                 }\r
169 \r
170                 // append the row to the new parent\r
171                 newParent.appendChild(newRow);\r
172 \r
173                 // remove the original\r
174                 tr_elm.parentNode.removeChild(tr_elm);\r
175 \r
176                 // set tr_elm to the new node\r
177                 tr_elm = newRow;\r
178         }\r
179 \r
180         dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(tr_elm.style.cssText)));\r
181 }\r
182 \r
183 function changedBackgroundImage() {\r
184         var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
185         var st = dom.parseStyle(formObj.style.value);\r
186 \r
187         st['background-image'] = "url('" + formObj.backgroundimage.value + "')";\r
188 \r
189         formObj.style.value = dom.serializeStyle(st);\r
190 }\r
191 \r
192 function changedStyle() {\r
193         var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
194         var st = dom.parseStyle(formObj.style.value);\r
195 \r
196         if (st['background-image'])\r
197                 formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
198         else\r
199                 formObj.backgroundimage.value = '';\r
200 \r
201         if (st['height'])\r
202                 formObj.height.value = trimSize(st['height']);\r
203 \r
204         if (st['background-color']) {\r
205                 formObj.bgcolor.value = st['background-color'];\r
206                 updateColor('bgcolor_pick','bgcolor');\r
207         }\r
208 }\r
209 \r
210 function changedSize() {\r
211         var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
212         var st = dom.parseStyle(formObj.style.value);\r
213 \r
214         var height = formObj.height.value;\r
215         if (height != "")\r
216                 st['height'] = getCSSSize(height);\r
217         else\r
218                 st['height'] = "";\r
219 \r
220         formObj.style.value = dom.serializeStyle(st);\r
221 }\r
222 \r
223 function changedColor() {\r
224         var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
225         var st = dom.parseStyle(formObj.style.value);\r
226 \r
227         st['background-color'] = formObj.bgcolor.value;\r
228 \r
229         formObj.style.value = dom.serializeStyle(st);\r
230 }\r
231 \r
232 tinyMCEPopup.onInit.add(init);\r