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,91 +1,91 @@
1
1
  module Alchemy
2
- module Admin
3
- class EssencePicturesController < Alchemy::Admin::BaseController
2
+ module Admin
3
+ class EssencePicturesController < Alchemy::Admin::BaseController
4
4
 
5
- helper "alchemy/admin/contents"
5
+ helper "alchemy/admin/contents"
6
6
 
7
- def edit
8
- @essence_picture = EssencePicture.find(params[:id])
9
- @content = Content.find(params[:content_id])
10
- @options = params[:options] || {}
11
- render :layout => false
12
- end
7
+ def edit
8
+ @essence_picture = EssencePicture.find(params[:id])
9
+ @content = Content.find(params[:content_id])
10
+ @options = params[:options] || {}
11
+ render :layout => false
12
+ end
13
13
 
14
- def crop
15
- @essence_picture = EssencePicture.find(params[:id])
16
- if @essence_picture.picture
17
- @content = @essence_picture.content
18
- @options = params[:options] || {}
19
- @options[:format] ||= (configuration(:image_store_format) or 'png')
20
- if @essence_picture.render_size.blank?
21
- if @options[:image_size].blank?
22
- @size_x, @size_y = 0, 0
23
- else
24
- @size_x, @size_y = @options[:image_size].split('x')[0], @options[:image_size].split('x')[1]
25
- end
26
- else
27
- @size_x, @size_y = @essence_picture.render_size.split('x')[0], @essence_picture.render_size.split('x')[1]
28
- end
29
- if @essence_picture.crop_from.blank? && @essence_picture.crop_size.blank?
30
- @initial_box = @essence_picture.picture.default_mask("#{@size_x}x#{@size_y}")
31
- @default_box = @initial_box
32
- else
33
- @initial_box = {
34
- :x1 => @essence_picture.crop_from.split('x')[0].to_i,
35
- :y1 => @essence_picture.crop_from.split('x')[1].to_i,
36
- :x2 => @essence_picture.crop_from.split('x')[0].to_i + @essence_picture.crop_size.split('x')[0].to_i,
37
- :y2 => @essence_picture.crop_from.split('x')[1].to_i + @essence_picture.crop_size.split('x')[1].to_i
38
- }
39
- @default_box = @essence_picture.picture.default_mask("#{@size_x}x#{@size_y}")
40
- end
41
- @ratio = @options[:fixed_ratio] == 'false' ? false : (@size_x.to_f / @size_y.to_f)
42
- else
43
- @no_image_notice = t('No image found. Did you saved the element?')
44
- end
45
- render :layout => false
46
- end
14
+ def crop
15
+ @essence_picture = EssencePicture.find(params[:id])
16
+ if @essence_picture.picture
17
+ @content = @essence_picture.content
18
+ @options = params[:options] || {}
19
+ @options[:format] ||= (configuration(:image_store_format) or 'png')
20
+ if @essence_picture.render_size.blank?
21
+ if @options[:image_size].blank?
22
+ @size_x, @size_y = 0, 0
23
+ else
24
+ @size_x, @size_y = @options[:image_size].split('x')[0], @options[:image_size].split('x')[1]
25
+ end
26
+ else
27
+ @size_x, @size_y = @essence_picture.render_size.split('x')[0], @essence_picture.render_size.split('x')[1]
28
+ end
29
+ if @essence_picture.crop_from.blank? && @essence_picture.crop_size.blank?
30
+ @initial_box = @essence_picture.picture.default_mask("#{@size_x}x#{@size_y}")
31
+ @default_box = @initial_box
32
+ else
33
+ @initial_box = {
34
+ :x1 => @essence_picture.crop_from.split('x')[0].to_i,
35
+ :y1 => @essence_picture.crop_from.split('x')[1].to_i,
36
+ :x2 => @essence_picture.crop_from.split('x')[0].to_i + @essence_picture.crop_size.split('x')[0].to_i,
37
+ :y2 => @essence_picture.crop_from.split('x')[1].to_i + @essence_picture.crop_size.split('x')[1].to_i
38
+ }
39
+ @default_box = @essence_picture.picture.default_mask("#{@size_x}x#{@size_y}")
40
+ end
41
+ @ratio = @options[:fixed_ratio] == 'false' ? false : (@size_x.to_f / @size_y.to_f)
42
+ else
43
+ @no_image_notice = t('No image found. Did you saved the element?')
44
+ end
45
+ render :layout => false
46
+ end
47
47
 
