MCE Table Buttons - Version 1.0.4

Version Description

  • Updated TinyMCE table plug-in to corresponding TinyMCE update in WordPress 3.1 (still supports <3.1 too)
Download this release

Release Info

Developer jakemgold
Plugin Icon 128x128 MCE Table Buttons
Version 1.0.4
Comparing to
See all releases

Code changes from version 1.0.3.1 to 1.0.4

mce_table_buttons.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: MCE Table Buttons
4
  Plugin URI: http://www.get10up.com/plugins-modules/wordpress-mce-table-buttons/
5
  Description: Add <strong>buttons for table editing</strong> to the WordPress WYSIWYG editor with this very <strong>light weight</strong> plug-in.
6
- Version: 1.0.3.1
7
  Author: Jake Goldman
8
  Author URI: http://www.get10up.com
9
 
@@ -40,7 +40,11 @@ class mce_table_buttons
40
 
41
  function mce_external_plugins( $plugin_array )
42
  {
43
- $plugin_array['table'] = plugin_dir_url( __FILE__ ) . 'mce-table/editor_plugin.js';
 
 
 
 
44
  return $plugin_array;
45
  }
46
 
3
  Plugin Name: MCE Table Buttons
4
  Plugin URI: http://www.get10up.com/plugins-modules/wordpress-mce-table-buttons/
5
  Description: Add <strong>buttons for table editing</strong> to the WordPress WYSIWYG editor with this very <strong>light weight</strong> plug-in.
6
+ Version: 1.0.4
7
  Author: Jake Goldman
8
  Author URI: http://www.get10up.com
9
 
40
 
41
  function mce_external_plugins( $plugin_array )
42
  {
43
+ if ( get_option('db_version') < 17056 ) // 17056 is WordPress 3.1
44
+ $plugin_array['table'] = plugin_dir_url( __FILE__ ) . 'table-old/editor_plugin.js';
45
+ else
46
+ $plugin_array['table'] = plugin_dir_url( __FILE__ ) . 'table/editor_plugin.js';
47
+
48
  return $plugin_array;
49
  }
50
 
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
  === MCE Table Buttons ===
2
- Contributors: jakemgold
3
  Donate link: http://www.get10up.com/plugins-modules/wordpress-mce-table-buttons/
4
  Tags: tables, table, editor, WYSIWYG, buttons, tinymce
5
  Requires at least: 2.8
6
  Tested up to: 3.1
7
- Stable tag: 1.0.3.1
8
 
9
  Adds table editing buttons to a new, third row in the WordPress WYSIWYG editor.
10
 
@@ -30,6 +30,9 @@ Hoping to add the ability to hide the new table editing toolbar with the "kitche
30
 
31
  == Changelog ==
32
 
 
 
 
33
  = 1.0.3.1 =
34
  * Updated support / developer information
35
 
1
  === MCE Table Buttons ===
2
+ Contributors: jakemgold, thinkoomph
3
  Donate link: http://www.get10up.com/plugins-modules/wordpress-mce-table-buttons/
4
  Tags: tables, table, editor, WYSIWYG, buttons, tinymce
5
  Requires at least: 2.8
6
  Tested up to: 3.1
7
+ Stable tag: 1.0.4
8
 
9
  Adds table editing buttons to a new, third row in the WordPress WYSIWYG editor.
10
 
30
 
31
  == Changelog ==
32
 
33
+ = 1.0.4 =
34
+ * Updated TinyMCE table plug-in to corresponding TinyMCE update in WordPress 3.1 (still supports <3.1 too)
35
+
36
  = 1.0.3.1 =
37
  * Updated support / developer information
38
 
{mce-table → table-old}/cell.htm RENAMED
File without changes
{mce-table → table-old}/css/cell.css RENAMED
File without changes
{mce-table → table-old}/css/row.css RENAMED
File without changes
{mce-table → table-old}/css/table.css RENAMED
File without changes
{mce-table → table-old}/editor_plugin.js RENAMED
File without changes
{mce-table → table-old}/js/cell.js RENAMED
File without changes
{mce-table → table-old}/js/merge_cells.js RENAMED
File without changes
{mce-table → table-old}/js/row.js RENAMED
File without changes
{mce-table → table-old}/js/table.js RENAMED
File without changes
{mce-table → table-old}/langs/en_dlg.js RENAMED
File without changes
{mce-table → table-old}/merge_cells.htm RENAMED
File without changes
{mce-table → table-old}/row.htm RENAMED
File without changes
{mce-table → table-old}/table.htm RENAMED
File without changes
table/cell.htm ADDED
@@ -0,0 +1,178 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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="../../../../wp-includes/js/tinymce/tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/mctabs.js"></script>
7
+ <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/form_utils.js"></script>
8
+ <script type="text/javascript" src="../../../../wp-includes/js/tinymce/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
+ <input type="submit" id="insert" name="insert" value="{#update}" />
174
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
175
+ </div>
176
+ </form>
177
+ </body>
178
+ </html>
table/css/cell.css ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ }
table/css/row.css ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ }
table/css/table.css ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ }
table/editor_plugin.js ADDED
@@ -0,0 +1 @@
 
