alchemy_cms 2.4.rc2 → 2.4.rc4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. data/.gitignore +2 -1
  2. data/.travis.yml +7 -4
  3. data/README.md +1 -0
  4. data/alchemy_cms.gemspec +19 -1
  5. data/app/assets/javascripts/alchemy/alchemy.dragndrop.js +5 -2
  6. data/app/assets/javascripts/alchemy/alchemy.link_overlay.js.coffee +1 -1
  7. data/app/assets/javascripts/alchemy/alchemy.preview_window.js +4 -21
  8. data/app/assets/javascripts/alchemy/alchemy.windows.js +0 -1
  9. data/app/assets/stylesheets/alchemy/base.scss +4 -0
  10. data/app/assets/stylesheets/alchemy/elements.scss +59 -60
  11. data/app/assets/stylesheets/alchemy/flash.scss +3 -3
  12. data/app/assets/stylesheets/alchemy/form_elements.scss +15 -2
  13. data/app/assets/stylesheets/alchemy/jquery-ui.scss +11 -3
  14. data/app/assets/stylesheets/alchemy/mixins.scss +9 -0
  15. data/app/assets/stylesheets/alchemy/tinymce_content.css.scss +1 -1
  16. data/app/assets/stylesheets/alchemy/tinymce_dialog.css.scss +4 -0
  17. data/app/assets/stylesheets/alchemy/variables.scss +5 -1
  18. data/app/controllers/alchemy/admin/base_controller.rb +18 -3
  19. data/app/controllers/alchemy/admin/elements_controller.rb +4 -7
  20. data/app/controllers/alchemy/admin/pages_controller.rb +3 -4
  21. data/app/controllers/alchemy/admin/resources_controller.rb +1 -18
  22. data/app/controllers/alchemy/admin/users_controller.rb +8 -5
  23. data/app/helpers/alchemy/admin/pages_helper.rb +6 -1
  24. data/app/models/alchemy/content.rb +26 -5
  25. data/app/models/alchemy/element.rb +1 -0
  26. data/app/models/alchemy/essence_richtext.rb +1 -1
  27. data/app/models/alchemy/page.rb +131 -88
  28. data/app/views/alchemy/admin/clipboard/insert.js.erb +1 -1
  29. data/app/views/alchemy/admin/elements/create.js.erb +6 -1
  30. data/app/views/alchemy/admin/elements/trash.js.erb +1 -3
  31. data/app/views/alchemy/admin/resources/_form.html.erb +13 -1
  32. data/app/views/alchemy/admin/trash/index.html.erb +1 -1
  33. data/app/views/alchemy/base/remote_errors.js.erb +5 -1
  34. data/app/views/alchemy/essences/_essence_link_view.html.erb +2 -0
  35. data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +1 -1
  36. data/config/locales/alchemy.de.yml +11 -4
  37. data/lib/alchemy/capistrano.rb +59 -1
  38. data/lib/alchemy/essence.rb +1 -0
  39. data/lib/alchemy/seeder.rb +39 -49
  40. data/lib/alchemy/tinymce.rb +1 -1
  41. data/lib/alchemy/version.rb +1 -1
  42. data/lib/rails/generators/alchemy/deploy_script/deploy_script_generator.rb +1 -1
  43. data/lib/rails/generators/alchemy/deploy_script/templates/deploy.rb.tt +3 -0
  44. data/lib/rails/generators/alchemy/elements/templates/view.html.haml +2 -2
  45. data/lib/rails/generators/alchemy/elements/templates/view.html.slim +2 -2
  46. data/lib/tasks/database.rake +25 -0
  47. data/lib/tasks/install.rake +5 -14
  48. data/spec/factories.rb +10 -0
  49. data/spec/integration/admin/resources_integration_spec.rb +64 -23
  50. data/spec/integration/pages_controller_spec.rb +0 -2
  51. data/spec/libraries/resources_helper_spec.rb +6 -2
  52. data/spec/models/content_spec.rb +31 -0
  53. data/spec/models/element_spec.rb +7 -2
  54. data/spec/models/page_spec.rb +36 -0
  55. data/vendor/assets/javascripts/jquery_plugins/jquery.dialogextend.1_0_1.js +676 -0
  56. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.tabspaging.js +298 -238
  57. data/vendor/assets/javascripts/tiny_mce/langs/de.js +1 -1
  58. data/vendor/assets/javascripts/tiny_mce/langs/en.js +1 -1
  59. data/vendor/assets/javascripts/tiny_mce/license.txt +6 -6
  60. data/vendor/assets/javascripts/tiny_mce/plugins/fullscreen/editor_plugin.js +1 -1
  61. data/vendor/assets/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +97 -97
  62. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/template.htm +376 -386
  63. data/vendor/assets/javascripts/tiny_mce/plugins/paste/editor_plugin.js +1 -1
  64. data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pastetext.js +30 -30
  65. data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pasteword.js +45 -45
  66. data/vendor/assets/javascripts/tiny_mce/plugins/paste/langs/de_dlg.js +1 -1
  67. data/vendor/assets/javascripts/tiny_mce/plugins/paste/pastetext.htm +17 -20
  68. data/vendor/assets/javascripts/tiny_mce/plugins/paste/pasteword.htm +12 -12
  69. data/vendor/assets/javascripts/tiny_mce/plugins/table/cell.htm +173 -183
  70. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/cell.css +4 -4
  71. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/row.css +7 -7
  72. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/table.css +3 -3
  73. data/vendor/assets/javascripts/tiny_mce/plugins/table/editor_plugin.js +1 -1
  74. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/cell.js +280 -282
  75. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/merge_cells.js +15 -15
  76. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/row.js +221 -204
  77. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/table.js +448 -435
  78. data/vendor/assets/javascripts/tiny_mce/plugins/table/langs/de_dlg.js +1 -1
  79. data/vendor/assets/javascripts/tiny_mce/plugins/table/merge_cells.htm +22 -24
  80. data/vendor/assets/javascripts/tiny_mce/plugins/table/row.htm +136 -144
  81. data/vendor/assets/javascripts/tiny_mce/plugins/table/table.htm +168 -184
  82. data/vendor/assets/javascripts/tiny_mce/themes/advanced/about.htm +46 -62
  83. data/vendor/assets/javascripts/tiny_mce/themes/advanced/anchor.htm +16 -17
  84. data/vendor/assets/javascripts/tiny_mce/themes/advanced/charmap.htm +47 -56
  85. data/vendor/assets/javascripts/tiny_mce/themes/advanced/color_picker.htm +52 -69
  86. data/vendor/assets/javascripts/tiny_mce/themes/advanced/editor_template.js +1 -852
  87. data/vendor/assets/javascripts/tiny_mce/themes/advanced/image.htm +69 -79
  88. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/icons.gif +0 -0
  89. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/about.js +48 -48
  90. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/anchor.js +50 -37
  91. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/charmap.js +317 -317
  92. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/color_picker.js +345 -331
  93. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/image.js +248 -246
  94. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/link.js +152 -146
  95. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/source_editor.js +53 -31
  96. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/de.js +1 -1
  97. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/de_dlg.js +1 -1
  98. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/en.js +1 -1
  99. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +1 -1
  100. data/vendor/assets/javascripts/tiny_mce/themes/advanced/link.htm +46 -53
  101. data/vendor/assets/javascripts/tiny_mce/themes/advanced/shortcuts.htm +45 -57
  102. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/content.css +47 -182
  103. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +93 -399
  104. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +191 -890
  105. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/content.css +24 -102
  106. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +79 -377
  107. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css +80 -451
  108. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +45 -167
  109. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +93 -399
  110. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +194 -889
  111. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +7 -33
  112. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +4 -15
  113. data/vendor/assets/javascripts/tiny_mce/themes/advanced/source_editor.htm +16 -19
  114. data/vendor/assets/javascripts/tiny_mce/tiny_mce.js +1 -1
  115. data/vendor/assets/javascripts/tiny_mce/tiny_mce_popup.js +1 -1
  116. data/vendor/assets/javascripts/tiny_mce/utils/editable_selects.js +46 -46
  117. data/vendor/assets/javascripts/tiny_mce/utils/form_utils.js +124 -124
  118. data/vendor/assets/javascripts/tiny_mce/utils/mctabs.js +112 -112
  119. data/vendor/assets/javascripts/tiny_mce/utils/validate.js +213 -213
  120. metadata +11 -6
  121. data/spec/dummy/public/404.html.bak +0 -26
  122. data/vendor/assets/javascripts/jquery_plugins/jquery.dialogextend.min.js +0 -8
