alchemy_cms 4.6.2 → 5.0.0.beta1

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 (378) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +33 -1
  3. data/.github/workflows/stale.yml +1 -1
  4. data/.gitignore +20 -2
  5. data/.hound.yml +2 -1
  6. data/.prettierrc +6 -0
  7. data/.rubocop.yml +31 -10
  8. data/CHANGELOG.md +89 -3
  9. data/Gemfile +24 -22
  10. data/README.md +31 -19
  11. data/Rakefile +10 -8
  12. data/alchemy_cms.gemspec +5 -4
  13. data/app/assets/javascripts/alchemy/admin.js +1 -5
  14. data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +2 -1
  15. data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +0 -2
  16. data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +17 -17
  17. data/app/assets/javascripts/alchemy/node_select.js +39 -0
  18. data/app/assets/javascripts/alchemy/templates/index.js +1 -0
  19. data/app/assets/javascripts/alchemy/templates/node.hbs +16 -0
  20. data/app/assets/stylesheets/alchemy/admin.scss +3 -2
  21. data/app/assets/stylesheets/alchemy/base.scss +0 -1
  22. data/app/assets/stylesheets/alchemy/elements.scss +1 -1
  23. data/app/assets/stylesheets/alchemy/forms.scss +5 -0
  24. data/app/assets/stylesheets/alchemy/node-select.scss +43 -0
  25. data/app/assets/stylesheets/alchemy/nodes.scss +1 -1
  26. data/app/assets/stylesheets/alchemy/sitemap.scss +5 -1
  27. data/app/assets/stylesheets/alchemy/tables.scss +1 -24
  28. data/app/controllers/alchemy/admin/attachments_controller.rb +8 -7
  29. data/app/controllers/alchemy/admin/base_controller.rb +13 -33
  30. data/app/controllers/alchemy/admin/clipboard_controller.rb +5 -4
  31. data/app/controllers/alchemy/admin/contents_controller.rb +1 -2
  32. data/app/controllers/alchemy/admin/dashboard_controller.rb +10 -9
  33. data/app/controllers/alchemy/admin/elements_controller.rb +20 -20
  34. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +12 -14
  35. data/app/controllers/alchemy/admin/languages_controller.rb +35 -2
  36. data/app/controllers/alchemy/admin/layoutpages_controller.rb +5 -2
  37. data/app/controllers/alchemy/admin/nodes_controller.rb +5 -4
  38. data/app/controllers/alchemy/admin/pages_controller.rb +50 -62
  39. data/app/controllers/alchemy/admin/pictures_controller.rb +16 -16
  40. data/app/controllers/alchemy/admin/resources_controller.rb +21 -13
  41. data/app/controllers/alchemy/admin/sites_controller.rb +18 -0
  42. data/app/controllers/alchemy/admin/styleguide_controller.rb +1 -0
  43. data/app/controllers/alchemy/admin/tags_controller.rb +5 -3
  44. data/app/controllers/alchemy/admin/trash_controller.rb +6 -6
  45. data/app/controllers/alchemy/api/base_controller.rb +2 -2
  46. data/app/controllers/alchemy/api/contents_controller.rb +4 -4
  47. data/app/controllers/alchemy/api/elements_controller.rb +8 -8
  48. data/app/controllers/alchemy/api/nodes_controller.rb +37 -1
  49. data/app/controllers/alchemy/api/pages_controller.rb +14 -23
  50. data/app/controllers/alchemy/attachments_controller.rb +5 -5
  51. data/app/controllers/alchemy/base_controller.rb +10 -9
  52. data/app/controllers/alchemy/messages_controller.rb +16 -23
  53. data/app/controllers/alchemy/pages_controller.rb +13 -11
  54. data/app/controllers/concerns/alchemy/admin/archive_overlay.rb +3 -2
  55. data/app/controllers/concerns/alchemy/admin/current_language.rb +23 -0
  56. data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +5 -5
  57. data/app/controllers/concerns/alchemy/legacy_page_redirects.rb +4 -4
  58. data/app/controllers/concerns/alchemy/page_redirects.rb +2 -9
  59. data/app/controllers/concerns/alchemy/site_redirects.rb +2 -2
  60. data/app/decorators/alchemy/element_editor.rb +39 -0
  61. data/app/helpers/alchemy/admin/attachments_helper.rb +6 -6
  62. data/app/helpers/alchemy/admin/base_helper.rb +36 -35
  63. data/app/helpers/alchemy/admin/contents_helper.rb +3 -3
  64. data/app/helpers/alchemy/admin/elements_helper.rb +3 -88
  65. data/app/helpers/alchemy/admin/essences_helper.rb +8 -117
  66. data/app/helpers/alchemy/admin/form_helper.rb +1 -1
  67. data/app/helpers/alchemy/admin/navigation_helper.rb +24 -23
  68. data/app/helpers/alchemy/admin/pages_helper.rb +4 -4
  69. data/app/helpers/alchemy/admin/pictures_helper.rb +3 -3
  70. data/app/helpers/alchemy/admin/tags_helper.rb +8 -7
  71. data/app/helpers/alchemy/base_helper.rb +13 -8
  72. data/app/helpers/alchemy/elements_block_helper.rb +2 -31
  73. data/app/helpers/alchemy/elements_helper.rb +12 -58
  74. data/app/helpers/alchemy/pages_helper.rb +24 -174
  75. data/app/helpers/alchemy/url_helper.rb +2 -1
  76. data/app/mailers/alchemy/base_mailer.rb +1 -1
  77. data/app/mailers/alchemy/messages_mailer.rb +1 -1
  78. data/app/models/alchemy/attachment.rb +20 -18
  79. data/app/models/alchemy/base_record.rb +2 -5
  80. data/app/models/alchemy/content.rb +33 -38
  81. data/app/models/alchemy/content/factory.rb +24 -31
  82. data/app/models/alchemy/element.rb +45 -53
  83. data/app/models/alchemy/element/definitions.rb +4 -4
  84. data/app/models/alchemy/element/element_contents.rb +9 -6
  85. data/app/models/alchemy/element/element_essences.rb +4 -3
  86. data/app/models/alchemy/element/presenters.rb +3 -2
  87. data/app/models/alchemy/element_to_page.rb +1 -1
  88. data/app/models/alchemy/essence_boolean.rb +1 -3
  89. data/app/models/alchemy/essence_date.rb +2 -3
  90. data/app/models/alchemy/essence_file.rb +4 -4
  91. data/app/models/alchemy/essence_html.rb +1 -3
  92. data/app/models/alchemy/essence_link.rb +1 -3
  93. data/app/models/alchemy/essence_node.rb +18 -0
  94. data/app/models/alchemy/essence_page.rb +3 -16
  95. data/app/models/alchemy/essence_picture.rb +17 -16
  96. data/app/models/alchemy/essence_picture_view.rb +7 -6
  97. data/app/models/alchemy/essence_richtext.rb +1 -3
  98. data/app/models/alchemy/essence_select.rb +1 -3
  99. data/app/models/alchemy/essence_text.rb +0 -2
  100. data/app/models/alchemy/folded_page.rb +1 -0
  101. data/app/models/alchemy/language.rb +21 -35
  102. data/app/models/alchemy/language/code.rb +4 -4
  103. data/app/models/alchemy/legacy_page_url.rb +1 -1
  104. data/app/models/alchemy/message.rb +3 -3
  105. data/app/models/alchemy/node.rb +27 -4
  106. data/app/models/alchemy/page.rb +46 -127
  107. data/app/models/alchemy/page/fixed_attributes.rb +3 -2
  108. data/app/models/alchemy/page/page_elements.rb +35 -44
  109. data/app/models/alchemy/page/page_naming.rb +20 -70
  110. data/app/models/alchemy/page/page_natures.rb +7 -34
  111. data/app/models/alchemy/page/page_scopes.rb +23 -29
  112. data/app/models/alchemy/page/url_path.rb +0 -2
  113. data/app/models/alchemy/picture.rb +18 -27
  114. data/app/models/alchemy/picture/transformations.rb +9 -7
  115. data/app/models/alchemy/picture/url.rb +5 -5
  116. data/app/models/alchemy/site.rb +6 -36
  117. data/app/models/alchemy/site/layout.rb +2 -2
  118. data/app/models/concerns/alchemy/touch_elements.rb +24 -0
  119. data/app/serializers/alchemy/content_serializer.rb +0 -3
  120. data/app/serializers/alchemy/essence_boolean_serializer.rb +3 -3
  121. data/app/serializers/alchemy/essence_date_serializer.rb +3 -3
  122. data/app/serializers/alchemy/essence_file_serializer.rb +4 -2
  123. data/app/serializers/alchemy/essence_html_serializer.rb +3 -3
  124. data/app/serializers/alchemy/essence_link_serializer.rb +3 -3
  125. data/app/serializers/alchemy/essence_picture_serializer.rb +5 -4
  126. data/app/serializers/alchemy/essence_richtext_serializer.rb +3 -3
  127. data/app/serializers/alchemy/essence_select_serializer.rb +3 -3
  128. data/app/serializers/alchemy/essence_text_serializer.rb +5 -4
  129. data/app/serializers/alchemy/node_serializer.rb +2 -0
  130. data/app/serializers/alchemy/page_tree_serializer.rb +9 -13
  131. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +1 -2
  132. data/app/views/alchemy/admin/attachments/_file_to_assign.html.erb +1 -2
  133. data/app/views/alchemy/admin/attachments/_files_list.html.erb +4 -4
  134. data/app/views/alchemy/admin/contents/create.js.erb +1 -3
  135. data/app/views/alchemy/admin/elements/_element.html.erb +9 -18
  136. data/app/views/alchemy/admin/elements/create.js.erb +1 -1
  137. data/app/views/alchemy/admin/elements/fold.js.erb +1 -1
  138. data/app/views/alchemy/admin/elements/index.html.erb +3 -3
  139. data/app/views/alchemy/admin/essence_files/assign.js.erb +1 -6
  140. data/app/views/alchemy/admin/essence_files/edit.html.erb +1 -1
  141. data/app/views/alchemy/admin/essence_pictures/assign.js.erb +1 -7
  142. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +1 -1
  143. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +7 -7
  144. data/app/views/alchemy/admin/essence_pictures/update.js.erb +1 -1
  145. data/app/views/alchemy/admin/languages/_form.html.erb +5 -5
  146. data/app/views/alchemy/admin/languages/_table.html.erb +3 -3
  147. data/app/views/alchemy/admin/languages/edit.html.erb +1 -0
  148. data/app/views/alchemy/admin/languages/index.html.erb +23 -4
  149. data/app/views/alchemy/admin/languages/new.html.erb +1 -0
  150. data/app/views/alchemy/admin/layoutpages/index.html.erb +3 -3
  151. data/app/views/alchemy/admin/nodes/_form.html.erb +18 -15
  152. data/app/views/alchemy/admin/nodes/_node.html.erb +1 -5
  153. data/app/views/alchemy/admin/nodes/index.html.erb +3 -4
  154. data/app/views/alchemy/admin/pages/_create_language_form.html.erb +0 -8
  155. data/app/views/alchemy/admin/pages/_form.html.erb +0 -1
  156. data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -0
  157. data/app/views/alchemy/admin/pages/_page.html.erb +11 -19
  158. data/app/views/alchemy/admin/pages/_page_infos.html.erb +0 -4
  159. data/app/views/alchemy/admin/pages/edit.html.erb +1 -1
  160. data/app/views/alchemy/admin/pages/info.html.erb +0 -9
  161. data/app/views/alchemy/admin/pages/unlock.js.erb +13 -6
  162. data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +0 -2
  163. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +1 -5
  164. data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +1 -1
  165. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -2
  166. data/app/views/alchemy/admin/resources/_resource.html.erb +1 -1
  167. data/app/views/alchemy/admin/resources/_table.html.erb +2 -2
  168. data/app/views/alchemy/admin/sites/_form.html.erb +8 -0
  169. data/app/views/alchemy/admin/sites/edit.html.erb +1 -0
  170. data/app/views/alchemy/admin/sites/index.html.erb +21 -9
  171. data/app/views/alchemy/admin/sites/new.html.erb +1 -0
  172. data/app/views/alchemy/admin/tags/index.html.erb +2 -2
  173. data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +10 -12
  174. data/app/views/alchemy/essences/_essence_date_editor.html.erb +11 -8
  175. data/app/views/alchemy/essences/_essence_file_editor.html.erb +16 -17
  176. data/app/views/alchemy/essences/_essence_html_editor.html.erb +8 -5
  177. data/app/views/alchemy/essences/_essence_link_editor.html.erb +18 -15
  178. data/app/views/alchemy/essences/_essence_node_editor.html.erb +27 -0
  179. data/app/views/alchemy/essences/_essence_node_view.html.erb +1 -0
  180. data/app/views/alchemy/essences/_essence_page_editor.html.erb +14 -11
  181. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +22 -20
  182. data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +10 -7
  183. data/app/views/alchemy/essences/_essence_select_editor.html.erb +12 -16
  184. data/app/views/alchemy/essences/_essence_text_editor.html.erb +18 -17
  185. data/app/views/alchemy/essences/shared/_essence_picture_tools.html.erb +6 -11
  186. data/app/views/alchemy/pages/show.rss.builder +3 -2
  187. data/app/views/layouts/alchemy/admin.html.erb +1 -0
  188. data/babel.config.js +12 -0
  189. data/bin/rails +5 -4
  190. data/config/alchemy/config.yml +15 -18
  191. data/config/brakeman.ignore +1 -1
  192. data/config/initializers/assets.rb +2 -1
  193. data/config/initializers/dragonfly.rb +2 -1
  194. data/config/initializers/mime_types.rb +1 -0
  195. data/config/initializers/mini_profiler.rb +3 -2
  196. data/config/initializers/simple_form.rb +6 -6
  197. data/config/locales/alchemy.en.yml +23 -8
  198. data/config/routes.rb +25 -24
  199. data/config/spring.rb +3 -2
  200. data/db/migrate/20200226213334_alchemy_four_point_four.rb +313 -0
  201. data/db/migrate/20200423073425_create_alchemy_essence_nodes.rb +11 -0
  202. data/db/migrate/20200504210159_remove_site_id_from_nodes.rb +28 -0
  203. data/db/migrate/20200505215518_add_language_id_foreign_key_to_alchemy_pages.rb +8 -0
  204. data/db/migrate/20200511113603_add_menu_type_to_alchemy_nodes.rb +27 -0
  205. data/db/migrate/20200514091507_make_page_layoutpage_null_false.rb +6 -0
  206. data/db/migrate/20200519073500_remove_visible_from_alchemy_pages.rb +24 -0
  207. data/lib/alchemy/admin/locale.rb +3 -1
  208. data/lib/alchemy/admin/preview_url.rb +64 -0
  209. data/lib/alchemy/auth_accessors.rb +8 -7
  210. data/lib/alchemy/cache_digests/template_tracker.rb +5 -4
  211. data/lib/alchemy/config.rb +1 -5
  212. data/lib/alchemy/configuration_methods.rb +3 -1
  213. data/lib/alchemy/controller_actions.rb +6 -5
  214. data/lib/alchemy/deprecation.rb +2 -1
  215. data/lib/alchemy/elements_finder.rb +5 -5
  216. data/lib/alchemy/engine.rb +23 -8
  217. data/lib/alchemy/errors.rb +0 -7
  218. data/lib/alchemy/essence.rb +17 -16
  219. data/lib/alchemy/filetypes.rb +5 -5
  220. data/lib/alchemy/forms/builder.rb +4 -4
  221. data/lib/alchemy/hints.rb +1 -1
  222. data/lib/alchemy/i18n.rb +2 -1
  223. data/lib/alchemy/modules.rb +12 -12
  224. data/lib/alchemy/name_conversions.rb +5 -5
  225. data/lib/alchemy/on_page_layout/callbacks_runner.rb +1 -0
  226. data/lib/alchemy/page_layout.rb +15 -12
  227. data/lib/alchemy/paths.rb +1 -1
  228. data/lib/alchemy/permissions.rb +7 -6
  229. data/lib/alchemy/resource.rb +23 -13
  230. data/lib/alchemy/resources_helper.rb +12 -18
  231. data/lib/alchemy/routing_constraints.rb +1 -1
  232. data/lib/alchemy/seeder.rb +42 -14
  233. data/lib/alchemy/shell.rb +13 -10
  234. data/lib/alchemy/taggable.rb +1 -0
  235. data/lib/alchemy/tasks/tidy.rb +4 -3
  236. data/lib/alchemy/test_support/config_stubbing.rb +1 -0
  237. data/lib/alchemy/test_support/essence_shared_examples.rb +72 -72
  238. data/lib/alchemy/test_support/factories.rb +1 -1
  239. data/lib/alchemy/test_support/factories/attachment_factory.rb +5 -5
  240. data/lib/alchemy/test_support/factories/content_factory.rb +6 -6
  241. data/lib/alchemy/test_support/factories/dummy_user_factory.rb +7 -7
  242. data/lib/alchemy/test_support/factories/element_factory.rb +9 -9
  243. data/lib/alchemy/test_support/factories/essence_file_factory.rb +3 -3
  244. data/lib/alchemy/test_support/factories/essence_page_factory.rb +3 -3
  245. data/lib/alchemy/test_support/factories/essence_picture_factory.rb +4 -4
  246. data/lib/alchemy/test_support/factories/essence_text_factory.rb +3 -3
  247. data/lib/alchemy/test_support/factories/language_factory.rb +16 -14
  248. data/lib/alchemy/test_support/factories/node_factory.rb +8 -8
  249. data/lib/alchemy/test_support/factories/page_factory.rb +15 -27
  250. data/lib/alchemy/test_support/factories/picture_factory.rb +5 -5
  251. data/lib/alchemy/test_support/factories/site_factory.rb +7 -6
  252. data/lib/alchemy/test_support/integration_helpers.rb +1 -0
  253. data/lib/alchemy/test_support/shared_contexts.rb +5 -4
  254. data/lib/alchemy/test_support/shared_uploader_examples.rb +4 -3
  255. data/lib/alchemy/tinymce.rb +15 -13
  256. data/lib/alchemy/upgrader.rb +8 -7
  257. data/lib/alchemy/upgrader/five_point_zero.rb +41 -0
  258. data/lib/alchemy/upgrader/tasks/element_views_updater.rb +4 -4
  259. data/lib/alchemy/upgrader/tasks/harden_gutentag_migrations.rb +29 -0
  260. data/lib/alchemy/version.rb +1 -1
  261. data/lib/alchemy_cms.rb +52 -50
  262. data/lib/{rails/generators → generators}/alchemy/base.rb +5 -4
  263. data/lib/{rails/generators → generators}/alchemy/elements/elements_generator.rb +13 -9
  264. data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.erb +0 -0
  265. data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.haml +0 -0
  266. data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.slim +0 -0
  267. data/lib/{rails/generators → generators}/alchemy/essence/essence_generator.rb +15 -13
  268. data/lib/generators/alchemy/essence/templates/editor.html.erb +17 -0
  269. data/lib/{rails/generators → generators}/alchemy/essence/templates/view.html.erb +0 -0
  270. data/lib/{rails/generators → generators}/alchemy/install/files/_article.html.erb +0 -0
  271. data/lib/{rails/generators → generators}/alchemy/install/files/_standard.html.erb +0 -0
  272. data/lib/{rails/generators → generators}/alchemy/install/files/alchemy.en.yml +0 -0
  273. data/lib/generators/alchemy/install/files/alchemy_admin.js +1 -0
  274. data/lib/{rails/generators → generators}/alchemy/install/files/all.css +0 -0
  275. data/lib/{rails/generators → generators}/alchemy/install/files/all.js +0 -0
  276. data/lib/{rails/generators → generators}/alchemy/install/files/application.html.erb +0 -0
  277. data/lib/{rails/generators → generators}/alchemy/install/files/article.scss +0 -0
  278. data/lib/generators/alchemy/install/install_generator.rb +110 -0
  279. data/lib/{rails/generators → generators}/alchemy/install/templates/dragonfly.rb.tt +0 -0
  280. data/lib/{rails/generators → generators}/alchemy/install/templates/elements.yml.tt +0 -0
  281. data/lib/{rails/generators → generators}/alchemy/install/templates/menus.yml.tt +0 -0
  282. data/lib/{rails/generators → generators}/alchemy/install/templates/page_layouts.yml.tt +0 -0
  283. data/lib/{rails/generators → generators}/alchemy/menus/menus_generator.rb +2 -2
  284. data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.erb +1 -4
  285. data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.haml +1 -4
  286. data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.slim +1 -4
  287. data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.erb +1 -1
  288. data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.haml +1 -1
  289. data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.slim +1 -1
  290. data/lib/{rails/generators → generators}/alchemy/module/module_generator.rb +3 -2
  291. data/lib/{rails/generators → generators}/alchemy/module/templates/ability.rb.tt +0 -0
  292. data/lib/{rails/generators → generators}/alchemy/module/templates/controller.rb.tt +0 -0
  293. data/lib/{rails/generators → generators}/alchemy/module/templates/module_config.rb.tt +0 -0
  294. data/lib/{rails/generators → generators}/alchemy/page_layouts/page_layouts_generator.rb +5 -4
  295. data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.erb +0 -0
  296. data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.haml +0 -0
  297. data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.slim +0 -0
  298. data/lib/{rails/generators → generators}/alchemy/site_layouts/site_layouts_generator.rb +4 -2
  299. data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.erb +0 -0
  300. data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.haml +0 -0
  301. data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.slim +0 -0
  302. data/lib/{rails/generators → generators}/alchemy/views/views_generator.rb +7 -6
  303. data/lib/kaminari/scoped_pagination_url_helper.rb +1 -0
  304. data/lib/tasks/alchemy/db.rake +3 -19
  305. data/lib/tasks/alchemy/install.rake +3 -2
  306. data/lib/tasks/alchemy/tidy.rake +9 -8
  307. data/lib/tasks/alchemy/upgrade.rake +18 -116
  308. data/package.json +45 -0
  309. data/package/admin.js +14 -0
  310. data/package/src/__tests__/i18n.spec.js +70 -0
  311. data/package/src/i18n.js +48 -0
  312. data/package/src/node_tree.js +72 -0
  313. data/package/src/translations.js +32 -0
  314. data/package/src/utils/__tests__/ajax.spec.js +124 -0
  315. data/package/src/utils/__tests__/events.spec.js +38 -0
  316. data/package/src/utils/ajax.js +48 -0
  317. data/package/src/utils/events.js +16 -0
  318. data/vendor/assets/fonts/fa-regular-400.eot +0 -0
  319. data/vendor/assets/fonts/fa-regular-400.svg +798 -358
  320. data/vendor/assets/fonts/fa-regular-400.ttf +0 -0
  321. data/vendor/assets/fonts/fa-regular-400.woff +0 -0
  322. data/vendor/assets/fonts/fa-regular-400.woff2 +0 -0
  323. data/vendor/assets/fonts/fa-solid-900.eot +0 -0
  324. data/vendor/assets/fonts/fa-solid-900.svg +4933 -1408
  325. data/vendor/assets/fonts/fa-solid-900.ttf +0 -0
  326. data/vendor/assets/fonts/fa-solid-900.woff +0 -0
  327. data/vendor/assets/fonts/fa-solid-900.woff2 +0 -0
  328. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.nestedSortable.js +1 -2
  329. data/vendor/assets/stylesheets/fontawesome/_core.scss +5 -0
  330. data/vendor/assets/stylesheets/fontawesome/_fixed-width.scss +1 -1
  331. data/vendor/assets/stylesheets/fontawesome/_icons.scss +651 -2
  332. data/vendor/assets/stylesheets/fontawesome/_mixins.scss +0 -1
  333. data/vendor/assets/stylesheets/fontawesome/_rotated-flipped.scss +3 -2
  334. data/vendor/assets/stylesheets/fontawesome/_stacked.scss +1 -1
  335. data/vendor/assets/stylesheets/fontawesome/_variables.scss +662 -9
  336. data/vendor/assets/stylesheets/fontawesome/fontawesome.scss +2 -2
  337. data/vendor/assets/stylesheets/fontawesome/regular.scss +23 -0
  338. data/vendor/assets/stylesheets/fontawesome/solid.scss +24 -0
  339. metadata +110 -88
  340. data/app/assets/javascripts/alchemy/alchemy.i18n.js.coffee +0 -32
  341. data/app/assets/javascripts/alchemy/alchemy.node_tree.js +0 -66
  342. data/app/assets/javascripts/alchemy/alchemy.translations.js.coffee +0 -29
  343. data/app/assets/javascripts/alchemy/alchemy.utils.js +0 -45
  344. data/app/helpers/alchemy/essences_helper.rb +0 -119
  345. data/app/models/concerns/alchemy/content_touching.rb +0 -23
  346. data/app/serializers/alchemy/legacy_element_serializer.rb +0 -15
  347. data/app/views/alchemy/admin/contents/_missing.html.erb +0 -17
  348. data/app/views/alchemy/admin/pages/_menu_fields.html.erb +0 -37
  349. data/app/views/alchemy/admin/pages/configure_external.html.erb +0 -32
  350. data/app/views/alchemy/elements/_editor_not_found.html.erb +0 -4
  351. data/app/views/alchemy/navigation/_image_link.html.erb +0 -14
  352. data/app/views/alchemy/navigation/_link.html.erb +0 -19
  353. data/app/views/alchemy/navigation/_renderer.html.erb +0 -29
  354. data/db/migrate/20180226123013_alchemy_four_point_zero.rb +0 -363
  355. data/db/migrate/20180227224537_migrate_tags_to_gutentag.rb +0 -41
  356. data/db/migrate/20180519204655_add_fixed_to_alchemy_elements.rb +0 -6
  357. data/db/migrate/20191016073858_create_alchemy_essence_pages.rb +0 -8
  358. data/db/migrate/20191029212236_create_alchemy_nodes.rb +0 -24
  359. data/db/migrate/20200226081535_add_site_id_to_alchemy_nodes.rb +0 -15
  360. data/lib/alchemy/ssl_protection.rb +0 -34
  361. data/lib/alchemy/tasks/helpers.rb +0 -81
  362. data/lib/alchemy/test_support/controller_requests.rb +0 -93
  363. data/lib/alchemy/upgrader/four_point_four.rb +0 -52
  364. data/lib/alchemy/upgrader/four_point_one.rb +0 -42
  365. data/lib/alchemy/upgrader/four_point_six.rb +0 -50
  366. data/lib/alchemy/upgrader/four_point_two.rb +0 -85
  367. data/lib/alchemy/upgrader/tasks/cells_migration.rb +0 -43
  368. data/lib/alchemy/upgrader/tasks/cells_upgrader.rb +0 -148
  369. data/lib/alchemy/upgrader/tasks/element_partial_name_variable_updater.rb +0 -28
  370. data/lib/alchemy/upgrader/tasks/harden_acts_as_taggable_on_migrations.rb +0 -27
  371. data/lib/alchemy/upgrader/tasks/picture_gallery_migration.rb +0 -65
  372. data/lib/alchemy/upgrader/tasks/picture_gallery_upgrader.rb +0 -210
  373. data/lib/rails/generators/alchemy/essence/templates/editor.html.erb +0 -15
  374. data/lib/rails/generators/alchemy/install/install_generator.rb +0 -60
  375. data/lib/tasks/alchemy/convert.rake +0 -97
  376. data/vendor/assets/javascripts/sortable/Sortable.min.js +0 -2
  377. data/vendor/assets/stylesheets/fontawesome/fa-regular.scss +0 -22
  378. data/vendor/assets/stylesheets/fontawesome/fa-solid.scss +0 -23
