alchemy_cms 4.5.0 → 5.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (388) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +56 -18
  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 +33 -20
  8. data/CHANGELOG.md +117 -0
  9. data/Gemfile +24 -22
  10. data/README.md +32 -20
  11. data/Rakefile +11 -8
  12. data/alchemy_cms.gemspec +6 -5
  13. data/app/assets/javascripts/alchemy/admin.js +1 -5
  14. data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +2 -1
  15. data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +0 -2
  16. data/app/assets/javascripts/alchemy/alchemy.link_dialog.js.coffee +5 -5
  17. data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +17 -17
  18. data/app/assets/javascripts/alchemy/node_select.js +39 -0
  19. data/app/assets/javascripts/alchemy/templates/index.js +1 -0
  20. data/app/assets/javascripts/alchemy/templates/node.hbs +16 -0
  21. data/app/assets/javascripts/alchemy/templates/page.hbs +1 -1
  22. data/app/assets/stylesheets/alchemy/_mixins.scss +2 -3
  23. data/app/assets/stylesheets/alchemy/_variables.scss +2 -2
  24. data/app/assets/stylesheets/alchemy/admin.scss +3 -2
  25. data/app/assets/stylesheets/alchemy/base.scss +0 -1
  26. data/app/assets/stylesheets/alchemy/elements.scss +1 -1
  27. data/app/assets/stylesheets/alchemy/forms.scss +5 -0
  28. data/app/assets/stylesheets/alchemy/lists.scss +0 -8
  29. data/app/assets/stylesheets/alchemy/node-select.scss +43 -0
  30. data/app/assets/stylesheets/alchemy/nodes.scss +2 -2
  31. data/app/assets/stylesheets/alchemy/sitemap.scss +63 -21
  32. data/app/assets/stylesheets/alchemy/tables.scss +1 -24
  33. data/app/controllers/alchemy/admin/attachments_controller.rb +8 -7
  34. data/app/controllers/alchemy/admin/base_controller.rb +13 -33
  35. data/app/controllers/alchemy/admin/clipboard_controller.rb +5 -4
  36. data/app/controllers/alchemy/admin/contents_controller.rb +1 -2
  37. data/app/controllers/alchemy/admin/dashboard_controller.rb +10 -9
  38. data/app/controllers/alchemy/admin/elements_controller.rb +20 -20
  39. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +12 -14
  40. data/app/controllers/alchemy/admin/languages_controller.rb +35 -2
  41. data/app/controllers/alchemy/admin/layoutpages_controller.rb +5 -2
  42. data/app/controllers/alchemy/admin/nodes_controller.rb +5 -4
  43. data/app/controllers/alchemy/admin/pages_controller.rb +50 -63
  44. data/app/controllers/alchemy/admin/pictures_controller.rb +16 -16
  45. data/app/controllers/alchemy/admin/resources_controller.rb +21 -13
  46. data/app/controllers/alchemy/admin/sites_controller.rb +18 -0
  47. data/app/controllers/alchemy/admin/styleguide_controller.rb +1 -0
  48. data/app/controllers/alchemy/admin/tags_controller.rb +5 -3
  49. data/app/controllers/alchemy/admin/trash_controller.rb +6 -6
  50. data/app/controllers/alchemy/api/base_controller.rb +2 -2
  51. data/app/controllers/alchemy/api/contents_controller.rb +4 -4
  52. data/app/controllers/alchemy/api/elements_controller.rb +8 -8
  53. data/app/controllers/alchemy/api/nodes_controller.rb +37 -1
  54. data/app/controllers/alchemy/api/pages_controller.rb +15 -22
  55. data/app/controllers/alchemy/attachments_controller.rb +5 -5
  56. data/app/controllers/alchemy/base_controller.rb +10 -9
  57. data/app/controllers/alchemy/messages_controller.rb +16 -23
  58. data/app/controllers/alchemy/pages_controller.rb +13 -11
  59. data/app/controllers/concerns/alchemy/admin/archive_overlay.rb +3 -2
  60. data/app/controllers/concerns/alchemy/admin/current_language.rb +23 -0
  61. data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +5 -5
  62. data/app/controllers/concerns/alchemy/legacy_page_redirects.rb +4 -4
  63. data/app/controllers/concerns/alchemy/page_redirects.rb +2 -9
  64. data/app/controllers/concerns/alchemy/site_redirects.rb +2 -2
  65. data/app/decorators/alchemy/content_editor.rb +55 -0
  66. data/app/decorators/alchemy/element_editor.rb +39 -0
  67. data/app/helpers/alchemy/admin/attachments_helper.rb +6 -6
  68. data/app/helpers/alchemy/admin/base_helper.rb +36 -35
  69. data/app/helpers/alchemy/admin/contents_helper.rb +3 -3
  70. data/app/helpers/alchemy/admin/elements_helper.rb +3 -88
  71. data/app/helpers/alchemy/admin/essences_helper.rb +8 -117
  72. data/app/helpers/alchemy/admin/form_helper.rb +1 -1
  73. data/app/helpers/alchemy/admin/navigation_helper.rb +24 -23
  74. data/app/helpers/alchemy/admin/pages_helper.rb +12 -12
  75. data/app/helpers/alchemy/admin/pictures_helper.rb +4 -6
  76. data/app/helpers/alchemy/admin/tags_helper.rb +8 -7
  77. data/app/helpers/alchemy/base_helper.rb +13 -8
  78. data/app/helpers/alchemy/elements_block_helper.rb +2 -31
  79. data/app/helpers/alchemy/elements_helper.rb +12 -58
  80. data/app/helpers/alchemy/pages_helper.rb +24 -174
  81. data/app/helpers/alchemy/url_helper.rb +2 -1
  82. data/app/mailers/alchemy/base_mailer.rb +1 -1
  83. data/app/mailers/alchemy/messages_mailer.rb +1 -1
  84. data/app/models/alchemy/attachment.rb +20 -18
  85. data/app/models/alchemy/base_record.rb +2 -5
  86. data/app/models/alchemy/content.rb +33 -52
  87. data/app/models/alchemy/content/factory.rb +24 -31
  88. data/app/models/alchemy/element.rb +45 -53
  89. data/app/models/alchemy/element/definitions.rb +4 -4
  90. data/app/models/alchemy/element/element_contents.rb +9 -6
  91. data/app/models/alchemy/element/element_essences.rb +4 -3
  92. data/app/models/alchemy/element/presenters.rb +3 -2
  93. data/app/models/alchemy/element_to_page.rb +1 -1
  94. data/app/models/alchemy/essence_boolean.rb +1 -3
  95. data/app/models/alchemy/essence_date.rb +2 -3
  96. data/app/models/alchemy/essence_file.rb +4 -4
  97. data/app/models/alchemy/essence_html.rb +1 -3
  98. data/app/models/alchemy/essence_link.rb +1 -3
  99. data/app/models/alchemy/essence_node.rb +18 -0
  100. data/app/models/alchemy/essence_page.rb +3 -16
  101. data/app/models/alchemy/essence_picture.rb +17 -16
  102. data/app/models/alchemy/essence_picture_view.rb +7 -6
  103. data/app/models/alchemy/essence_richtext.rb +1 -3
  104. data/app/models/alchemy/essence_select.rb +1 -3
  105. data/app/models/alchemy/essence_text.rb +0 -2
  106. data/app/models/alchemy/folded_page.rb +1 -0
  107. data/app/models/alchemy/language.rb +21 -35
  108. data/app/models/alchemy/language/code.rb +4 -4
  109. data/app/models/alchemy/legacy_page_url.rb +1 -1
  110. data/app/models/alchemy/message.rb +3 -3
  111. data/app/models/alchemy/node.rb +34 -10
  112. data/app/models/alchemy/page.rb +53 -123
  113. data/app/models/alchemy/page/fixed_attributes.rb +3 -2
  114. data/app/models/alchemy/page/page_elements.rb +35 -44
  115. data/app/models/alchemy/page/page_naming.rb +20 -70
  116. data/app/models/alchemy/page/page_natures.rb +7 -34
  117. data/app/models/alchemy/page/page_scopes.rb +23 -29
  118. data/app/models/alchemy/page/url_path.rb +64 -0
  119. data/app/models/alchemy/picture.rb +40 -30
  120. data/app/models/alchemy/picture/preprocessor.rb +26 -0
  121. data/app/models/alchemy/picture/transformations.rb +9 -7
  122. data/app/models/alchemy/picture/url.rb +5 -5
  123. data/app/models/alchemy/site.rb +6 -36
  124. data/app/models/alchemy/site/layout.rb +2 -2
  125. data/app/models/concerns/alchemy/touch_elements.rb +24 -0
  126. data/app/serializers/alchemy/content_serializer.rb +0 -3
  127. data/app/serializers/alchemy/essence_boolean_serializer.rb +3 -3
  128. data/app/serializers/alchemy/essence_date_serializer.rb +3 -3
  129. data/app/serializers/alchemy/essence_file_serializer.rb +4 -2
  130. data/app/serializers/alchemy/essence_html_serializer.rb +3 -3
  131. data/app/serializers/alchemy/essence_link_serializer.rb +3 -3
  132. data/app/serializers/alchemy/essence_picture_serializer.rb +5 -4
  133. data/app/serializers/alchemy/essence_richtext_serializer.rb +3 -3
  134. data/app/serializers/alchemy/essence_select_serializer.rb +3 -3
  135. data/app/serializers/alchemy/essence_text_serializer.rb +5 -4
  136. data/app/serializers/alchemy/node_serializer.rb +2 -0
  137. data/app/serializers/alchemy/page_serializer.rb +2 -1
  138. data/app/serializers/alchemy/page_tree_serializer.rb +11 -14
  139. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +1 -2
  140. data/app/views/alchemy/admin/attachments/_file_to_assign.html.erb +1 -2
  141. data/app/views/alchemy/admin/attachments/_files_list.html.erb +4 -4
  142. data/app/views/alchemy/admin/contents/create.js.erb +1 -3
  143. data/app/views/alchemy/admin/elements/_element.html.erb +9 -18
  144. data/app/views/alchemy/admin/elements/create.js.erb +1 -1
  145. data/app/views/alchemy/admin/elements/fold.js.erb +1 -1
  146. data/app/views/alchemy/admin/elements/index.html.erb +3 -3
  147. data/app/views/alchemy/admin/essence_files/assign.js.erb +1 -6
  148. data/app/views/alchemy/admin/essence_files/edit.html.erb +1 -1
  149. data/app/views/alchemy/admin/essence_pictures/assign.js.erb +1 -7
  150. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +1 -1
  151. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +7 -7
  152. data/app/views/alchemy/admin/essence_pictures/update.js.erb +1 -1
  153. data/app/views/alchemy/admin/languages/_form.html.erb +5 -5
  154. data/app/views/alchemy/admin/languages/_table.html.erb +3 -3
  155. data/app/views/alchemy/admin/languages/edit.html.erb +1 -0
  156. data/app/views/alchemy/admin/languages/index.html.erb +23 -4
  157. data/app/views/alchemy/admin/languages/new.html.erb +1 -0
  158. data/app/views/alchemy/admin/layoutpages/index.html.erb +6 -2
  159. data/app/views/alchemy/admin/nodes/_form.html.erb +20 -17
  160. data/app/views/alchemy/admin/nodes/_node.html.erb +1 -5
  161. data/app/views/alchemy/admin/nodes/index.html.erb +3 -4
  162. data/app/views/alchemy/admin/pages/_create_language_form.html.erb +0 -8
  163. data/app/views/alchemy/admin/pages/_form.html.erb +1 -2
  164. data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -0
  165. data/app/views/alchemy/admin/pages/_page.html.erb +14 -25
  166. data/app/views/alchemy/admin/pages/_page_infos.html.erb +0 -4
  167. data/app/views/alchemy/admin/pages/_sitemap.html.erb +6 -0
  168. data/app/views/alchemy/admin/pages/edit.html.erb +1 -1
  169. data/app/views/alchemy/admin/pages/info.html.erb +0 -9
  170. data/app/views/alchemy/admin/pages/unlock.js.erb +13 -6
  171. data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +0 -2
  172. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +1 -5
  173. data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +1 -1
  174. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -2
  175. data/app/views/alchemy/admin/pictures/index.html.erb +18 -3
  176. data/app/views/alchemy/admin/resources/_resource.html.erb +1 -1
  177. data/app/views/alchemy/admin/resources/_table.html.erb +2 -2
  178. data/app/views/alchemy/admin/sites/_form.html.erb +8 -0
  179. data/app/views/alchemy/admin/sites/edit.html.erb +1 -0
  180. data/app/views/alchemy/admin/sites/index.html.erb +21 -9
  181. data/app/views/alchemy/admin/sites/new.html.erb +1 -0
  182. data/app/views/alchemy/admin/tags/index.html.erb +2 -2
  183. data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +10 -12
  184. data/app/views/alchemy/essences/_essence_date_editor.html.erb +11 -8
  185. data/app/views/alchemy/essences/_essence_file_editor.html.erb +16 -17
  186. data/app/views/alchemy/essences/_essence_html_editor.html.erb +8 -5
  187. data/app/views/alchemy/essences/_essence_link_editor.html.erb +18 -15
  188. data/app/views/alchemy/essences/_essence_node_editor.html.erb +27 -0
  189. data/app/views/alchemy/essences/_essence_node_view.html.erb +1 -0
  190. data/app/views/alchemy/essences/_essence_page_editor.html.erb +14 -11
  191. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +22 -20
  192. data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +10 -7
  193. data/app/views/alchemy/essences/_essence_select_editor.html.erb +12 -16
  194. data/app/views/alchemy/essences/_essence_text_editor.html.erb +18 -17
  195. data/app/views/alchemy/essences/shared/_essence_picture_tools.html.erb +6 -11
  196. data/app/views/alchemy/pages/show.rss.builder +3 -2
  197. data/app/views/layouts/alchemy/admin.html.erb +1 -0
  198. data/babel.config.js +12 -0
  199. data/bin/rails +5 -4
  200. data/config/alchemy/config.yml +23 -22
  201. data/config/brakeman.ignore +1 -1
  202. data/config/initializers/assets.rb +2 -1
  203. data/config/initializers/dragonfly.rb +2 -1
  204. data/config/initializers/mime_types.rb +1 -0
  205. data/config/initializers/mini_profiler.rb +3 -2
  206. data/config/initializers/simple_form.rb +6 -6
  207. data/config/locales/alchemy.en.yml +29 -14
  208. data/config/routes.rb +25 -24
  209. data/config/spring.rb +3 -2
  210. data/db/migrate/20200226213334_alchemy_four_point_four.rb +313 -0
  211. data/db/migrate/20200423073425_create_alchemy_essence_nodes.rb +11 -0
  212. data/db/migrate/20200504210159_remove_site_id_from_nodes.rb +28 -0
  213. data/db/migrate/20200505215518_add_language_id_foreign_key_to_alchemy_pages.rb +8 -0
  214. data/db/migrate/20200511113603_add_menu_type_to_alchemy_nodes.rb +27 -0
  215. data/db/migrate/20200514091507_make_page_layoutpage_null_false.rb +6 -0
  216. data/db/migrate/20200519073500_remove_visible_from_alchemy_pages.rb +24 -0
  217. data/lib/alchemy/admin/locale.rb +3 -1
  218. data/lib/alchemy/admin/preview_url.rb +85 -0
  219. data/lib/alchemy/auth_accessors.rb +8 -7
  220. data/lib/alchemy/cache_digests/template_tracker.rb +5 -4
  221. data/lib/alchemy/config.rb +28 -2
  222. data/lib/alchemy/configuration_methods.rb +3 -1
  223. data/lib/alchemy/controller_actions.rb +6 -5
  224. data/lib/alchemy/deprecation.rb +2 -1
  225. data/lib/alchemy/elements_finder.rb +5 -5
  226. data/lib/alchemy/engine.rb +23 -8
  227. data/lib/alchemy/errors.rb +0 -7
  228. data/lib/alchemy/essence.rb +17 -16
  229. data/lib/alchemy/filetypes.rb +5 -5
  230. data/lib/alchemy/forms/builder.rb +4 -4
  231. data/lib/alchemy/hints.rb +1 -1
  232. data/lib/alchemy/i18n.rb +2 -1
  233. data/lib/alchemy/install/tasks.rb +41 -0
  234. data/lib/alchemy/modules.rb +12 -12
  235. data/lib/alchemy/name_conversions.rb +5 -5
  236. data/lib/alchemy/on_page_layout/callbacks_runner.rb +1 -0
  237. data/lib/alchemy/page_layout.rb +15 -12
  238. data/lib/alchemy/paths.rb +1 -1
  239. data/lib/alchemy/permissions.rb +7 -6
  240. data/lib/alchemy/resource.rb +23 -13
  241. data/lib/alchemy/resources_helper.rb +12 -18
  242. data/lib/alchemy/routing_constraints.rb +1 -1
  243. data/lib/alchemy/seeder.rb +42 -14
  244. data/lib/alchemy/shell.rb +13 -10
  245. data/lib/alchemy/taggable.rb +1 -0
  246. data/lib/alchemy/tasks/tidy.rb +4 -3
  247. data/lib/alchemy/test_support/config_stubbing.rb +1 -0
  248. data/lib/alchemy/test_support/essence_shared_examples.rb +72 -72
  249. data/lib/alchemy/test_support/factories.rb +1 -1
  250. data/lib/alchemy/test_support/factories/attachment_factory.rb +5 -5
  251. data/lib/alchemy/test_support/factories/content_factory.rb +6 -6
  252. data/lib/alchemy/test_support/factories/dummy_user_factory.rb +7 -7
  253. data/lib/alchemy/test_support/factories/element_factory.rb +9 -9
  254. data/lib/alchemy/test_support/factories/essence_file_factory.rb +3 -3
  255. data/lib/alchemy/test_support/factories/essence_page_factory.rb +3 -3
  256. data/lib/alchemy/test_support/factories/essence_picture_factory.rb +4 -4
  257. data/lib/alchemy/test_support/factories/essence_text_factory.rb +3 -3
  258. data/lib/alchemy/test_support/factories/language_factory.rb +21 -14
  259. data/lib/alchemy/test_support/factories/node_factory.rb +8 -8
  260. data/lib/alchemy/test_support/factories/page_factory.rb +15 -27
  261. data/lib/alchemy/test_support/factories/picture_factory.rb +5 -5
  262. data/lib/alchemy/test_support/factories/site_factory.rb +7 -6
  263. data/lib/alchemy/test_support/integration_helpers.rb +1 -0
  264. data/lib/alchemy/test_support/shared_contexts.rb +5 -4
  265. data/lib/alchemy/test_support/shared_uploader_examples.rb +4 -3
  266. data/lib/alchemy/tinymce.rb +15 -13
  267. data/lib/alchemy/upgrader.rb +8 -7
  268. data/lib/alchemy/upgrader/five_point_zero.rb +41 -0
  269. data/lib/alchemy/upgrader/tasks/element_views_updater.rb +4 -4
  270. data/lib/alchemy/upgrader/tasks/harden_gutentag_migrations.rb +29 -0
  271. data/lib/alchemy/version.rb +1 -1
  272. data/lib/alchemy_cms.rb +52 -50
  273. data/lib/{rails/generators → generators}/alchemy/base.rb +5 -4
  274. data/lib/{rails/generators → generators}/alchemy/elements/elements_generator.rb +13 -9
  275. data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.erb +0 -0
  276. data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.haml +0 -0
  277. data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.slim +0 -0
  278. data/lib/{rails/generators → generators}/alchemy/essence/essence_generator.rb +15 -13
  279. data/lib/generators/alchemy/essence/templates/editor.html.erb +17 -0
  280. data/lib/{rails/generators → generators}/alchemy/essence/templates/view.html.erb +0 -0
  281. data/lib/{rails/generators → generators}/alchemy/install/files/_article.html.erb +0 -0
  282. data/lib/{rails/generators → generators}/alchemy/install/files/_standard.html.erb +0 -0
  283. data/lib/{rails/generators → generators}/alchemy/install/files/alchemy.en.yml +0 -0
  284. data/lib/generators/alchemy/install/files/alchemy_admin.js +1 -0
  285. data/lib/{rails/generators → generators}/alchemy/install/files/all.css +0 -0
  286. data/lib/{rails/generators → generators}/alchemy/install/files/all.js +0 -0
  287. data/lib/{rails/generators → generators}/alchemy/install/files/application.html.erb +0 -0
  288. data/lib/{rails/generators → generators}/alchemy/install/files/article.scss +0 -0
  289. data/lib/generators/alchemy/install/install_generator.rb +169 -0
  290. data/lib/{rails/generators → generators}/alchemy/install/templates/dragonfly.rb.tt +0 -0
  291. data/lib/{rails/generators → generators}/alchemy/install/templates/elements.yml.tt +0 -0
  292. data/lib/{rails/generators → generators}/alchemy/install/templates/menus.yml.tt +0 -0
  293. data/lib/{rails/generators → generators}/alchemy/install/templates/page_layouts.yml.tt +0 -0
  294. data/lib/{rails/generators → generators}/alchemy/menus/menus_generator.rb +2 -2
  295. data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.erb +1 -4
  296. data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.haml +1 -4
  297. data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.slim +1 -4
  298. data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.erb +1 -1
  299. data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.haml +1 -1
  300. data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.slim +1 -1
  301. data/lib/{rails/generators → generators}/alchemy/module/module_generator.rb +3 -2
  302. data/lib/{rails/generators → generators}/alchemy/module/templates/ability.rb.tt +0 -0
  303. data/lib/{rails/generators → generators}/alchemy/module/templates/controller.rb.tt +0 -0
  304. data/lib/{rails/generators → generators}/alchemy/module/templates/module_config.rb.tt +0 -0
  305. data/lib/{rails/generators → generators}/alchemy/page_layouts/page_layouts_generator.rb +5 -4
  306. data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.erb +0 -0
  307. data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.haml +0 -0
  308. data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.slim +0 -0
  309. data/lib/{rails/generators → generators}/alchemy/site_layouts/site_layouts_generator.rb +4 -2
  310. data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.erb +0 -0
  311. data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.haml +0 -0
  312. data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.slim +0 -0
  313. data/lib/{rails/generators → generators}/alchemy/views/views_generator.rb +7 -6
  314. data/lib/kaminari/scoped_pagination_url_helper.rb +1 -0
  315. data/lib/tasks/alchemy/db.rake +3 -19
  316. data/lib/tasks/alchemy/install.rake +5 -48
  317. data/lib/tasks/alchemy/tidy.rake +9 -8
  318. data/lib/tasks/alchemy/upgrade.rake +28 -105
  319. data/package.json +45 -0
  320. data/package/admin.js +14 -0
  321. data/package/src/__tests__/i18n.spec.js +70 -0
  322. data/package/src/i18n.js +48 -0
  323. data/package/src/node_tree.js +72 -0
  324. data/package/src/translations.js +32 -0
  325. data/package/src/utils/__tests__/ajax.spec.js +124 -0
  326. data/package/src/utils/__tests__/events.spec.js +38 -0
  327. data/package/src/utils/ajax.js +48 -0
  328. data/package/src/utils/events.js +16 -0
  329. data/vendor/assets/fonts/fa-regular-400.eot +0 -0
  330. data/vendor/assets/fonts/fa-regular-400.svg +798 -358
  331. data/vendor/assets/fonts/fa-regular-400.ttf +0 -0
  332. data/vendor/assets/fonts/fa-regular-400.woff +0 -0
  333. data/vendor/assets/fonts/fa-regular-400.woff2 +0 -0
  334. data/vendor/assets/fonts/fa-solid-900.eot +0 -0
  335. data/vendor/assets/fonts/fa-solid-900.svg +4933 -1408
  336. data/vendor/assets/fonts/fa-solid-900.ttf +0 -0
  337. data/vendor/assets/fonts/fa-solid-900.woff +0 -0
  338. data/vendor/assets/fonts/fa-solid-900.woff2 +0 -0
  339. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.nestedSortable.js +1 -2
  340. data/vendor/assets/stylesheets/fontawesome/_core.scss +5 -0
  341. data/vendor/assets/stylesheets/fontawesome/_fixed-width.scss +1 -1
  342. data/vendor/assets/stylesheets/fontawesome/_icons.scss +651 -2
  343. data/vendor/assets/stylesheets/fontawesome/_mixins.scss +0 -1
  344. data/vendor/assets/stylesheets/fontawesome/_rotated-flipped.scss +3 -2
  345. data/vendor/assets/stylesheets/fontawesome/_stacked.scss +1 -1
  346. data/vendor/assets/stylesheets/fontawesome/_variables.scss +662 -9
  347. data/vendor/assets/stylesheets/fontawesome/fontawesome.scss +2 -2
  348. data/vendor/assets/stylesheets/fontawesome/regular.scss +23 -0
  349. data/vendor/assets/stylesheets/fontawesome/solid.scss +24 -0
  350. metadata +115 -87
  351. data/app/assets/javascripts/alchemy/alchemy.i18n.js.coffee +0 -32
  352. data/app/assets/javascripts/alchemy/alchemy.node_tree.js +0 -66
  353. data/app/assets/javascripts/alchemy/alchemy.translations.js.coffee +0 -29
  354. data/app/assets/javascripts/alchemy/alchemy.utils.js +0 -45
  355. data/app/helpers/alchemy/essences_helper.rb +0 -119
  356. data/app/models/concerns/alchemy/content_touching.rb +0 -23
  357. data/app/serializers/alchemy/legacy_element_serializer.rb +0 -15
  358. data/app/views/alchemy/admin/contents/_missing.html.erb +0 -17
  359. data/app/views/alchemy/admin/pages/_menu_fields.html.erb +0 -33
  360. data/app/views/alchemy/admin/pages/configure_external.html.erb +0 -32
  361. data/app/views/alchemy/elements/_editor_not_found.html.erb +0 -4
  362. data/app/views/alchemy/navigation/_image_link.html.erb +0 -14
  363. data/app/views/alchemy/navigation/_link.html.erb +0 -19
  364. data/app/views/alchemy/navigation/_renderer.html.erb +0 -29
  365. data/db/migrate/20180226123013_alchemy_four_point_zero.rb +0 -363
  366. data/db/migrate/20180227224537_migrate_tags_to_gutentag.rb +0 -41
  367. data/db/migrate/20180519204655_add_fixed_to_alchemy_elements.rb +0 -6
  368. data/db/migrate/20191016073858_create_alchemy_essence_pages.rb +0 -8
  369. data/db/migrate/20191029212236_create_alchemy_nodes.rb +0 -24
  370. data/db/migrate/20200226081535_add_site_id_to_alchemy_nodes.rb +0 -15
  371. data/lib/alchemy/ssl_protection.rb +0 -32
  372. data/lib/alchemy/tasks/helpers.rb +0 -81
  373. data/lib/alchemy/test_support/controller_requests.rb +0 -93
  374. data/lib/alchemy/upgrader/four_point_four.rb +0 -52
  375. data/lib/alchemy/upgrader/four_point_one.rb +0 -42
  376. data/lib/alchemy/upgrader/four_point_two.rb +0 -85
  377. data/lib/alchemy/upgrader/tasks/cells_migration.rb +0 -43
  378. data/lib/alchemy/upgrader/tasks/cells_upgrader.rb +0 -148
  379. data/lib/alchemy/upgrader/tasks/element_partial_name_variable_updater.rb +0 -28
  380. data/lib/alchemy/upgrader/tasks/harden_acts_as_taggable_on_migrations.rb +0 -27
  381. data/lib/alchemy/upgrader/tasks/picture_gallery_migration.rb +0 -65
  382. data/lib/alchemy/upgrader/tasks/picture_gallery_upgrader.rb +0 -210
  383. data/lib/rails/generators/alchemy/essence/templates/editor.html.erb +0 -15
  384. data/lib/rails/generators/alchemy/install/install_generator.rb +0 -60
  385. data/lib/tasks/alchemy/convert.rake +0 -95
  386. data/vendor/assets/javascripts/sortable/Sortable.min.js +0 -2
  387. data/vendor/assets/stylesheets/fontawesome/fa-regular.scss +0 -22
  388. data/vendor/assets/stylesheets/fontawesome/fa-solid.scss +0 -23
