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,114 +1,115 @@
1
1
  module Alchemy
2
- class Picture < ActiveRecord::Base
2
+ class Picture < ActiveRecord::Base
3
3
 
4
- acts_as_fleximage do
5
- image_directory 'uploads/pictures'
6
- image_storage_format Config.get(:image_store_format).to_sym
7
- require_image true
8
- missing_image_message I18n.t("missing_image")
9
- invalid_image_message I18n.t("not a valid image")
10
- output_image_jpg_quality Config.get(:output_image_jpg_quality) if Config.get(:image_output_format) == "jpg"
11
- unless Config.get(:preprocess_image_resize).blank?
12
- preprocess_image do |image|
13
- image.resize Config.get(:preprocess_image_resize)
14
- end
15
- end
16
- end
4
+ acts_as_fleximage do
5
+ image_directory 'uploads/pictures'
6
+ image_storage_format Config.get(:image_store_format).to_sym
7
+ require_image true
8
+ missing_image_message I18n.t("missing_image")
9
+ invalid_image_message I18n.t("not a valid image")
10
+ output_image_jpg_quality Config.get(:output_image_jpg_quality) if Config.get(:image_output_format) == "jpg"
11
+ unless Config.get(:preprocess_image_resize).blank?
12
+ preprocess_image do |image|
13
+ image.resize Config.get(:preprocess_image_resize)
14
+ end
15
+ end
16
+ end
17
17
 
18
- stampable
18
+ stampable
19
19
 
20
- def self.find_paginated(params, per_page)
21
- Picture.where("name LIKE '%#{params[:query]}%'").page(params[:page] || 1).per(per_page).order(:name)
22
- end
20
+ def self.find_paginated(params, per_page)
21
+ Picture.where("name LIKE '%#{params[:query]}%'").page(params[:page] || 1).per(per_page).order(:name)
22
+ end
23
23
 
24
- # Returning the filepath relative to Rails.root public folder.
25
- def public_file_path
26
- self.file_path.gsub("#{::Rails.root}/public", '')
27
- end
24
+ # Returning the filepath relative to Rails.root public folder.
25
+ def public_file_path
26
+ self.file_path.gsub("#{::Rails.root}/public", '')
27
+ end
28
28
 
29
- def urlname
30
- if self.name.blank?
31
- "image_#{self.id}"
32
- else
33
- ::CGI.escape(self.name.gsub(/\.(gif|png|jpe?g|tiff?)/i, '').gsub(/\./, ' '))
34
- end
35
- end
29
+ def urlname
30
+ if self.name.blank?
31
+ "image_#{self.id}"
32
+ else
33
+ ::CGI.escape(self.name.gsub(/\.(gif|png|jpe?g|tiff?)/i, '').gsub(/\./, ' '))
34
+ end
35
+ end
36
36
 
37
- def suffix
38
- if image_filename =~ /\./
39
- image_filename.split('.').last.downcase
40
- else
41
- ""
42
- end
43
- end
37
+ def suffix
38
+ if image_filename =~ /\./
39
+ image_filename.split('.').last.downcase
40
+ else
41
+ ""
42
+ end
43
+ end
44
44
 
