alchemy_cms 4.6.1 → 5.0.0

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 (386) 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 +30 -9
  8. data/CHANGELOG.md +102 -1
  9. data/Gemfile +24 -22
  10. data/README.md +32 -20
  11. data/Rakefile +11 -8
  12. data/alchemy_cms.gemspec +6 -5
  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/navigation.scss +1 -0
  25. data/app/assets/stylesheets/alchemy/node-select.scss +43 -0
  26. data/app/assets/stylesheets/alchemy/nodes.scss +1 -1
  27. data/app/assets/stylesheets/alchemy/sitemap.scss +5 -1
  28. data/app/assets/stylesheets/alchemy/tables.scss +1 -24
  29. data/app/assets/stylesheets/alchemy/tags.scss +2 -2
  30. data/app/controllers/alchemy/admin/attachments_controller.rb +8 -7
  31. data/app/controllers/alchemy/admin/base_controller.rb +13 -33
  32. data/app/controllers/alchemy/admin/clipboard_controller.rb +5 -4
  33. data/app/controllers/alchemy/admin/contents_controller.rb +1 -2
  34. data/app/controllers/alchemy/admin/dashboard_controller.rb +10 -9
  35. data/app/controllers/alchemy/admin/elements_controller.rb +20 -20
  36. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +12 -14
  37. data/app/controllers/alchemy/admin/languages_controller.rb +35 -2
  38. data/app/controllers/alchemy/admin/layoutpages_controller.rb +5 -2
  39. data/app/controllers/alchemy/admin/nodes_controller.rb +5 -4
  40. data/app/controllers/alchemy/admin/pages_controller.rb +51 -63
  41. data/app/controllers/alchemy/admin/pictures_controller.rb +16 -16
  42. data/app/controllers/alchemy/admin/resources_controller.rb +21 -13
  43. data/app/controllers/alchemy/admin/sites_controller.rb +18 -0
  44. data/app/controllers/alchemy/admin/styleguide_controller.rb +1 -0
  45. data/app/controllers/alchemy/admin/tags_controller.rb +5 -3
  46. data/app/controllers/alchemy/admin/trash_controller.rb +6 -6
  47. data/app/controllers/alchemy/api/base_controller.rb +2 -2
  48. data/app/controllers/alchemy/api/contents_controller.rb +4 -4
  49. data/app/controllers/alchemy/api/elements_controller.rb +8 -8
  50. data/app/controllers/alchemy/api/nodes_controller.rb +37 -1
  51. data/app/controllers/alchemy/api/pages_controller.rb +14 -23
  52. data/app/controllers/alchemy/attachments_controller.rb +5 -5
  53. data/app/controllers/alchemy/base_controller.rb +10 -9
  54. data/app/controllers/alchemy/messages_controller.rb +16 -23
  55. data/app/controllers/alchemy/pages_controller.rb +13 -11
  56. data/app/controllers/concerns/alchemy/admin/archive_overlay.rb +3 -2
  57. data/app/controllers/concerns/alchemy/admin/current_language.rb +23 -0
  58. data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +5 -5
  59. data/app/controllers/concerns/alchemy/legacy_page_redirects.rb +4 -4
  60. data/app/controllers/concerns/alchemy/page_redirects.rb +2 -9
  61. data/app/controllers/concerns/alchemy/site_redirects.rb +2 -2
  62. data/app/decorators/alchemy/element_editor.rb +39 -0
  63. data/app/helpers/alchemy/admin/attachments_helper.rb +6 -6
  64. data/app/helpers/alchemy/admin/base_helper.rb +38 -35
  65. data/app/helpers/alchemy/admin/contents_helper.rb +3 -3
  66. data/app/helpers/alchemy/admin/elements_helper.rb +3 -88
  67. data/app/helpers/alchemy/admin/essences_helper.rb +8 -117
  68. data/app/helpers/alchemy/admin/form_helper.rb +1 -1
  69. data/app/helpers/alchemy/admin/navigation_helper.rb +24 -23
  70. data/app/helpers/alchemy/admin/pages_helper.rb +4 -4
  71. data/app/helpers/alchemy/admin/pictures_helper.rb +4 -6
  72. data/app/helpers/alchemy/admin/tags_helper.rb +8 -7
  73. data/app/helpers/alchemy/base_helper.rb +13 -8
  74. data/app/helpers/alchemy/elements_block_helper.rb +2 -31
  75. data/app/helpers/alchemy/elements_helper.rb +12 -58
  76. data/app/helpers/alchemy/pages_helper.rb +24 -174
  77. data/app/helpers/alchemy/url_helper.rb +4 -3
  78. data/app/mailers/alchemy/base_mailer.rb +1 -1
  79. data/app/mailers/alchemy/messages_mailer.rb +1 -1
  80. data/app/models/alchemy/attachment.rb +24 -19
  81. data/app/models/alchemy/base_record.rb +2 -5
  82. data/app/models/alchemy/content.rb +33 -38
  83. data/app/models/alchemy/content/factory.rb +24 -31
  84. data/app/models/alchemy/element.rb +45 -53
  85. data/app/models/alchemy/element/definitions.rb +4 -4
  86. data/app/models/alchemy/element/element_contents.rb +9 -6
  87. data/app/models/alchemy/element/element_essences.rb +4 -3
  88. data/app/models/alchemy/element/presenters.rb +3 -2
  89. data/app/models/alchemy/element_to_page.rb +1 -1
  90. data/app/models/alchemy/essence_boolean.rb +1 -3
  91. data/app/models/alchemy/essence_date.rb +2 -3
  92. data/app/models/alchemy/essence_file.rb +5 -5
  93. data/app/models/alchemy/essence_html.rb +1 -3
  94. data/app/models/alchemy/essence_link.rb +1 -3
  95. data/app/models/alchemy/essence_node.rb +18 -0
  96. data/app/models/alchemy/essence_page.rb +3 -16
  97. data/app/models/alchemy/essence_picture.rb +18 -17
  98. data/app/models/alchemy/essence_picture_view.rb +7 -6
  99. data/app/models/alchemy/essence_richtext.rb +1 -3
  100. data/app/models/alchemy/essence_select.rb +1 -3
  101. data/app/models/alchemy/essence_text.rb +0 -2
  102. data/app/models/alchemy/folded_page.rb +1 -0
  103. data/app/models/alchemy/language.rb +21 -35
  104. data/app/models/alchemy/language/code.rb +4 -4
  105. data/app/models/alchemy/legacy_page_url.rb +1 -1
  106. data/app/models/alchemy/message.rb +3 -3
  107. data/app/models/alchemy/node.rb +27 -4
  108. data/app/models/alchemy/page.rb +46 -127
  109. data/app/models/alchemy/page/fixed_attributes.rb +3 -2
  110. data/app/models/alchemy/page/page_elements.rb +35 -44
  111. data/app/models/alchemy/page/page_naming.rb +20 -70
  112. data/app/models/alchemy/page/page_natures.rb +7 -34
  113. data/app/models/alchemy/page/page_scopes.rb +23 -29
  114. data/app/models/alchemy/page/url_path.rb +0 -2
  115. data/app/models/alchemy/picture.rb +40 -30
  116. data/app/models/alchemy/picture/preprocessor.rb +26 -0
  117. data/app/models/alchemy/picture/transformations.rb +9 -7
  118. data/app/models/alchemy/picture/url.rb +9 -7
  119. data/app/models/alchemy/site.rb +6 -36
  120. data/app/models/alchemy/site/layout.rb +2 -2
  121. data/app/models/concerns/alchemy/touch_elements.rb +24 -0
  122. data/app/serializers/alchemy/content_serializer.rb +0 -3
  123. data/app/serializers/alchemy/essence_boolean_serializer.rb +3 -3
  124. data/app/serializers/alchemy/essence_date_serializer.rb +3 -3
  125. data/app/serializers/alchemy/essence_file_serializer.rb +4 -2
  126. data/app/serializers/alchemy/essence_html_serializer.rb +3 -3
  127. data/app/serializers/alchemy/essence_link_serializer.rb +3 -3
  128. data/app/serializers/alchemy/essence_picture_serializer.rb +5 -4
  129. data/app/serializers/alchemy/essence_richtext_serializer.rb +3 -3
  130. data/app/serializers/alchemy/essence_select_serializer.rb +3 -3
  131. data/app/serializers/alchemy/essence_text_serializer.rb +5 -4
  132. data/app/serializers/alchemy/node_serializer.rb +2 -0
  133. data/app/serializers/alchemy/page_tree_serializer.rb +9 -13
  134. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +1 -2
  135. data/app/views/alchemy/admin/attachments/_file_to_assign.html.erb +1 -2
  136. data/app/views/alchemy/admin/attachments/_files_list.html.erb +4 -4
  137. data/app/views/alchemy/admin/contents/create.js.erb +1 -3
  138. data/app/views/alchemy/admin/elements/_element.html.erb +9 -18
  139. data/app/views/alchemy/admin/elements/create.js.erb +1 -1
  140. data/app/views/alchemy/admin/elements/fold.js.erb +1 -1
  141. data/app/views/alchemy/admin/elements/index.html.erb +3 -3
  142. data/app/views/alchemy/admin/essence_files/assign.js.erb +1 -6
  143. data/app/views/alchemy/admin/essence_files/edit.html.erb +1 -1
  144. data/app/views/alchemy/admin/essence_pictures/assign.js.erb +1 -7
  145. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +1 -1
  146. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +7 -7
  147. data/app/views/alchemy/admin/essence_pictures/update.js.erb +1 -1
  148. data/app/views/alchemy/admin/languages/_form.html.erb +5 -5
  149. data/app/views/alchemy/admin/languages/_table.html.erb +3 -3
  150. data/app/views/alchemy/admin/languages/edit.html.erb +1 -0
  151. data/app/views/alchemy/admin/languages/index.html.erb +23 -4
  152. data/app/views/alchemy/admin/languages/new.html.erb +1 -0
  153. data/app/views/alchemy/admin/layoutpages/index.html.erb +3 -3
  154. data/app/views/alchemy/admin/nodes/_form.html.erb +18 -15
  155. data/app/views/alchemy/admin/nodes/_node.html.erb +1 -5
  156. data/app/views/alchemy/admin/nodes/index.html.erb +3 -4
  157. data/app/views/alchemy/admin/pages/_create_language_form.html.erb +0 -8
  158. data/app/views/alchemy/admin/pages/_form.html.erb +0 -1
  159. data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -0
  160. data/app/views/alchemy/admin/pages/_page.html.erb +11 -19
  161. data/app/views/alchemy/admin/pages/_page_infos.html.erb +0 -4
  162. data/app/views/alchemy/admin/pages/edit.html.erb +1 -1
  163. data/app/views/alchemy/admin/pages/info.html.erb +0 -9
  164. data/app/views/alchemy/admin/pages/unlock.js.erb +13 -6
  165. data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +0 -2
  166. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +1 -5
  167. data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +1 -1
  168. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -2
  169. data/app/views/alchemy/admin/pictures/index.html.erb +18 -3
  170. data/app/views/alchemy/admin/pictures/show.html.erb +1 -1
  171. data/app/views/alchemy/admin/resources/_resource.html.erb +1 -1
  172. data/app/views/alchemy/admin/resources/_table.html.erb +2 -2
  173. data/app/views/alchemy/admin/resources/index.html.erb +21 -22
  174. data/app/views/alchemy/admin/sites/_form.html.erb +8 -0
  175. data/app/views/alchemy/admin/sites/edit.html.erb +1 -0
  176. data/app/views/alchemy/admin/sites/index.html.erb +21 -9
  177. data/app/views/alchemy/admin/sites/new.html.erb +1 -0
  178. data/app/views/alchemy/admin/tags/index.html.erb +2 -2
  179. data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +10 -12
  180. data/app/views/alchemy/essences/_essence_date_editor.html.erb +11 -8
  181. data/app/views/alchemy/essences/_essence_file_editor.html.erb +16 -17
  182. data/app/views/alchemy/essences/_essence_file_view.html.erb +1 -1
  183. data/app/views/alchemy/essences/_essence_html_editor.html.erb +8 -5
  184. data/app/views/alchemy/essences/_essence_link_editor.html.erb +18 -15
  185. data/app/views/alchemy/essences/_essence_node_editor.html.erb +27 -0
  186. data/app/views/alchemy/essences/_essence_node_view.html.erb +1 -0
  187. data/app/views/alchemy/essences/_essence_page_editor.html.erb +14 -11
  188. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +22 -20
  189. data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +10 -7
  190. data/app/views/alchemy/essences/_essence_select_editor.html.erb +12 -16
  191. data/app/views/alchemy/essences/_essence_text_editor.html.erb +18 -17
  192. data/app/views/alchemy/essences/shared/_essence_picture_tools.html.erb +6 -11
  193. data/app/views/alchemy/pages/show.rss.builder +3 -2
  194. data/app/views/layouts/alchemy/admin.html.erb +1 -0
  195. data/babel.config.js +12 -0
  196. data/bin/rails +5 -4
  197. data/config/alchemy/config.yml +23 -16
  198. data/config/brakeman.ignore +1 -1
  199. data/config/initializers/assets.rb +2 -1
  200. data/config/initializers/dragonfly.rb +2 -1
  201. data/config/initializers/mime_types.rb +1 -0
  202. data/config/initializers/mini_profiler.rb +3 -2
  203. data/config/initializers/simple_form.rb +6 -6
  204. data/config/locales/alchemy.en.yml +23 -8
  205. data/config/routes.rb +25 -24
  206. data/config/spring.rb +3 -2
  207. data/db/migrate/20200226213334_alchemy_four_point_four.rb +313 -0
  208. data/db/migrate/20200423073425_create_alchemy_essence_nodes.rb +11 -0
  209. data/db/migrate/20200504210159_remove_site_id_from_nodes.rb +28 -0
  210. data/db/migrate/20200505215518_add_language_id_foreign_key_to_alchemy_pages.rb +8 -0
  211. data/db/migrate/20200511113603_add_menu_type_to_alchemy_nodes.rb +27 -0
  212. data/db/migrate/20200514091507_make_page_layoutpage_null_false.rb +6 -0
  213. data/db/migrate/20200519073500_remove_visible_from_alchemy_pages.rb +24 -0
  214. data/lib/alchemy/admin/locale.rb +3 -1
  215. data/lib/alchemy/admin/preview_url.rb +85 -0
  216. data/lib/alchemy/auth_accessors.rb +8 -7
  217. data/lib/alchemy/cache_digests/template_tracker.rb +5 -4
  218. data/lib/alchemy/config.rb +3 -5
  219. data/lib/alchemy/configuration_methods.rb +3 -1
  220. data/lib/alchemy/controller_actions.rb +6 -5
  221. data/lib/alchemy/deprecation.rb +2 -1
  222. data/lib/alchemy/elements_finder.rb +5 -5
  223. data/lib/alchemy/engine.rb +23 -8
  224. data/lib/alchemy/errors.rb +0 -7
  225. data/lib/alchemy/essence.rb +17 -16
  226. data/lib/alchemy/filetypes.rb +5 -5
  227. data/lib/alchemy/forms/builder.rb +4 -4
  228. data/lib/alchemy/hints.rb +1 -1
  229. data/lib/alchemy/i18n.rb +2 -1
  230. data/lib/alchemy/install/tasks.rb +41 -0
  231. data/lib/alchemy/modules.rb +12 -12
  232. data/lib/alchemy/name_conversions.rb +5 -5
  233. data/lib/alchemy/on_page_layout/callbacks_runner.rb +1 -0
  234. data/lib/alchemy/page_layout.rb +15 -12
  235. data/lib/alchemy/paths.rb +1 -1
  236. data/lib/alchemy/permissions.rb +7 -6
  237. data/lib/alchemy/resource.rb +25 -15
  238. data/lib/alchemy/resources_helper.rb +12 -18
  239. data/lib/alchemy/routing_constraints.rb +1 -1
  240. data/lib/alchemy/seeder.rb +42 -14
  241. data/lib/alchemy/shell.rb +13 -10
  242. data/lib/alchemy/taggable.rb +1 -0
  243. data/lib/alchemy/tasks/tidy.rb +4 -3
  244. data/lib/alchemy/test_support/config_stubbing.rb +1 -0
  245. data/lib/alchemy/test_support/essence_shared_examples.rb +72 -72
  246. data/lib/alchemy/test_support/factories.rb +1 -1
  247. data/lib/alchemy/test_support/factories/attachment_factory.rb +5 -5
  248. data/lib/alchemy/test_support/factories/content_factory.rb +6 -6
  249. data/lib/alchemy/test_support/factories/dummy_user_factory.rb +7 -7
  250. data/lib/alchemy/test_support/factories/element_factory.rb +9 -9
  251. data/lib/alchemy/test_support/factories/essence_file_factory.rb +3 -3
  252. data/lib/alchemy/test_support/factories/essence_page_factory.rb +3 -3
  253. data/lib/alchemy/test_support/factories/essence_picture_factory.rb +4 -4
  254. data/lib/alchemy/test_support/factories/essence_text_factory.rb +3 -3
  255. data/lib/alchemy/test_support/factories/language_factory.rb +21 -14
  256. data/lib/alchemy/test_support/factories/node_factory.rb +8 -8
  257. data/lib/alchemy/test_support/factories/page_factory.rb +15 -27
  258. data/lib/alchemy/test_support/factories/picture_factory.rb +5 -5
  259. data/lib/alchemy/test_support/factories/site_factory.rb +7 -6
  260. data/lib/alchemy/test_support/integration_helpers.rb +1 -0
  261. data/lib/alchemy/test_support/shared_contexts.rb +5 -4
  262. data/lib/alchemy/test_support/shared_uploader_examples.rb +4 -3
  263. data/lib/alchemy/tinymce.rb +15 -13
  264. data/lib/alchemy/upgrader.rb +8 -7
  265. data/lib/alchemy/upgrader/five_point_zero.rb +41 -0
  266. data/lib/alchemy/upgrader/tasks/element_views_updater.rb +4 -4
  267. data/lib/alchemy/upgrader/tasks/harden_gutentag_migrations.rb +29 -0
  268. data/lib/alchemy/version.rb +1 -1
  269. data/lib/alchemy_cms.rb +52 -50
  270. data/lib/{rails/generators → generators}/alchemy/base.rb +5 -4
  271. data/lib/{rails/generators → generators}/alchemy/elements/elements_generator.rb +13 -9
  272. data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.erb +0 -0
  273. data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.haml +0 -0
  274. data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.slim +0 -0
  275. data/lib/{rails/generators → generators}/alchemy/essence/essence_generator.rb +15 -13
  276. data/lib/generators/alchemy/essence/templates/editor.html.erb +17 -0
  277. data/lib/{rails/generators → generators}/alchemy/essence/templates/view.html.erb +0 -0
  278. data/lib/{rails/generators → generators}/alchemy/install/files/_article.html.erb +0 -0
  279. data/lib/{rails/generators → generators}/alchemy/install/files/_standard.html.erb +0 -0
  280. data/lib/{rails/generators → generators}/alchemy/install/files/alchemy.en.yml +0 -0
  281. data/lib/generators/alchemy/install/files/alchemy_admin.js +1 -0
  282. data/lib/{rails/generators → generators}/alchemy/install/files/all.css +0 -0
  283. data/lib/{rails/generators → generators}/alchemy/install/files/all.js +0 -0
  284. data/lib/{rails/generators → generators}/alchemy/install/files/application.html.erb +0 -0
  285. data/lib/{rails/generators → generators}/alchemy/install/files/article.scss +0 -0
  286. data/lib/generators/alchemy/install/install_generator.rb +169 -0
  287. data/lib/{rails/generators → generators}/alchemy/install/templates/dragonfly.rb.tt +0 -0
  288. data/lib/{rails/generators → generators}/alchemy/install/templates/elements.yml.tt +0 -0
  289. data/lib/{rails/generators → generators}/alchemy/install/templates/menus.yml.tt +0 -0
  290. data/lib/{rails/generators → generators}/alchemy/install/templates/page_layouts.yml.tt +0 -0
  291. data/lib/{rails/generators → generators}/alchemy/menus/menus_generator.rb +2 -2
  292. data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.erb +1 -4
  293. data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.haml +1 -4
  294. data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.slim +1 -4
  295. data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.erb +1 -1
  296. data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.haml +1 -1
  297. data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.slim +1 -1
  298. data/lib/{rails/generators → generators}/alchemy/module/module_generator.rb +3 -2
  299. data/lib/{rails/generators → generators}/alchemy/module/templates/ability.rb.tt +0 -0
  300. data/lib/{rails/generators → generators}/alchemy/module/templates/controller.rb.tt +0 -0
  301. data/lib/{rails/generators → generators}/alchemy/module/templates/module_config.rb.tt +0 -0
  302. data/lib/{rails/generators → generators}/alchemy/page_layouts/page_layouts_generator.rb +5 -4
  303. data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.erb +0 -0
  304. data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.haml +0 -0
  305. data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.slim +0 -0
  306. data/lib/{rails/generators → generators}/alchemy/site_layouts/site_layouts_generator.rb +4 -2
  307. data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.erb +0 -0
  308. data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.haml +0 -0
  309. data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.slim +0 -0
  310. data/lib/{rails/generators → generators}/alchemy/views/views_generator.rb +7 -6
  311. data/lib/kaminari/scoped_pagination_url_helper.rb +1 -0
  312. data/lib/tasks/alchemy/db.rake +3 -19
  313. data/lib/tasks/alchemy/install.rake +5 -48
  314. data/lib/tasks/alchemy/tidy.rake +9 -8
  315. data/lib/tasks/alchemy/upgrade.rake +18 -116
  316. data/package.json +45 -0
  317. data/package/admin.js +14 -0
  318. data/package/src/__tests__/i18n.spec.js +70 -0
  319. data/package/src/i18n.js +48 -0
  320. data/package/src/node_tree.js +72 -0
  321. data/package/src/translations.js +32 -0
  322. data/package/src/utils/__tests__/ajax.spec.js +124 -0
  323. data/package/src/utils/__tests__/events.spec.js +38 -0
  324. data/package/src/utils/ajax.js +48 -0
  325. data/package/src/utils/events.js +16 -0
  326. data/vendor/assets/fonts/fa-regular-400.eot +0 -0
  327. data/vendor/assets/fonts/fa-regular-400.svg +798 -358
  328. data/vendor/assets/fonts/fa-regular-400.ttf +0 -0
  329. data/vendor/assets/fonts/fa-regular-400.woff +0 -0
  330. data/vendor/assets/fonts/fa-regular-400.woff2 +0 -0
  331. data/vendor/assets/fonts/fa-solid-900.eot +0 -0
  332. data/vendor/assets/fonts/fa-solid-900.svg +4933 -1408
  333. data/vendor/assets/fonts/fa-solid-900.ttf +0 -0
  334. data/vendor/assets/fonts/fa-solid-900.woff +0 -0
  335. data/vendor/assets/fonts/fa-solid-900.woff2 +0 -0
  336. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.nestedSortable.js +1 -2
  337. data/vendor/assets/stylesheets/fontawesome/_core.scss +5 -0
  338. data/vendor/assets/stylesheets/fontawesome/_fixed-width.scss +1 -1
  339. data/vendor/assets/stylesheets/fontawesome/_icons.scss +651 -2
  340. data/vendor/assets/stylesheets/fontawesome/_mixins.scss +0 -1
  341. data/vendor/assets/stylesheets/fontawesome/_rotated-flipped.scss +3 -2
  342. data/vendor/assets/stylesheets/fontawesome/_stacked.scss +1 -1
  343. data/vendor/assets/stylesheets/fontawesome/_variables.scss +662 -9
  344. data/vendor/assets/stylesheets/fontawesome/fontawesome.scss +2 -2
  345. data/vendor/assets/stylesheets/fontawesome/regular.scss +23 -0
  346. data/vendor/assets/stylesheets/fontawesome/solid.scss +24 -0
  347. metadata +112 -88
  348. data/app/assets/javascripts/alchemy/alchemy.i18n.js.coffee +0 -32
  349. data/app/assets/javascripts/alchemy/alchemy.node_tree.js +0 -66
  350. data/app/assets/javascripts/alchemy/alchemy.translations.js.coffee +0 -29
  351. data/app/assets/javascripts/alchemy/alchemy.utils.js +0 -45
  352. data/app/helpers/alchemy/essences_helper.rb +0 -119
  353. data/app/models/concerns/alchemy/content_touching.rb +0 -23
  354. data/app/serializers/alchemy/legacy_element_serializer.rb +0 -15
  355. data/app/views/alchemy/admin/contents/_missing.html.erb +0 -17
  356. data/app/views/alchemy/admin/pages/_menu_fields.html.erb +0 -37
  357. data/app/views/alchemy/admin/pages/configure_external.html.erb +0 -32
  358. data/app/views/alchemy/elements/_editor_not_found.html.erb +0 -4
  359. data/app/views/alchemy/navigation/_image_link.html.erb +0 -14
  360. data/app/views/alchemy/navigation/_link.html.erb +0 -19
  361. data/app/views/alchemy/navigation/_renderer.html.erb +0 -29
  362. data/db/migrate/20180226123013_alchemy_four_point_zero.rb +0 -363
  363. data/db/migrate/20180227224537_migrate_tags_to_gutentag.rb +0 -41
  364. data/db/migrate/20180519204655_add_fixed_to_alchemy_elements.rb +0 -6
  365. data/db/migrate/20191016073858_create_alchemy_essence_pages.rb +0 -8
  366. data/db/migrate/20191029212236_create_alchemy_nodes.rb +0 -24
  367. data/db/migrate/20200226081535_add_site_id_to_alchemy_nodes.rb +0 -15
  368. data/lib/alchemy/ssl_protection.rb +0 -34
  369. data/lib/alchemy/tasks/helpers.rb +0 -81
  370. data/lib/alchemy/test_support/controller_requests.rb +0 -93
  371. data/lib/alchemy/upgrader/four_point_four.rb +0 -52
  372. data/lib/alchemy/upgrader/four_point_one.rb +0 -42
  373. data/lib/alchemy/upgrader/four_point_six.rb +0 -50
  374. data/lib/alchemy/upgrader/four_point_two.rb +0 -85
  375. data/lib/alchemy/upgrader/tasks/cells_migration.rb +0 -43
  376. data/lib/alchemy/upgrader/tasks/cells_upgrader.rb +0 -148
  377. data/lib/alchemy/upgrader/tasks/element_partial_name_variable_updater.rb +0 -28
  378. data/lib/alchemy/upgrader/tasks/harden_acts_as_taggable_on_migrations.rb +0 -27
  379. data/lib/alchemy/upgrader/tasks/picture_gallery_migration.rb +0 -65
  380. data/lib/alchemy/upgrader/tasks/picture_gallery_upgrader.rb +0 -210
  381. data/lib/rails/generators/alchemy/essence/templates/editor.html.erb +0 -15
  382. data/lib/rails/generators/alchemy/install/install_generator.rb +0 -60
  383. data/lib/tasks/alchemy/convert.rake +0 -97
  384. data/vendor/assets/javascripts/sortable/Sortable.min.js +0 -2
  385. data/vendor/assets/stylesheets/fontawesome/fa-regular.scss +0 -22
  386. data/vendor/assets/stylesheets/fontawesome/fa-solid.scss +0 -23
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../base'
3
+ require_relative "../base"
4
4
 
