alchemy_cms 4.6.7 → 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 (384) 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 -32
  9. data/Gemfile +24 -22
  10. data/README.md +31 -19
  11. data/Rakefile +10 -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/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/assets/stylesheets/tinymce/skins/alchemy/content.min.css.scss +3 -3
  29. data/app/assets/stylesheets/tinymce/skins/alchemy/skin.min.css.scss +7 -7
  30. data/app/controllers/alchemy/admin/attachments_controller.rb +8 -7
  31. data/app/controllers/alchemy/admin/base_controller.rb +16 -42
  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 +50 -62
  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 +36 -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 +3 -3
  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 +2 -1
  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 +21 -19
  81. data/app/models/alchemy/base_record.rb +2 -5
  82. data/app/models/alchemy/content/factory.rb +24 -31
  83. data/app/models/alchemy/content.rb +33 -38
  84. data/app/models/alchemy/element/definitions.rb +4 -4
  85. data/app/models/alchemy/element/element_contents.rb +9 -6
  86. data/app/models/alchemy/element/element_essences.rb +4 -3
  87. data/app/models/alchemy/element/presenters.rb +3 -2
  88. data/app/models/alchemy/element.rb +46 -54
  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 +4 -4
  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 +17 -16
  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/code.rb +4 -4
  104. data/app/models/alchemy/language.rb +21 -35
  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 +28 -5
  108. data/app/models/alchemy/page/fixed_attributes.rb +3 -2
  109. data/app/models/alchemy/page/page_elements.rb +35 -44
  110. data/app/models/alchemy/page/page_naming.rb +20 -70
  111. data/app/models/alchemy/page/page_natures.rb +7 -34
  112. data/app/models/alchemy/page/page_scopes.rb +23 -29
  113. data/app/models/alchemy/page/url_path.rb +0 -2
  114. data/app/models/alchemy/page.rb +47 -128
  115. data/app/models/alchemy/picture/transformations.rb +9 -7
  116. data/app/models/alchemy/picture/url.rb +5 -5
  117. data/app/models/alchemy/picture.rb +19 -28
  118. data/app/models/alchemy/site/layout.rb +2 -2
  119. data/app/models/alchemy/site.rb +6 -36
  120. data/app/models/concerns/alchemy/touch_elements.rb +24 -0
  121. data/app/serializers/alchemy/content_serializer.rb +0 -3
  122. data/app/serializers/alchemy/essence_boolean_serializer.rb +3 -3
  123. data/app/serializers/alchemy/essence_date_serializer.rb +3 -3
  124. data/app/serializers/alchemy/essence_file_serializer.rb +4 -2
  125. data/app/serializers/alchemy/essence_html_serializer.rb +3 -3
  126. data/app/serializers/alchemy/essence_link_serializer.rb +3 -3
  127. data/app/serializers/alchemy/essence_picture_serializer.rb +5 -4
  128. data/app/serializers/alchemy/essence_richtext_serializer.rb +3 -3
  129. data/app/serializers/alchemy/essence_select_serializer.rb +3 -3
  130. data/app/serializers/alchemy/essence_text_serializer.rb +5 -4
  131. data/app/serializers/alchemy/node_serializer.rb +2 -0
  132. data/app/serializers/alchemy/page_tree_serializer.rb +9 -13
  133. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +1 -2
  134. data/app/views/alchemy/admin/attachments/_file_to_assign.html.erb +1 -2
  135. data/app/views/alchemy/admin/attachments/_files_list.html.erb +4 -4
  136. data/app/views/alchemy/admin/contents/create.js.erb +1 -3
  137. data/app/views/alchemy/admin/elements/_element.html.erb +9 -18
  138. data/app/views/alchemy/admin/elements/create.js.erb +1 -1
  139. data/app/views/alchemy/admin/elements/fold.js.erb +1 -1
  140. data/app/views/alchemy/admin/elements/index.html.erb +3 -3
  141. data/app/views/alchemy/admin/essence_files/assign.js.erb +1 -6
  142. data/app/views/alchemy/admin/essence_files/edit.html.erb +1 -1
  143. data/app/views/alchemy/admin/essence_pictures/assign.js.erb +1 -7
  144. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +1 -1
  145. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +7 -7
  146. data/app/views/alchemy/admin/essence_pictures/update.js.erb +1 -1
  147. data/app/views/alchemy/admin/languages/_form.html.erb +5 -5
  148. data/app/views/alchemy/admin/languages/_table.html.erb +3 -3
  149. data/app/views/alchemy/admin/languages/edit.html.erb +1 -0
  150. data/app/views/alchemy/admin/languages/index.html.erb +23 -4
  151. data/app/views/alchemy/admin/languages/new.html.erb +1 -0
  152. data/app/views/alchemy/admin/layoutpages/index.html.erb +3 -3
  153. data/app/views/alchemy/admin/nodes/_form.html.erb +18 -15
  154. data/app/views/alchemy/admin/nodes/_node.html.erb +1 -5
  155. data/app/views/alchemy/admin/nodes/index.html.erb +3 -4
  156. data/app/views/alchemy/admin/pages/_create_language_form.html.erb +0 -8
  157. data/app/views/alchemy/admin/pages/_form.html.erb +0 -1
  158. data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -0
  159. data/app/views/alchemy/admin/pages/_page.html.erb +11 -19
  160. data/app/views/alchemy/admin/pages/_page_infos.html.erb +0 -4
  161. data/app/views/alchemy/admin/pages/edit.html.erb +1 -1
  162. data/app/views/alchemy/admin/pages/info.html.erb +0 -9
  163. data/app/views/alchemy/admin/pages/unlock.js.erb +13 -6
  164. data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +0 -2
  165. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +1 -5
  166. data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +1 -1
  167. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -2
  168. data/app/views/alchemy/admin/resources/_resource.html.erb +1 -1
  169. data/app/views/alchemy/admin/resources/_table.html.erb +2 -2
  170. data/app/views/alchemy/admin/sites/_form.html.erb +8 -0
  171. data/app/views/alchemy/admin/sites/edit.html.erb +1 -0
  172. data/app/views/alchemy/admin/sites/index.html.erb +21 -9
  173. data/app/views/alchemy/admin/sites/new.html.erb +1 -0
  174. data/app/views/alchemy/admin/tags/index.html.erb +2 -2
  175. data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +10 -12
  176. data/app/views/alchemy/essences/_essence_date_editor.html.erb +11 -8
  177. data/app/views/alchemy/essences/_essence_file_editor.html.erb +16 -17
  178. data/app/views/alchemy/essences/_essence_html_editor.html.erb +8 -5
  179. data/app/views/alchemy/essences/_essence_link_editor.html.erb +18 -15
  180. data/app/views/alchemy/essences/_essence_node_editor.html.erb +27 -0
  181. data/app/views/alchemy/essences/_essence_node_view.html.erb +1 -0
  182. data/app/views/alchemy/essences/_essence_page_editor.html.erb +14 -11
  183. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +22 -20
  184. data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +10 -7
  185. data/app/views/alchemy/essences/_essence_select_editor.html.erb +12 -16
  186. data/app/views/alchemy/essences/_essence_text_editor.html.erb +18 -17
  187. data/app/views/alchemy/essences/shared/_essence_picture_tools.html.erb +6 -11
  188. data/app/views/alchemy/pages/show.rss.builder +3 -2
  189. data/app/views/layouts/alchemy/admin.html.erb +1 -0
  190. data/babel.config.js +12 -0
  191. data/bin/rails +5 -4
  192. data/config/alchemy/config.yml +15 -18
  193. data/config/brakeman.ignore +1 -1
  194. data/config/initializers/assets.rb +2 -1
  195. data/config/initializers/dragonfly.rb +2 -1
  196. data/config/initializers/mime_types.rb +1 -0
  197. data/config/initializers/mini_profiler.rb +3 -2
  198. data/config/initializers/simple_form.rb +6 -6
  199. data/config/locales/alchemy.en.yml +23 -8
  200. data/config/routes.rb +25 -24
  201. data/config/spring.rb +3 -2
  202. data/db/migrate/20200226213334_alchemy_four_point_four.rb +313 -0
  203. data/db/migrate/20200423073425_create_alchemy_essence_nodes.rb +11 -0
  204. data/db/migrate/20200504210159_remove_site_id_from_nodes.rb +28 -0
  205. data/db/migrate/20200505215518_add_language_id_foreign_key_to_alchemy_pages.rb +8 -0
  206. data/db/migrate/20200511113603_add_menu_type_to_alchemy_nodes.rb +27 -0
  207. data/db/migrate/20200514091507_make_page_layoutpage_null_false.rb +6 -0
  208. data/db/migrate/20200519073500_remove_visible_from_alchemy_pages.rb +24 -0
  209. data/lib/alchemy/admin/locale.rb +3 -1
  210. data/lib/alchemy/admin/preview_url.rb +64 -0
  211. data/lib/alchemy/auth_accessors.rb +8 -7
  212. data/lib/alchemy/cache_digests/template_tracker.rb +5 -4
  213. data/lib/alchemy/config.rb +1 -5
  214. data/lib/alchemy/configuration_methods.rb +3 -1
  215. data/lib/alchemy/controller_actions.rb +6 -5
  216. data/lib/alchemy/deprecation.rb +2 -1
  217. data/lib/alchemy/elements_finder.rb +5 -5
  218. data/lib/alchemy/engine.rb +22 -14
  219. data/lib/alchemy/errors.rb +0 -7
  220. data/lib/alchemy/essence.rb +17 -16
  221. data/lib/alchemy/filetypes.rb +5 -5
  222. data/lib/alchemy/forms/builder.rb +4 -4
  223. data/lib/alchemy/hints.rb +1 -1
  224. data/lib/alchemy/i18n.rb +2 -1
  225. data/lib/alchemy/modules.rb +12 -12
  226. data/lib/alchemy/name_conversions.rb +5 -5
  227. data/lib/alchemy/on_page_layout/callbacks_runner.rb +1 -0
  228. data/lib/alchemy/page_layout.rb +15 -12
  229. data/lib/alchemy/paths.rb +1 -1
  230. data/lib/alchemy/permissions.rb +7 -6
  231. data/lib/alchemy/resource.rb +25 -17
  232. data/lib/alchemy/resources_helper.rb +12 -18
  233. data/lib/alchemy/routing_constraints.rb +1 -1
  234. data/lib/alchemy/seeder.rb +42 -14
  235. data/lib/alchemy/shell.rb +13 -10
  236. data/lib/alchemy/taggable.rb +1 -0
  237. data/lib/alchemy/tasks/tidy.rb +4 -3
  238. data/lib/alchemy/test_support/config_stubbing.rb +1 -0
  239. data/lib/alchemy/test_support/essence_shared_examples.rb +72 -72
  240. data/lib/alchemy/test_support/factories/attachment_factory.rb +5 -5
  241. data/lib/alchemy/test_support/factories/content_factory.rb +6 -6
  242. data/lib/alchemy/test_support/factories/dummy_user_factory.rb +7 -7
  243. data/lib/alchemy/test_support/factories/element_factory.rb +9 -9
  244. data/lib/alchemy/test_support/factories/essence_file_factory.rb +3 -3
  245. data/lib/alchemy/test_support/factories/essence_page_factory.rb +3 -3
  246. data/lib/alchemy/test_support/factories/essence_picture_factory.rb +4 -4
  247. data/lib/alchemy/test_support/factories/essence_text_factory.rb +3 -3
  248. data/lib/alchemy/test_support/factories/language_factory.rb +16 -14
  249. data/lib/alchemy/test_support/factories/node_factory.rb +8 -8
  250. data/lib/alchemy/test_support/factories/page_factory.rb +15 -27
  251. data/lib/alchemy/test_support/factories/picture_factory.rb +5 -5
  252. data/lib/alchemy/test_support/factories/site_factory.rb +7 -6
  253. data/lib/alchemy/test_support/factories.rb +1 -1
  254. data/lib/alchemy/test_support/integration_helpers.rb +1 -0
  255. data/lib/alchemy/test_support/shared_contexts.rb +5 -4
  256. data/lib/alchemy/test_support/shared_uploader_examples.rb +4 -3
  257. data/lib/alchemy/tinymce.rb +15 -13
  258. data/lib/alchemy/upgrader/five_point_zero.rb +41 -0
  259. data/lib/alchemy/upgrader/tasks/element_views_updater.rb +4 -4
  260. data/lib/alchemy/upgrader/tasks/harden_gutentag_migrations.rb +29 -0
  261. data/lib/alchemy/upgrader.rb +8 -7
  262. data/lib/alchemy/userstamp.rb +1 -1
  263. data/lib/alchemy/version.rb +1 -1
  264. data/lib/alchemy_cms.rb +52 -51
  265. data/lib/{rails/generators → generators}/alchemy/base.rb +5 -4
  266. data/lib/{rails/generators → generators}/alchemy/elements/elements_generator.rb +13 -9
  267. data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.erb +0 -0
  268. data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.haml +0 -0
  269. data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.slim +0 -0
  270. data/lib/{rails/generators → generators}/alchemy/essence/essence_generator.rb +15 -13
  271. data/lib/generators/alchemy/essence/templates/editor.html.erb +17 -0
  272. data/lib/{rails/generators → generators}/alchemy/essence/templates/view.html.erb +0 -0
  273. data/lib/{rails/generators → generators}/alchemy/install/files/_article.html.erb +0 -0
  274. data/lib/{rails/generators → generators}/alchemy/install/files/_standard.html.erb +0 -0
  275. data/lib/{rails/generators → generators}/alchemy/install/files/alchemy.en.yml +0 -0
  276. data/lib/generators/alchemy/install/files/alchemy_admin.js +1 -0
  277. data/lib/{rails/generators → generators}/alchemy/install/files/all.css +0 -0
  278. data/lib/{rails/generators → generators}/alchemy/install/files/all.js +0 -0
  279. data/lib/{rails/generators → generators}/alchemy/install/files/application.html.erb +0 -0
  280. data/lib/{rails/generators → generators}/alchemy/install/files/article.scss +0 -0
  281. data/lib/generators/alchemy/install/install_generator.rb +110 -0
  282. data/lib/{rails/generators → generators}/alchemy/install/templates/dragonfly.rb.tt +0 -0
  283. data/lib/{rails/generators → generators}/alchemy/install/templates/elements.yml.tt +0 -0
  284. data/lib/{rails/generators → generators}/alchemy/install/templates/menus.yml.tt +0 -0
  285. data/lib/{rails/generators → generators}/alchemy/install/templates/page_layouts.yml.tt +0 -0
  286. data/lib/{rails/generators → generators}/alchemy/menus/menus_generator.rb +2 -2
  287. data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.erb +1 -4
  288. data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.haml +1 -4
  289. data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.slim +1 -4
  290. data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.erb +1 -1
  291. data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.haml +1 -1
  292. data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.slim +1 -1
  293. data/lib/{rails/generators → generators}/alchemy/module/module_generator.rb +3 -2
  294. data/lib/{rails/generators → generators}/alchemy/module/templates/ability.rb.tt +0 -0
  295. data/lib/{rails/generators → generators}/alchemy/module/templates/controller.rb.tt +0 -0
  296. data/lib/{rails/generators → generators}/alchemy/module/templates/module_config.rb.tt +0 -0
  297. data/lib/{rails/generators → generators}/alchemy/page_layouts/page_layouts_generator.rb +5 -4
  298. data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.erb +0 -0
  299. data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.haml +0 -0
  300. data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.slim +0 -0
  301. data/lib/{rails/generators → generators}/alchemy/site_layouts/site_layouts_generator.rb +4 -2
  302. data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.erb +0 -0
  303. data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.haml +0 -0
  304. data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.slim +0 -0
  305. data/lib/{rails/generators → generators}/alchemy/views/views_generator.rb +7 -6
  306. data/lib/kaminari/scoped_pagination_url_helper.rb +1 -0
  307. data/lib/tasks/alchemy/db.rake +3 -19
  308. data/lib/tasks/alchemy/install.rake +3 -2
  309. data/lib/tasks/alchemy/tidy.rake +9 -8
  310. data/lib/tasks/alchemy/upgrade.rake +18 -120
  311. data/package/admin.js +14 -0
  312. data/package/src/__tests__/i18n.spec.js +70 -0
  313. data/package/src/i18n.js +48 -0
  314. data/package/src/node_tree.js +72 -0
  315. data/package/src/translations.js +32 -0
  316. data/package/src/utils/__tests__/ajax.spec.js +124 -0
  317. data/package/src/utils/__tests__/events.spec.js +38 -0
  318. data/package/src/utils/ajax.js +48 -0
  319. data/package/src/utils/events.js +16 -0
  320. data/package.json +45 -0
  321. data/vendor/assets/fonts/fa-regular-400.eot +0 -0
  322. data/vendor/assets/fonts/fa-regular-400.svg +798 -358
  323. data/vendor/assets/fonts/fa-regular-400.ttf +0 -0
  324. data/vendor/assets/fonts/fa-regular-400.woff +0 -0
  325. data/vendor/assets/fonts/fa-regular-400.woff2 +0 -0
  326. data/vendor/assets/fonts/fa-solid-900.eot +0 -0
  327. data/vendor/assets/fonts/fa-solid-900.svg +4933 -1408
  328. data/vendor/assets/fonts/fa-solid-900.ttf +0 -0
  329. data/vendor/assets/fonts/fa-solid-900.woff +0 -0
  330. data/vendor/assets/fonts/fa-solid-900.woff2 +0 -0
  331. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.nestedSortable.js +1 -2
  332. data/vendor/assets/stylesheets/fontawesome/_core.scss +5 -0
  333. data/vendor/assets/stylesheets/fontawesome/_fixed-width.scss +1 -1
  334. data/vendor/assets/stylesheets/fontawesome/_icons.scss +651 -2
  335. data/vendor/assets/stylesheets/fontawesome/_mixins.scss +0 -1
  336. data/vendor/assets/stylesheets/fontawesome/_rotated-flipped.scss +3 -2
  337. data/vendor/assets/stylesheets/fontawesome/_stacked.scss +1 -1
  338. data/vendor/assets/stylesheets/fontawesome/_variables.scss +662 -9
  339. data/vendor/assets/stylesheets/fontawesome/fontawesome.scss +2 -2
  340. data/vendor/assets/stylesheets/fontawesome/regular.scss +23 -0
  341. data/vendor/assets/stylesheets/fontawesome/solid.scss +24 -0
  342. metadata +117 -98
  343. data/app/assets/javascripts/alchemy/alchemy.i18n.js.coffee +0 -32
  344. data/app/assets/javascripts/alchemy/alchemy.node_tree.js +0 -66
  345. data/app/assets/javascripts/alchemy/alchemy.translations.js.coffee +0 -29
  346. data/app/assets/javascripts/alchemy/alchemy.utils.js +0 -45
  347. data/app/helpers/alchemy/essences_helper.rb +0 -119
  348. data/app/models/concerns/alchemy/content_touching.rb +0 -23
  349. data/app/serializers/alchemy/legacy_element_serializer.rb +0 -15
  350. data/app/views/alchemy/admin/contents/_missing.html.erb +0 -17
  351. data/app/views/alchemy/admin/pages/_menu_fields.html.erb +0 -37
  352. data/app/views/alchemy/admin/pages/configure_external.html.erb +0 -32
  353. data/app/views/alchemy/elements/_editor_not_found.html.erb +0 -4
  354. data/app/views/alchemy/navigation/_image_link.html.erb +0 -14
  355. data/app/views/alchemy/navigation/_link.html.erb +0 -19
  356. data/app/views/alchemy/navigation/_renderer.html.erb +0 -29
  357. data/db/migrate/20180226123013_alchemy_four_point_zero.rb +0 -363
  358. data/db/migrate/20180227224537_migrate_tags_to_gutentag.rb +0 -41
  359. data/db/migrate/20180519204655_add_fixed_to_alchemy_elements.rb +0 -6
  360. data/db/migrate/20191016073858_create_alchemy_essence_pages.rb +0 -8
  361. data/db/migrate/20191029212236_create_alchemy_nodes.rb +0 -24
  362. data/db/migrate/20200226081535_add_site_id_to_alchemy_nodes.rb +0 -15
  363. data/lib/alchemy/error_tracking/airbrake_handler.rb +0 -13
  364. data/lib/alchemy/error_tracking.rb +0 -14
  365. data/lib/alchemy/ssl_protection.rb +0 -34
  366. data/lib/alchemy/tasks/helpers.rb +0 -81
  367. data/lib/alchemy/test_support/controller_requests.rb +0 -93
  368. data/lib/alchemy/upgrader/four_point_four.rb +0 -52
  369. data/lib/alchemy/upgrader/four_point_one.rb +0 -42
  370. data/lib/alchemy/upgrader/four_point_six.rb +0 -50
  371. data/lib/alchemy/upgrader/four_point_two.rb +0 -86
  372. data/lib/alchemy/upgrader/tasks/cells_migration.rb +0 -45
  373. data/lib/alchemy/upgrader/tasks/cells_upgrader.rb +0 -166
  374. data/lib/alchemy/upgrader/tasks/element_partial_name_variable_updater.rb +0 -32
  375. data/lib/alchemy/upgrader/tasks/fixed_element_name_finder.rb +0 -31
  376. data/lib/alchemy/upgrader/tasks/harden_acts_as_taggable_on_migrations.rb +0 -27
  377. data/lib/alchemy/upgrader/tasks/picture_gallery_migration.rb +0 -65
  378. data/lib/alchemy/upgrader/tasks/picture_gallery_upgrader.rb +0 -210
  379. data/lib/rails/generators/alchemy/essence/templates/editor.html.erb +0 -15
  380. data/lib/rails/generators/alchemy/install/install_generator.rb +0 -60
  381. data/lib/tasks/alchemy/convert.rake +0 -98
  382. data/vendor/assets/javascripts/sortable/Sortable.min.js +0 -2
  383. data/vendor/assets/stylesheets/fontawesome/fa-regular.scss +0 -22
  384. data/vendor/assets/stylesheets/fontawesome/fa-solid.scss +0 -23
