alchemy_cms 2.0.7 → 2.1.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (256) hide show
  1. data/.gitignore +1 -4
  2. data/.travis.yml +1 -1
  3. data/Gemfile +7 -2
  4. data/README.md +6 -6
  5. data/Rakefile +26 -18
  6. data/alchemy_cms.gemspec +14 -14
  7. data/{assets/stylesheets → app/assets/images/alchemy}/Jcrop.gif +0 -0
  8. data/{assets/images → app/assets/images/alchemy}/ajax_loader.gif +0 -0
  9. data/{assets/images → app/assets/images/alchemy}/alchemy-logo.png +0 -0
  10. data/{assets/images → app/assets/images/alchemy}/flags.png +0 -0
  11. data/{assets/images → app/assets/images/alchemy}/gui/navi-tab.png +0 -0
  12. data/{assets/images → app/assets/images/alchemy}/gui/shading_90.png +0 -0
  13. data/{assets/images → app/assets/images/alchemy}/gui/toggle.png +0 -0
  14. data/{assets/images → app/assets/images/alchemy}/icons.png +0 -0
  15. data/{assets/images → app/assets/images/alchemy}/image_loader.gif +0 -0
  16. data/{assets/images → app/assets/images/alchemy}/jquery-sb/select_arrow.gif +0 -0
  17. data/{assets/images → app/assets/images/alchemy}/jquery-sb/select_arrow_bg.gif +0 -0
  18. data/{assets/images → app/assets/images/alchemy}/jquery-sb/select_arrow_bg_hover.gif +0 -0
  19. data/{assets/images → app/assets/images/alchemy}/placeholder.png +0 -0
  20. data/{assets/images/gui → app/assets/images/alchemy}/shading.png +0 -0
  21. data/{assets/images → app/assets/images/alchemy}/swfupload/browse_button.png +0 -0
  22. data/{assets/stylesheets/default/img → app/assets/images/alchemy}/tabs.gif +0 -0
  23. data/{assets/images/jquery-ui → app/assets/images/alchemy}/ui-icons_666666_256x240.png +0 -0
  24. data/app/assets/javascripts/alchemy/alchemy.base.js +212 -0
  25. data/app/assets/javascripts/alchemy/alchemy.buttons.js +36 -0
  26. data/app/assets/javascripts/alchemy/alchemy.dirty.js +91 -0
  27. data/app/assets/javascripts/alchemy/alchemy.dragndrop.js +114 -0
  28. data/{assets/javascripts → app/assets/javascripts/alchemy}/alchemy.element_editor_selector.js +0 -0
  29. data/{assets/javascripts → app/assets/javascripts/alchemy}/alchemy.growler.js +0 -0
  30. data/{assets/javascripts → app/assets/javascripts/alchemy}/alchemy.image_cropper.js +0 -0
  31. data/app/assets/javascripts/alchemy/alchemy.js +26 -0
  32. data/app/assets/javascripts/alchemy/alchemy.js_extensions.js +17 -0
  33. data/{assets/javascripts → app/assets/javascripts/alchemy}/alchemy.link_overlay.js +1 -1
  34. data/{assets/javascripts → app/assets/javascripts/alchemy}/alchemy.page_sorter.js +0 -0
  35. data/{assets/javascripts → app/assets/javascripts/alchemy}/alchemy.preview.js +0 -0
  36. data/app/assets/javascripts/alchemy/alchemy.windows.js +438 -0
  37. data/app/assets/stylesheets/alchemy/_defaults.scss +160 -0
  38. data/app/assets/stylesheets/alchemy/alchemy.css +9 -0
  39. data/{assets/stylesheets/alchemy.css → app/assets/stylesheets/alchemy/base.css.scss} +216 -353
  40. data/{assets/stylesheets/elements.css → app/assets/stylesheets/alchemy/elements.css.scss} +41 -70
  41. data/{assets/stylesheets/flags.css → app/assets/stylesheets/alchemy/flags.css.scss} +1 -1
  42. data/{assets/stylesheets/jquery-ui-1.8.7.alchemy.css → app/assets/stylesheets/alchemy/jquery-ui.alchemy.css} +15 -15
  43. data/{assets/stylesheets/jquery.Jcrop.css → app/assets/stylesheets/alchemy/jquery.Jcrop.css.scss} +3 -3
  44. data/{assets/stylesheets/jquery.sb.css → app/assets/stylesheets/alchemy/jquery.sb.css.scss} +19 -29
  45. data/{assets/stylesheets → app/assets/stylesheets/alchemy}/print.css +6 -1
  46. data/{assets/stylesheets → app/assets/stylesheets/alchemy}/standard_set.css +0 -0
  47. data/{assets/stylesheets/alchemy_tinymce_content.css → app/assets/stylesheets/alchemy/tinymce_content.css} +0 -0
  48. data/{assets/stylesheets/alchemy_tinymce_dialog.css → app/assets/stylesheets/alchemy/tinymce_dialog.css} +2 -2
  49. data/app/controllers/admin/attachments_controller.rb +2 -8
  50. data/app/controllers/admin/clipboard_controller.rb +2 -2
  51. data/app/controllers/admin/contents_controller.rb +4 -16
  52. data/app/controllers/admin/elements_controller.rb +2 -2
  53. data/app/controllers/admin/essence_audios_controller.rb +0 -3
  54. data/app/controllers/admin/essence_files_controller.rb +0 -11
  55. data/app/controllers/admin/essence_flashes_controller.rb +0 -3
  56. data/app/controllers/admin/essence_pictures_controller.rb +2 -7
  57. data/app/controllers/admin/essence_videos_controller.rb +0 -3
  58. data/app/controllers/admin/languages_controller.rb +4 -10
  59. data/app/controllers/admin/pages_controller.rb +6 -4
  60. data/app/controllers/admin/pictures_controller.rb +13 -18
  61. data/app/controllers/admin/trash_controller.rb +0 -5
  62. data/app/controllers/admin/users_controller.rb +2 -3
  63. data/app/controllers/alchemy_controller.rb +18 -30
  64. data/app/controllers/pages_controller.rb +21 -24
  65. data/app/helpers/admin/elements_helper.rb +5 -0
  66. data/app/helpers/admin/pages_helper.rb +36 -1
  67. data/app/helpers/alchemy_helper.rb +39 -17
  68. data/app/models/attachment.rb +2 -2
  69. data/app/models/essence_file.rb +1 -1
  70. data/app/models/page.rb +1 -1
  71. data/app/sweepers/pages_sweeper.rb +10 -0
  72. data/app/views/admin/attachments/destroy.js.erb +4 -0
  73. data/app/views/admin/clipboard/insert.js.erb +12 -19
  74. data/app/views/admin/contents/create.js.erb +1 -1
  75. data/app/views/admin/contents/destroy.js.erb +7 -0
  76. data/app/views/admin/contents/order.js.erb +6 -0
  77. data/app/views/admin/elements/_element.html.erb +4 -2
  78. data/app/views/admin/elements/create.js.erb +19 -26
  79. data/app/views/admin/elements/fold.js.erb +1 -1
  80. data/app/views/admin/elements/index.html.erb +1 -1
  81. data/app/views/admin/essence_files/assign.js.erb +8 -0
  82. data/app/views/admin/essence_pictures/save_link.js.erb +3 -0
  83. data/app/views/admin/index.html.erb +37 -27
  84. data/app/views/admin/languages/destroy.js.erb +1 -0
  85. data/app/views/admin/pages/_page.html.erb +1 -1
  86. data/app/views/admin/pages/_sitemap.html.erb +1 -1
  87. data/app/views/admin/pages/edit.html.erb +2 -2
  88. data/app/views/admin/pages/update.js.erb +1 -1
  89. data/app/views/admin/partials/_upload_form.html.erb +11 -11
  90. data/app/views/admin/pictures/archive_overlay.js.erb +1 -0
  91. data/app/views/admin/pictures/flush.js.erb +2 -0
  92. data/app/views/admin/pictures/update.js.erb +1 -0
  93. data/app/views/admin/trash/clear.js.erb +3 -0
  94. data/app/views/alchemy/error_notice.js.erb +1 -0
  95. data/app/views/alchemy/permission_denied.js.erb +2 -0
  96. data/app/views/alchemy/redirect.js.erb +1 -0
  97. data/app/views/alchemy/remote_errors.js.erb +3 -0
  98. data/app/views/alchemy/update.js.erb +5 -0
  99. data/app/views/essences/_essence_file_editor.html.erb +0 -1
  100. data/app/views/essences/_essence_file_view.html.erb +1 -5
  101. data/app/views/essences/_essence_picture_tools.html.erb +1 -1
  102. data/app/views/layouts/alchemy.html.erb +22 -9
  103. data/app/views/pages/show.rss.builder +1 -1
  104. data/config/alchemy/elements.yml +0 -5
  105. data/config/alchemy/page_layouts.yml +1 -1
  106. data/config/asset_packages.yml +17 -19
  107. data/config/authorization_rules.rb +1 -0
  108. data/config/locales/de.yml +0 -1
  109. data/config/routes.rb +1 -1
  110. data/lib/alchemy/tinymce.rb +51 -0
  111. data/lib/alchemy/version.rb +3 -3
  112. data/lib/alchemy_cms.rb +4 -2
  113. data/script/rails +6 -0
  114. data/spec/controllers/admin/clipboard_controller_spec.rb +15 -13
  115. data/spec/controllers/admin/contents_controller_spec.rb +4 -4
  116. data/spec/controllers/admin/trash_controller_spec.rb +6 -9
  117. data/spec/controllers/pages_controller_spec.rb +9 -8
  118. data/spec/dummy/Rakefile +1 -1
  119. data/spec/dummy/app/assets/javascripts/application.js +9 -0
  120. data/spec/dummy/app/assets/stylesheets/application.css +7 -0
  121. data/spec/dummy/app/mailers/.gitkeep +0 -0
  122. data/spec/dummy/app/models/.gitkeep +0 -0
  123. data/spec/dummy/app/views/layouts/application.html.erb +3 -3
  124. data/spec/dummy/config/application.rb +12 -6
  125. data/spec/dummy/config/database.yml +3 -0
  126. data/spec/dummy/config/environments/development.rb +7 -3
  127. data/spec/dummy/config/environments/production.rb +23 -12
  128. data/spec/dummy/config/environments/test.rb +5 -1
  129. data/spec/dummy/config/initializers/secret_token.rb +1 -1
  130. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  131. data/spec/dummy/config/locales/en.yml +1 -1
  132. data/spec/dummy/config/routes.rb +1 -1
  133. data/spec/dummy/lib/assets/.gitkeep +0 -0
  134. data/spec/factories.rb +8 -8
  135. data/spec/helpers/admin/elements_helper_spec.rb +2 -2
  136. data/spec/helpers/contents_helper_spec.rb +1 -1
  137. data/spec/helpers/elements_helper_spec.rb +6 -6
  138. data/spec/helpers/essences_helper_spec.rb +1 -1
  139. data/spec/helpers/pages_helper_spec.rb +37 -37
  140. data/spec/integration/pages_controller_spec.rb +29 -26
  141. data/spec/integration/security_spec.rb +2 -1
  142. data/spec/models/content_spec.rb +1 -1
  143. data/spec/models/element_spec.rb +11 -11
  144. data/spec/models/language_spec.rb +5 -5
  145. data/spec/models/page_spec.rb +54 -54
  146. data/spec/models/user_spec.rb +2 -1
  147. data/spec/routing_spec.rb +1 -1
  148. data/{assets/javascripts/jquery.js → vendor/assets/javascripts/jquery-1.6.2.min.js} +0 -0
  149. data/{assets/javascripts/jquery-ui.js → vendor/assets/javascripts/jquery-ui-custom-1.8.16.min.js} +0 -0
  150. data/{assets/javascripts → vendor/assets/javascripts/jquery_plugins}/jquery.Jcrop.min.js +0 -0
  151. data/{assets/javascripts → vendor/assets/javascripts/jquery_plugins}/jquery.dialogextend.min.js +7 -7
  152. data/{assets/javascripts → vendor/assets/javascripts/jquery_plugins}/jquery.in-place-edit.js +0 -0
  153. data/{assets/javascripts → vendor/assets/javascripts/jquery_plugins}/jquery.sb.min.js +0 -0
  154. data/{assets/javascripts → vendor/assets/javascripts/jquery_plugins}/jquery.scrollTo-1.4.2-min.js +10 -10
  155. data/{assets/javascripts → vendor/assets/javascripts/jquery_plugins}/jquery.ui.nestedSortable.js +0 -0
  156. data/{assets/javascripts → vendor/assets/javascripts/jquery_plugins}/jquery.ui.tabspaging.js +0 -0
  157. data/{assets → vendor/assets}/javascripts/swfupload/fileprogress.js +202 -202
  158. data/{assets → vendor/assets}/javascripts/swfupload/handlers.js +171 -171
  159. data/{assets → vendor/assets}/javascripts/swfupload/queue.js +97 -97
  160. data/{assets → vendor/assets}/javascripts/swfupload/swfupload.js +980 -980
  161. data/{assets → vendor/assets}/javascripts/swfupload/swfupload.swf +0 -0
  162. data/{assets → vendor/assets}/javascripts/tiny_mce/jquery.tinymce.js +0 -0
  163. data/{assets → vendor/assets}/javascripts/tiny_mce/langs/de.js +0 -0
  164. data/{assets → vendor/assets}/javascripts/tiny_mce/langs/en.js +0 -0
  165. data/{assets → vendor/assets}/javascripts/tiny_mce/license.txt +504 -504
  166. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/alchemy_link/editor_plugin.js +0 -0
  167. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/alchemy_link/langs/de.js +0 -0
  168. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/alchemy_link/langs/en.js +0 -0
  169. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/autoresize/editor_plugin.js +0 -0
  170. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/fullscreen/editor_plugin.js +0 -0
  171. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +110 -110
  172. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin.js +0 -0
  173. data/{assets/javascripts/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css → vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css.erb} +8 -8
  174. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/inlinepopups/template.htm +387 -387
  175. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/paste/editor_plugin.js +0 -0
  176. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/paste/js/pastetext.js +36 -36
  177. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/paste/js/pasteword.js +51 -51
  178. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/paste/langs/de_dlg.js +0 -0
  179. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/paste/langs/en_dlg.js +0 -0
  180. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/paste/pastetext.htm +26 -26
  181. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/paste/pasteword.htm +21 -21
  182. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/table/cell.htm +180 -180
  183. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/table/css/cell.css +16 -16
  184. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/table/css/row.css +25 -25
  185. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/table/css/table.css +13 -13
  186. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/table/editor_plugin.js +0 -0
  187. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/table/js/cell.js +319 -319
  188. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/table/js/merge_cells.js +27 -27
  189. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/table/js/row.js +237 -237
  190. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/table/js/table.js +450 -450
  191. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/table/langs/de_dlg.js +0 -0
  192. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/table/langs/en_dlg.js +0 -0
  193. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/table/merge_cells.htm +32 -32
  194. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/table/row.htm +158 -158
  195. data/{assets → vendor/assets}/javascripts/tiny_mce/plugins/table/table.htm +188 -188
  196. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/about.htm +52 -52
  197. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/anchor.htm +26 -26
  198. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/charmap.htm +51 -51
  199. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/color_picker.htm +74 -74
  200. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/editor_template.js +0 -0
  201. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/image.htm +80 -80
  202. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
  203. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/img/flash.gif +0 -0
  204. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/img/icons.gif +0 -0
  205. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/img/iframe.gif +0 -0
  206. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
  207. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
  208. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
  209. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
  210. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/img/trans.gif +0 -0
  211. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/img/video.gif +0 -0
  212. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
  213. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/js/about.js +73 -73
  214. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/js/anchor.js +43 -43
  215. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/js/charmap.js +355 -355
  216. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/js/color_picker.js +329 -329
  217. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/js/image.js +251 -251
  218. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/js/link.js +153 -153
  219. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/js/source_editor.js +56 -56
  220. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/langs/de.js +0 -0
  221. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/langs/de_dlg.js +0 -0
  222. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/langs/en.js +0 -0
  223. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +0 -0
  224. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/link.htm +57 -57
  225. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/shortcuts.htm +47 -47
  226. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/skins/default/content.css +50 -50
  227. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +117 -117
  228. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
  229. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
  230. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
  231. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
  232. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
  233. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
  234. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +214 -214
  235. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +48 -48
  236. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +117 -117
  237. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
  238. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
  239. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
  240. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +217 -217
  241. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +7 -7
  242. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +5 -5
  243. data/{assets → vendor/assets}/javascripts/tiny_mce/themes/advanced/source_editor.htm +25 -25
  244. data/{assets → vendor/assets}/javascripts/tiny_mce/tiny_mce.js +0 -0
  245. data/{assets → vendor/assets}/javascripts/tiny_mce/tiny_mce_popup.js +0 -0
  246. data/{assets → vendor/assets}/javascripts/tiny_mce/utils/editable_selects.js +70 -70
  247. data/{assets → vendor/assets}/javascripts/tiny_mce/utils/form_utils.js +210 -210
  248. data/{assets → vendor/assets}/javascripts/tiny_mce/utils/mctabs.js +161 -161
  249. data/{assets → vendor/assets}/javascripts/tiny_mce/utils/validate.js +252 -252
  250. metadata +338 -369
  251. data/app/views/elements/_download_editor.html.erb +0 -1
  252. data/app/views/elements/_download_view.html.erb +0 -3
  253. data/assets/javascripts/alchemy.js +0 -903
  254. data/assets/javascripts/jquery.rails.js +0 -315
  255. data/assets/stylesheets/ie6.css +0 -18
  256. data/config/initializers/tinymce_hammer.rb +0 -31