data/Rakefile CHANGED
@@ -39,14 +39,16 @@ namespace :alchemy do
39
39
  namespace :spec do
40
40
  desc "Prepares database for testing Alchemy"
41
41
  task :prepare do
42
- system <<-BASH
43
- cd spec/dummy
44
- export RAILS_ENV=test
45
- bin/rake db:create
46
- bin/rake db:environment:set
47
- bin/rake db:migrate:reset
48
- cd -
49
- BASH
42
+ result = system <<~BASH
43
+ cd spec/dummy && \
44
+ export RAILS_ENV=test && \
45
+ bin/rake db:create && \
46
+ bin/rake db:environment:set && \
47
+ bin/rake db:migrate:reset && \
48
+ bin/rails g alchemy:install --skip --skip-demo-files && \
49
+ cd -
50
+ BASH
51
+ result || fail
50
52
  end
51
53
  end
52
54
 
data/alchemy_cms.gemspec CHANGED
@@ -8,10 +8,10 @@ Gem::Specification.new do |gem|
8
8
  gem.version = Alchemy::VERSION
9
9
  gem.platform = Gem::Platform::RUBY
10
10
  gem.authors = ['Thomas von Deyen', 'Robin Boening', 'Marc Schettke', 'Hendrik Mans', 'Carsten Fregin', 'Martin Meyerhoff']