48
- def update
49
- @essence_picture = EssencePicture.find(params[:id])
50
- @essence_picture.update_attributes(params[:essence_picture], :as => current_user.role.to_sym)
51
- @content = Content.find(params[:content_id])
52
- end
48
+ def update
49
+ @essence_picture = EssencePicture.find(params[:id])
50
+ @essence_picture.update_attributes(params[:essence_picture], :as => current_user.role.to_sym)
51
+ @content = Content.find(params[:content_id])
52
+ end
53
53
 
54
- def assign
55
- @content = Content.find(params[:id])
56
- @picture = Picture.find(params[:picture_id])
57
- @content.essence.picture = @picture
58
- @options = params[:options] || {}
59
- @element = @content.element
60
- @dragable = @options[:grouped]
61
- # If options params come from Flash uploader then we have to parse them as hash.
62
- if @options.is_a?(String)
63
- @options = Rack::Utils.parse_query(@options)
64
- end
65
- @options = @options.merge(
66
- :dragable => @dragable
67
- )
68
- end
54
+ def assign
55
+ @content = Content.find(params[:id])
56
+ @picture = Picture.find(params[:picture_id])
57
+ @content.essence.picture = @picture
58
+ @options = params[:options] || {}
59
+ @element = @content.element
60
+ @dragable = @options[:grouped]
61
+ # If options params come from Flash uploader then we have to parse them as hash.
62
+ if @options.is_a?(String)
63
+ @options = Rack::Utils.parse_query(@options)
64
+ end
65
+ @options = @options.merge(
66
+ :dragable => @dragable
67
+ )
68
+ end
69
69
 
70
- def save_link
71
- @content = Content.find(params[:id])
72
- @picture_essence = @content.essence
73
- @picture_essence.link = params[:link]
74
- @picture_essence.link_title = params[:title]
75
- @picture_essence.open_link_in_new_window = params[:blank]
76
- @notice = t("saved_link")
77
- @picture_essence.save
78
- end
70
+ def save_link
71
+ @content = Content.find(params[:id])
72
+ @picture_essence = @content.essence
73
+ @picture_essence.link = params[:link]
74
+ @picture_essence.link_title = params[:title]
75
+ @picture_essence.open_link_in_new_window = params[:blank]
76
+ @notice = t("saved_link")
77
+ @picture_essence.save
78
+ end
79
79
 
80
- def destroy
81
- content = Content.find_by_id(params[:id])
82
- @element = content.element
83
- @content_id = content.id
84
- content.destroy
85
- @essence_pictures = @element.contents.find_all_by_essence_type('Alchemy::EssencePicture')
86
- @options = params[:options]
87
- end
80
+ def destroy
81
+ content = Content.find_by_id(params[:id])
82
+ @element = content.element
83
+ @content_id = content.id
84
+ content.destroy
85
+ @essence_pictures = @element.contents.find_all_by_essence_type('Alchemy::EssencePicture')
86
+ @options = params[:options]
87
+ end
88
88
 
89
- end
90
- end
89
+ end
90
+ end
91
91
  end
@@ -1,12 +1,12 @@
1
1
  module Alchemy
2
- module Admin
3
- class EssenceVideosController < Alchemy::Admin::BaseController
2
+ module Admin
3
+ class EssenceVideosController < Alchemy::Admin::BaseController
4
4
 
5
- def update
6
- @essence_video = EssenceVideo.find(params[:id])
7
- @essence_video.update_attributes(params[:essence_video], :as => current_user.role.to_sym)
8
- end
5
+ def update
6
+ @essence_video = EssenceVideo.find(params[:id])
7
+ @essence_video.update_attributes(params[:essence_video], :as => current_user.role.to_sym)
8
+ end
9
9
 
