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,20 +1,21 @@
1
- <% options = local_assigns.fetch(:options, {}) %>
2
- <% html_options = local_assigns.fetch(:html_options, {}) %>
3
-
4
- <div class="essence_text content_editor<%= options[:display_inline].to_s == 'true' ? ' display_inline' : '' %>" id="<%= content.dom_id %>">
5
- <%= content_label(content) %>
1
+ <%= content_tag :div,
2
+ id: essence_text_editor.dom_id,
3
+ class: [
4
+ essence_text_editor.css_classes,
5
+ essence_text_editor.settings[:display_inline] ? 'display_inline' : ''
6
+ ], data: essence_text_editor.data_attributes do %>
7
+ <%= content_label(essence_text_editor) %>
6
8
  <%= text_field_tag(
7
- content.form_field_name,
8
- content.ingredient,
9
- class: ["thin_border #{content.settings[:linkable] ? ' text_with_icon' : ''}", html_options[:class]].join(' '),
10
- style: html_options[:style],
11
- type: content.settings_value(:input_type) || "text"
9
+ essence_text_editor.form_field_name,
10
+ essence_text_editor.ingredient,
11
+ class: "thin_border #{essence_text_editor.settings[:linkable] ? ' text_with_icon' : ''}",
12
+ type: essence_text_editor.settings[:input_type] || "text"
12
13
  ) %>
13
- <% if content.settings[:linkable] %>
14
- <%= hidden_field_tag content.form_field_name(:link), content.essence.link %>
15
- <%= hidden_field_tag content.form_field_name(:link_title), content.essence.link_title %>
16
- <%= hidden_field_tag content.form_field_name(:link_class_name), content.essence.link_class_name %>
17
- <%= hidden_field_tag content.form_field_name(:link_target), content.essence.link_target %>
18
- <%= render 'alchemy/essences/shared/linkable_essence_tools', content: content %>
14
+ <% if essence_text_editor.settings[:linkable] %>
15
+ <%= hidden_field_tag essence_text_editor.form_field_name(:link), essence_text_editor.essence.link %>
16
+ <%= hidden_field_tag essence_text_editor.form_field_name(:link_title), essence_text_editor.essence.link_title %>
17
+ <%= hidden_field_tag essence_text_editor.form_field_name(:link_class_name), essence_text_editor.essence.link_class_name %>
18
+ <%= hidden_field_tag essence_text_editor.form_field_name(:link_target), essence_text_editor.essence.link_target %>
19
+ <%= render 'alchemy/essences/shared/linkable_essence_tools', content: essence_text_editor.content %>
19
20
  <% end %>
20
- </div>
21
+ <% end %>
@@ -1,11 +1,8 @@
1
- <% linkable = content.settings_value(:linkable, options) != false %>
1
+ <% linkable = content.settings[:linkable] != false %>
2
2
 
3
- <% if content.essence && content.essence.allow_image_cropping?(options) %>
3
+ <% if content.essence && content.essence.allow_image_cropping? %>
4
4
  <%= link_to_dialog render_icon(:crop),
