alchemy_cms 2.0.rc3 → 2.0.rc4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (219) hide show
  1. data/.gitignore +3 -1
  2. data/.rspec +1 -2
  3. data/.travis.yml +11 -0
  4. data/.yardopts +0 -1
  5. data/Gemfile +1 -2
  6. data/README.md +14 -0
  7. data/alchemy_cms.gemspec +4 -2
  8. data/app/controllers/admin/clipboard_controller.rb +8 -9
  9. data/app/controllers/admin/contents_controller.rb +4 -2
  10. data/app/controllers/admin/essence_pictures_controller.rb +2 -2
  11. data/app/controllers/admin/layoutpages_controller.rb +2 -0
  12. data/app/controllers/admin/pages_controller.rb +5 -5
  13. data/app/controllers/admin/pictures_controller.rb +2 -1
  14. data/app/controllers/admin/trash_controller.rb +2 -0
  15. data/app/controllers/alchemy_controller.rb +10 -4
  16. data/app/controllers/elements_controller.rb +1 -1
  17. data/app/helpers/admin/elements_helper.rb +32 -1
  18. data/app/helpers/alchemy_helper.rb +15 -818
  19. data/app/helpers/contents_helper.rb +69 -0
  20. data/app/helpers/elements_helper.rb +161 -0
  21. data/app/helpers/essences_helper.rb +167 -0
  22. data/app/helpers/pages_helper.rb +401 -19
  23. data/app/models/attachment.rb +4 -0
  24. data/app/models/element.rb +27 -14
  25. data/app/models/page.rb +75 -38
  26. data/app/views/admin/essence_pictures/destroy.js.erb +1 -1
  27. data/app/views/admin/pages/_create_language_form.html.erb +2 -1
  28. data/app/views/admin/pages/new.html.erb +1 -1
  29. data/app/views/admin/pages/update.js.erb +1 -1
  30. data/app/views/admin/partials/_upload_form.html.erb +2 -2
  31. data/app/views/admin/pictures/index.html.erb +7 -4
  32. data/app/views/essences/_essence_picture_editor.html.erb +1 -3
  33. data/app/views/layouts/alchemy.html.erb +59 -59
  34. data/app/views/layouts/pages.html.erb +2 -4
  35. data/app/views/{partials/_navigation_image_link.html.erb → navigation/_image_link.html.erb} +0 -0
  36. data/app/views/{partials/_navigation_link.html.erb → navigation/_link.html.erb} +1 -1
  37. data/app/views/{partials/_navigation_renderer.html.erb → navigation/_renderer.html.erb} +0 -0
  38. data/app/views/page_layouts/_contact.html.erb +1 -1
  39. data/app/views/page_layouts/_external.html.erb +0 -1
  40. data/app/views/page_layouts/_intro.html.erb +1 -1
  41. data/app/views/page_layouts/_news.html.erb +1 -1
  42. data/app/views/page_layouts/_search.html.erb +1 -1
  43. data/app/views/page_layouts/_standard.html.erb +1 -1
  44. data/assets/images/icons.png +0 -0
  45. data/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css +49 -31
  46. data/assets/stylesheets/alchemy.css +111 -91
  47. data/assets/stylesheets/elements.css +12 -16
  48. data/bin/alchemy +1 -1
  49. data/config/alchemy/config.yml +4 -0
  50. data/config/initializers/tinymce_hammer.rb +1 -0
  51. data/config/locales/de.yml +3 -1
  52. data/config/locales/en.yml +2 -0
  53. data/config/routes.rb +6 -4
  54. data/lib/alchemy/capistrano.rb +4 -7
  55. data/lib/alchemy/page_layout.rb +12 -8
  56. data/lib/alchemy/version.rb +1 -1
  57. data/spec/controllers/admin/clipboard_controller_spec.rb +23 -0
  58. data/spec/dummy/db/schema.rb +9 -9
  59. data/spec/factories.rb +24 -6
  60. data/spec/helpers/admin/elements_helper_spec.rb +20 -0
  61. data/spec/helpers/alchemy_helper_spec.rb +41 -0
  62. data/spec/helpers/contents_helper_spec.rb +27 -0
  63. data/spec/helpers/elements_helper_spec.rb +39 -0
  64. data/spec/helpers/essences_helper_spec.rb +49 -0
  65. data/spec/helpers/pages_helper_spec.rb +140 -0
  66. data/spec/integration/security_spec.rb +1 -1
  67. data/spec/integration/standardset_spec.rb +29 -0
  68. data/spec/models/element_spec.rb +49 -0
  69. data/spec/{language_spec.rb → models/language_spec.rb} +0 -0
  70. data/spec/models/page_spec.rb +139 -0
  71. data/spec/{user_spec.rb → models/user_spec.rb} +0 -0
  72. data/spec/page_layout_spec.rb +21 -0
  73. data/spec/routing_spec.rb +53 -0
  74. data/spec/spec_helper.rb +12 -11
  75. metadata +54 -303
  76. data/spec/dummy/config/alchemy/config.yml +0 -199
  77. data/spec/dummy/config/alchemy/elements.yml +0 -91
  78. data/spec/dummy/config/alchemy/page_layouts.yml +0 -29
  79. data/spec/dummy/public/images/alchemy/ajax_loader.gif +0 -0
  80. data/spec/dummy/public/images/alchemy/alchemy-logo.png +0 -0
  81. data/spec/dummy/public/images/alchemy/flags.png +0 -0
  82. data/spec/dummy/public/images/alchemy/gui/navi-tab.png +0 -0
  83. data/spec/dummy/public/images/alchemy/gui/shading.png +0 -0
  84. data/spec/dummy/public/images/alchemy/gui/shading_90.png +0 -0
  85. data/spec/dummy/public/images/alchemy/gui/toggle.png +0 -0
  86. data/spec/dummy/public/images/alchemy/icons.png +0 -0
  87. data/spec/dummy/public/images/alchemy/jquery-sb/select_arrow.gif +0 -0
  88. data/spec/dummy/public/images/alchemy/jquery-sb/select_arrow_bg.gif +0 -0
  89. data/spec/dummy/public/images/alchemy/jquery-sb/select_arrow_bg_hover.gif +0 -0
  90. data/spec/dummy/public/images/alchemy/jquery-ui/ui-icons_666666_256x240.png +0 -0
  91. data/spec/dummy/public/images/alchemy/placeholder.png +0 -0
  92. data/spec/dummy/public/images/alchemy/swfupload/browse_button.png +0 -0
  93. data/spec/dummy/public/javascripts/alchemy/alchemy.element_editor_selector.js +0 -88
  94. data/spec/dummy/public/javascripts/alchemy/alchemy.growler.js +0 -44
  95. data/spec/dummy/public/javascripts/alchemy/alchemy.image_cropper.js +0 -56
  96. data/spec/dummy/public/javascripts/alchemy/alchemy.js +0 -892
  97. data/spec/dummy/public/javascripts/alchemy/alchemy.link_overlay.js +0 -221
  98. data/spec/dummy/public/javascripts/alchemy/alchemy.page_sorter.js +0 -42
  99. data/spec/dummy/public/javascripts/alchemy/alchemy.preview.js +0 -145
  100. data/spec/dummy/public/javascripts/alchemy/jquery-ui.js +0 -428
  101. data/spec/dummy/public/javascripts/alchemy/jquery.Jcrop.min.js +0 -246
  102. data/spec/dummy/public/javascripts/alchemy/jquery.dialogextend.min.js +0 -8
  103. data/spec/dummy/public/javascripts/alchemy/jquery.in-place-edit.js +0 -171
  104. data/spec/dummy/public/javascripts/alchemy/jquery.js +0 -18
  105. data/spec/dummy/public/javascripts/alchemy/jquery.rails.js +0 -315
  106. data/spec/dummy/public/javascripts/alchemy/jquery.sb.min.js +0 -14
  107. data/spec/dummy/public/javascripts/alchemy/jquery.scrollTo-1.4.2-min.js +0 -11
  108. data/spec/dummy/public/javascripts/alchemy/jquery.ui.nestedSortable.js +0 -291
  109. data/spec/dummy/public/javascripts/alchemy/jquery.ui.tabspaging.js +0 -281
  110. data/spec/dummy/public/javascripts/alchemy/swfupload/fileprogress.js +0 -203
  111. data/spec/dummy/public/javascripts/alchemy/swfupload/handlers.js +0 -171
  112. data/spec/dummy/public/javascripts/alchemy/swfupload/queue.js +0 -98
  113. data/spec/dummy/public/javascripts/alchemy/swfupload/swfupload.js +0 -980
  114. data/spec/dummy/public/javascripts/alchemy/swfupload/swfupload.swf +0 -0
  115. data/spec/dummy/public/javascripts/alchemy/tiny_mce/jquery.tinymce.js +0 -1
  116. data/spec/dummy/public/javascripts/alchemy/tiny_mce/langs/de.js +0 -1
  117. data/spec/dummy/public/javascripts/alchemy/tiny_mce/langs/en.js +0 -223
  118. data/spec/dummy/public/javascripts/alchemy/tiny_mce/license.txt +0 -504
  119. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/alchemy_link/editor_plugin.js +0 -43
  120. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/alchemy_link/langs/de.js +0 -4
  121. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/alchemy_link/langs/en.js +0 -4
  122. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/fullscreen/editor_plugin.js +0 -1
  123. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/fullscreen/fullscreen.htm +0 -109
  124. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/inlinepopups/editor_plugin.js +0 -1
  125. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css +0 -402
  126. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/inlinepopups/template.htm +0 -387
  127. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/lists/editor_plugin.js +0 -1
  128. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/editor_plugin.js +0 -1
  129. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/js/pastetext.js +0 -36
  130. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/js/pasteword.js +0 -51
  131. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/langs/de_dlg.js +0 -1
  132. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/langs/en_dlg.js +0 -5
  133. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/pastetext.htm +0 -27
  134. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/pasteword.htm +0 -21
  135. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/cell.htm +0 -180
  136. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/css/cell.css +0 -17
  137. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/css/row.css +0 -25
  138. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/css/table.css +0 -13
  139. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/editor_plugin.js +0 -1
  140. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/cell.js +0 -319
  141. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/merge_cells.js +0 -27
  142. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/row.js +0 -237
  143. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/table.js +0 -450
  144. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/langs/de_dlg.js +0 -1
  145. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/langs/en_dlg.js +0 -75
  146. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/merge_cells.htm +0 -32
  147. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/row.htm +0 -158
  148. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/table.htm +0 -188
  149. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/about.htm +0 -52
  150. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/anchor.htm +0 -26
  151. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/charmap.htm +0 -51
  152. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/color_picker.htm +0 -74
  153. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/editor_template.js +0 -1
  154. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/image.htm +0 -80
  155. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
  156. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/flash.gif +0 -0
  157. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/icons.gif +0 -0
  158. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/iframe.gif +0 -0
  159. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
  160. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
  161. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
  162. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
  163. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/trans.gif +0 -0
  164. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/video.gif +0 -0
  165. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
  166. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/about.js +0 -73
  167. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/anchor.js +0 -42
  168. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/charmap.js +0 -355
  169. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/color_picker.js +0 -329
  170. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/image.js +0 -247
  171. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/link.js +0 -153
  172. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/source_editor.js +0 -56
  173. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/de.js +0 -1
  174. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/de_dlg.js +0 -1
  175. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/en.js +0 -68
  176. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/en_dlg.js +0 -54
  177. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/link.htm +0 -57
  178. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/shortcuts.htm +0 -47
  179. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/content.css +0 -47
  180. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/dialog.css +0 -117
  181. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
  182. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
  183. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
  184. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
  185. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
  186. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
  187. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/ui.css +0 -214
  188. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/highcontrast/content.css +0 -23
  189. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +0 -105
  190. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/highcontrast/ui.css +0 -102
  191. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/content.css +0 -46
  192. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/dialog.css +0 -117
  193. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
  194. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
  195. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
  196. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/ui.css +0 -217
  197. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +0 -8
  198. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +0 -5
  199. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/source_editor.htm +0 -25
  200. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/simple/langs/de.js +0 -1
  201. data/spec/dummy/public/javascripts/alchemy/tiny_mce/tiny_mce.js +0 -1
  202. data/spec/dummy/public/javascripts/alchemy/tiny_mce/tiny_mce_popup.js +0 -5
  203. data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/editable_selects.js +0 -70
  204. data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/form_utils.js +0 -210
  205. data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/mctabs.js +0 -162
  206. data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/validate.js +0 -252
  207. data/spec/dummy/public/stylesheets/alchemy/Jcrop.gif +0 -0
  208. data/spec/dummy/public/stylesheets/alchemy/alchemy.css +0 -3653
  209. data/spec/dummy/public/stylesheets/alchemy/alchemy_tinymce_content.css +0 -94
  210. data/spec/dummy/public/stylesheets/alchemy/alchemy_tinymce_dialog.css +0 -415
  211. data/spec/dummy/public/stylesheets/alchemy/default/img/tabs.gif +0 -0
  212. data/spec/dummy/public/stylesheets/alchemy/elements.css +0 -900
  213. data/spec/dummy/public/stylesheets/alchemy/flags.css +0 -1
  214. data/spec/dummy/public/stylesheets/alchemy/ie6.css +0 -18
  215. data/spec/dummy/public/stylesheets/alchemy/jquery-ui-1.8.7.alchemy.css +0 -2023
  216. data/spec/dummy/public/stylesheets/alchemy/jquery.Jcrop.css +0 -35
  217. data/spec/dummy/public/stylesheets/alchemy/jquery.sb.css +0 -244
  218. data/spec/dummy/public/stylesheets/alchemy/standard_set.css +0 -374
  219. data/spec/page_spec.rb +0 -50