10
- end
11
- end
10
+ end
11
+ end
12
12
  end
@@ -1,7 +1,19 @@
1
1
  module Alchemy
2
- module Admin
3
- class LanguagesController < Alchemy::Admin::ResourcesController
2
+ module Admin
3
+ class LanguagesController < Alchemy::Admin::ResourcesController
4
4
 
5
- end
6
- end
5
+ def new
6
+ @language = Alchemy::Language.new
7
+ @language.page_layout = (configured_page_layout or @language.page_layout)
8
+ render :layout => !request.xhr?
9
+ end
10
+
11
+ protected
12
+
13
+ def configured_page_layout
14
+ Alchemy::Config.get(:default_language).try('[]', 'page_layout')
15
+ end
16
+
17
+ end
18
+ end
7
19
  end
@@ -1,13 +1,13 @@
1
1
  module Alchemy
2
- module Admin
3
- class LayoutpagesController < Alchemy::Admin::BaseController
2
+ module Admin
3
+ class LayoutpagesController < Alchemy::Admin::BaseController
4
4
 
5
- def index
6
- @locked_pages = Page.all_locked_by(current_user)
7
- @layout_root = Page.find_or_create_layout_root_for(session[:language_id])
8
- @languages = Language.all
9
- end
5
+ def index
6
+ @locked_pages = Page.all_locked_by(current_user)
7
+ @layout_root = Page.find_or_create_layout_root_for(session[:language_id])
8
+ @languages = Language.all
9
+ end
10
10
 
11
- end
12
- end
11
+ end
12
+ end
13
13
  end
@@ -1,278 +1,279 @@
1
1
  module Alchemy
2
- module Admin
3
- class PagesController < Alchemy::Admin::BaseController
2
+ module Admin
3
+ class PagesController < Alchemy::Admin::BaseController
4
4
 
5
- helper "alchemy/pages"
5
+ helper "alchemy/pages"
6
6
 
7
- before_filter :set_translation, :except => [:show]
7
+ before_filter :set_translation, :except => [:show]
8
8
 
9
- filter_access_to [:show, :unlock, :visit, :publish, :configure, :edit, :update, :destroy, :fold], :attribute_check => true, :load_method => :get_page_from_id, :model => Alchemy::Page
10
- filter_access_to [:index, :link, :layoutpages, :new, :switch_language, :create, :move, :flush], :attribute_check => false
9
+ filter_access_to [:show, :unlock, :visit, :publish, :configure, :edit, :update, :destroy, :fold], :attribute_check => true, :load_method => :get_page_from_id, :model => Alchemy::Page
10
+ filter_access_to [:index, :link, :layoutpages, :new, :switch_language, :create, :move, :flush], :attribute_check => false
11
11
 
12
- cache_sweeper Alchemy::PagesSweeper, :only => [:publish], :if => proc { Alchemy::Config.get(:cache_pages) }
12
+ cache_sweeper Alchemy::PagesSweeper, :only => [:publish], :if => proc { Alchemy::Config.get(:cache_pages) }
13
13
 
14
- def index
15
- @page_root = Page.language_root_for(session[:language_id])
16
- @locked_pages = Page.all_locked_by(current_user)
17
- @languages = Language.all
18
- if !@page_root
19
- if @languages.length == 1
20
- @language = @languages.first
21
- store_language_in_session(@language)
22
- else
23
- @language = @languages.find { |language| language.id == session[:language_id] }
24
- end
25
- @languages_with_page_tree = Language.all_for_created_language_trees if @language
26
- end
27
- end
14
+ def index
15
+ @page_root = Page.language_root_for(session[:language_id])
16
+ @locked_pages = Page.all_locked_by(current_user)
17
+ @languages = Language.all
18
+ if !@page_root
19
+ if @languages.length == 1
20
+ @language = @languages.first
21
+ store_language_in_session(@language)
22
+ else
23
+ @language = @languages.find { |language| language.id == session[:language_id] }
24
+ end
25
+ @languages_with_page_tree = Language.all_for_created_language_trees if @language
26
+ end
27
+ end
28
28
 