@@ -1,27 +1,27 @@
1
1
  tinyMCEPopup.requireLangPack();
2
2
 
3
3
  var MergeCellsDialog = {
4
- init:function () {
5
- var f = document.forms[0];
4
+ init : function() {
5
+ var f = document.forms[0];
6
6
 
7
- f.numcols.value = tinyMCEPopup.getWindowArg('cols', 1);
8
- f.numrows.value = tinyMCEPopup.getWindowArg('rows', 1);
9
- },
7
+ f.numcols.value = tinyMCEPopup.getWindowArg('cols', 1);
8
+ f.numrows.value = tinyMCEPopup.getWindowArg('rows', 1);
9
+ },
10
10
 
11
- merge:function () {
12
- var func, f = document.forms[0];
11
+ merge : function() {
12
+ var func, f = document.forms[0];
13
13
 
14
- tinyMCEPopup.restoreSelection();
14
+ tinyMCEPopup.restoreSelection();
15
15
 
16
- func = tinyMCEPopup.getWindowArg('onaction');
16
+ func = tinyMCEPopup.getWindowArg('onaction');
17
17
 
18
- func({
19
- cols:f.numcols.value,
20
- rows:f.numrows.value
21
- });
18
+ func({
19
+ cols : f.numcols.value,
20
+ rows : f.numrows.value
21
+ });
22
22
 
23
- tinyMCEPopup.close();
24
- }
23
+ tinyMCEPopup.close();
24
+ }
25
25
  };
