alchemy_cms 4.4.3 → 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 +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 +34 -21
  8. data/CHANGELOG.md +120 -0
  9. data/Gemfile +24 -22
  10. data/README.md +31 -19
  11. data/Rakefile +10 -8
  12. data/alchemy_cms.gemspec +6 -4
  13. data/app/assets/javascripts/alchemy/admin.js +1 -2
  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 +2 -0
  20. data/app/assets/javascripts/alchemy/templates/node.hbs +16 -0
  21. data/app/assets/javascripts/alchemy/templates/node_folder.hbs +3 -0
  22. data/app/assets/javascripts/alchemy/templates/page.hbs +1 -1
  23. data/app/assets/stylesheets/alchemy/_mixins.scss +2 -3
  24. data/app/assets/stylesheets/alchemy/_variables.scss +2 -2
  25. data/app/assets/stylesheets/alchemy/admin.scss +3 -2
  26. data/app/assets/stylesheets/alchemy/base.scss +0 -1
  27. data/app/assets/stylesheets/alchemy/elements.scss +1 -1
  28. data/app/assets/stylesheets/alchemy/forms.scss +5 -0
  29. data/app/assets/stylesheets/alchemy/lists.scss +0 -8
  30. data/app/assets/stylesheets/alchemy/node-select.scss +43 -0
  31. data/app/assets/stylesheets/alchemy/nodes.scss +6 -1
  32. data/app/assets/stylesheets/alchemy/sitemap.scss +63 -21
  33. data/app/assets/stylesheets/alchemy/tables.scss +1 -24
  34. data/app/controllers/alchemy/admin/attachments_controller.rb +8 -7
  35. data/app/controllers/alchemy/admin/base_controller.rb +13 -33
  36. data/app/controllers/alchemy/admin/clipboard_controller.rb +5 -4
  37. data/app/controllers/alchemy/admin/contents_controller.rb +1 -2
  38. data/app/controllers/alchemy/admin/dashboard_controller.rb +10 -9
  39. data/app/controllers/alchemy/admin/elements_controller.rb +20 -20
  40. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +12 -14
  41. data/app/controllers/alchemy/admin/languages_controller.rb +35 -2
  42. data/app/controllers/alchemy/admin/layoutpages_controller.rb +5 -2
  43. data/app/controllers/alchemy/admin/nodes_controller.rb +5 -14
  44. data/app/controllers/alchemy/admin/pages_controller.rb +50 -63
  45. data/app/controllers/alchemy/admin/pictures_controller.rb +16 -16
  46. data/app/controllers/alchemy/admin/resources_controller.rb +21 -13
  47. data/app/controllers/alchemy/admin/sites_controller.rb +18 -0
  48. data/app/controllers/alchemy/admin/styleguide_controller.rb +1 -0
  49. data/app/controllers/alchemy/admin/tags_controller.rb +5 -3
  50. data/app/controllers/alchemy/admin/trash_controller.rb +6 -6
  51. data/app/controllers/alchemy/api/base_controller.rb +2 -2
  52. data/app/controllers/alchemy/api/contents_controller.rb +4 -4
  53. data/app/controllers/alchemy/api/elements_controller.rb +8 -8
  54. data/app/controllers/alchemy/api/nodes_controller.rb +65 -0
  55. data/app/controllers/alchemy/api/pages_controller.rb +15 -22
  56. data/app/controllers/alchemy/attachments_controller.rb +5 -5
  57. data/app/controllers/alchemy/base_controller.rb +10 -9
  58. data/app/controllers/alchemy/messages_controller.rb +16 -23
  59. data/app/controllers/alchemy/pages_controller.rb +13 -11
  60. data/app/controllers/concerns/alchemy/admin/archive_overlay.rb +3 -2
  61. data/app/controllers/concerns/alchemy/admin/current_language.rb +23 -0
  62. data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +5 -5
  63. data/app/controllers/concerns/alchemy/legacy_page_redirects.rb +4 -4
  64. data/app/controllers/concerns/alchemy/page_redirects.rb +2 -9
  65. data/app/controllers/concerns/alchemy/site_redirects.rb +2 -2
  66. data/app/decorators/alchemy/content_editor.rb +55 -0
  67. data/app/decorators/alchemy/element_editor.rb +39 -0
  68. data/app/helpers/alchemy/admin/attachments_helper.rb +6 -6
  69. data/app/helpers/alchemy/admin/base_helper.rb +36 -35
  70. data/app/helpers/alchemy/admin/contents_helper.rb +3 -3
  71. data/app/helpers/alchemy/admin/elements_helper.rb +3 -88
  72. data/app/helpers/alchemy/admin/essences_helper.rb +8 -117
  73. data/app/helpers/alchemy/admin/form_helper.rb +1 -1
  74. data/app/helpers/alchemy/admin/navigation_helper.rb +24 -23
  75. data/app/helpers/alchemy/admin/pages_helper.rb +12 -12
  76. data/app/helpers/alchemy/admin/pictures_helper.rb +3 -3
  77. data/app/helpers/alchemy/admin/tags_helper.rb +8 -7
  78. data/app/helpers/alchemy/base_helper.rb +13 -8
  79. data/app/helpers/alchemy/elements_block_helper.rb +2 -31
  80. data/app/helpers/alchemy/elements_helper.rb +12 -58
  81. data/app/helpers/alchemy/pages_helper.rb +24 -174
  82. data/app/helpers/alchemy/url_helper.rb +2 -1
  83. data/app/mailers/alchemy/base_mailer.rb +1 -1
  84. data/app/mailers/alchemy/messages_mailer.rb +1 -1
  85. data/app/models/alchemy/attachment.rb +20 -18
  86. data/app/models/alchemy/base_record.rb +2 -5
  87. data/app/models/alchemy/content.rb +33 -52
  88. data/app/models/alchemy/content/factory.rb +24 -31
  89. data/app/models/alchemy/element.rb +45 -53
  90. data/app/models/alchemy/element/definitions.rb +4 -4
  91. data/app/models/alchemy/element/element_contents.rb +9 -6
  92. data/app/models/alchemy/element/element_essences.rb +4 -3
  93. data/app/models/alchemy/element/presenters.rb +3 -2
  94. data/app/models/alchemy/element_to_page.rb +1 -1
  95. data/app/models/alchemy/essence_boolean.rb +1 -3
  96. data/app/models/alchemy/essence_date.rb +2 -3
  97. data/app/models/alchemy/essence_file.rb +4 -4
  98. data/app/models/alchemy/essence_html.rb +1 -3
  99. data/app/models/alchemy/essence_link.rb +1 -3
  100. data/app/models/alchemy/essence_node.rb +18 -0
  101. data/app/models/alchemy/essence_page.rb +3 -16
  102. data/app/models/alchemy/essence_picture.rb +17 -16
  103. data/app/models/alchemy/essence_picture_view.rb +7 -6
  104. data/app/models/alchemy/essence_richtext.rb +1 -3
  105. data/app/models/alchemy/essence_select.rb +1 -3
  106. data/app/models/alchemy/essence_text.rb +0 -2
  107. data/app/models/alchemy/folded_page.rb +1 -0
  108. data/app/models/alchemy/language.rb +21 -35
  109. data/app/models/alchemy/language/code.rb +4 -4
  110. data/app/models/alchemy/legacy_page_url.rb +1 -1
  111. data/app/models/alchemy/message.rb +3 -3
  112. data/app/models/alchemy/node.rb +55 -9
  113. data/app/models/alchemy/page.rb +53 -123
  114. data/app/models/alchemy/page/fixed_attributes.rb +3 -2
  115. data/app/models/alchemy/page/page_elements.rb +35 -44
  116. data/app/models/alchemy/page/page_naming.rb +20 -70
  117. data/app/models/alchemy/page/page_natures.rb +7 -34
  118. data/app/models/alchemy/page/page_scopes.rb +23 -29
  119. data/app/models/alchemy/page/url_path.rb +64 -0
  120. data/app/models/alchemy/picture.rb +18 -27
  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 +14 -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 +23 -15
  160. data/app/views/alchemy/admin/nodes/_node.html.erb +5 -19
  161. data/app/views/alchemy/admin/nodes/index.html.erb +8 -19
  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/partials/_routes.html.erb +8 -0
  173. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +1 -5
  174. data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +1 -1
  175. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -2
  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 +15 -24
  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 +37 -14
  208. data/config/routes.rb +32 -28
  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 +64 -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 +26 -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/modules.rb +12 -12
  234. data/lib/alchemy/name_conversions.rb +5 -5
  235. data/lib/alchemy/on_page_layout/callbacks_runner.rb +1 -0
  236. data/lib/alchemy/page_layout.rb +15 -12
  237. data/lib/alchemy/paths.rb +1 -1
  238. data/lib/alchemy/permissions.rb +7 -6
  239. data/lib/alchemy/resource.rb +23 -13
  240. data/lib/alchemy/resources_helper.rb +12 -18
  241. data/lib/alchemy/routing_constraints.rb +1 -1
  242. data/lib/alchemy/seeder.rb +42 -14
  243. data/lib/alchemy/shell.rb +13 -10
  244. data/lib/alchemy/taggable.rb +1 -0
  245. data/lib/alchemy/tasks/tidy.rb +4 -3
  246. data/lib/alchemy/test_support/config_stubbing.rb +1 -0
  247. data/lib/alchemy/test_support/essence_shared_examples.rb +72 -72
  248. data/lib/alchemy/test_support/factories.rb +1 -1
  249. data/lib/alchemy/test_support/factories/attachment_factory.rb +5 -5
  250. data/lib/alchemy/test_support/factories/content_factory.rb +6 -6
  251. data/lib/alchemy/test_support/factories/dummy_user_factory.rb +7 -7
  252. data/lib/alchemy/test_support/factories/element_factory.rb +9 -9
  253. data/lib/alchemy/test_support/factories/essence_file_factory.rb +3 -3
  254. data/lib/alchemy/test_support/factories/essence_page_factory.rb +3 -3
  255. data/lib/alchemy/test_support/factories/essence_picture_factory.rb +4 -4
  256. data/lib/alchemy/test_support/factories/essence_text_factory.rb +3 -3
  257. data/lib/alchemy/test_support/factories/language_factory.rb +16 -14
  258. data/lib/alchemy/test_support/factories/node_factory.rb +8 -8
  259. data/lib/alchemy/test_support/factories/page_factory.rb +15 -27
  260. data/lib/alchemy/test_support/factories/picture_factory.rb +5 -5
  261. data/lib/alchemy/test_support/factories/site_factory.rb +7 -6
  262. data/lib/alchemy/test_support/integration_helpers.rb +1 -0
  263. data/lib/alchemy/test_support/shared_contexts.rb +5 -4
  264. data/lib/alchemy/test_support/shared_uploader_examples.rb +4 -3
  265. data/lib/alchemy/tinymce.rb +15 -13
  266. data/lib/alchemy/upgrader.rb +8 -7
  267. data/lib/alchemy/upgrader/five_point_zero.rb +41 -0
  268. data/lib/alchemy/upgrader/tasks/element_views_updater.rb +4 -4
  269. data/lib/alchemy/upgrader/tasks/harden_gutentag_migrations.rb +29 -0
  270. data/lib/alchemy/version.rb +1 -1
  271. data/lib/alchemy_cms.rb +52 -50
  272. data/lib/{rails/generators → generators}/alchemy/base.rb +5 -4
  273. data/lib/{rails/generators → generators}/alchemy/elements/elements_generator.rb +13 -9
  274. data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.erb +0 -0
  275. data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.haml +0 -0
  276. data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.slim +0 -0
  277. data/lib/{rails/generators → generators}/alchemy/essence/essence_generator.rb +15 -13
  278. data/lib/generators/alchemy/essence/templates/editor.html.erb +17 -0
  279. data/lib/{rails/generators → generators}/alchemy/essence/templates/view.html.erb +0 -0
  280. data/lib/{rails/generators → generators}/alchemy/install/files/_article.html.erb +0 -0
  281. data/lib/{rails/generators → generators}/alchemy/install/files/_standard.html.erb +0 -0
  282. data/lib/{rails/generators → generators}/alchemy/install/files/alchemy.en.yml +0 -0
  283. data/lib/generators/alchemy/install/files/alchemy_admin.js +1 -0
  284. data/lib/{rails/generators → generators}/alchemy/install/files/all.css +0 -0
  285. data/lib/{rails/generators → generators}/alchemy/install/files/all.js +0 -0
  286. data/lib/{rails/generators → generators}/alchemy/install/files/application.html.erb +0 -0
  287. data/lib/{rails/generators → generators}/alchemy/install/files/article.scss +0 -0
  288. data/lib/generators/alchemy/install/install_generator.rb +110 -0
  289. data/lib/{rails/generators → generators}/alchemy/install/templates/dragonfly.rb.tt +0 -0
  290. data/lib/{rails/generators → generators}/alchemy/install/templates/elements.yml.tt +0 -0
  291. data/lib/generators/alchemy/install/templates/menus.yml.tt +8 -0
  292. data/lib/{rails/generators → generators}/alchemy/install/templates/page_layouts.yml.tt +0 -0
  293. data/lib/{rails/generators → generators}/alchemy/menus/menus_generator.rb +5 -5
  294. data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.erb +1 -4
  295. data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.haml +1 -4
  296. data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.slim +1 -4
  297. data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.erb +1 -1
  298. data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.haml +2 -2
  299. data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.slim +2 -2
  300. data/lib/{rails/generators → generators}/alchemy/module/module_generator.rb +3 -2
  301. data/lib/{rails/generators → generators}/alchemy/module/templates/ability.rb.tt +0 -0
  302. data/lib/{rails/generators → generators}/alchemy/module/templates/controller.rb.tt +0 -0
  303. data/lib/{rails/generators → generators}/alchemy/module/templates/module_config.rb.tt +0 -0
  304. data/lib/{rails/generators → generators}/alchemy/page_layouts/page_layouts_generator.rb +5 -4
  305. data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.erb +0 -0
  306. data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.haml +0 -0
  307. data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.slim +0 -0
  308. data/lib/{rails/generators → generators}/alchemy/site_layouts/site_layouts_generator.rb +4 -2
  309. data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.erb +0 -0
  310. data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.haml +0 -0
  311. data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.slim +0 -0
  312. data/lib/{rails/generators → generators}/alchemy/views/views_generator.rb +7 -6
  313. data/lib/kaminari/scoped_pagination_url_helper.rb +1 -0
  314. data/lib/tasks/alchemy/db.rake +3 -19
  315. data/lib/tasks/alchemy/install.rake +3 -2
  316. data/lib/tasks/alchemy/tidy.rake +9 -8
  317. data/lib/tasks/alchemy/upgrade.rake +28 -105
  318. data/package.json +45 -0
  319. data/package/admin.js +14 -0
  320. data/package/src/__tests__/i18n.spec.js +70 -0
  321. data/package/src/i18n.js +48 -0
  322. data/package/src/node_tree.js +72 -0
  323. data/package/src/translations.js +32 -0
  324. data/package/src/utils/__tests__/ajax.spec.js +124 -0
  325. data/package/src/utils/__tests__/events.spec.js +38 -0
  326. data/package/src/utils/ajax.js +48 -0
  327. data/package/src/utils/events.js +16 -0
  328. data/vendor/assets/fonts/fa-regular-400.eot +0 -0
  329. data/vendor/assets/fonts/fa-regular-400.svg +798 -358
  330. data/vendor/assets/fonts/fa-regular-400.ttf +0 -0
  331. data/vendor/assets/fonts/fa-regular-400.woff +0 -0
  332. data/vendor/assets/fonts/fa-regular-400.woff2 +0 -0
  333. data/vendor/assets/fonts/fa-solid-900.eot +0 -0
  334. data/vendor/assets/fonts/fa-solid-900.svg +4933 -1408
  335. data/vendor/assets/fonts/fa-solid-900.ttf +0 -0
  336. data/vendor/assets/fonts/fa-solid-900.woff +0 -0
  337. data/vendor/assets/fonts/fa-solid-900.woff2 +0 -0
  338. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.nestedSortable.js +1 -2
  339. data/vendor/assets/stylesheets/fontawesome/_core.scss +5 -0
  340. data/vendor/assets/stylesheets/fontawesome/_fixed-width.scss +1 -1
  341. data/vendor/assets/stylesheets/fontawesome/_icons.scss +651 -2
  342. data/vendor/assets/stylesheets/fontawesome/_mixins.scss +0 -1
  343. data/vendor/assets/stylesheets/fontawesome/_rotated-flipped.scss +3 -2
  344. data/vendor/assets/stylesheets/fontawesome/_stacked.scss +1 -1
  345. data/vendor/assets/stylesheets/fontawesome/_variables.scss +662 -9
  346. data/vendor/assets/stylesheets/fontawesome/fontawesome.scss +2 -2
  347. data/vendor/assets/stylesheets/fontawesome/regular.scss +23 -0
  348. data/vendor/assets/stylesheets/fontawesome/solid.scss +24 -0
  349. metadata +128 -81
  350. data/app/assets/javascripts/alchemy/alchemy.i18n.js.coffee +0 -32
  351. data/app/assets/javascripts/alchemy/alchemy.translations.js.coffee +0 -29
  352. data/app/helpers/alchemy/essences_helper.rb +0 -119
  353. data/app/models/concerns/alchemy/content_touching.rb +0 -23
  354. data/app/serializers/alchemy/legacy_element_serializer.rb +0 -15
  355. data/app/views/alchemy/admin/contents/_missing.html.erb +0 -17
  356. data/app/views/alchemy/admin/pages/_menu_fields.html.erb +0 -33
  357. data/app/views/alchemy/admin/pages/configure_external.html.erb +0 -32
  358. data/app/views/alchemy/elements/_editor_not_found.html.erb +0 -4
  359. data/app/views/alchemy/navigation/_image_link.html.erb +0 -14
  360. data/app/views/alchemy/navigation/_link.html.erb +0 -19
  361. data/app/views/alchemy/navigation/_renderer.html.erb +0 -29
  362. data/db/migrate/20180226123013_alchemy_four_point_zero.rb +0 -363
  363. data/db/migrate/20180227224537_migrate_tags_to_gutentag.rb +0 -41
  364. data/db/migrate/20180519204655_add_fixed_to_alchemy_elements.rb +0 -6
  365. data/db/migrate/20191016073858_create_alchemy_essence_pages.rb +0 -8
  366. data/db/migrate/20191029212236_create_alchemy_nodes.rb +0 -24
  367. data/db/migrate/20200226081535_add_site_id_to_alchemy_nodes.rb +0 -15
  368. data/lib/alchemy/ssl_protection.rb +0 -32
  369. data/lib/alchemy/tasks/helpers.rb +0 -81
  370. data/lib/alchemy/test_support/controller_requests.rb +0 -93
  371. data/lib/alchemy/upgrader/four_point_four.rb +0 -52
  372. data/lib/alchemy/upgrader/four_point_one.rb +0 -42
  373. data/lib/alchemy/upgrader/four_point_two.rb +0 -85
  374. data/lib/alchemy/upgrader/tasks/cells_migration.rb +0 -43
  375. data/lib/alchemy/upgrader/tasks/cells_upgrader.rb +0 -148
  376. data/lib/alchemy/upgrader/tasks/element_partial_name_variable_updater.rb +0 -28
  377. data/lib/alchemy/upgrader/tasks/harden_acts_as_taggable_on_migrations.rb +0 -27
  378. data/lib/alchemy/upgrader/tasks/picture_gallery_migration.rb +0 -65
  379. data/lib/alchemy/upgrader/tasks/picture_gallery_upgrader.rb +0 -210
  380. data/lib/rails/generators/alchemy/essence/templates/editor.html.erb +0 -15
  381. data/lib/rails/generators/alchemy/install/install_generator.rb +0 -60
  382. data/lib/tasks/alchemy/convert.rake +0 -95
  383. data/vendor/assets/stylesheets/fontawesome/fa-regular.scss +0 -22
  384. data/vendor/assets/stylesheets/fontawesome/fa-solid.scss +0 -23