@@ -0,0 +1 @@
1
+ import "@alchemy_cms/admin"
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+ require "rails/generators"
3
+
4
+ module Alchemy
5
+ module Generators
6
+ class InstallGenerator < ::Rails::Generators::Base
7
+ desc "Installs Alchemy into your App."
8
+
9
+ class_option :skip_demo_files,
10
+ type: :boolean,
11
+ default: false,
12
+ desc: "Skip creation of demo element, page and application layout."
13
+
14
+ class_option :skip_webpacker_installer,
15
+ type: :boolean,
16
+ default: false,
17
+ desc: "Skip running the webpacker installer."
18
+
19
+ source_root File.expand_path("files", __dir__)
20
+
21
+ def copy_config
22
+ copy_file "#{gem_config_path}/config.yml", app_config_path.join("alchemy", "config.yml")
23
+ end
24
+
25
+ def copy_yml_files
26
+ %w(elements page_layouts menus).each do |file|
27
+ template "#{__dir__}/templates/#{file}.yml.tt", app_config_path.join("alchemy", "#{file}.yml")
28
+ end
29
+ end
30
+
31
+ def install_assets
32
+ copy_file "all.js", app_vendor_assets_path.join("javascripts", "alchemy", "admin", "all.js")
33
+ copy_file "all.css", app_vendor_assets_path.join("stylesheets", "alchemy", "admin", "all.css")
34
+ end
35
+
36
+ def copy_demo_views
37
+ return if options[:skip_demo_files]
38
+
39
+ copy_file "application.html.erb", app_views_path.join("layouts", "application.html.erb")
40
+ copy_file "article.scss", app_assets_path.join("stylesheets", "alchemy", "elements", "article.scss")
41
+
42
+ stylesheet_require = " *= require_tree ./alchemy/elements\n"
43
+ if File.exist?(app_assets_path.join("stylesheets", "application.css"))
44
+ insert_into_file app_assets_path.join("stylesheets", "application.css"), stylesheet_require,
45
+ before: " */"
46
+ else
47
+ create_file app_assets_path.join("stylesheets", "application.css"), "/*\n#{stylesheet_require} */\n"
48
+ end
49
+
50
+ copy_file "_article.html.erb", app_views_path.join("alchemy", "elements", "_article.html.erb")
51
+ copy_file "_standard.html.erb", app_views_path.join("alchemy", "page_layouts", "_standard.html.erb")
52
+ copy_file "alchemy.en.yml", app_config_path.join("locales", "alchemy.en.yml")
53
+ end
54
+
55
+ def copy_dragonfly_config
56
+ template "#{__dir__}/templates/dragonfly.rb.tt", app_config_path.join("initializers", "dragonfly.rb")
57
+ end
58
+
59
+ def install_gutentag_migrations
60
+ rake "gutentag:install:migrations"
61
+ end
62
+
63
+ def run_webpacker_installer
64
+ unless options[:skip_webpacker_installer]
65
+ # Webpacker does not create a package.json, but we need one
66
+ unless File.exist? app_root.join("package.json")
67
+ in_root { run "echo '{}' > package.json" }
68
+ end
69
+ rake("webpacker:install", abort_on_failure: true)
70
+ end
71
+ end
72
+
73
+ def add_npm_package
74
+ run "yarn add @alchemy_cms/admin"
75
+ end
76
+
77
+ def copy_alchemy_entry_point
78
+ webpack_config = YAML.load_file(app_root.join("config", "webpacker.yml"))[Rails.env]
79
+ copy_file "alchemy_admin.js",
80
+ app_root.join(webpack_config["source_path"], webpack_config["source_entry_path"], "alchemy/admin.js")
81
+ end
82
+
83
+ private
84
+
85
+ def gem_config_path
86
+ @_config_path ||= File.expand_path("../../../../config/alchemy", __dir__)
87
+ end
88
+
89
+ def app_config_path
90
+ @_app_config_path ||= app_root.join("config")
91
+ end
92
+
93
+ def app_views_path
94
+ @_app_views_path ||= app_root.join("app", "views")
95
+ end
96
+
97
+ def app_assets_path
98
+ @_app_assets_path ||= app_root.join("app", "assets")
99
+ end
100
+
101
+ def app_vendor_assets_path
102
+ @_app_vendor_assets_path ||= app_root.join("vendor", "assets")
103
+ end
104
+
105
+ def app_root
106
+ @_app_root ||= Rails.root
107
+ end
108
+ end
109
+ end
110
+ end
@@ -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,4 +1,5 @@
1
- require 'thor'
1
+ # frozen_string_literal: true
2
+ require "thor"
2
3
 
