alchemy_cms 2.1.12 → 2.2.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. data/.travis.yml +1 -1
  2. data/Gemfile +20 -16
  3. data/README.md +11 -7
  4. data/alchemy_cms.gemspec +31 -29
  5. data/app/assets/javascripts/alchemy/alchemy.base.js +234 -233
  6. data/app/assets/javascripts/alchemy/alchemy.buttons.js +26 -26
  7. data/app/assets/javascripts/alchemy/alchemy.datepicker.js +32 -32
  8. data/app/assets/javascripts/alchemy/alchemy.dirty.js +78 -78
  9. data/app/assets/javascripts/alchemy/alchemy.dragndrop.js +103 -103
  10. data/app/assets/javascripts/alchemy/alchemy.element_editor_selector.js +84 -84
  11. data/app/assets/javascripts/alchemy/alchemy.elements_window.js +88 -88
  12. data/app/assets/javascripts/alchemy/alchemy.file_progress.js +92 -0
  13. data/app/assets/javascripts/alchemy/alchemy.growler.js +23 -23
  14. data/app/assets/javascripts/alchemy/alchemy.html5.js +23 -0
  15. data/app/assets/javascripts/alchemy/alchemy.image_cropper.js +53 -52
  16. data/app/assets/javascripts/alchemy/alchemy.jquery_loader.js +33 -30
  17. data/app/assets/javascripts/alchemy/alchemy.js +2 -0
  18. data/app/assets/javascripts/alchemy/alchemy.js_extensions.js +14 -14
  19. data/app/assets/javascripts/alchemy/alchemy.link_overlay.js.coffee +181 -0
  20. data/app/assets/javascripts/alchemy/alchemy.menubar.js +48 -48
  21. data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +39 -39
  22. data/app/assets/javascripts/alchemy/alchemy.preview.js +81 -83
  23. data/app/assets/javascripts/alchemy/alchemy.preview_window.js +86 -86
  24. data/app/assets/javascripts/alchemy/alchemy.routes.js.erb +23 -23
  25. data/app/assets/javascripts/alchemy/alchemy.swf_upload.js +208 -353
  26. data/app/assets/javascripts/alchemy/alchemy.uploader.js +279 -0
  27. data/app/assets/javascripts/alchemy/alchemy.windows.js +268 -268
  28. data/app/assets/javascripts/tiny_mce/plugins/alchemy_link/editor_plugin.js +42 -42
  29. data/app/assets/stylesheets/alchemy/_defaults.scss +89 -89
  30. data/app/assets/stylesheets/alchemy/base.css.scss +790 -804
  31. data/app/assets/stylesheets/alchemy/buttons.css.scss +263 -264
  32. data/app/assets/stylesheets/alchemy/dashboard.css.scss +66 -66
  33. data/app/assets/stylesheets/alchemy/elements.css.scss +575 -564
  34. data/app/assets/stylesheets/alchemy/flash.css.scss +45 -45
  35. data/app/assets/stylesheets/alchemy/frame.css.scss +262 -262
  36. data/app/assets/stylesheets/alchemy/icons.css.scss +86 -86
  37. data/app/assets/stylesheets/alchemy/jquery-ui.alchemy.css.scss +706 -707
  38. data/app/assets/stylesheets/alchemy/jquery.Jcrop.css.scss +46 -27
  39. data/app/assets/stylesheets/alchemy/jquery.sb.css.scss +107 -107
  40. data/app/assets/stylesheets/alchemy/login.css.scss +40 -38
  41. data/app/assets/stylesheets/alchemy/menubar.css.scss +84 -82
  42. data/app/assets/stylesheets/alchemy/modules.css.scss +9 -9
  43. data/app/assets/stylesheets/alchemy/pagination.css.scss +49 -49
  44. data/app/assets/stylesheets/alchemy/print.css +7 -7
  45. data/app/assets/stylesheets/alchemy/sitemap.css.scss +185 -154
  46. data/app/assets/stylesheets/alchemy/standard_set.css +205 -206
  47. data/app/assets/stylesheets/alchemy/tables.css.scss +94 -60
  48. data/app/assets/stylesheets/alchemy/tinymce_content.css.scss +34 -34
  49. data/app/assets/stylesheets/alchemy/tinymce_dialog.css.scss +177 -177
  50. data/app/assets/stylesheets/alchemy/upload.css.scss +68 -45
  51. data/app/assets/stylesheets/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css.scss +222 -221
  52. data/app/controllers/alchemy/admin/attachments_controller.rb +100 -100
  53. data/app/controllers/alchemy/admin/base_controller.rb +116 -116
  54. data/app/controllers/alchemy/admin/clipboard_controller.rb +44 -44
  55. data/app/controllers/alchemy/admin/contents_controller.rb +55 -55
  56. data/app/controllers/alchemy/admin/dashboard_controller.rb +12 -11
  57. data/app/controllers/alchemy/admin/elements_controller.rb +109 -109
  58. data/app/controllers/alchemy/admin/essence_audios_controller.rb +8 -8
  59. data/app/controllers/alchemy/admin/essence_files_controller.rb +20 -20
  60. data/app/controllers/alchemy/admin/essence_flashes_controller.rb +8 -8
  61. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +81 -81
  62. data/app/controllers/alchemy/admin/essence_videos_controller.rb +8 -8
  63. data/app/controllers/alchemy/admin/languages_controller.rb +16 -4
  64. data/app/controllers/alchemy/admin/layoutpages_controller.rb +9 -9
  65. data/app/controllers/alchemy/admin/pages_controller.rb +249 -248
  66. data/app/controllers/alchemy/admin/pictures_controller.rb +105 -105
  67. data/app/controllers/alchemy/admin/resources_controller.rb +111 -166
  68. data/app/controllers/alchemy/admin/trash_controller.rb +18 -18
  69. data/app/controllers/alchemy/admin/users_controller.rb +69 -69
  70. data/app/controllers/alchemy/attachments_controller.rb +27 -27
  71. data/app/controllers/alchemy/base_controller.rb +159 -155
  72. data/app/controllers/alchemy/elements_controller.rb +16 -16
  73. data/app/controllers/alchemy/messages_controller.rb +59 -59
  74. data/app/controllers/alchemy/pages_controller.rb +194 -198
  75. data/app/controllers/alchemy/pictures_controller.rb +57 -57
  76. data/app/controllers/alchemy/user_sessions_controller.rb +70 -70
  77. data/app/helpers/alchemy/admin/attachments_helper.rb +7 -7
  78. data/app/helpers/alchemy/admin/base_helper.rb +425 -425
  79. data/app/helpers/alchemy/admin/contents_helper.rb +72 -72
  80. data/app/helpers/alchemy/admin/elements_helper.rb +108 -107
  81. data/app/helpers/alchemy/admin/essences_helper.rb +108 -108
  82. data/app/helpers/alchemy/admin/pages_helper.rb +42 -42
  83. data/app/helpers/alchemy/admin/pictures_helper.rb +26 -26
  84. data/app/helpers/alchemy/base_helper.rb +90 -90
  85. data/app/helpers/alchemy/elements_helper.rb +167 -168
  86. data/app/helpers/alchemy/essences_helper.rb +133 -133
  87. data/app/helpers/alchemy/pages_helper.rb +515 -526
  88. data/app/helpers/alchemy/pictures_helper.rb +19 -0
  89. data/app/mailers/alchemy/messages.rb +13 -13
  90. data/app/mailers/alchemy/notifications.rb +19 -19
  91. data/app/models/alchemy.rb +3 -3
  92. data/app/models/alchemy/attachment.rb +52 -78
  93. data/app/models/alchemy/cell.rb +48 -48
  94. data/app/models/alchemy/content.rb +196 -196
  95. data/app/models/alchemy/element.rb +500 -490
  96. data/app/models/alchemy/essence_audio.rb +7 -7
  97. data/app/models/alchemy/essence_date.rb +10 -10
  98. data/app/models/alchemy/essence_file.rb +7 -7
  99. data/app/models/alchemy/essence_flash.rb +6 -6
  100. data/app/models/alchemy/essence_html.rb +9 -9
  101. data/app/models/alchemy/essence_picture.rb +17 -17
  102. data/app/models/alchemy/essence_richtext.rb +53 -53
  103. data/app/models/alchemy/essence_text.rb +21 -21
  104. data/app/models/alchemy/essence_video.rb +7 -7
  105. data/app/models/alchemy/folded_page.rb +3 -3
  106. data/app/models/alchemy/language.rb +91 -91
  107. data/app/models/alchemy/language/code.rb +14 -14
  108. data/app/models/alchemy/message.rb +48 -45
  109. data/app/models/alchemy/page.rb +555 -558
  110. data/app/models/alchemy/picture.rb +100 -99
  111. data/app/models/alchemy/user.rb +76 -74
  112. data/app/models/alchemy/user_session.rb +8 -8
  113. data/app/sweepers/alchemy/content_sweeper.rb +15 -15
  114. data/app/sweepers/alchemy/pages_sweeper.rb +50 -50
  115. data/app/sweepers/alchemy/pictures_sweeper.rb +14 -14
  116. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +23 -23
  117. data/app/views/alchemy/admin/attachments/_attachment.html.erb +56 -56
  118. data/app/views/alchemy/admin/attachments/_file_to_assign.html.erb +15 -15
  119. data/app/views/alchemy/admin/attachments/_files_list.html.erb +16 -16
  120. data/app/views/alchemy/admin/attachments/create.js.erb +2 -2
  121. data/app/views/alchemy/admin/attachments/destroy.js.erb +3 -3
  122. data/app/views/alchemy/admin/attachments/edit.html.erb +10 -10
  123. data/app/views/alchemy/admin/attachments/index.html.erb +14 -14
  124. data/app/views/alchemy/admin/attachments/new.html.erb +9 -9
  125. data/app/views/alchemy/admin/clipboard/index.html.erb +21 -21
  126. data/app/views/alchemy/admin/clipboard/insert.js.erb +5 -5
  127. data/app/views/alchemy/admin/contents/_missing.html.erb +1 -1
  128. data/app/views/alchemy/admin/contents/create.js.erb +33 -33
  129. data/app/views/alchemy/admin/contents/destroy.js.erb +5 -5
  130. data/app/views/alchemy/admin/contents/new.html.erb +13 -13
  131. data/app/views/alchemy/admin/contents/order.js.erb +2 -2
  132. data/app/views/alchemy/admin/dashboard/index.html.erb +96 -92
  133. data/app/views/alchemy/admin/elements/_add_content.html.erb +12 -12
  134. data/app/views/alchemy/admin/elements/_element.html.erb +3 -3
  135. data/app/views/alchemy/admin/elements/_new_element_form.html.erb +28 -28
  136. data/app/views/alchemy/admin/elements/_picture_editor.html.erb +21 -21
  137. data/app/views/alchemy/admin/elements/create.js.erb +32 -32
  138. data/app/views/alchemy/admin/elements/index.html.erb +2 -2
  139. data/app/views/alchemy/admin/elements/new.html.erb +31 -31
  140. data/app/views/alchemy/admin/elements/order.js.erb +3 -3
  141. data/app/views/alchemy/admin/elements/trash.js.erb +13 -13
  142. data/app/views/alchemy/admin/elements/update.js.erb +6 -6
  143. data/app/views/alchemy/admin/essence_files/assign.js.erb +6 -6
  144. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +32 -32
  145. data/app/views/alchemy/admin/essence_pictures/destroy.js.erb +1 -1
  146. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +1 -1
  147. data/app/views/alchemy/admin/essence_pictures/update.js.erb +11 -11
  148. data/app/views/alchemy/admin/languages/_form.html.erb +51 -45
  149. data/app/views/alchemy/admin/languages/_language.html.erb +45 -45
  150. data/app/views/alchemy/admin/languages/_table.html.erb +25 -25
  151. data/app/views/alchemy/admin/layoutpages/index.html.erb +35 -35
  152. data/app/views/alchemy/admin/pages/_create_language_form.html.erb +42 -42
  153. data/app/views/alchemy/admin/pages/_external_link.html.erb +1 -1
  154. data/app/views/alchemy/admin/pages/_new_page_form.html.erb +27 -27
  155. data/app/views/alchemy/admin/pages/_page.html.erb +112 -112
  156. data/app/views/alchemy/admin/pages/_sitemap.html.erb +1 -1
  157. data/app/views/alchemy/admin/pages/configure.html.erb +71 -69
  158. data/app/views/alchemy/admin/pages/configure_external.html.erb +38 -38
  159. data/app/views/alchemy/admin/pages/destroy.js.erb +10 -10
  160. data/app/views/alchemy/admin/pages/edit.html.erb +165 -165
  161. data/app/views/alchemy/admin/pages/fold.js.erb +2 -2
  162. data/app/views/alchemy/admin/pages/index.html.erb +66 -66
  163. data/app/views/alchemy/admin/pages/locked.html.erb +1 -1
  164. data/app/views/alchemy/admin/pages/new.html.erb +40 -40
  165. data/app/views/alchemy/admin/pages/sort.js.erb +4 -4
  166. data/app/views/alchemy/admin/pages/unlock.js.erb +6 -6
  167. data/app/views/alchemy/admin/pages/update.js.erb +19 -19
  168. data/app/views/alchemy/admin/partials/_flash.html.erb +2 -2
  169. data/app/views/alchemy/admin/partials/_flash_notices.html.erb +1 -1
  170. data/app/views/alchemy/admin/partials/_flash_upload.html.erb +38 -0
  171. data/app/views/alchemy/admin/partials/_language_tree_select.html.erb +15 -15
  172. data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +8 -8
  173. data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +35 -35
  174. data/app/views/alchemy/admin/partials/_search_form.html.erb +14 -14
  175. data/app/views/alchemy/admin/partials/_sub_navigation_tab.html.erb +6 -6
  176. data/app/views/alchemy/admin/partials/_upload_form.html.erb +56 -118
  177. data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +11 -11
  178. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +71 -71
  179. data/app/views/alchemy/admin/pictures/_picture.html.erb +32 -32
  180. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +26 -26
  181. data/app/views/alchemy/admin/pictures/_pictures_list.html.erb +6 -6
  182. data/app/views/alchemy/admin/pictures/create.js.erb +7 -7
  183. data/app/views/alchemy/admin/pictures/index.html.erb +67 -67
  184. data/app/views/alchemy/admin/pictures/show_in_window.html.erb +5 -4
  185. data/app/views/alchemy/admin/resources/_form.html.erb +25 -19
  186. data/app/views/alchemy/admin/resources/_resource.html.erb +37 -36
  187. data/app/views/alchemy/admin/resources/_table.html.erb +17 -17
  188. data/app/views/alchemy/admin/resources/destroy.js.erb +1 -1
  189. data/app/views/alchemy/admin/resources/index.html.erb +14 -14
  190. data/app/views/alchemy/admin/trash/index.html.erb +20 -20
  191. data/app/views/alchemy/admin/users/_table.html.erb +52 -52
  192. data/app/views/alchemy/admin/users/_user.html.erb +35 -36
  193. data/app/views/alchemy/admin/users/index.html.erb +26 -27
  194. data/app/views/alchemy/base/error_notice.html.erb +2 -2
  195. data/app/views/alchemy/base/update.js.erb +1 -1
  196. data/app/views/alchemy/elements/_contactform_view.html.erb +76 -76
  197. data/app/views/alchemy/elements/_download_view.html.erb +1 -1
  198. data/app/views/alchemy/elements/_editor_not_found.html.erb +3 -3
  199. data/app/views/alchemy/elements/_searchresult_view.html.erb +2 -2
  200. data/app/views/alchemy/elements/_sitemap_editor.html.erb +1 -1
  201. data/app/views/alchemy/essences/_essence_audio_view.html.erb +13 -13
  202. data/app/views/alchemy/essences/_essence_date_editor.html.erb +10 -10
  203. data/app/views/alchemy/essences/_essence_file_editor.html.erb +62 -62
  204. data/app/views/alchemy/essences/_essence_file_view.html.erb +8 -8
  205. data/app/views/alchemy/essences/_essence_flash_view.html.erb +19 -19
  206. data/app/views/alchemy/essences/_essence_html_editor.html.erb +6 -6
  207. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +73 -73
  208. data/app/views/alchemy/essences/_essence_picture_view.html.erb +34 -34
  209. data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +7 -7
  210. data/app/views/alchemy/essences/_essence_text_editor.html.erb +8 -8
  211. data/app/views/alchemy/navigation/_image_link.html.erb +12 -12
  212. data/app/views/alchemy/navigation/_link.html.erb +13 -13
  213. data/app/views/alchemy/navigation/_renderer.html.erb +17 -17
  214. data/app/views/alchemy/page_layouts/_layout_footer.html.erb +1 -1
  215. data/app/views/alchemy/page_layouts/_layout_header.html.erb +1 -1
  216. data/app/views/alchemy/pages/show.rss.builder +14 -14
  217. data/app/views/alchemy/search/_result.html.erb +7 -7
  218. data/app/views/alchemy/user_sessions/leave.html.erb +9 -9
  219. data/app/views/alchemy/user_sessions/login.html.erb +39 -39
  220. data/app/views/alchemy/user_sessions/logout.html.erb +1 -1
  221. data/app/views/layouts/alchemy/admin.html.erb +81 -81
  222. data/app/views/layouts/alchemy/login.html.erb +36 -36
  223. data/app/views/layouts/alchemy/pages.html.erb +48 -27
  224. data/bin/alchemy +136 -134
  225. data/config/alchemy/config.yml +13 -9
  226. data/config/locales/alchemy.de.yml +24 -30
  227. data/config/locales/alchemy.en.yml +11 -28
  228. data/config/routes.rb +146 -146
  229. data/db/migrate/20100607193638_create_essence_pictures.rb +3 -3
  230. data/db/migrate/20101109150312_alter_pages_visible_column_default.rb +1 -1
  231. data/db/migrate/20101109151812_create_languages.rb +3 -3
  232. data/db/migrate/20110115123343_remove_css_class_default_from_essence_pictures.rb +3 -3
  233. data/db/migrate/20110224105120_change_pages_visible_default.rb +3 -3
  234. data/db/migrate/20110228182659_remove_default_page_layout_from_pages.rb +2 -2
  235. data/db/migrate/20110414163140_remove_display_name_from_elements.rb +3 -3
  236. data/db/migrate/20110511100516_rename_essence_texts_title_to_link_title.rb +2 -2
  237. data/db/migrate/20110529130500_add_cell_id_to_elements.rb +3 -3
  238. data/db/migrate/20110530102804_change_pages_page_layout_column.rb +3 -3
  239. data/db/migrate/20110711142057_change_open_link_in_new_window_to_link_target.rb +1 -1
  240. data/db/migrate/20111116125112_namespace_alchemy_models.rb +21 -21
  241. data/lib/alchemy/auth_engine.rb +5 -5
  242. data/lib/alchemy/capistrano.rb +64 -64
  243. data/lib/alchemy/config.rb +47 -44
  244. data/lib/alchemy/engine.rb +41 -41
  245. data/lib/alchemy/essence.rb +50 -51
  246. data/lib/alchemy/i18n.rb +48 -48
  247. data/lib/alchemy/modules.rb +30 -30
  248. data/lib/alchemy/mount_point.rb +6 -6
  249. data/lib/alchemy/page_layout.rb +94 -93
  250. data/lib/alchemy/resource.rb +82 -0
  251. data/lib/alchemy/resources_helper.rb +56 -0
  252. data/lib/alchemy/scoped_pagination_url_helper.rb +8 -8
  253. data/lib/alchemy/seeder.rb +88 -88
  254. data/lib/alchemy/tinymce.rb +49 -49
  255. data/lib/alchemy/upgrader.rb +103 -103
  256. data/lib/alchemy/version.rb +1 -1
  257. data/lib/alchemy_cms.rb +26 -27
  258. data/lib/extensions/action_view.rb +1 -1
  259. data/lib/extensions/array.rb +3 -3
  260. data/lib/extensions/hash.rb +3 -3
  261. data/lib/middleware/flash_session_cookie.rb +1 -1
  262. data/lib/rails/generators/alchemy/deploy_script/deploy_script_generator.rb +24 -24
  263. data/lib/rails/generators/alchemy/elements/elements_generator.rb +7 -7
  264. data/lib/rails/generators/alchemy/elements/templates/view.html.erb +17 -17
  265. data/lib/rails/generators/alchemy/page_layouts/page_layouts_generator.rb +6 -6
  266. data/lib/rails/generators/alchemy/plugin/templates/authorization_rules.rb +8 -8
  267. data/lib/rails/generators/alchemy/scaffold/files/pages.html.erb +7 -7
  268. data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +36 -36
  269. data/lib/rails/templates/alchemy.rb +1 -1
  270. data/lib/tasks/ferret.rake +2 -2
  271. data/lib/tasks/fleximage.rake +32 -32
  272. data/lib/tasks/install.rake +12 -12
  273. data/lib/tasks/upgrade.rake +4 -4
  274. data/spec/controllers/admin/clipboard_controller_spec.rb +43 -43
  275. data/spec/controllers/admin/contents_controller_spec.rb +22 -22
  276. data/spec/controllers/admin/elements_controller_spec.rb +13 -13
  277. data/spec/controllers/admin/languages_controller_spec.rb +31 -0
  278. data/spec/controllers/admin/pages_controller_spec.rb +10 -41
  279. data/spec/controllers/admin/resources_controller_spec.rb +19 -0
  280. data/spec/controllers/admin/trash_controller_spec.rb +11 -11
  281. data/spec/controllers/base_controller_spec.rb +46 -46
  282. data/spec/controllers/pages_controller_spec.rb +102 -92
  283. data/spec/dummy/app/controllers/admin/events_controller.rb +3 -0
  284. data/spec/dummy/app/controllers/errors_controller.rb +5 -0
  285. data/spec/dummy/app/models/event.rb +3 -0
  286. data/spec/dummy/config.ru +1 -1
  287. data/spec/dummy/config/application.rb +3 -0
  288. data/spec/dummy/config/authorization_rules.rb +7 -0
  289. data/spec/dummy/config/environments/development.rb +8 -1
  290. data/spec/dummy/config/environments/production.rb +1 -1
  291. data/spec/dummy/config/environments/test.rb +5 -2
  292. data/spec/dummy/config/routes.rb +9 -1
  293. data/spec/dummy/db/schema.rb +47 -35
  294. data/spec/dummy/public/404.html +19 -7
  295. data/spec/dummy/public/404.html.bak +26 -0
  296. data/spec/dummy/public/422.html +19 -7
  297. data/spec/dummy/public/500.html +19 -7
  298. data/spec/dummy/script/rails +2 -2
  299. data/spec/factories.rb +76 -76
  300. data/spec/helpers/admin/base_helper_spec.rb +21 -21
  301. data/spec/helpers/admin/contents_helper_spec.rb +14 -14
  302. data/spec/helpers/admin/elements_helper_spec.rb +40 -40
  303. data/spec/helpers/admin/essences_helper_spec.rb +7 -7
  304. data/spec/helpers/elements_helper_spec.rb +154 -154
  305. data/spec/helpers/essences_helper_spec.rb +10 -10
  306. data/spec/helpers/pages_helper_spec.rb +369 -372
  307. data/spec/helpers/pictures_helper_spec.rb +14 -0
  308. data/spec/helpers/url_helpers_spec.rb +29 -34
  309. data/spec/integration/admin/pages_controller_spec.rb +50 -50
  310. data/spec/integration/admin/resources_integration_spec.rb +100 -0
  311. data/spec/integration/navigation_spec.rb +1 -1
  312. data/spec/integration/pages_controller_spec.rb +205 -207
  313. data/spec/integration/security_spec.rb +47 -47
  314. data/spec/javascripts/alchemy/link_overlay_spec.js.coffee +42 -0
  315. data/spec/javascripts/alchemy_integration_spec.coffee +12 -0
  316. data/spec/javascripts/fixtures/select.html +3 -0
  317. data/spec/javascripts/helpers/.gitkeep +0 -0
  318. data/spec/javascripts/helpers/jasmine-jquery-1.3.1.js +289 -0
  319. data/spec/javascripts/helpers/mock-ajax.js +207 -0
  320. data/spec/javascripts/helpers/test_responses/test_responses.js +1 -0
  321. data/spec/javascripts/spec.css +3 -0
  322. data/spec/javascripts/spec.js +2 -0
  323. data/spec/libraries/resource_spec.rb +122 -0
  324. data/spec/libraries/resources_helper_spec.rb +105 -0
  325. data/spec/models/content_spec.rb +67 -67
  326. data/spec/models/element_spec.rb +133 -133
  327. data/spec/models/essence_picture_spec.rb +5 -5
  328. data/spec/models/essence_richtext_spec.rb +4 -4
  329. data/spec/models/language_spec.rb +89 -89
  330. data/spec/models/page_spec.rb +436 -506
  331. data/spec/models/picture_spec.rb +34 -34
  332. data/spec/models/user_spec.rb +2 -2
  333. data/spec/page_layout_spec.rb +24 -20
  334. data/spec/routing_spec.rb +253 -253
  335. data/spec/spec_helper.rb +51 -50
  336. data/spec/support/alchemy/controller_hacks.rb +25 -25
  337. data/spec/support/alchemy/specs_helpers.rb +25 -25
  338. data/spec/support/integration_spec_helper.rb +24 -0
  339. data/vendor/assets/javascripts/jquery_plugins/jquery.html5uploader.js +271 -0
  340. data/vendor/assets/javascripts/jquery_plugins/jquery.in-place-edit.js +86 -85
  341. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.nestedSortable.js +380 -377
  342. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.tabspaging.js +285 -279
  343. data/vendor/assets/javascripts/swfupload/SWFObject License.txt +3 -3
  344. data/vendor/assets/javascripts/swfupload/swfupload.cookies.js +47 -47
  345. data/vendor/assets/javascripts/swfupload/swfupload.js +612 -612
  346. data/vendor/assets/javascripts/swfupload/swfupload.queue.js +93 -93
  347. data/vendor/assets/javascripts/swfupload/swfupload.speed.js +337 -337
  348. data/vendor/assets/javascripts/swfupload/swfupload.swfobject.js +706 -102
  349. data/vendor/assets/javascripts/tiny_mce/license.txt +6 -6
  350. data/vendor/assets/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +97 -97
  351. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/template.htm +386 -376
  352. data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pastetext.js +30 -30
  353. data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pasteword.js +45 -45
  354. data/vendor/assets/javascripts/tiny_mce/plugins/paste/pastetext.htm +20 -17
  355. data/vendor/assets/javascripts/tiny_mce/plugins/paste/pasteword.htm +12 -12
  356. data/vendor/assets/javascripts/tiny_mce/plugins/table/cell.htm +183 -173
  357. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/cell.css +4 -4
  358. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/row.css +7 -7
  359. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/table.css +3 -3
  360. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/cell.js +282 -280
  361. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/merge_cells.js +15 -15
  362. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/row.js +204 -204
  363. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/table.js +435 -435
  364. data/vendor/assets/javascripts/tiny_mce/plugins/table/merge_cells.htm +24 -22
  365. data/vendor/assets/javascripts/tiny_mce/plugins/table/row.htm +144 -136
  366. data/vendor/assets/javascripts/tiny_mce/plugins/table/table.htm +184 -168
  367. data/vendor/assets/javascripts/tiny_mce/themes/advanced/about.htm +62 -46
  368. data/vendor/assets/javascripts/tiny_mce/themes/advanced/anchor.htm +17 -16
  369. data/vendor/assets/javascripts/tiny_mce/themes/advanced/charmap.htm +56 -47
  370. data/vendor/assets/javascripts/tiny_mce/themes/advanced/color_picker.htm +67 -54
  371. data/vendor/assets/javascripts/tiny_mce/themes/advanced/editor_template.js +852 -1
  372. data/vendor/assets/javascripts/tiny_mce/themes/advanced/image.htm +79 -69
  373. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/about.js +48 -48
  374. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/anchor.js +28 -28
  375. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/charmap.js +317 -317
  376. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/color_picker.js +248 -246
  377. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/image.js +246 -246
  378. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/link.js +146 -146
  379. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/source_editor.js +31 -31
  380. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/de.js +1 -1
  381. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/de_dlg.js +1 -1
  382. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/en.js +1 -1
  383. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +1 -1
  384. data/vendor/assets/javascripts/tiny_mce/themes/advanced/link.htm +53 -46
  385. data/vendor/assets/javascripts/tiny_mce/themes/advanced/shortcuts.htm +57 -45
  386. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/content.css +182 -47
  387. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +399 -92
  388. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +891 -187
  389. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/content.css +102 -24
  390. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +377 -78
  391. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css +452 -77
  392. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +167 -45
  393. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +399 -92
  394. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +890 -190
  395. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +33 -7
  396. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +15 -4
  397. data/vendor/assets/javascripts/tiny_mce/themes/advanced/source_editor.htm +18 -15
  398. data/vendor/assets/javascripts/tiny_mce/utils/editable_selects.js +46 -46
  399. data/vendor/assets/javascripts/tiny_mce/utils/form_utils.js +124 -124
  400. data/vendor/assets/javascripts/tiny_mce/utils/mctabs.js +112 -112
  401. data/vendor/assets/javascripts/tiny_mce/utils/validate.js +213 -213
  402. metadata +102 -115
  403. data/app/assets/javascripts/alchemy/alchemy.link_overlay.js +0 -216
  404. data/lib/tasks/routes.rake +0 -29
  405. data/spec/integration/admin/resources_spec.rb +0 -19