29
- def show
30
- # fetching page via before filter
31
- @preview_mode = true
32
- @root_page = Page.language_root_for(session[:language_id])
33
- # Setting the locale to pages language. so the page content has its correct translation
34
- ::I18n.locale = @page.language_code
35
- render :layout => layout_for_page
36
- end
29
+ def show
30
+ # fetching page via before filter
31
+ @preview_mode = true
32
+ @root_page = Page.language_root_for(session[:language_id])
33
+ # Setting the locale to pages language. so the page content has its correct translation
34
+ ::I18n.locale = @page.language_code
35
+ render :layout => layout_for_page
36
+ end
37
37
 
38
- def new
39
- @page = Page.new(:layoutpage => params[:layoutpage] == 'true', :parent_id => params[:parent_id])
40
- @page_layouts = PageLayout.get_layouts_for_select(session[:language_id], @page.layoutpage?)
41
- @clipboard_items = Page.all_from_clipboard_for_select(get_clipboard('pages'), session[:language_id], @page.layoutpage?)
42
- render :layout => false
43
- end
38
+ def new
39
+ @page = Page.new(:layoutpage => params[:layoutpage] == 'true', :parent_id => params[:parent_id])
40
+ @page_layouts = PageLayout.get_layouts_for_select(session[:language_id], @page.layoutpage?)
41
+ @clipboard_items = Page.all_from_clipboard_for_select(get_clipboard('pages'), session[:language_id], @page.layoutpage?)
42
+ render :layout => false
43
+ end
44
44
 
45
- def create
46
- parent = Page.find_by_id(params[:page][:parent_id]) || Page.root
47
- params[:page][:language_id] ||= parent.language ? parent.language.id : Language.get_default.id
48
- params[:page][:language_code] ||= parent.language ? parent.language.code : Language.get_default.code
49
- if !params[:paste_from_clipboard].blank?
50
- source_page = Page.find(params[:paste_from_clipboard])
51
- page = Page.copy(source_page, {
52
- :name => params[:page][:name].blank? ? source_page.name + ' (' + t('Copy') + ')' : params[:page][:name],
53
- :urlname => '',
54
- :title => '',
55
- :parent_id => params[:page][:parent_id],
56
- :language => parent.language
57
- })
58
- source_page.copy_children_to(page) unless source_page.children.blank?
59
- else
60
- page = Page.create(params[:page], :as => current_user.role.to_sym)
61
- end
62
- render_errors_or_redirect(page, parent.layoutpage? ? admin_layoutpages_path : admin_pages_path, t("Page created", :name => page.name), '#alchemyOverlay button.button')
63
- end
45
+ def create
46
+ parent = Page.find_by_id(params[:page][:parent_id]) || Page.root
47
+ params[:page][:language_id] ||= parent.language ? parent.language.id : Language.get_default.id
48
+ params[:page][:language_code] ||= parent.language ? parent.language.code : Language.get_default.code
49
+ if !params[:paste_from_clipboard].blank?
50
+ source_page = Page.find(params[:paste_from_clipboard])
51
+ page = Page.copy(source_page, {
52
+ :name => params[:page][:name].blank? ? source_page.name + ' (' + t('Copy') + ')' : params[:page][:name],
53
+ :urlname => '',
54
+ :title => '',
55
+ :parent_id => params[:page][:parent_id],
56
+ :language => parent.language
57
+ })
58
+ source_page.copy_children_to(page) unless source_page.children.blank?
59
+ else
60
+ page = Page.create(params[:page], :as => current_user.role.to_sym)
61
+ end
62
+ render_errors_or_redirect(page, parent.layoutpage? ? admin_layoutpages_path : admin_pages_path, t("Page created", :name => page.name), 'form#new_page_form button.button')
63
+ end
64
64
 