11
- gem.email = ['alchemy@magiclabs.de']
11
+ gem.email = ['hello@alchemy-cms.com']
12
12
  gem.homepage = 'https://alchemy-cms.com'
13
- gem.summary = 'A powerful, userfriendly and flexible CMS for Rails 5'
14
- gem.description = 'Alchemy is a powerful, userfriendly and flexible Rails 5 CMS.'
13
+ gem.summary = 'A powerful, userfriendly and flexible CMS for Rails'
14
+ gem.description = 'Alchemy is a powerful, userfriendly and flexible Rails CMS.'
15
15
  gem.requirements << 'ImageMagick (libmagick), v6.6 or greater.'
16
16
  gem.required_ruby_version = '>= 2.3.0'
17
17
  gem.license = 'BSD New'
@@ -32,7 +32,7 @@ Gem::Specification.new do |gem|
32
32
  gem.add_runtime_dependency 'kaminari', ['~> 1.1']
33
33
  gem.add_runtime_dependency 'originator', ['~> 3.1']
34
34
  gem.add_runtime_dependency 'non-stupid-digest-assets', ['~> 1.0.8']
35
- gem.add_runtime_dependency 'rails', ['>= 5.0.0', '< 6.1']
35
+ gem.add_runtime_dependency 'rails', ['>= 5.2.0', '< 6.1']
36
36
  gem.add_runtime_dependency 'ransack', ['>= 1.8', '< 3.0']