@@ -1,56 +0,0 @@
1
- if (typeof(Alchemy) === 'undefined') {
2
- var Alchemy = {};
3
- }
4
-
5
- (function($) {
6
-
7
- var ImageCropper = {};
8
- ImageCropper.initialized = false;
9
- $.extend(Alchemy, ImageCropper);
10
-
11
- Alchemy.ImageCropper = {
12
-
13
- init : function (box, size_x, size_y, default_box, ratio) {
14
- var crop_from_field = $('#essence_picture_crop_from');
15
- var crop_size_field = $('#essence_picture_crop_size');
16
- var options = {
17
- onSelect: function(coords) {
18
- crop_from_field.val(coords.x + "x" + coords.y);
19
- crop_size_field.val(coords.w + "x" + coords.h);
20
- },
21
- setSelect: box,
22
- aspectRatio: ratio ? ratio : undefined,
23
- minSize: [size_x, size_y]
24
- };
25
- Alchemy.ImageCropper.box = box;
26
- Alchemy.ImageCropper.default_box = default_box;
27
- Alchemy.ImageCropper.crop_from_field = crop_from_field;
28
- Alchemy.ImageCropper.crop_size_field = crop_size_field;
29
-
30
- if (!Alchemy.ImageCropper.initialized) {
31
- Alchemy.ImageCropper.api = $.Jcrop('#imageToCrop', options);
32
- Alchemy.ImageCropper.initialized = true;
33
- }
34
-
35
- $('#image_cropper_form').submit(Alchemy.ImageCropper.destroy);
36
- $('.ui-dialog-titlebar-close').click(Alchemy.ImageCropper.destroy);
37
- },
38
-
39
- undo : function() {
40
- Alchemy.ImageCropper.api.setSelect(Alchemy.ImageCropper.box);
41
- },
42
-
43
- reset : function() {
44
- Alchemy.ImageCropper.api.setSelect(Alchemy.ImageCropper.default_box);
45
- Alchemy.ImageCropper.crop_from_field.val('');
46
- Alchemy.ImageCropper.crop_size_field.val('');
47
- },
48
-
49
- destroy : function() {
50
- Alchemy.ImageCropper.api.destroy();
51
- Alchemy.ImageCropper.initialized = false;
52
- }
53
-
54
- }
55
-
56
- })(jQuery);
@@ -1,892 +0,0 @@
1
- if (typeof(Alchemy) === 'undefined') {
2
- var Alchemy = {};
3
- }
4
-
5
- (function ($) {
6
-
7
- // Setting jQueryUIs global animation duration
8
- $.fx.speeds._default = 400;
9
-
10
- // The Alchemy JavaScript Object contains all Functions
11
- $.extend(Alchemy, {
12
-
13
- inPlaceEditor : function (options) {
14
- var defaults = {
15
- save_label: 'save',
16
- cancel_label: 'cancel'
17
- };
18
- var settings = jQuery.extend({}, defaults, options);
19
- var cancel_handler = function(element) {
20
- jQuery(element).css({overflow: 'hidden'});
21
- return true;
22
- };
23
- var submit_handler = function(element, id, value) {
24
- $(element).css({overflow: 'hidden'});
25
- id = parseInt(id.replace(/^image_picture_/, ''));
26
- $.ajax({url:'/admin/pictures/'+id, type: 'PUT', data: {name: value}});
27
- return false;
28
- };
29
-
30
- $('#alchemy .rename').click(function () {
31
- $(this).css({overflow: 'visible'});
32
- });
33
-
34
- $('#alchemy .rename').inPlaceEdit({
35
- submit : submit_handler,
36
- cancel : cancel_handler,
37
- html : ' \
38
- <div class="inplace-edit"> \
39
- <input type="text" value="" class="thin_border field" /> \
40
- <div class="buttons"> \
41
- <input type="button" value="'+settings.save_label+'" class="save-button button" /> \
42
- <input type="button" value="'+settings.cancel_label+'" class="cancel-button button" /> \
43
- </div> \
44
- </div>'
45
- });
46
-
47
- },
48
-
49
- getOverlaySpinner : function (options) {
50
- var defaults = {
51
- x: '47%',
52
- y: '33%'
53
- };
54
- var settings = $.extend({}, defaults, options);
55
- var $spinner = $('<img src="/images/alchemy/ajax_loader.gif" />');
56
- var left = (settings.x - 32) / 2;
57
- var top = ((settings.y - 32) / 2) - 16;
58
- top = top < 0 ? 0 : top;
59
- $spinner.css({
60
- marginLeft: left + 'px',
61
- marginTop: top + 'px'
62
- });
63
- return $spinner;
64
- },
65
-
66
- AjaxErrorHandler : function($dialog, status, textStatus, errorThrown) {
67
- var $div = $('<div class="with_padding" />');
68
- var $errorDiv = $('<div id="errorExplanation" />');
69
- $dialog.html($div);
70
- $div.append($errorDiv);
71
- if (status === 0) {
72
- $errorDiv.append('<h2>The server does not respond!</h2>');
73
- $errorDiv.append('<p>Please start server and try again.</p>');
74
- } else {
75
- $errorDiv.append('<h2>'+errorThrown+' ('+status+')</h2>');
76
- $errorDiv.append('<p>Please check log and try again.</p>');
77
- }
78
- },
79
-
80
- openPreviewWindow : function (url, title) {
81
- var $iframe = $('#alchemyPreviewWindow');
82
- if ($iframe.length === 0) {
83
- $iframe = $('<iframe src="'+url+'" id="alchemyPreviewWindow"></iframe>');
84
- $iframe.load(function() {
85
- $('#preview_load_info').hide();
86
- });
87
- $iframe.css({'background-color': '#ffffff'});
88
- Alchemy.PreviewWindow = $iframe.dialog({
89
- modal: false,
90
- title: title,
91
- width: $(window).width() - 512,
92
- height: $(window).height() - 94,
93
- minWidth: 600,
94
- minHeight: 300,
95
- show: "fade",
96
- hide: "fade",
97
- position: [73, 84],
98
- autoResize: true,
99
- closeOnEscape: false,
100
- create: function() {
101
- var $spinner = $('<img src="/images/alchemy/ajax_loader.gif" alt="" id="preview_load_info" />');
102
- $('#ui-dialog-title-alchemyPreviewWindow').after($spinner);
103
- var $reload = $('<a href="#" class="ui-dialog-titlebar-refresh ui-corner-all" role="button"></a>');
104
- $reload.append('<span class="ui-icon ui-icon-refresh">reload</span>');
105
- $('#ui-dialog-title-alchemyPreviewWindow').after($reload);
106
- $reload.click(Alchemy.reloadPreview);
107
- },
108
- close: function(event, ui) {
109
- Alchemy.PreviewWindowButton.enable();
110
- },
111
- open: function (event, ui) {
112
- $(this).css({width: '100%'});
113
- Alchemy.PreviewWindowButton.disable();
114
- Alchemy.previewWindowFrameWidth = $('#alchemyPreviewWindow').width();
115
- }
116
- }).dialogExtend({
117
- "maximize" : true,
118
- "dblclick" : "maximize",
119
- "events" : {
120
- beforeMaximize: function(evt, dlg) {
121
- Alchemy.previewWindowPosition = $('#alchemyPreviewWindow').dialog('widget').offset();
122
- Alchemy.previewWindowFrameWidth = $('#alchemyPreviewWindow').width();
123
- },
124
- maximize : function(evt, dlg) {
125
- $('#alchemyPreviewWindow').css({width: "100%"});
126
- },
127
- restore : function(evt, dlg) {
128
- $('#alchemyPreviewWindow').dialog('widget').css(Alchemy.previewWindowPosition);
129
- $('#alchemyPreviewWindow').css({width: Alchemy.previewWindowFrameWidth});
130
- }
131
- }
132
- });
133
- } else {
134
- $('#alchemyPreviewWindow').dialog('open');
135
- }
136
- Alchemy.PreviewWindow.refresh = function () {
137
- var $iframe = $('#alchemyPreviewWindow');
138
- $('#preview_load_info').show();
139
- $iframe.load(function() {
140
- $('#preview_load_info').hide();
141
- });
142
- $iframe.attr('src', $iframe.attr('src'));
143
- return true;
144
- };
145
- },
146
-
147
- PreviewWindowExists : function() {
148
- if (Alchemy.PreviewWindow) {
149
- return true;
150
- } else {
151
- return false;
152
- }
153
- },
154
-
155
- reloadPreview : function() {
156
- Alchemy.PreviewWindow.refresh();
157
- },
158
-
159
- ElementsWindowButton : {
160
- enable: function() {
161
- $('div#show_element_window').removeClass('disabled');
162
- },
163
- disable: function() {
164
- $('div#show_element_window').addClass('disabled');
165
- },
166
- toggle: function() {
167
- $('div#show_element_window').toggleClass('disabled');
168
- }
169
- },
170
-
171
- PreviewWindowButton : {
172
- enable: function() {
173
- $('div#show_preview_window').removeClass('disabled');
174
- },
175
- disable: function() {
176
- $('div#show_preview_window').addClass('disabled');
177
- },
178
- toggle: function() {
179
- $('div#show_preview_window').toggleClass('disabled');
180
- }
181
- },
182
-
183
- openElementsWindow : function (path, options) {
184
- var $dialog = $('<div style="display: none" id="alchemyElementWindow"></div>');
185
- var closeCallback = function() {
186
- $dialog.dialog("destroy");
187
- $('#alchemyElementWindow').remove();
188
- Alchemy.ElementsWindowButton.enable();
189
- };
190
- $dialog.html(Alchemy.getOverlaySpinner({x: 420, y: 300}));
191
- Alchemy.ElementsWindow = $dialog.dialog({
192
- modal: false,
193
- minWidth: 422,
194
- minHeight: 300,
195
- height: $(window).height() - 94,
196
- title: options.texts.title,
197
- show: "fade",
198
- hide: "fade",
199
- position: [$(window).width() - 432, 84],
200
- closeOnEscape: false,
201
- create: function() {
202
- $dialog.before(Alchemy.createElementWindowToolbar(options.toolbarButtons));
203
- },
204
- open: function(event, ui) {
205
- Alchemy.ElementsWindowButton.disable();
206
- $.ajax({
207
- url: path,
208
- success: function(data, textStatus, XMLHttpRequest) {
209
- $dialog.html(data);
210
- Alchemy.ButtonObserver('#alchemyElementWindow button.button');
211
- },
212
- error: function(XMLHttpRequest, textStatus, errorThrown) {
213
- Alchemy.AjaxErrorHandler($dialog, XMLHttpRequest.status, textStatus, errorThrown);
214
- }
215
- });
216
- },
217
- beforeClose : function() {
218
- if (Alchemy.isPageDirty()) {
219
- Alchemy.openConfirmWindow({
220
- title: options.texts.dirtyTitle,
221
- message: options.texts.dirtyMessage,
222
- okLabel: options.texts.okLabel,
223
- cancelLabel: options.texts.cancelLabel,
224
- okCallback: closeCallback
225
- });
226
- return false;
227
- } else {
228
- return true;
229
- }
230
- },
231
- close: closeCallback
232
- });
233
- },
234
-
235
- createElementWindowToolbar : function(buttons) {
236
- var $toolbar = $('<div id="overlay_toolbar"></div>'), btn;
237
- for (i = 0; i < buttons.length; i++) {
238
- btn = buttons[i];
239
- $toolbar.append(
240
- Alchemy.createToolbarButton({
241
- buttonTitle: btn.title,
242
- buttonLabel: btn.label,
243
- iconClass: btn.iconClass,
244
- onClick: btn.onClick,
245
- buttonId: btn.buttonId
246
- })
247
- );
248
- }
249
- return $toolbar;
250
- },
251
-
252
- createToolbarButton : function(options) {
253
- var $btn = $('<div class="button_with_label"></div>'), $lnk;
254
- if (options.buttonId) $btn.attr({'id': options.buttonId});
255
- $lnk = $('<a title="'+options.buttonTitle+'" class="icon_button"></a>');
256
- $lnk.click(options.onClick);
257
- $lnk.append('<span class="icon '+options.iconClass+'"></span>');
258
- $btn.append($lnk);
259
- $btn.append('<br><label>'+options.buttonLabel+'</label>');
260
- return $btn;
261
- },
262
-
263
- openConfirmWindow : function (options) {
264
- var $confirmation = $('<div style="display:none" id="alchemyConfirmation"></div>');
265
- $confirmation.appendTo('body');
266
- $confirmation.html('<p>'+options.message+'</p>');
267
- Alchemy.ConfirmationWindow = $confirmation.dialog({
268
- resizable: false,
269
- minHeight: 100,
270
- minWidth: 300,
271
- modal: true,
272
- title: options.title,
273
- show: "fade",
274
- hide: "fade",
275
- buttons: [
276
- {
277
- text: options.cancelLabel,
278
- click: function() {
279
- $(this).dialog("close");
280
- }
281
- },
282
- {
283
- text: options.okLabel,
284
- click: function() {
285
- $(this).dialog("close");
286
- options.okCallback();
287
- }
288
- }
289
- ],
290
- open: function () {
291
- Alchemy.ButtonObserver('#alchemyConfirmation .button');
292
- },
293
- close: function() {
294
- $('#alchemyConfirmation').remove();
295
- }
296
- });
297
- },
298
-
299
- confirmToDeleteWindow : function (url, title, message, okLabel, cancelLabel) {
300
- var $confirmation = $('<div style="display:none" id="alchemyConfirmation"></div>');
301
- $confirmation.appendTo('body');
302
- $confirmation.html('<p>'+message+'</p>');
303
- Alchemy.ConfirmationWindow = $confirmation.dialog({
304
- resizable: false,
305
- minHeight: 100,
306
- minWidth: 300,
307
- modal: true,
308
- title: title,
309
- show: "fade",
310
- hide: "fade",
311
- buttons: [
312
- {
313
- text: cancelLabel,
314
- click: function() {
315
- $(this).dialog("close");
316
- }
317
- },
318
- {
319
- text: okLabel,
320
- click: function() {
321
- $(this).dialog("close");
322
- $.ajax({
323
- url: url,
324
- type: 'DELETE'
325
- });
326
- }
327
- }
328
- ],
329
- open: function () {
330
- Alchemy.ButtonObserver('#alchemyConfirmation .button');
331
- },
332
- close: function() {
333
- $('#alchemyConfirmation').remove();
334
- }
335
- });
336
- },
337
-
338
- openWindow : function (action_url, title, size_x, size_y, resizable, modal, overflow) {
339
- overflow == undefined ? overflow = false: overflow = overflow;
340
- if (size_x === 'fullscreen') {
341
- size_x = $(window).width() - 50;
342
- size_y = $(window).height() - 50;
343
- }
344
- var $dialog = $('<div style="display:none" id="alchemyOverlay"></div>');
345
- $dialog.appendTo('body');
346
- $dialog.html(Alchemy.getOverlaySpinner({x: size_x, y: size_y}));
347
-
348
- Alchemy.CurrentWindow = $dialog.dialog({
349
- modal: modal,
350
- minWidth: size_x,
351
- minHeight: size_y > 68 ? size_y : 68,
352
- title: title,
353
- resizable: resizable,
354
- show: "fade",
355
- hide: "fade",
356
- open: function (event, ui) {
357
- $.ajax({
358
- url: action_url,
359
- success: function(data, textStatus, XMLHttpRequest) {
360
- $dialog.html(data);
361
- $dialog.css({overflow: overflow ? 'visible' : 'auto'});
362
- $dialog.dialog('widget').css({overflow: overflow ? 'visible' : 'hidden'});
363
- Alchemy.SelectBox('#alchemyOverlay select');
364
- Alchemy.ButtonObserver('#alchemyOverlay .button');
365
- },
366
- error: function(XMLHttpRequest, textStatus, errorThrown) {
367
- Alchemy.AjaxErrorHandler($dialog, XMLHttpRequest.status, textStatus, errorThrown);
368
- }
369
- });
370
- },
371
- beforeClose: function() {
372
- $(".sb.open").triggerAll("close");
373
- },
374
- close: function () {
375
- $dialog.remove();
376
- }
377
- });
378
- },
379
-
380
- closeCurrentWindow : function() {
381
- if (Alchemy.CurrentWindow) {
382
- Alchemy.CurrentWindow.dialog('close');
383
- Alchemy.CurrentWindow = null;
384
- } else {
385
- $('#alchemyOverlay').dialog('close');
386
- }
387
- return true;
388
- },
389
-
390
- zoomImage : function(url, title, width, height) {
391
- var window_height = height;
392
- var window_width = width;
393
- var $doc_width = $(window).width();
394
- var $doc_height = $(window).height();
395
- if (width > $doc_width) {
396
- window_width = $doc_width - 50;
397
- }
398
- if (height > $doc_height) {
399
- window_height = $doc_height - 50;
400
- }
401
- var $dialog = $('<div style="display:none" id="alchemyOverlay"></div>');
402
- $dialog.appendTo('body');
403
- $dialog.html(Alchemy.getOverlaySpinner({x: width, y: height}));
404
- $dialog.dialog({
405
- modal: false,
406
- minWidth: window_width < 320 ? 320 : window_width,
407
- minHeight: window_height < 240 ? 240 : window_height,
408
- title: title,
409
- show: "fade",
410
- hide: "fade",
411
- open: function (event, ui) {
412
- $.ajax({
413
- url: url,
414
- success: function(data, textStatus, XMLHttpRequest) {
415
- $dialog.html(data);
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
- return false;
427
- },
428
-
429
- openLicencseWindow : function() {
430
- var height = $(window).height() - 150;
431
- var $iframe = $('<iframe src="http://www.gnu.org/licenses/gpl-3.0.txt"></iframe>');
432
- $iframe.dialog({
433
- bgiframe: true,
434
- title: 'GNU GPL License',
435
- width: 650,
436
- height: height,
437
- autoResize: true,
438
- close: function(event, ui) { $(this).dialog('destroy'); },
439
- open: function (event, ui) { $(this).css({width: '100%'}); }
440
- });
441
- },
442
-
443
- pleaseWaitOverlay : function(show) {
444
- if (typeof(show) == 'undefined') {
445
- show = true;
446
- }
447
- var $overlay = $('#overlay');
448
- $overlay.css("visibility", show ? 'visible': 'hidden');
449
- },
450
-
451
- toggleElement : function (id, url, token, text) {
452
- var toggle = function() {
453
- $('#element_'+id+'_folder').hide();
454
- $('#element_'+id+'_folder_spinner').show();
455
- $.post(url, {
456
- authenticity_token: encodeURIComponent(token)
457
- }, function(request) {
458
- $('#element_'+id+'_folder').show();
459
- $('#element_'+id+'_folder_spinner').hide();
460
- });
461
- }
462
- if (Alchemy.isPageDirty()) {
463
- Alchemy.openConfirmWindow({
464
- title: text.title,
465
- message: text.message,
466
- okLabel: text.okLabel,
467
- cancelLabel: text.cancelLabel,
468
- okCallback: toggle
469
- });
470
- return false;
471
- } else {
472
- toggle();
473
- }
474
- },
475
-
476
- ListFilter : function(selector) {
477
- var text = $('#search_field').val().toLowerCase();
478
- var $boxes = $(selector);
479
- $boxes.map(function() {
480
- $this = $(this);
481
- $this.css({
482
- display: $this.attr('name').toLowerCase().indexOf(text) != -1 ? '' : 'none'
483
- });
484
- });
485
- },
486
-
487
- fadeImage : function(image, spinner_selector) {
488
- try {
489
- $(spinner_selector).hide();
490
- $(image).fadeIn(600);
491
- } catch(e) {
492
- Alchemy.debug(e);
493
- };
494
- },
495
-
496
- saveElement : function(form) {
497
- var $rtf_contents = $(form).find('div.content_rtf_editor');
498
- if ($rtf_contents.size() > 0) {
499
- $rtf_contents.each(function() {
500
- var id = $(this).children('textarea.tinymce').attr('id');
501
- tinymce.get(id).save();
502
- });
503
- }
504
- },
505
-
506
- setElementSaved : function(selector) {
507
- var $element = $(selector);
508
- Alchemy.setElementClean(selector);
509
- Alchemy.enableButton(selector + ' button.button');
510
- },
511
-
512
- resizeFrame : function() {
513
- var options = {
514
- top: 90,
515
- left: 65,
516
- right: 0
517
- };
518
- var $mainFrame = $('#main_content');
519
- var $topFrame = $('#top_menu');
520
- var view_height = $(window).height();
521
- var view_width = $(window).width();
522
- var mainFrameHeight = view_height - options.top;
523
- var topFrameHeight = options.top;
524
- var width = view_width - options.left - options.right;
525
- if ($mainFrame.length > 0) {
526
- $mainFrame.css({
527
- width: width,
528
- height: mainFrameHeight
529
- });
530
- }
531
- if ($topFrame.length > 0) {
532
- $topFrame.css({
533
- width: width,
534
- height: topFrameHeight
535
- });
536
- }
537
- },
538
-
539
- SortableElements : function(page_id, form_token) {
540
- $('#element_area .sortable_cell').sortable({
541
- items: 'div.element_editor',
542
- handle: '.element_handle',
543
- axis: 'y',
544
- placeholder: 'droppable_element_placeholder',
545
- forcePlaceholderSize: true,
546
- dropOnEmpty: true,
547
- opacity: 0.5,
548
- cursor: 'move',
549
- tolerance: 'pointer',
550
- update: function(event, ui) {
551
- var ids = $.map($(event.target).children(), function(child) {
552
- return child.id.replace(/element_/, '');
553
- });
554
- // Is the trash window open?
555
- if ($('#alchemyTrashWindow').length > 0) {
556
- // updating the trash icon
557
- if ($('#trash_items div.element_editor').not('.dragged').length === 0) {
558
- $('#element_trash_button .icon').removeClass('full');
559
- $('#trash_empty_notice').show();
560
- }
561
- }
562
- $(event.target).css("cursor", "progress");
563
- $.ajax({
564
- url: '/admin/elements/order',
565
- type: 'POST',
566
- data: "page_id=" + page_id + "&authenticity_token=" + encodeURIComponent(form_token) + "&" + $.param({element_ids: ids}),
567
- complete: function () {
568
- $(event.target).css("cursor", "auto");
569
- Alchemy.refreshTrashWindow(page_id);
570
- }
571
- });
572
- },
573
- start: function(event, ui) {
574
- var $textareas = ui.item.find('textarea.tinymce');
575
- $textareas.each(function() {
576
- tinymce.get(this.id).remove();
577
- });
578
- },
579
- stop: function(event, ui) {
580
- var $textareas = ui.item.find('textarea.tinymce');
581
- $textareas.each(function() {
582
- TinymceHammer.addEditor(this.id);
583
- });
584
- }
585
- });
586
- },
587
-
588
- openTrashWindow : function (page_id, title) {
589
- var size_x = 380, size_y = 270;
590
- if (size_x === 'fullscreen') {
591
- size_x = $(window).width() - 50;
592
- size_y = $(window).height() - 50;
593
- }
594
- var $dialog = $('<div style="display:none" id="alchemyTrashWindow"></div>');
595
- $dialog.appendTo('body');
596
- $dialog.html(Alchemy.getOverlaySpinner({x: size_x, y: size_y}));
597
-
598
- Alchemy.trashWindow = $dialog.dialog({
599
- modal: false,
600
- width: 380,
601
- minHeight: 450,
602
- maxHeight: $(window).height() - 50,
603
- title: title,
604
- resizable: false,
605
- show: "fade",
606
- hide: "fade",
607
- open: function (event, ui) {
608
- $.ajax({
609
- url: '/admin/trash?page_id=' + page_id,
610
- success: function(data, textStatus, XMLHttpRequest) {
611
- $dialog.html(data);
612
- // Need this for DragnDrop elements into elements window.
613
- // Badly this is screwing up maxHeight option
614
- $dialog.css({overflow: 'visible'}).dialog('widget').css({overflow: 'visible'});
615
- },
616
- error: function(XMLHttpRequest, textStatus, errorThrown) {
617
- Alchemy.AjaxErrorHandler($dialog, XMLHttpRequest.status, textStatus, errorThrown);
618
- }
619
- });
620
- },
621
- close: function () {
622
- $dialog.remove();
623
- }
624
- });
625
- },
626
-
627
- refreshTrashWindow: function(page_id) {
628
- if ($('#alchemyTrashWindow').length > 0) {
629
- $('#alchemyTrashWindow').html(Alchemy.getOverlaySpinner({x: 380, y: 270}));
630
- $.get('/admin/trash?page_id='+page_id, function(html) {
631
- $('#alchemyTrashWindow').html(html);
632
- });
633
- }
634
- },
635
-
636
- SortableContents : function(selector, token) {
637
- $(selector).sortable({
638
- items: 'div.dragable_picture',
639
- handle: 'div.picture_handle',
640
- placeholder: 'droppable_content_placeholder',
641
- opacity: 0.5,
642
- cursor: 'move',
643
- tolerance: 'pointer',
644
- containment: 'parent',
645
- update: function(event, ui) {
646
- var ids = $.map($(event.target).children('div.dragable_picture'), function (child) {
647
- return child.id.replace(/essence_picture_/, '');
648
- });
649
- $(event.originalTarget).css("cursor", "progress");
650
- $.ajax({
651
- url: '/admin/contents/order',
652
- type: 'POST',
653
- data: "authenticity_token=" + encodeURIComponent(token) + "&" + $.param({content_ids: ids}),
654
- complete: function () {
655
- $(event.originalTarget).css("cursor", "move");
656
- }
657
- });
658
- }
659
- });
660
- },
661
-
662
- Tooltips : function() {
663
- var xOffset = 10;
664
- var yOffset = 20;
665
- $(".tooltip").hover(function(e) {
666
- this.original_title = this.title;
667
- if (this.original_title == '') {
668
- this.tooltip_content = $(this).next('.tooltip_content').html();
669
- } else {
670
- this.tooltip_content = this.original_title;
671
- }
672
- if (this.tooltip_content != null) {
673
- this.title = "";
674
- $("body").append("<div id='tooltip'>"+ this.tooltip_content +"</div>");
675
- $("#tooltip")
676
- .css("top",(e.pageY - xOffset) + "px")
677
- .css("left",(e.pageX + yOffset) + "px")
678
- .fadeIn(400);
679
- }
680
- },
681
- function() {
682
- this.title = this.original_title;
683
- $("#tooltip").remove();
684
- });
685
- $(".tooltip").mousemove(function(e) {
686
- $("#tooltip")
687
- .css("top",(e.pageY - xOffset) + "px")
688
- .css("left",(e.pageX + yOffset) + "px");
689
- });
690
- },
691
-
692
- SelectBox : function(selector) {
693
- $(selector).sb({animDuration: 0, fixedWidth: true});
694
- },
695
-
696
- Buttons : function(options) {
697
- $("button, input:submit, a.button").button(options);
698
- },
699
-
700
- ElementDirtyObserver : function(selector) {
701
- var $elements = $(selector);
702
- $elements.find('textarea.tinymce').map(function() {
703
- var $this = $(this);
704
- var ed = tinymce.get(this.id);
705
- ed.onChange.add(function(ed, l) {
706
- Alchemy.setElementDirty($this.parents('.element_editor'));
707
- });
708
- });
709
- $elements.find('input[type="text"]').bind('change', function() {
710
- $(this).addClass('dirty');
711
- Alchemy.setElementDirty($(this).parents('.element_editor'));
712
- });
713
- $elements.find('.element_foot input[type="checkbox"]').bind('click', function() {
714
- $(this).addClass('dirty');
715
- Alchemy.setElementDirty($(this).parents('.element_editor'));
716
- });
717
- $elements.find('select').bind('change', function() {
718
- $(this).addClass('dirty');
719
- Alchemy.setElementDirty($(this).parents('.element_editor'));
720
- });
721
- },
722
-
723
- setElementDirty : function(element) {
724
- var $element = $(element);
725
- $element.addClass('dirty');
726
- $element.find('.element_head .icon').addClass('element_dirty');
727
- },
728
-
729
- setElementClean : function(element) {
730
- var $element = $(element);
731
- $element.removeClass('dirty');
732
- $element.find('.element_foot input[type="checkbox"]').removeClass('dirty');
733
- $element.find('input[type="text"]').removeClass('dirty');
734
- $element.find('select').removeClass('dirty');
735
- $element.find('.element_head .icon').removeClass('element_dirty');
736
- },
737
-
738
- isPageDirty : function() {
739
- return $('#element_area').find('.element_editor.dirty').size() > 0;
740
- },
741
-
742
- checkPageDirtyness : function(element, text) {
743
- var okcallback;
744
- if ($(element).is('form')) {
745
- okcallback = function() {
746
- var $form = $('<form action="'+element.action+'" method="POST" style="display: none"></form>');
747
- $form.append($(element).find('input'));
748
- $form.appendTo('body');
749
- Alchemy.pleaseWaitOverlay();
750
- $form.submit();
751
- }
752
- } else if ($(element).is('a')) {
753
- okcallback = function() {
754
- Alchemy.pleaseWaitOverlay();
755
- document.location = element.pathname;
756
- }
757
- }
758
- if (Alchemy.isPageDirty()) {
759
- Alchemy.openConfirmWindow({
760
- title: text.title,
761
- message: text.message,
762
- okLabel: text.okLabel,
763
- cancelLabel: text.cancelLabel,
764
- okCallback: okcallback
765
- });
766
- return false;
767
- } else {
768
- return true;
769
- }
770
- },
771
-
772
- PageLeaveObserver : function(texts) {
773
- $('#main_navi a').click(function(event) {
774
- if (!Alchemy.checkPageDirtyness(event.currentTarget, texts)) {
775
- event.preventDefault();
776
- }
777
- });
778
- },
779
-
780
- handleEssenceCheckbox: function (checkbox) {
781
- var $checkbox = $(checkbox);
782
- if (checkbox.checked) {
783
- $('#' + checkbox.id + '_hidden').remove();
784
- } else {
785
- $checkbox.after('<input type="hidden" value="0" name="'+checkbox.name+'" id="'+checkbox.id+'_hidden">');
786
- }
787
- },
788
-
789
- DraggableTrashItems: function (items_n_cells) {
790
- $("#trash_items div.draggable").each(function () {
791
- $(this).draggable({
792
- helper: 'clone',
793
- iframeFix: 'iframe#alchemyPreviewWindow',
794
- connectToSortable: '#cell_' + items_n_cells[this.id],
795
- start: function(event, ui) {
796
- $(this).hide().addClass('dragged');
797
- ui.helper.css({width: '300px'});
798
- },
799
- stop: function() {
800
- $(this).show().removeClass('dragged');
801
- }
802
- });
803
- });
804
- },
805
-
806
- selectOrCreateCellTab: function (cell_name, label) {
807
- if ($('#cell_'+cell_name).size() === 0) {
808
- $('#cells').tabs('add', '#cell_'+cell_name, label);
809
- $('#cell_'+cell_name).addClass('sortable_cell');
810
- }
811
- $('#cells').tabs('select', 'cell_'+cell_name);
812
- },
813
-
814
- ButtonObserver: function (selector) {
815
- $(selector).click(function(event) {
816
- Alchemy.disableButton(this);
817
- });
818
- },
819
-
820
- disableButton: function (button) {
821
- var $button = $(button), $clone = $button.clone(), width = $button.outerWidth(), text = $button.text();
822
- $button.hide();
823
- $button.parent().append($clone);
824
- $clone.attr({disabled: true})
825
- .addClass('disabled cloned-button')
826
- .css({width: width})
827
- .html('<img src="/images/alchemy/ajax_loader.gif">')
828
- .show();
829
- return true;
830
- },
831
-
832
- enableButton: function (button) {
833
- var $button = $(button);
834
- $button.show();
835
- $button.parent().find('.cloned-button').remove();
836
- return true;
837
- },
838
-
839
- debug : function(e) {
840
- if (window['console']) {
841
- console.debug(e);
842
- console.trace();
843
- }
844
- }
845
-
846
- });
847
-
848
- })(jQuery);
849
-
850
- (function($) {
851
-
852
- // Call all Alchemy "onload" scripts
853
- $(document).ready(function () {
854
- Alchemy.resizeFrame();
855
- Alchemy.Tooltips();
856
- if (typeof(jQuery().sb) === 'function') {
857
- Alchemy.SelectBox('body#alchemy select');
858
- }
859
- if (jQuery('#flash_notices').length > 0) {
860
- Alchemy.Growler.fade();
861
- }
862
- $('#alchemy a.icon_button.please_wait_overlay').click(function() {
863
- Alchemy.pleaseWaitOverlay();
864
- });
865
- });
866
-
867
- // Alchemy window resize listener
868
- $(window).resize(function() {
869
- Alchemy.resizeFrame();
870
- });
871
-
872
- })(jQuery);
873
-
874
- // Javascript extensions
875
-
876
- String.prototype.beginsWith = function(t, i) {
877
- if (i==false) {
878
- return (t == this.substring(0, t.length));
879
- }
880
- else {
881
- return (t.toLowerCase() == this.substring(0, t.length).toLowerCase());
882
- }
883
- };
884
-
885
- String.prototype.endsWith = function(t, i) {
886
- if (i==false) {
887
- return (t == this.substring(this.length - t.length));
888
- }
889
- else {
890
- return (t.toLowerCase() == this.substring(this.length - t.length).toLowerCase());
891
- }
892
- };