@@ -0,0 +1,91 @@
1
+ if (typeof(Alchemy) === 'undefined') {
2
+ var Alchemy = {};
3
+ }
4
+
5
+ (function($) {
6
+
7
+ $.extend(Alchemy, {
8
+
9
+ ElementDirtyObserver : function(selector) {
10
+ var $elements = $(selector);
11
+ $elements.find('textarea.tinymce').map(function() {
12
+ var $this = $(this);
13
+ var ed = tinymce.get(this.id);
14
+ ed.onChange.add(function(ed, l) {
15
+ Alchemy.setElementDirty($this.parents('.element_editor'));
16
+ });
17
+ });
18
+ $elements.find('input[type="text"]').bind('change', function() {
19
+ $(this).addClass('dirty');
20
+ Alchemy.setElementDirty($(this).parents('.element_editor'));
21
+ });
22
+ $elements.find('.element_foot input[type="checkbox"]').bind('click', function() {
23
+ $(this).addClass('dirty');
24
+ Alchemy.setElementDirty($(this).parents('.element_editor'));
25
+ });
26
+ $elements.find('select').bind('change', function() {
27
+ $(this).addClass('dirty');
28
+ Alchemy.setElementDirty($(this).parents('.element_editor'));
29
+ });
30
+ },
31
+
32
+ setElementDirty : function(element) {
33
+ var $element = $(element);
34
+ $element.addClass('dirty');
35
+ $element.find('.element_head .icon').addClass('element_dirty');
36
+ },
37
+
38
+ setElementClean : function(element) {
39
+ var $element = $(element);
40
+ $element.removeClass('dirty');
41
+ $element.find('.element_foot input[type="checkbox"]').removeClass('dirty');
42
+ $element.find('input[type="text"]').removeClass('dirty');
43
+ $element.find('select').removeClass('dirty');
44
+ $element.find('.element_head .icon').removeClass('element_dirty');
45
+ },
46
+
47
+ isPageDirty : function() {
48
+ return $('#element_area').find('.element_editor.dirty').size() > 0;
49
+ },
50
+
51
+ checkPageDirtyness : function(element, text) {
52
+ var okcallback;
53
+ if ($(element).is('form')) {
54
+ okcallback = function() {
55
+ var $form = $('<form action="'+element.action+'" method="POST" style="display: none"></form>');
56
+ $form.append($(element).find('input'));
57
+ $form.appendTo('body');
58
+ Alchemy.pleaseWaitOverlay();
59
+ $form.submit();
60
+ };
61
+ } else if ($(element).is('a')) {
62
+ okcallback = function() {
63
+ Alchemy.pleaseWaitOverlay();
64
+ document.location = element.pathname;
65
+ };
66
+ }
67
+ if (Alchemy.isPageDirty()) {
68
+ Alchemy.openConfirmWindow({
69
+ title: text.title,
70
+ message: text.message,
71
+ okLabel: text.okLabel,
72
+ cancelLabel: text.cancelLabel,
73
+ okCallback: okcallback
74
+ });
75
+ return false;
76
+ } else {
77
+ return true;
78
+ }
79
+ },
80
+
81
+ PageLeaveObserver : function(texts) {
82
+ $('#main_navi a').click(function(event) {
83
+ if (!Alchemy.checkPageDirtyness(event.currentTarget, texts)) {
84
+ event.preventDefault();
85
+ }
86
+ });
87
+ }
88
+
89
+ });
90
+
91
+ })(jQuery);
@@ -0,0 +1,114 @@
1
+ if (typeof(Alchemy) === 'undefined') {
2
+ var Alchemy = {};
3
+ }
4
+
5
+ (function($) {
6
+
7
+ $.extend(Alchemy, {
8
+
9
+ SortableElements : function(page_id, form_token) {
10
+ $('#element_area .sortable_cell').sortable({
11
+ items: 'div.element_editor',
12
+ handle: '.element_handle',
13
+ axis: 'y',
14
+ placeholder: 'droppable_element_placeholder',
15
+ forcePlaceholderSize: true,
16
+ dropOnEmpty: true,
17
+ opacity: 0.5,
18
+ cursor: 'move',
19
+ tolerance: 'pointer',
20
+ update: function(event, ui) {
21
+ var ids = $.map($(event.target).children(), function(child) {
22
+ return $(child).attr('data-element-id');
23
+ });
24
+ var params_string = '';
25
+ var cell_id = $(event.target).attr('data-cell-id');
26
+ // Is the trash window open?
27
+ if ($('#alchemyTrashWindow').length > 0) {
28
+ // updating the trash icon
29
+ if ($('#trash_items div.element_editor').not('.dragged').length === 0) {
30
+ $('#element_trash_button .icon').removeClass('full');
31
+ $('#trash_empty_notice').show();
32
+ }
33
+ }
34
+ $(event.target).css("cursor", "progress");
35
+ params_string = "page_id=" + page_id + "&authenticity_token=" + encodeURIComponent(form_token) + "&" + $.param({element_ids: ids});
36
+ if (cell_id) {
37
+ params_string += "&cell_id=" + cell_id;
38
+ }
39
+ $.ajax({
40
+ url: '/admin/elements/order',
41
+ type: 'POST',
42
+ data: params_string,
43
+ complete: function () {
44
+ $(event.target).css("cursor", "auto");
45
+ Alchemy.refreshTrashWindow(page_id);
46
+ }
47
+ });
48
+ },
49
+ start: function(event, ui) {
50
+ var $textareas = ui.item.find('textarea.tinymce');
51
+ $textareas.each(function() {
52
+ tinymce.get(this.id).remove();
53
+ });
54
+ },
55
+ stop: function(event, ui) {
56
+ var $textareas = ui.item.find('textarea.tinymce');
57
+ $textareas.each(function() {
58
+ Alchemy.Tinymce.addEditor(this.id);
59
+ });
60
+ }
61
+ });
62
+ },
63
+
64
+ SortableContents : function(selector, token) {
65
+ $(selector).sortable({
66
+ items: 'div.dragable_picture',
67
+ handle: 'div.picture_handle',
68
+ placeholder: 'droppable_content_placeholder',
69
+ opacity: 0.5,
70
+ cursor: 'move',
71
+ tolerance: 'pointer',
72
+ containment: 'parent',
73
+ update: function(event, ui) {
74
+ var ids = $.map($(event.target).children('div.dragable_picture'), function (child) {
75
+ return child.id.replace(/essence_picture_/, '');
76
+ });
77
+ $(event.originalTarget).css("cursor", "progress");
78
+ $.ajax({
79
+ url: '/admin/contents/order',
80
+ type: 'POST',
81
+ data: "authenticity_token=" + encodeURIComponent(token) + "&" + $.param({content_ids: ids}),
82
+ complete: function () {
83
+ $(event.originalTarget).css("cursor", "move");
84
+ }
85
+ });
86
+ }
87
+ });
88
+ },
89
+
90
+ DraggableTrashItems: function (items_n_cells) {
91
+ $("#trash_items div.draggable").each(function () {
92
+ var cell_classes = '';
93
+ var cell_names = items_n_cells[this.id];
94
+ $.each(cell_names, function (i) {
95
+ cell_classes += '.' + this + '_cell' + ', ';
96
+ });
97
+ $(this).draggable({
98
+ helper: 'clone',
99
+ iframeFix: 'iframe#alchemyPreviewWindow',
100
+ connectToSortable: cell_classes,
101
+ start: function(event, ui) {
102
+ $(this).hide().addClass('dragged');
103
+ ui.helper.css({width: '300px'});
104
+ },
105
+ stop: function() {
106
+ $(this).show().removeClass('dragged');
107
+ }
108
+ });
109
+ });
110
+ }
111
+
112
+ });
113
+
114
+ })(jQuery);
@@ -0,0 +1,26 @@
1
+ // Alchemy CMS Sprocket Manifest
2
+ // -----------------------------
3
+ //= require jquery-1.6.2.min
4
+ //= require jquery-ui-custom-1.8.16.min
5
+ //= require jquery_ujs
6
+ //= require jquery_plugins/jquery.dialogextend.min.js
7
+ //= require jquery_plugins/jquery.in-place-edit.js
8
+ //= require jquery_plugins/jquery.Jcrop.min.js
9
+ //= require jquery_plugins/jquery.sb.min.js
10
+ //= require jquery_plugins/jquery.scrollTo-1.4.2-min.js
11
+ //= require jquery_plugins/jquery.ui.nestedSortable.js
12
+ //= require jquery_plugins/jquery.ui.tabspaging.js
13
+ //= require alchemy/alchemy.base
14
+ //= require alchemy/alchemy.dirty
15
+ //= require alchemy/alchemy.dragndrop
16
+ //= require alchemy/alchemy.element_editor_selector
17
+ //= require alchemy/alchemy.growler
18
+ //= require alchemy/alchemy.image_cropper
19
+ //= require alchemy/alchemy.js_extensions
20
+ //= require alchemy/alchemy.link_overlay
21
+ //= require alchemy/alchemy.page_sorter
22
+ //= require alchemy/alchemy.windows
23
+ //= require swfupload/swfupload
24
+ //= require swfupload/queue
25
+ //= require swfupload/handlers
26
+ //= require swfupload/fileprogress
@@ -0,0 +1,17 @@
1
+ String.prototype.beginsWith = function(t, i) {
2
+ if (i==false) {
3
+ return (t == this.substring(0, t.length));
4
+ }
5
+ else {
6
+ return (t.toLowerCase() == this.substring(0, t.length).toLowerCase());
7
+ }
8
+ };
9
+
10
+ String.prototype.endsWith = function(t, i) {
11
+ if (i==false) {
12
+ return (t == this.substring(this.length - t.length));
13
+ }
14
+ else {
15
+ return (t.toLowerCase() == this.substring(this.length - t.length).toLowerCase());
16
+ }
17
+ };
@@ -181,7 +181,7 @@ if (typeof(Alchemy) === 'undefined') {
181
181
 
182
182
  hideElementsSelect: function(id) {
183
183
  $('#elements_for_page_' + id).hide();
184
- $('#elements_for_page_' + id).html('<img src="/images/alchemy/ajax_loader.gif" alt="">');
184
+ $('#elements_for_page_' + id).html('<img src="/assets/alchemy/ajax_loader.gif" alt="">');
185
185
  $('#page_anchor').removeAttr('value');
186
186
  $('#page_selector_container').scrollTo('#sitemap_sitename_'+id, {duration: 400, offset: -10});
187
187
  },
@@ -0,0 +1,438 @@
1
+ if (typeof(Alchemy) === 'undefined') {
2
+ var Alchemy = {};
3
+ }
4
+
5
+ (function ($) {
6
+
7
+ $.extend(Alchemy, {
8
+
9
+ getOverlaySpinner : function (options) {
10
+ var defaults = {
11
+ x: '47%',
12
+ y: '33%'
13
+ };
14
+ var settings = $.extend({}, defaults, options);
15
+ var $spinner = $('<img src="/assets/alchemy/ajax_loader.gif" />');
16
+ var left = (settings.x - 32) / 2;
17
+ var top = ((settings.y - 32) / 2) - 16;
18
+ top = top < 0 ? 0 : top;
19
+ $spinner.css({
20
+ marginLeft: left + 'px',
21
+ marginTop: top + 'px'
22
+ });
23
+ return $spinner;
24
+ },
25
+
26
+ AjaxErrorHandler : function($dialog, status, textStatus, errorThrown) {
27
+ var $div = $('<div class="with_padding" />');
28
+ var $errorDiv = $('<div id="errorExplanation" />');
29
+ $dialog.html($div);
30
+ $div.append($errorDiv);
31
+ if (status === 0) {
32
+ $errorDiv.append('<h2>The server does not respond!</h2>');
33
+ $errorDiv.append('<p>Please start server and try again.</p>');
34
+ } else {
35
+ $errorDiv.append('<h2>'+errorThrown+' ('+status+')</h2>');
36
+ $errorDiv.append('<p>Please check log and try again.</p>');
37
+ }
38
+ },
39
+
40
+ openPreviewWindow : function (url, title) {
41
+ var $iframe = $('#alchemyPreviewWindow');
42
+ if ($iframe.length === 0) {
43
+ $iframe = $('<iframe src="'+url+'" id="alchemyPreviewWindow"></iframe>');
44
+ $iframe.load(function() {
45
+ $('#preview_load_info').hide();
46
+ });
47
+ $iframe.css({'background-color': '#ffffff'});
48
+ Alchemy.PreviewWindow = $iframe.dialog({
49
+ modal: false,
50
+ title: title,
51
+ width: $(window).width() - 504,
52
+ height: $(window).height() - 90,
53
+ minWidth: 600,
54
+ minHeight: 300,
55
+ show: "fade",
56
+ hide: "fade",
57
+ position: [70, 84],
58
+ autoResize: true,
59
+ closeOnEscape: false,
60
+ create: function() {
61
+ var $spinner = $('<img src="/assets/alchemy/ajax_loader.gif" alt="" id="preview_load_info" />');
62
+ $('#ui-dialog-title-alchemyPreviewWindow').after($spinner);
63
+ var $reload = $('<a href="#" class="ui-dialog-titlebar-refresh ui-corner-all" role="button"></a>');
64
+ $reload.append('<span class="ui-icon ui-icon-refresh">reload</span>');
65
+ $('#ui-dialog-title-alchemyPreviewWindow').after($reload);
66
+ $reload.click(Alchemy.reloadPreview);
67
+ },
68
+ close: function(event, ui) {
69
+ Alchemy.PreviewWindowButton.enable();
70
+ },
71
+ open: function (event, ui) {
72
+ $(this).css({width: '100%'});
73
+ Alchemy.PreviewWindowButton.disable();
74
+ Alchemy.previewWindowFrameWidth = $('#alchemyPreviewWindow').width();
75
+ }
76
+ }).dialogExtend({
77
+ "maximize" : true,
78
+ "dblclick" : "maximize",
79
+ "events" : {
80
+ beforeMaximize: function(evt, dlg) {
81
+ Alchemy.previewWindowPosition = $('#alchemyPreviewWindow').dialog('widget').offset();
82
+ Alchemy.previewWindowFrameWidth = $('#alchemyPreviewWindow').width();
83
+ },
84
+ maximize : function(evt, dlg) {
85
+ $('#alchemyPreviewWindow').css({width: "100%"});
86
+ },
87
+ restore : function(evt, dlg) {
88
+ $('#alchemyPreviewWindow').dialog('widget').css(Alchemy.previewWindowPosition);
89
+ $('#alchemyPreviewWindow').css({width: Alchemy.previewWindowFrameWidth});
90
+ }
91
+ }
92
+ });
93
+ } else {
94
+ $('#alchemyPreviewWindow').dialog('open');
95
+ }
96
+ Alchemy.PreviewWindow.refresh = function () {
97
+ var $iframe = $('#alchemyPreviewWindow');
98
+ $('#preview_load_info').show();
99
+ $iframe.load(function() {
100
+ $('#preview_load_info').hide();
101
+ });
102
+ $iframe.attr('src', $iframe.attr('src'));
103
+ return true;
104
+ };
105
+ },
106
+
107
+ PreviewWindowExists : function() {
108
+ if (Alchemy.PreviewWindow) {
109
+ return true;
110
+ } else {
111
+ return false;
112
+ }
113
+ },
114
+
115
+ reloadPreview : function() {
116
+ Alchemy.PreviewWindow.refresh();
117
+ },
118
+
119
+ ElementsWindowButton : {
120
+ enable: function() {
121
+ $('div#show_element_window').removeClass('disabled');
122
+ },
123
+ disable: function() {
124
+ $('div#show_element_window').addClass('disabled');
125
+ },
126
+ toggle: function() {
127
+ $('div#show_element_window').toggleClass('disabled');
128
+ }
129
+ },
130
+
131
+ PreviewWindowButton : {
132
+ enable: function() {
133
+ $('div#show_preview_window').removeClass('disabled');
134
+ },
135
+ disable: function() {
136
+ $('div#show_preview_window').addClass('disabled');
137
+ },
138
+ toggle: function() {
139
+ $('div#show_preview_window').toggleClass('disabled');
140
+ }
141
+ },
142
+
143
+ openElementsWindow : function (path, options) {
144
+ var $dialog = $('<div style="display: none" id="alchemyElementWindow"></div>');
145
+ var closeCallback = function() {
146
+ $dialog.dialog("destroy");
147
+ $('#alchemyElementWindow').remove();
148
+ Alchemy.ElementsWindowButton.enable();
149
+ };
150
+ $dialog.html(Alchemy.getOverlaySpinner({x: 420, y: 300}));
151
+ Alchemy.ElementsWindow = $dialog.dialog({
152
+ modal: false,
153
+ minWidth: 422,
154
+ minHeight: 300,
155
+ height: $(window).height() - 90,
156
+ title: options.texts.title,
157
+ show: "fade",
158
+ hide: "fade",
159
+ position: [$(window).width() - 428, 84],
160
+ closeOnEscape: false,
161
+ create: function() {
162
+ $dialog.before(Alchemy.createElementWindowToolbar(options.toolbarButtons));
163
+ },
164
+ open: function(event, ui) {
165
+ Alchemy.ElementsWindowButton.disable();
166
+ $.ajax({
167
+ url: path,
168
+ success: function(data, textStatus, XMLHttpRequest) {
169
+ $dialog.html(data);
170
+ Alchemy.ButtonObserver('#alchemyElementWindow .button');
171
+ },
172
+ error: function(XMLHttpRequest, textStatus, errorThrown) {
173
+ Alchemy.AjaxErrorHandler($dialog, XMLHttpRequest.status, textStatus, errorThrown);
174
+ }
175
+ });
176
+ },
177
+ beforeClose : function() {
178
+ if (Alchemy.isPageDirty()) {
179
+ Alchemy.openConfirmWindow({
180
+ title: options.texts.dirtyTitle,
181
+ message: options.texts.dirtyMessage,
182
+ okLabel: options.texts.okLabel,
183
+ cancelLabel: options.texts.cancelLabel,
184
+ okCallback: closeCallback
185
+ });
186
+ return false;
187
+ } else {
188
+ return true;
189
+ }
190
+ },
191
+ close: closeCallback
192
+ });
193
+ },
194
+
195
+ createElementWindowToolbar : function(buttons) {
196
+ var $toolbar = $('<div id="overlay_toolbar"></div>'), btn;
197
+ for (i = 0; i < buttons.length; i++) {
198
+ btn = buttons[i];
199
+ $toolbar.append(
200
+ Alchemy.createToolbarButton({
201
+ buttonTitle: btn.title,
202
+ buttonLabel: btn.label,
203
+ iconClass: btn.iconClass,
204
+ onClick: btn.onClick,
205
+ buttonId: btn.buttonId
206
+ })
207
+ );
208
+ }
209
+ return $toolbar;
210
+ },
211
+
212
+ createToolbarButton : function(options) {
213
+ var $btn = $('<div class="button_with_label"></div>'), $lnk;
214
+ if (options.buttonId) $btn.attr({'id': options.buttonId});
215
+ $lnk = $('<a title="'+options.buttonTitle+'" class="icon_button"></a>');
216
+ $lnk.click(options.onClick);
217
+ $lnk.append('<span class="icon '+options.iconClass+'"></span>');
218
+ $btn.append($lnk);
219
+ $btn.append('<br><label>'+options.buttonLabel+'</label>');
220
+ return $btn;
221
+ },
222
+
223
+ openConfirmWindow : function (options) {
224
+ var $confirmation = $('<div style="display:none" id="alchemyConfirmation"></div>');
225
+ $confirmation.appendTo('body');
226
+ $confirmation.html('<p>'+options.message+'</p>');
227
+ Alchemy.ConfirmationWindow = $confirmation.dialog({
228
+ resizable: false,
229
+ minHeight: 100,
230
+ minWidth: 300,
231
+ modal: true,
232
+ title: options.title,
233
+ show: "fade",
234
+ hide: "fade",
235
+ buttons: [
236
+ {
237
+ text: options.cancelLabel,
238
+ click: function() {
239
+ $(this).dialog("close");
240
+ }
241
+ },
242
+ {
243
+ text: options.okLabel,
244
+ click: function() {
245
+ $(this).dialog("close");
246
+ options.okCallback();
247
+ }
248
+ }
249
+ ],
250
+ open: function () {
251
+ Alchemy.ButtonObserver('#alchemyConfirmation .button');
252
+ },
253
+ close: function() {
254
+ $('#alchemyConfirmation').remove();
255
+ }
256
+ });
257
+ },
258
+
259
+ confirmToDeleteWindow : function (url, title, message, okLabel, cancelLabel) {
260
+ var $confirmation = $('<div style="display:none" id="alchemyConfirmation"></div>');
261
+ $confirmation.appendTo('body');
262
+ $confirmation.html('<p>'+message+'</p>');
263
+ Alchemy.ConfirmationWindow = $confirmation.dialog({
264
+ resizable: false,
265
+ minHeight: 100,
266
+ minWidth: 300,
267
+ modal: true,
268
+ title: title,
269
+ show: "fade",
270
+ hide: "fade",
271
+ buttons: [
272
+ {
273
+ text: cancelLabel,
274
+ click: function() {
275
+ $(this).dialog("close");
276
+ }
277
+ },
278
+ {
279
+ text: okLabel,
280
+ click: function() {
281
+ $(this).dialog("close");
282
+ $.ajax({
283
+ url: url,
284
+ type: 'DELETE'
285
+ });
286
+ }
287
+ }
288
+ ],
289
+ open: function () {
290
+ Alchemy.ButtonObserver('#alchemyConfirmation .button');
291
+ },
292
+ close: function() {
293
+ $('#alchemyConfirmation').remove();
294
+ }
295
+ });
296
+ },
297
+
298
+ openWindow : function (action_url, title, size_x, size_y, resizable, modal, overflow) {
299
+ overflow == undefined ? overflow = false: overflow = overflow;
300
+ if (size_x === 'fullscreen') {
301
+ size_x = $(window).width() - 50;
302
+ size_y = $(window).height() - 50;
303
+ }
304
+ var $dialog = $('<div style="display:none" id="alchemyOverlay"></div>');
305
+ $dialog.appendTo('body');
306
+ $dialog.html(Alchemy.getOverlaySpinner({x: size_x, y: size_y}));
307
+
308
+ Alchemy.CurrentWindow = $dialog.dialog({
309
+ modal: modal,
310
+ minWidth: size_x,
311
+ minHeight: size_y > 68 ? size_y : 68,
312
+ title: title,
313
+ resizable: resizable,
314
+ show: "fade",
315
+ hide: "fade",
316
+ open: function (event, ui) {
317
+ $.ajax({
318
+ url: action_url,
319
+ success: function(data, textStatus, XMLHttpRequest) {
320
+ $dialog.html(data);
321
+ $dialog.css({overflow: overflow ? 'visible' : 'auto'});
322
+ $dialog.dialog('widget').css({overflow: overflow ? 'visible' : 'hidden'});
323
+ Alchemy.SelectBox('#alchemyOverlay select');
324
+ Alchemy.ButtonObserver('#alchemyOverlay .button');
325
+ },
326
+ error: function(XMLHttpRequest, textStatus, errorThrown) {
327
+ Alchemy.AjaxErrorHandler($dialog, XMLHttpRequest.status, textStatus, errorThrown);
328
+ }
329
+ });
330
+ },
331
+ beforeClose: function() {
332
+ $(".sb.open").triggerAll("close");
333
+ },
334
+ close: function () {
335
+ $dialog.remove();
336
+ }
337
+ });
338
+ },
339
+
340
+ closeCurrentWindow : function() {
341
+ if (Alchemy.CurrentWindow) {
342
+ Alchemy.CurrentWindow.dialog('close');
343
+ Alchemy.CurrentWindow = null;
344
+ } else {
345
+ $('#alchemyOverlay').dialog('close');
346
+ }
347
+ return true;
348
+ },
349
+
350
+ zoomImage : function(url, title, width, height) {
351
+ var window_height = height;
352
+ var window_width = width;
353
+ var $doc_width = $(window).width();
354
+ var $doc_height = $(window).height();
355
+ if (width > $doc_width) {
356
+ window_width = $doc_width - 50;
357
+ }
358
+ if (height > $doc_height) {
359
+ window_height = $doc_height - 50;
360
+ }
361
+ var $dialog = $('<div style="display:none" id="alchemyOverlay"></div>');
362
+ $dialog.appendTo('body');
363
+ $dialog.html(Alchemy.getOverlaySpinner({x: width, y: height}));
364
+ $dialog.dialog({
365
+ modal: false,
366
+ minWidth: window_width < 320 ? 320 : window_width,
367
+ minHeight: window_height < 240 ? 240 : window_height,
368
+ title: title,
369
+ show: "fade",
370
+ hide: "fade",
371
+ open: function (event, ui) {
372
+ $.ajax({
373
+ url: url,
374
+ success: function(data, textStatus, XMLHttpRequest) {
375
+ $dialog.html(data);
376
+ },
377
+ error: function(XMLHttpRequest, textStatus, errorThrown) {
378
+ Alchemy.AjaxErrorHandler($dialog, XMLHttpRequest.status, textStatus, errorThrown);
379
+ }
380
+ });
381
+ },
382
+ close: function () {
383
+ $dialog.remove();
384
+ }
385
+ });
386
+ return false;
387
+ },
388
+
389
+ openTrashWindow : function (page_id, title) {
390
+ var size_x = 380, size_y = 270;
391
+ if (size_x === 'fullscreen') {
392
+ size_x = $(window).width() - 50;
393
+ size_y = $(window).height() - 50;
394
+ }
395
+ var $dialog = $('<div style="display:none" id="alchemyTrashWindow"></div>');
396
+ $dialog.appendTo('body');
397
+ $dialog.html(Alchemy.getOverlaySpinner({x: size_x, y: size_y}));
398
+
399
+ Alchemy.trashWindow = $dialog.dialog({
400
+ modal: false,
401
+ width: 380,
402
+ minHeight: 450,
403
+ maxHeight: $(window).height() - 50,
404
+ title: title,
405
+ resizable: false,
406
+ show: "fade",
407
+ hide: "fade",
408
+ open: function (event, ui) {
409
+ $.ajax({
410
+ url: '/admin/trash?page_id=' + page_id,
411
+ success: function(data, textStatus, XMLHttpRequest) {
412
+ $dialog.html(data);
413
+ // Need this for DragnDrop elements into elements window.
414
+ // Badly this is screwing up maxHeight option
415
+ $dialog.css({overflow: 'visible'}).dialog('widget').css({overflow: 'visible'});
416
+ },
417
+ error: function(XMLHttpRequest, textStatus, errorThrown) {
418
+ Alchemy.AjaxErrorHandler($dialog, XMLHttpRequest.status, textStatus, errorThrown);
419
+ }
420
+ });
421
+ },
422
+ close: function () {
423
+ $dialog.remove();
424
+ }
425
+ });
426
+ },
427
+
428
+ refreshTrashWindow: function(page_id) {
429
+ if ($('#alchemyTrashWindow').length > 0) {
430
+ $('#alchemyTrashWindow').html(Alchemy.getOverlaySpinner({x: 380, y: 270}));
431
+ $.get('/admin/trash?page_id='+page_id, function(html) {
432
+ $('#alchemyTrashWindow').html(html);
433
+ });
434
+ }
435
+ }
436
+
437
+ });
438
+ })(jQuery);