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
@@ -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,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