@@ -1,121 +1,121 @@
1
1
  module Alchemy
2
- module Admin
3
- class PicturesController < Alchemy::Admin::BaseController
4
- protect_from_forgery :except => [:create]
2
+ module Admin
3
+ class PicturesController < Alchemy::Admin::BaseController
4
+ protect_from_forgery :except => [:create]
5
5
 
6
- cache_sweeper Alchemy::PicturesSweeper, :only => [:update, :destroy]
6
+ cache_sweeper Alchemy::PicturesSweeper, :only => [:update, :destroy]
7
7
 
8
- respond_to :html, :js
8
+ respond_to :html, :js
9
9
 
10
- def index
11
- @size = params[:size] || 'medium'
12
- @pictures = Picture.find_paginated(params, pictures_per_page_for_size(@size))
13
- if in_overlay?
14
- archive_overlay
15
- else
16
- # render index.html.erb
17
- end
18
- end
10
+ def index
11
+ @size = params[:size] || 'medium'
12
+ @pictures = Picture.find_paginated(params, pictures_per_page_for_size(@size))
13
+ if in_overlay?
14
+ archive_overlay
15
+ else
16
+ # render index.html.erb
17
+ end
18
+ end
19
19
 
20
- def new
21
- @picture = Picture.new
22
- @while_assigning = params[:while_assigning] == 'true'
23
- @size = params[:size] || 'medium'
24
- if in_overlay?
25
- @while_assigning = true
26
- @content = Content.find(params[:content_id], :select => 'id') if !params[:content_id].blank?
27
- @element = Element.find(params[:element_id], :select => 'id')
28
- @options = hashified_options
29
- @page = params[:page]
30
- @per_page = params[:per_page]
31
- end
32
- render :layout => false
33
- end
20
+ def new
21
+ @picture = Picture.new
22
+ @while_assigning = params[:while_assigning] == 'true'
23
+ @size = params[:size] || 'medium'
24
+ if in_overlay?
25
+ @while_assigning = true
26
+ @content = Content.find(params[:content_id], :select => 'id') if !params[:content_id].blank?
27
+ @element = Element.find(params[:element_id], :select => 'id')
28
+ @options = hashified_options
29
+ @page = params[:page]
30
+ @per_page = params[:per_page]
31
+ end
32
+ render :layout => false
33
+ end
34
34
 