65
- # Edit the content of the page and all its elements and contents.
66
- def edit
67
- # fetching page via before filter
68
- if @page.locked? && @page.locker && @page.locker.logged_in? && @page.locker != current_user
69
- flash[:notice] = t("This page is locked by %{name}", :name => (@page.locker.name rescue t('unknown')))
70
- redirect_to admin_pages_path
71
- else
72
- @page.lock(current_user)
73
- @locked_pages = Page.all_locked_by(current_user)
74
- end
75
- @layoutpage = @page.layoutpage?
76
- end
65
+ # Edit the content of the page and all its elements and contents.
66
+ def edit
67
+ # fetching page via before filter
68
+ if @page.locked? && @page.locker && @page.locker.logged_in? && @page.locker != current_user
69
+ flash[:notice] = t("This page is locked by %{name}", :name => (@page.locker.name rescue t('unknown')))
70
+ redirect_to admin_pages_path
71
+ else
72
+ @page.lock(current_user)
73
+ @locked_pages = Page.all_locked_by(current_user)
74
+ end
75
+ @layoutpage = @page.layoutpage?
76
+ end
77
77
 
78
- # Set page configuration like page names, meta tags and states.
79
- def configure
80
- # fetching page via before filter
81
- if @page.redirects_to_external?
82
- render :action => 'configure_external', :layout => false
83
- else
84
- render :layout => false
85
- end
86
- end
78
+ # Set page configuration like page names, meta tags and states.
79
+ def configure
80
+ # fetching page via before filter
81
+ if @page.redirects_to_external?
82
+ render :action => 'configure_external', :layout => false
83
+ else
84
+ render :layout => false
85
+ end
86
+ end
87
87
 
88
- def update
89
- # fetching page via before filter
90
- if @page.update_attributes(params[:page], :as => current_user.role.to_sym)
91
- @notice = t("Page saved", :name => @page.name)
92
- @while_page_edit = request.referer.include?('edit')
93
- else
94
- render_remote_errors(@page, '#alchemyOverlay button.button')
95
- end
96
- end
88
+ def update
89
+ # fetching page via before filter
90
+ if @page.update_attributes(params[:page], :as => current_user.role.to_sym)
91
+ @notice = t("Page saved", :name => @page.name)
92
+ @while_page_edit = request.referer.include?('edit')
93
+ else
94
+ render_remote_errors(@page, "form#edit_page_#{@page.id} button.button")
95
+ end
96
+ end
97
97
 
98
- def destroy
99
- # fetching page via before filter
100
- name = @page.name
101
- @page_id = @page.id
102
- @layoutpage = @page.layoutpage?
103
- session[:language_id] = @page.language_id
104
- if @page.destroy
105
- @page_root = Page.language_root_for(session[:language_id])
106
- get_clipboard('pages').delete(@page.id)
107
- @message = t("Page deleted", :name => name)
108
- flash[:notice] = @message
109
- respond_to do |format|
110
- format.js
111
- end
112
- end
113
- end
98
+ def destroy
99
+ # fetching page via before filter
100
+ name = @page.name
101
+ @page_id = @page.id
102
+ @layoutpage = @page.layoutpage?
103
+ session[:language_id] = @page.language_id
104
+ if @page.destroy
105
+ @page_root = Page.language_root_for(session[:language_id])
106
+ get_clipboard('pages').delete(@page.id)
107
+ @message = t("Page deleted", :name => name)
108
+ flash[:notice] = @message
109
+ respond_to do |format|
110
+ format.js
111
+ end
112
+ end
113
+ end
114
114
 