3
4
  class Alchemy::InstallTask < Thor
4
5
  include Thor::Actions
@@ -29,7 +30,7 @@ end
29
30
 
30
31
  namespace :alchemy do
31
32
  desc "Installs Alchemy CMS into your app."
32
- task :install do
33
+ task install: "alchemy:yarn:install" do
33
34
  install_helper = Alchemy::InstallTask.new
34
35
 
35
36
  puts "\nAlchemy Installer"
@@ -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,131 +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
47
+ desc "Install Gutentag migrations"
48
+ task install_gutentag_migrations: [:environment] do
49
+ Alchemy::Upgrader::FivePointZero.install_gutentag_migrations
131
50
  end
132
51
 
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
140
- end
141
- end
142
-
143
- desc "Upgrade Alchemy to v4.6"
144
- task "4.6" => [
145
- "alchemy:upgrade:prepare",
146
- "alchemy:upgrade:4.6:run",
147
- "alchemy:upgrade:4.6:todo",
148
- ] do
149
- Alchemy::Upgrader.display_todos
150
- end
151
-
152
- namespace "4.6" do
153
- task run: []
154
-
155
- desc "Move child pages of invisible pages to visible parent."
156
- task restructure_page_tree: [:environment] do
157
- 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
158
55
  end
159
56
 
160
- task :todo do
161
- 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
162
60
  end
163
61
  end
164
62
  end
data/package/admin.js ADDED
@@ -0,0 +1,14 @@
1
+ import translate from "./src/i18n"
2
+ import NodeTree from "./src/node_tree"
3
+
4
+ // Global Alchemy object
5
+ if (typeof window.Alchemy === "undefined") {
6
+ window.Alchemy = {}
7
+ }
8
+
9
+ // Enhance the global Alchemy object with imported features
10
+ Object.assign(Alchemy, {
11
+ // Global utility method for translating a given string
12
+ t: translate,
13
+ NodeTree
14
+ })