35
- def create
36
- @picture = Picture.new(:image_file => params[:Filedata])
37
- @picture.name = @picture.humanized_name
38
- @picture.save
39
- @size = params[:size] || 'medium'
40
- if in_overlay?
41
- @while_assigning = true
42
- @content = Content.find(params[:content_id], :select => 'id') if !params[:content_id].blank?
43
- @element = Element.find(params[:element_id], :select => 'id')
44
- @options = hashified_options
45
- @page = params[:page] || 1
46
- @per_page = pictures_per_page_for_size(@size)
47
- end
48
- @pictures = Picture.find_paginated(params, pictures_per_page_for_size(@size))
49
- @message = t('Picture uploaded succesfully', :name => @picture.name)
50
- # Are we using the Flash uploader? Or the plain html file uploader?
51
- if params[Rails.application.config.session_options[:key]].blank?
52
- flash[:notice] = @message
53
- #redirect_to :back
54
- #TODO temporary workaround; has to be fixed.
55
- redirect_to admin_pictures_path
56
- end
57
- end
35
+ def create
36
+ @picture = Picture.new(:image_file => params[:Filedata])
37
+ @picture.name = @picture.humanized_name
38
+ @picture.save
39
+ @size = params[:size] || 'medium'
40
+ if in_overlay?
41
+ @while_assigning = true
42
+ @content = Content.find(params[:content_id], :select => 'id') if !params[:content_id].blank?
43
+ @element = Element.find(params[:element_id], :select => 'id')
44
+ @options = hashified_options
45
+ @page = params[:page] || 1
46
+ @per_page = pictures_per_page_for_size(@size)
47
+ end
48
+ @pictures = Picture.find_paginated(params, pictures_per_page_for_size(@size))
49
+ @message = t('Picture uploaded succesfully', :name => @picture.name)
50
+ # Are we using the Flash uploader? Or the plain html file uploader?
51
+ if params[Rails.application.config.session_options[:key]].blank?
52
+ flash[:notice] = @message
53
+ #redirect_to :back
54
+ #TODO temporary workaround; has to be fixed.
55
+ redirect_to admin_pictures_path
56
+ end
57
+ end
58
58
 