5
5
  module Alchemy
6
6
  module Generators
7
7
  class MenusGenerator < Base
8
8
  desc "This generator generates Alchemy menu partials."
9
- source_root File.expand_path('templates', __dir__)
9
+ source_root File.expand_path("templates", __dir__)
10
10
 
11
11
  def create_partials
12
12
  menus = Alchemy::Node.available_menu_names
@@ -9,10 +9,7 @@
9
9
  rel: node.nofollow? ? 'nofollow' : nil %>
10
10
  <%% if node.children.any? %>
11
11
  <ul class="dropdown-menu">
12
- <%%= render partial: options[:node_partial_name],
13
- collection: node.children.includes(:page, :children),
14
- locals: { options: options },
15
- as: 'node' %>
12
+ <%%= render node.children.includes(:page, :children), as: 'node' %>
16
13
  </ul>
17
14
  <%% end %>
18
15
  <%% end %>
@@ -10,7 +10,4 @@
10
10
  rel: node.nofollow? ? 'nofollow' : nil
11
11
  - if node.children.any?
12
12
  %ul.dropdown-menu
13
- = render partial: options[:node_partial_name],
14
- collection: node.children.includes(:page, :children),
15
- locals: { options: options },
16
- as: 'node'
13
+ = render node.children.includes(:page, :children), as: 'node'
@@ -10,7 +10,4 @@
10
10
  rel: node.nofollow? ? 'nofollow' : nil