5
- alchemy.crop_admin_essence_picture_path(
6
- content.essence,
7
- options: content.settings.update(options)
8
- ), {
5
+ alchemy.crop_admin_essence_picture_path(content.essence), {
9
6
  size: "1080x615",
10
7
  title: Alchemy.t('Edit Picturemask'),
11
8
  image_loader: false,
@@ -19,8 +16,7 @@
19
16
  alchemy.admin_pictures_path(
20
17
  element_id: content.element,
21
18
  content_id: content.id,
22
- swap: true,
23
- options: options
19
+ swap: true
24
20
  ),
25
21
  {
26
22
  title: (content.ingredient ? Alchemy.t(:swap_image) : Alchemy.t(:insert_image)),
@@ -51,9 +47,8 @@
51
47
  <%= link_to_dialog render_icon(:edit),
52
48
  alchemy.edit_admin_essence_picture_path(
53
49
  id: content.essence.id,
54
- content_id: content.id,
55
- options: options
50
+ content_id: content.id
56
51
  ), {
57
52
  title: Alchemy.t(:edit_image_properties),
58
- size: edit_picture_dialog_size(content, options)
53
+ size: edit_picture_dialog_size(content)
59
54
  }, title: Alchemy.t(:edit_image_properties) %>
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  xml.instruct! :xml, version: "1.0"
2
3
  xml.rss version: "2.0" do
3
4
  xml.channel do
@@ -9,8 +10,8 @@ xml.rss version: "2.0" do
9
10
  xml.item do
10
11
  xml.title element.content_for_rss_title.try(:ingredient)
11
12
  xml.description element.content_for_rss_description.try(:ingredient)
12
- if element.has_ingredient?('date')
13
- xml.pubDate element.ingredient('date').to_s(:rfc822)
13
+ if element.has_ingredient?("date")
14
+ xml.pubDate element.ingredient("date").to_s(:rfc822)
14
15
  end
15
16
  xml.link show_alchemy_page_url(@page, anchor: element_dom_id(element))
16
17
  xml.guid show_alchemy_page_url(@page, anchor: element_dom_id(element))
@@ -36,6 +36,7 @@
36
36
  </script>
37
37
  <%= render 'alchemy/admin/partials/routes' %>
38
38
  <%= javascript_include_tag('alchemy/admin/all', 'data-turbolinks-track' => true) %>
39
+ <%= javascript_pack_tag('alchemy/admin') %>
39
40
  <%= yield :javascript_includes %>
40
41
  </head>
41
42
  <%= content_tag :body, id: 'alchemy', class: alchemy_body_class do %>
data/babel.config.js ADDED
@@ -0,0 +1,12 @@
1
+ module.exports = {
2
+ presets: [
3
+ [
4
+ "@babel/preset-env",
5
+ {
6
+ targets: {
7
+ node: "current"
8
+ }
9
+ }
10
+ ]
11
+ ]
12
+ }
data/bin/rails CHANGED
@@ -1,8 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
  # This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application.
3
4
 
4
- ENGINE_ROOT = File.expand_path('..', __dir__)
5
- ENGINE_PATH = File.expand_path('../lib/alchemy/engine', __dir__)
5
+ ENGINE_ROOT = File.expand_path("..", __dir__)
6
+ ENGINE_PATH = File.expand_path("../lib/alchemy/engine", __dir__)
6
7
 
7
- require 'rails/all'
8
- require 'rails/engine/commands'
8
+ require "rails/all"
9
+ require "rails/engine/commands"
@@ -11,7 +11,7 @@ auto_logout_time: 30
11
11
 
12
12
  # === Redirect Options
13
13
  #
14
- # redirect_to_public_child [Boolean] # Alchemy redirects to the first public child page found, if a page is not visible.
14
+ # redirect_to_public_child [Boolean] # Alchemy redirects to the first public child page found, if a page is not public.
15
15
  #
16
16
  redirect_to_public_child: true
17
17
 
@@ -38,24 +38,24 @@ sitemap:
38
38
  show_root: true
39
39
  show_flag: false
40
40
 
41
- # === URL nesting
42
- #
43
- # Since Alchemy 2.6.0, page urls are nested, respectively to their tree position.
44
- #
45
- # Disable +url_nesting+ to get slug only urls.
46
- #
47
- # NOTE: After changing the url_nesting, you should run one of these convert rake tasks:
48
- #
49
- # rake alchemy:convert:urlnames:to_nested
50
- # rake alchemy:convert:urlnames:to_slug
51
- #
52
- url_nesting: true
53
-
54
41
  # === Default items per page in admin views
55
42
  #
56
43
  # In Alchemy's Admin, change how many items you would get shown per page by Kaminari
57
44
  items_per_page: 15
58
45
 
46
+ # === Preview window URL configuration
47
+ #
48
+ # By default Alchemy uses its internal page preview renderer,
49
+ # but you can configure it to be any URL instead.
50
+ #
51
+ # Basic Auth is supported.
52
+ #
53
+ # preview:
54
+ # host: https://www.my-static-site.com
55
+ # auth:
56
+ # username: <%= ENV["BASIC_AUTH_USERNAME"] %>
57
+ # password: <%= ENV["BASIC_AUTH_PASSWORD"] %>
58
+
59
59
  # === Picture rendering settings
60
60
  #
61
61
  # Alchemy uses Dragonfly to render images. Use {size: "XXXxYYY", crop: BOOLEAN [true]} to resize images.
@@ -79,7 +79,7 @@ default_site:
79
79
  name: Default Site
80
80
  host: '*'
81
81
 
82
- # This is the default language when a new site gets created.
82
+ # This is the default language when seeding.
83
83
  default_language:
84
84
  code: en
85
85
  name: English
@@ -173,9 +173,6 @@ uploader:
173
173
  #
174
174
  link_target_options: [blank]
175
175
 
176
- # Should pages that redirect to an external url open the link in a new tab/window?
177
- open_external_links_in_new_tab: true
178
-
179
176
  # === Format matchers
180
177
  #
181
178
  # Named aliases for regular expressions that can be used in various places.
@@ -29,7 +29,7 @@
29
29
  "file": "app/views/alchemy/admin/contents/create.js.erb",
30
30
  "line": 1,
31
31
  "link": "http://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
32
- "code": "render(action => \"alchemy/essences/#{Content.create(Element.find(params[:content][:element_id]), content_params).essence_partial_name}_editor\", { :content => Content.create(Element.find(params[:content][:element_id]), content_params), :options => options_from_params, :html_options => ((params[:html_options] or {})) })",
32
+ "code": "render(action => \"alchemy/essences/#{Content.create(Element.find(params[:content][:element_id]), content_params).essence_partial_name}_editor\", { :content => Content.create(Element.find(params[:content][:element_id]), content_params) })",
33
33
  "render_path": [{"type":"controller","class":"Alchemy::Admin::ContentsController","method":"create","line":21,"file":"app/controllers/alchemy/admin/contents_controller.rb"}],
34
34
  "location": {
35
35
  "type": "template",
@@ -1,2 +1,3 @@
1
+ # frozen_string_literal: true
1
2
  # Add Alchemy assets for precompiling
2
- Rails.application.config.assets.precompile << 'alchemy_manifest.js'
3
+ Rails.application.config.assets.precompile << "alchemy_manifest.js"
@@ -1,4 +1,5 @@
1
- require 'dragonfly_svg'
1
+ # frozen_string_literal: true
2
+ require "dragonfly_svg"
2
3
 
3
4
  # Logger
4
5
  Dragonfly.logger = Rails.logger
@@ -1 +1,2 @@
1
+ # frozen_string_literal: true
1
2
  Mime::Type.register "image/svg+xml", :svg
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
1
2
  begin
2
- require 'rack-mini-profiler'
3
- Rack::MiniProfiler.config.position = 'right'
3
+ require "rack-mini-profiler"
4
+ Rack::MiniProfiler.config.position = "right"
4
5
  Rack::MiniProfiler.config.start_hidden = true
5
6
  rescue LoadError
6
7
  end
@@ -77,7 +77,7 @@ SimpleForm.setup do |config|
77
77
  config.boolean_style = :inline
78
78
 
79
79
  # Default class for buttons
80
- config.button_class = 'button'
80
+ config.button_class = "button"
81
81
 
82
82
  # Method used to tidy up errors. Specify any Rails Array method.
83
83
  # :first lists the first message for each field.
@@ -88,7 +88,7 @@ SimpleForm.setup do |config|
88
88
  config.error_notification_tag = :div
89
89
 
90
90
  # CSS class to add for error notification helper.
91
- config.error_notification_class = 'field_with_errors'
91
+ config.error_notification_class = "field_with_errors"
92
92
 
93
93
  # ID to add for error notification helper.
94
94
  # config.error_notification_id = nil
@@ -103,7 +103,7 @@ SimpleForm.setup do |config|
103
103
  config.collection_wrapper_tag = :div
104
104
 
105
105
  # You can define the class to use on all collection wrappers. Defaulting to none.
106
- config.collection_wrapper_class = 'control_group'
106
+ config.collection_wrapper_class = "control_group"
107
107
 
108
108
  # You can wrap each item in a collection of radio/check boxes with a tag,
109
109
  # defaulting to :span.
@@ -116,7 +116,7 @@ SimpleForm.setup do |config|
116
116
  config.label_text = proc { |label, required| "#{label}#{required}" }
117
117
 
118
118
  # You can define the class to use on all labels. Default is nil.
119
- config.label_class = 'control-label'
119
+ config.label_class = "control-label"
120
120
 
121
121
  # You can define the default class to be used on forms. Can be overriden
122
122
  # with `html: { :class }`. Defaulting to none.
@@ -170,12 +170,12 @@ SimpleForm.setup do |config|
170
170
  # config.input_class = nil
171
171
 
172
172
  # Define the default class of the input wrapper of the boolean input.
173
- config.boolean_label_class = 'checkbox'
173
+ config.boolean_label_class = "checkbox"
174
174
 
175
175
  # Defines if the default input wrapper class should be included in radio
176
176
  # collection wrappers.
177
177
  # config.include_default_input_wrapper_class = true
178
178
 
179
179
  # Defines which i18n scope will be used in Simple Form.
180
- config.i18n_scope = 'alchemy.forms'
180
+ config.i18n_scope = "alchemy.forms"
181
181
  end
@@ -163,7 +163,8 @@ en:
163
163
 
164
164
  resource_help_texts:
165
165
  site:
166
- aliases: Please separate additional domains with spaces or new lines.
166
+ host: Either enter a <a href="https://en.wikipedia.org/wiki/Fully_qualified_domain_name" target="_blank">FQDN</a> or use a asterisk (*) to allow all domains to access this site.
167
+ aliases: Enter additional domains this site should be accessible by. Please separate them by space or new line.
167
168
 
168
169
  add_nested_element: "Add %{name}"
169
170
  anchor: 'Anchor'
@@ -463,7 +464,11 @@ en:
463
464
  no_files_in_archive: "You do not have any files in your archive."
464
465
  no_images_in_archive: "You don't have any images in your archive."
465
466
  no_more_elements_to_add: "No more elements available."
466
- no_resource_found: "No %{resource} found. Please add your first one below."
467
+ no_resource_found:
468
+ default: "No %{resource} found. Please add your first one below."
469
+ alchemy/language: "<h2>Your website does not have any languages yet.</h2><p>You need at least one language to work with. Please create one below.</p>"
470
+ alchemy/node: "<h2>You do not have any menus yet.</h2><p>With menus your users can navigate your website. You can have multiple menus on your website. How many depends on your website template.</p><p>Please chose which menu you want to create first.</p>"
471
+ alchemy/site: "<h2>You do not have any websites yet.</h2><p>In order to serve requests you need to create a website first.</p><p>This form has been filled with sensible defaults that work in most cases.</p>"
467
472
  no_search_results: "Your search did not return any results."
468
473
  "not a valid image": "This is not an valid image."
469
474
  "or": 'or'
@@ -476,9 +481,6 @@ en:
476
481
  page_published: "Published page"
477
482
  page_restricted: "restricted"
478
483
  page_states:
479
- visible:
480
- "true": "Page is visible in navigation."
481
- "false": "Page is not visible in navigation."
482
484
  public:
483
485
  "true": "Page is published."
484
486
  "false": "Page is unpublished."
@@ -573,7 +575,6 @@ en:
573
575
  button_label: Upload image(s)
574
576
  upload_success: "Picture %{name} uploaded successfully"
575
577
  upload_failure: "Error while uploading %{name}: %{error}"
576
- visible: "visible"
577
578
  want_to_create_new_language: "Do you want to create a new empty language tree?"
578
579
  want_to_make_copy_of_existing_language: "Do you want to copy an existing language tree?"
579
580
  "We need at least one default.": "A default language must exist."
@@ -636,7 +637,7 @@ en:
636
637
  time:
637
638
  formats:
638
639
  alchemy:
639
- default: "%a, %d %b %Y %H:%M:%S %z"
640
+ default: "%m.%d.%Y %H:%M"
640
641
  essence_date: "%Y-%m-%d"
641
642
  page_status: "%m.%d.%Y %H:%M"
642
643
  short_datetime: "%d %b %H:%M"
@@ -703,6 +704,20 @@ en:
703
704
 
704
705
  # Translations for Alchemy database models
705
706
  activerecord:
707
+ errors:
708
+ models:
709
+ alchemy/node:
710
+ attributes:
711
+ base:
712
+ essence_nodes_present: "This menu item is in use inside an Alchemy element on the following pages: %{page_names}."
713
+ alchemy/site:
714
+ attributes:
715
+ languages:
716
+ still_present: "are still attached to this site. Please remove them first."
717
+ alchemy/language:
718
+ attributes:
719
+ pages:
720
+ still_present: "are still attached to this language. Please remove them first."
706
721
  models:
707
722
  gutentag/tag:
708
723
  one: Tag
@@ -781,6 +796,7 @@ en:
781
796
  alchemy/legacy_page_url:
782
797
  urlname: "URL-Path"
783
798
  alchemy/node:
799
+ menu_type: Menu Type
784
800
  name: "Name"
785
801
  title: "Title"
786
802
  nofollow: "Search engine must not follow"
@@ -806,7 +822,6 @@ en:
806
822
  updated_at: "Updated at"
807
823
  urlname: "URL-Path"
808
824
  slug: "Slug"
809
- visible: "visible in navigation"
810
825
  alchemy/picture:
811
826
  image_file_name: "Filename"
812
827
  image_file_height: "Height"
data/config/routes.rb CHANGED
@@ -1,17 +1,18 @@
1
- require 'alchemy/routing_constraints'
1
+ # frozen_string_literal: true
2
+ require "alchemy/routing_constraints"
2
3
 
3
4
  Alchemy::Engine.routes.draw do
4
- root to: 'pages#index'
5
+ root to: "pages#index"
5
6
 
6
- get '/sitemap.xml' => 'pages#sitemap', format: 'xml'
7
+ get "/sitemap.xml" => "pages#sitemap", format: "xml"
7
8
 
8
9
  scope Alchemy.admin_path, {constraints: Alchemy.admin_constraints} do
9
- get '/' => redirect("#{Alchemy.admin_path}/dashboard"), as: :admin
10
- get '/dashboard' => 'admin/dashboard#index', as: :admin_dashboard
11
- get '/dashboard/info' => 'admin/dashboard#info', as: :dashboard_info
12
- get '/help' => 'admin/dashboard#help', as: :help
13
- get '/dashboard/update_check' => 'admin/dashboard#update_check', as: :update_check
14
- get '/leave' => 'admin/base#leave', as: :leave_admin
10
+ get "/" => redirect("#{Alchemy.admin_path}/dashboard"), as: :admin
11
+ get "/dashboard" => "admin/dashboard#index", as: :admin_dashboard
12
+ get "/dashboard/info" => "admin/dashboard#info", as: :dashboard_info
13
+ get "/help" => "admin/dashboard#help", as: :help
14
+ get "/dashboard/update_check" => "admin/dashboard#update_check", as: :update_check
15
+ get "/leave" => "admin/base#leave", as: :leave_admin
15
16
  end
16
17
 
17
18
  namespace :admin, {path: Alchemy.admin_path, constraints: Alchemy.admin_constraints} do
@@ -94,7 +95,7 @@ Alchemy::Engine.routes.draw do
94
95
  end
95
96
  end
96
97
 
97
- resource :clipboard, only: :index, controller: 'clipboard' do
98
+ resource :clipboard, only: :index, controller: "clipboard" do
98
99
  collection do
99
100
  get :index
100
101
  delete :clear
@@ -103,7 +104,7 @@ Alchemy::Engine.routes.draw do
103
104
  end
104
105
  end
105
106
 
106
- resource :trash, only: :index, controller: 'trash' do
107
+ resource :trash, only: :index, controller: "trash" do
107
108
  collection do
108
109
  get :index
109
110
  delete :clear
@@ -118,38 +119,38 @@ Alchemy::Engine.routes.draw do
118
119
 
119
120
  resources :sites
120
121
 
121
- get '/styleguide' => 'styleguide#index'
122
+ get "/styleguide" => "styleguide#index"
122
123
  end
123
124
 
124
- get '/attachment/:id/download(/:name)' => 'attachments#download',
125
+ get "/attachment/:id/download(/:name)" => "attachments#download",
125
126
  as: :download_attachment
126
- get '/attachment/:id/show' => 'attachments#show',
127
+ get "/attachment/:id/show" => "attachments#show",
127
128
  as: :show_attachment
128
129
 
129
130
  resources :messages, only: [:index, :new, :create]
130
131
  resources :elements, only: :show
131
132
  resources :contents, only: :show
132
133
 
133
- namespace :api, defaults: {format: 'json'} do
134
+ namespace :api, defaults: {format: "json"} do
134
135
  resources :contents, only: [:index, :show]
135
136
 
136
137
  resources :elements, only: [:index, :show] do
137
- get '/contents' => 'contents#index', as: 'contents'
138
- get '/contents/:name' => 'contents#show', as: 'content'
138
+ get "/contents" => "contents#index", as: "contents"
139
+ get "/contents/:name" => "contents#show", as: "content"
139
140
  end
140
141
 
141
142
  resources :pages, only: [:index] do
142
- get 'elements' => 'elements#index', as: 'elements'
143
- get 'elements/:named' => 'elements#index', as: 'named_elements'
143
+ get "elements" => "elements#index", as: "elements"
144
+ get "elements/:named" => "elements#index", as: "named_elements"
144
145
  collection do
145
146
  get :nested
146
147
  end
147
148
  end
148
149
 
149
- get '/pages/*urlname(.:format)' => 'pages#show', as: 'page'
150
- get '/admin/pages/:id(.:format)' => 'pages#show', as: 'preview_page'
150
+ get "/pages/*urlname(.:format)" => "pages#show", as: "page"
151
+ get "/admin/pages/:id(.:format)" => "pages#show", as: "preview_page"
151
152
 
152
- resources :nodes, only: [] do
153
+ resources :nodes, only: [:index] do
153
154
  member do
154
155
  patch :move
155
156
  patch :toggle_folded
@@ -157,13 +158,13 @@ Alchemy::Engine.routes.draw do
157
158
  end
158
159
  end
159
160
 
160
- get '/:locale' => 'pages#index',
161
+ get "/:locale" => "pages#index",
161
162
  constraints: {locale: Alchemy::RoutingConstraints::LOCALE_REGEXP},
162
163
  as: :show_language_root
163
164
 
164
165
  # The page show action has to be last route
165
166
  constraints(locale: Alchemy::RoutingConstraints::LOCALE_REGEXP) do
166
- get '(/:locale)/*urlname(.:format)' => 'pages#show',
167
+ get "(/:locale)/*urlname(.:format)" => "pages#show",
167
168
  constraints: Alchemy::RoutingConstraints.new,
168
169
  as: :show_page
169
170
  end