37
37
  gem.add_runtime_dependency 'request_store', ['~> 1.2']
38
38
  gem.add_runtime_dependency 'responders', ['>= 2.0', '< 4.0']
@@ -41,6 +41,7 @@ Gem::Specification.new do |gem|
41
41
  gem.add_runtime_dependency 'simple_form', ['>= 4.0', '< 6']
42
42
  gem.add_runtime_dependency 'sprockets', ['>= 3.0', '< 5']
43
43
  gem.add_runtime_dependency 'turbolinks', ['>= 2.5']
44
+ gem.add_runtime_dependency 'webpacker', ['>= 4.0', '< 6']
44
45
 
45
46
  gem.add_development_dependency 'capybara', ['~> 3.0']
46
47
  gem.add_development_dependency 'capybara-screenshot', ['~> 1.0']
@@ -15,10 +15,8 @@
15
15
  //= require requestAnimationFrame
16
16
  //= require select2
17
17
  //= require handlebars
18
- //= require sortable/Sortable.min
19
18
  //= require alchemy/templates
20
19
  //= require alchemy/alchemy.base
21
- //= require alchemy/alchemy.utils
22
20
  //= require alchemy/alchemy.autocomplete
23
21
  //= require alchemy/alchemy.browser
24
22
  //= require alchemy/alchemy.buttons