11
11
  - if node.children.any?
12
12
  ul.dropdown-menu
13
- = render partial: options[:node_partial_name],
14
- collection: node.children.includes(:page, :children),
15
- locals: { options: options },
16
- as: 'node'
13
+ = render node.children.includes(:page, :children), as: 'node'
@@ -1,6 +1,6 @@
1
1
  <%% cache menu do %>
2
2
  <ul class="nav">
3
- <%%= render partial: options[:node_partial_name],
3
+ <%%= render partial: menu.to_partial_path,
4
4
  collection: menu.children.includes(:page, :children),
5
5
  locals: { options: options },
6
6
  as: 'node' %>
@@ -1,6 +1,6 @@
1
1
  - cache menu do
2
2
  %ul.nav
3
- = render partial: options[:node_partial_name],
3
+ = render partial: menu.to_partial_path,
4
4
  collection: menu.children.includes(:page, :children),
5
5
  locals: { options: options },
6
6
  as: 'node'
@@ -1,6 +1,6 @@
1
1
  - cache menu do
2
2
  ul.nav
3
- = render partial: options[:node_partial_name],
3
+ = render partial: menu.to_partial_path,
4
4
  collection: menu.children.includes(:page, :children),
5
5
  locals: { options: options },
6
6
  as: 'node'
