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