@@ -34,14 +32,12 @@
34
32
  //= require alchemy/alchemy.growler
35
33
  //= require alchemy/alchemy.gui
36
34
  //= require alchemy/alchemy.hotkeys
37
- //= require alchemy/alchemy.i18n
38
35
  //= require alchemy/alchemy.image_cropper
39
36
  //= require alchemy/alchemy.image_overlay
40
37
  //= require alchemy/alchemy.string_extension
41
38
  //= require alchemy/alchemy.link_dialog
42
39
  //= require alchemy/alchemy.list_filter
43
40
  //= require alchemy/alchemy.initializer
44
- //= require alchemy/alchemy.node_tree
45
41
  //= require alchemy/alchemy.page_sorter
46
42
  //= require alchemy/alchemy.uploader
47
43
  //= require alchemy/alchemy.preview_window
@@ -49,6 +45,6 @@
49
45
  //= require alchemy/alchemy.spinner
50
46
  //= require alchemy/alchemy.tinymce
51
47
  //= require alchemy/alchemy.tooltips
52
- //= require alchemy/alchemy.translations
53
48
  //= require alchemy/alchemy.trash_window
54
49
  //= require alchemy/page_select
50
+ //= require alchemy/node_select
@@ -62,9 +62,10 @@ $.extend Alchemy,
62
62
  removePicture: (selector) ->