@@ -1,11 +1,12 @@
1
- require 'rails'
1
+ # frozen_string_literal: true
2
+ require "rails"
2
3
 
3
4
  module Alchemy
4
5
  module Generators
5
6
  class ModuleGenerator < ::Rails::Generators::Base
6
7
  desc "This generator generates an Alchemy module for you."
7
8
  argument :module_name, banner: "your_module_name"
8
- source_root File.expand_path('templates', __dir__)
9
+ source_root File.expand_path("templates", __dir__)
9
10
 
10
11
  def init
11
12
  @module_name = module_name.downcase
@@ -1,16 +1,17 @@
1
- require_relative '../base'
1
+ # frozen_string_literal: true
2
+ require_relative "../base"
2
3
 
3
4
  module Alchemy
4
5
  module Generators
5
6
  class PageLayoutsGenerator < Base
6
7
  desc "This generator generates your page_layouts view partials."
7
- source_root File.expand_path('templates', __dir__)
8
+ source_root File.expand_path("templates", __dir__)
8
9
 
9
10
  def create_partials
10
- @page_layouts = load_alchemy_yaml('page_layouts.yml')
11
+ @page_layouts = load_alchemy_yaml("page_layouts.yml")
11
12
  return unless @page_layouts
13
+
12
14
  @page_layouts.each do |page_layout|