45
- def humanized_name
46
- (image_filename.to_s.downcase.gsub(/\.#{::Regexp.quote(suffix)}$/, '')).humanize
47
- end
45
+ def humanized_name
46
+ return "" if image_filename.blank?
47
+ (image_filename.downcase.gsub(/\.#{::Regexp.quote(suffix)}$/, '')).humanize
48
+ end
48
49
 
49
- # Returning true if picture's width is greater than it's height
50
- def landscape_format?
51
- return (self.image_width > self.image_height) ? true : false
52
- end
50
+ # Returning true if picture's width is greater than it's height
51
+ def landscape_format?
52
+ return (self.image_width > self.image_height) ? true : false
53
+ end
53
54
 
54
- # Returning true if picture's width is smaller than it's height
55
- def portrait_format?
56
- return (self.image_width < self.image_height) ? true : false
57
- end
55
+ # Returning true if picture's width is smaller than it's height
56
+ def portrait_format?
57
+ return (self.image_width < self.image_height) ? true : false
58
+ end
58
59
 
59
- # Returning true if picture's width and height is equal
60
- def square_format?
61
- return (self.image_width == self.image_height) ? true : false
62
- end
60
+ # Returning true if picture's width and height is equal
61
+ def square_format?
62
+ return (self.image_width == self.image_height) ? true : false
63
+ end
63
64
 
64
- # Returns the default centered image mask for a given size
65
- def default_mask(size)
66
- raise "No size given" if size.blank?
67
- width = size.split('x')[0].to_i
68
- height = size.split('x')[1].to_i
69
- if (width > height)
70
- zoom_factor = image_width.to_f / width
71
- mask_height = (height * zoom_factor).round
72
- x1 = 0
73
- x2 = image_width
74
- y1 = (image_height - mask_height) / 2
75
- y2 = y1 + mask_height
76
- elsif (width == 0 && height == 0)
77
- x1 = 0
78
- x2 = image_width
79
- y1 = 0
80
- y2 = image_height
81
- else
82
- zoom_factor = image_height.to_f / height
83
- mask_width = (width * zoom_factor).round
84
- x1 = (image_width - mask_width) / 2
85
- x2 = x1 + mask_width
86
- y1 = 0
87
- y2 = image_height
88
- end
89
- {
90
- :x1 => x1,
91
- :y1 => y1,
92
- :x2 => x2,
93
- :y2 => y2
94
- }
95
- end
65
+ # Returns the default centered image mask for a given size
66
+ def default_mask(size)
67
+ raise "No size given" if size.blank?
68
+ width = size.split('x')[0].to_i
69
+ height = size.split('x')[1].to_i
70
+ if (width > height)
71
+ zoom_factor = image_width.to_f / width
72
+ mask_height = (height * zoom_factor).round
73
+ x1 = 0
74
+ x2 = image_width
75
+ y1 = (image_height - mask_height) / 2
76
+ y2 = y1 + mask_height
77
+ elsif (width == 0 && height == 0)
78
+ x1 = 0
79
+ x2 = image_width
80
+ y1 = 0
81
+ y2 = image_height
82
+ else
83
+ zoom_factor = image_height.to_f / height
84
+ mask_width = (width * zoom_factor).round
85
+ x1 = (image_width - mask_width) / 2
86
+ x2 = x1 + mask_width
87
+ y1 = 0
88
+ y2 = image_height
89
+ end
90
+ {
91
+ :x1 => x1,
92
+ :y1 => y1,
93
+ :x2 => x2,
94
+ :y2 => y2
95
+ }
96
+ end
96
97
 
97
- def cropped_thumbnail_size(size)
98
- return "111x93" if size == "111x93" || size.blank?
99
- x = size.split('x')[0].to_i
100
- y = size.split('x')[1].to_i
101
- if (x > y)
102
- zoom_factor = 111.0 / x
103
- new_x = 111
104
- new_y = y * zoom_factor
105
- else
106
- zoom_factor = 93.0 / y
107
- new_x = x * zoom_factor
108
- new_y = 93
109
- end
110
- "#{new_x.round}x#{new_y.round}"
111
- end
98
+ def cropped_thumbnail_size(size)
99
+ return "111x93" if size == "111x93" || size.blank?
100
+ x = size.split('x')[0].to_i
101
+ y = size.split('x')[1].to_i
102
+ if (x > y)
103
+ zoom_factor = 111.0 / x
104
+ new_x = 111
105
+ new_y = y * zoom_factor
106
+ else
107
+ zoom_factor = 93.0 / y
108
+ new_x = x * zoom_factor
109
+ new_y = 93
110
+ end
111
+ "#{new_x.round}x#{new_y.round}"
112
+ end
112
113
 
113
- end
114
+ end
114
115
  end
@@ -1,76 +1,78 @@
1
1
  module Alchemy
2
- class User < ActiveRecord::Base
3
-
4
- model_stamper
5
- stampable
6
- acts_as_authentic do |c|
7
- c.transition_from_restful_authentication = true
8
- c.logged_in_timeout = Config.get(:auto_logout_time).minutes
9
- end
10
-
11
- has_many :folded_pages
12
-
13
- before_destroy :unlock_pages
14
-
15
- scope :admins, where(:role => 'admin')
16
-
17
- ROLES = Config.get(:user_roles)
18
-
19
- def role_symbols
20
- [role.to_sym]
21
- end
22
-
23
- def is_admin?
24
- true if self.role == "admin"
25
- end
26
- alias :admin? :is_admin?
27
-
28
- def unlock_pages
29
- for page in pages_locked_by_me
30
- page.unlock
31
- end
32
- end
33
-
34
- def pages_locked_by_me
35
- Page.where(:locked => true).where(:locked_by => self.id).order(:updated_at)
36
- end
37
-
38
- # Returns the firstname and lastname as a string
39
- # If both are blank, returns the login
40
- # options
41
- # :flipped=false : returns "lastname, firstname"
42
- def fullname(options = {})
43
- unless(self.lastname.blank? && self.firstname.blank?)
44
- options = (default_options = { :flipped => false }.merge(options))
45
- options[:flipped] ? "#{self.lastname}, #{self.firstname}".squeeze(" ") : "#{self.firstname} #{self.lastname}".squeeze(" ")
46
- else
47
- self.login
48
- end
49
- end
50
- alias :name :fullname
51
-
52
- def human_role_name
53
- self.class.human_rolename(self.role)
54
- end
55
-
56
- def self.human_rolename(role)
57
- I18n.t("user_roles.#{role}")
58
- end
59
-
60
- def self.genders_for_select
61
- [
62
- [I18n.t('male'), 'male'],
63
- [I18n.t('female'), 'female']
64
- ]
65
- end
66
-
67
- def self.all_online
68
- User.logged_in
69
- end
70
-
71
- def self.all_others_online
72
- User.logged_in.to_a.delete(self)
73
- end
74
-
75
- end
2
+ class User < ActiveRecord::Base
3
+
4
+ model_stamper
5
+ stampable
6
+ acts_as_authentic do |c|
7
+ c.transition_from_restful_authentication = true
8
+ c.logged_in_timeout = Config.get(:auto_logout_time).minutes
9
+ end
10
+
11
+ has_many :folded_pages
12
+
13
+ before_destroy :unlock_pages
14
+
15
+ scope :admins, where(:role => 'admin')
16
+
17
+ ROLES = Config.get(:user_roles)
18
+
19
+ def role_symbols
20
+ [role.to_sym]
21
+ end
22
+
23
+ def is_admin?
24
+ true if self.role == "admin"
25
+ end
26
+
27
+ alias :admin? :is_admin?
28
+
29
+ def unlock_pages
30
+ for page in pages_locked_by_me
31
+ page.unlock
32
+ end
33
+ end
34
+
35
+ def pages_locked_by_me
36
+ Page.where(:locked => true).where(:locked_by => self.id).order(:updated_at)
37
+ end
38
+
39
+ # Returns the firstname and lastname as a string
40
+ # If both are blank, returns the login
41
+ # options
42
+ # :flipped=false : returns "lastname, firstname"
43
+ def fullname(options = {})
44
+ unless (self.lastname.blank? && self.firstname.blank?)
45
+ options = (default_options = {:flipped => false}.merge(options))
46
+ options[:flipped] ? "#{self.lastname}, #{self.firstname}".squeeze(" ") : "#{self.firstname} #{self.lastname}".squeeze(" ")
47
+ else
48
+ self.login
49
+ end
50
+ end
51
+
52
+ alias :name :fullname
53
+
54
+ def human_role_name
55
+ self.class.human_rolename(self.role)
56
+ end
57
+
58
+ def self.human_rolename(role)
59
+ I18n.t("user_roles.#{role}")
60
+ end
61
+
62
+ def self.genders_for_select
63
+ [
64
+ [I18n.t('male'), 'male'],
65
+ [I18n.t('female'), 'female']
66
+ ]
67
+ end
68
+
69
+ def self.all_online
70
+ User.logged_in
71
+ end
72
+
73
+ def self.all_others_online
74
+ User.logged_in.to_a.delete(self)
75
+ end
76
+
77
+ end
76
78
  end
@@ -1,14 +1,14 @@
1
1
  module Alchemy
2
- class UserSession < Authlogic::Session::Base
3
- logout_on_timeout(::Rails.env != 'development')
2
+ class UserSession < Authlogic::Session::Base
3
+ logout_on_timeout(::Rails.env != 'development')
4
4
 
5
- generalize_credentials_error_messages true
5
+ generalize_credentials_error_messages true
6
6
 
7
- before_destroy :unlock_pages
7
+ before_destroy :unlock_pages
8
8
 
9
- def unlock_pages
10
- self.user.unlock_pages if self.user
11
- end
9
+ def unlock_pages
10
+ self.user.unlock_pages if self.user
11
+ end
12
12
 
13
- end
13
+ end
14
14
  end
@@ -1,22 +1,22 @@
1
1
  module Alchemy
2
- class ContentSweeper < ActionController::Caching::Sweeper
3
- observe Element
2
+ class ContentSweeper < ActionController::Caching::Sweeper
3
+ observe Element
4
4
 
5
- def after_update(element)
6
- expire_cache_for(element.contents)
7
- end
5
+ def after_update(element)
6
+ expire_cache_for(element.contents)
7
+ end
8
8
 
9
- def after_destroy(element)
10
- expire_cache_for(element.contents)
11
- end
9
+ def after_destroy(element)
10
+ expire_cache_for(element.contents)
11
+ end
12
12
 
13
- private
13
+ private
14
14
 
15
- def expire_cache_for(contents)
16
- contents.each do |content|
17
- expire_fragment(content)
18
- end
19
- end
15
+ def expire_cache_for(contents)
16
+ contents.each do |content|
17
+ expire_fragment(content)
18
+ end
19
+ end
20
20
 
21
- end
21
+ end
22
22
  end
@@ -1,60 +1,60 @@
1
1
  module Alchemy
2
- class PagesSweeper < ActionController::Caching::Sweeper
2
+ class PagesSweeper < ActionController::Caching::Sweeper
3
3
 
4
- observe Page
4
+ observe Page
5
5
 
6
- def after_update(page)
7
- unless page.layoutpage?
8
- expire_page(page)
9
- check_multipage_elements(page)
10
- end
11
- end
6
+ def after_update(page)
7
+ unless page.layoutpage?
8
+ expire_page(page)
9
+ check_multipage_elements(page)
10
+ end
11
+ end
12
12
 
13
- def after_destroy(page)
14
- unless page.layoutpage?
15
- expire_page(page)
16
- check_multipage_elements(page)
17
- end
18
- end
13
+ def after_destroy(page)
14
+ unless page.layoutpage?
15
+ expire_page(page)
16
+ check_multipage_elements(page)
17
+ end
18
+ end
19
19
 
20
- private
20
+ private
21
21
 
22
- def check_multipage_elements(page)
23
- page.elements.each do |element|
24
- # are their pages beneath mine?
25
- if !element.to_be_sweeped_pages.detect{ |p| p != page }.nil?
26
- # yepp! there are more pages then mine
27
- pages = element.to_be_sweeped_pages.find_all_by_public_and_locked(true, false)
28
- if !pages.blank?
29
- # expire current page, even if it's locked
30
- pages.push(page).each do |page|
31
- expire_page(page)
32
- end
33
- end
34
- end
35
- end
36
- end
22
+ def check_multipage_elements(page)
23
+ page.elements.each do |element|
24
+ # are their pages beneath mine?
25
+ if !element.to_be_sweeped_pages.detect { |p| p != page }.nil?
26
+ # yepp! there are more pages then mine
27
+ pages = element.to_be_sweeped_pages.find_all_by_public_and_locked(true, false)
28
+ if !pages.blank?
29
+ # expire current page, even if it's locked
30
+ pages.push(page).each do |page|
31
+ expire_page(page)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
37
 
38
- def expire_page(page)
39
- return if page.do_not_sweep
40
- # TODO: We should change this back to expire_action after Rails 3.2 was released.
41
- # expire_action(
42
- # alchemy.show_page_url(
43
- # :urlname => page.urlname_was,
44
- # :lang => multi_language? ? page.language_code : nil
45
- # )
46
- # )
47
- # Temporarily fix for Rails 3 bug
38
+ def expire_page(page)
39
+ return if page.do_not_sweep
40
+ # TODO: We should change this back to expire_action after Rails 3.2 was released.
41
+ # expire_action(
42
+ # alchemy.show_page_url(
43
+ # :urlname => page.urlname_was,
44
+ # :lang => multi_language? ? page.language_code : nil
45
+ # )
46
+ # )
47
+ # Temporarily fix for Rails 3 bug
48
48
  return if alchemy.nil?
49
- expire_fragment(ActionController::Caching::Actions::ActionCachePath.new(
50
- self,
51
- alchemy.show_page_url(
52
- :urlname => page.urlname_was,
53
- :lang => multi_language? ? page.language_code : nil
54
- ),
55
- false
56
- ).path)
57
- end
49
+ expire_fragment(ActionController::Caching::Actions::ActionCachePath.new(
50
+ self,
51
+ alchemy.show_page_url(
52
+ :urlname => page.urlname_was,
53
+ :lang => multi_language? ? page.language_code : nil
54
+ ),
55
+ false
56
+ ).path)
57
+ end
58
58
 
59
- end
59
+ end
60
60
  end