63
63
  $form_field = $(selector)
64
64
  $element = $form_field.closest(".element-editor")
65
+ $content = $form_field.closest(".content_editor")
65
66
  if $form_field[0]
66
67
  $form_field.val ""
67
- $element.find(".thumbnail_background").html('<i class="icon far fa-image fa-fw"/>')
68
+ $content.find(".thumbnail_background").html('<i class="icon far fa-image fa-fw"/>')
68
69
  Alchemy.setElementDirty $element
69
70
  false
70
71
 
@@ -179,8 +179,6 @@ Alchemy.ElementEditors =
179
179
  if data.message == 'Alchemy.focusElementEditor'
180
180
  $element = $("#element_#{data.element_id}")
181
181
  Alchemy.ElementEditors.focusElement($element)
182
- else
183
- console.warn 'Unknown message received!', data
184
182
 
185
183
  onClickBody: (e) ->
186
184
  element = $(e.target).parents('.element-editor')[0]
@@ -1,24 +1,24 @@
1
- Alchemy.PageSorter = function() {
2
- var $sortables = $('ul#sitemap').find('ul.level_1_children');
1
+ Alchemy.PageSorter = function () {
2
+ var $sortables = $("ul#sitemap").find("ul.level_0_children")
3
3
 
4
4
  $sortables.nestedSortable({
5
- disableNesting: 'no-nest',
5
+ disableNesting: "no-nest",
6
6
  forcePlaceholderSize: true,
7
- handle: '.handle',
8
- items: 'li',
9
- listType: 'ul',
7
+ handle: ".handle",
8
+ items: "li",
9
+ listType: "ul",
10
10
  opacity: 0.5,
11
- placeholder: 'placeholder',
11
+ placeholder: "placeholder",
12
12
  tabSize: 16,
13
- tolerance: 'pointer',
14
- toleranceElement: '> div'
15
- });
13
+ tolerance: "pointer",
14
+ toleranceElement: "> div"
15
+ })
16
16
 
17
- $('#save_page_order').click(function(e) {
18
- e.preventDefault();
19
- Alchemy.Buttons.disable(this);
17
+ $("#save_page_order").click(function (e) {
18
+ e.preventDefault()
19
+ Alchemy.Buttons.disable(this)
20
20
  $.post(Alchemy.routes.order_admin_pages_path, {
21
- set: JSON.stringify($sortables.nestedSortable('toHierarchy'))
22
- });
23
- });
24
- };
21
+ set: JSON.stringify($sortables.nestedSortable("toHierarchy"))
22
+ })
23
+ })
24
+ }
@@ -0,0 +1,39 @@
1
+ $.fn.alchemyNodeSelect = function (options) {
2
+ var renderNodeTemplate = function (node) {
3
+ return HandlebarsTemplates.node({ node: node })
4
+ }
5
+ var queryParamsFromTerm = function (term) {
6
+ return {
7
+ filter: Object.assign(
8
+ { name_or_page_name_cont: term },
9
+ options.query_params
10
+ )
11
+ }
12
+ }
13
+ var resultsFromResponse = function (response) {
14
+ var meta = response.meta
15
+ var data = response.data
16
+ var more = meta.page * meta.per_page < meta.total_count
17
+ return { results: data, more: more }
18
+ }
19
+
20
+ return this.select2({
21
+ placeholder: options.placeholder,
22
+ allowClear: true,
23
+ minimumInputLength: 3,
24
+ initSelection: function (_$el, callback) {
25
+ if (options.initialSelection) {
26
+ callback(options.initialSelection)
27
+ }
28
+ },
29
+ ajax: {
30
+ url: options.url,
31
+ datatype: "json",
32
+ quietMillis: 300,
33
+ data: queryParamsFromTerm,
34
+ results: resultsFromResponse
35
+ },
36
+ formatSelection: renderNodeTemplate,
37
+ formatResult: renderNodeTemplate
38
+ })
39
+ }
@@ -1,3 +1,4 @@
1
1
  //= require alchemy/templates/spinner