13
- next if page_layout['redirects_to_external']
14
15
  @page_layout_name = page_layout["name"].underscore
15
16
  conditional_template "layout.html.#{template_engine}", "#{page_layouts_dir}/_#{@page_layout_name}.html.#{template_engine}"
16
17
  end
@@ -1,14 +1,16 @@
1
- require_relative '../base'
1
+ # frozen_string_literal: true
2
+ require_relative "../base"
2
3
 
3
4
  module Alchemy
4
5
  module Generators
5
6
  class SiteLayoutsGenerator < Base
6
7
  desc "This generator generates your site layouts view partials."
7
- source_root File.expand_path('templates', __dir__)
8
+ source_root File.expand_path("templates", __dir__)
8
9
 
9
10
  def create_partials
10
11
  @sites = Alchemy::Site.all
11
12
  return unless @sites
13
+
12
14
  @sites.each do |site|
13
15
  @site_name = site.name.parameterize.underscore
14
16
  conditional_template "layout.html.#{template_engine}", "#{site_layouts_dir}/_#{@site_name}.html.#{template_engine}"
@@ -1,4 +1,5 @@
1
- require 'rails'
1
+ # frozen_string_literal: true
2
+ require "rails"
2
3
 
3
4
  module Alchemy
4
5
  module Generators