data/README.md CHANGED
@@ -18,7 +18,7 @@ Alchemy is an open source CMS engine written in Ruby on Rails.
18
18
 
19
19
  Read more about Alchemy on the [website](https://alchemy-cms.com) and in the [guidelines](https://guides.alchemy-cms.com).
20
20
 
21
- **CAUTION: This master branch is a development branch that *can* contain bugs. For productive environments you should use the [current Ruby gem version](https://rubygems.org/gems/alchemy_cms), or the [latest stable branch (4.2-stable)](https://github.com/AlchemyCMS/alchemy_cms/tree/4.2-stable).**
21
+ **CAUTION: This master branch is a development branch that *can* contain bugs. For productive environments you should use the [current Ruby gem version](https://rubygems.org/gems/alchemy_cms), or the [latest stable branch (4.5-stable)](https://github.com/AlchemyCMS/alchemy_cms/tree/4.5-stable).**
22
22
 
23
23
 
24
24
  ## ✅ Features
@@ -51,8 +51,9 @@ or visit the existing demo at https://alchemy-demo.herokuapp.com
51
51
 
52
52
  ## 🚂 Rails Version
53
53
 
54
- **This version of AlchemyCMS runs with all versions of Rails 5 and Rails 6**
54
+ **This version of AlchemyCMS runs with Rails 5.2 and Rails 6.0**
55
55
 
56
+ * For a Rails 5.0 or 5.1 compatible version use the [`4.5-stable` branch](https://github.com/AlchemyCMS/alchemy_cms/tree/4.5-stable).
56
57
  * For a Rails 4.2 compatible version use the [`3.6-stable` branch](https://github.com/AlchemyCMS/alchemy_cms/tree/3.6-stable).
57
58
  * For a Rails 4.0/4.1 compatible version use the [`3.1-stable` branch](https://github.com/AlchemyCMS/alchemy_cms/tree/3.1-stable).
58
59
  * For a Rails 3.2 compatible version use the [`2.8-stable` branch](https://github.com/AlchemyCMS/alchemy_cms/tree/2.8-stable).
@@ -78,23 +79,37 @@ For a Ruby 1.8.7 compatible version use the [`2.3-stable` branch](https://github
78
79
 
79
80
  ## ⌨️ Installation
80
81
 
81
- #### 1. Add the Alchemy gem:
82
+ ### Stand Alone Installation
82
83
 
83
- Put this into your `Gemfile`:
84
+ If you do not have a Rails project yet or just want to check out Alchemy, then use this Rails template.
84
85
 
85
- ```ruby
86
- gem 'alchemy_cms', github: 'AlchemyCMS/alchemy_cms', branch: 'master'
86
+ Make sure you have Rails installed first:
87
+
88
+ ```
89
+ $ gem install rails
87
90
  ```
88
91
 
89
- **NOTE:** You normally want to use a stable branch, like `4.1-stable`.
92
+ Then create a new Rails project with:
90
93
 
91
- #### 2. Update your bundle:
94
+ ```
95
+ $ rails new -m https://raw.githubusercontent.com/AlchemyCMS/rails-templates/master/all.rb <MY-PROJECT-NAME>
96
+ ```
92
97
 
93
- ```bash
94
- $ bundle install
98
+ and follow the on screen instructions.
99
+
100
+ ### Manual Installation
101
+
102
+ If you want to manually install Alchemy into your Rails project follow these steps.
103
+
104
+ #### Add the Alchemy gem:
105
+
106
+ Put Alchemy into your `Gemfile` with:
107
+
108
+ ```
109
+ $ bundle add alchemy_cms
95
110
  ```
96
111
 
97
- #### 3. Set the authentication user
112
+ #### Set the authentication user
98
113
 
99
114
  Now you have to decide, if you want to use your own user model or if you want to use
100
115
  the Devise based user model that Alchemy provides and was extracted [into its own gem](https://github.com/AlchemyCMS/alchemy-devise).
@@ -103,17 +118,14 @@ the Devise based user model that Alchemy provides and was extracted [into its ow
103
118
 
104
119
  If you don't have your own user class, you can use the Alchemy user model. Just add the following gem into your `Gemfile`:
105
120
 
106
- ```ruby
107
- gem 'alchemy-devise', github: 'AlchemyCMS/alchemy-devise', branch: 'master'
121
+ ```
122
+ $ bundle add alchemy-devise
108
123
  ```
109
124
 
110
- **NOTE:** You normally want to use a stable branch, like `4.1-stable`.
111
-
112
- Then run:
125
+ Then run the `alchemy-devise` installer:
113
126
 
114
127
  ```bash
115
- $ bundle install
116
- $ bin/rake alchemy_devise:install:migrations
128
+ $ bin/rails g alchemy:devise:install
117
129
  ```
118
130
 
119
131
  ##### Use your User model
@@ -155,7 +167,7 @@ Please follow [this guide](http://guides.alchemy-cms.com/stable/custom_authentic
155
167
  **After** you set the user model you need to run the Alchemy install task:
156
168
 
157
169
  ```bash
158
- $ bin/rake alchemy:install
170
+ $ bin/rails alchemy:install
159
171
  ```
160
172
 
161
173
  Now everything should be set up and you should be able to visit the Alchemy Dashboard at:
@@ -172,7 +184,7 @@ Alchemy has very flexible ways to organize and manage content. Please be sure to
172
184
 
173
185
  ### Custom Controllers
174
186
 
175
- Beginning with Alchemy 3.1 we do not patch the `ApplicationController` anymore. If you have controllers that loads Alchemy content or uses Alchemy helpers in the views (i.e. `render_navigation` or `render_elements`) you can either inherit from `Alchemy::BaseController` or you `include Alchemy::ControllerActions` in your controller (**that's the recommended way**).
187
+ Beginning with Alchemy 3.1 we do not patch the `ApplicationController` anymore. If you have controllers that loads Alchemy content or uses Alchemy helpers in the views (i.e. `render_menu` or `render_elements`) you can either inherit from `Alchemy::BaseController` or you `include Alchemy::ControllerActions` in your controller (**that's the recommended way**).
176
188
 
177
189
  ### Custom admin interface routing
178
190
 
data/Rakefile CHANGED
@@ -39,14 +39,17 @@ namespace :alchemy do
39
39
  namespace :spec do
40
40
  desc "Prepares database for testing Alchemy"
41
41
  task :prepare do
42
- system <<-BASH
43
- cd spec/dummy
44
- export RAILS_ENV=test
45
- bin/rake db:create
46
- bin/rake db:environment:set
47
- bin/rake db:migrate:reset
48
- cd -
49
- BASH
42
+ system(
43
+ <<~BASH
44
+ cd spec/dummy && \
45
+ export RAILS_ENV=test && \
46
+ bin/rake db:create && \
47
+ bin/rake db:environment:set && \
48
+ bin/rake db:migrate:reset && \
49
+ bin/rails g alchemy:install --skip --skip-demo-files --auto-accept && \
50
+ cd -
51
+ BASH
52
+ ) || fail
50
53
  end
51
54
  end
52
55
 
@@ -8,10 +8,10 @@ Gem::Specification.new do |gem|
8
8
  gem.version = Alchemy::VERSION
9
9
  gem.platform = Gem::Platform::RUBY
10
10
  gem.authors = ['Thomas von Deyen', 'Robin Boening', 'Marc Schettke', 'Hendrik Mans', 'Carsten Fregin', 'Martin Meyerhoff']
11
- gem.email = ['alchemy@magiclabs.de']
11
+ gem.email = ['hello@alchemy-cms.com']
12
12
  gem.homepage = 'https://alchemy-cms.com'
13
- gem.summary = 'A powerful, userfriendly and flexible CMS for Rails 5'
14
- gem.description = 'Alchemy is a powerful, userfriendly and flexible Rails 5 CMS.'
13
+ gem.summary = 'A powerful, userfriendly and flexible CMS for Rails'
14
+ gem.description = 'Alchemy is a powerful, userfriendly and flexible Rails CMS.'
15
15
  gem.requirements << 'ImageMagick (libmagick), v6.6 or greater.'
16
16
  gem.required_ruby_version = '>= 2.3.0'
17
17
  gem.license = 'BSD New'
@@ -32,7 +32,7 @@ Gem::Specification.new do |gem|
32
32
  gem.add_runtime_dependency 'kaminari', ['~> 1.1']
33
33
  gem.add_runtime_dependency 'originator', ['~> 3.1']
34
34
  gem.add_runtime_dependency 'non-stupid-digest-assets', ['~> 1.0.8']
35
- gem.add_runtime_dependency 'rails', ['>= 5.0.0', '< 6.1']
35
+ gem.add_runtime_dependency 'rails', ['>= 5.2.0', '< 6.1']
36
36
  gem.add_runtime_dependency 'ransack', ['>= 1.8', '< 3.0']
37
37
  gem.add_runtime_dependency 'request_store', ['~> 1.2']
38
38
  gem.add_runtime_dependency 'responders', ['>= 2.0', '< 4.0']
@@ -41,10 +41,11 @@ Gem::Specification.new do |gem|
41
41
  gem.add_runtime_dependency 'simple_form', ['>= 4.0', '< 6']
42
42
  gem.add_runtime_dependency 'sprockets', ['>= 3.0', '< 5']
43
43
  gem.add_runtime_dependency 'turbolinks', ['>= 2.5']
44
+ gem.add_runtime_dependency 'webpacker', ['>= 4.0', '< 6']
44
45
 
45
46
  gem.add_development_dependency 'capybara', ['~> 3.0']
46
47
  gem.add_development_dependency 'capybara-screenshot', ['~> 1.0']
47
- gem.add_development_dependency 'factory_bot_rails', ['~> 5.0']
48
+ gem.add_development_dependency 'factory_bot_rails', ['~> 6.0']
48
49
  gem.add_development_dependency 'puma', ['~> 4.0']
49
50
  gem.add_development_dependency 'rails-controller-testing', ['~> 1.0']
50
51
  gem.add_development_dependency 'rspec-activemodel-mocks', ['~> 1.0']
@@ -15,10 +15,8 @@
15
15
  //= require requestAnimationFrame
16
16
  //= require select2
17
17
  //= require handlebars
18
- //= require sortable/Sortable.min
19
18
  //= require alchemy/templates
20
19
  //= require alchemy/alchemy.base
21
- //= require alchemy/alchemy.utils
22
20
  //= require alchemy/alchemy.autocomplete
23
21
  //= require alchemy/alchemy.browser
24
22
  //= require alchemy/alchemy.buttons
@@ -34,14 +32,12 @@
34
32
  //= require alchemy/alchemy.growler
35
33
  //= require alchemy/alchemy.gui
36
34
  //= require alchemy/alchemy.hotkeys
37
- //= require alchemy/alchemy.i18n
38
35
  //= require alchemy/alchemy.image_cropper
39
36
  //= require alchemy/alchemy.image_overlay
40
37
  //= require alchemy/alchemy.string_extension
41
38
  //= require alchemy/alchemy.link_dialog
42
39
  //= require alchemy/alchemy.list_filter
43
40
  //= require alchemy/alchemy.initializer
44
- //= require alchemy/alchemy.node_tree
45
41
  //= require alchemy/alchemy.page_sorter
46
42
  //= require alchemy/alchemy.uploader
47
43
  //= require alchemy/alchemy.preview_window
@@ -49,6 +45,6 @@
49
45
  //= require alchemy/alchemy.spinner
50
46
  //= require alchemy/alchemy.tinymce
51
47
  //= require alchemy/alchemy.tooltips
52
- //= require alchemy/alchemy.translations
53
48
  //= require alchemy/alchemy.trash_window
54
49
  //= require alchemy/page_select
50
+ //= require alchemy/node_select
@@ -62,9 +62,10 @@ $.extend Alchemy,
62
62
  removePicture: (selector) ->
63
63
  $form_field = $(selector)
64
64
  $element = $form_field.closest(".element-editor")
65
+ $content = $form_field.closest(".content_editor")
65
66
  if $form_field[0]
66
67
  $form_field.val ""
67
- $element.find(".thumbnail_background").html('<i class="icon far fa-image fa-fw"/>')
68
+ $content.find(".thumbnail_background").html('<i class="icon far fa-image fa-fw"/>')
68
69
  Alchemy.setElementDirty $element
69
70
  false
70
71
 
@@ -179,8 +179,6 @@ Alchemy.ElementEditors =
179
179
  if data.message == 'Alchemy.focusElementEditor'
180
180
  $element = $("#element_#{data.element_id}")
181
181
  Alchemy.ElementEditors.focusElement($element)
182
- else
183
- console.warn 'Unknown message received!', data
184
182
 
185
183
  onClickBody: (e) ->
186
184
  element = $(e.target).parents('.element-editor')[0]
@@ -76,16 +76,16 @@ class window.Alchemy.LinkDialog extends Alchemy.Dialog
76
76
  meta = data.meta
77
77
  results:
78
78
  data.pages.map (page) ->
79
- id: "/#{page.urlname}"
79
+ id: page.url_path
80
80
  name: page.name
81
- urlname: page.urlname
81
+ url_path: page.url_path
82
82
  page_id: page.id
83
83
  more: meta.page * meta.per_page < meta.total_count
84
84
  initSelection: ($element, callback) =>
85
85
  urlname = $element.val()
86
86
  $.get Alchemy.routes.api_pages_path,
87
87
  q:
88
- urlname_eq: urlname.replace(/^\//, '')
88
+ urlname_eq: urlname.replace(/^\/([a-z]{2}(-[A-Z]{2})?\/)?/, '')
89
89
  page: 1
90
90
  per_page: 1,
91
91
  (data) =>
@@ -93,9 +93,9 @@ class window.Alchemy.LinkDialog extends Alchemy.Dialog
93
93
  if page
94
94
  @initElementSelect(page.id)
95
95
  callback
96
- id: "/#{page.urlname}"
96
+ id: page.url_path
97
97
  name: page.name
98
- urlname: page.name
98
+ url_path: page.url_path
99
99
  page_id: page.id
100
100
  formatSelection: (page) ->
101
101
  page.name
@@ -1,24 +1,24 @@
1
- Alchemy.PageSorter = function() {
2
- var $sortables = $('ul#sitemap').find('ul.level_1_children');
1
+ Alchemy.PageSorter = function () {
2
+ var $sortables = $("ul#sitemap").find("ul.level_0_children")
3
3
 
4
4
  $sortables.nestedSortable({
5
- disableNesting: 'no-nest',
5
+ disableNesting: "no-nest",
6
6
  forcePlaceholderSize: true,
7
- handle: '.handle',
8
- items: 'li',
9
- listType: 'ul',
7
+ handle: ".handle",
8
+ items: "li",
9
+ listType: "ul",
10
10
  opacity: 0.5,
11
- placeholder: 'placeholder',
11
+ placeholder: "placeholder",
12
12
  tabSize: 16,
13
- tolerance: 'pointer',
14
- toleranceElement: '> div'
15
- });
13
+ tolerance: "pointer",
14
+ toleranceElement: "> div"
15
+ })
16
16
 
17
- $('#save_page_order').click(function(e) {
18
- e.preventDefault();
19
- Alchemy.Buttons.disable(this);
17
+ $("#save_page_order").click(function (e) {
18
+ e.preventDefault()
19
+ Alchemy.Buttons.disable(this)
20
20
  $.post(Alchemy.routes.order_admin_pages_path, {
21
- set: JSON.stringify($sortables.nestedSortable('toHierarchy'))
22
- });
23
- });
24
- };
21
+ set: JSON.stringify($sortables.nestedSortable("toHierarchy"))
22
+ })
23
+ })
24
+ }
@@ -0,0 +1,39 @@
1
+ $.fn.alchemyNodeSelect = function (options) {
2
+ var renderNodeTemplate = function (node) {
3
+ return HandlebarsTemplates.node({ node: node })
4
+ }
5
+ var queryParamsFromTerm = function (term) {
6
+ return {
7
+ filter: Object.assign(
8
+ { name_or_page_name_cont: term },
9
+ options.query_params
10
+ )
11
+ }
12
+ }
13
+ var resultsFromResponse = function (response) {
14
+ var meta = response.meta
15
+ var data = response.data
16
+ var more = meta.page * meta.per_page < meta.total_count
17
+ return { results: data, more: more }
18
+ }
19
+
20
+ return this.select2({
21
+ placeholder: options.placeholder,
22
+ allowClear: true,
23
+ minimumInputLength: 3,
24
+ initSelection: function (_$el, callback) {
25
+ if (options.initialSelection) {
26
+ callback(options.initialSelection)
27
+ }
28
+ },
29
+ ajax: {
30
+ url: options.url,
31
+ datatype: "json",
32
+ quietMillis: 300,
33
+ data: queryParamsFromTerm,
34
+ results: resultsFromResponse
35
+ },
36
+ formatSelection: renderNodeTemplate,
37
+ formatResult: renderNodeTemplate
38
+ })
39
+ }
@@ -1,3 +1,4 @@
1
1
  //= require alchemy/templates/spinner
2
2
  //= require alchemy/templates/page
3
3
  //= require alchemy/templates/node_folder
4
+ //= require alchemy/templates/node
@@ -0,0 +1,16 @@
1
+ <div class="node-select--node">
2
+ <i class="icon fas fa-list fa-lg"></i>
3
+ <div class="node-select--node-display_name">
4
+ <span class="node-select--node-ancestors">
5
+ {{#each node.ancestors}}
6
+ {{ this.name }} /&nbsp;
7
+ {{/each}}
8
+ </span>
9
+ <span class="node-select--node-name">
10
+ {{ node.name }}
11
+ </span>
12
+ </div>
13
+ <div class="node-select--node-url">
14
+ {{ node.url }}
15
+ </div>
16
+ </div>
@@ -4,6 +4,6 @@
4
4
  {{ page.name }}
5
5
  </span>
6
6
  <span class="page-select--page-urlname">
7
- /{{ page.urlname }}
7
+ {{ page.url_path }}
8
8
  </span>
9
9
  </div>
@@ -49,9 +49,8 @@
49
49
  border-color: $hover-border-color;
50
50
  }
51
51
 
52
- &:active, &:active:focus {
53
- border-color: $hover-border-color;
54
- box-shadow: none;
52
+ &:active, &.active {
53
+ box-shadow: inset $button-box-shadow;
55
54
  }
56
55
 
57
56
  &:focus {
@@ -76,7 +76,7 @@ $button-text-shadow: none !default;
76
76
  $button-box-shadow: 0px 1px 1px -1px #333 !default;
77
77
  $button-focus-box-shadow: 0px 1px 1px 0px $button-focus-border-color !default;
78
78
  $button-padding: 0.55em 2em !default;
79
- $small-button-padding: 0.4em 1.25em !default;
79
+ $small-button-padding: 0.4em 0.8em !default;
80
80
  $button-margin: $form-field-margin !default;
81
81
 
82
82
  $secondary-button-bg-color: transparent !default;
@@ -108,7 +108,7 @@ $form-right-width: 65% !default;
108
108
  $sitemap-line-height: 32px !default;
109
109
  $sitemap-page-background-color: rgba($white, 0.75) !default;
110
110
  $sitemap-page-hover-color: rgba($light_yellow, 0.5) !default;
111
- $sitemap-info-background-color: rgba($linked-color, 0.5) !default;
111
+ $sitemap-info-background-color: rgba($white, 0.5) !default;
112
112
  $sitemap-highlight-color: rgba(#fffba5, 0.5) !default;
113
113
 
114
114
  $main-menu-width: 150px !default;
@@ -5,8 +5,8 @@
5
5
  */
6
6
 
7
7
  @import "fontawesome/fontawesome";
8
- @import "fontawesome/fa-regular";
9
- @import "fontawesome/fa-solid";
8
+ @import "fontawesome/regular";
9
+ @import "fontawesome/solid";
10
10
  @import "alchemy/defaults";
11
11
  @import "alchemy/archive";
12
12
  @import "alchemy/navigation";
@@ -31,6 +31,7 @@
31
31
  @import "alchemy/image_library";
32
32
  @import "alchemy/labels";
33
33
  @import "alchemy/nodes";
34
+ @import "alchemy/node-select";
34
35
  @import "alchemy/notices";
35
36
  @import "alchemy/page-select";
36
37
  @import "alchemy/pagination";
@@ -83,7 +83,6 @@ hr {
83
83
  max-width: 500px;
84
84
  margin: 2em auto;
85
85
  padding: 4*$default-padding;
86
- border: $default-border;
87
86
  background: $medium-gray;
88
87
  border-radius: $default-border-radius;
89
88
  }
@@ -718,7 +718,7 @@ textarea.has_tinymce {
718
718
  visibility: hidden;
719
719
  }
720
720
 
721
- .essence_html_editor textarea {
721
+ .essence_html textarea {
722
722
  font-family: $mono-font-family;
723
723
  resize: vertical;
724
724
  font-size: $form-field-font-size;
@@ -173,6 +173,11 @@ form {
173
173
  .input .hint {
174
174
  @include form-hint;
175
175
  margin-left: $form-left-width;
176
+
177
+ a[href] {
178
+ color: $very-dark-gray;
179
+ text-decoration: underline;
180
+ }
176
181
  }
177
182
 
178
183
  .submit {