115
- def link
116
- @url_prefix = ""
117
- if configuration(:show_real_root)
118
- @page_root = Page.root
119
- else
120
- @page_root = Page.language_root_for(session[:language_id])
121
- end
122
- @area_name = params[:area_name]
123
- @content_id = params[:content_id]
124
- @link_target_options = Page.link_target_options
125
- @attachments = Attachment.all.collect{ |f| [f.name, download_attachment_path(:id => f.id, :name => f.name)] }
126
- if params[:link_urls_for] == "newsletter"
127
- # TODO: links in newsletters has to go through statistic controller. therfore we have to put a string inside the content_rtfs and replace this string with recipient.id before sending the newsletter.
128
- #@url_prefix = "#{current_server}/recipients/reacts"
129
- @url_prefix = current_server
130
- end
131
- if multi_language?
132
- @url_prefix = "#{session[:language_code]}/"
133
- end
134
- render :layout => false
135
- end
115
+ def link
116
+ @url_prefix = ""
117
+ if configuration(:show_real_root)
118
+ @page_root = Page.root
119
+ else
120
+ @page_root = Page.language_root_for(session[:language_id])
121
+ end
122
+ @area_name = params[:area_name]
123
+ @content_id = params[:content_id]
124
+ @link_target_options = Page.link_target_options
125
+ @attachments = Attachment.all.collect { |f| [f.name, download_attachment_path(:id => f.id, :name => f.name)] }
126
+ if params[:link_urls_for] == "newsletter"
127
+ # TODO: links in newsletters has to go through statistic controller. therfore we have to put a string inside the content_rtfs and replace this string with recipient.id before sending the newsletter.
128
+ #@url_prefix = "#{current_server}/recipients/reacts"
129
+ @url_prefix = current_server
130
+ end
131
+ if multi_language?
132
+ @url_prefix = "#{session[:language_code]}/"
133
+ end
134
+ render :layout => false
135
+ end
136
136
 
137
- def fold
138
- # @page is fetched via before filter
139
- @page.fold(current_user.id, !@page.folded?(current_user.id))
140
- @page.save
141
- respond_to do |format|
142
- format.js
143
- end
144
- end
137
+ def fold
138
+ # @page is fetched via before filter
139
+ @page.fold(current_user.id, !@page.folded?(current_user.id))
140
+ @page.save
141
+ respond_to do |format|
142
+ format.js
143
+ end
144
+ end
145
145
 
146
- # Leaves the page editing mode and unlocks the page for other users
147
- def unlock
148
- # fetching page via before filter
149
- @page.unlock
150
- flash[:notice] = t("unlocked_page", :name => @page.name)
151
- @pages_locked_by_user = Page.all_locked_by(current_user)
152
- respond_to do |format|
153
- format.js
154
- format.html {
155
- redirect_to params[:redirect_to].blank? ? admin_pages_path : params[:redirect_to]
156
- }
157
- end
158
- end
146
+ # Leaves the page editing mode and unlocks the page for other users
147
+ def unlock
148
+ # fetching page via before filter
149
+ @page.unlock
150
+ flash[:notice] = t("unlocked_page", :name => @page.name)
151
+ @pages_locked_by_user = Page.all_locked_by(current_user)
152
+ respond_to do |format|
153
+ format.js
154
+ format.html {
155
+ redirect_to params[:redirect_to].blank? ? admin_pages_path : params[:redirect_to]
156
+ }
157
+ end
158
+ end
159
159
 
160
- def visit
161
- @page.unlock
162
- redirect_to show_page_path(:urlname => @page.urlname, :lang => multi_language? ? @page.language_code : nil)
163
- end
160
+ def visit
161
+ @page.unlock
162
+ redirect_to show_page_path(:urlname => @page.urlname, :lang => multi_language? ? @page.language_code : nil)
163
+ end
164
164
 
165
- # Sets the page public and sweeps the page cache
166
- def publish
167
- # fetching page via before filter
168
- @page.public = true
169
- @page.save
170
- flash[:notice] = t("page_published", :name => @page.name)
171
- redirect_back_or_to_default(admin_pages_path)
172
- end
165
+ # Sets the page public and sweeps the page cache
166
+ def publish
167
+ # fetching page via before filter
168
+ @page.public = true
169
+ @page.save
170
+ flash[:notice] = t("page_published", :name => @page.name)
171
+ redirect_back_or_to_default(admin_pages_path)
172
+ end
173
173
 
