summaryrefslogtreecommitdiff
path: root/public/javascripts/tiny_mce/plugins/table
diff options
context:
space:
mode:
Diffstat (limited to 'public/javascripts/tiny_mce/plugins/table')
-rw-r--r--public/javascripts/tiny_mce/plugins/table/cell.htm183
-rw-r--r--public/javascripts/tiny_mce/plugins/table/css/cell.css17
-rw-r--r--public/javascripts/tiny_mce/plugins/table/css/row.css25
-rw-r--r--public/javascripts/tiny_mce/plugins/table/css/table.css13
-rw-r--r--public/javascripts/tiny_mce/plugins/table/editor_plugin.js1
-rw-r--r--public/javascripts/tiny_mce/plugins/table/editor_plugin_src.js1202
-rw-r--r--public/javascripts/tiny_mce/plugins/table/js/cell.js269
-rw-r--r--public/javascripts/tiny_mce/plugins/table/js/merge_cells.js29
-rw-r--r--public/javascripts/tiny_mce/plugins/table/js/row.js212
-rw-r--r--public/javascripts/tiny_mce/plugins/table/js/table.js440
-rw-r--r--public/javascripts/tiny_mce/plugins/table/langs/en_dlg.js74
-rw-r--r--public/javascripts/tiny_mce/plugins/table/merge_cells.htm37
-rw-r--r--public/javascripts/tiny_mce/plugins/table/row.htm160
-rw-r--r--public/javascripts/tiny_mce/plugins/table/table.htm192
14 files changed, 0 insertions, 2854 deletions
diff --git a/public/javascripts/tiny_mce/plugins/table/cell.htm b/public/javascripts/tiny_mce/plugins/table/cell.htm
deleted file mode 100644
index 1fabc8d..0000000
--- a/public/javascripts/tiny_mce/plugins/table/cell.htm
+++ /dev/null
@@ -1,183 +0,0 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml">
3<head>
4 <title>{#table_dlg.cell_title}</title>
5 <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6 <script type="text/javascript" src="../../utils/mctabs.js"></script>
7 <script type="text/javascript" src="../../utils/form_utils.js"></script>
8 <script type="text/javascript" src="../../utils/editable_selects.js"></script>
9 <script type="text/javascript" src="js/cell.js"></script>
10 <link href="css/cell.css" rel="stylesheet" type="text/css" />
11</head>
12<body id="tablecell" style="display: none">
13 <form onsubmit="updateAction();return false;" action="#">
14 <div class="tabs">
15 <ul>
16 <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
17 <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
18 </ul>
19 </div>
20
21 <div class="panel_wrapper">
22 <div id="general_panel" class="panel current">
23 <fieldset>
24 <legend>{#table_dlg.general_props}</legend>
25
26 <table border="0" cellpadding="4" cellspacing="0">
27 <tr>
28 <td><label for="align">{#table_dlg.align}</label></td>
29 <td>
30 <select id="align" name="align" class="mceFocus">
31 <option value="">{#not_set}</option>
32 <option value="center">{#table_dlg.align_middle}</option>
33 <option value="left">{#table_dlg.align_left}</option>
34 <option value="right">{#table_dlg.align_right}</option>
35 </select>
36 </td>
37
38 <td><label for="celltype">{#table_dlg.cell_type}</label></td>
39 <td>
40 <select id="celltype" name="celltype">
41 <option value="td">{#table_dlg.td}</option>
42 <option value="th">{#table_dlg.th}</option>
43 </select>
44 </td>
45 </tr>
46
47 <tr>
48 <td><label for="valign">{#table_dlg.valign}</label></td>
49 <td>
50 <select id="valign" name="valign">
51 <option value="">{#not_set}</option>
52 <option value="top">{#table_dlg.align_top}</option>
53 <option value="middle">{#table_dlg.align_middle}</option>
54 <option value="bottom">{#table_dlg.align_bottom}</option>
55 </select>
56 </td>
57
58 <td><label for="scope">{#table_dlg.scope}</label></td>
59 <td>
60 <select id="scope" name="scope">
61 <option value="">{#not_set}</option>
62 <option value="col">{#table.col}</option>
63 <option value="row">{#table.row}</option>
64 <option value="rowgroup">{#table_dlg.rowgroup}</option>
65 <option value="colgroup">{#table_dlg.colgroup}</option>
66 </select>
67 </td>
68
69 </tr>
70
71 <tr>
72 <td><label for="width">{#table_dlg.width}</label></td>
73 <td><input id="width" name="width" type="text" value="" size="4" maxlength="4" onchange="changedSize();" /></td>
74
75 <td><label for="height">{#table_dlg.height}</label></td>
76 <td><input id="height" name="height" type="text" value="" size="4" maxlength="4" onchange="changedSize();" /></td>
77 </tr>
78
79 <tr id="styleSelectRow">
80 <td><label for="class">{#class_name}</label></td>
81 <td colspan="3">
82 <select id="class" name="class" class="mceEditableSelect">
83 <option value="" selected="selected">{#not_set}</option>
84 </select>
85 </td>
86 </tr>
87 </table>
88 </fieldset>
89 </div>
90
91 <div id="advanced_panel" class="panel">
92 <fieldset>
93 <legend>{#table_dlg.advanced_props}</legend>
94
95 <table border="0" cellpadding="0" cellspacing="4">
96 <tr>
97 <td class="column1"><label for="id">{#table_dlg.id}</label></td>
98 <td><input id="id" name="id" type="text" value="" style="width: 200px" /></td>
99 </tr>
100
101 <tr>
102 <td><label for="style">{#table_dlg.style}</label></td>
103 <td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>
104 </tr>
105
106 <tr>
107 <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td>
108 <td>
109 <select id="dir" name="dir" style="width: 200px">
110 <option value="">{#not_set}</option>
111 <option value="ltr">{#table_dlg.ltr}</option>
112 <option value="rtl">{#table_dlg.rtl}</option>
113 </select>
114 </td>
115 </tr>
116
117 <tr>
118 <td class="column1"><label for="lang">{#table_dlg.langcode}</label></td>
119 <td>
120 <input id="lang" name="lang" type="text" value="" style="width: 200px" />
121 </td>
122 </tr>
123
124 <tr>
125 <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td>
126 <td>
127 <table border="0" cellpadding="0" cellspacing="0">
128 <tr>
129 <td><input id="backgroundimage" name="backgroundimage" type="text" value="" style="width: 200px" onchange="changedBackgroundImage();" /></td>
130 <td id="backgroundimagebrowsercontainer">&nbsp;</td>
131 </tr>
132 </table>
133 </td>
134 </tr>
135
136 <tr>
137 <td class="column1"><label for="bordercolor">{#table_dlg.bordercolor}</label></td>
138 <td>
139 <table border="0" cellpadding="0" cellspacing="0">
140 <tr>
141 <td><input id="bordercolor" name="bordercolor" type="text" value="" size="9" onchange="updateColor('bordercolor_pick','bordercolor');changedColor();" /></td>
142 <td id="bordercolor_pickcontainer">&nbsp;</td>
143 </tr>
144 </table>
145 </td>
146 </tr>
147
148 <tr>
149 <td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td>
150 <td>
151 <table border="0" cellpadding="0" cellspacing="0">
152 <tr>
153 <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>
154 <td id="bgcolor_pickcontainer">&nbsp;</td>
155 </tr>
156 </table>
157 </td>
158 </tr>
159 </table>
160 </fieldset>
161 </div>
162 </div>
163
164 <div class="mceActionPanel">
165 <div>
166 <select id="action" name="action">
167 <option value="cell">{#table_dlg.cell_cell}</option>
168 <option value="row">{#table_dlg.cell_row}</option>
169 <option value="all">{#table_dlg.cell_all}</option>
170 </select>
171 </div>
172
173 <div style="float: left">
174 <div><input type="submit" id="insert" name="insert" value="{#update}" /></div>
175 </div>
176
177 <div style="float: right">
178 <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
179 </div>
180 </div>
181 </form>
182</body>
183</html>
diff --git a/public/javascripts/tiny_mce/plugins/table/css/cell.css b/public/javascripts/tiny_mce/plugins/table/css/cell.css
deleted file mode 100644
index a067ecd..0000000
--- a/public/javascripts/tiny_mce/plugins/table/css/cell.css
+++ /dev/null
@@ -1,17 +0,0 @@
1/* CSS file for cell dialog in the table plugin */
2
3.panel_wrapper div.current {
4 height: 200px;
5}
6
7.advfield {
8 width: 200px;
9}
10
11#action {
12 margin-bottom: 3px;
13}
14
15#class {
16 width: 150px;
17} \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/table/css/row.css b/public/javascripts/tiny_mce/plugins/table/css/row.css
deleted file mode 100644
index 1f7755d..0000000
--- a/public/javascripts/tiny_mce/plugins/table/css/row.css
+++ /dev/null
@@ -1,25 +0,0 @@
1/* CSS file for row dialog in the table plugin */
2
3.panel_wrapper div.current {
4 height: 200px;
5}
6
7.advfield {
8 width: 200px;
9}
10
11#action {
12 margin-bottom: 3px;
13}
14
15#rowtype,#align,#valign,#class,#height {
16 width: 150px;
17}
18
19#height {
20 width: 50px;
21}
22
23.col2 {
24 padding-left: 20px;
25}
diff --git a/public/javascripts/tiny_mce/plugins/table/css/table.css b/public/javascripts/tiny_mce/plugins/table/css/table.css
deleted file mode 100644
index d11c3f6..0000000
--- a/public/javascripts/tiny_mce/plugins/table/css/table.css
+++ /dev/null
@@ -1,13 +0,0 @@
1/* CSS file for table dialog in the table plugin */
2
3.panel_wrapper div.current {
4 height: 245px;
5}
6
7.advfield {
8 width: 200px;
9}
10
11#class {
12 width: 150px;
13}
diff --git a/public/javascripts/tiny_mce/plugins/table/editor_plugin.js b/public/javascripts/tiny_mce/plugins/table/editor_plugin.js
deleted file mode 100644
index 806ef28..0000000
--- a/public/javascripts/tiny_mce/plugins/table/editor_plugin.js
+++ /dev/null
@@ -1 +0,0 @@
1(function(){var b=tinymce.each;function a(d,e){var f=e.ownerDocument,c=f.createRange(),g;c.setStartBefore(e);c.setEnd(d.endContainer,d.endOffset);g=f.createElement("body");g.appendChild(c.cloneContents());return g.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length==0}tinymce.create("tinymce.plugins.TablePlugin",{init:function(c,d){var e=this;e.editor=c;e.url=d;b([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(f){c.addButton(f[0],{title:f[1],cmd:f[2],ui:f[3]})});if(c.getParam("inline_styles")){c.onPreProcess.add(function(f,h){var g=f.dom;b(g.select("table",h.node),function(j){var i;if(i=g.getAttrib(j,"width")){g.setStyle(j,"width",i);g.setAttrib(j,"width")}if(i=g.getAttrib(j,"height")){g.setStyle(j,"height",i);g.setAttrib(j,"height")}})})}c.onInit.add(function(){if(!tinymce.isIE&&c.getParam("forced_root_block")){function f(){var g=c.getBody().lastChild;if(g&&g.nodeName=="TABLE"){c.dom.add(c.getBody(),"p",null,'<br mce_bogus="1" />')}}if(tinymce.isGecko){c.onKeyDown.add(function(h,j){var g,i,k=h.dom;if(j.keyCode==37||j.keyCode==38){g=h.selection.getRng();i=k.getParent(g.startContainer,"table");if(i&&h.getBody().firstChild==i){if(a(g,i)){g=k.createRng();g.setStartBefore(i);g.setEndBefore(i);h.selection.setRng(g);j.preventDefault()}}}})}c.onKeyUp.add(f);c.onSetContent.add(f);c.onVisualAid.add(f);c.onPreProcess.add(function(g,i){var h=i.node.lastChild;if(h&&h.childNodes.length==1&&h.firstChild.nodeName=="BR"){g.dom.remove(h)}});f()}if(c&&c.plugins.contextmenu){c.plugins.contextmenu.onContextMenu.add(function(i,g,k){var l,j=c.selection,h=j.getNode()||c.getBody();if(c.dom.getParent(k,"td")||c.dom.getParent(k,"th")){g.removeAll();if(h.nodeName=="A"&&!c.dom.getAttrib(h,"name")){g.add({title:"advanced.link_desc",icon:"link",cmd:c.plugins.advlink?"mceAdvLink":"mceLink",ui:true});g.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});g.addSeparator()}if(h.nodeName=="IMG"&&h.className.indexOf("mceItem")==-1){g.add({title:"advanced.image_desc",icon:"image",cmd:c.plugins.advimage?"mceAdvImage":"mceImage",ui:true});g.addSeparator()}g.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",ui:true,value:{action:"insert"}});g.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable",ui:true});g.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete",ui:true});g.addSeparator();l=g.addMenu({title:"table.cell"});l.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps",ui:true});l.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells",ui:true});l.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells",ui:true});l=g.addMenu({title:"table.row"});l.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps",ui:true});l.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});l.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});l.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});l.addSeparator();l.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});l.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});l.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"});l.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"});l=g.addMenu({title:"table.col"});l.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});l.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});l.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{g.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",ui:true})}})}});c.onKeyDown.add(function(f,g){if(g.keyCode==9&&f.dom.getParent(f.selection.getNode(),"TABLE")){if(!tinymce.isGecko&&!tinymce.isOpera){tinyMCE.execInstanceCommand(f.editorId,"mceTableMoveToNextRow",true);return tinymce.dom.Event.cancel(g)}f.undoManager.add()}});if(!tinymce.isIE){if(c.getParam("table_selection",true)){c.onClick.add(function(f,g){g=g.target;if(g.nodeName==="TABLE"){f.selection.select(g)}})}}c.onNodeChange.add(function(g,f,i){var h=g.dom.getParent(i,"td,th,caption");f.setActive("table",i.nodeName==="TABLE"||!!h);if(h&&h.nodeName==="CAPTION"){h=null}f.setDisabled("delete_table",!h);f.setDisabled("delete_col",!h);f.setDisabled("delete_table",!h);f.setDisabled("delete_row",!h);f.setDisabled("col_after",!h);f.setDisabled("col_before",!h);f.setDisabled("row_after",!h);f.setDisabled("row_before",!h);f.setDisabled("row_props",!h);f.setDisabled("cell_props",!h);f.setDisabled("split_cells",!h||(parseInt(g.dom.getAttrib(h,"colspan","1"))<2&&parseInt(g.dom.getAttrib(h,"rowspan","1"))<2));f.setDisabled("merge_cells",!h)});if(!tinymce.isIE){c.onBeforeSetContent.add(function(f,g){if(g.initial){g.content=g.content.replace(/<(td|th)([^>]+|)>\s*<\/(td|th)>/g,tinymce.isOpera?"<$1$2>&nbsp;</$1>":'<$1$2><br mce_bogus="1" /></$1>')}})}},execCommand:function(f,e,g){var d=this.editor,c;switch(f){case"mceTableMoveToNextRow":case"mceInsertTable":case"mceTableRowProps":case"mceTableCellProps":case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":case"mceTableDelete":d.execCommand("mceBeginUndoLevel");this._doExecCommand(f,e,g);d.execCommand("mceEndUndoLevel");return true}return false},getInfo:function(){return{longname:"Tables",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/table",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_doExecCommand:function(s,aa,af){var W=this.editor,av=W,h=this.url;var o=W.selection.getNode();var X=W.dom.getParent(o,"tr");var ar=W.dom.getParent(o,"td,th");var G=W.dom.getParent(o,"table");var l=W.contentWindow.document;var aw=G?G.getAttribute("border"):"";if(X&&ar==null){ar=X.cells[0]}function aq(y,x){for(var ay=0;ay<y.length;ay++){if(y[ay].length>0&&aq(y[ay],x)){return true}if(y[ay]==x){return true}}return false}function ak(x,i){var y;ae=f(G);x=x||0;i=i||0;x=Math.max(p.cellindex+x,0);i=Math.max(p.rowindex+i,0);W.execCommand("mceRepaint");y=e(ae,i,x);if(y){W.selection.select(y.firstChild||y);W.selection.collapse(1)}}function ai(){var i=l.createElement("td");if(!tinymce.isIE){i.innerHTML='<br mce_bogus="1"/>'}}function k(y){var x=W.dom.getAttrib(y,"colspan");var i=W.dom.getAttrib(y,"rowspan");x=x==""?1:parseInt(x);i=i==""?1:parseInt(i);return{colspan:x,rowspan:i}}function am(ay,aA){var i,az;for(az=0;az<ay.length;az++){for(i=0;i<ay[az].length;i++){if(ay[az][i]==aA){return{cellindex:i,rowindex:az}}}}return null}function e(x,y,i){if(x[y]&&x[y][i]){return x[y][i]}return null}function B(aD,ay){var aA=[],y=0,aB,az,ay,aC;for(aB=0;aB<aD.rows.length;aB++){for(az=0;az<aD.rows[aB].cells.length;az++,y++){aA[y]=aD.rows[aB].cells[az]}}for(aB=0;aB<aA.length;aB++){if(aA[aB]==ay){if(aC=aA[aB+1]){return aC}}}}function f(aF){var i=[],aG=aF.rows,aD,aC,az,aA,aE,ay,aB;for(aC=0;aC<aG.length;aC++){for(aD=0;aD<aG[aC].cells.length;aD++){az=aG[aC].cells[aD];aA=k(az);for(aE=aD;i[aC]&&i[aC][aE];aE++){}for(aB=aC;aB<aC+aA.rowspan;aB++){if(!i[aB]){i[aB]=[]}for(ay=aE;ay<aE+aA.colspan;ay++){i[aB][ay]=az}}}}return i}function n(aH,aE,az,ay){var y=f(aH),aG=am(y,az);var aI,aD;if(ay.cells.length!=aE.childNodes.length){aI=aE.childNodes;aD=null;for(var aF=0;az=e(y,aG.rowindex,aF);aF++){var aB=true;var aC=k(az);if(aq(aI,az)){ay.childNodes[aF]._delete=true}else{if((aD==null||az!=aD)&&aC.colspan>1){for(var aA=aF;aA<aF+az.colSpan;aA++){ay.childNodes[aA]._delete=true}}}if((aD==null||az!=aD)&&aC.rowspan>1){az.rowSpan=aC.rowspan+1}aD=az}C(G)}}function P(x,i){while((x=x.previousSibling)!=null){if(x.nodeName==i){return x}}return null}function ag(ay,az){var x=az.split(",");while((ay=ay.nextSibling)!=null){for(var y=0;y<x.length;y++){if(ay.nodeName.toLowerCase()==x[y].toLowerCase()){return ay}}}return null}function C(ay){if(ay.rows==0){return}var y=ay.rows[0];do{var x=ag(y,"TR");if(y._delete){y.parentNode.removeChild(y);continue}var az=y.cells[0];if(az.cells>1){do{var i=ag(az,"TD,TH");if(az._delete){az.parentNode.removeChild(az)}}while((az=i)!=null)}}while((y=x)!=null)}function q(ay,aB,aA){ay.rowSpan=1;var x=ag(aB,"TR");for(var az=1;az<aA&&x;az++){var y=l.createElement("td");if(!tinymce.isIE){y.innerHTML='<br mce_bogus="1"/>'}if(tinymce.isIE){x.insertBefore(y,x.cells(ay.cellIndex))}else{x.insertBefore(y,x.cells[ay.cellIndex])}x=ag(x,"TR")}}function T(aG,aI,aC){var y=f(aI);var ay=aC.cloneNode(false);var aH=am(y,aC.cells[0]);var aD=null;var aB=W.dom.getAttrib(aI,"border");var aA=null;for(var aF=0;aA=e(y,aH.rowindex,aF);aF++){var aE=null;if(aD!=aA){for(var az=0;az<aC.cells.length;az++){if(aA==aC.cells[az]){aE=aA.cloneNode(true);break}}}if(aE==null){aE=aG.createElement("td");if(!tinymce.isIE){aE.innerHTML='<br mce_bogus="1"/>'}}aE.colSpan=1;aE.rowSpan=1;ay.appendChild(aE);aD=aA}return ay}switch(s){case"mceTableMoveToNextRow":var M=B(G,ar);if(!M){W.execCommand("mceTableInsertRowAfter",ar);M=B(G,ar)}W.selection.select(M);W.selection.collapse(true);return true;case"mceTableRowProps":if(X==null){return true}if(aa){W.windowManager.open({url:h+"/row.htm",width:400+parseInt(W.getLang("table.rowprops_delta_width",0)),height:295+parseInt(W.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:h})}return true;case"mceTableCellProps":if(ar==null){return true}if(aa){W.windowManager.open({url:h+"/cell.htm",width:400+parseInt(W.getLang("table.cellprops_delta_width",0)),height:295+parseInt(W.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:h})}return true;case"mceInsertTable":if(aa){W.windowManager.open({url:h+"/table.htm",width:400+parseInt(W.getLang("table.table_delta_width",0)),height:320+parseInt(W.getLang("table.table_delta_height",0)),inline:1},{plugin_url:h,action:af?af.action:0})}return true;case"mceTableDelete":var H=W.dom.getParent(W.selection.getNode(),"table");if(H){H.parentNode.removeChild(H);W.execCommand("mceRepaint")}return true;case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":if(!G){return true}if(X&&G!=X.parentNode){G=X.parentNode}if(G&&X){switch(s){case"mceTableCutRow":if(!X||!ar){return true}W.tableRowClipboard=T(l,G,X);W.execCommand("mceTableDeleteRow");break;case"mceTableCopyRow":if(!X||!ar){return true}W.tableRowClipboard=T(l,G,X);break;case"mceTablePasteRowBefore":if(!X||!ar){return true}var w=W.tableRowClipboard.cloneNode(true);var j=P(X,"TR");if(j!=null){n(G,j,j.cells[0],w)}X.parentNode.insertBefore(w,X);break;case"mceTablePasteRowAfter":if(!X||!ar){return true}var Y=ag(X,"TR");var w=W.tableRowClipboard.cloneNode(true);n(G,X,ar,w);if(Y==null){X.parentNode.appendChild(w)}else{Y.parentNode.insertBefore(w,Y)}break;case"mceTableInsertRowBefore":if(!X||!ar){return true}var ae=f(G);var p=am(ae,ar);var w=l.createElement("tr");var v=null;p.rowindex--;if(p.rowindex<0){p.rowindex=0}for(var ad=0;ar=e(ae,p.rowindex,ad);ad++){if(ar!=v){var F=k(ar);if(F.rowspan==1){var K=l.createElement("td");if(!tinymce.isIE){K.innerHTML='<br mce_bogus="1"/>'}K.colSpan=ar.colSpan;w.appendChild(K)}else{ar.rowSpan=F.rowspan+1}v=ar}}X.parentNode.insertBefore(w,X);ak(0,1);break;case"mceTableInsertRowAfter":if(!X||!ar){return true}var ae=f(G);var p=am(ae,ar);var w=l.createElement("tr");var v=null;for(var ad=0;ar=e(ae,p.rowindex,ad);ad++){if(ar!=v){var F=k(ar);if(F.rowspan==1){var K=l.createElement("td");if(!tinymce.isIE){K.innerHTML='<br mce_bogus="1"/>'}K.colSpan=ar.colSpan;w.appendChild(K)}else{ar.rowSpan=F.rowspan+1}v=ar}}if(w.hasChildNodes()){var Y=ag(X,"TR");if(Y){Y.parentNode.insertBefore(w,Y)}else{G.appendChild(w)}}ak(0,1);break;case"mceTableDeleteRow":if(!X||!ar){return true}var ae=f(G);var p=am(ae,ar);if(ae.length==1&&G.nodeName=="TBODY"){W.dom.remove(W.dom.getParent(G,"table"));return true}var E=X.cells;var Y=ag(X,"TR");for(var ad=0;ad<E.length;ad++){if(E[ad].rowSpan>1){var K=E[ad].cloneNode(true);var F=k(E[ad]);K.rowSpan=F.rowspan-1;var al=Y.cells[ad];if(al==null){Y.appendChild(K)}else{Y.insertBefore(K,al)}}}var v=null;for(var ad=0;ar=e(ae,p.rowindex,ad);ad++){if(ar!=v){var F=k(ar);if(F.rowspan>1){ar.rowSpan=F.rowspan-1}else{X=ar.parentNode;if(X.parentNode){X._delete=true}}v=ar}}C(G);ak(0,-1);break;case"mceTableInsertColBefore":if(!X||!ar){return true}var ae=f(W.dom.getParent(G,"table"));var p=am(ae,ar);var v=null;for(var ab=0;ar=e(ae,ab,p.cellindex);ab++){if(ar!=v){var F=k(ar);if(F.colspan==1){var K=l.createElement(ar.nodeName);if(!tinymce.isIE){K.innerHTML='<br mce_bogus="1"/>'}K.rowSpan=ar.rowSpan;ar.parentNode.insertBefore(K,ar)}else{ar.colSpan++}v=ar}}ak();break;case"mceTableInsertColAfter":if(!X||!ar){return true}var ae=f(W.dom.getParent(G,"table"));var p=am(ae,ar);var v=null;for(var ab=0;ar=e(ae,ab,p.cellindex);ab++){if(ar!=v){var F=k(ar);if(F.colspan==1){var K=l.createElement(ar.nodeName);if(!tinymce.isIE){K.innerHTML='<br mce_bogus="1"/>'}K.rowSpan=ar.rowSpan;var al=ag(ar,"TD,TH");if(al==null){ar.parentNode.appendChild(K)}else{al.parentNode.insertBefore(K,al)}}else{ar.colSpan++}v=ar}}ak(1);break;case"mceTableDeleteCol":if(!X||!ar){return true}var ae=f(G);var p=am(ae,ar);var v=null;if((ae.length>1&&ae[0].length<=1)&&G.nodeName=="TBODY"){W.dom.remove(W.dom.getParent(G,"table"));return true}for(var ab=0;ar=e(ae,ab,p.cellindex);ab++){if(ar!=v){var F=k(ar);if(F.colspan>1){ar.colSpan=F.colspan-1}else{if(ar.parentNode){ar.parentNode.removeChild(ar)}}v=ar}}ak(-1);break;case"mceTableSplitCells":if(!X||!ar){return true}var m=k(ar);var D=m.colspan;var I=m.rowspan;if(D>1||I>1){ar.colSpan=1;for(var an=1;an<D;an++){var K=l.createElement("td");if(!tinymce.isIE){K.innerHTML='<br mce_bogus="1"/>'}X.insertBefore(K,ag(ar,"TD,TH"));if(I>1){q(K,X,I)}}q(ar,X,I)}G=W.dom.getParent(W.selection.getNode(),"table");break;case"mceTableMergeCells":var ap=[];var S=W.selection.getSel();var ae=f(G);if(tinymce.isIE||S.rangeCount==1){if(aa){var u=k(ar);W.windowManager.open({url:h+"/merge_cells.htm",width:240+parseInt(W.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(W.getLang("table.merge_cells_delta_height",0)),inline:1},{action:"update",numcols:u.colspan,numrows:u.rowspan,plugin_url:h});return true}else{var V=parseInt(af.numrows);var d=parseInt(af.numcols);var p=am(ae,ar);if((""+V)=="NaN"){V=1}if((""+d)=="NaN"){d=1}var c=G.rows;for(var ab=p.rowindex;ab<ae.length;ab++){var ah=[];for(var ad=p.cellindex;ad<ae[ab].length;ad++){var g=e(ae,ab,ad);if(g&&!aq(ap,g)&&!aq(ah,g)){var O=am(ae,g);if(O.cellindex<p.cellindex+d&&O.rowindex<p.rowindex+V){ah[ah.length]=g}}}if(ah.length>0){ap[ap.length]=ah}var g=e(ae,p.rowindex,p.cellindex);b(av.dom.select("br",g),function(y,x){if(x>0&&av.dom.getAttrib("mce_bogus")){av.dom.remove(y)}})}}}else{var E=[];var S=W.selection.getSel();var Z=null;var ao=null;var A=-1,ax=-1,z,au;if(S.rangeCount<2){return true}for(var an=0;an<S.rangeCount;an++){var aj=S.getRangeAt(an);var ar=aj.startContainer.childNodes[aj.startOffset];if(!ar){break}if(ar.nodeName=="TD"||ar.nodeName=="TH"){E[E.length]=ar}}var c=G.rows;for(var ab=0;ab<c.length;ab++){var ah=[];for(var ad=0;ad<c[ab].cells.length;ad++){var g=c[ab].cells[ad];for(var an=0;an<E.length;an++){if(g==E[an]){ah[ah.length]=g}}}if(ah.length>0){ap[ap.length]=ah}}var ao=[];var Z=null;for(var ab=0;ab<ae.length;ab++){for(var ad=0;ad<ae[ab].length;ad++){ae[ab][ad]._selected=false;for(var an=0;an<E.length;an++){if(ae[ab][ad]==E[an]){if(A==-1){A=ad;ax=ab}z=ad;au=ab;ae[ab][ad]._selected=true}}}}for(var ab=ax;ab<=au;ab++){for(var ad=A;ad<=z;ad++){if(!ae[ab][ad]._selected){alert("Invalid selection for merge.");return true}}}}var t=1,r=1;var U=-1;for(var ab=0;ab<ap.length;ab++){var J=0;for(var ad=0;ad<ap[ab].length;ad++){var F=k(ap[ab][ad]);J+=F.colspan;if(U!=-1&&F.rowspan!=U){alert("Invalid selection for merge.");return true}U=F.rowspan}if(J>r){r=J}U=-1}var R=-1;for(var ad=0;ad<ap[0].length;ad++){var N=0;for(var ab=0;ab<ap.length;ab++){var F=k(ap[ab][ad]);N+=F.rowspan;if(R!=-1&&F.colspan!=R){alert("Invalid selection for merge.");return true}R=F.colspan}if(N>t){t=N}R=-1}ar=ap[0][0];ar.rowSpan=t;ar.colSpan=r;for(var ab=0;ab<ap.length;ab++){for(var ad=0;ad<ap[ab].length;ad++){var Q=ap[ab][ad].innerHTML;var L=Q.replace(/[ \t\r\n]/g,"");if(L!="<br/>"&&L!="<br>"&&L!='<br mce_bogus="1"/>'&&(ad+ab>0)){ar.innerHTML+=Q}if(ap[ab][ad]!=ar&&!ap[ab][ad]._deleted){var p=am(ae,ap[ab][ad]);var at=ap[ab][ad].parentNode;at.removeChild(ap[ab][ad]);ap[ab][ad]._deleted=true;if(!at.hasChildNodes()){at.parentNode.removeChild(at);var ac=null;for(var ad=0;cellElm=e(ae,p.rowindex,ad);ad++){if(cellElm!=ac&&cellElm.rowSpan>1){cellElm.rowSpan--}ac=cellElm}if(ar.rowSpan>1){ar.rowSpan--}}}}}b(av.dom.select("br",ar),function(y,x){if(x>0&&av.dom.getAttrib(y,"mce_bogus")){av.dom.remove(y)}});break}G=W.dom.getParent(W.selection.getNode(),"table");W.addVisual(G);W.nodeChanged()}return true}return false}});tinymce.PluginManager.add("table",tinymce.plugins.TablePlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/table/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/table/editor_plugin_src.js
deleted file mode 100644
index 87b1055..0000000
--- a/public/javascripts/tiny_mce/plugins/table/editor_plugin_src.js
+++ /dev/null
@@ -1,1202 +0,0 @@
1/**
2 * $Id: editor_plugin_src.js 1209 2009-08-20 12:35:10Z spocke $
3 *
4 * @author Moxiecode
5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
6 */
7
8(function() {
9 var each = tinymce.each;
10
11 // Checks if the selection/caret is at the start of the specified block element
12 function isAtStart(rng, par) {
13 var doc = par.ownerDocument, rng2 = doc.createRange(), elm;
14
15 rng2.setStartBefore(par);
16 rng2.setEnd(rng.endContainer, rng.endOffset);
17
18 elm = doc.createElement('body');
19 elm.appendChild(rng2.cloneContents());
20
21 // Check for text characters of other elements that should be treated as content
22 return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length == 0;
23 };
24
25 tinymce.create('tinymce.plugins.TablePlugin', {
26 init : function(ed, url) {
27 var t = this;
28
29 t.editor = ed;
30 t.url = url;
31
32 // Register buttons
33 each([
34 ['table', 'table.desc', 'mceInsertTable', true],
35 ['delete_table', 'table.del', 'mceTableDelete'],
36 ['delete_col', 'table.delete_col_desc', 'mceTableDeleteCol'],
37 ['delete_row', 'table.delete_row_desc', 'mceTableDeleteRow'],
38 ['col_after', 'table.col_after_desc', 'mceTableInsertColAfter'],
39 ['col_before', 'table.col_before_desc', 'mceTableInsertColBefore'],
40 ['row_after', 'table.row_after_desc', 'mceTableInsertRowAfter'],
41 ['row_before', 'table.row_before_desc', 'mceTableInsertRowBefore'],
42 ['row_props', 'table.row_desc', 'mceTableRowProps', true],
43 ['cell_props', 'table.cell_desc', 'mceTableCellProps', true],
44 ['split_cells', 'table.split_cells_desc', 'mceTableSplitCells', true],
45 ['merge_cells', 'table.merge_cells_desc', 'mceTableMergeCells', true]
46 ], function(c) {
47 ed.addButton(c[0], {title : c[1], cmd : c[2], ui : c[3]});
48 });
49
50 if (ed.getParam('inline_styles')) {
51 // Force move of attribs to styles in strict mode
52 ed.onPreProcess.add(function(ed, o) {
53 var dom = ed.dom;
54
55 each(dom.select('table', o.node), function(n) {
56 var v;
57
58 if (v = dom.getAttrib(n, 'width')) {
59 dom.setStyle(n, 'width', v);
60 dom.setAttrib(n, 'width');
61 }
62
63 if (v = dom.getAttrib(n, 'height')) {
64 dom.setStyle(n, 'height', v);
65 dom.setAttrib(n, 'height');
66 }
67 });
68 });
69 }
70
71 ed.onInit.add(function() {
72 // Fixes an issue on Gecko where it's impossible to place the caret behind a table
73 // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled
74 if (!tinymce.isIE && ed.getParam('forced_root_block')) {
75 function fixTableCaretPos() {
76 var last = ed.getBody().lastChild;
77
78 if (last && last.nodeName == 'TABLE')
79 ed.dom.add(ed.getBody(), 'p', null, '<br mce_bogus="1" />');
80 };
81
82 // Fixes an bug where it's impossible to place the caret before a table in Gecko
83 // this fix solves it by detecting when the caret is at the beginning of such a table
84 // and then manually moves the caret infront of the table
85 if (tinymce.isGecko) {
86 ed.onKeyDown.add(function(ed, e) {
87 var rng, table, dom = ed.dom;
88
89 // On gecko it's not possible to place the caret before a table
90 if (e.keyCode == 37 || e.keyCode == 38) {
91 rng = ed.selection.getRng();
92 table = dom.getParent(rng.startContainer, 'table');
93
94 if (table && ed.getBody().firstChild == table) {
95 if (isAtStart(rng, table)) {
96 rng = dom.createRng();
97
98 rng.setStartBefore(table);
99 rng.setEndBefore(table);
100
101 ed.selection.setRng(rng);
102
103 e.preventDefault();
104 }
105 }
106 }
107 });
108 }
109
110 ed.onKeyUp.add(fixTableCaretPos);
111 ed.onSetContent.add(fixTableCaretPos);
112 ed.onVisualAid.add(fixTableCaretPos);
113
114 ed.onPreProcess.add(function(ed, o) {
115 var last = o.node.lastChild;
116
117 if (last && last.childNodes.length == 1 && last.firstChild.nodeName == 'BR')
118 ed.dom.remove(last);
119 });
120
121 fixTableCaretPos();
122 }
123
124 if (ed && ed.plugins.contextmenu) {
125 ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {
126 var sm, se = ed.selection, el = se.getNode() || ed.getBody();
127
128 if (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th')) {
129 m.removeAll();
130
131 if (el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) {
132 m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});
133 m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});
134 m.addSeparator();
135 }
136
137 if (el.nodeName == 'IMG' && el.className.indexOf('mceItem') == -1) {
138 m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});
139 m.addSeparator();
140 }
141
142 m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', ui : true, value : {action : 'insert'}});
143 m.add({title : 'table.props_desc', icon : 'table_props', cmd : 'mceInsertTable', ui : true});
144 m.add({title : 'table.del', icon : 'delete_table', cmd : 'mceTableDelete', ui : true});
145 m.addSeparator();
146
147 // Cell menu
148 sm = m.addMenu({title : 'table.cell'});
149 sm.add({title : 'table.cell_desc', icon : 'cell_props', cmd : 'mceTableCellProps', ui : true});
150 sm.add({title : 'table.split_cells_desc', icon : 'split_cells', cmd : 'mceTableSplitCells', ui : true});
151 sm.add({title : 'table.merge_cells_desc', icon : 'merge_cells', cmd : 'mceTableMergeCells', ui : true});
152
153 // Row menu
154 sm = m.addMenu({title : 'table.row'});
155 sm.add({title : 'table.row_desc', icon : 'row_props', cmd : 'mceTableRowProps', ui : true});
156 sm.add({title : 'table.row_before_desc', icon : 'row_before', cmd : 'mceTableInsertRowBefore'});
157 sm.add({title : 'table.row_after_desc', icon : 'row_after', cmd : 'mceTableInsertRowAfter'});
158 sm.add({title : 'table.delete_row_desc', icon : 'delete_row', cmd : 'mceTableDeleteRow'});
159 sm.addSeparator();
160 sm.add({title : 'table.cut_row_desc', icon : 'cut', cmd : 'mceTableCutRow'});
161 sm.add({title : 'table.copy_row_desc', icon : 'copy', cmd : 'mceTableCopyRow'});
162 sm.add({title : 'table.paste_row_before_desc', icon : 'paste', cmd : 'mceTablePasteRowBefore'});
163 sm.add({title : 'table.paste_row_after_desc', icon : 'paste', cmd : 'mceTablePasteRowAfter'});
164
165 // Column menu
166 sm = m.addMenu({title : 'table.col'});
167 sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'});
168 sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'});
169 sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'});
170 } else
171 m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', ui : true});
172 });
173 }
174 });
175
176 // Add undo level when new rows are created using the tab key
177 ed.onKeyDown.add(function(ed, e) {
178 if (e.keyCode == 9 && ed.dom.getParent(ed.selection.getNode(), 'TABLE')) {
179 if (!tinymce.isGecko && !tinymce.isOpera) {
180 tinyMCE.execInstanceCommand(ed.editorId, "mceTableMoveToNextRow", true);
181 return tinymce.dom.Event.cancel(e);
182 }
183
184 ed.undoManager.add();
185 }
186 });
187
188 // Select whole table is a table border is clicked
189 if (!tinymce.isIE) {
190 if (ed.getParam('table_selection', true)) {
191 ed.onClick.add(function(ed, e) {
192 e = e.target;
193
194 if (e.nodeName === 'TABLE')
195 ed.selection.select(e);
196 });
197 }
198 }
199
200 ed.onNodeChange.add(function(ed, cm, n) {
201 var p = ed.dom.getParent(n, 'td,th,caption');
202
203 cm.setActive('table', n.nodeName === 'TABLE' || !!p);
204 if (p && p.nodeName === 'CAPTION')
205 p = null;
206
207 cm.setDisabled('delete_table', !p);
208 cm.setDisabled('delete_col', !p);
209 cm.setDisabled('delete_table', !p);
210 cm.setDisabled('delete_row', !p);
211 cm.setDisabled('col_after', !p);
212 cm.setDisabled('col_before', !p);
213 cm.setDisabled('row_after', !p);
214 cm.setDisabled('row_before', !p);
215 cm.setDisabled('row_props', !p);
216 cm.setDisabled('cell_props', !p);
217 cm.setDisabled('split_cells', !p || (parseInt(ed.dom.getAttrib(p, 'colspan', '1')) < 2 && parseInt(ed.dom.getAttrib(p, 'rowspan', '1')) < 2));
218 cm.setDisabled('merge_cells', !p);
219 });
220
221 // Padd empty table cells
222 if (!tinymce.isIE) {
223 ed.onBeforeSetContent.add(function(ed, o) {
224 if (o.initial)
225 o.content = o.content.replace(/<(td|th)([^>]+|)>\s*<\/(td|th)>/g, tinymce.isOpera ? '<$1$2>&nbsp;</$1>' : '<$1$2><br mce_bogus="1" /></$1>');
226 });
227 }
228 },
229
230 execCommand : function(cmd, ui, val) {
231 var ed = this.editor, b;
232
233 // Is table command
234 switch (cmd) {
235 case "mceTableMoveToNextRow":
236 case "mceInsertTable":
237 case "mceTableRowProps":
238 case "mceTableCellProps":
239 case "mceTableSplitCells":
240 case "mceTableMergeCells":
241 case "mceTableInsertRowBefore":
242 case "mceTableInsertRowAfter":
243 case "mceTableDeleteRow":
244 case "mceTableInsertColBefore":
245 case "mceTableInsertColAfter":
246 case "mceTableDeleteCol":
247 case "mceTableCutRow":
248 case "mceTableCopyRow":
249 case "mceTablePasteRowBefore":
250 case "mceTablePasteRowAfter":
251 case "mceTableDelete":
252 ed.execCommand('mceBeginUndoLevel');
253 this._doExecCommand(cmd, ui, val);
254 ed.execCommand('mceEndUndoLevel');
255
256 return true;
257 }
258
259 // Pass to next handler in chain
260 return false;
261 },
262
263 getInfo : function() {
264 return {
265 longname : 'Tables',
266 author : 'Moxiecode Systems AB',
267 authorurl : 'http://tinymce.moxiecode.com',
268 infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/table',
269 version : tinymce.majorVersion + "." + tinymce.minorVersion
270 };
271 },
272
273 // Private plugin internal methods
274
275 /**
276 * Executes the table commands.
277 */
278 _doExecCommand : function(command, user_interface, value) {
279 var inst = this.editor, ed = inst, url = this.url;
280 var focusElm = inst.selection.getNode();
281 var trElm = inst.dom.getParent(focusElm, "tr");
282 var tdElm = inst.dom.getParent(focusElm, "td,th");
283 var tableElm = inst.dom.getParent(focusElm, "table");
284 var doc = inst.contentWindow.document;
285 var tableBorder = tableElm ? tableElm.getAttribute("border") : "";
286
287 // Get first TD if no TD found
288 if (trElm && tdElm == null)
289 tdElm = trElm.cells[0];
290
291 function inArray(ar, v) {
292 for (var i=0; i<ar.length; i++) {
293 // Is array
294 if (ar[i].length > 0 && inArray(ar[i], v))
295 return true;
296
297 // Found value
298 if (ar[i] == v)
299 return true;
300 }
301
302 return false;
303 }
304
305 function select(dx, dy) {
306 var td;
307
308 grid = getTableGrid(tableElm);
309 dx = dx || 0;
310 dy = dy || 0;
311 dx = Math.max(cpos.cellindex + dx, 0);
312 dy = Math.max(cpos.rowindex + dy, 0);
313
314 // Recalculate grid and select
315 inst.execCommand('mceRepaint');
316 td = getCell(grid, dy, dx);
317
318 if (td) {
319 inst.selection.select(td.firstChild || td);
320 inst.selection.collapse(1);
321 }
322 };
323
324 function makeTD() {
325 var newTD = doc.createElement("td");
326
327 if (!tinymce.isIE)
328 newTD.innerHTML = '<br mce_bogus="1"/>';
329 }
330
331 function getColRowSpan(td) {
332 var colspan = inst.dom.getAttrib(td, "colspan");
333 var rowspan = inst.dom.getAttrib(td, "rowspan");
334
335 colspan = colspan == "" ? 1 : parseInt(colspan);
336 rowspan = rowspan == "" ? 1 : parseInt(rowspan);
337
338 return {colspan : colspan, rowspan : rowspan};
339 }
340
341 function getCellPos(grid, td) {
342 var x, y;
343
344 for (y=0; y<grid.length; y++) {
345 for (x=0; x<grid[y].length; x++) {
346 if (grid[y][x] == td)
347 return {cellindex : x, rowindex : y};
348 }
349 }
350
351 return null;
352 }
353
354 function getCell(grid, row, col) {
355 if (grid[row] && grid[row][col])
356 return grid[row][col];
357
358 return null;
359 }
360
361 function getNextCell(table, cell) {
362 var cells = [], x = 0, i, j, cell, nextCell;
363
364 for (i = 0; i < table.rows.length; i++)
365 for (j = 0; j < table.rows[i].cells.length; j++, x++)
366 cells[x] = table.rows[i].cells[j];
367
368 for (i = 0; i < cells.length; i++)
369 if (cells[i] == cell)
370 if (nextCell = cells[i+1])
371 return nextCell;
372 }
373
374 function getTableGrid(table) {
375 var grid = [], rows = table.rows, x, y, td, sd, xstart, x2, y2;
376
377 for (y=0; y<rows.length; y++) {
378 for (x=0; x<rows[y].cells.length; x++) {
379 td = rows[y].cells[x];
380 sd = getColRowSpan(td);
381
382 // All ready filled
383 for (xstart = x; grid[y] && grid[y][xstart]; xstart++) ;
384
385 // Fill box
386 for (y2=y; y2<y+sd['rowspan']; y2++) {
387 if (!grid[y2])
388 grid[y2] = [];
389
390 for (x2=xstart; x2<xstart+sd['colspan']; x2++)
391 grid[y2][x2] = td;
392 }
393 }
394 }
395
396 return grid;
397 }
398
399 function trimRow(table, tr, td, new_tr) {
400 var grid = getTableGrid(table), cpos = getCellPos(grid, td);
401 var cells, lastElm;
402
403 // Time to crop away some
404 if (new_tr.cells.length != tr.childNodes.length) {
405 cells = tr.childNodes;
406 lastElm = null;
407
408 for (var x=0; td = getCell(grid, cpos.rowindex, x); x++) {
409 var remove = true;
410 var sd = getColRowSpan(td);
411
412 // Remove due to rowspan
413 if (inArray(cells, td)) {
414 new_tr.childNodes[x]._delete = true;
415 } else if ((lastElm == null || td != lastElm) && sd.colspan > 1) { // Remove due to colspan
416 for (var i=x; i<x+td.colSpan; i++)
417 new_tr.childNodes[i]._delete = true;
418 }
419
420 if ((lastElm == null || td != lastElm) && sd.rowspan > 1)
421 td.rowSpan = sd.rowspan + 1;
422
423 lastElm = td;
424 }
425
426 deleteMarked(tableElm);
427 }
428 }
429
430 function prevElm(node, name) {
431 while ((node = node.previousSibling) != null) {
432 if (node.nodeName == name)
433 return node;
434 }
435
436 return null;
437 }
438
439 function nextElm(node, names) {
440 var namesAr = names.split(',');
441
442 while ((node = node.nextSibling) != null) {
443 for (var i=0; i<namesAr.length; i++) {
444 if (node.nodeName.toLowerCase() == namesAr[i].toLowerCase() )
445 return node;
446 }
447 }
448
449 return null;
450 }
451
452 function deleteMarked(tbl) {
453 if (tbl.rows == 0)
454 return;
455
456 var tr = tbl.rows[0];
457 do {
458 var next = nextElm(tr, "TR");
459
460 // Delete row
461 if (tr._delete) {
462 tr.parentNode.removeChild(tr);
463 continue;
464 }
465
466 // Delete cells
467 var td = tr.cells[0];
468 if (td.cells > 1) {
469 do {
470 var nexttd = nextElm(td, "TD,TH");
471
472 if (td._delete)
473 td.parentNode.removeChild(td);
474 } while ((td = nexttd) != null);
475 }
476 } while ((tr = next) != null);
477 }
478
479 function addRows(td_elm, tr_elm, rowspan) {
480 // Add rows
481 td_elm.rowSpan = 1;
482 var trNext = nextElm(tr_elm, "TR");
483 for (var i=1; i<rowspan && trNext; i++) {
484 var newTD = doc.createElement("td");
485
486 if (!tinymce.isIE)
487 newTD.innerHTML = '<br mce_bogus="1"/>';
488
489 if (tinymce.isIE)
490 trNext.insertBefore(newTD, trNext.cells(td_elm.cellIndex));
491 else
492 trNext.insertBefore(newTD, trNext.cells[td_elm.cellIndex]);
493
494 trNext = nextElm(trNext, "TR");
495 }
496 }
497
498 function copyRow(doc, table, tr) {
499 var grid = getTableGrid(table);
500 var newTR = tr.cloneNode(false);
501 var cpos = getCellPos(grid, tr.cells[0]);
502 var lastCell = null;
503 var tableBorder = inst.dom.getAttrib(table, "border");
504 var tdElm = null;
505
506 for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {
507 var newTD = null;
508
509 if (lastCell != tdElm) {
510 for (var i=0; i<tr.cells.length; i++) {
511 if (tdElm == tr.cells[i]) {
512 newTD = tdElm.cloneNode(true);
513 break;
514 }
515 }
516 }
517
518 if (newTD == null) {
519 newTD = doc.createElement("td");
520
521 if (!tinymce.isIE)
522 newTD.innerHTML = '<br mce_bogus="1"/>';
523 }
524
525 // Reset col/row span
526 newTD.colSpan = 1;
527 newTD.rowSpan = 1;
528
529 newTR.appendChild(newTD);
530
531 lastCell = tdElm;
532 }
533
534 return newTR;
535 }
536
537 // ---- Commands -----
538
539 // Handle commands
540 switch (command) {
541 case "mceTableMoveToNextRow":
542 var nextCell = getNextCell(tableElm, tdElm);
543
544 if (!nextCell) {
545 inst.execCommand("mceTableInsertRowAfter", tdElm);
546 nextCell = getNextCell(tableElm, tdElm);
547 }
548
549 inst.selection.select(nextCell);
550 inst.selection.collapse(true);
551
552 return true;
553
554 case "mceTableRowProps":
555 if (trElm == null)
556 return true;
557
558 if (user_interface) {
559 inst.windowManager.open({
560 url : url + '/row.htm',
561 width : 400 + parseInt(inst.getLang('table.rowprops_delta_width', 0)),
562 height : 295 + parseInt(inst.getLang('table.rowprops_delta_height', 0)),
563 inline : 1
564 }, {
565 plugin_url : url
566 });
567 }
568
569 return true;
570
571 case "mceTableCellProps":
572 if (tdElm == null)
573 return true;
574
575 if (user_interface) {
576 inst.windowManager.open({
577 url : url + '/cell.htm',
578 width : 400 + parseInt(inst.getLang('table.cellprops_delta_width', 0)),
579 height : 295 + parseInt(inst.getLang('table.cellprops_delta_height', 0)),
580 inline : 1
581 }, {
582 plugin_url : url
583 });
584 }
585
586 return true;
587
588 case "mceInsertTable":
589 if (user_interface) {
590 inst.windowManager.open({
591 url : url + '/table.htm',
592 width : 400 + parseInt(inst.getLang('table.table_delta_width', 0)),
593 height : 320 + parseInt(inst.getLang('table.table_delta_height', 0)),
594 inline : 1
595 }, {
596 plugin_url : url,
597 action : value ? value.action : 0
598 });
599 }
600
601 return true;
602
603 case "mceTableDelete":
604 var table = inst.dom.getParent(inst.selection.getNode(), "table");
605 if (table) {
606 table.parentNode.removeChild(table);
607 inst.execCommand('mceRepaint');
608 }
609 return true;
610
611 case "mceTableSplitCells":
612 case "mceTableMergeCells":
613 case "mceTableInsertRowBefore":
614 case "mceTableInsertRowAfter":
615 case "mceTableDeleteRow":
616 case "mceTableInsertColBefore":
617 case "mceTableInsertColAfter":
618 case "mceTableDeleteCol":
619 case "mceTableCutRow":
620 case "mceTableCopyRow":
621 case "mceTablePasteRowBefore":
622 case "mceTablePasteRowAfter":
623 // No table just return (invalid command)
624 if (!tableElm)
625 return true;
626
627 // Table has a tbody use that reference
628 // Changed logic by ApTest 2005.07.12 (www.aptest.com)
629 // Now lookk at the focused element and take its parentNode. That will be a tbody or a table.
630 if (trElm && tableElm != trElm.parentNode)
631 tableElm = trElm.parentNode;
632
633 if (tableElm && trElm) {
634 switch (command) {
635 case "mceTableCutRow":
636 if (!trElm || !tdElm)
637 return true;
638
639 inst.tableRowClipboard = copyRow(doc, tableElm, trElm);
640 inst.execCommand("mceTableDeleteRow");
641 break;
642
643 case "mceTableCopyRow":
644 if (!trElm || !tdElm)
645 return true;
646
647 inst.tableRowClipboard = copyRow(doc, tableElm, trElm);
648 break;
649
650 case "mceTablePasteRowBefore":
651 if (!trElm || !tdElm)
652 return true;
653
654 var newTR = inst.tableRowClipboard.cloneNode(true);
655
656 var prevTR = prevElm(trElm, "TR");
657 if (prevTR != null)
658 trimRow(tableElm, prevTR, prevTR.cells[0], newTR);
659
660 trElm.parentNode.insertBefore(newTR, trElm);
661 break;
662
663 case "mceTablePasteRowAfter":
664 if (!trElm || !tdElm)
665 return true;
666
667 var nextTR = nextElm(trElm, "TR");
668 var newTR = inst.tableRowClipboard.cloneNode(true);
669
670 trimRow(tableElm, trElm, tdElm, newTR);
671
672 if (nextTR == null)
673 trElm.parentNode.appendChild(newTR);
674 else
675 nextTR.parentNode.insertBefore(newTR, nextTR);
676
677 break;
678
679 case "mceTableInsertRowBefore":
680 if (!trElm || !tdElm)
681 return true;
682
683 var grid = getTableGrid(tableElm);
684 var cpos = getCellPos(grid, tdElm);
685 var newTR = doc.createElement("tr");
686 var lastTDElm = null;
687
688 cpos.rowindex--;
689 if (cpos.rowindex < 0)
690 cpos.rowindex = 0;
691
692 // Create cells
693 for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {
694 if (tdElm != lastTDElm) {
695 var sd = getColRowSpan(tdElm);
696
697 if (sd['rowspan'] == 1) {
698 var newTD = doc.createElement("td");
699
700 if (!tinymce.isIE)
701 newTD.innerHTML = '<br mce_bogus="1"/>';
702
703 newTD.colSpan = tdElm.colSpan;
704
705 newTR.appendChild(newTD);
706 } else
707 tdElm.rowSpan = sd['rowspan'] + 1;
708
709 lastTDElm = tdElm;
710 }
711 }
712
713 trElm.parentNode.insertBefore(newTR, trElm);
714 select(0, 1);
715 break;
716
717 case "mceTableInsertRowAfter":
718 if (!trElm || !tdElm)
719 return true;
720
721 var grid = getTableGrid(tableElm);
722 var cpos = getCellPos(grid, tdElm);
723 var newTR = doc.createElement("tr");
724 var lastTDElm = null;
725
726 // Create cells
727 for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {
728 if (tdElm != lastTDElm) {
729 var sd = getColRowSpan(tdElm);
730
731 if (sd['rowspan'] == 1) {
732 var newTD = doc.createElement("td");
733
734 if (!tinymce.isIE)
735 newTD.innerHTML = '<br mce_bogus="1"/>';
736
737 newTD.colSpan = tdElm.colSpan;
738
739 newTR.appendChild(newTD);
740 } else
741 tdElm.rowSpan = sd['rowspan'] + 1;
742
743 lastTDElm = tdElm;
744 }
745 }
746
747 if (newTR.hasChildNodes()) {
748 var nextTR = nextElm(trElm, "TR");
749 if (nextTR)
750 nextTR.parentNode.insertBefore(newTR, nextTR);
751 else
752 tableElm.appendChild(newTR);
753 }
754
755 select(0, 1);
756 break;
757
758 case "mceTableDeleteRow":
759 if (!trElm || !tdElm)
760 return true;
761
762 var grid = getTableGrid(tableElm);
763 var cpos = getCellPos(grid, tdElm);
764
765 // Only one row, remove whole table
766 if (grid.length == 1 && tableElm.nodeName == 'TBODY') {
767 inst.dom.remove(inst.dom.getParent(tableElm, "table"));
768 return true;
769 }
770
771 // Move down row spanned cells
772 var cells = trElm.cells;
773 var nextTR = nextElm(trElm, "TR");
774 for (var x=0; x<cells.length; x++) {
775 if (cells[x].rowSpan > 1) {
776 var newTD = cells[x].cloneNode(true);
777 var sd = getColRowSpan(cells[x]);
778
779 newTD.rowSpan = sd.rowspan - 1;
780
781 var nextTD = nextTR.cells[x];
782
783 if (nextTD == null)
784 nextTR.appendChild(newTD);
785 else
786 nextTR.insertBefore(newTD, nextTD);
787 }
788 }
789
790 // Delete cells
791 var lastTDElm = null;
792 for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {
793 if (tdElm != lastTDElm) {
794 var sd = getColRowSpan(tdElm);
795
796 if (sd.rowspan > 1) {
797 tdElm.rowSpan = sd.rowspan - 1;
798 } else {
799 trElm = tdElm.parentNode;
800
801 if (trElm.parentNode)
802 trElm._delete = true;
803 }
804
805 lastTDElm = tdElm;
806 }
807 }
808
809 deleteMarked(tableElm);
810
811 select(0, -1);
812 break;
813
814 case "mceTableInsertColBefore":
815 if (!trElm || !tdElm)
816 return true;
817
818 var grid = getTableGrid(inst.dom.getParent(tableElm, "table"));
819 var cpos = getCellPos(grid, tdElm);
820 var lastTDElm = null;
821
822 for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {
823 if (tdElm != lastTDElm) {
824 var sd = getColRowSpan(tdElm);
825
826 if (sd['colspan'] == 1) {
827 var newTD = doc.createElement(tdElm.nodeName);
828
829 if (!tinymce.isIE)
830 newTD.innerHTML = '<br mce_bogus="1"/>';
831
832 newTD.rowSpan = tdElm.rowSpan;
833
834 tdElm.parentNode.insertBefore(newTD, tdElm);
835 } else
836 tdElm.colSpan++;
837
838 lastTDElm = tdElm;
839 }
840 }
841
842 select();
843 break;
844
845 case "mceTableInsertColAfter":
846 if (!trElm || !tdElm)
847 return true;
848
849 var grid = getTableGrid(inst.dom.getParent(tableElm, "table"));
850 var cpos = getCellPos(grid, tdElm);
851 var lastTDElm = null;
852
853 for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {
854 if (tdElm != lastTDElm) {
855 var sd = getColRowSpan(tdElm);
856
857 if (sd['colspan'] == 1) {
858 var newTD = doc.createElement(tdElm.nodeName);
859
860 if (!tinymce.isIE)
861 newTD.innerHTML = '<br mce_bogus="1"/>';
862
863 newTD.rowSpan = tdElm.rowSpan;
864
865 var nextTD = nextElm(tdElm, "TD,TH");
866 if (nextTD == null)
867 tdElm.parentNode.appendChild(newTD);
868 else
869 nextTD.parentNode.insertBefore(newTD, nextTD);
870 } else
871 tdElm.colSpan++;
872
873 lastTDElm = tdElm;
874 }
875 }
876
877 select(1);
878 break;
879
880 case "mceTableDeleteCol":
881 if (!trElm || !tdElm)
882 return true;
883
884 var grid = getTableGrid(tableElm);
885 var cpos = getCellPos(grid, tdElm);
886 var lastTDElm = null;
887
888 // Only one col, remove whole table
889 if ((grid.length > 1 && grid[0].length <= 1) && tableElm.nodeName == 'TBODY') {
890 inst.dom.remove(inst.dom.getParent(tableElm, "table"));
891 return true;
892 }
893
894 // Delete cells
895 for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {
896 if (tdElm != lastTDElm) {
897 var sd = getColRowSpan(tdElm);
898
899 if (sd['colspan'] > 1)
900 tdElm.colSpan = sd['colspan'] - 1;
901 else {
902 if (tdElm.parentNode)
903 tdElm.parentNode.removeChild(tdElm);
904 }
905
906 lastTDElm = tdElm;
907 }
908 }
909
910 select(-1);
911 break;
912
913 case "mceTableSplitCells":
914 if (!trElm || !tdElm)
915 return true;
916
917 var spandata = getColRowSpan(tdElm);
918
919 var colspan = spandata["colspan"];
920 var rowspan = spandata["rowspan"];
921
922 // Needs splitting
923 if (colspan > 1 || rowspan > 1) {
924 // Generate cols
925 tdElm.colSpan = 1;
926 for (var i=1; i<colspan; i++) {
927 var newTD = doc.createElement("td");
928
929 if (!tinymce.isIE)
930 newTD.innerHTML = '<br mce_bogus="1"/>';
931
932 trElm.insertBefore(newTD, nextElm(tdElm, "TD,TH"));
933
934 if (rowspan > 1)
935 addRows(newTD, trElm, rowspan);
936 }
937
938 addRows(tdElm, trElm, rowspan);
939 }
940
941 // Apply visual aids
942 tableElm = inst.dom.getParent(inst.selection.getNode(), "table");
943 break;
944
945 case "mceTableMergeCells":
946 var rows = [];
947 var sel = inst.selection.getSel();
948 var grid = getTableGrid(tableElm);
949
950 if (tinymce.isIE || sel.rangeCount == 1) {
951 if (user_interface) {
952 // Setup template
953 var sp = getColRowSpan(tdElm);
954
955 inst.windowManager.open({
956 url : url + '/merge_cells.htm',
957 width : 240 + parseInt(inst.getLang('table.merge_cells_delta_width', 0)),
958 height : 110 + parseInt(inst.getLang('table.merge_cells_delta_height', 0)),
959 inline : 1
960 }, {
961 action : "update",
962 numcols : sp.colspan,
963 numrows : sp.rowspan,
964 plugin_url : url
965 });
966
967 return true;
968 } else {
969 var numRows = parseInt(value['numrows']);
970 var numCols = parseInt(value['numcols']);
971 var cpos = getCellPos(grid, tdElm);
972
973 if (("" + numRows) == "NaN")
974 numRows = 1;
975
976 if (("" + numCols) == "NaN")
977 numCols = 1;
978
979 // Get rows and cells
980 var tRows = tableElm.rows;
981 for (var y=cpos.rowindex; y<grid.length; y++) {
982 var rowCells = [];
983
984 for (var x=cpos.cellindex; x<grid[y].length; x++) {
985 var td = getCell(grid, y, x);
986
987 if (td && !inArray(rows, td) && !inArray(rowCells, td)) {
988 var cp = getCellPos(grid, td);
989
990 // Within range
991 if (cp.cellindex < cpos.cellindex+numCols && cp.rowindex < cpos.rowindex+numRows)
992 rowCells[rowCells.length] = td;
993 }
994 }
995
996 if (rowCells.length > 0)
997 rows[rows.length] = rowCells;
998
999 var td = getCell(grid, cpos.rowindex, cpos.cellindex);
1000 each(ed.dom.select('br', td), function(e, i) {
1001 if (i > 0 && ed.dom.getAttrib('mce_bogus'))
1002 ed.dom.remove(e);
1003 });
1004 }
1005
1006 //return true;
1007 }
1008 } else {
1009 var cells = [];
1010 var sel = inst.selection.getSel();
1011 var lastTR = null;
1012 var curRow = null;
1013 var x1 = -1, y1 = -1, x2, y2;
1014
1015 // Only one cell selected, whats the point?
1016 if (sel.rangeCount < 2)
1017 return true;
1018
1019 // Get all selected cells
1020 for (var i=0; i<sel.rangeCount; i++) {
1021 var rng = sel.getRangeAt(i);
1022 var tdElm = rng.startContainer.childNodes[rng.startOffset];
1023
1024 if (!tdElm)
1025 break;
1026
1027 if (tdElm.nodeName == "TD" || tdElm.nodeName == "TH")
1028 cells[cells.length] = tdElm;
1029 }
1030
1031 // Get rows and cells
1032 var tRows = tableElm.rows;
1033 for (var y=0; y<tRows.length; y++) {
1034 var rowCells = [];
1035
1036 for (var x=0; x<tRows[y].cells.length; x++) {
1037 var td = tRows[y].cells[x];
1038
1039 for (var i=0; i<cells.length; i++) {
1040 if (td == cells[i]) {
1041 rowCells[rowCells.length] = td;
1042 }
1043 }
1044 }
1045
1046 if (rowCells.length > 0)
1047 rows[rows.length] = rowCells;
1048 }
1049
1050 // Find selected cells in grid and box
1051 var curRow = [];
1052 var lastTR = null;
1053 for (var y=0; y<grid.length; y++) {
1054 for (var x=0; x<grid[y].length; x++) {
1055 grid[y][x]._selected = false;
1056
1057 for (var i=0; i<cells.length; i++) {
1058 if (grid[y][x] == cells[i]) {
1059 // Get start pos
1060 if (x1 == -1) {
1061 x1 = x;
1062 y1 = y;
1063 }
1064
1065 // Get end pos
1066 x2 = x;
1067 y2 = y;
1068
1069 grid[y][x]._selected = true;
1070 }
1071 }
1072 }
1073 }
1074
1075 // Is there gaps, if so deny
1076 for (var y=y1; y<=y2; y++) {
1077 for (var x=x1; x<=x2; x++) {
1078 if (!grid[y][x]._selected) {
1079 alert("Invalid selection for merge.");
1080 return true;
1081 }
1082 }
1083 }
1084 }
1085
1086 // Validate selection and get total rowspan and colspan
1087 var rowSpan = 1, colSpan = 1;
1088
1089 // Validate horizontal and get total colspan
1090 var lastRowSpan = -1;
1091 for (var y=0; y<rows.length; y++) {
1092 var rowColSpan = 0;
1093
1094 for (var x=0; x<rows[y].length; x++) {
1095 var sd = getColRowSpan(rows[y][x]);
1096
1097 rowColSpan += sd['colspan'];
1098
1099 if (lastRowSpan != -1 && sd['rowspan'] != lastRowSpan) {
1100 alert("Invalid selection for merge.");
1101 return true;
1102 }
1103
1104 lastRowSpan = sd['rowspan'];
1105 }
1106
1107 if (rowColSpan > colSpan)
1108 colSpan = rowColSpan;
1109
1110 lastRowSpan = -1;
1111 }
1112
1113 // Validate vertical and get total rowspan
1114 var lastColSpan = -1;
1115 for (var x=0; x<rows[0].length; x++) {
1116 var colRowSpan = 0;
1117
1118 for (var y=0; y<rows.length; y++) {
1119 var sd = getColRowSpan(rows[y][x]);
1120
1121 colRowSpan += sd['rowspan'];
1122
1123 if (lastColSpan != -1 && sd['colspan'] != lastColSpan) {
1124 alert("Invalid selection for merge.");
1125 return true;
1126 }
1127
1128 lastColSpan = sd['colspan'];
1129 }
1130
1131 if (colRowSpan > rowSpan)
1132 rowSpan = colRowSpan;
1133
1134 lastColSpan = -1;
1135 }
1136
1137 // Setup td
1138 tdElm = rows[0][0];
1139 tdElm.rowSpan = rowSpan;
1140 tdElm.colSpan = colSpan;
1141
1142 // Merge cells
1143 for (var y=0; y<rows.length; y++) {
1144 for (var x=0; x<rows[y].length; x++) {
1145 var html = rows[y][x].innerHTML;
1146 var chk = html.replace(/[ \t\r\n]/g, "");
1147
1148 if (chk != "<br/>" && chk != "<br>" && chk != '<br mce_bogus="1"/>' && (x+y > 0))
1149 tdElm.innerHTML += html;
1150
1151 // Not current cell
1152 if (rows[y][x] != tdElm && !rows[y][x]._deleted) {
1153 var cpos = getCellPos(grid, rows[y][x]);
1154 var tr = rows[y][x].parentNode;
1155
1156 tr.removeChild(rows[y][x]);
1157 rows[y][x]._deleted = true;
1158
1159 // Empty TR, remove it
1160 if (!tr.hasChildNodes()) {
1161 tr.parentNode.removeChild(tr);
1162
1163 var lastCell = null;
1164 for (var x=0; cellElm = getCell(grid, cpos.rowindex, x); x++) {
1165 if (cellElm != lastCell && cellElm.rowSpan > 1)
1166 cellElm.rowSpan--;
1167
1168 lastCell = cellElm;
1169 }
1170
1171 if (tdElm.rowSpan > 1)
1172 tdElm.rowSpan--;
1173 }
1174 }
1175 }
1176 }
1177
1178 // Remove all but one bogus br
1179 each(ed.dom.select('br', tdElm), function(e, i) {
1180 if (i > 0 && ed.dom.getAttrib(e, 'mce_bogus'))
1181 ed.dom.remove(e);
1182 });
1183
1184 break;
1185 }
1186
1187 tableElm = inst.dom.getParent(inst.selection.getNode(), "table");
1188 inst.addVisual(tableElm);
1189 inst.nodeChanged();
1190 }
1191
1192 return true;
1193 }
1194
1195 // Pass to next handler in chain
1196 return false;
1197 }
1198 });
1199
1200 // Register plugin
1201 tinymce.PluginManager.add('table', tinymce.plugins.TablePlugin);
1202})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/table/js/cell.js b/public/javascripts/tiny_mce/plugins/table/js/cell.js
deleted file mode 100644
index f23b067..0000000
--- a/public/javascripts/tiny_mce/plugins/table/js/cell.js
+++ /dev/null
@@ -1,269 +0,0 @@
1tinyMCEPopup.requireLangPack();
2
3var ed;
4
5function init() {
6 ed = tinyMCEPopup.editor;
7 tinyMCEPopup.resizeToInnerSize();
8
9 document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
10 document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');
11 document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor')
12
13 var inst = ed;
14 var tdElm = ed.dom.getParent(ed.selection.getNode(), "td,th");
15 var formObj = document.forms[0];
16 var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style"));
17
18 // Get table cell data
19 var celltype = tdElm.nodeName.toLowerCase();
20 var align = ed.dom.getAttrib(tdElm, 'align');
21 var valign = ed.dom.getAttrib(tdElm, 'valign');
22 var width = trimSize(getStyle(tdElm, 'width', 'width'));
23 var height = trimSize(getStyle(tdElm, 'height', 'height'));
24 var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor'));
25 var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor'));
26 var className = ed.dom.getAttrib(tdElm, 'class');
27 var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");;
28 var id = ed.dom.getAttrib(tdElm, 'id');
29 var lang = ed.dom.getAttrib(tdElm, 'lang');
30 var dir = ed.dom.getAttrib(tdElm, 'dir');
31 var scope = ed.dom.getAttrib(tdElm, 'scope');
32
33 // Setup form
34 addClassesToList('class', 'table_cell_styles');
35 TinyMCE_EditableSelects.init();
36
37 formObj.bordercolor.value = bordercolor;
38 formObj.bgcolor.value = bgcolor;
39 formObj.backgroundimage.value = backgroundimage;
40 formObj.width.value = width;
41 formObj.height.value = height;
42 formObj.id.value = id;
43 formObj.lang.value = lang;
44 formObj.style.value = ed.dom.serializeStyle(st);
45 selectByValue(formObj, 'align', align);
46 selectByValue(formObj, 'valign', valign);
47 selectByValue(formObj, 'class', className, true, true);
48 selectByValue(formObj, 'celltype', celltype);
49 selectByValue(formObj, 'dir', dir);
50 selectByValue(formObj, 'scope', scope);
51
52 // Resize some elements
53 if (isVisible('backgroundimagebrowser'))
54 document.getElementById('backgroundimage').style.width = '180px';
55
56 updateColor('bordercolor_pick', 'bordercolor');
57 updateColor('bgcolor_pick', 'bgcolor');
58}
59
60function updateAction() {
61 var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0];
62
63 tinyMCEPopup.restoreSelection();
64 el = ed.selection.getNode();
65 tdElm = ed.dom.getParent(el, "td,th");
66 trElm = ed.dom.getParent(el, "tr");
67 tableElm = ed.dom.getParent(el, "table");
68
69 ed.execCommand('mceBeginUndoLevel');
70
71 switch (getSelectValue(formObj, 'action')) {
72 case "cell":
73 var celltype = getSelectValue(formObj, 'celltype');
74 var scope = getSelectValue(formObj, 'scope');
75
76 function doUpdate(s) {
77 if (s) {
78 updateCell(tdElm);
79
80 ed.addVisual();
81 ed.nodeChanged();
82 inst.execCommand('mceEndUndoLevel');
83 tinyMCEPopup.close();
84 }
85 };
86
87 if (ed.getParam("accessibility_warnings", 1)) {
88 if (celltype == "th" && scope == "")
89 tinyMCEPopup.confirm(ed.getLang('table_dlg.missing_scope', '', true), doUpdate);
90 else
91 doUpdate(1);
92
93 return;
94 }
95
96 updateCell(tdElm);
97 break;
98
99 case "row":
100 var cell = trElm.firstChild;
101
102 if (cell.nodeName != "TD" && cell.nodeName != "TH")
103 cell = nextCell(cell);
104
105 do {
106 cell = updateCell(cell, true);
107 } while ((cell = nextCell(cell)) != null);
108
109 break;
110
111 case "all":
112 var rows = tableElm.getElementsByTagName("tr");
113
114 for (var i=0; i<rows.length; i++) {
115 var cell = rows[i].firstChild;
116
117 if (cell.nodeName != "TD" && cell.nodeName != "TH")
118 cell = nextCell(cell);
119
120 do {
121 cell = updateCell(cell, true);
122 } while ((cell = nextCell(cell)) != null);
123 }
124
125 break;
126 }
127
128 ed.addVisual();
129 ed.nodeChanged();
130 inst.execCommand('mceEndUndoLevel');
131 tinyMCEPopup.close();
132}
133
134function nextCell(elm) {
135 while ((elm = elm.nextSibling) != null) {
136 if (elm.nodeName == "TD" || elm.nodeName == "TH")
137 return elm;
138 }
139
140 return null;
141}
142
143function updateCell(td, skip_id) {
144 var inst = ed;
145 var formObj = document.forms[0];
146 var curCellType = td.nodeName.toLowerCase();
147 var celltype = getSelectValue(formObj, 'celltype');
148 var doc = inst.getDoc();
149 var dom = ed.dom;
150
151 if (!skip_id)
152 td.setAttribute('id', formObj.id.value);
153
154 td.setAttribute('align', formObj.align.value);
155 td.setAttribute('vAlign', formObj.valign.value);
156 td.setAttribute('lang', formObj.lang.value);
157 td.setAttribute('dir', getSelectValue(formObj, 'dir'));
158 td.setAttribute('style', ed.dom.serializeStyle(ed.dom.parseStyle(formObj.style.value)));
159 td.setAttribute('scope', formObj.scope.value);
160 ed.dom.setAttrib(td, 'class', getSelectValue(formObj, 'class'));
161
162 // Clear deprecated attributes
163 ed.dom.setAttrib(td, 'width', '');
164 ed.dom.setAttrib(td, 'height', '');
165 ed.dom.setAttrib(td, 'bgColor', '');
166 ed.dom.setAttrib(td, 'borderColor', '');
167 ed.dom.setAttrib(td, 'background', '');
168
169 // Set styles
170 td.style.width = getCSSSize(formObj.width.value);
171 td.style.height = getCSSSize(formObj.height.value);
172 if (formObj.bordercolor.value != "") {
173 td.style.borderColor = formObj.bordercolor.value;
174 td.style.borderStyle = td.style.borderStyle == "" ? "solid" : td.style.borderStyle;
175 td.style.borderWidth = td.style.borderWidth == "" ? "1px" : td.style.borderWidth;
176 } else
177 td.style.borderColor = '';
178
179 td.style.backgroundColor = formObj.bgcolor.value;
180
181 if (formObj.backgroundimage.value != "")
182 td.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";
183 else
184 td.style.backgroundImage = '';
185
186 if (curCellType != celltype) {
187 // changing to a different node type
188 var newCell = doc.createElement(celltype);
189
190 for (var c=0; c<td.childNodes.length; c++)
191 newCell.appendChild(td.childNodes[c].cloneNode(1));
192
193 for (var a=0; a<td.attributes.length; a++)
194 ed.dom.setAttrib(newCell, td.attributes[a].name, ed.dom.getAttrib(td, td.attributes[a].name));
195
196 td.parentNode.replaceChild(newCell, td);
197 td = newCell;
198 }
199
200 dom.setAttrib(td, 'style', dom.serializeStyle(dom.parseStyle(td.style.cssText)));
201
202 return td;
203}
204
205function changedBackgroundImage() {
206 var formObj = document.forms[0];
207 var st = ed.dom.parseStyle(formObj.style.value);
208
209 st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
210
211 formObj.style.value = ed.dom.serializeStyle(st);
212}
213
214function changedSize() {
215 var formObj = document.forms[0];
216 var st = ed.dom.parseStyle(formObj.style.value);
217
218 var width = formObj.width.value;
219 if (width != "")
220 st['width'] = getCSSSize(width);
221 else
222 st['width'] = "";
223
224 var height = formObj.height.value;
225 if (height != "")
226 st['height'] = getCSSSize(height);
227 else
228 st['height'] = "";
229
230 formObj.style.value = ed.dom.serializeStyle(st);
231}
232
233function changedColor() {
234 var formObj = document.forms[0];
235 var st = ed.dom.parseStyle(formObj.style.value);
236
237 st['background-color'] = formObj.bgcolor.value;
238 st['border-color'] = formObj.bordercolor.value;
239
240 formObj.style.value = ed.dom.serializeStyle(st);
241}
242
243function changedStyle() {
244 var formObj = document.forms[0];
245 var st = ed.dom.parseStyle(formObj.style.value);
246
247 if (st['background-image'])
248 formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
249 else
250 formObj.backgroundimage.value = '';
251
252 if (st['width'])
253 formObj.width.value = trimSize(st['width']);
254
255 if (st['height'])
256 formObj.height.value = trimSize(st['height']);
257
258 if (st['background-color']) {
259 formObj.bgcolor.value = st['background-color'];
260 updateColor('bgcolor_pick','bgcolor');
261 }
262
263 if (st['border-color']) {
264 formObj.bordercolor.value = st['border-color'];
265 updateColor('bordercolor_pick','bordercolor');
266 }
267}
268
269tinyMCEPopup.onInit.add(init);
diff --git a/public/javascripts/tiny_mce/plugins/table/js/merge_cells.js b/public/javascripts/tiny_mce/plugins/table/js/merge_cells.js
deleted file mode 100644
index 31d6df0..0000000
--- a/public/javascripts/tiny_mce/plugins/table/js/merge_cells.js
+++ /dev/null
@@ -1,29 +0,0 @@
1tinyMCEPopup.requireLangPack();
2
3function init() {
4 var f = document.forms[0], v;
5
6 tinyMCEPopup.resizeToInnerSize();
7
8 f.numcols.value = tinyMCEPopup.getWindowArg('numcols', 1);
9 f.numrows.value = tinyMCEPopup.getWindowArg('numrows', 1);
10}
11
12function mergeCells() {
13 var args = [], f = document.forms[0];
14
15 tinyMCEPopup.restoreSelection();
16
17 if (!AutoValidator.validate(f)) {
18 tinyMCEPopup.alert(tinyMCEPopup.getLang('invalid_data'));
19 return false;
20 }
21
22 args["numcols"] = f.numcols.value;
23 args["numrows"] = f.numrows.value;
24
25 tinyMCEPopup.execCommand("mceTableMergeCells", false, args);
26 tinyMCEPopup.close();
27}
28
29tinyMCEPopup.onInit.add(init);
diff --git a/public/javascripts/tiny_mce/plugins/table/js/row.js b/public/javascripts/tiny_mce/plugins/table/js/row.js
deleted file mode 100644
index d25f635..0000000
--- a/public/javascripts/tiny_mce/plugins/table/js/row.js
+++ /dev/null
@@ -1,212 +0,0 @@
1tinyMCEPopup.requireLangPack();
2
3function 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.getNode(), "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 // Setup form
28 addClassesToList('class', 'table_row_styles');
29 TinyMCE_EditableSelects.init();
30
31 formObj.bgcolor.value = bgcolor;
32 formObj.backgroundimage.value = backgroundimage;
33 formObj.height.value = height;
34 formObj.id.value = id;
35 formObj.lang.value = lang;
36 formObj.style.value = dom.serializeStyle(st);
37 selectByValue(formObj, 'align', align);
38 selectByValue(formObj, 'valign', valign);
39 selectByValue(formObj, 'class', className, true, true);
40 selectByValue(formObj, 'rowtype', rowtype);
41 selectByValue(formObj, 'dir', dir);
42
43 // Resize some elements
44 if (isVisible('backgroundimagebrowser'))
45 document.getElementById('backgroundimage').style.width = '180px';
46
47 updateColor('bgcolor_pick', 'bgcolor');
48}
49
50function updateAction() {
51 var inst = tinyMCEPopup.editor, dom = inst.dom, trElm, tableElm, formObj = document.forms[0];
52 var action = getSelectValue(formObj, 'action');
53
54 tinyMCEPopup.restoreSelection();
55 trElm = dom.getParent(inst.selection.getNode(), "tr");
56 tableElm = dom.getParent(inst.selection.getNode(), "table");
57
58 inst.execCommand('mceBeginUndoLevel');
59
60 switch (action) {
61 case "row":
62 updateRow(trElm);
63 break;
64
65 case "all":
66 var rows = tableElm.getElementsByTagName("tr");
67
68 for (var i=0; i<rows.length; i++)
69 updateRow(rows[i], true);
70
71 break;
72
73 case "odd":
74 case "even":
75 var rows = tableElm.getElementsByTagName("tr");
76
77 for (var i=0; i<rows.length; i++) {
78 if ((i % 2 == 0 && action == "odd") || (i % 2 != 0 && action == "even"))
79 updateRow(rows[i], true, true);
80 }
81
82 break;
83 }
84
85 inst.addVisual();
86 inst.nodeChanged();
87 inst.execCommand('mceEndUndoLevel');
88 tinyMCEPopup.close();
89}
90
91function updateRow(tr_elm, skip_id, skip_parent) {
92 var inst = tinyMCEPopup.editor;
93 var formObj = document.forms[0];
94 var dom = inst.dom;
95 var curRowType = tr_elm.parentNode.nodeName.toLowerCase();
96 var rowtype = getSelectValue(formObj, 'rowtype');
97 var doc = inst.getDoc();
98
99 // Update row element
100 if (!skip_id)
101 tr_elm.setAttribute('id', formObj.id.value);
102
103 tr_elm.setAttribute('align', getSelectValue(formObj, 'align'));
104 tr_elm.setAttribute('vAlign', getSelectValue(formObj, 'valign'));
105 tr_elm.setAttribute('lang', formObj.lang.value);
106 tr_elm.setAttribute('dir', getSelectValue(formObj, 'dir'));
107 tr_elm.setAttribute('style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));
108 dom.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));
109
110 // Clear deprecated attributes
111 tr_elm.setAttribute('background', '');
112 tr_elm.setAttribute('bgColor', '');
113 tr_elm.setAttribute('height', '');
114
115 // Set styles
116 tr_elm.style.height = getCSSSize(formObj.height.value);
117 tr_elm.style.backgroundColor = formObj.bgcolor.value;
118
119 if (formObj.backgroundimage.value != "")
120 tr_elm.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";
121 else
122 tr_elm.style.backgroundImage = '';
123
124 // Setup new rowtype
125 if (curRowType != rowtype && !skip_parent) {
126 // first, clone the node we are working on
127 var newRow = tr_elm.cloneNode(1);
128
129 // next, find the parent of its new destination (creating it if necessary)
130 var theTable = dom.getParent(tr_elm, "table");
131 var dest = rowtype;
132 var newParent = null;
133 for (var i = 0; i < theTable.childNodes.length; i++) {
134 if (theTable.childNodes[i].nodeName.toLowerCase() == dest)
135 newParent = theTable.childNodes[i];
136 }
137
138 if (newParent == null) {
139 newParent = doc.createElement(dest);
140
141 if (dest == "thead") {
142 if (theTable.firstChild.nodeName == 'CAPTION')
143 inst.dom.insertAfter(newParent, theTable.firstChild);
144 else
145 theTable.insertBefore(newParent, theTable.firstChild);
146 } else
147 theTable.appendChild(newParent);
148 }
149
150 // append the row to the new parent
151 newParent.appendChild(newRow);
152
153 // remove the original
154 tr_elm.parentNode.removeChild(tr_elm);
155
156 // set tr_elm to the new node
157 tr_elm = newRow;
158 }
159
160 dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(tr_elm.style.cssText)));
161}
162
163function changedBackgroundImage() {
164 var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
165 var st = dom.parseStyle(formObj.style.value);
166
167 st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
168
169 formObj.style.value = dom.serializeStyle(st);
170}
171
172function changedStyle() {
173 var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
174 var st = dom.parseStyle(formObj.style.value);
175
176 if (st['background-image'])
177 formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
178 else
179 formObj.backgroundimage.value = '';
180
181 if (st['height'])
182 formObj.height.value = trimSize(st['height']);
183
184 if (st['background-color']) {
185 formObj.bgcolor.value = st['background-color'];
186 updateColor('bgcolor_pick','bgcolor');
187 }
188}
189
190function changedSize() {
191 var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
192 var st = dom.parseStyle(formObj.style.value);
193
194 var height = formObj.height.value;
195 if (height != "")
196 st['height'] = getCSSSize(height);
197 else
198 st['height'] = "";
199
200 formObj.style.value = dom.serializeStyle(st);
201}
202
203function changedColor() {
204 var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
205 var st = dom.parseStyle(formObj.style.value);
206
207 st['background-color'] = formObj.bgcolor.value;
208
209 formObj.style.value = dom.serializeStyle(st);
210}
211
212tinyMCEPopup.onInit.add(init);
diff --git a/public/javascripts/tiny_mce/plugins/table/js/table.js b/public/javascripts/tiny_mce/plugins/table/js/table.js
deleted file mode 100644
index 182589d..0000000
--- a/public/javascripts/tiny_mce/plugins/table/js/table.js
+++ /dev/null
@@ -1,440 +0,0 @@
1tinyMCEPopup.requireLangPack();
2
3var action, orgTableWidth, orgTableHeight, dom = tinyMCEPopup.editor.dom;
4
5function insertTable() {
6 var formObj = document.forms[0];
7 var inst = tinyMCEPopup.editor, dom = inst.dom;
8 var cols = 2, rows = 2, border = 0, cellpadding = -1, cellspacing = -1, align, width, height, className, caption, frame, rules;
9 var html = '', capEl, elm;
10 var cellLimit, rowLimit, colLimit;
11
12 tinyMCEPopup.restoreSelection();
13
14 if (!AutoValidator.validate(formObj)) {
15 tinyMCEPopup.alert(inst.getLang('invalid_data'));
16 return false;
17 }
18
19 elm = dom.getParent(inst.selection.getNode(), 'table');
20
21 // Get form data
22 cols = formObj.elements['cols'].value;
23 rows = formObj.elements['rows'].value;
24 border = formObj.elements['border'].value != "" ? formObj.elements['border'].value : 0;
25 cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : "";
26 cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : "";
27 align = getSelectValue(formObj, "align");
28 frame = getSelectValue(formObj, "tframe");
29 rules = getSelectValue(formObj, "rules");
30 width = formObj.elements['width'].value;
31 height = formObj.elements['height'].value;
32 bordercolor = formObj.elements['bordercolor'].value;
33 bgcolor = formObj.elements['bgcolor'].value;
34 className = getSelectValue(formObj, "class");
35 id = formObj.elements['id'].value;
36 summary = formObj.elements['summary'].value;
37 style = formObj.elements['style'].value;
38 dir = formObj.elements['dir'].value;
39 lang = formObj.elements['lang'].value;
40 background = formObj.elements['backgroundimage'].value;
41 caption = formObj.elements['caption'].checked;
42
43 cellLimit = tinyMCEPopup.getParam('table_cell_limit', false);
44 rowLimit = tinyMCEPopup.getParam('table_row_limit', false);
45 colLimit = tinyMCEPopup.getParam('table_col_limit', false);
46
47 // Validate table size
48 if (colLimit && cols > colLimit) {
49 tinyMCEPopup.alert(inst.getLang('table_dlg.col_limit').replace(/\{\$cols\}/g, colLimit));
50 return false;
51 } else if (rowLimit && rows > rowLimit) {
52 tinyMCEPopup.alert(inst.getLang('table_dlg.row_limit').replace(/\{\$rows\}/g, rowLimit));
53 return false;
54 } else if (cellLimit && cols * rows > cellLimit) {
55 tinyMCEPopup.alert(inst.getLang('table_dlg.cell_limit').replace(/\{\$cells\}/g, cellLimit));
56 return false;
57 }
58
59 // Update table
60 if (action == "update") {
61 inst.execCommand('mceBeginUndoLevel');
62
63 dom.setAttrib(elm, 'cellPadding', cellpadding, true);
64 dom.setAttrib(elm, 'cellSpacing', cellspacing, true);
65 dom.setAttrib(elm, 'border', border);
66 dom.setAttrib(elm, 'align', align);
67 dom.setAttrib(elm, 'frame', frame);
68 dom.setAttrib(elm, 'rules', rules);
69 dom.setAttrib(elm, 'class', className);
70 dom.setAttrib(elm, 'style', style);
71 dom.setAttrib(elm, 'id', id);
72 dom.setAttrib(elm, 'summary', summary);
73 dom.setAttrib(elm, 'dir', dir);
74 dom.setAttrib(elm, 'lang', lang);
75
76 capEl = inst.dom.select('caption', elm)[0];
77
78 if (capEl && !caption)
79 capEl.parentNode.removeChild(capEl);
80
81 if (!capEl && caption) {
82 capEl = elm.ownerDocument.createElement('caption');
83
84 if (!tinymce.isIE)
85 capEl.innerHTML = '<br mce_bogus="1"/>';
86
87 elm.insertBefore(capEl, elm.firstChild);
88 }
89
90 if (width && inst.settings.inline_styles) {
91 dom.setStyle(elm, 'width', width);
92 dom.setAttrib(elm, 'width', '');
93 } else {
94 dom.setAttrib(elm, 'width', width, true);
95 dom.setStyle(elm, 'width', '');
96 }
97
98 // Remove these since they are not valid XHTML
99 dom.setAttrib(elm, 'borderColor', '');
100 dom.setAttrib(elm, 'bgColor', '');
101 dom.setAttrib(elm, 'background', '');
102
103 if (height && inst.settings.inline_styles) {
104 dom.setStyle(elm, 'height', height);
105 dom.setAttrib(elm, 'height', '');
106 } else {
107 dom.setAttrib(elm, 'height', height, true);
108 dom.setStyle(elm, 'height', '');
109 }
110
111 if (background != '')
112 elm.style.backgroundImage = "url('" + background + "')";
113 else
114 elm.style.backgroundImage = '';
115
116/* if (tinyMCEPopup.getParam("inline_styles")) {
117 if (width != '')
118 elm.style.width = getCSSSize(width);
119 }*/
120
121 if (bordercolor != "") {
122 elm.style.borderColor = bordercolor;
123 elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle;
124 elm.style.borderWidth = border == "" ? "1px" : border;
125 } else
126 elm.style.borderColor = '';
127
128 elm.style.backgroundColor = bgcolor;
129 elm.style.height = getCSSSize(height);
130
131 inst.addVisual();
132
133 // Fix for stange MSIE align bug
134 //elm.outerHTML = elm.outerHTML;
135
136 inst.nodeChanged();
137 inst.execCommand('mceEndUndoLevel');
138
139 // Repaint if dimensions changed
140 if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight)
141 inst.execCommand('mceRepaint');
142
143 tinyMCEPopup.close();
144 return true;
145 }
146
147 // Create new table
148 html += '<table';
149
150 html += makeAttrib('id', id);
151 html += makeAttrib('border', border);
152 html += makeAttrib('cellpadding', cellpadding);
153 html += makeAttrib('cellspacing', cellspacing);
154
155 if (width && inst.settings.inline_styles) {
156 if (style)
157 style += '; ';
158
159 // Force px
160 if (/^[0-9\.]+$/.test(width))
161 width += 'px';
162
163 style += 'width: ' + width;
164 } else
165 html += makeAttrib('width', width);
166
167/* if (height) {
168 if (style)
169 style += '; ';
170
171 style += 'height: ' + height;
172 }*/
173
174 //html += makeAttrib('height', height);
175 //html += makeAttrib('bordercolor', bordercolor);
176 //html += makeAttrib('bgcolor', bgcolor);
177 html += makeAttrib('align', align);
178 html += makeAttrib('frame', frame);
179 html += makeAttrib('rules', rules);
180 html += makeAttrib('class', className);
181 html += makeAttrib('style', style);
182 html += makeAttrib('summary', summary);
183 html += makeAttrib('dir', dir);
184 html += makeAttrib('lang', lang);
185 html += '>';
186
187 if (caption) {
188 if (!tinymce.isIE)
189 html += '<caption><br mce_bogus="1"/></caption>';
190 else
191 html += '<caption></caption>';
192 }
193
194 for (var y=0; y<rows; y++) {
195 html += "<tr>";
196
197 for (var x=0; x<cols; x++) {
198 if (!tinymce.isIE)
199 html += '<td><br mce_bogus="1"/></td>';
200 else
201 html += '<td></td>';
202 }
203
204 html += "</tr>";
205 }
206
207 html += "</table>";
208
209 inst.execCommand('mceBeginUndoLevel');
210
211 // Move table
212 if (inst.settings.fix_table_elements) {
213 var bm = inst.selection.getBookmark(), patt = '';
214
215 inst.execCommand('mceInsertContent', false, '<br class="_mce_marker" />');
216
217 tinymce.each('h1,h2,h3,h4,h5,h6,p'.split(','), function(n) {
218 if (patt)
219 patt += ',';
220
221 patt += n + ' ._mce_marker';
222 });
223
224 tinymce.each(inst.dom.select(patt), function(n) {
225 inst.dom.split(inst.dom.getParent(n, 'h1,h2,h3,h4,h5,h6,p'), n);
226 });
227
228 dom.setOuterHTML(dom.select('._mce_marker')[0], html);
229
230 inst.selection.moveToBookmark(bm);
231 } else
232 inst.execCommand('mceInsertContent', false, html);
233
234 inst.addVisual();
235 inst.execCommand('mceEndUndoLevel');
236
237 tinyMCEPopup.close();
238}
239
240function makeAttrib(attrib, value) {
241 var formObj = document.forms[0];
242 var valueElm = formObj.elements[attrib];
243
244 if (typeof(value) == "undefined" || value == null) {
245 value = "";
246
247 if (valueElm)
248 value = valueElm.value;
249 }
250
251 if (value == "")
252 return "";
253
254 // XML encode it
255 value = value.replace(/&/g, '&amp;');
256 value = value.replace(/\"/g, '&quot;');
257 value = value.replace(/</g, '&lt;');
258 value = value.replace(/>/g, '&gt;');
259
260 return ' ' + attrib + '="' + value + '"';
261}
262
263function init() {
264 tinyMCEPopup.resizeToInnerSize();
265
266 document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
267 document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
268 document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');
269 document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
270
271 var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', '');
272 var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = "";
273 var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules, frame;
274 var inst = tinyMCEPopup.editor, dom = inst.dom;
275 var formObj = document.forms[0];
276 var elm = dom.getParent(inst.selection.getNode(), "table");
277
278 action = tinyMCEPopup.getWindowArg('action');
279
280 if (!action)
281 action = elm ? "update" : "insert";
282
283 if (elm && action != "insert") {
284 var rowsAr = elm.rows;
285 var cols = 0;
286 for (var i=0; i<rowsAr.length; i++)
287 if (rowsAr[i].cells.length > cols)
288 cols = rowsAr[i].cells.length;
289
290 cols = cols;
291 rows = rowsAr.length;
292
293 st = dom.parseStyle(dom.getAttrib(elm, "style"));
294 border = trimSize(getStyle(elm, 'border', 'borderWidth'));
295 cellpadding = dom.getAttrib(elm, 'cellpadding', "");
296 cellspacing = dom.getAttrib(elm, 'cellspacing', "");
297 width = trimSize(getStyle(elm, 'width', 'width'));
298 height = trimSize(getStyle(elm, 'height', 'height'));
299 bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor'));
300 bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor'));
301 align = dom.getAttrib(elm, 'align', align);
302 frame = dom.getAttrib(elm, 'frame');
303 rules = dom.getAttrib(elm, 'rules');
304 className = tinymce.trim(dom.getAttrib(elm, 'class').replace(/mceItem.+/g, ''));
305 id = dom.getAttrib(elm, 'id');
306 summary = dom.getAttrib(elm, 'summary');
307 style = dom.serializeStyle(st);
308 dir = dom.getAttrib(elm, 'dir');
309 lang = dom.getAttrib(elm, 'lang');
310 background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
311 formObj.caption.checked = elm.getElementsByTagName('caption').length > 0;
312
313 orgTableWidth = width;
314 orgTableHeight = height;
315
316 action = "update";
317 formObj.insert.value = inst.getLang('update');
318 }
319
320 addClassesToList('class', "table_styles");
321 TinyMCE_EditableSelects.init();
322
323 // Update form
324 selectByValue(formObj, 'align', align);
325 selectByValue(formObj, 'tframe', frame);
326 selectByValue(formObj, 'rules', rules);
327 selectByValue(formObj, 'class', className, true, true);
328 formObj.cols.value = cols;
329 formObj.rows.value = rows;
330 formObj.border.value = border;
331 formObj.cellpadding.value = cellpadding;
332 formObj.cellspacing.value = cellspacing;
333 formObj.width.value = width;
334 formObj.height.value = height;
335 formObj.bordercolor.value = bordercolor;
336 formObj.bgcolor.value = bgcolor;
337 formObj.id.value = id;
338 formObj.summary.value = summary;
339 formObj.style.value = style;
340 formObj.dir.value = dir;
341 formObj.lang.value = lang;
342 formObj.backgroundimage.value = background;
343
344 updateColor('bordercolor_pick', 'bordercolor');
345 updateColor('bgcolor_pick', 'bgcolor');
346
347 // Resize some elements
348 if (isVisible('backgroundimagebrowser'))
349 document.getElementById('backgroundimage').style.width = '180px';
350
351 // Disable some fields in update mode
352 if (action == "update") {
353 formObj.cols.disabled = true;
354 formObj.rows.disabled = true;
355 }
356}
357
358function changedSize() {
359 var formObj = document.forms[0];
360 var st = dom.parseStyle(formObj.style.value);
361
362/* var width = formObj.width.value;
363 if (width != "")
364 st['width'] = tinyMCEPopup.getParam("inline_styles") ? getCSSSize(width) : "";
365 else
366 st['width'] = "";*/
367
368 var height = formObj.height.value;
369 if (height != "")
370 st['height'] = getCSSSize(height);
371 else
372 st['height'] = "";
373
374 formObj.style.value = dom.serializeStyle(st);
375}
376
377function changedBackgroundImage() {
378 var formObj = document.forms[0];
379 var st = dom.parseStyle(formObj.style.value);
380
381 st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
382
383 formObj.style.value = dom.serializeStyle(st);
384}
385
386function changedBorder() {
387 var formObj = document.forms[0];
388 var st = dom.parseStyle(formObj.style.value);
389
390 // Update border width if the element has a color
391 if (formObj.border.value != "" && formObj.bordercolor.value != "")
392 st['border-width'] = formObj.border.value + "px";
393
394 formObj.style.value = dom.serializeStyle(st);
395}
396
397function changedColor() {
398 var formObj = document.forms[0];
399 var st = dom.parseStyle(formObj.style.value);
400
401 st['background-color'] = formObj.bgcolor.value;
402
403 if (formObj.bordercolor.value != "") {
404 st['border-color'] = formObj.bordercolor.value;
405
406 // Add border-width if it's missing
407 if (!st['border-width'])
408 st['border-width'] = formObj.border.value == "" ? "1px" : formObj.border.value + "px";
409 }
410
411 formObj.style.value = dom.serializeStyle(st);
412}
413
414function changedStyle() {
415 var formObj = document.forms[0];
416 var st = dom.parseStyle(formObj.style.value);
417
418 if (st['background-image'])
419 formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
420 else
421 formObj.backgroundimage.value = '';
422
423 if (st['width'])
424 formObj.width.value = trimSize(st['width']);
425
426 if (st['height'])
427 formObj.height.value = trimSize(st['height']);
428
429 if (st['background-color']) {
430 formObj.bgcolor.value = st['background-color'];
431 updateColor('bgcolor_pick','bgcolor');
432 }
433
434 if (st['border-color']) {
435 formObj.bordercolor.value = st['border-color'];
436 updateColor('bordercolor_pick','bordercolor');
437 }
438}
439
440tinyMCEPopup.onInit.add(init);
diff --git a/public/javascripts/tiny_mce/plugins/table/langs/en_dlg.js b/public/javascripts/tiny_mce/plugins/table/langs/en_dlg.js
deleted file mode 100644
index 000332a..0000000
--- a/public/javascripts/tiny_mce/plugins/table/langs/en_dlg.js
+++ /dev/null
@@ -1,74 +0,0 @@
1tinyMCE.addI18n('en.table_dlg',{
2general_tab:"General",
3advanced_tab:"Advanced",
4general_props:"General properties",
5advanced_props:"Advanced properties",
6rowtype:"Row in table part",
7title:"Insert/Modify table",
8width:"Width",
9height:"Height",
10cols:"Cols",
11rows:"Rows",
12cellspacing:"Cellspacing",
13cellpadding:"Cellpadding",
14border:"Border",
15align:"Alignment",
16align_default:"Default",
17align_left:"Left",
18align_right:"Right",
19align_middle:"Center",
20row_title:"Table row properties",
21cell_title:"Table cell properties",
22cell_type:"Cell type",
23valign:"Vertical alignment",
24align_top:"Top",
25align_bottom:"Bottom",
26bordercolor:"Border color",
27bgcolor:"Background color",
28merge_cells_title:"Merge table cells",
29id:"Id",
30style:"Style",
31langdir:"Language direction",
32langcode:"Language code",
33mime:"Target MIME type",
34ltr:"Left to right",
35rtl:"Right to left",
36bgimage:"Background image",
37summary:"Summary",
38td:"Data",
39th:"Header",
40cell_cell:"Update current cell",
41cell_row:"Update all cells in row",
42cell_all:"Update all cells in table",
43row_row:"Update current row",
44row_odd:"Update odd rows in table",
45row_even:"Update even rows in table",
46row_all:"Update all rows in table",
47thead:"Table Head",
48tbody:"Table Body",
49tfoot:"Table Foot",
50scope:"Scope",
51rowgroup:"Row Group",
52colgroup:"Col Group",
53col_limit:"You've exceeded the maximum number of columns of {$cols}.",
54row_limit:"You've exceeded the maximum number of rows of {$rows}.",
55cell_limit:"You've exceeded the maximum number of cells of {$cells}.",
56missing_scope:"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.",
57caption:"Table caption",
58frame:"Frame",
59frame_none:"none",
60frame_groups:"groups",
61frame_rows:"rows",
62frame_cols:"cols",
63frame_all:"all",
64rules:"Rules",
65rules_void:"void",
66rules_above:"above",
67rules_below:"below",
68rules_hsides:"hsides",
69rules_lhs:"lhs",
70rules_rhs:"rhs",
71rules_vsides:"vsides",
72rules_box:"box",
73rules_border:"border"
74}); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/table/merge_cells.htm b/public/javascripts/tiny_mce/plugins/table/merge_cells.htm
deleted file mode 100644
index 25d42eb..0000000
--- a/public/javascripts/tiny_mce/plugins/table/merge_cells.htm
+++ /dev/null
@@ -1,37 +0,0 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml">
3<head>
4 <title>{#table_dlg.merge_cells_title}</title>
5 <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6 <script type="text/javascript" src="../../utils/mctabs.js"></script>
7 <script type="text/javascript" src="../../utils/validate.js"></script>
8 <script type="text/javascript" src="js/merge_cells.js"></script>
9</head>
10<body style="margin: 8px">
11<form onsubmit="mergeCells();return false;" action="#">
12 <fieldset>
13 <legend>{#table_dlg.merge_cells_title}</legend>
14 <table border="0" cellpadding="0" cellspacing="3" width="100%">
15 <tr>
16 <td>{#table_dlg.cols}:</td>
17 <td align="right"><input type="text" name="numcols" value="" class="number min1 mceFocus" style="width: 30px" /></td>
18 </tr>
19 <tr>
20 <td>{#table_dlg.rows}:</td>
21 <td align="right"><input type="text" name="numrows" value="" class="number min1" style="width: 30px" /></td>
22 </tr>
23 </table>
24 </fieldset>
25
26 <div class="mceActionPanel">
27 <div style="float: left">
28 <input type="submit" id="insert" name="insert" value="{#update}" />
29 </div>
30
31 <div style="float: right">
32 <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
33 </div>
34 </div>
35</form>
36</body>
37</html>
diff --git a/public/javascripts/tiny_mce/plugins/table/row.htm b/public/javascripts/tiny_mce/plugins/table/row.htm
deleted file mode 100644
index 07ca13c..0000000
--- a/public/javascripts/tiny_mce/plugins/table/row.htm
+++ /dev/null
@@ -1,160 +0,0 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml">
3<head>
4 <title>{#table_dlg.row_title}</title>
5 <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6 <script type="text/javascript" src="../../utils/mctabs.js"></script>
7 <script type="text/javascript" src="../../utils/form_utils.js"></script>
8 <script type="text/javascript" src="../../utils/editable_selects.js"></script>
9 <script type="text/javascript" src="js/row.js"></script>
10 <link href="css/row.css" rel="stylesheet" type="text/css" />
11</head>
12<body id="tablerow" style="display: none">
13 <form onsubmit="updateAction();return false;" action="#">
14 <div class="tabs">
15 <ul>
16 <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
17 <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
18 </ul>
19 </div>
20
21 <div class="panel_wrapper">
22 <div id="general_panel" class="panel current">
23 <fieldset>
24 <legend>{#table_dlg.general_props}</legend>
25
26 <table border="0" cellpadding="4" cellspacing="0">
27 <tr>
28 <td><label for="rowtype">{#table_dlg.rowtype}</label></td>
29 <td class="col2">
30 <select id="rowtype" name="rowtype" class="mceFocus">
31 <option value="thead">{#table_dlg.thead}</option>
32 <option value="tbody">{#table_dlg.tbody}</option>
33 <option value="tfoot">{#table_dlg.tfoot}</option>
34 </select>
35 </td>
36 </tr>
37
38 <tr>
39 <td><label for="align">{#table_dlg.align}</label></td>
40 <td class="col2">
41 <select id="align" name="align">
42 <option value="">{#not_set}</option>
43 <option value="center">{#table_dlg.align_middle}</option>
44 <option value="left">{#table_dlg.align_left}</option>
45 <option value="right">{#table_dlg.align_right}</option>
46 </select>
47 </td>
48 </tr>
49
50 <tr>
51 <td><label for="valign">{#table_dlg.valign}</label></td>
52 <td class="col2">
53 <select id="valign" name="valign">
54 <option value="">{#not_set}</option>
55 <option value="top">{#table_dlg.align_top}</option>
56 <option value="middle">{#table_dlg.align_middle}</option>
57 <option value="bottom">{#table_dlg.align_bottom}</option>
58 </select>
59 </td>
60 </tr>
61
62 <tr id="styleSelectRow">
63 <td><label for="class">{#class_name}</label></td>
64 <td class="col2">
65 <select id="class" name="class" class="mceEditableSelect">
66 <option value="" selected="selected">{#not_set}</option>
67 </select>
68 </td>
69 </tr>
70
71 <tr>
72 <td><label for="height">{#table_dlg.height}</label></td>
73 <td class="col2"><input name="height" type="text" id="height" value="" size="4" maxlength="4" onchange="changedSize();" /></td>
74 </tr>
75 </table>
76 </fieldset>
77 </div>
78
79 <div id="advanced_panel" class="panel">
80 <fieldset>
81 <legend>{#table_dlg.advanced_props}</legend>
82
83 <table border="0" cellpadding="0" cellspacing="4">
84 <tr>
85 <td class="column1"><label for="id">{#table_dlg.id}</label></td>
86 <td><input id="id" name="id" type="text" value="" style="width: 200px" /></td>
87 </tr>
88
89 <tr>
90 <td><label for="style">{#table_dlg.style}</label></td>
91 <td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>
92 </tr>
93
94 <tr>
95 <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td>
96 <td>
97 <select id="dir" name="dir" style="width: 200px">
98 <option value="">{#not_set}</option>
99 <option value="ltr">{#table_dlg.ltr}</option>
100 <option value="rtl">{#table_dlg.rtl}</option>
101 </select>
102 </td>
103 </tr>
104
105 <tr>
106 <td class="column1"><label for="lang">{#table_dlg.langcode}</label></td>
107 <td>
108 <input id="lang" name="lang" type="text" value="" style="width: 200px" />
109 </td>
110 </tr>
111
112 <tr>
113 <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td>
114 <td>
115 <table border="0" cellpadding="0" cellspacing="0">
116 <tr>
117 <td><input id="backgroundimage" name="backgroundimage" type="text" value="" style="width: 200px" onchange="changedBackgroundImage();" /></td>
118 <td id="backgroundimagebrowsercontainer">&nbsp;</td>
119 </tr>
120 </table>
121 </td>
122 </tr>
123
124 <tr>
125 <td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td>
126 <td>
127 <table border="0" cellpadding="0" cellspacing="0">
128 <tr>
129 <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>
130 <td id="bgcolor_pickcontainer">&nbsp;</td>
131 </tr>
132 </table>
133 </td>
134 </tr>
135 </table>
136 </fieldset>
137 </div>
138 </div>
139
140 <div class="mceActionPanel">
141 <div>
142 <select id="action" name="action">
143 <option value="row">{#table_dlg.row_row}</option>
144 <option value="odd">{#table_dlg.row_odd}</option>
145 <option value="even">{#table_dlg.row_even}</option>
146 <option value="all">{#table_dlg.row_all}</option>
147 </select>
148 </div>
149
150 <div style="float: left">
151 <div><input type="submit" id="insert" name="insert" value="{#update}" /></div>
152 </div>
153
154 <div style="float: right">
155 <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
156 </div>
157 </div>
158 </form>
159</body>
160</html>
diff --git a/public/javascripts/tiny_mce/plugins/table/table.htm b/public/javascripts/tiny_mce/plugins/table/table.htm
deleted file mode 100644
index 37e6159..0000000
--- a/public/javascripts/tiny_mce/plugins/table/table.htm
+++ /dev/null
@@ -1,192 +0,0 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml">
3<head>
4 <title>{#table_dlg.title}</title>
5 <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6 <script type="text/javascript" src="../../utils/mctabs.js"></script>
7 <script type="text/javascript" src="../../utils/form_utils.js"></script>
8 <script type="text/javascript" src="../../utils/validate.js"></script>
9 <script type="text/javascript" src="../../utils/editable_selects.js"></script>
10 <script type="text/javascript" src="js/table.js"></script>
11 <link href="css/table.css" rel="stylesheet" type="text/css" />
12</head>
13<body id="table" style="display: none">
14 <form onsubmit="insertTable();return false;" action="#">
15 <div class="tabs">
16 <ul>
17 <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
18 <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
19 </ul>
20 </div>
21
22 <div class="panel_wrapper">
23 <div id="general_panel" class="panel current">
24 <fieldset>
25 <legend>{#table_dlg.general_props}</legend>
26 <table border="0" cellpadding="4" cellspacing="0" width="100%">
27 <tr>
28 <td><label id="colslabel" for="cols">{#table_dlg.cols}</label></td>
29 <td><input id="cols" name="cols" type="text" value="" size="3" maxlength="3" class="required number min1 mceFocus" /></td>
30 <td><label id="rowslabel" for="rows">{#table_dlg.rows}</label></td>
31 <td><input id="rows" name="rows" type="text" value="" size="3" maxlength="3" class="required number min1" /></td>
32 </tr>
33 <tr>
34 <td><label id="cellpaddinglabel" for="cellpadding">{#table_dlg.cellpadding}</label></td>
35 <td><input id="cellpadding" name="cellpadding" type="text" value="" size="3" maxlength="3" class="number" /></td>
36 <td><label id="cellspacinglabel" for="cellspacing">{#table_dlg.cellspacing}</label></td>
37 <td><input id="cellspacing" name="cellspacing" type="text" value="" size="3" maxlength="3" class="number" /></td>
38 </tr>
39 <tr>
40 <td><label id="alignlabel" for="align">{#table_dlg.align}</label></td>
41 <td><select id="align" name="align">
42 <option value="">{#not_set}</option>
43 <option value="center">{#table_dlg.align_middle}</option>
44 <option value="left">{#table_dlg.align_left}</option>
45 <option value="right">{#table_dlg.align_right}</option>
46 </select></td>
47 <td><label id="borderlabel" for="border">{#table_dlg.border}</label></td>
48 <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="changedBorder();" class="number" /></td>
49 </tr>
50 <tr id="width_row">
51 <td><label id="widthlabel" for="width">{#table_dlg.width}</label></td>
52 <td><input name="width" type="text" id="width" value="" size="4" maxlength="4" onchange="changedSize();" class="size" /></td>
53 <td><label id="heightlabel" for="height">{#table_dlg.height}</label></td>
54 <td><input name="height" type="text" id="height" value="" size="4" maxlength="4" onchange="changedSize();" class="size" /></td>
55 </tr>
56 <tr id="styleSelectRow">
57 <td><label id="classlabel" for="class">{#class_name}</label></td>
58 <td colspan="3">
59 <select id="class" name="class" class="mceEditableSelect">
60 <option value="" selected="selected">{#not_set}</option>
61 </select></td>
62 </tr>
63 <tr>
64 <td class="column1"><label for="caption">{#table_dlg.caption}</label></td>
65 <td><input id="caption" name="caption" type="checkbox" class="checkbox" value="true" /></td>
66 </tr>
67 </table>
68 </fieldset>
69 </div>
70
71 <div id="advanced_panel" class="panel">
72 <fieldset>
73 <legend>{#table_dlg.advanced_props}</legend>
74
75 <table border="0" cellpadding="0" cellspacing="4">
76 <tr>
77 <td class="column1"><label for="id">{#table_dlg.id}</label></td>
78 <td><input id="id" name="id" type="text" value="" class="advfield" /></td>
79 </tr>
80
81 <tr>
82 <td class="column1"><label for="summary">{#table_dlg.summary}</label></td>
83 <td><input id="summary" name="summary" type="text" value="" class="advfield" /></td>
84 </tr>
85
86 <tr>
87 <td><label for="style">{#table_dlg.style}</label></td>
88 <td><input type="text" id="style" name="style" value="" class="advfield" onchange="changedStyle();" /></td>
89 </tr>
90
91 <tr>
92 <td class="column1"><label id="langlabel" for="lang">{#table_dlg.langcode}</label></td>
93 <td>
94 <input id="lang" name="lang" type="text" value="" class="advfield" />
95 </td>
96 </tr>
97
98 <tr>
99 <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td>
100 <td>
101 <table border="0" cellpadding="0" cellspacing="0">
102 <tr>
103 <td><input id="backgroundimage" name="backgroundimage" type="text" value="" class="advfield" onchange="changedBackgroundImage();" /></td>
104 <td id="backgroundimagebrowsercontainer">&nbsp;</td>
105 </tr>
106 </table>
107 </td>
108 </tr>
109
110 <tr>
111 <td class="column1"><label for="tframe">{#table_dlg.frame}</label></td>
112 <td>
113 <select id="tframe" name="tframe" class="advfield">
114 <option value="">{#not_set}</option>
115 <option value="void">{#table_dlg.rules_void}</option>
116 <option value="above">{#table_dlg.rules_above}</option>
117 <option value="below">{#table_dlg.rules_below}</option>
118 <option value="hsides">{#table_dlg.rules_hsides}</option>
119 <option value="lhs">{#table_dlg.rules_lhs}</option>
120 <option value="rhs">{#table_dlg.rules_rhs}</option>
121 <option value="vsides">{#table_dlg.rules_vsides}</option>
122 <option value="box">{#table_dlg.rules_box}</option>
123 <option value="border">{#table_dlg.rules_border}</option>
124 </select>
125 </td>
126 </tr>
127
128 <tr>
129 <td class="column1"><label for="rules">{#table_dlg.rules}</label></td>
130 <td>
131 <select id="rules" name="rules" class="advfield">
132 <option value="">{#not_set}</option>
133 <option value="none">{#table_dlg.frame_none}</option>
134 <option value="groups">{#table_dlg.frame_groups}</option>
135 <option value="rows">{#table_dlg.frame_rows}</option>
136 <option value="cols">{#table_dlg.frame_cols}</option>
137 <option value="all">{#table_dlg.frame_all}</option>
138 </select>
139 </td>
140 </tr>
141
142 <tr>
143 <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td>
144 <td>
145 <select id="dir" name="dir" class="advfield">
146 <option value="">{#not_set}</option>
147 <option value="ltr">{#table_dlg.ltr}</option>
148 <option value="rtl">{#table_dlg.rtl}</option>
149 </select>
150 </td>
151 </tr>
152
153 <tr>
154 <td class="column1"><label for="bordercolor">{#table_dlg.bordercolor}</label></td>
155 <td>
156 <table border="0" cellpadding="0" cellspacing="0">
157 <tr>
158 <td><input id="bordercolor" name="bordercolor" type="text" value="" size="9" onchange="updateColor('bordercolor_pick','bordercolor');changedColor();" /></td>
159 <td id="bordercolor_pickcontainer">&nbsp;</td>
160 </tr>
161 </table>
162 </td>
163 </tr>
164
165 <tr>
166 <td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td>
167 <td>
168 <table border="0" cellpadding="0" cellspacing="0">
169 <tr>
170 <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>
171 <td id="bgcolor_pickcontainer">&nbsp;</td>
172 </tr>
173 </table>
174 </td>
175 </tr>
176 </table>
177 </fieldset>
178 </div>
179 </div>
180
181 <div class="mceActionPanel">
182 <div style="float: left">
183 <input type="submit" id="insert" name="insert" value="{#insert}" />
184 </div>
185
186 <div style="float: right">
187 <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
188 </div>
189 </div>
190 </form>
191</body>
192</html>