@@ -21,17 +22,17 @@ module Alchemy
21
22
 
22
23
  def copy_alchemy_views
23
24
  views_to_copy.each do |dir|
24
- directory dir, Rails.root.join('app/views/alchemy', dir)
25
+ directory dir, Rails.root.join("app/views/alchemy", dir)
25
26
  end
26
27
  end
27
28
 
28
29
  private
29
30
 
30
31
  def views_to_copy
31
- if @options['except']
32
- ALCHEMY_VIEWS - @options['except']
33
- elsif @options['only']
34
- ALCHEMY_VIEWS.select { |v| @options['only'].include?(v) }
32
+ if @options["except"]
33
+ ALCHEMY_VIEWS - @options["except"]
34
+ elsif @options["only"]
35
+ ALCHEMY_VIEWS.select { |v| @options["only"].include?(v) }
35
36
  else
36
37
  ALCHEMY_VIEWS
37
38
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # A Kaminari patch for scoping the urls.
2
3
  Kaminari::Helpers::Tag.class_eval do
3
4
  def page_url_for(page)
@@ -1,28 +1,12 @@
1
- require 'shellwords'
2
- require 'alchemy/seeder'
3
- require 'alchemy/tasks/helpers'
1
+ # frozen_string_literal: true
2
+
3
+ require "alchemy/seeder"
4
4
 
5
5
  namespace :alchemy do
6
6
  namespace :db do
7
- include Alchemy::Tasks::Helpers
8
-
9
7
  desc "Seeds the database with Alchemy defaults"
10
8
  task seed: [:environment] do
11
9
  Alchemy::Seeder.seed!
12
10
  end
13
-
14
- desc "Dumps the database to STDOUT (Pass DUMP_FILENAME to store the dump into a file)."
15
- task dump: :environment do
16
- dump_store = ENV['DUMP_FILENAME'] ? " > #{ENV['DUMP_FILENAME']}" : ""
17
- dump_cmd = database_dump_command(database_config['adapter'])
18
- system "#{dump_cmd}#{dump_store}"
19
- end
20
-
21
- desc "Imports the database from STDIN (Pass DUMP_FILENAME to read the dump from file)."
22
- task import: :environment do
23
- dump_store = ENV['DUMP_FILENAME'] ? "cat #{ENV['DUMP_FILENAME']}" : "echo #{Shellwords.escape(STDIN.read)}"
24
- import_cmd = database_import_command(database_config['adapter'])
25
- system "#{dump_store} | #{import_cmd}"
26
- end
27
11
  end
28
12
  end