59
- def update
60
- @size = params[:size] || 'medium'
61
- @picture = Picture.find(params[:id])
62
- oldname = @picture.name
63
- @picture.name = params[:name]
64
- @picture.save
65
- @message = t("Picture renamed successfully", :from => oldname, :to => @picture.name)
66
- end
59
+ def update
60
+ @size = params[:size] || 'medium'
61
+ @picture = Picture.find(params[:id])
62
+ oldname = @picture.name
63
+ @picture.name = params[:name]
64
+ @picture.save
65
+ @message = t("Picture renamed successfully", :from => oldname, :to => @picture.name)
66
+ end
67
67
 
68
- def destroy
69
- @picture = Picture.find(params[:id])
70
- name = @picture.name
71
- @picture.destroy
72
- flash[:notice] = t("Picture deleted successfully", :name => name)
73
- @redirect_url = admin_pictures_path(:per_page => params[:per_page], :page => params[:page], :query => params[:query])
74
- render :action => :redirect
75
- end
68
+ def destroy
69
+ @picture = Picture.find(params[:id])
70
+ name = @picture.name
71
+ @picture.destroy
72
+ flash[:notice] = t("Picture deleted successfully", :name => name)
73
+ @redirect_url = admin_pictures_path(:per_page => params[:per_page], :page => params[:page], :query => params[:query])
74
+ render :action => :redirect
75
+ end
76
76
 
