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,250 +1,252 @@
1
1
  var ImageDialog = {
2
- preInit:function () {
3
- var url;
4
-
5
- tinyMCEPopup.requireLangPack();
6
-
7
- if (url = tinyMCEPopup.getParam("external_image_list_url"))
8
- document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
9
- },
10
-
11
- init:function () {
12
- var f = document.forms[0], ed = tinyMCEPopup.editor;
13
-
14
- // Setup browse button
15
- document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser', 'src', 'image', 'theme_advanced_image');
16
- if (isVisible('srcbrowser'))
17
- document.getElementById('src').style.width = '180px';
18
-
19
- e = ed.selection.getNode();
20
-
21
- this.fillFileList('image_list', tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList'));
22
-
23
- if (e.nodeName == 'IMG') {
24
- f.src.value = ed.dom.getAttrib(e, 'src');
25
- f.alt.value = ed.dom.getAttrib(e, 'alt');
26
- f.border.value = this.getAttrib(e, 'border');
27
- f.vspace.value = this.getAttrib(e, 'vspace');
28
- f.hspace.value = this.getAttrib(e, 'hspace');
29
- f.width.value = ed.dom.getAttrib(e, 'width');
30
- f.height.value = ed.dom.getAttrib(e, 'height');
31
- f.insert.value = ed.getLang('update');
32
- this.styleVal = ed.dom.getAttrib(e, 'style');
33
- selectByValue(f, 'image_list', f.src.value);
34
- selectByValue(f, 'align', this.getAttrib(e, 'align'));
35
- this.updateStyle();
36
- }
37
- },
38
-
39
- fillFileList:function (id, l) {
40
- var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
41
-
42
- l = typeof(l) === 'function' ? l() : window[l];
43
-
44
- if (l && l.length > 0) {
45
- lst.options[lst.options.length] = new Option('', '');
46
-
47
- tinymce.each(l, function (o) {
48
- lst.options[lst.options.length] = new Option(o[0], o[1]);
49
- });
50
- } else
51
- dom.remove(dom.getParent(id, 'tr'));
52
- },
53
-
54
- update:function () {
55
- var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el;
56
-
57
- tinyMCEPopup.restoreSelection();
58
-
59
- if (f.src.value === '') {
60
- if (ed.selection.getNode().nodeName == 'IMG') {
61
- ed.dom.remove(ed.selection.getNode());
62
- ed.execCommand('mceRepaint');
63
- }
64
-
65
- tinyMCEPopup.close();
66
- return;
67
- }
68
-
69
- if (!ed.settings.inline_styles) {
70
- args = tinymce.extend(args, {
71
- vspace:nl.vspace.value,
72
- hspace:nl.hspace.value,
73
- border:nl.border.value,
74
- align:getSelectValue(f, 'align')
75
- });
76
- } else
77
- args.style = this.styleVal;
78
-
79
- tinymce.extend(args, {
80
- src:f.src.value.replace(/ /g, '%20'),
81
- alt:f.alt.value,
82
- width:f.width.value,
83
- height:f.height.value
84
- });
85
-
86
- el = ed.selection.getNode();
87
-
88
- if (el && el.nodeName == 'IMG') {
89
- ed.dom.setAttribs(el, args);
90
- tinyMCEPopup.editor.execCommand('mceRepaint');
91
- tinyMCEPopup.editor.focus();
92
- } else {
93
- tinymce.each(args, function (value, name) {
94
- if (value === "") {
95
- delete args[name];
96
- }
97
- });
98
-
99
- ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo:1});
100
- ed.undoManager.add();
101
- }
102
-
103
- tinyMCEPopup.close();
104
- },
105
-
106
- updateStyle:function () {
107
- var dom = tinyMCEPopup.dom, st, v, f = document.forms[0];
108
-
109
- if (tinyMCEPopup.editor.settings.inline_styles) {
110
- st = tinyMCEPopup.dom.parseStyle(this.styleVal);
111
-
112
- // Handle align
113
- v = getSelectValue(f, 'align');
114
- if (v) {
115
- if (v == 'left' || v == 'right') {
116
- st['float'] = v;
117
- delete st['vertical-align'];
118
- } else {
119
- st['vertical-align'] = v;
120
- delete st['float'];
121
- }
122
- } else {
123
- delete st['float'];
124
- delete st['vertical-align'];
125
- }
126
-
127
- // Handle border
128
- v = f.border.value;
129
- if (v || v == '0') {
130
- if (v == '0')
131
- st['border'] = '0';
132
- else
133
- st['border'] = v + 'px solid black';
134
- } else
135
- delete st['border'];
136
-
137
- // Handle hspace
138
- v = f.hspace.value;
139
- if (v) {
140
- delete st['margin'];
141
- st['margin-left'] = v + 'px';
142
- st['margin-right'] = v + 'px';
143
- } else {
144
- delete st['margin-left'];
145
- delete st['margin-right'];
146
- }
147
-
148
- // Handle vspace
149
- v = f.vspace.value;
150
- if (v) {
151
- delete st['margin'];
152
- st['margin-top'] = v + 'px';
153
- st['margin-bottom'] = v + 'px';
154
- } else {
155
- delete st['margin-top'];
156
- delete st['margin-bottom'];
157
- }
158
-
159
- // Merge
160
- st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st), 'img');
161
- this.styleVal = dom.serializeStyle(st, 'img');
162
- }
163
- },
164
-
165
- getAttrib:function (e, at) {
166
- var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;
167
-
168
- if (ed.settings.inline_styles) {
169
- switch (at) {
170
- case 'align':
171
- if (v = dom.getStyle(e, 'float'))
172
- return v;
173
-
174
- if (v = dom.getStyle(e, 'vertical-align'))
175
- return v;
176
-
177
- break;
178
-
179
- case 'hspace':
180
- v = dom.getStyle(e, 'margin-left')
181
- v2 = dom.getStyle(e, 'margin-right');
182
- if (v && v == v2)
183
- return parseInt(v.replace(/[^0-9]/g, ''));
184
-
185
- break;
186
-
187
- case 'vspace':
188
- v = dom.getStyle(e, 'margin-top')
189
- v2 = dom.getStyle(e, 'margin-bottom');
190
- if (v && v == v2)
191
- return parseInt(v.replace(/[^0-9]/g, ''));
192
-
193
- break;
194
-
195
- case 'border':
196
- v = 0;
197
-
198
- tinymce.each(['top', 'right', 'bottom', 'left'], function (sv) {
199
- sv = dom.getStyle(e, 'border-' + sv + '-width');
200
-
201
- // False or not the same as prev
202
- if (!sv || (sv != v && v !== 0)) {
203
- v = 0;
204
- return false;
205
- }
206
-
207
- if (sv)
208
- v = sv;
209
- });
210
-
211
- if (v)
212
- return parseInt(v.replace(/[^0-9]/g, ''));
213
-
214
- break;
215
- }
216
- }
217
-
218
- if (v = dom.getAttrib(e, at))
219
- return v;
220
-
221
- return '';
222
- },
223
-
224
- resetImageData:function () {
225
- var f = document.forms[0];
226
-
227
- f.width.value = f.height.value = "";
228
- },
229
-
230
- updateImageData:function () {
231
- var f = document.forms[0], t = ImageDialog;
232
-
233
- if (f.width.value == "")
234
- f.width.value = t.preloadImg.width;
235
-
236
- if (f.height.value == "")
237
- f.height.value = t.preloadImg.height;
238
- },
239
-
240
- getImageData:function () {
241
- var f = document.forms[0];
242
-
243
- this.preloadImg = new Image();
244
- this.preloadImg.onload = this.updateImageData;
245
- this.preloadImg.onerror = this.resetImageData;
246
- this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value);
247
- }
2
+ preInit : function() {
3
+ var url;
4
+
5
+ tinyMCEPopup.requireLangPack();
6
+
7
+ if (url = tinyMCEPopup.getParam("external_image_list_url"))
8
+ document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
9
+ },
10
+
11
+ init : function() {
12
+ var f = document.forms[0], ed = tinyMCEPopup.editor;
13
+
14
+ // Setup browse button
15
+ document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');
16
+ if (isVisible('srcbrowser'))
17
+ document.getElementById('src').style.width = '180px';
18
+
19
+ e = ed.selection.getNode();
20
+
21
+ this.fillFileList('image_list', tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList'));
22
+
23
+ if (e.nodeName == 'IMG') {
24
+ f.src.value = ed.dom.getAttrib(e, 'src');
25
+ f.alt.value = ed.dom.getAttrib(e, 'alt');
26
+ f.border.value = this.getAttrib(e, 'border');
27
+ f.vspace.value = this.getAttrib(e, 'vspace');
28
+ f.hspace.value = this.getAttrib(e, 'hspace');
29
+ f.width.value = ed.dom.getAttrib(e, 'width');
30
+ f.height.value = ed.dom.getAttrib(e, 'height');
31
+ f.insert.value = ed.getLang('update');
32
+ this.styleVal = ed.dom.getAttrib(e, 'style');
33
+ selectByValue(f, 'image_list', f.src.value);
34
+ selectByValue(f, 'align', this.getAttrib(e, 'align'));
35
+ this.updateStyle();
36
+ }
37
+ },
38
+
39
+ fillFileList : function(id, l) {
40
+ var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
41
+
42
+ l = typeof(l) === 'function' ? l() : window[l];
43
+
44
+ if (l && l.length > 0) {
45
+ lst.options[lst.options.length] = new Option('', '');
46
+
47
+ tinymce.each(l, function(o) {
48
+ lst.options[lst.options.length] = new Option(o[0], o[1]);
49
+ });
50
+ } else
51
+ dom.remove(dom.getParent(id, 'tr'));
52
+ },
53
+
54
+ update : function() {
55
+ var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el;
56
+
57
+ tinyMCEPopup.restoreSelection();
58
+
59
+ if (f.src.value === '') {
60
+ if (ed.selection.getNode().nodeName == 'IMG') {
61
+ ed.dom.remove(ed.selection.getNode());
62
+ ed.execCommand('mceRepaint');
63
+ }
64
+
65
+ tinyMCEPopup.close();
66
+ return;
67
+ }
68
+
69
+ if (!ed.settings.inline_styles) {
70
+ args = tinymce.extend(args, {
71
+ vspace : nl.vspace.value,
72
+ hspace : nl.hspace.value,
73
+ border : nl.border.value,
74
+ align : getSelectValue(f, 'align')
75
+ });
76
+ } else
77
+ args.style = this.styleVal;
78
+
79
+ tinymce.extend(args, {
80
+ src : f.src.value.replace(/ /g, '%20'),
81
+ alt : f.alt.value,
82
+ width : f.width.value,
83
+ height : f.height.value
84
+ });
85
+
86
+ el = ed.selection.getNode();
87
+
88
+ if (el && el.nodeName == 'IMG') {
89
+ ed.dom.setAttribs(el, args);
90
+ tinyMCEPopup.editor.execCommand('mceRepaint');
91
+ tinyMCEPopup.editor.focus();
92
+ } else {
93
+ tinymce.each(args, function(value, name) {
94
+ if (value === "") {
95
+ delete args[name];
96
+ }
97
+ });
98
+
99
+ ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1});
100
+ ed.undoManager.add();
101
+ }
102
+
103
+ tinyMCEPopup.close();
104
+ },
105
+
106
+ updateStyle : function() {
107
+ var dom = tinyMCEPopup.dom, st = {}, v, f = document.forms[0];
108
+
109
+ if (tinyMCEPopup.editor.settings.inline_styles) {
110
+ tinymce.each(tinyMCEPopup.dom.parseStyle(this.styleVal), function(value, key) {
111
+ st[key] = value;
112
+ });
113
+
114
+ // Handle align
115
+ v = getSelectValue(f, 'align');
116
+ if (v) {
117
+ if (v == 'left' || v == 'right') {
118
+ st['float'] = v;
119
+ delete st['vertical-align'];
120
+ } else {
121
+ st['vertical-align'] = v;
122
+ delete st['float'];
123
+ }
124
+ } else {
125
+ delete st['float'];
126
+ delete st['vertical-align'];
127
+ }
128
+
129
+ // Handle border
130
+ v = f.border.value;
131
+ if (v || v == '0') {
132
+ if (v == '0')
133
+ st['border'] = '0';
134
+ else
135
+ st['border'] = v + 'px solid black';
136
+ } else
137
+ delete st['border'];
138
+
139
+ // Handle hspace
140
+ v = f.hspace.value;
141
+ if (v) {
142
+ delete st['margin'];
143
+ st['margin-left'] = v + 'px';
144
+ st['margin-right'] = v + 'px';
145
+ } else {
146
+ delete st['margin-left'];
147
+ delete st['margin-right'];
148
+ }
149
+
150
+ // Handle vspace
151
+ v = f.vspace.value;
152
+ if (v) {
153
+ delete st['margin'];
154
+ st['margin-top'] = v + 'px';
155
+ st['margin-bottom'] = v + 'px';
156
+ } else {
157
+ delete st['margin-top'];
158
+ delete st['margin-bottom'];
159
+ }
160
+
161
+ // Merge
162
+ st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st), 'img');
163
+ this.styleVal = dom.serializeStyle(st, 'img');
164
+ }
165
+ },
166
+
167
+ getAttrib : function(e, at) {
168
+ var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;
169
+
170
+ if (ed.settings.inline_styles) {
171
+ switch (at) {
172
+ case 'align':
173
+ if (v = dom.getStyle(e, 'float'))
174
+ return v;
175
+
176
+ if (v = dom.getStyle(e, 'vertical-align'))
177
+ return v;
178
+
179
+ break;
180
+
181
+ case 'hspace':
182
+ v = dom.getStyle(e, 'margin-left')
183
+ v2 = dom.getStyle(e, 'margin-right');
184
+ if (v && v == v2)
185
+ return parseInt(v.replace(/[^0-9]/g, ''));
186
+
187
+ break;
188
+
189
+ case 'vspace':
190
+ v = dom.getStyle(e, 'margin-top')
191
+ v2 = dom.getStyle(e, 'margin-bottom');
192
+ if (v && v == v2)
193
+ return parseInt(v.replace(/[^0-9]/g, ''));
194
+
195
+ break;
196
+
197
+ case 'border':
198
+ v = 0;
199
+
200
+ tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {
201
+ sv = dom.getStyle(e, 'border-' + sv + '-width');
202
+
203
+ // False or not the same as prev
204
+ if (!sv || (sv != v && v !== 0)) {
205
+ v = 0;
206
+ return false;
207
+ }
208
+
209
+ if (sv)
210
+ v = sv;
211
+ });
212
+
213
+ if (v)
214
+ return parseInt(v.replace(/[^0-9]/g, ''));
215
+
216
+ break;
217
+ }
218
+ }
219
+
220
+ if (v = dom.getAttrib(e, at))
221
+ return v;
222
+
223
+ return '';
224
+ },
225
+
226
+ resetImageData : function() {
227
+ var f = document.forms[0];
228
+
229
+ f.width.value = f.height.value = "";
230
+ },
231
+
232
+ updateImageData : function() {
233
+ var f = document.forms[0], t = ImageDialog;
234
+
235
+ if (f.width.value == "")
236
+ f.width.value = t.preloadImg.width;
237
+
238
+ if (f.height.value == "")
239
+ f.height.value = t.preloadImg.height;
240
+ },
241
+
242
+ getImageData : function() {
243
+ var f = document.forms[0];
244
+
245
+ this.preloadImg = new Image();
246
+ this.preloadImg.onload = this.updateImageData;
247
+ this.preloadImg.onerror = this.resetImageData;
248
+ this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value);
249
+ }
248
250
  };
249
251
 
250
252
  ImageDialog.preInit();