174
- def copy_language_tree
175
- # copy language root from old to new language
176
- if params[:layoutpage]
177
- original_language_root = Page.layout_root_for(params[:languages][:old_lang_id])
178
- else
179
- original_language_root = Page.language_root_for(params[:languages][:old_lang_id])
180
- end
181
- new_language_root = Page.copy(
182
- original_language_root,
183
- :language_id => params[:languages][:new_lang_id],
184
- :language_code => session[:language_code]
185
- )
186
- new_language_root.move_to_child_of Page.root
187
- original_language_root.copy_children_to(new_language_root)
188
- flash[:notice] = t('language_pages_copied')
189
- redirect_to params[:layoutpage] == "true" ? admin_layoutpages_path : :action => :index
190
- end
174
+ def copy_language_tree
175
+ # copy language root from old to new language
176
+ if params[:layoutpage]
177
+ original_language_root = Page.layout_root_for(params[:languages][:old_lang_id])
178
+ else
179
+ original_language_root = Page.language_root_for(params[:languages][:old_lang_id])
180
+ end
181
+ new_language_root = Page.copy(
182
+ original_language_root,
183
+ :language_id => params[:languages][:new_lang_id],
184
+ :language_code => session[:language_code],
185
+ :layoutpage => params[:layoutpage]
186
+ )
187
+ new_language_root.move_to_child_of Page.root
188
+ original_language_root.copy_children_to(new_language_root)
189
+ flash[:notice] = t('language_pages_copied')
190
+ redirect_to params[:layoutpage] == "true" ? admin_layoutpages_path : :action => :index
191
+ end
191
192
 
192
- def sort
193
- @page_root = Page.language_root_for(session[:language_id])
194
- @sorting = true
195
- end
193
+ def sort
194
+ @page_root = Page.language_root_for(session[:language_id])
195
+ @sorting = true
196
+ end
196
197
 
197
- def order
198
- @page_root = Page.language_root_for(session[:language_id])
199
-
200
- # Taken from https://github.com/matenia/jQuery-Awesome-Nested-Set-Drag-and-Drop
201
- neworder = JSON.parse(params[:set])
202
- prev_item = nil
203
- neworder.each do |item|
204
- dbitem = Page.find(item['id'])
205
- prev_item.nil? ? dbitem.move_to_child_of(@page_root) : dbitem.move_to_right_of(prev_item)
206
- sort_children(item, dbitem) unless item['children'].nil?
207
- prev_item = dbitem.reload
208
- end
209
-
210
- flash[:notice] = t("Pages order saved")
211
- @redirect_url = admin_pages_path
212
- render :action => :redirect
213
- end
198
+ def order
199
+ @page_root = Page.language_root_for(session[:language_id])
214
200
 
215
- def switch_language
216
- set_language_from(params[:language_id])
217
- redirect_path = request.referer.include?('admin/layoutpages') ? admin_layoutpages_path : admin_pages_path
218
- if request.xhr?
219
- @redirect_url = redirect_path
220
- render :action => :redirect
221
- else
222
- redirect_to redirect_path
223
- end
224
- end
201
+ # Taken from https://github.com/matenia/jQuery-Awesome-Nested-Set-Drag-and-Drop
202
+ neworder = JSON.parse(params[:set])
203
+ prev_item = nil
204
+ neworder.each do |item|
205
+ dbitem = Page.find(item['id'])
206
+ prev_item.nil? ? dbitem.move_to_child_of(@page_root) : dbitem.move_to_right_of(prev_item)
207
+ sort_children(item, dbitem) unless item['children'].nil?
208
+ prev_item = dbitem.reload
209
+ end
225
210
 
226
- def flush
227
- Page.with_language(session[:language_id]).flushables.each do |page|
228
- expire_page(page)
229
- end
230
- respond_to do |format|
231
- format.js
232
- end
233
- end
211
+ flash[:notice] = t("Pages order saved")
212
+ @redirect_url = admin_pages_path
213
+ render :action => :redirect
214
+ end
234
215
 