@@ -1,58 +1,15 @@
1
- require 'thor'
2
-
3
- class Alchemy::InstallTask < Thor
4
- include Thor::Actions
5
-
6
- no_tasks do
7
- def inject_routes
8
- mountpoint = ask "\nAt which path do you want to mount Alchemy CMS at? (DEFAULT: At root path '/')"
9
- mountpoint = "/" if mountpoint.empty?
10
- sentinel = /\.routes\.draw do(?:\s*\|map\|)?\s*$/
11
- inject_into_file "./config/routes.rb", "\n mount Alchemy::Engine => '#{mountpoint}'\n", { after: sentinel, verbose: true }
12
- end
13
-
14
- def set_primary_language
15
- code = ask "\nWhat's the language code of your site's primary language? (DEFAULT: en)"
16
- code = "en" if code.empty?
17
- name = ask "What's the name of your site's primary language? (DEFAULT: English)"
18
- name = "English" if name.empty?
19
- gsub_file "./config/alchemy/config.yml", /default_language:\n\s\scode:\sen\n\s\sname:\sEnglish/m do
20
- "default_language:\n code: #{code}\n name: #{name}"
21
- end
22
- end
23
-
24
- def inject_seeder
25
- append_file "./db/seeds.rb", "Alchemy::Seeder.seed!\n"
26
- end
27
- end
28
- end
1
+ # frozen_string_literal: true
29
2
 
30
3
  namespace :alchemy do
31
4
  desc "Installs Alchemy CMS into your app."
32
5
  task :install do
33
- install_helper = Alchemy::InstallTask.new
34
-
35
- puts "\nAlchemy Installer"
36
- puts "-----------------"
37
-
38
- Rake::Task["alchemy:mount"].invoke
39
- system("rails g alchemy:install") || exit!(1)
40
- install_helper.set_primary_language
41
- Rake::Task["db:create"].invoke
42
- # We can't invoke this rake task, because Rails will use wrong engine names otherwise
43
- `bundle exec rake railties:install:migrations`
44
- Rake::Task["db:migrate"].invoke
45
- install_helper.inject_seeder
46
- Rake::Task["db:seed"].invoke
47
-
48
- puts "\nAlchemy successfully installed."
49
- puts "\nNow start the server with:"
50
- puts "\n$ bin/rails server"
51
- puts "\nand point your browser to http://localhost:3000/admin and follow the onscreen instructions to finalize the installation."
6
+ require "generators/alchemy/install/install_generator"
7
+ Alchemy::Generators::InstallGenerator.start
52
8
  end
53
9
 
54
10
  desc "Mounts Alchemy into your routes."
55
11
  task :mount do
56
- Alchemy::InstallTask.new.inject_routes
12
+ require "alchemy/install/tasks"
13
+ Alchemy::InstallTasks.new.inject_routes
57
14
  end
58
15
  end
@@ -1,12 +1,13 @@
1
- require 'alchemy/tasks/tidy'
1
+ # frozen_string_literal: true
2
+ require "alchemy/tasks/tidy"
2
3
 
3
4
  namespace :alchemy do
4
5
  namespace :tidy do
5
6
  desc "Tidy up Alchemy database."
6
7
  task :up do
7
- Rake::Task['alchemy:tidy:element_positions'].invoke
8
- Rake::Task['alchemy:tidy:content_positions'].invoke
9
- Rake::Task['alchemy:tidy:remove_orphaned_records'].invoke
8
+ Rake::Task["alchemy:tidy:element_positions"].invoke
9
+ Rake::Task["alchemy:tidy:content_positions"].invoke
10
+ Rake::Task["alchemy:tidy:remove_orphaned_records"].invoke
10
11
  end
11
12
 
12
13
  desc "Fixes element positions."
@@ -21,8 +22,8 @@ namespace :alchemy do
21
22
 
22
23
  desc "Remove orphaned records (elements & contents)."
23
24
  task remove_orphaned_records: [:environment] do
24
- Rake::Task['alchemy:tidy:remove_orphaned_elements'].invoke
25
- Rake::Task['alchemy:tidy:remove_orphaned_contents'].invoke
25
+ Rake::Task["alchemy:tidy:remove_orphaned_elements"].invoke
26
+ Rake::Task["alchemy:tidy:remove_orphaned_contents"].invoke
26
27
  end
27
28
 
28
29
  desc "Remove orphaned elements."
@@ -39,7 +40,7 @@ namespace :alchemy do
39
40
  task elements_usage: :environment do
40
41
  puts "\n"
41
42
  removable_elements = []
42
- names = Alchemy::Element.definitions.map { |e| e['name'] }
43
+ names = Alchemy::Element.definitions.map { |e| e["name"] }
43
44
  longest_name = names.max_by { |name| name.to_s.length }.length + 1
44
45
  names.sort.each do |name|
45
46
  names = Alchemy::Element.where(name: name)
@@ -48,7 +49,7 @@ namespace :alchemy do
48
49
  if count.zero?
49
50
  removable_elements.push(name)
50
51
  else
51
- spacer = ' ' * (longest_name - name.length)
52
+ spacer = " " * (longest_name - name.length)
52
53
  puts "#{name}#{spacer}is used\t#{count}\ttime(s) on\t#{page_count}\tpublic page(s)"
53
54
  end
54
55
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
-
3
2
  require "alchemy/upgrader"
4
3
  require "alchemy/version"
5
4
 
@@ -7,10 +6,7 @@ namespace :alchemy do
7
6
  desc "Upgrades your app to AlchemyCMS v#{Alchemy::VERSION}."
8
7
  task upgrade: [
9
8
  "alchemy:upgrade:prepare",
10
- "alchemy:upgrade:4.1:run", "alchemy:upgrade:4.1:todo",
11
- "alchemy:upgrade:4.2:run", "alchemy:upgrade:4.2:todo",
12
- "alchemy:upgrade:4.4:run", "alchemy:upgrade:4.4:todo",
13
- "alchemy:upgrade:4.6:run", "alchemy:upgrade:4.6:todo",
9
+ "alchemy:upgrade:5.0:run",
14
10
  ] do
15
11
  Alchemy::Upgrader.display_todos
16
12
  end
@@ -26,7 +22,6 @@ namespace :alchemy do
26
22
  task database: [
27
23
  "alchemy:install:migrations",
28
24
  "db:migrate",
29
- "alchemy:db:seed",
30
25
  ]
