alchemy_cms 2.4.rc2 → 2.4.rc4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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);