26
26
 
27
27
  tinyMCEPopup.onInit.add(MergeCellsDialog.init, MergeCellsDialog);
@@ -1,237 +1,254 @@
1
1
  tinyMCEPopup.requireLangPack();
2
2
 
3
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');
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
+ setActionforRowType(formObj, rowtype);
29
+
30
+ // Any cells selected
31
+ if (dom.select('td.mceSelected,th.mceSelected', trElm).length == 0) {
32
+ // Setup form
33
+ addClassesToList('class', 'table_row_styles');
34
+ TinyMCE_EditableSelects.init();
35
+
36
+ formObj.bgcolor.value = bgcolor;
37
+ formObj.backgroundimage.value = backgroundimage;
38
+ formObj.height.value = height;
39
+ formObj.id.value = id;
40
+ formObj.lang.value = lang;
41
+ formObj.style.value = dom.serializeStyle(st);
42
+ selectByValue(formObj, 'align', align);
43
+ selectByValue(formObj, 'valign', valign);
44
+ selectByValue(formObj, 'class', className, true, true);
45
+ selectByValue(formObj, 'dir', dir);
46
+
47
+ // Resize some elements
48
+ if (isVisible('backgroundimagebrowser'))
49
+ document.getElementById('backgroundimage').style.width = '180px';
50
+
51
+ updateColor('bgcolor_pick', 'bgcolor');
52
+ } else
53
+ tinyMCEPopup.dom.hide('action');
53
54
  }
54
55
 
