cell.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. tinyMCEPopup.requireLangPack();
  2. var ed;
  3. function init() {
  4. ed = tinyMCEPopup.editor;
  5. tinyMCEPopup.resizeToInnerSize();
  6. document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
  7. document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');
  8. document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor')
  9. var inst = ed;
  10. var tdElm = ed.dom.getParent(ed.selection.getNode(), "td,th");
  11. var formObj = document.forms[0];
  12. var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style"));
  13. // Get table cell data
  14. var celltype = tdElm.nodeName.toLowerCase();
  15. var align = ed.dom.getAttrib(tdElm, 'align');
  16. var valign = ed.dom.getAttrib(tdElm, 'valign');
  17. var width = trimSize(getStyle(tdElm, 'width', 'width'));
  18. var height = trimSize(getStyle(tdElm, 'height', 'height'));
  19. var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor'));
  20. var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor'));
  21. var className = ed.dom.getAttrib(tdElm, 'class');
  22. var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");;
  23. var id = ed.dom.getAttrib(tdElm, 'id');
  24. var lang = ed.dom.getAttrib(tdElm, 'lang');
  25. var dir = ed.dom.getAttrib(tdElm, 'dir');
  26. var scope = ed.dom.getAttrib(tdElm, 'scope');
  27. // Setup form
  28. addClassesToList('class', 'table_cell_styles');
  29. TinyMCE_EditableSelects.init();
  30. formObj.bordercolor.value = bordercolor;
  31. formObj.bgcolor.value = bgcolor;
  32. formObj.backgroundimage.value = backgroundimage;
  33. formObj.width.value = width;
  34. formObj.height.value = height;
  35. formObj.id.value = id;
  36. formObj.lang.value = lang;
  37. formObj.style.value = ed.dom.serializeStyle(st);
  38. selectByValue(formObj, 'align', align);
  39. selectByValue(formObj, 'valign', valign);
  40. selectByValue(formObj, 'class', className, true, true);
  41. selectByValue(formObj, 'celltype', celltype);
  42. selectByValue(formObj, 'dir', dir);
  43. selectByValue(formObj, 'scope', scope);
  44. // Resize some elements
  45. if (isVisible('backgroundimagebrowser'))
  46. document.getElementById('backgroundimage').style.width = '180px';
  47. updateColor('bordercolor_pick', 'bordercolor');
  48. updateColor('bgcolor_pick', 'bgcolor');
  49. }
  50. function updateAction() {
  51. var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0];
  52. tinyMCEPopup.restoreSelection();
  53. el = ed.selection.getNode();
  54. tdElm = ed.dom.getParent(el, "td,th");
  55. trElm = ed.dom.getParent(el, "tr");
  56. tableElm = ed.dom.getParent(el, "table");
  57. ed.execCommand('mceBeginUndoLevel');
  58. switch (getSelectValue(formObj, 'action')) {
  59. case "cell":
  60. var celltype = getSelectValue(formObj, 'celltype');
  61. var scope = getSelectValue(formObj, 'scope');
  62. function doUpdate(s) {
  63. if (s) {
  64. updateCell(tdElm);
  65. ed.addVisual();
  66. ed.nodeChanged();
  67. inst.execCommand('mceEndUndoLevel');
  68. tinyMCEPopup.close();
  69. }
  70. };
  71. if (ed.getParam("accessibility_warnings", 1)) {
  72. if (celltype == "th" && scope == "")
  73. tinyMCEPopup.confirm(ed.getLang('table_dlg.missing_scope', '', true), doUpdate);
  74. else
  75. doUpdate(1);
  76. return;
  77. }
  78. updateCell(tdElm);
  79. break;
  80. case "row":
  81. var cell = trElm.firstChild;
  82. if (cell.nodeName != "TD" && cell.nodeName != "TH")
  83. cell = nextCell(cell);
  84. do {
  85. cell = updateCell(cell, true);
  86. } while ((cell = nextCell(cell)) != null);
  87. break;
  88. case "all":
  89. var rows = tableElm.getElementsByTagName("tr");
  90. for (var i=0; i<rows.length; i++) {
  91. var cell = rows[i].firstChild;
  92. if (cell.nodeName != "TD" && cell.nodeName != "TH")
  93. cell = nextCell(cell);
  94. do {
  95. cell = updateCell(cell, true);
  96. } while ((cell = nextCell(cell)) != null);
  97. }
  98. break;
  99. }
  100. ed.addVisual();
  101. ed.nodeChanged();
  102. inst.execCommand('mceEndUndoLevel');
  103. tinyMCEPopup.close();
  104. }
  105. function nextCell(elm) {
  106. while ((elm = elm.nextSibling) != null) {
  107. if (elm.nodeName == "TD" || elm.nodeName == "TH")
  108. return elm;
  109. }
  110. return null;
  111. }
  112. function updateCell(td, skip_id) {
  113. var inst = ed;
  114. var formObj = document.forms[0];
  115. var curCellType = td.nodeName.toLowerCase();
  116. var celltype = getSelectValue(formObj, 'celltype');
  117. var doc = inst.getDoc();
  118. var dom = ed.dom;
  119. if (!skip_id)
  120. td.setAttribute('id', formObj.id.value);
  121. td.setAttribute('align', formObj.align.value);
  122. td.setAttribute('vAlign', formObj.valign.value);
  123. td.setAttribute('lang', formObj.lang.value);
  124. td.setAttribute('dir', getSelectValue(formObj, 'dir'));
  125. td.setAttribute('style', ed.dom.serializeStyle(ed.dom.parseStyle(formObj.style.value)));
  126. td.setAttribute('scope', formObj.scope.value);
  127. ed.dom.setAttrib(td, 'class', getSelectValue(formObj, 'class'));
  128. // Clear deprecated attributes
  129. ed.dom.setAttrib(td, 'width', '');
  130. ed.dom.setAttrib(td, 'height', '');
  131. ed.dom.setAttrib(td, 'bgColor', '');
  132. ed.dom.setAttrib(td, 'borderColor', '');
  133. ed.dom.setAttrib(td, 'background', '');
  134. // Set styles
  135. td.style.width = getCSSSize(formObj.width.value);
  136. td.style.height = getCSSSize(formObj.height.value);
  137. if (formObj.bordercolor.value != "") {
  138. td.style.borderColor = formObj.bordercolor.value;
  139. td.style.borderStyle = td.style.borderStyle == "" ? "solid" : td.style.borderStyle;
  140. td.style.borderWidth = td.style.borderWidth == "" ? "1px" : td.style.borderWidth;
  141. } else
  142. td.style.borderColor = '';
  143. td.style.backgroundColor = formObj.bgcolor.value;
  144. if (formObj.backgroundimage.value != "")
  145. td.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";
  146. else
  147. td.style.backgroundImage = '';
  148. if (curCellType != celltype) {
  149. // changing to a different node type
  150. var newCell = doc.createElement(celltype);
  151. for (var c=0; c<td.childNodes.length; c++)
  152. newCell.appendChild(td.childNodes[c].cloneNode(1));
  153. for (var a=0; a<td.attributes.length; a++)
  154. ed.dom.setAttrib(newCell, td.attributes[a].name, ed.dom.getAttrib(td, td.attributes[a].name));
  155. td.parentNode.replaceChild(newCell, td);
  156. td = newCell;
  157. }
  158. dom.setAttrib(td, 'style', dom.serializeStyle(dom.parseStyle(td.style.cssText)));
  159. return td;
  160. }
  161. function changedBackgroundImage() {
  162. var formObj = document.forms[0];
  163. var st = ed.dom.parseStyle(formObj.style.value);
  164. st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
  165. formObj.style.value = ed.dom.serializeStyle(st);
  166. }
  167. function changedSize() {
  168. var formObj = document.forms[0];
  169. var st = ed.dom.parseStyle(formObj.style.value);
  170. var width = formObj.width.value;
  171. if (width != "")
  172. st['width'] = getCSSSize(width);
  173. else
  174. st['width'] = "";
  175. var height = formObj.height.value;
  176. if (height != "")
  177. st['height'] = getCSSSize(height);
  178. else
  179. st['height'] = "";
  180. formObj.style.value = ed.dom.serializeStyle(st);
  181. }
  182. function changedColor() {
  183. var formObj = document.forms[0];
  184. var st = ed.dom.parseStyle(formObj.style.value);
  185. st['background-color'] = formObj.bgcolor.value;
  186. st['border-color'] = formObj.bordercolor.value;
  187. formObj.style.value = ed.dom.serializeStyle(st);
  188. }
  189. function changedStyle() {
  190. var formObj = document.forms[0];
  191. var st = ed.dom.parseStyle(formObj.style.value);
  192. if (st['background-image'])
  193. formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
  194. else
  195. formObj.backgroundimage.value = '';
  196. if (st['width'])
  197. formObj.width.value = trimSize(st['width']);
  198. if (st['height'])
  199. formObj.height.value = trimSize(st['height']);
  200. if (st['background-color']) {
  201. formObj.bgcolor.value = st['background-color'];
  202. updateColor('bgcolor_pick','bgcolor');
  203. }
  204. if (st['border-color']) {
  205. formObj.bordercolor.value = st['border-color'];
  206. updateColor('bordercolor_pick','bordercolor');
  207. }
  208. }
  209. tinyMCEPopup.onInit.add(init);