2
2
  //= require alchemy/templates/page
3
3
  //= require alchemy/templates/node_folder
4
+ //= require alchemy/templates/node
@@ -0,0 +1,16 @@
1
+ <div class="node-select--node">
2
+ <i class="icon fas fa-list fa-lg"></i>
3
+ <div class="node-select--node-display_name">
4
+ <span class="node-select--node-ancestors">
5
+ {{#each node.ancestors}}
6
+ {{ this.name }} /&nbsp;
7
+ {{/each}}
8
+ </span>
9
+ <span class="node-select--node-name">
10
+ {{ node.name }}
11
+ </span>
12
+ </div>
13
+ <div class="node-select--node-url">
14
+ {{ node.url }}
15
+ </div>
16
+ </div>
@@ -5,8 +5,8 @@
5
5
  */
6
6
 
7
7
  @import "fontawesome/fontawesome";
8
- @import "fontawesome/fa-regular";
9
- @import "fontawesome/fa-solid";
8
+ @import "fontawesome/regular";
9
+ @import "fontawesome/solid";
10
10
  @import "alchemy/defaults";
11
11
  @import "alchemy/archive";
12
12
  @import "alchemy/navigation";
@@ -31,6 +31,7 @@
31
31
  @import "alchemy/image_library";
32
32
  @import "alchemy/labels";
33
33
  @import "alchemy/nodes";
34
+ @import "alchemy/node-select";
34
35
  @import "alchemy/notices";
35
36
  @import "alchemy/page-select";
36
37
  @import "alchemy/pagination";
@@ -83,7 +83,6 @@ hr {
83
83
  max-width: 500px;
84
84
  margin: 2em auto;
85
85
  padding: 4*$default-padding;
86
- border: $default-border;
87
86
  background: $medium-gray;
88
87
  border-radius: $default-border-radius;
89
88
  }
@@ -718,7 +718,7 @@ textarea.has_tinymce {
718
718
  visibility: hidden;
719
719
  }
720
720
 
721
- .essence_html_editor textarea {
721
+ .essence_html textarea {
722
722
  font-family: $mono-font-family;
723
723
  resize: vertical;
724
724
  font-size: $form-field-font-size;
@@ -173,6 +173,11 @@ form {
173
173
  .input .hint {
174
174
  @include form-hint;
175
175
  margin-left: $form-left-width;
176
+
177
+ a[href] {
178
+ color: $very-dark-gray;
179
+ text-decoration: underline;
180
+ }
176
181
  }
177
182
 
178
183
  .submit {
@@ -0,0 +1,43 @@
1
+ .node-select--node,
2
+ .node-select--node-url {
3
+ text-overflow: ellipsis;
4
+ overflow: hidden;
5
+ white-space: nowrap;
6
+ }
7
+
8
+ .node-select--node {
9
+ display: flex;
10
+ align-items: center;
11
+
12
+ .icon {
13
+ margin: 0 8px 0 4px;
14
+
15
+ .select2-highlighted & {
16
+ color: $white
17
+ }
18
+ }
19
+ }
20
+
21
+ .node-select--node-name {
22
+ font-weight: bold;
23
+ }
24
+
25
+ .node-select--node-url {
26
+ margin-left: auto;
27
+ padding: $default-padding 2*$default-padding;
28
+ color: $dark-gray;
29
+ font-size: $small-font-size;
30
+
31
+ .select2-highlighted & {
32
+ color: $white
33
+ }
34
+ }
35
+
36
+ // The container of the rendered node is slightly larger than other a line of
37
+ // text, as it would be for the Alchemy::EssencePage. Reducing the padding here from 0.6em
38
+ // to 0.4em centers the content nicely.
39
+ .essence_node {
40
+ .select2-container.alchemy_selectbox .select2-choice {
41
+ padding: 0.4em 0.75em;
42
+ }
43
+ }
@@ -64,7 +64,7 @@
64
64
  margin: 0;
65
65
  padding: 0;
66
66
 
67
- .folded > li {
67
+ &.folded > li {
68
68
  display: none;
69
69
  }
70
70
  }
@@ -197,6 +197,10 @@ $sitemap-url-xlarge-width: 350px;
197
197
 
198
198
  .page_status {
199
199
  display: inline-block;
200
+
201
+ .alchemy-dialog & {
202
+ display: block;
203
+ }
200
204
  }
201
205
 
202
206
  #sitemap_heading {
@@ -226,7 +230,7 @@ $sitemap-url-xlarge-width: 350px;
226
230
 
227
231
  .page_status {
228
232
  padding-left: 2 * $default-padding;
229
- margin-right: 214px;
233
+ margin-right: 188px;
230
234
  margin-left: auto;
231
235
 
232
236
  @media screen and (min-width: $large-screen-break-point) {
@@ -57,29 +57,6 @@ th {
57
57
  vertical-align: top;
58
58
  border-bottom: 1px solid $medium-gray;
59
59
  font-weight: bold;
60
-
61
- i {
62
- font-style: normal;
63
- position: absolute;
64
- right: 2px;
65
- top: 4px;
66
- text-shadow: 1px 1px 1px #fff;
67
- }
68
-
69
- a {
70
-
71
- &.sortable {
72
- display: block;
73
- margin: -4px -8px;
74
- padding: 4px 18px 4px 8px;
75
- text-shadow: 1px 1px 1px #fff;
76
- }
77
-
78
- &.sorted {
79
- position: relative;
80
- background: $medium-gray;
81
- }
82
- }
83
60
  }
84
61
 
85
62
  tr.even td {
@@ -141,7 +118,7 @@ td {
141
118
  width: 80px;
142
119
  }
143
120
 
144
- &.date {
121
+ &.date, &.datetime {
145
122
  width: 150px;
146
123
  }
147
124
 
@@ -6,10 +6,11 @@ module Alchemy
6
6
  include UploaderResponses
7
7
  include ArchiveOverlay
8
8
 
9
- helper 'alchemy/admin/tags'
9
+ helper "alchemy/admin/tags"
10
10
 
11
11
  def index
12
12
  @query = Attachment.ransack(search_filter_params[:q])
13
+ @query.sorts = "name asc" if @query.sorts.empty?
13
14
  @attachments = @query.result
14
15
 
15
16
  if search_filter_params[:tagged_with].present?
@@ -41,13 +42,13 @@ module Alchemy
41
42
 
42
43
  def update
43
44
  @attachment.update(attachment_attributes)
44
- if attachment_attributes['file'].present?
45
+ if attachment_attributes["file"].present?
45
46
  handle_uploader_response(status: :accepted)
46
47
  else
47
48
  render_errors_or_redirect(
48
49
  @attachment,
49
50
  admin_attachments_path(search_filter_params),
50
- Alchemy.t("File successfully updated")
51
+ Alchemy.t("File successfully updated"),
51
52
  )
52
53
  end
53
54
  end
@@ -56,14 +57,14 @@ module Alchemy
56
57
  name = @attachment.name
57
58
  @attachment.destroy
58
59
  @url = admin_attachments_url(search_filter_params)
59
- flash[:notice] = Alchemy.t('File deleted successfully', name: name)
60
+ flash[:notice] = Alchemy.t("File deleted successfully", name: name)
60
61
  end
61
62
 
62
63
  def download
63
64
  @attachment = Attachment.find(params[:id])
64
65
  send_file @attachment.file.path, {
65
66
  filename: @attachment.file_name,
66
- type: @attachment.file_mime_type
67
+ type: @attachment.file_mime_type,
67
68
  }
68
69
  end
69
70
 
@@ -73,8 +74,8 @@ module Alchemy
73
74
  @_search_filter_params ||= params.except(*COMMON_SEARCH_FILTER_EXCLUDES + [:attachment]).permit(
74
75
  *common_search_filter_includes + [
75
76
  :file_type,
76
- :content_id
77
- ]
77
+ :content_id,
78
+ ],
78
79
  )
79
80
  end
80
81
 
@@ -6,11 +6,9 @@ module Alchemy
6
6
  include Userstamp
7
7
  include Locale
8
8
 
9
- before_action { enforce_ssl if ssl_required? && !request.ssl? }
10
9
  before_action :load_locked_pages
11
10
 
12
- helper_method :clipboard_empty?, :trash_empty?, :get_clipboard, :is_admin?,
13
- :options_from_params
11
+ helper_method :clipboard_empty?, :trash_empty?, :get_clipboard, :is_admin?
14
12
 
15
13
  check_authorization
16
14
 
@@ -28,14 +26,14 @@ module Alchemy
28
26
 
29
27
  def leave
30
28
  authorize! :leave, :alchemy_admin
31
- render template: '/alchemy/admin/leave', layout: !request.xhr?
29
+ render template: "/alchemy/admin/leave", layout: !request.xhr?
32
30
  end
33
31
 
34
32
  private
35
33
 
36
34
  # Disable layout rendering for xhr requests.
37
35
  def set_layout
38
- request.xhr? ? false : 'alchemy/admin'
36
+ request.xhr? ? false : "alchemy/admin"
39
37
  end
40
38
 
41
39
  # Handles exceptions
@@ -56,7 +54,7 @@ module Alchemy
56
54
  if request.xhr?
57
55
  render action: "error_notice"
58
56
  else
59
- render '500', status: 500
57
+ render "500", status: 500
60
58
  end
61
59
  end
62
60
 
@@ -90,6 +88,7 @@ module Alchemy
90
88
  # Returns true if the current_alchemy_user (The logged-in Alchemy User) has the admin role.
91
89
  def is_admin?
92
90
  return false if !current_alchemy_user
91
+
93
92
  current_alchemy_user.admin?
94
93
  end
95
94
 
@@ -105,22 +104,15 @@ module Alchemy
105
104
  flash[:notice] = Alchemy.t(flash_notice)
106
105
  do_redirect_to redirect_url
107
106
  else
108
- render action: (params[:action] == 'update' ? 'edit' : 'new')
107
+ render action: (params[:action] == "update" ? "edit" : "new")
109
108
  end
110
109
  end
111
110
 
112
- def per_page_value_for_screen_size
113
- Alchemy::Deprecation.warn("#per_page_value_for_screen_size is deprecated, please use #items_per_page instead")
114
- return items_per_page if session[:screen_size].blank?
115
- screen_height = session[:screen_size].split('x').last.to_i
116
- (screen_height / 50) - 12
117
- end
118
-
119
111
  # Does redirects for html and js requests
120
112
  #
121
113
  def do_redirect_to(url_or_path)
122
114
  respond_to do |format|
123
- format.js {
115
+ format.js {
124
116
  @redirect_url = url_or_path
125
117
  render :redirect
126
118
  }
@@ -128,18 +120,6 @@ module Alchemy
128
120
  end
129
121
  end
130
122
 
131
- # Extracts options from params and permits all keys
132
- #
133
- # If no options are present it returns an empty parameters hash.
134
- #
135
- # @returns [ActionController::Parameters]
136
- def options_from_params
137
- @_options_from_params ||= begin
138
- (params[:options] || ActionController::Parameters.new).permit!
139
- end
140
- end
141
- deprecate :options_from_params, deprecator: Alchemy::Deprecation
142
-
143
123
  # This method decides if we want to raise an exception or not.
144
124
  #
145
125
  # I.e. in test environment.
@@ -150,7 +130,7 @@ module Alchemy
150
130
 
151
131
  # Are we currently in the page edit mode page preview.
152
132
  def is_page_preview?
153
- controller_path == 'alchemy/admin/pages' && action_name == 'show'
133
+ controller_path == "alchemy/admin/pages" && action_name == "show"
154
134
  end
155
135
 
156
136
  def load_locked_pages
@@ -161,11 +141,11 @@ module Alchemy
161
141
  #
162
142
  def current_alchemy_site
163
143
  @current_alchemy_site ||= begin
164
- site_id = params[:site_id] || session[:alchemy_site_id]
165
- site = Site.find_by(id: site_id) || super
166
- session[:alchemy_site_id] = site.id
167
- site
168
- end
144
+ site_id = params[:site_id] || session[:alchemy_site_id]
145
+ site = Site.find_by(id: site_id) || super
146
+ session[:alchemy_site_id] = site&.id
147
+ site
148
+ end
169
149
  end
170
150
  end
171
151
  end