55
56
  function updateAction() {
56
- var inst = tinyMCEPopup.editor, dom = inst.dom, trElm, tableElm, formObj = document.forms[0];
57
- var action = getSelectValue(formObj, 'action');
58
-
59
- if (!AutoValidator.validate(formObj)) {
60
- tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');
61
- return false;
62
- }
63
-
64
- tinyMCEPopup.restoreSelection();
65
- trElm = dom.getParent(inst.selection.getStart(), "tr");
66
- tableElm = dom.getParent(inst.selection.getStart(), "table");
67
-
68
- // Update all selected rows
69
- if (dom.select('td.mceSelected,th.mceSelected', trElm).length > 0) {
70
- tinymce.each(tableElm.rows, function (tr) {
71
- var i;
72
-
73
- for (i = 0; i < tr.cells.length; i++) {
74
- if (dom.hasClass(tr.cells[i], 'mceSelected')) {
75
- updateRow(tr, true);
76
- return;
77
- }
78
- }
79
- });
80
-
81
- inst.addVisual();
82
- inst.nodeChanged();
83
- inst.execCommand('mceEndUndoLevel');
84
- tinyMCEPopup.close();
85
- return;
86
- }
87
-
88
- switch (action) {
89
- case "row":
90
- updateRow(trElm);
91
- break;
92
-
93
- case "all":
94
- var rows = tableElm.getElementsByTagName("tr");
95
-
96
- for (var i = 0; i < rows.length; i++)
97
- updateRow(rows[i], true);
98
-
99
- break;
100
-
101
- case "odd":
102
- case "even":
103
- var rows = tableElm.getElementsByTagName("tr");
104
-
105
- for (var i = 0; i < rows.length; i++) {
106
- if ((i % 2 == 0 && action == "odd") || (i % 2 != 0 && action == "even"))
107
- updateRow(rows[i], true, true);
108
- }
109
-
110
- break;
111
- }
112
-
113
- inst.addVisual();
114
- inst.nodeChanged();
115
- inst.execCommand('mceEndUndoLevel');
116
- tinyMCEPopup.close();
57
+ var inst = tinyMCEPopup.editor, dom = inst.dom, trElm, tableElm, formObj = document.forms[0];
58
+ var action = getSelectValue(formObj, 'action');
59
+
60
+ if (!AutoValidator.validate(formObj)) {
61
+ tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');
62
+ return false;
63
+ }
64
+
65
+ tinyMCEPopup.restoreSelection();
66
+ trElm = dom.getParent(inst.selection.getStart(), "tr");
67
+ tableElm = dom.getParent(inst.selection.getStart(), "table");
68
+
69
+ // Update all selected rows
70
+ if (dom.select('td.mceSelected,th.mceSelected', trElm).length > 0) {
71
+ tinymce.each(tableElm.rows, function(tr) {
72
+ var i;
73
+
74
+ for (i = 0; i < tr.cells.length; i++) {
75
+ if (dom.hasClass(tr.cells[i], 'mceSelected')) {
76
+ updateRow(tr, true);
77
+ return;
78
+ }
79
+ }
80
+ });
81
+
82
+ inst.addVisual();
83
+ inst.nodeChanged();
84
+ inst.execCommand('mceEndUndoLevel');
85
+ tinyMCEPopup.close();
86
+ return;
87
+ }
88
+
89
+ switch (action) {
90
+ case "row":
91
+ updateRow(trElm);
92
+ break;
93
+
94
+ case "all":
95
+ var rows = tableElm.getElementsByTagName("tr");
96
+
97
+ for (var i=0; i<rows.length; i++)
98
+ updateRow(rows[i], true);
99
+
100
+ break;
101
+
102
+ case "odd":
103
+ case "even":
104
+ var rows = tableElm.getElementsByTagName("tr");
105
+
106
+ for (var i=0; i<rows.length; i++) {
107
+ if ((i % 2 == 0 && action == "odd") || (i % 2 != 0 && action == "even"))
108
+ updateRow(rows[i], true, true);
109
+ }
110
+
111
+ break;
112
+ }
113
+
114
+ inst.addVisual();
115
+ inst.nodeChanged();
116
+ inst.execCommand('mceEndUndoLevel');
117
+ tinyMCEPopup.close();
117
118
  }
118
119
 