235
- private
216
+ def switch_language
217
+ set_language_from(params[:language_id])
218
+ redirect_path = request.referer.include?('admin/layoutpages') ? admin_layoutpages_path : admin_pages_path
219
+ if request.xhr?
220
+ @redirect_url = redirect_path
221
+ render :action => :redirect
222
+ else
223
+ redirect_to redirect_path
224
+ end
225
+ end
236
226
 
237
- def get_page_from_id
238
- @page ||= Page.find(params[:id])
239
- end
227
+ def flush
228
+ Page.with_language(session[:language_id]).flushables.each do |page|
229
+ expire_page(page)
230
+ end
231
+ respond_to do |format|
232
+ format.js
233
+ end
234
+ end
240
235
 
241
- def pages_from_raw_request
242
- request.raw_post.split('&').map { |i| i = {i.split('=')[0].gsub(/[^0-9]/, '') => i.split('=')[1]} }
243
- end
236
+ private
244
237
 
245
- def expire_page(page)
246
- return if page.do_not_sweep
247
- # TODO: We should change this back to expire_action after Rails 3.2 was released.
248
- # expire_action(
249
- # alchemy.show_page_url(
250
- # :urlname => page.urlname_was,
251
- # :lang => multi_language? ? page.language_code : nil
252
- # )
253
- # )
254
- # Temporarily fix for Rails 3 bug
255
- expire_fragment(ActionController::Caching::Actions::ActionCachePath.new(
256
- self,
257
- alchemy.show_page_url(
258
- :urlname => page.urlname_was,
259
- :lang => multi_language? ? page.language_code : nil
260
- ),
261
- false
262
- ).path) unless page.redirects_to_external?
263
- end
238
+ def get_page_from_id
239
+ @page ||= Page.find(params[:id])
240
+ end
264
241
 
265
- # Taken from https://github.com/matenia/jQuery-Awesome-Nested-Set-Drag-and-Drop
266
- def sort_children(element,dbitem)
267
- prevchild = nil
268
- element['children'].each do |child|
269
- childitem = Page.find(child['id'])
270
- prevchild.nil? ? childitem.move_to_child_of(dbitem) : childitem.move_to_right_of(prevchild)
271
- sort_children(child, childitem) unless child['children'].nil?
272
- prevchild = childitem
273
- end
274
- end
242
+ def pages_from_raw_request
243
+ request.raw_post.split('&').map { |i| i = {i.split('=')[0].gsub(/[^0-9]/, '') => i.split('=')[1]} }
244
+ end
275
245
 
276
- end
277
- end
246
+ def expire_page(page)
247
+ return if page.do_not_sweep
248
+ # TODO: We should change this back to expire_action after Rails 3.2 was released.
249
+ # expire_action(
250
+ # alchemy.show_page_url(
251
+ # :urlname => page.urlname_was,
252
+ # :lang => multi_language? ? page.language_code : nil
253
+ # )
254
+ # )
255
+ # Temporarily fix for Rails 3 bug
256
+ expire_fragment(ActionController::Caching::Actions::ActionCachePath.new(
257
+ self,
258
+ alchemy.show_page_url(
259
+ :urlname => page.urlname_was,
260
+ :lang => multi_language? ? page.language_code : nil
261
+ ),
262
+ false
263
+ ).path) unless page.redirects_to_external?
264
+ end
265
+
266
+ # Taken from https://github.com/matenia/jQuery-Awesome-Nested-Set-Drag-and-Drop
267
+ def sort_children(element, dbitem)
268
+ prevchild = nil
269
+ element['children'].each do |child|
270
+ childitem = Page.find(child['id'])
271
+ prevchild.nil? ? childitem.move_to_child_of(dbitem) : childitem.move_to_right_of(prevchild)
272
+ sort_children(child, childitem) unless child['children'].nil?
273
+ prevchild = childitem
274
+ end
275
+ end
276
+
277
+ end
278
+ end
278
279
  end