1
+ (function(c){var d=c.each;function b(f,g){var h=g.ownerDocument,e=h.createRange(),j;e.setStartBefore(g);e.setEnd(f.endContainer,f.endOffset);j=h.createElement("body");j.appendChild(e.cloneContents());return j.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length==0}function a(G,F,J){var f,K,C,o;s();o=F.getParent(J.getStart(),"th,td");if(o){K=E(o);C=H();o=w(K.x,K.y)}function z(M,L){M=M.cloneNode(L);M.removeAttribute("id");return M}function s(){var L=0;f=[];d(["thead","tbody","tfoot"],function(M){var N=F.select("> "+M+" tr",G);d(N,function(O,P){P+=L;d(F.select("> td, > th",O),function(V,Q){var R,S,T,U;if(f[P]){while(f[P][Q]){Q++}}T=h(V,"rowspan");U=h(V,"colspan");for(S=P;S<P+T;S++){if(!f[S]){f[S]=[]}for(R=Q;R<Q+U;R++){f[S][R]={part:M,real:S==P&&R==Q,elm:V,rowspan:T,colspan:U}}}})});L+=N.length})}function w(L,N){var M;M=f[N];if(M){return M[L]}}function h(M,L){return parseInt(M.getAttribute(L)||1)}function j(L){return F.hasClass(L.elm,"mceSelected")||L==o}function k(){var L=[];d(G.rows,function(M){d(M.cells,function(N){if(F.hasClass(N,"mceSelected")||N==o.elm){L.push(M);return false}})});return L}function r(){var L=F.createRng();L.setStartAfter(G);L.setEndAfter(G);J.setRng(L);F.remove(G)}function e(L){var M;c.walk(L,function(O){var N;if(O.nodeType==3){d(F.getParents(O.parentNode,null,L).reverse(),function(P){P=z(P,false);if(!M){M=N=P}else{if(N){N.appendChild(P)}}N=P});if(N){N.innerHTML=c.isIE?"&nbsp;":'<br _mce_bogus="1" />'}return false}},"childNodes");L=z(L,false);L.rowSpan=L.colSpan=1;if(M){L.appendChild(M)}else{if(!c.isIE){L.innerHTML='<br _mce_bogus="1" />'}}return L}function q(){var L=F.createRng();d(F.select("tr",G),function(M){if(M.cells.length==0){F.remove(M)}});if(F.select("tr",G).length==0){L.setStartAfter(G);L.setEndAfter(G);J.setRng(L);F.remove(G);return}d(F.select("thead,tbody,tfoot",G),function(M){if(M.rows.length==0){F.remove(M)}});s();row=f[Math.min(f.length-1,K.y)];if(row){J.select(row[Math.min(row.length-1,K.x)].elm,true);J.collapse(true)}}function t(R,P,T,Q){var O,M,L,N,S;O=f[P][R].elm.parentNode;for(L=1;L<=T;L++){O=F.getNext(O,"tr");if(O){for(M=R;M>=0;M--){S=f[P+L][M].elm;if(S.parentNode==O){for(N=1;N<=Q;N++){F.insertAfter(e(S),S)}break}}if(M==-1){for(N=1;N<=Q;N++){O.insertBefore(e(O.cells[0]),O.cells[0])}}}}}function B(){d(f,function(L,M){d(L,function(O,N){var R,Q,S,P;if(j(O)){O=O.elm;R=h(O,"colspan");Q=h(O,"rowspan");if(R>1||Q>1){O.colSpan=O.rowSpan=1;for(P=0;P<R-1;P++){F.insertAfter(e(O),O)}t(N,M,Q-1,R)}}})})}function p(T,Q,W){var O,N,V,U,S,P,R,L,T,M;if(T){pos=E(T);O=pos.x;N=pos.y;V=O+(Q-1);U=N+(W-1)}else{O=K.x;N=K.y;V=C.x;U=C.y}R=w(O,N);L=w(V,U);if(R&&L&&R.part==L.part){B();s();R=w(O,N).elm;R.colSpan=(V-O)+1;R.rowSpan=(U-N)+1;for(P=N;P<=U;P++){for(S=O;S<=V;S++){T=f[P][S].elm;if(T!=R){M=c.grep(T.childNodes);d(M,function(Y,X){if(Y.nodeName!="BR"||X!=M.length-1){R.appendChild(Y)}});F.remove(T)}}}q()}}function l(O){var L,Q,N,P,R,S,M,T;d(f,function(U,V){d(U,function(X,W){if(j(X)){X=X.elm;R=X.parentNode;S=z(R,false);L=V;if(O){return false}}});if(O){return !L}});for(P=0;P<f[0].length;P++){Q=f[L][P].elm;if(Q!=N){if(!O){rowSpan=h(Q,"rowspan");if(rowSpan>1){Q.rowSpan=rowSpan+1;continue}}else{if(L>0&&f[L-1][P]){T=f[L-1][P].elm;rowSpan=h(T,"rowspan");if(rowSpan>1){T.rowSpan=rowSpan+1;continue}}}M=e(Q);M.colSpan=Q.colSpan;S.appendChild(M);N=Q}}if(S.hasChildNodes()){if(!O){F.insertAfter(S,R)}else{R.parentNode.insertBefore(S,R)}}}function g(M){var N,L;d(f,function(O,P){d(O,function(R,Q){if(j(R)){N=Q;if(M){return false}}});if(M){return !N}});d(f,function(R,S){var O=R[N].elm,P,Q;if(O!=L){Q=h(O,"colspan");P=h(O,"rowspan");if(Q==1){if(!M){F.insertAfter(e(O),O);t(N,S,P-1,Q)}else{O.parentNode.insertBefore(e(O),O);t(N,S,P-1,Q)}}else{O.colSpan++}L=O}})}function n(){var L=[];d(f,function(M,N){d(M,function(P,O){if(j(P)&&c.inArray(L,O)===-1){d(f,function(S){var Q=S[O].elm,R;R=h(Q,"colspan");if(R>1){Q.colSpan=R-1}else{F.remove(Q)}});L.push(O)}})});q()}function m(){var M;function L(P){var O,Q,N;O=F.getNext(P,"tr");d(P.cells,function(R){var S=h(R,"rowspan");if(S>1){R.rowSpan=S-1;Q=E(R);t(Q.x,Q.y,1,1)}});Q=E(P.cells[0]);d(f[Q.y],function(R){var S;R=R.elm;if(R!=N){S=h(R,"rowspan");if(S<=1){F.remove(R)}else{R.rowSpan=S-1}N=R}})}M=k();d(M.reverse(),function(N){L(N)});q()}function D(){var L=k();F.remove(L);q();return L}function I(){var L=k();d(L,function(N,M){L[M]=z(N,true)});return L}function A(N,M){var O=k(),L=O[M?0:O.length-1],P=L.cells.length;d(f,function(R){var Q;P=0;d(R,function(T,S){if(T.real){P+=T.colspan}if(T.elm.parentNode==L){Q=1}});if(Q){return false}});if(!M){N.reverse()}d(N,function(S){var R=S.cells.length,Q;for(i=0;i<R;i++){Q=S.cells[i];Q.colSpan=Q.rowSpan=1}for(i=R;i<P;i++){S.appendChild(e(S.cells[R-1]))}for(i=P;i<R;i++){F.remove(S.cells[i])}if(M){L.parentNode.insertBefore(S,L)}else{F.insertAfter(S,L)}})}function E(L){var M;d(f,function(N,O){d(N,function(Q,P){if(Q.elm==L){M={x:P,y:O};return false}});return !M});return M}function v(L){K=E(L)}function H(){var N,M,L;M=L=0;d(f,function(O,P){d(O,function(R,Q){var T,S;if(j(R)){R=f[P][Q];if(Q>M){M=Q}if(P>L){L=P}if(R.real){T=R.colspan-1;S=R.rowspan-1;if(T){if(Q+T>M){M=Q+T}}if(S){if(P+S>L){L=P+S}}}}})});return{x:M,y:L}}function u(R){var O,N,T,S,M,L,P,Q;C=E(R);if(K&&C){O=Math.min(K.x,C.x);N=Math.min(K.y,C.y);T=Math.max(K.x,C.x);S=Math.max(K.y,C.y);M=T;L=S;for(y=N;y<=L;y++){R=f[y][O];if(!R.real){if(O-(R.colspan-1)<O){O-=R.colspan-1}}}for(x=O;x<=M;x++){R=f[N][x];if(!R.real){if(N-(R.rowspan-1)<N){N-=R.rowspan-1}}}for(y=N;y<=S;y++){for(x=O;x<=T;x++){R=f[y][x];if(R.real){P=R.colspan-1;Q=R.rowspan-1;if(P){if(x+P>M){M=x+P}}if(Q){if(y+Q>L){L=y+Q}}}}}F.removeClass(F.select("td.mceSelected,th.mceSelected"),"mceSelected");for(y=N;y<=L;y++){for(x=O;x<=M;x++){F.addClass(f[y][x].elm,"mceSelected")}}}}c.extend(this,{deleteTable:r,split:B,merge:p,insertRow:l,insertCol:g,deleteCols:n,deleteRows:m,cutRows:D,copyRows:I,pasteRows:A,getPos:E,setStartCell:v,setEndCell:u})}c.create("tinymce.plugins.TablePlugin",{init:function(f,g){var e,k;function j(n){var m=f.selection,l=f.dom.getParent(n||m.getNode(),"table");if(l){return new a(l,f.dom,m)}}function h(){f.getBody().style.webkitUserSelect="";f.dom.removeClass(f.dom.select("td.mceSelected,th.mceSelected"),"mceSelected")}d([["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(l){f.addButton(l[0],{title:l[1],cmd:l[2],ui:l[3]})});if(!c.isIE){f.onClick.add(function(l,m){m=m.target;if(m.nodeName==="TABLE"){l.selection.select(m)}})}f.onNodeChange.add(function(m,l,q){var o;q=m.selection.getStart();o=m.dom.getParent(q,"td,th,caption");l.setActive("table",q.nodeName==="TABLE"||!!o);if(o&&o.nodeName==="CAPTION"){o=0}l.setDisabled("delete_table",!o);l.setDisabled("delete_col",!o);l.setDisabled("delete_table",!o);l.setDisabled("delete_row",!o);l.setDisabled("col_after",!o);l.setDisabled("col_before",!o);l.setDisabled("row_after",!o);l.setDisabled("row_before",!o);l.setDisabled("row_props",!o);l.setDisabled("cell_props",!o);l.setDisabled("split_cells",!o);l.setDisabled("merge_cells",!o)});f.onInit.add(function(m){var l,p,q=m.dom,n;e=m.windowManager;m.onMouseDown.add(function(r,s){if(s.button!=2){h();p=q.getParent(s.target,"td,th");l=q.getParent(p,"table")}});q.bind(m.getDoc(),"mouseover",function(u){var s,r,t=u.target;if(p&&(n||t!=p)&&(t.nodeName=="TD"||t.nodeName=="TH")){r=q.getParent(t,"table");if(r==l){if(!n){n=j(r);n.setStartCell(p);m.getBody().style.webkitUserSelect="none"}n.setEndCell(t)}s=m.selection.getSel();if(s.removeAllRanges){s.removeAllRanges()}else{s.empty()}u.preventDefault()}});m.onMouseUp.add(function(A,B){var s,u=A.selection,C,D=u.getSel(),r,v,t,z;if(p){if(n){A.getBody().style.webkitUserSelect=""}function w(E,G){var F=new c.dom.TreeWalker(E,E);do{if(E.nodeType==3&&c.trim(E.nodeValue).length!=0){if(G){s.setStart(E,0)}else{s.setEnd(E,E.nodeValue.length)}return}if(E.nodeName=="BR"){if(G){s.setStartBefore(E)}else{s.setEndBefore(E)}return}}while(E=(G?F.next():F.prev()))}C=q.select("td.mceSelected,th.mceSelected");if(C.length>0){s=q.createRng();v=C[0];z=C[C.length-1];w(v,1);r=new c.dom.TreeWalker(v,q.getParent(C[0],"table"));do{if(v.nodeName=="TD"||v.nodeName=="TH"){if(!q.hasClass(v,"mceSelected")){break}t=v}}while(v=r.next());w(t);u.setRng(s)}A.nodeChanged();p=n=l=null}});m.onKeyUp.add(function(r,s){h()});if(m&&m.plugins.contextmenu){m.plugins.contextmenu.onContextMenu.add(function(t,r,v){var w,u=m.selection,s=u.getNode()||m.getBody();if(m.dom.getParent(v,"td")||m.dom.getParent(v,"th")||m.dom.select("td.mceSelected,th.mceSelected").length){r.removeAll();if(s.nodeName=="A"&&!m.dom.getAttrib(s,"name")){r.add({title:"advanced.link_desc",icon:"link",cmd:m.plugins.advlink?"mceAdvLink":"mceLink",ui:true});r.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});r.addSeparator()}if(s.nodeName=="IMG"&&s.className.indexOf("mceItem")==-1){r.add({title:"advanced.image_desc",icon:"image",cmd:m.plugins.advimage?"mceAdvImage":"mceImage",ui:true});r.addSeparator()}r.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});r.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});r.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});r.addSeparator();w=r.addMenu({title:"table.cell"});w.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});w.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});w.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});w=r.addMenu({title:"table.row"});w.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});w.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});w.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});w.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});w.addSeparator();w.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});w.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});w.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!k);w.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!k);w=r.addMenu({title:"table.col"});w.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});w.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});w.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{r.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(!c.isIE){function o(){var r;for(r=m.getBody().lastChild;r&&r.nodeType==3&&!r.nodeValue.length;r=r.previousSibling){}if(r&&r.nodeName=="TABLE"){m.dom.add(m.getBody(),"p",null,'<br mce_bogus="1" />')}}if(c.isGecko){m.onKeyDown.add(function(s,u){var r,t,v=s.dom;if(u.keyCode==37||u.keyCode==38){r=s.selection.getRng();t=v.getParent(r.startContainer,"table");if(t&&s.getBody().firstChild==t){if(b(r,t)){r=v.createRng();r.setStartBefore(t);r.setEndBefore(t);s.selection.setRng(r);u.preventDefault()}}}})}m.onKeyUp.add(o);m.onSetContent.add(o);m.onVisualAid.add(o);m.onPreProcess.add(function(r,t){var s=t.node.lastChild;if(s&&s.childNodes.length==1&&s.firstChild.nodeName=="BR"){r.dom.remove(s)}});o()}});d({mceTableSplitCells:function(l){l.split()},mceTableMergeCells:function(m){var n,o,l;l=f.dom.getParent(f.selection.getNode(),"th,td");if(l){n=l.rowSpan;o=l.colSpan}if(!f.dom.select("td.mceSelected,th.mceSelected").length){e.open({url:g+"/merge_cells.htm",width:240+parseInt(f.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(f.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:n,cols:o,onaction:function(p){m.merge(l,p.cols,p.rows)},plugin_url:g})}else{m.merge()}},mceTableInsertRowBefore:function(l){l.insertRow(true)},mceTableInsertRowAfter:function(l){l.insertRow()},mceTableInsertColBefore:function(l){l.insertCol(true)},mceTableInsertColAfter:function(l){l.insertCol()},mceTableDeleteCol:function(l){l.deleteCols()},mceTableDeleteRow:function(l){l.deleteRows()},mceTableCutRow:function(l){k=l.cutRows()},mceTableCopyRow:function(l){k=l.copyRows()},mceTablePasteRowBefore:function(l){l.pasteRows(k,true)},mceTablePasteRowAfter:function(l){l.pasteRows(k)},mceTableDelete:function(l){l.deleteTable()}},function(m,l){f.addCommand(l,function(){var n=j();if(n){m(n);f.execCommand("mceRepaint");h()}})});d({mceInsertTable:function(l){e.open({url:g+"/table.htm",width:400+parseInt(f.getLang("table.table_delta_width",0)),height:320+parseInt(f.getLang("table.table_delta_height",0)),inline:1},{plugin_url:g,action:l?l.action:0})},mceTableRowProps:function(){e.open({url:g+"/row.htm",width:400+parseInt(f.getLang("table.rowprops_delta_width",0)),height:295+parseInt(f.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:g})},mceTableCellProps:function(){e.open({url:g+"/cell.htm",width:400+parseInt(f.getLang("table.cellprops_delta_width",0)),height:295+parseInt(f.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:g})}},function(m,l){f.addCommand(l,function(n,o){m(o)})})}});c.PluginManager.add("table",c.plugins.TablePlugin)})(tinymce);
table/js/cell.js ADDED
@@ -0,0 +1,286 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCEPopup.requireLangPack();
2
+
3
+ var ed;
4
+
5
+ function 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.getStart(), "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
+ if (!ed.dom.hasClass(tdElm, 'mceSelected')) {
38
+ formObj.bordercolor.value = bordercolor;
39
+ formObj.bgcolor.value = bgcolor;
40
+ formObj.backgroundimage.value = backgroundimage;
41
+ formObj.width.value = width;
42
+ formObj.height.value = height;
43
+ formObj.id.value = id;
44
+ formObj.lang.value = lang;
45
+ formObj.style.value = ed.dom.serializeStyle(st);
46
+ selectByValue(formObj, 'align', align);
47
+ selectByValue(formObj, 'valign', valign);
48
+ selectByValue(formObj, 'class', className, true, true);
49
+ selectByValue(formObj, 'celltype', celltype);
50
+ selectByValue(formObj, 'dir', dir);
51
+ selectByValue(formObj, 'scope', scope);
52
+
53
+ // Resize some elements
54
+ if (isVisible('backgroundimagebrowser'))
55
+ document.getElementById('backgroundimage').style.width = '180px';
56
+
57
+ updateColor('bordercolor_pick', 'bordercolor');
58
+ updateColor('bgcolor_pick', 'bgcolor');
59
+ } else
60
+ tinyMCEPopup.dom.hide('action');
61
+ }
62
+
63
+ function updateAction() {
64
+ var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0];
65
+
66
+ tinyMCEPopup.restoreSelection();
67
+ el = ed.selection.getStart();
68
+ tdElm = ed.dom.getParent(el, "td,th");
69
+ trElm = ed.dom.getParent(el, "tr");
70
+ tableElm = ed.dom.getParent(el, "table");
71
+
72
+ // Cell is selected
73
+ if (ed.dom.hasClass(tdElm, 'mceSelected')) {
74
+ // Update all selected sells
75
+ tinymce.each(ed.dom.select('td.mceSelected,th.mceSelected'), function(td) {
76
+ updateCell(td);
77
+ });
78
+
79
+ ed.addVisual();
80
+ ed.nodeChanged();
81
+ inst.execCommand('mceEndUndoLevel');
82
+ tinyMCEPopup.close();
83
+ return;
84
+ }
85
+
86
+ ed.execCommand('mceBeginUndoLevel');
87
+
88
+ switch (getSelectValue(formObj, 'action')) {
89
+ case "cell":
90
+ var celltype = getSelectValue(formObj, 'celltype');
91
+ var scope = getSelectValue(formObj, 'scope');
92
+
93
+ function doUpdate(s) {
94
+ if (s) {
95
+ updateCell(tdElm);
96
+
97
+ ed.addVisual();
98
+ ed.nodeChanged();
99
+ inst.execCommand('mceEndUndoLevel');
100
+ tinyMCEPopup.close();
101
+ }
102
+ };
103
+
104
+ if (ed.getParam("accessibility_warnings", 1)) {
105
+ if (celltype == "th" && scope == "")
106
+ tinyMCEPopup.confirm(ed.getLang('table_dlg.missing_scope', '', true), doUpdate);
107
+ else
108
+ doUpdate(1);
109
+
110
+ return;
111
+ }
112
+
113
+ updateCell(tdElm);
114
+ break;
115
+
116
+ case "row":
117
+ var cell = trElm.firstChild;
118
+
119
+ if (cell.nodeName != "TD" && cell.nodeName != "TH")
120
+ cell = nextCell(cell);
121
+
122
+ do {
123
+ cell = updateCell(cell, true);
124
+ } while ((cell = nextCell(cell)) != null);
125
+
126
+ break;
127
+
128
+ case "all":
129
+ var rows = tableElm.getElementsByTagName("tr");
130
+
131
+ for (var i=0; i<rows.length; i++) {
132
+ var cell = rows[i].firstChild;
133
+
134
+ if (cell.nodeName != "TD" && cell.nodeName != "TH")
135
+ cell = nextCell(cell);
136
+
137
+ do {
138
+ cell = updateCell(cell, true);
139
+ } while ((cell = nextCell(cell)) != null);
140
+ }
141
+
142
+ break;
143
+ }
144
+
145
+ ed.addVisual();
146
+ ed.nodeChanged();
147
+ inst.execCommand('mceEndUndoLevel');
148
+ tinyMCEPopup.close();
149
+ }
150
+
151
+ function nextCell(elm) {
152
+ while ((elm = elm.nextSibling) != null) {
153
+ if (elm.nodeName == "TD" || elm.nodeName == "TH")
154
+ return elm;
155
+ }
156
+
157
+ return null;
158
+ }
159
+
160
+ function updateCell(td, skip_id) {
161
+ var inst = ed;
162
+ var formObj = document.forms[0];
163
+ var curCellType = td.nodeName.toLowerCase();
164
+ var celltype = getSelectValue(formObj, 'celltype');
165
+ var doc = inst.getDoc();
166
+ var dom = ed.dom;
167
+
168
+ if (!skip_id)
169
+ td.setAttribute('id', formObj.id.value);
170
+
171
+ td.setAttribute('align', formObj.align.value);
172
+ td.setAttribute('vAlign', formObj.valign.value);
173
+ td.setAttribute('lang', formObj.lang.value);
174
+ td.setAttribute('dir', getSelectValue(formObj, 'dir'));
175
+ td.setAttribute('style', ed.dom.serializeStyle(ed.dom.parseStyle(formObj.style.value)));
176
+ td.setAttribute('scope', formObj.scope.value);
177
+ ed.dom.setAttrib(td, 'class', getSelectValue(formObj, 'class'));
178
+
179
+ // Clear deprecated attributes
180
+ ed.dom.setAttrib(td, 'width', '');
181
+ ed.dom.setAttrib(td, 'height', '');
182
+ ed.dom.setAttrib(td, 'bgColor', '');
183
+ ed.dom.setAttrib(td, 'borderColor', '');
184
+ ed.dom.setAttrib(td, 'background', '');
185
+
186
+ // Set styles
187
+ td.style.width = getCSSSize(formObj.width.value);
188
+ td.style.height = getCSSSize(formObj.height.value);
189
+ if (formObj.bordercolor.value != "") {
190
+ td.style.borderColor = formObj.bordercolor.value;
191
+ td.style.borderStyle = td.style.borderStyle == "" ? "solid" : td.style.borderStyle;
192
+ td.style.borderWidth = td.style.borderWidth == "" ? "1px" : td.style.borderWidth;
193
+ } else
194
+ td.style.borderColor = '';
195
+
196
+ td.style.backgroundColor = formObj.bgcolor.value;
197
+
198
+ if (formObj.backgroundimage.value != "")
199
+ td.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";
200
+ else
201
+ td.style.backgroundImage = '';
202
+
203
+ if (curCellType != celltype) {
204
+ // changing to a different node type
205
+ var newCell = doc.createElement(celltype);
206
+
207
+ for (var c=0; c<td.childNodes.length; c++)
208
+ newCell.appendChild(td.childNodes[c].cloneNode(1));
209
+
210
+ for (var a=0; a<td.attributes.length; a++)
211
+ ed.dom.setAttrib(newCell, td.attributes[a].name, ed.dom.getAttrib(td, td.attributes[a].name));
212
+
213
+ td.parentNode.replaceChild(newCell, td);
214
+ td = newCell;
215
+ }
216
+
217
+ dom.setAttrib(td, 'style', dom.serializeStyle(dom.parseStyle(td.style.cssText)));
218
+
219
+ return td;
220
+ }
221
+
222
+ function changedBackgroundImage() {
223
+ var formObj = document.forms[0];
224
+ var st = ed.dom.parseStyle(formObj.style.value);
225
+
226
+ st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
227
+
228
+ formObj.style.value = ed.dom.serializeStyle(st);
229
+ }
230
+
231
+ function changedSize() {
232
+ var formObj = document.forms[0];
233
+ var st = ed.dom.parseStyle(formObj.style.value);
234
+
235
+ var width = formObj.width.value;
236
+ if (width != "")
237
+ st['width'] = getCSSSize(width);
238
+ else
239
+ st['width'] = "";
240
+
241
+ var height = formObj.height.value;
242
+ if (height != "")
243
+ st['height'] = getCSSSize(height);
244
+ else
245
+ st['height'] = "";
246
+
247
+ formObj.style.value = ed.dom.serializeStyle(st);
248
+ }
249
+
250
+ function changedColor() {
251
+ var formObj = document.forms[0];
252
+ var st = ed.dom.parseStyle(formObj.style.value);
253
+
254
+ st['background-color'] = formObj.bgcolor.value;
255
+ st['border-color'] = formObj.bordercolor.value;
256
+
257
+ formObj.style.value = ed.dom.serializeStyle(st);
258
+ }
259
+
260
+ function changedStyle() {
261
+ var formObj = document.forms[0];
262
+ var st = ed.dom.parseStyle(formObj.style.value);
263
+
264
+ if (st['background-image'])
265
+ formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
266
+ else
267
+ formObj.backgroundimage.value = '';
268
+
269
+ if (st['width'])
270
+ formObj.width.value = trimSize(st['width']);
271
+
272
+ if (st['height'])
273
+ formObj.height.value = trimSize(st['height']);
274
+
275
+ if (st['background-color']) {
276
+ formObj.bgcolor.value = st['background-color'];
277
+ updateColor('bgcolor_pick','bgcolor');
278
+ }
279
+
280
+ if (st['border-color']) {
281
+ formObj.bordercolor.value = st['border-color'];
282
+ updateColor('bordercolor_pick','bordercolor');
283
+ }
284
+ }
285
+
286
+ tinyMCEPopup.onInit.add(init);
table/js/merge_cells.js ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCEPopup.requireLangPack();
2
+
3
+ var MergeCellsDialog = {
4
+ init : function() {
5
+ var f = document.forms[0];
6
+
7
+ f.numcols.value = tinyMCEPopup.getWindowArg('cols', 1);
8
+ f.numrows.value = tinyMCEPopup.getWindowArg('rows', 1);
9
+ },
10
+
11
+ merge : function() {
12
+ var func, f = document.forms[0];
13
+
14
+ tinyMCEPopup.restoreSelection();
15
+
16
+ func = tinyMCEPopup.getWindowArg('onaction');
17
+
18
+ func({
19
+ cols : f.numcols.value,
20
+ rows : f.numrows.value
21
+ });
22
+
23
+ tinyMCEPopup.close();
24
+ }
25
+ };
26
+
27
+ tinyMCEPopup.onInit.add(MergeCellsDialog.init, MergeCellsDialog);
table/js/row.js ADDED
@@ -0,0 +1,237 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCEPopup.requireLangPack();
2
+
3
+ function init() {
4
+ tinyMCEPopup.resizeToInnerSize();
5
+
6
+ document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
7
+ document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
8
+
9
+ var inst = tinyMCEPopup.editor;
10
+ var dom = inst.dom;
11
+ var trElm = dom.getParent(inst.selection.getStart(), "tr");
12
+ var formObj = document.forms[0];
13
+ var st = dom.parseStyle(dom.getAttrib(trElm, "style"));
14
+
15
+ // Get table row data
16
+ var rowtype = trElm.parentNode.nodeName.toLowerCase();
17
+ var align = dom.getAttrib(trElm, 'align');
18
+ var valign = dom.getAttrib(trElm, 'valign');
19
+ var height = trimSize(getStyle(trElm, 'height', 'height'));
20
+ var className = dom.getAttrib(trElm, 'class');
21
+ var bgcolor = convertRGBToHex(getStyle(trElm, 'bgcolor', 'backgroundColor'));
22
+ var backgroundimage = getStyle(trElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");
23
+ var id = dom.getAttrib(trElm, 'id');
24
+ var lang = dom.getAttrib(trElm, 'lang');
25
+ var dir = dom.getAttrib(trElm, 'dir');
26
+
27
+ selectByValue(formObj, 'rowtype', rowtype);
28
+
29
+ // Any cells selected
30
+ if (dom.select('td.mceSelected,th.mceSelected', trElm).length == 0) {
31
+ // Setup form
32
+ addClassesToList('class', 'table_row_styles');
33
+ TinyMCE_EditableSelects.init();
34
+
35
+ formObj.bgcolor.value = bgcolor;
36
+ formObj.backgroundimage.value = backgroundimage;
37
+ formObj.height.value = height;
38
+ formObj.id.value = id;
39
+ formObj.lang.value = lang;
40
+ formObj.style.value = dom.serializeStyle(st);
41
+ selectByValue(formObj, 'align', align);
42
+ selectByValue(formObj, 'valign', valign);
43
+ selectByValue(formObj, 'class', className, true, true);
44
+ selectByValue(formObj, 'dir', dir);
45
+
46
+ // Resize some elements
47
+ if (isVisible('backgroundimagebrowser'))
48
+ document.getElementById('backgroundimage').style.width = '180px';
49
+
50
+ updateColor('bgcolor_pick', 'bgcolor');
51
+ } else
52
+ tinyMCEPopup.dom.hide('action');
53
+ }
54
+
55
+ function updateAction() {
56
+ var inst = tinyMCEPopup.editor, dom = inst.dom, trElm, tableElm, formObj = document.forms[0];
57
+ var action = getSelectValue(formObj, 'action');
58
+
59
+ tinyMCEPopup.restoreSelection();
60
+ trElm = dom.getParent(inst.selection.getStart(), "tr");
61
+ tableElm = dom.getParent(inst.selection.getStart(), "table");
62
+
63
+ // Update all selected rows
64
+ if (dom.select('td.mceSelected,th.mceSelected', trElm).length > 0) {
65
+ tinymce.each(tableElm.rows, function(tr) {
66
+ var i;
67
+
68
+ for (i = 0; i < tr.cells.length; i++) {
69
+ if (dom.hasClass(tr.cells[i], 'mceSelected')) {
70
+ updateRow(tr, true);
71
+ return;
72
+ }
73
+ }
74
+ });
75
+
76
+ inst.addVisual();
77
+ inst.nodeChanged();
78
+ inst.execCommand('mceEndUndoLevel');
79
+ tinyMCEPopup.close();
80
+ return;
81
+ }
82
+
83
+ inst.execCommand('mceBeginUndoLevel');
84
+
85
+ switch (action) {
86
+ case "row":
87
+ updateRow(trElm);
88
+ break;
89
+
90
+ case "all":
91
+ var rows = tableElm.getElementsByTagName("tr");
92
+
93
+ for (var i=0; i<rows.length; i++)
94
+ updateRow(rows[i], true);
95
+
96
+ break;
97
+
98
+ case "odd":
99
+ case "even":
100
+ var rows = tableElm.getElementsByTagName("tr");
101
+
102
+ for (var i=0; i<rows.length; i++) {
103
+ if ((i % 2 == 0 && action == "odd") || (i % 2 != 0 && action == "even"))
104
+ updateRow(rows[i], true, true);
105
+ }
106
+
107
+ break;
108
+ }
109
+
110
+ inst.addVisual();
111
+ inst.nodeChanged();
112
+ inst.execCommand('mceEndUndoLevel');
113
+ tinyMCEPopup.close();
114
+ }
115
+
116
+ function updateRow(tr_elm, skip_id, skip_parent) {
117
+ var inst = tinyMCEPopup.editor;
118
+ var formObj = document.forms[0];
119
+ var dom = inst.dom;
120
+ var curRowType = tr_elm.parentNode.nodeName.toLowerCase();
121
+ var rowtype = getSelectValue(formObj, 'rowtype');
122
+ var doc = inst.getDoc();
123
+
124
+ // Update row element
125
+ if (!skip_id)
126
+ tr_elm.setAttribute('id', formObj.id.value);
127
+
128
+ tr_elm.setAttribute('align', getSelectValue(formObj, 'align'));
129
+ tr_elm.setAttribute('vAlign', getSelectValue(formObj, 'valign'));
130
+ tr_elm.setAttribute('lang', formObj.lang.value);
131
+ tr_elm.setAttribute('dir', getSelectValue(formObj, 'dir'));
132
+ tr_elm.setAttribute('style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));
133
+ dom.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));
134
+
135
+ // Clear deprecated attributes
136
+ tr_elm.setAttribute('background', '');
137
+ tr_elm.setAttribute('bgColor', '');
138
+ tr_elm.setAttribute('height', '');
139
+
140
+ // Set styles
141
+ tr_elm.style.height = getCSSSize(formObj.height.value);
142
+ tr_elm.style.backgroundColor = formObj.bgcolor.value;
143
+
144
+ if (formObj.backgroundimage.value != "")
145
+ tr_elm.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";
146
+ else
147
+ tr_elm.style.backgroundImage = '';
148
+
149
+ // Setup new rowtype
150
+ if (curRowType != rowtype && !skip_parent) {
151
+ // first, clone the node we are working on
152
+ var newRow = tr_elm.cloneNode(1);
153
+
154
+ // next, find the parent of its new destination (creating it if necessary)
155
+ var theTable = dom.getParent(tr_elm, "table");
156
+ var dest = rowtype;
157
+ var newParent = null;
158
+ for (var i = 0; i < theTable.childNodes.length; i++) {
159
+ if (theTable.childNodes[i].nodeName.toLowerCase() == dest)
160
+ newParent = theTable.childNodes[i];
161
+ }
162
+
163
+ if (newParent == null) {
164
+ newParent = doc.createElement(dest);
165
+
166
+ if (dest == "thead") {
167
+ if (theTable.firstChild.nodeName == 'CAPTION')
168
+ inst.dom.insertAfter(newParent, theTable.firstChild);
169
+ else
170
+ theTable.insertBefore(newParent, theTable.firstChild);
171
+ } else
172
+ theTable.appendChild(newParent);
173
+ }
174
+
175
+ // append the row to the new parent
176
+ newParent.appendChild(newRow);
177
+
178
+ // remove the original
179
+ tr_elm.parentNode.removeChild(tr_elm);
180
+
181
+ // set tr_elm to the new node
182
+ tr_elm = newRow;
183
+ }
184
+
185
+ dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(tr_elm.style.cssText)));
186
+ }
187
+
188
+ function changedBackgroundImage() {
189
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
190
+ var st = dom.parseStyle(formObj.style.value);
191
+
192
+ st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
193
+
194
+ formObj.style.value = dom.serializeStyle(st);
195
+ }
196
+
197
+ function changedStyle() {
198
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
199
+ var st = dom.parseStyle(formObj.style.value);
200
+
201
+ if (st['background-image'])
202
+ formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
203
+ else
204
+ formObj.backgroundimage.value = '';
205
+
206
+ if (st['height'])
207
+ formObj.height.value = trimSize(st['height']);
208
+
209
+ if (st['background-color']) {
210
+ formObj.bgcolor.value = st['background-color'];
211
+ updateColor('bgcolor_pick','bgcolor');
212
+ }
213
+ }
214
+
215
+ function changedSize() {
216
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
217
+ var st = dom.parseStyle(formObj.style.value);
218
+
219
+ var height = formObj.height.value;
220
+ if (height != "")
221
+ st['height'] = getCSSSize(height);
222
+ else
223
+ st['height'] = "";
224
+
225
+ formObj.style.value = dom.serializeStyle(st);
226
+ }
227
+
228
+ function changedColor() {
229
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
230
+ var st = dom.parseStyle(formObj.style.value);
231
+
232
+ st['background-color'] = formObj.bgcolor.value;
233
+
234
+ formObj.style.value = dom.serializeStyle(st);
235
+ }
236
+
237
+ tinyMCEPopup.onInit.add(init);
table/js/table.js ADDED
@@ -0,0 +1,454 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCEPopup.requireLangPack();
2
+
3
+ var action, orgTableWidth, orgTableHeight, dom = tinyMCEPopup.editor.dom;
4
+
5
+ function 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
+ html += makeAttrib('_mce_new', '1');
155
+
156
+ if (width && inst.settings.inline_styles) {
157
+ if (style)
158
+ style += '; ';
159
+
160
+ // Force px
161
+ if (/^[0-9\.]+$/.test(width))
162
+ width += 'px';
163
+
164
+ style += 'width: ' + width;
165
+ } else
166
+ html += makeAttrib('width', width);
167
+
168
+ /* if (height) {
169
+ if (style)
170
+ style += '; ';
171
+
172
+ style += 'height: ' + height;
173
+ }*/
174
+
175
+ //html += makeAttrib('height', height);
176
+ //html += makeAttrib('bordercolor', bordercolor);
177
+ //html += makeAttrib('bgcolor', bgcolor);
178
+ html += makeAttrib('align', align);
179
+ html += makeAttrib('frame', frame);
180
+ html += makeAttrib('rules', rules);
181
+ html += makeAttrib('class', className);
182
+ html += makeAttrib('style', style);
183
+ html += makeAttrib('summary', summary);
184
+ html += makeAttrib('dir', dir);
185
+ html += makeAttrib('lang', lang);
186
+ html += '>';
187
+
188
+ if (caption) {
189
+ if (!tinymce.isIE)
190
+ html += '<caption><br _mce_bogus="1"/></caption>';
191
+ else
192
+ html += '<caption></caption>';
193
+ }
194
+
195
+ for (var y=0; y<rows; y++) {
196
+ html += "<tr>";
197
+
198
+ for (var x=0; x<cols; x++) {
199
+ if (!tinymce.isIE)
200
+ html += '<td><br _mce_bogus="1"/></td>';
201
+ else
202
+ html += '<td></td>';
203
+ }
204
+
205
+ html += "</tr>";
206
+ }
207
+
208
+ html += "</table>";
209
+
210
+ inst.execCommand('mceBeginUndoLevel');
211
+
212
+ // Move table
213
+ if (inst.settings.fix_table_elements) {
214
+ var patt = '';
215
+
216
+ inst.focus();
217
+ inst.selection.setContent('<br class="_mce_marker" />');
218
+
219
+ tinymce.each('h1,h2,h3,h4,h5,h6,p'.split(','), function(n) {
220
+ if (patt)
221
+ patt += ',';
222
+
223
+ patt += n + ' ._mce_marker';
224
+ });
225
+
226
+ tinymce.each(inst.dom.select(patt), function(n) {
227
+ inst.dom.split(inst.dom.getParent(n, 'h1,h2,h3,h4,h5,h6,p'), n);
228
+ });
229
+
230
+ dom.setOuterHTML(dom.select('br._mce_marker')[0], html);
231
+ } else
232
+ inst.execCommand('mceInsertContent', false, html);
233
+
234
+ tinymce.each(dom.select('table[_mce_new]'), function(node) {
235
+ var td = dom.select('td', node);
236
+
237
+ try {
238
+ // IE9 might fail to do this selection
239
+ inst.selection.select(td[0], true);
240
+ inst.selection.collapse();
241
+ } catch (ex) {
242
+ // Ignore
243
+ }
244
+
245
+ dom.setAttrib(node, '_mce_new', '');
246
+ });
247
+
248
+ inst.addVisual();
249
+ inst.execCommand('mceEndUndoLevel');
250
+
251
+ tinyMCEPopup.close();
252
+ }
253
+
254
+ function makeAttrib(attrib, value) {
255
+ var formObj = document.forms[0];
256
+ var valueElm = formObj.elements[attrib];
257
+
258
+ if (typeof(value) == "undefined" || value == null) {
259
+ value = "";
260
+
261
+ if (valueElm)
262
+ value = valueElm.value;
263
+ }
264
+
265
+ if (value == "")
266
+ return "";
267
+
268
+ // XML encode it
269
+ value = value.replace(/&/g, '&amp;');
270
+ value = value.replace(/\"/g, '&quot;');
271
+ value = value.replace(/</g, '&lt;');
272
+ value = value.replace(/>/g, '&gt;');
273
+
274
+ return ' ' + attrib + '="' + value + '"';
275
+ }
276
+
277
+ function init() {
278
+ tinyMCEPopup.resizeToInnerSize();
279
+
280
+ document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
281
+ document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
282
+ document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');
283
+ document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
284
+
285
+ var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', '');
286
+ var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = "";
287
+ var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules = "", frame = "";
288
+ var inst = tinyMCEPopup.editor, dom = inst.dom;
289
+ var formObj = document.forms[0];
290
+ var elm = dom.getParent(inst.selection.getNode(), "table");
291
+
292
+ action = tinyMCEPopup.getWindowArg('action');
293
+
294
+ if (!action)
295
+ action = elm ? "update" : "insert";
296
+
297
+ if (elm && action != "insert") {
298
+ var rowsAr = elm.rows;
299
+ var cols = 0;
300
+ for (var i=0; i<rowsAr.length; i++)
301
+ if (rowsAr[i].cells.length > cols)
302
+ cols = rowsAr[i].cells.length;
303
+
304
+ cols = cols;
305
+ rows = rowsAr.length;
306
+
307
+ st = dom.parseStyle(dom.getAttrib(elm, "style"));
308
+ border = trimSize(getStyle(elm, 'border', 'borderWidth'));
309
+ cellpadding = dom.getAttrib(elm, 'cellpadding', "");
310
+ cellspacing = dom.getAttrib(elm, 'cellspacing', "");
311
+ width = trimSize(getStyle(elm, 'width', 'width'));
312
+ height = trimSize(getStyle(elm, 'height', 'height'));
313
+ bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor'));
314
+ bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor'));
315
+ align = dom.getAttrib(elm, 'align', align);
316
+ frame = dom.getAttrib(elm, 'frame');
317
+ rules = dom.getAttrib(elm, 'rules');
318
+ className = tinymce.trim(dom.getAttrib(elm, 'class').replace(/mceItem.+/g, ''));
319
+ id = dom.getAttrib(elm, 'id');
320
+ summary = dom.getAttrib(elm, 'summary');
321
+ style = dom.serializeStyle(st);
322
+ dir = dom.getAttrib(elm, 'dir');
323
+ lang = dom.getAttrib(elm, 'lang');
324
+ background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");
325
+ formObj.caption.checked = elm.getElementsByTagName('caption').length > 0;
326
+
327
+ orgTableWidth = width;
328
+ orgTableHeight = height;
329
+
330
+ action = "update";
331
+ formObj.insert.value = inst.getLang('update');
332
+ }
333
+
334
+ addClassesToList('class', "table_styles");
335
+ TinyMCE_EditableSelects.init();
336
+
337
+ // Update form
338
+ selectByValue(formObj, 'align', align);
339
+ selectByValue(formObj, 'tframe', frame);
340
+ selectByValue(formObj, 'rules', rules);
341
+ selectByValue(formObj, 'class', className, true, true);
342
+ formObj.cols.value = cols;
343
+ formObj.rows.value = rows;
344
+ formObj.border.value = border;
345
+ formObj.cellpadding.value = cellpadding;
346
+ formObj.cellspacing.value = cellspacing;
347
+ formObj.width.value = width;
348
+ formObj.height.value = height;
349
+ formObj.bordercolor.value = bordercolor;
350
+ formObj.bgcolor.value = bgcolor;
351
+ formObj.id.value = id;
352
+ formObj.summary.value = summary;
353
+ formObj.style.value = style;
354
+ formObj.dir.value = dir;
355
+ formObj.lang.value = lang;
356
+ formObj.backgroundimage.value = background;
357
+
358
+ updateColor('bordercolor_pick', 'bordercolor');
359
+ updateColor('bgcolor_pick', 'bgcolor');
360
+
361
+ // Resize some elements
362
+ if (isVisible('backgroundimagebrowser'))
363
+ document.getElementById('backgroundimage').style.width = '180px';
364
+
365
+ // Disable some fields in update mode
366
+ if (action == "update") {
367
+ formObj.cols.disabled = true;
368
+ formObj.rows.disabled = true;
369
+ }
370
+ }
371
+
372
+ function changedSize() {
373
+ var formObj = document.forms[0];
374
+ var st = dom.parseStyle(formObj.style.value);
375
+
376
+ /* var width = formObj.width.value;
377
+ if (width != "")
378
+ st['width'] = tinyMCEPopup.getParam("inline_styles") ? getCSSSize(width) : "";
379
+ else
380
+ st['width'] = "";*/
381
+
382
+ var height = formObj.height.value;
383
+ if (height != "")
384
+ st['height'] = getCSSSize(height);
385
+ else
386
+ st['height'] = "";
387
+
388
+ formObj.style.value = dom.serializeStyle(st);
389
+ }
390
+
391
+ function changedBackgroundImage() {
392
+ var formObj = document.forms[0];
393
+ var st = dom.parseStyle(formObj.style.value);
394
+
395
+ st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
396
+
397
+ formObj.style.value = dom.serializeStyle(st);
398
+ }
399
+
400
+ function changedBorder() {
401
+ var formObj = document.forms[0];
402
+ var st = dom.parseStyle(formObj.style.value);
403
+
404
+ // Update border width if the element has a color
405
+ if (formObj.border.value != "" && formObj.bordercolor.value != "")
406
+ st['border-width'] = formObj.border.value + "px";
407
+
408
+ formObj.style.value = dom.serializeStyle(st);
409
+ }
410
+
411
+ function changedColor() {
412
+ var formObj = document.forms[0];
413
+ var st = dom.parseStyle(formObj.style.value);
414
+
415
+ st['background-color'] = formObj.bgcolor.value;
416
+
417
+ if (formObj.bordercolor.value != "") {
418
+ st['border-color'] = formObj.bordercolor.value;
419
+
420
+ // Add border-width if it's missing
421
+ if (!st['border-width'])
422
+ st['border-width'] = formObj.border.value == "" ? "1px" : formObj.border.value + "px";
423
+ }
424
+
425
+ formObj.style.value = dom.serializeStyle(st);
426
+ }
427
+
428
+ function changedStyle() {
429
+ var formObj = document.forms[0];
430
+ var st = dom.parseStyle(formObj.style.value);
431
+
432
+ if (st['background-image'])
433
+ formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");
434
+ else
435
+ formObj.backgroundimage.value = '';
436
+
437
+ if (st['width'])
438
+ formObj.width.value = trimSize(st['width']);
439
+
440
+ if (st['height'])
441
+ formObj.height.value = trimSize(st['height']);
442
+
443
+ if (st['background-color']) {
444
+ formObj.bgcolor.value = st['background-color'];
445
+ updateColor('bgcolor_pick','bgcolor');
446
+ }
447
+
448
+ if (st['border-color']) {
449
+ formObj.bordercolor.value = st['border-color'];
450
+ updateColor('bordercolor_pick','bordercolor');
451
+ }
452
+ }
453
+
454
+ tinyMCEPopup.onInit.add(init);
table/langs/en_dlg.js ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ tinyMCE.addI18n('en.table_dlg',{
2
+ general_tab:"General",
3
+ advanced_tab:"Advanced",
4
+ general_props:"General properties",
5
+ advanced_props:"Advanced properties",
6
+ rowtype:"Row in table part",
7
+ title:"Insert/Modify table",
8
+ width:"Width",
9
+ height:"Height",
10
+ cols:"Cols",
11
+ rows:"Rows",
12
+ cellspacing:"Cellspacing",
13
+ cellpadding:"Cellpadding",
14
+ border:"Border",
15
+ align:"Alignment",
16
+ align_default:"Default",
17
+ align_left:"Left",
18
+ align_right:"Right",
19
+ align_middle:"Center",
20
+ row_title:"Table row properties",
21
+ cell_title:"Table cell properties",
22
+ cell_type:"Cell type",
23
+ valign:"Vertical alignment",
24
+ align_top:"Top",
25
+ align_bottom:"Bottom",
26
+ bordercolor:"Border color",
27
+ bgcolor:"Background color",
28
+ merge_cells_title:"Merge table cells",
29
+ id:"Id",
30
+ style:"Style",
31
+ langdir:"Language direction",
32
+ langcode:"Language code",
33
+ mime:"Target MIME type",
34
+ ltr:"Left to right",
35
+ rtl:"Right to left",
36
+ bgimage:"Background image",
37
+ summary:"Summary",
38
+ td:"Data",
39
+ th:"Header",
40
+ cell_cell:"Update current cell",
41
+ cell_row:"Update all cells in row",
42
+ cell_all:"Update all cells in table",
43
+ row_row:"Update current row",
44
+ row_odd:"Update odd rows in table",
45
+ row_even:"Update even rows in table",
46
+ row_all:"Update all rows in table",
47
+ thead:"Table Head",
48
+ tbody:"Table Body",
49
+ tfoot:"Table Foot",
50
+ scope:"Scope",
51
+ rowgroup:"Row Group",
52
+ colgroup:"Col Group",
53
+ col_limit:"You've exceeded the maximum number of columns of {$cols}.",
54
+ row_limit:"You've exceeded the maximum number of rows of {$rows}.",
55
+ cell_limit:"You've exceeded the maximum number of cells of {$cells}.",
56
+ missing_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.",
57
+ caption:"Table caption",
58
+ frame:"Frame",
59
+ frame_none:"none",
60
+ frame_groups:"groups",
61
+ frame_rows:"rows",
62
+ frame_cols:"cols",
63
+ frame_all:"all",
64
+ rules:"Rules",
65
+ rules_void:"void",
66
+ rules_above:"above",
67
+ rules_below:"below",
68
+ rules_hsides:"hsides",
69
+ rules_lhs:"lhs",
70
+ rules_rhs:"rhs",
71
+ rules_vsides:"vsides",
72
+ rules_box:"box",
73
+ rules_border:"border"
74
+ });
table/merge_cells.htm ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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="../../../../wp-includes/js/tinymce/tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/mctabs.js"></script>
7
+ <script type="text/javascript" src="../../../../wp-includes/js/tinymce/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="MergeCellsDialog.merge();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
+ <input type="submit" id="insert" name="insert" value="{#update}" />
28
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
29
+ </div>
30
+ </form>
31
+ </body>
32
+ </html>
table/row.htm ADDED
@@ -0,0 +1,155 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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="../../../../wp-includes/js/tinymce/tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/mctabs.js"></script>
7
+ <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/form_utils.js"></script>
8
+ <script type="text/javascript" src="../../../../wp-includes/js/tinymce/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
+ <input type="submit" id="insert" name="insert" value="{#update}" />
151
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
152
+ </div>
153
+ </form>
154
+ </body>
155
+ </html>
table/table.htm ADDED
@@ -0,0 +1,187 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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="../../../../wp-includes/js/tinymce/tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/mctabs.js"></script>
7
+ <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/form_utils.js"></script>
8
+ <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/validate.js"></script>
9
+ <script type="text/javascript" src="../../../../wp-includes/js/tinymce/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
+ <input type="submit" id="insert" name="insert" value="{#insert}" />
183
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
184
+ </div>
185
+ </form>
186
+ </body>
187
+ </html>