77
- def flush
78
- FileUtils.rm_rf Rails.root.join('public', Alchemy.mount_point, 'pictures')
79
- @notice = t('Picture cache flushed')
80
- end
77
+ def flush
78
+ FileUtils.rm_rf Rails.root.join('public', Alchemy.mount_point, 'pictures')
79
+ @notice = t('Picture cache flushed')
80
+ end
81
81
 
82
- def show_in_window
83
- @picture = Picture.find(params[:id])
84
- render :layout => false
85
- end
82
+ def show_in_window
83
+ @picture = Picture.find(params[:id])
84
+ render :layout => false
85
+ end
86
86
 
87
- private
87
+ private
88
88
 
89
- def pictures_per_page_for_size(size)
90
- case size
91
- when 'small'
92
- per_page = in_overlay? ? 35 : (per_page_value_for_screen_size * 2.9).floor # 50
93
- when 'large'
94
- per_page = in_overlay? ? 4 : (per_page_value_for_screen_size / 1.7).floor # 8
95
- else
96
- per_page = in_overlay? ? 12 : (per_page_value_for_screen_size / 0.8).ceil # 18
97
- end
98
- return per_page
99
- end
89
+ def pictures_per_page_for_size(size)
90
+ case size
91
+ when 'small'
92
+ per_page = in_overlay? ? 35 : (per_page_value_for_screen_size * 2.9).floor # 50
93
+ when 'large'
94
+ per_page = in_overlay? ? 4 : (per_page_value_for_screen_size / 1.7).floor # 8
95
+ else
96
+ per_page = in_overlay? ? 12 : (per_page_value_for_screen_size / 0.8).ceil # 18
97
+ end
98
+ return per_page
99
+ end
100
100
 