119
120
  function updateRow(tr_elm, skip_id, skip_parent) {
120
- var inst = tinyMCEPopup.editor;
121
- var formObj = document.forms[0];
122
- var dom = inst.dom;
123
- var curRowType = tr_elm.parentNode.nodeName.toLowerCase();
124
- var rowtype = getSelectValue(formObj, 'rowtype');
125
- var doc = inst.getDoc();
126
-
127
- // Update row element
128
- if (!skip_id)
129
- dom.setAttrib(tr_elm, 'id', formObj.id.value);
130
-
131
- dom.setAttrib(tr_elm, 'align', getSelectValue(formObj, 'align'));
132
- dom.setAttrib(tr_elm, 'vAlign', getSelectValue(formObj, 'valign'));
133
- dom.setAttrib(tr_elm, 'lang', formObj.lang.value);
134
- dom.setAttrib(tr_elm, 'dir', getSelectValue(formObj, 'dir'));
135
- dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));
136
- dom.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));
137
-
138
- // Clear deprecated attributes
139
- dom.setAttrib(tr_elm, 'background', '');
140
- dom.setAttrib(tr_elm, 'bgColor', '');
141
- dom.setAttrib(tr_elm, 'height', '');
142
-
143
- // Set styles
144
- tr_elm.style.height = getCSSSize(formObj.height.value);
145
- tr_elm.style.backgroundColor = formObj.bgcolor.value;
146
-
147
- if (formObj.backgroundimage.value != "")
148
- tr_elm.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";
149
- else
150
- tr_elm.style.backgroundImage = '';
151
-
152
- // Setup new rowtype
153
- if (curRowType != rowtype && !skip_parent) {
154
- // first, clone the node we are working on
155
- var newRow = tr_elm.cloneNode(1);
156
-
157
- // next, find the parent of its new destination (creating it if necessary)
158
- var theTable = dom.getParent(tr_elm, "table");
159
- var dest = rowtype;
160
- var newParent = null;
161
- for (var i = 0; i < theTable.childNodes.length; i++) {
162
- if (theTable.childNodes[i].nodeName.toLowerCase() == dest)
163
- newParent = theTable.childNodes[i];
164
- }
165
-
166
- if (newParent == null) {
167
- newParent = doc.createElement(dest);
168
-
169
- if (theTable.firstChild.nodeName == 'CAPTION')
170
- inst.dom.insertAfter(newParent, theTable.firstChild);
171
- else
172
- theTable.insertBefore(newParent, theTable.firstChild);
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)));
121
+ var inst = tinyMCEPopup.editor;
122
+ var formObj = document.forms[0];
123
+ var dom = inst.dom;
124
+ var curRowType = tr_elm.parentNode.nodeName.toLowerCase();
125
+ var rowtype = getSelectValue(formObj, 'rowtype');
126
+ var doc = inst.getDoc();
127
+
128
+ // Update row element
129
+ if (!skip_id)
130
+ dom.setAttrib(tr_elm, 'id', formObj.id.value);
131
+
132
+ dom.setAttrib(tr_elm, 'align', getSelectValue(formObj, 'align'));
133
+ dom.setAttrib(tr_elm, 'vAlign', getSelectValue(formObj, 'valign'));
134
+ dom.setAttrib(tr_elm, 'lang', formObj.lang.value);
135
+ dom.setAttrib(tr_elm, 'dir', getSelectValue(formObj, 'dir'));
136
+ dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));
137
+ dom.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));
138
+
139
+ // Clear deprecated attributes
140
+ dom.setAttrib(tr_elm, 'background', '');
141
+ dom.setAttrib(tr_elm, 'bgColor', '');
142
+ dom.setAttrib(tr_elm, 'height', '');
143
+
144
+ // Set styles
145
+ tr_elm.style.height = getCSSSize(formObj.height.value);
146
+ tr_elm.style.backgroundColor = formObj.bgcolor.value;
147
+
148
+ if (formObj.backgroundimage.value != "")
149
+ tr_elm.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";
150
+ else
151
+ tr_elm.style.backgroundImage = '';
152
+
153
+ // Setup new rowtype
154
+ if (curRowType != rowtype && !skip_parent) {
155
+ // first, clone the node we are working on
156
+ var newRow = tr_elm.cloneNode(1);
157
+
158
+ // next, find the parent of its new destination (creating it if necessary)
159
+ var theTable = dom.getParent(tr_elm, "table");
160
+ var dest = rowtype;
161
+ var newParent = null;
162
+ for (var i = 0; i < theTable.childNodes.length; i++) {
163
+ if (theTable.childNodes[i].nodeName.toLowerCase() == dest)
164
+ newParent = theTable.childNodes[i];
165
+ }
166
+
167
+ if (newParent == null) {
168
+ newParent = doc.createElement(dest);
169
+
170
+ if (theTable.firstChild.nodeName == 'CAPTION')
171
+ inst.dom.insertAfter(newParent, theTable.firstChild);
172
+ else
173
+ theTable.insertBefore(newParent, theTable.firstChild);
174
+ }
175
+
176
+ // append the row to the new parent
177
+ newParent.appendChild(newRow);
178
+
179
+ // remove the original
180
+ tr_elm.parentNode.removeChild(tr_elm);
181
+
182
+ // set tr_elm to the new node
183
+ tr_elm = newRow;
184
+ }
185
+
186
+ dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(tr_elm.style.cssText)));
186
187
  }