31
26
 
32
27
  desc "Alchemy Upgrader: Copy configuration file."
@@ -34,127 +29,34 @@ namespace :alchemy do
34
29
  Alchemy::Upgrader.copy_new_config_file
35
30
  end
36
31
 
37
- task fix_picture_format: [:environment] do
38
- Alchemy::Picture.find_each do |picture|
39
- picture.update_column(:image_file_format, picture.image_file_format.to_s.chomp)
40
- end
41
- end
42
-
43
- desc "Upgrade Alchemy to v4.1"
44
- task "4.1" => [
45
- "alchemy:upgrade:prepare",
46
- "alchemy:upgrade:4.1:run",
47
- "alchemy:upgrade:4.1:todo",
48
- ] do
49
- Alchemy::Upgrader.display_todos
50
- end
51
-
52
- namespace "4.1" do
53
- task run: ["alchemy:upgrade:4.1:harden_acts_as_taggable_on_migrations"]
54
-
55
- desc "Harden acts_as_taggable_on migrations"
56
- task harden_acts_as_taggable_on_migrations: [:environment] do
57
- Alchemy::Upgrader::FourPointOne.harden_acts_as_taggable_on_migrations
58
- end
59
-
60
- task :todo do
61
- Alchemy::Upgrader::FourPointOne.alchemy_4_1_todos
62
- end
63
- end
64
-
65
- desc "Upgrade Alchemy to v4.2"
66
- task "4.2" => [
67
- "alchemy:upgrade:prepare",
68
- "alchemy:upgrade:4.2:run",
69
- "alchemy:upgrade:4.2:todo",
70
- ] do
71
- Alchemy::Upgrader.display_todos
72
- end
73
-
74
- namespace "4.2" do
75
- task run: [
76
- "alchemy:upgrade:4.2:convert_picture_galleries",
77
- "alchemy:upgrade:4.2:migrate_picture_galleries",
78
- "alchemy:upgrade:4.2:convert_cells",
79
- "alchemy:upgrade:4.2:migrate_cells",
80
- "alchemy:upgrade:4.2:update_element_partial_name_variable",
81
- ]
82
-
83
- desc "Convert `picture_gallery` element definitions to `nestable_elements`."
84
- task convert_picture_galleries: [:environment] do
85
- Alchemy::Upgrader::FourPointTwo.convert_picture_galleries
86
- end
87
-
88
- desc "Migrate `picture_gallery` elements to `nestable_elements`."
89
- task migrate_picture_galleries: [:environment] do
90
- Alchemy::Upgrader::FourPointTwo.migrate_picture_galleries
91
- end
92
-
93
- desc "Convert cells config to fixed nestable elements."
94
- task convert_cells: [:environment] do
95
- Alchemy::Upgrader::FourPointTwo.convert_cells
96
- end
97
-
98
- desc "Migrate existing cells to fixed nestable elements."
99
- task migrate_cells: ["alchemy:install:migrations", "db:migrate"] do
100
- Alchemy::Upgrader::FourPointTwo.migrate_cells
101
- end
102
-
103
- desc "Update element views to use element partial name variable."
104
- task :update_element_partial_name_variable do
105
- Alchemy::Upgrader::FourPointTwo.update_element_views_variable_name
106
- end
107
-
108
- task :todo do
109
- Alchemy::Upgrader::FourPointTwo.alchemy_4_2_todos
110
- end
111
- end
112
-
113
- desc "Upgrade Alchemy to v4.4"
114
- task "4.4" => [
32
+ desc "Upgrade Alchemy to v5.0"
33
+ task "5.0" => [
115
34
  "alchemy:upgrade:prepare",
116
- "alchemy:upgrade:4.4:run",
117
- "alchemy:upgrade:4.4:todo",
35
+ "alchemy:upgrade:5.0:run",
118
36
  ] do
119
37
  Alchemy::Upgrader.display_todos
120
38
  end
121
39
 
122
- namespace "4.4" do
123
- task run: [
124
- "alchemy:upgrade:4.4:rename_element_views",
125
- "alchemy:upgrade:4.4:update_local_variable",
40
+ namespace "5.0" do
41
+ task "run" => [
42
+ "alchemy:upgrade:5.0:install_gutentag_migrations",
43
+ "alchemy:upgrade:5.0:remove_layout_roots",
44
+ "alchemy:upgrade:5.0:remove_root_page",
126
45
  ]
127
46
 
128
- desc "Remove '_view' suffix from element views."
129
- task rename_element_views: [:environment] do
130
- Alchemy::Upgrader::FourPointFour.rename_element_views
131
- end
132
-
133
- desc "Update element views local variable to element name."
134
- task update_local_variable: [:environment] do
135
- Alchemy::Upgrader::FourPointFour.update_local_variable
136
- end
137
-
138
- task :todo do
139
- Alchemy::Upgrader::FourPointFour.alchemy_4_4_todos
47
+ desc "Install Gutentag migrations"
48
+ task install_gutentag_migrations: [:environment] do
49
+ Alchemy::Upgrader::FivePointZero.install_gutentag_migrations
140
50
  end
141
- end
142
-
143
- desc "Upgrade Alchemy to v4.6"
144
- task "4.6" => [
145
- "alchemy:upgrade:prepare",
146
- ]
147
-
148
- namespace "4.6" do
149
- task run: []
150
51
 
151
- desc "Move child pages of invisible pages to visible parent."
152
- task restructure_page_tree: [:environment] do
153
- Alchemy::Upgrader::FourPointSix.restructure_page_tree
52
+ desc "Remove layout root pages"
53
+ task remove_layout_roots: [:environment] do
54
+ Alchemy::Upgrader::FivePointZero.remove_layout_roots
154
55
  end
155
56
 
156
- task :todo do
157
- Alchemy::Upgrader::FourPointSix.alchemy_4_6_todos
57
+ desc "Remove root page"
58
+ task remove_root_page: [:environment] do
59
+ Alchemy::Upgrader::FivePointZero.remove_root_page
158
60
  end
159
61
  end
160
62
  end