101
- def in_overlay?
102
- !params[:element_id].blank?
103
- end
101
+ def in_overlay?
102
+ !params[:element_id].blank?
103
+ end
104
104
 
105
- def archive_overlay
106
- @content = Content.find_by_id(params[:content_id], :select => 'id')
107
- @element = Element.find_by_id(params[:element_id], :select => 'id')
108
- @options = hashified_options
109
- respond_to do |format|
110
- format.html {
111
- render :partial => 'archive_overlay'
112
- }
113
- format.js {
114
- render :action => :archive_overlay
115
- }
116
- end
117
- end
105
+ def archive_overlay
106
+ @content = Content.find_by_id(params[:content_id], :select => 'id')
107
+ @element = Element.find_by_id(params[:element_id], :select => 'id')
108
+ @options = hashified_options
109
+ respond_to do |format|
110
+ format.html {
111
+ render :partial => 'archive_overlay'
112
+ }
113
+ format.js {
114
+ render :action => :archive_overlay
115
+ }
116
+ end
117
+ end
118
118
 
119
- end
120
- end
119
+ end
120
+ end
121
121
  end
@@ -1,168 +1,113 @@
1
1
  module Alchemy
2
- module Admin
3
- class ResourcesController < Alchemy::Admin::BaseController
4
-
5
- rescue_from Exception, :with => :exception_handler
6
-
7
- before_filter :load_resource, :only => [:show, :edit, :update, :destroy]
8
-
9
- helper_method(
10
- :resource_attributes,
11
- :resource_window_size,
12
- :resources_name,
13
- :resource_model,
14
- :resource_model_name,
15
- :resource_instance_variable,
16
- :resources_instance_variable,
17
- :namespaced_resources_name,
18
- :resource_namespaced?,
19
- :resources_permission,
20
- :resource_url_scope,
21
- :is_alchemy_module?
22
- )
23
-
24
- def index
25
- if !params[:query].blank?
26
- search_terms = ActiveRecord::Base.sanitize("%#{params[:query]}%")
27
- items = resource_model.where(searchable_resource_attributes.map { |attribute|
28
- "`#{namespaced_resources_name}`.`#{attribute[:name]}` LIKE #{search_terms}"
29
- }.join(" OR "))
30
- else
31
- items = resource_model
32
- end
33
- instance_variable_set("@#{resources_name}", items.page(params[:page] || 1).per(per_page_value_for_screen_size))
34
- end
35
-
36
- def new
37
- instance_variable_set("@#{resource_model_name}", resource_model.new)
38
- render :layout => !request.xhr?
39
- end
40
-
41
- def show
42
- render :layout => !request.xhr?
43
- end
44
-
45
- def edit
46
- render :layout => !request.xhr?
47
- end
48
-
49
- def create
50
- instance_variable_set("@#{resource_model_name}", resource_model.new(params[resource_model_name.to_sym], :as => current_user.role.to_sym))
51
- resource_instance_variable.save
52
- render_errors_or_redirect(
53
- resource_instance_variable,
54
- resource_url_scope.url_for({:action => :index}),
55
- flash_notice_for_resource_action
56
- )
57
- end
58
-
59
- def update
60
- resource_instance_variable.update_attributes(params[resource_model_name.to_sym], :as => current_user.role.to_sym)
61
- render_errors_or_redirect(
62
- resource_instance_variable,
63
- resource_url_scope.url_for({:action => :index}),
64
- flash_notice_for_resource_action
65
- )
66
- end
67
-
68
- def destroy
69
- resource_instance_variable.destroy
70
- flash_notice_for_resource_action
71
- end
72
-
73
- protected
74
-
75
- # Returns a translated +flash[:notice]+.
76
- # The key should look like "Modelname successfully created|updated|destroyed."
77
- def flash_notice_for_resource_action(action = params[:action])
78
- case action.to_sym
79
- when :create
80
- verb = "created"
81
- when :update
82
- verb = "updated"
83
- when :destroy
84
- verb = "removed"
85
- end
86
- flash[:notice] = t("#{resource_model_name.classify} successfully #{verb}", :default => t("Succesfully #{verb}"))
87
- end
88
-
89
- def load_resource
90
- instance_variable_set("@#{resource_model_name}", resource_model.find(params[:id]))
91
- end
92
-
93
- def resources_name
94
- @resources_name ||= params[:controller].split('/').last
95
- end
96
-
97
- def namespaced_resources_name
98
- if resource_namespaced?
99
- @namespaced_resources_name ||= "#{resource_namespace}_#{resources_name}".underscore
100
- else
101
- @namespaced_resources_name ||= resources_name
102
- end
103
- end
104
-
105
- def resource_model_name
106
- @resource_model_name ||= resources_name.singularize
107
- end
108
-
109
- def resource_model
110
- @resource_model ||= (resource_namespace == "Admin" ? resource_model_name : "#{resource_namespace}/#{resource_model_name}").classify.constantize
111
- end
112
-
113
- def resource_attributes
114
- @resource_attributes ||= resource_model.columns.collect do |col|
115
- unless ["id", "updated_at", "created_at", "creator_id", "updater_id"].include?(col.name)
116
- {:name => col.name, :type => col.type}
117
- end
118
- end.compact
119
- end
120
-
121
- def searchable_resource_attributes
122
- resource_attributes.select{ |a| a[:type] == :string }
123
- end
124
-
125
- def resource_window_size
126
- @resource_window_size ||= "400x#{100 + resource_attributes.length * 35}"
127
- end
128
-
129
- def resource_instance_variable
130
- instance_variable_get("@#{resource_model_name}")
131
- end
132
-
133
- def resources_instance_variable
134
- instance_variable_get("@#{resources_name}")
135
- end
136
-
137
- def resource_namespaced?
138
- parts = params[:controller].split('/')
139
- parts.length > 1 && parts.first != 'admin'
140
- end
141
-
142
- def resource_namespace
143
- @resource_namespace ||= self.class.to_s.split("::").first
144
- end
145
-
146
- def resource_url_scope
147
- if is_alchemy_module?
148
- eval(alchemy_module['engine_name'])
149
- else
150
- main_app
151
- end
152
- end
153
-
154
- def is_alchemy_module?
155
- !alchemy_module.nil? && !alchemy_module['engine_name'].blank?
156
- end
157
-
158
- def alchemy_module
159
- @alchemy_module ||= module_definition_for(:controller => params[:controller], :action => 'index')
160
- end
161
-
162
- def resources_permission
163
- (resource_namespaced? ? "#{resource_namespace.underscore}_admin_#{resources_name}" : "admin_#{resources_name}").to_sym
164
- end
165
-
166
- end
167
- end
2
+ module Admin
3
+ class ResourcesController < Alchemy::Admin::BaseController
4
+
5
+ include Alchemy::ResourcesHelper
6
+ helper Alchemy::ResourcesHelper
7
+ helper_method :resource_handler
8
+
9
+ rescue_from Exception, :with => :exception_handler
10
+
11
+ before_filter :load_resource, :only => [:show, :edit, :update, :destroy]
12
+
13
+
14
+ def index
15
+ if params[:query].blank?
16
+ items = resource_handler.model
17
+ else
18
+ search_terms = ActiveRecord::Base.sanitize("%#{params[:query]}%")
19
+ items = resource_handler.model.where(resource_handler.searchable_attributes.map { |attribute|
20
+ "`#{resource_handler.namespaced_model_name.pluralize}`.`#{attribute[:name]}` LIKE #{search_terms}"
21
+ }.join(" OR "))
22
+ end
23
+ instance_variable_set("@#{resource_handler.resources_name}", items.page(params[:page] || 1).per(per_page_value_for_screen_size))
24
+ end
25
+
26
+ def new
27
+ instance_variable_set("@#{resource_handler.model_name}", resource_handler.model.new)
28
+ render :layout => !request.xhr?
29
+ end
30
+
31
+ def show
32
+ render :layout => !request.xhr?
33
+ end
34
+
35
+ def edit
36
+ render :layout => !request.xhr?
37
+ end
38
+
39
+ def create
40
+ instance_variable_set("@#{resource_handler.model_name}", resource_handler.model.new(params[resource_handler.namespaced_model_name.to_sym], :as => current_user.role.to_sym))
41
+ resource_instance_variable.save
42
+ render_errors_or_redirect(
43
+ resource_instance_variable,
44
+ resources_path,
45
+ flash_notice_for_resource_action
46
+ )
47
+ end
48
+
49
+ def update
50
+ resource_instance_variable.update_attributes(params[resource_handler.namespaced_model_name.to_sym], :as => current_user.role.to_sym)
51
+ render_errors_or_redirect(
52
+ resource_instance_variable,
53
+ resources_path,
54
+ flash_notice_for_resource_action
55
+ )
56
+ end
57
+
58
+ def destroy
59
+ resource_instance_variable.destroy
60
+ flash_notice_for_resource_action
61
+ end
62
+
63
+ def resource_handler
64
+ @_resource_handler ||= Alchemy::Resource.new(controller_path, alchemy_module)
65
+ end
66
+
67
+ protected
68
+
69
+
70
+ def render_errors_or_redirect(object, redirect_url, flash_notice, button = nil)
71
+ if object.errors.empty?
72
+ @redirect_url = redirect_url
73
+ flash[:notice] = t(flash_notice)
74
+ respond_to do |format|
75
+ format.js { render :action => :redirect }
76
+ format.html { redirect_to @redirect_url }
77
+ end
78
+ else
79
+ respond_to do |format|
80
+ format.js { render_remote_errors(object, button) }
81
+ format.html { render :action => :new }
82
+ end
83
+ end
84
+ end
85
+
86
+ # Returns a translated +flash[:notice]+.
87
+ # The key should look like "Modelname successfully created|updated|destroyed."
88
+ def flash_notice_for_resource_action(action = params[:action])
89
+ case action.to_sym
90
+ when :create
91
+ verb = "created"
92
+ when :update
93
+ verb = "updated"
94
+ when :destroy
95
+ verb = "removed"
96
+ end
97
+ flash[:notice] = t("#{resource_handler.model_name.classify} successfully #{verb}", :default => t("Succesfully #{verb}"))
98
+ end
99
+
100
+ def is_alchemy_module?
101
+ not alchemy_module.nil? and not alchemy_module['engine_name'].nil?
102
+ end
103
+
104
+ def alchemy_module
105
+ @alchemy_module ||= module_definition_for(:controller => params[:controller], :action => 'index')
106
+ end
107
+
108
+ def load_resource
109
+ instance_variable_set("@#{resource_handler.model_name}", resource_handler.model.find(params[:id]))
110
+ end
111
+ end
112
+ end
168
113
  end