@@ -0,0 +1 @@
1
+ <%= render content.ingredient if content.ingredient %>
@@ -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 %>
@@ -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"
@@ -1,12 +1,6 @@
1
1
  # == This is the global Alchemy configuration file
2
2
  #
3
3
 
4
- # === Require SSL for login form and all admin modules
5
- #
6
- # NOTE: You have to create a SSL certificate on your server to make this work
7
- #
8
- require_ssl: false
9
-
10
4
  # === Auto Log Out Time
11
5
  #
12
6
  # The amount of time of inactivity in minutes after which the user is kicked out of his current session.
@@ -17,7 +11,7 @@ auto_logout_time: 30
17
11
 
18
12
  # === Redirect Options
19
13
  #
20
- # 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.
21
15
  #
22
16
  redirect_to_public_child: true
23
17
 
@@ -44,24 +38,24 @@ sitemap:
44
38
  show_root: true
45
39
  show_flag: false
46
40
 
47
- # === URL nesting
48
- #
49
- # Since Alchemy 2.6.0, page urls are nested, respectively to their tree position.
50
- #
51
- # Disable +url_nesting+ to get slug only urls.
52
- #
53
- # NOTE: After changing the url_nesting, you should run one of these convert rake tasks:
54
- #
55
- # rake alchemy:convert:urlnames:to_nested
56
- # rake alchemy:convert:urlnames:to_slug
57
- #
58
- url_nesting: true
59
-
60
41
  # === Default items per page in admin views
61
42
  #
62
43
  # In Alchemy's Admin, change how many items you would get shown per page by Kaminari
63
44
  items_per_page: 15
64
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
+
65
59
  # === Picture rendering settings
66
60
  #
67
61
  # Alchemy uses Dragonfly to render images. Use {size: "XXXxYYY", crop: BOOLEAN [true]} to resize images.
@@ -85,7 +79,7 @@ default_site:
85
79
  name: Default Site
86
80
  host: '*'
87
81
 
88
- # This is the default language when a new site gets created.
82
+ # This is the default language when seeding.
89
83
  default_language:
90
84
  code: en
91
85
  name: English
@@ -179,9 +173,6 @@ uploader:
179
173
  #
180
174
  link_target_options: [blank]
181
175
 
182
- # Should pages that redirect to an external url open the link in a new tab/window?
183
- open_external_links_in_new_tab: true
184
-
185
176
  # === Format matchers
186
177
  #
187
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