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,22 +1,25 @@
1
- <div class="content_editor essence_spree_page" id="<%= content.dom_id %>" data-content-id="<%= content.id %>">
2
- <%= content_label(content) %>
1
+ <%= content_tag :div,
2
+ id: essence_page_editor.dom_id,
3
+ class: essence_page_editor.css_classes,
4
+ data: essence_page_editor.data_attributes do %>
5
+ <%= content_label(essence_page_editor) %>
3
6
  <%= text_field_tag(
4
- content.form_field_name,
5
- content.essence.page_id,
6
- id: content.form_field_id,
7
+ essence_page_editor.form_field_name("page_id"),
8
+ essence_page_editor.essence.page_id,
9
+ id: essence_page_editor.form_field_id,
7
10
  class: 'alchemy_selectbox full_width'
8
11
  ) %>
9
- </div>
12
+ <% end %>
10
13
 
11
14
  <script>
12
- $('#<%= content.form_field_id %>').alchemyPageSelect({
15
+ $('#<%= essence_page_editor.form_field_id %>').alchemyPageSelect({
13
16
  placeholder: "<%= Alchemy.t(:search_page) %>",
14
17
  url: "<%= alchemy.api_pages_path %>",
15
- query_params: <%== content.settings[:query_params].to_json %>,
16
- <% if content.essence.page %>
18
+ query_params: <%== essence_page_editor.settings[:query_params].to_json %>,
19
+ <% if essence_page_editor.essence.page %>
17
20
  initialSelection: {
18
- id: <%= content.essence.page_id %>,
19
- text: "<%= content.essence.page.name %>"
21
+ id: <%= essence_page_editor.essence.page_id %>,
22
+ text: "<%= essence_page_editor.essence.page.name %>"
20
23
  }
21
24
  <% end %>
22
25
  })
@@ -1,42 +1,44 @@
1
1
  <% options = local_assigns.fetch(:options, {}) %>
2
2
 
3
- <%= content_tag :div, id: content.dom_id, data: {"content-id" => content.id}, class: "content_editor essence_picture" do %>
4
- <%= content_label(content) %>
3
+ <%= content_tag :div,
4
+ id: essence_picture_editor.dom_id,
5
+ class: essence_picture_editor.css_classes,
6
+ data: essence_picture_editor.data_attributes do %>
7
+ <%= content_label(essence_picture_editor) %>
5
8
  <div class="picture_thumbnail">
6
9
  <span class="picture_tool delete">
7
10
  <%= link_to render_icon(:times), '#',
8
- onclick: "return Alchemy.removePicture('##{content.form_field_id(:picture_id)}');" %>
11
+ onclick: "return Alchemy.removePicture('##{essence_picture_editor.form_field_id(:picture_id)}');" %>
9
12
  </span>
10
13
  <div class="picture_image">
11
14
  <div class="thumbnail_background">
12
- <%- if content.ingredient -%>
13
- <%= essence_picture_thumbnail(content, options) %>
15
+ <%- if essence_picture_editor.ingredient -%>
16
+ <%= essence_picture_thumbnail(essence_picture_editor) %>
14
17
  <% else %>
15
18
  <%= render_icon(:image, style: 'regular') %>
16
19
  <% end %>
17
20
  </div>
18
21
  </div>
19
- <%- if content.essence.css_class.present? -%>
22
+ <%- if essence_picture_editor.essence.css_class.present? -%>
20
23
  <div class="essence_picture_css_class">
21
- <%= Alchemy.t("alchemy.essence_pictures.css_classes.#{content.essence.css_class}",
22
- default: content.essence.css_class.camelcase) %>
24
+ <%= Alchemy.t("alchemy.essence_pictures.css_classes.#{essence_picture_editor.essence.css_class}",
25
+ default: essence_picture_editor.essence.css_class.camelcase) %>
23
26
  </div>
24
27
  <%- end -%>
25
28
  <div class="edit_images_bottom">
26
29
  <%= render 'alchemy/essences/shared/essence_picture_tools', {
27
- content: content,
28
- options: options
30
+ content: essence_picture_editor.content
29
31
  } %>
30
32
  </div>
31
33
  </div>
32
- <%= hidden_field_tag content.form_field_name(:picture_id),
33
- content.ingredient.try!(:id) %>
34
- <%= hidden_field_tag content.form_field_name(:link),
35
- content.essence.link %>
36
- <%= hidden_field_tag content.form_field_name(:link_title),
37
- content.essence.link_title %>
38
- <%= hidden_field_tag content.form_field_name(:link_class_name),
39
- content.essence.link_class_name %>
40
- <%= hidden_field_tag content.form_field_name(:link_target),
41
- content.essence.link_target %>
34
+ <%= hidden_field_tag essence_picture_editor.form_field_name(:picture_id),
35
+ essence_picture_editor.ingredient.try!(:id) %>
36
+ <%= hidden_field_tag essence_picture_editor.form_field_name(:link),
37
+ essence_picture_editor.essence.link %>
38
+ <%= hidden_field_tag essence_picture_editor.form_field_name(:link_title),
39
+ essence_picture_editor.essence.link_title %>
40
+ <%= hidden_field_tag essence_picture_editor.form_field_name(:link_class_name),
41
+ essence_picture_editor.essence.link_class_name %>
42
+ <%= hidden_field_tag essence_picture_editor.form_field_name(:link_target),
43
+ essence_picture_editor.essence.link_target %>
42
44
  <% end %>
@@ -1,11 +1,14 @@
1
- <div class="content_editor essence_richtext" id="<%= content.dom_id %>">
2
- <%= content_label(content) %>
1
+ <%= content_tag :div,
2
+ id: essence_richtext_editor.dom_id,
3
+ class: essence_richtext_editor.css_classes,
4
+ data: essence_richtext_editor.data_attributes do %>
5
+ <%= content_label(essence_richtext_editor) %>
3
6
  <div class="tinymce_container">
4
7
  <%= text_area_tag(
5
- content.form_field_name,
6
- content.ingredient || '',
7
- class: content.tinymce_class_name,
8
- id: "tinymce_#{content.id}"
8
+ essence_richtext_editor.form_field_name,
9
+ essence_richtext_editor.ingredient || '',
10
+ class: essence_richtext_editor.tinymce_class_name,
11
+ id: "tinymce_#{essence_richtext_editor.id}"
9
12
  ) %>
10
13
  </div>
11
- </div>
14
+ <% end %>
@@ -1,32 +1,28 @@
1
- <% select_values = content.settings_value(:select_values, local_assigns.fetch(:options, {})) %>
2
- <% inline = content.settings_value(:display_inline, local_assigns.fetch(:options, {})) %>
3
- <% html_options = local_assigns.fetch(:html_options, {}) %>
1
+ <% select_values = essence_select_editor.settings[:select_values] %>
4
2
 
5
3
  <%= content_tag :div,
6
- id: content.dom_id,
4
+ id: essence_select_editor.dom_id,
7
5
  class: [
8
- "content_editor",
9
- "essence_select",
10
- inline ? 'display_inline' : nil
11
- ].compact, data: {content_id: content.id} do %>
12
- <%= content_label(content) %>
6
+ essence_select_editor.css_classes,
7
+ essence_select_editor.settings[:display_inline] ? 'display_inline' : ''
8
+ ], data: essence_select_editor.data_attributes do %>
9
+ <%= content_label(essence_select_editor) %>
13
10
 
14
11
  <% if select_values.nil? %>
15
12
  <%= warning(':select_values is nil',
16
13
  "<strong>No select values given.</strong>
17
- <br>Please provide :<code>select_values</code> either as argument to
18
- <code>render_essence_editor</code> helper or as setting on the content definition in
14
+ <br>Please provide <code>select_values</code> on the
15
+ content definition <code>settings</code> in
19
16
  <code>elements.yml</code>.") %>
20
17
  <% else %>
21
18
  <%
22
19
  if select_values.is_a?(Hash)
23
- options_tags = grouped_options_for_select(select_values, content.ingredient)
20
+ options_tags = grouped_options_for_select(select_values, essence_select_editor.ingredient)
24
21
  else
25
- options_tags = options_for_select(select_values, content.ingredient)
22
+ options_tags = options_for_select(select_values, essence_select_editor.ingredient)
26
23
  end %>
27
- <%= select_tag content.form_field_name, options_tags, {
28
- class: ["alchemy_selectbox", "essence_editor_select", html_options[:class]].compact,
29
- style: html_options[:style]
24
+ <%= select_tag essence_select_editor.form_field_name, options_tags, {
25
+ class: ["alchemy_selectbox", "essence_editor_select"]
30
26
  } %>
31
27
  <% end %>
32
28
  <% end %>
@@ -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"