187
188
 
188
189
  function changedBackgroundImage() {
189
- var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
190
- var st = dom.parseStyle(formObj.style.value);
190
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
191
+ var st = dom.parseStyle(formObj.style.value);
191
192
 
192
- st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
193
+ st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
193
194
 
194
- formObj.style.value = dom.serializeStyle(st);
195
+ formObj.style.value = dom.serializeStyle(st);
195
196
  }
196
197
 
197
198
  function changedStyle() {
198
- var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
199
- var st = dom.parseStyle(formObj.style.value);
199
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
200
+ var st = dom.parseStyle(formObj.style.value);
200
201
 
201
- if (st['background-image'])
202
- formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
203
- else
204
- formObj.backgroundimage.value = '';
202
+ if (st['background-image'])
203
+ formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
204
+ else
205
+ formObj.backgroundimage.value = '';
205
206
 
206
- if (st['height'])
207
- formObj.height.value = trimSize(st['height']);
207
+ if (st['height'])
208
+ formObj.height.value = trimSize(st['height']);
208
209
 
209
- if (st['background-color']) {
210
- formObj.bgcolor.value = st['background-color'];
211
- updateColor('bgcolor_pick', 'bgcolor');
212
- }
210
+ if (st['background-color']) {
211
+ formObj.bgcolor.value = st['background-color'];
212
+ updateColor('bgcolor_pick','bgcolor');
213
+ }
213
214
  }
214
215
 
215
216
  function changedSize() {
216
- var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
217
- var st = dom.parseStyle(formObj.style.value);
217
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
218
+ var st = dom.parseStyle(formObj.style.value);
218
219
 
219
- var height = formObj.height.value;
220
- if (height != "")
221
- st['height'] = getCSSSize(height);
222
- else
223
- st['height'] = "";
220
+ var height = formObj.height.value;
221
+ if (height != "")
222
+ st['height'] = getCSSSize(height);
223
+ else
224
+ st['height'] = "";
224
225
 
225
- formObj.style.value = dom.serializeStyle(st);
226
+ formObj.style.value = dom.serializeStyle(st);
226
227
  }
227
228
 
228
229
  function changedColor() {
229
- var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
230
- var st = dom.parseStyle(formObj.style.value);
230
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
231
+ var st = dom.parseStyle(formObj.style.value);
231
232
 
232
- st['background-color'] = formObj.bgcolor.value;
233
+ st['background-color'] = formObj.bgcolor.value;
233
234
 
234
- formObj.style.value = dom.serializeStyle(st);
235
+ formObj.style.value = dom.serializeStyle(st);
235
236
  }
236
237
 
238
+ function changedRowType() {
239
+ var formObj = document.forms[0];
240
+ var rowtype = getSelectValue(formObj, 'rowtype');
241
+
242
+ setActionforRowType(formObj, rowtype);
243
+
244
+ }
245
+
246
+ function setActionforRowType(formObj, rowtype) {
247
+ if (rowtype === "tbody") {
248
+ formObj.action.disabled = false;
249
+ } else {
250
+ selectByValue(formObj, 'action', "row");
251
+ formObj.action.disabled = true;
252
+ }
253
+ }
237
254
  tinyMCEPopup.onInit.add(init);