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
@@ -1,93 +0,0 @@
1
- # *There is generally no need* to use this module. Instead, in
2
- # a functional/controller test against a Alchemy controller, just
3
- # use standard Rails functionality by including:
4
- #
5
- # routes { Alchemy::Engine.routes }
6
- #
7
- # And then use standard Rails test `get`, `post` etc methods.
8
- #
9
- # Use this module to easily test Alchemy actions within Alchemy components
10
- # or inside your application to test routes for the mounted Alchemy engine.
11
- #
12
- # Inside your spec_helper.rb, include this module inside the RSpec.configure
13
- # block by doing this:
14
- #
15
- # require 'alchemy/test_support/controller_requests'
16
- # RSpec.configure do |c|
17
- # c.include Alchemy::TestSupport::ControllerRequests, type: :controller
18
- # end
19
- #
20
- # Then, in your controller tests, you can access alchemy routes like this:
21
- #
22
- # require 'rails_helper'
23
- #
24
- # describe Alchemy::Admin::PagesController do
25
- # it "can see all the pages" do
26
- # alchemy_get :index
27
- # end
28
- # end
29
- #
30
- # Use alchemy_get, alchemy_post, alchemy_put or alchemy_delete to make requests
31
- # to the Alchemy engine, and use regular get, post, put or delete to make
32
- # requests to your application.
33
- #
34
- # Note: Based on Spree::TestingSupport::ControllerRequests. Thanks <3
35
- #
36
- # @deprecated Use Rails build in test request methods instead
37
- #
38
- module Alchemy
39
- module TestSupport
40
- module ControllerRequests
41
- extend ActiveSupport::Concern
42
-
43
- # Executes a request simulating GET HTTP method
44
- # @deprecated Use Rails test `get` helper instead
45
- def alchemy_get(action, parameters = nil, session = nil, flash = nil)
46
- process_alchemy_action(action, parameters, session, flash, "GET")
47
- end
48
- deprecate alchemy_get: :get, deprecator: Alchemy::Deprecation
49
-
50
- # Executes a request simulating POST HTTP method
51
- # @deprecated Use Rails test `post` helper instead
52
- def alchemy_post(action, parameters = nil, session = nil, flash = nil)
53
- process_alchemy_action(action, parameters, session, flash, "POST")
54
- end
55
- deprecate alchemy_post: :post, deprecator: Alchemy::Deprecation
56
-
57
- # Executes a request simulating PUT HTTP method
58
- # @deprecated Use Rails test `put` helper instead
59
- def alchemy_put(action, parameters = nil, session = nil, flash = nil)
60
- process_alchemy_action(action, parameters, session, flash, "PUT")
61
- end
62
- deprecate alchemy_put: :put, deprecator: Alchemy::Deprecation
63
-
64
- # Executes a request simulating DELETE HTTP method
65
- # @deprecated Use Rails test `delete` helper instead
66
- def alchemy_delete(action, parameters = nil, session = nil, flash = nil)
67
- process_alchemy_action(action, parameters, session, flash, "DELETE")
68
- end
69
- deprecate alchemy_delete: :delete, deprecator: Alchemy::Deprecation
70
-
71
- # Executes a simulated XHR request
72
- # @deprecated Use Rails test `xhr` helper instead
73
- def alchemy_xhr(method, action, parameters = nil, session = nil, flash = nil)
74
- process_alchemy_xhr_action(method, action, parameters, session, flash)
75
- end
76
- deprecate alchemy_xhr: :xhr, deprecator: Alchemy::Deprecation
77
-
78
- private
79
-
80
- def process_alchemy_action(action, parameters = nil, session = nil, flash = nil, method = "GET")
81
- @routes = Alchemy::Engine.routes
82
- parameters ||= {}
83
- process(action, method, parameters, session, flash)
84
- end
85
-
86
- def process_alchemy_xhr_action(method, action, parameters = nil, session = nil, flash = nil)
87
- @routes = Alchemy::Engine.routes
88
- parameters ||= {}
89
- xml_http_request(method, action, parameters, session, flash)
90
- end
91
- end
92
- end
93
- end
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'tasks/element_views_updater'
4
-
5
- module Alchemy
6
- class Upgrader::FourPointFour < Upgrader
7
- class << self
8
- def rename_element_views
9
- desc "Remove '_view' suffix from element views."
10
- Alchemy::Upgrader::Tasks::ElementViewsUpdater.new.rename_element_views
11
- end
12
-
13
- def update_local_variable
14
- desc 'Update element views local variable to element name.'
15
- Alchemy::Upgrader::Tasks::ElementViewsUpdater.new.update_local_variable
16
- end
17
-
18
- def alchemy_4_4_todos
19
- notice = <<-NOTE.strip_heredoc
20
-
21
- ℹ️ Element editor partials are deprecated
22
- -----------------------------------------
23
-
24
- The element editor partials are not needed anymore. They still work, but in order to
25
- prepare the Alchemy 5 upgrade your should consider removing them now.
26
-
27
- In order to update check if you have any messages in your editor partials and move them
28
- to either a `warning` or `message` in your element definition.
29
-
30
- Also check if you pass any values to EssenceSelects `select_values`. Move static values
31
- to the `settings` of your content definition and either use EssencePage for referencing
32
- pages or create a custom essence for other dynamic values.
33
-
34
-
35
- ℹ️ The `_view` suffix of Element view partials is deprecated
36
- -----------------------------------------------------------
37
-
38
- The element view partials do not need the `_view` suffix anymore. Your files have been
39
- renamed.
40
-
41
- The local variable in your element views has been replaced by a variable named after the
42
- element itself. A "article" element has a "_article.html.erb" partial and therefore
43
- a `article` local variable now.
44
-
45
- The former `element` variable is still present, though.
46
-
47
- NOTE
48
- todo notice, 'Alchemy v4.4 TODO'
49
- end
50
- end
51
- end
52
- end
@@ -1,42 +0,0 @@
1
- require_relative 'tasks/harden_acts_as_taggable_on_migrations'
2
-
3
- module Alchemy
4
- class Upgrader::FourPointOne < Upgrader
5
- class << self
6
- def harden_acts_as_taggable_on_migrations
7
- desc 'Harden `acts_as_taggable_on_migrations`'
8
- `bundle exec rake railties:install:migrations FROM=acts_as_taggable_on_engine`
9
- Alchemy::Upgrader::Tasks::HardenActsAsTaggableOnMigrations.new.patch_migrations
10
- `bundle exec rake db:migrate`
11
- end
12
-
13
- def alchemy_4_1_todos
14
- notice = <<-NOTE.strip_heredoc
15
- ℹ️ Changed tagging provider to Gutentag
16
- ---------------------------------------
17
-
18
- The automatic updater that just ran updated all existing `acts_as_taggable_on_migrations`,
19
- so that they don't blow up if the `acts_as_taggable_on` gem is no longer available.
20
-
21
- All your existing tags have been migrated to `Gutentag::Tag`s.
22
-
23
-
24
- ⚠️ Removed Rails and non-English translations
25
- ---------------------------------------------
26
-
27
- Removed the Rails translations from our translation files and moved all non-english translation
28
- files into the newly introduced `alchemy_i18n` gem.
29
-
30
- If you need more translations than the default English one you can either put `alchemy_i18n`
31
- in to your apps `Gemfile` or - recommended - copy only the translation files you need into your
32
- apps `config/locales` folder.
33
-
34
- For the Rails translations either put the `rails-i18n` gem into your apps Gemfile or - recommended -
35
- copy only the translation files you need into your apps config/locales folder.
36
-
37
- NOTE
38
- todo notice, 'Alchemy v4.1 TODO'
39
- end
40
- end
41
- end
42
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Alchemy
4
- class Upgrader::FourPointSix < Upgrader
5
- class << self
6
- def alchemy_4_6_todos
7
- notice = <<-NOTE.strip_heredoc
8
-
9
- ℹ️ Page visible attribute is deprecated
10
- ----------------------------------------
11
-
12
- Page slugs will be visible in URLs of child pages all the time in the future.
13
- Please use Menus and Tags instead to re-organize your pages if your page tree does not reflect the URL hierarchy.
14
-
15
- A rake task to help with the migration is available.
16
-
17
- bin/rake alchemy:upgrade:4.6:restructure_page_tree
18
-
19
- NOTE
20
- todo notice, "Alchemy v4.6 TODO"
21
- end
22
-
23
- def restructure_page_tree
24
- desc "Move child pages of invisible pages to visible parent."
25
- Alchemy::Deprecation.silence do
26
- # All leaves can safely be marked visible
27
- Alchemy::Page.leaves.update_all(visible: true)
28
- Alchemy::Page.language_roots.each do |root_page|
29
- # Root pages are always visible
30
- root_page.update!(visible: true)
31
- remove_invisible_children(root_page)
32
- end
33
- Alchemy::Page.update_all(visible: true)
34
- end
35
- end
36
-
37
- private
38
-
39
- def remove_invisible_children(page)
40
- page.children.each { |child| remove_invisible_children(child) }
41
- if !page.visible
42
- page.children.reload.reverse.each do |child|
43
- puts "Moving #{child.urlname} to right of #{page.urlname}"
44
- child.move_to_right_of(page)
45
- end
46
- end
47
- end
48
- end
49
- end
50
- end
@@ -1,86 +0,0 @@
1
- require_relative 'tasks/picture_gallery_upgrader'
2
- require_relative 'tasks/picture_gallery_migration'
3
- require_relative 'tasks/fixed_element_name_finder'
4
- require_relative 'tasks/cells_upgrader'
5
- require_relative 'tasks/cells_migration'
6
- require_relative 'tasks/element_partial_name_variable_updater'
7
-
8
- module Alchemy
9
- class Upgrader::FourPointTwo < Upgrader
10
- class << self
11
- def convert_picture_galleries
12
- desc 'Convert `picture_gallery` element definitions to `nestable_elements`.'
13
- Alchemy::Upgrader::Tasks::PictureGalleryUpgrader.new.convert_picture_galleries
14
- end
15
-
16
- def migrate_picture_galleries
17
- desc 'Migrate existing gallery elements to `nestable_elements`.'
18
- Alchemy::Upgrader::Tasks::PictureGalleryMigration.new.migrate_picture_galleries
19
- end
20
-
21
- def convert_cells
22
- desc 'Convert cells config to fixed nestable elements.'
23
- Alchemy::Upgrader::Tasks::CellsUpgrader.new.convert_cells
24
- end
25
-
26
- def migrate_cells
27
- desc 'Migrate existing cells to fixed nestable elements.'
28
- Alchemy::Upgrader::Tasks::CellsMigration.new.migrate_cells
29
- end
30
-
31
- def update_element_views_variable_name
32
- desc 'Update element views to use element partial name variable.'
33
- Alchemy::Upgrader::Tasks::ElementPartialNameVariableUpdater.new.update_element_views
34
- end
35
-
36
- def alchemy_4_2_todos
37
- notice = <<-NOTE.strip_heredoc
38
- ⚠️ Element's "picture_gallery" feature removed
39
- ----------------------------------------------
40
-
41
- The `picture_gallery` feature of elements was removed and has been replaced by nestable elements.
42
-
43
- The automatic updater that just ran updated your `config/alchemy/elements.yml`. A backup was made.
44
- Nevertheless, you should have a look into it and double check the changes.
45
-
46
- We created nested elements for each gallery picture we found in your database.
47
-
48
- We also updated your element view partials so they have hints about how to render the child elements.
49
-
50
- 🚨 PLEASE LOOK INTO YOUR ELEMENT VIEW PARTIALS AND FOLLOW THE INSTRUCTIONS!
51
-
52
-
53
- ⚠️️ Cells replaced by fixed nestable elements
54
- --------------------------------------------
55
-
56
- The Cells feature has been replaced by fixed nestable elements.
57
-
58
- The automatic updater that just ran updated your `config/alchemy/elements.yml`.
59
- Nevertheless, you should have a look into it and double check the changes.
60
-
61
- We defined new fixed elements for each cell former defined in `cells.yml`
62
- and put its `elements` into the `nestable_elements` collection of the new elements definition.
63
-
64
- We also updated your element view partials so they render the child elements.
65
-
66
- Please review and fix markup, if necessary.
67
-
68
- 🚨 PLEASE DOUBLE CHECK YOUR ELEMENT PARTIALS AND ADJUST ACCORDINGLY!
69
-
70
- As always `git diff` is your friend.
71
-
72
-
73
- ℹ️ Element views use element partial name as local variable
74
- -----------------------------------------------------------
75
-
76
- The local `element` variable in your element views has been replaced by a variable named after the partial.
77
- A "article" element has a "_article_view.html.erb" partial and therefore a `article_view` local variable now.
78
-
79
- The former `element` variable is still present, though.
80
-
81
- NOTE
82
- todo notice, 'Alchemy v4.2 TODO'
83
- end
84
- end
85
- end
86
- end
@@ -1,45 +0,0 @@
1
- module Alchemy::Upgrader::Tasks
2
- class CellsMigration
3
- class Cell < ActiveRecord::Base
4
- self.table_name = 'alchemy_cells'
5
- belongs_to :page, class_name: 'Alchemy::Page'
6
- end
7
-
8
- def migrate_cells
9
- if ActiveRecord::Base.connection.data_source_exists?('alchemy_cells')
10
- cells = Cell.all
11
- @fixed_element_name_finder = FixedElementNameFinder.new
12
-
13
- if cells.any?
14
- cells.each do |cell|
15
- migrate_cell!(cell)
16
- end
17
- else
18
- puts "No cells found. Skip"
19
- end
20
- else
21
- puts "Cells table does not exist. Skip"
22
- end
23
- end
24
-
25
- private
26
-
27
- def migrate_cell!(cell)
28
- # bust element definitions insta cache
29
- Alchemy::Element.instance_variable_set('@definitions', nil)
30
- fixed_element = Alchemy::Element.find_or_initialize_by(fixed: true, name: @fixed_element_name_finder.call(cell.name), page: cell.page)
31
- elements = Alchemy::Element.where(cell_id: cell.id).order(position: :asc)
32
-
33
- if fixed_element.new_record?
34
- fixed_element.autogenerate_nested_elements = false
35
- fixed_element.save!
36
- Alchemy::Element.acts_as_list_no_update do
37
- elements.update_all(parent_element_id: fixed_element.id)
38
- end
39
- puts "Created new fixed element '#{fixed_element.name}' for cell '#{cell.name}'."
40
- else
41
- puts "Element for cell '#{cell.name}' already present. Skip"
42
- end
43
- end
44
- end
45
- end
@@ -1,166 +0,0 @@
1
- require 'alchemy/upgrader'
2
- require 'rails/generators'
3
-
4
- module Alchemy::Upgrader::Tasks
5
- class CellsUpgrader < Thor
6
- include Thor::Actions
7
-
8
- no_tasks do
9
- def convert_cells
10
- if File.exist?(page_layouts_config_file)
11
- backup_config
12
- convert_page_layouts_config
13
- else
14
- puts "\nNo page layouts config found. Skipping."
15
- end
16
- if File.exist?(cells_config_file)
17
- convert_cell_config
18
- delete_cells_config
19
- else
20
- puts "\nNo cells config found. Skipping."
21
- end
22
- update_cell_views
23
- update_render_cell_calls
24
- move_cell_views
25
- generate_editor_partials
26
- puts 'Done ✔'
27
- end
28
- end
29
-
30
- private
31
-
32
- def backup_config
33
- print "-- Copy existing config file to `config/alchemy/page_layouts.yml.old` ... "
34
-
35
- FileUtils.copy Rails.root.join('config', 'alchemy', 'page_layouts.yml'),
36
- Rails.root.join('config', 'alchemy', 'page_layouts.yml.old')
37
-
38
- puts "done ✔\n"
39
- end
40
-
41
- def write_config(config)
42
- print '-- Writing new `config/alchemy/page_layouts.yml` ... '
43
-
44
- File.open(Rails.root.join('config', 'alchemy', 'page_layouts.yml'), "w") do |f|
45
- f.write config.to_yaml.sub("---\n", "").gsub("\n-", "\n\n-")
46
- end
47
-
48
- puts "done ✔\n"
49
- end
50
-
51
- def convert_page_layouts_config
52
- print '-- Moving `cells` from page layouts definition into autogenerated `elements` ... '
53
- page_layouts = YAML.load_file(page_layouts_config_file)
54
- page_layouts.select { |p| p['cells'].present? }.map do |page_layout|
55
- elements = page_layout['elements'] || []
56
- autogenerate_elements = page_layout['autogenerate'] || []
57
- cell_elements = page_layout.delete('cells')
58
- page_layout['elements'] = (elements + cell_elements).uniq
59
- page_layout['autogenerate'] = (autogenerate_elements + cell_elements).uniq
60
- end
61
- puts "done ✔\n"
62
- write_config(page_layouts)
63
- end
64
-
65
- def page_layouts_config_file
66
- Rails.root.join('config', 'alchemy', 'page_layouts.yml')
67
- end
68
-
69
- def cells_config_file
70
- Rails.root.join('config', 'alchemy', 'cells.yml')
71
- end
72
-
73
- def convert_cell_config
74
- puts '-- Converting cells into unique fixed nestable elements.'
75
- fixed_element_name_finder = FixedElementNameFinder.new
76
-
77
- YAML.load_file(cells_config_file).each do |cell|
78
- append_to_file Rails.root.join('config', 'alchemy', 'elements.yml') do
79
- <<-CELL.strip_heredoc
80
-
81
- - name: #{fixed_element_name_finder.call(cell['name'])}
82
- fixed: true
83
- unique: true
84
- nestable_elements: [#{cell['elements'].join(', ')}]
85
- CELL
86
- end
87
- end
88
- end
89
-
90
- def delete_cells_config
91
- puts '-- Deleting cells config file.'
92
- FileUtils.rm(cells_config_file)
93
- end
94
-
95
- def move_cell_views
96
- if Dir.exist? cells_view_folder
97
- puts "-- Move cell views into elements view folder"
98
- Dir.glob("#{cells_view_folder}/*").each do |view|
99
- filename = File.basename(view).gsub(/(_\w+)\.(\w*\.)?(erb|haml|slim)/, '\1_view.\2\3')
100
- FileUtils.mv(view, "#{elements_view_folder}/#{filename}")
101
- puts " Moved #{File.basename(view)} into `app/views/alchemy/elements/` folder"
102
- end
103
- FileUtils.rm_rf(cells_view_folder)
104
- else
105
- puts "No cell views found. Skip"
106
- end
107
- end
108
-
109
- def generate_editor_partials
110
- puts "-- Generate editor partials"
111
- Rails::Generators.invoke('alchemy:elements', ['--skip'])
112
- end
113
-
114
- def update_cell_views
115
- if Dir.exist? cells_view_folder
116
- puts "-- Update cell views"
117
- Dir.glob("#{cells_view_folder}/*").each do |view|
118
- gsub_file(view, /elements\.published/, 'elements')
119
- gsub_file(view, /cell\.elements(.+)/, 'element.nested_elements\1')
120
- gsub_file(view, /render_elements[\(\s]?:?from_cell:?\s?(=>)?\s?cell\)?/, 'render element.nested_elements')
121
- gsub_file(view, /cell/, 'element')
122
- end
123
- else
124
- puts "No cell views found. Skip"
125
- end
126
- end
127
-
128
- def update_render_cell_calls
129
- puts "-- Update render_cell calls"
130
- Dir.glob("#{alchemy_views_folder}/**/*").each do |view|
131
- next if File.directory?(view)
132
- # <%= render_cell 'test' %>
133
- # <%= render_cell('test') %>
134
- # <%= render_cell("test", options: true) %>
135
- content = File.binread(view)
136
- content.gsub!(/render_cell([\s(]+)(['":])(\w+)([^\w])(.*?)/) do
137
- element_name = CellNameMigrator.call($3)
138
- "render_elements#{$1}only: #{$2}#{element_name}#{$4}, fixed: true#{$5}"
139
- end
140
-
141
- # <%= render_elements from_cell: 'page_intro' %>
142
- # <%= render_elements testing: 'blubb', from_cell: :page_intro %>
143
- # <%= render_elements from_cell: "page_intro", testing: 'blubb' %>
144
- # <%= render_elements(from_cell: "page_intro", testing: 'blubb') %>
145
- # <%= render_elements(testing: 'blubb', from_cell: "page_intro") %>
146
- content.gsub!(/render_elements(.*?)from_cell[:\s=>]+([:'"])(\w+)(['"]?)(.*)/) do
147
- element_name = CellNameMigrator.call($3)
148
- "render_elements#{$1}only: #{$2}#{element_name}#{$4}, fixed: true#{$5}"
149
- end
150
- File.open(view, "wb") { |file| file.write(content) }
151
- end
152
- end
153
-
154
- def elements_view_folder
155
- Rails.root.join('app', 'views', 'alchemy', 'elements')
156
- end
157
-
158
- def cells_view_folder
159
- Rails.root.join('app', 'views', 'alchemy', 'cells')
160
- end
161
-
162
- def alchemy_views_folder
163
- Rails.root.join('app', 'views', 'alchemy')
164
- end
165
- end
166
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'alchemy/upgrader'
4
-
5
- module Alchemy::Upgrader::Tasks
6
- class ElementPartialNameVariableUpdater < Thor
7
- include Thor::Actions
8
-
9
- no_tasks do
10
- def update_element_views
11
- puts "-- Update element views local variable to partial name"
12
- Dir.glob("#{elements_view_folder}/*_view.*").each do |view|
13
- variable_name = File.basename(view).gsub(/^_([\w-]*)\..*$/, '\1')
14
- %w[
15
- cache
16
- render_essence_view_by_name
17
- element_view_for
18
- ].each do |method_name|
19
- gsub_file(view, /#{method_name}([\s(]+)element([^\w])/, "#{method_name}\\1#{variable_name}\\2")
20
- end
21
- gsub_file(view, /([\s(%={]+)element([^\w:"'])/, "\\1#{variable_name}\\2")
22
- end
23
- end
24
- end
25
-
26
- private
27
-
28
- def elements_view_folder
29
- Rails.root.join('app', 'views', 'alchemy', 'elements')
30
- end
31
- end
32
- end
@@ -1,31 +0,0 @@
1
- module Alchemy::Upgrader::Tasks
2
- class FixedElementNameFinder
3
-
4
- def call(cell_name)
5
- return cell_name if fixed_elements.include?(cell_name)
6
- return "#{cell_name}_elements" if unfixed_elements.include?(cell_name)
7
- cell_name
8
- end
9
-
10
- private
11
-
12
- def fixed_elements
13
- @_fixed_element_names ||= begin
14
- definitions.select { |element| element['fixed'] }.map { |element| element['name'] }
15
- end
16
- end
17
-
18
- def unfixed_elements
19
- @_unfixed_elements ||= begin
20
- definitions.reject { |element| element['fixed'] }.map { |element| element['name'] }
21
- end
22
- end
23
-
24
- def definitions
25
- @_definitions ||= begin
26
- elements_file_path = Rails.root.join('config', 'alchemy', 'elements.yml')
27
- YAML.load_file(elements_file_path)
28
- end
29
- end
30
- end
31
- end
@@ -1,27 +0,0 @@
1
- require 'thor'
2
-
3
- module Alchemy::Upgrader::Tasks
4
- class HardenActsAsTaggableOnMigrations < Thor
5
- include Thor::Actions
6
-
7
- no_tasks do
8
- def patch_migrations
9
- sentinel = /add_column.*/
10
- aato_file = Dir.glob('db/migrate/*_add_taggings_counter_cache_to_tags.*.rb').first
11
- if aato_file
12
- inject_into_file aato_file,
13
- "\n\n # inserted by Alchemy CMS upgrader\n return unless defined?(ActsAsTaggableOn)",
14
- { after: sentinel, verbose: true }
15
- end
16
-
17
- sentinel = /def up/
18
- aato_file = Dir.glob('db/migrate/*_change_collation_for_tag_names.*.rb').first
19
- if aato_file
20
- inject_into_file aato_file,
21
- "\n # inserted by Alchemy CMS upgrader\n return unless defined?(ActsAsTaggableOn)\n",
22
- { after: sentinel, verbose: true }
23
- end
24
- end
25
- end
26
- end
27
- end