alchemy_cms 7.4.6 → 8.0.0.a

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.

Potentially problematic release.


This version of alchemy_cms might be problematic. Click here for more details.

Files changed (349) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +86 -0
  3. data/Gemfile +13 -6
  4. data/README.md +13 -5
  5. data/alchemy_cms.gemspec +14 -5
  6. data/app/assets/builds/alchemy/admin/page-select.css +1 -1
  7. data/app/assets/builds/alchemy/admin/print.css +1 -1
  8. data/app/assets/builds/alchemy/admin.css +2 -2
  9. data/app/assets/builds/alchemy/custom-properties.css +1 -1
  10. data/app/assets/builds/alchemy/welcome.css +1 -1
  11. data/app/assets/builds/tinymce/skins/content/alchemy/content.min.css +1 -1
  12. data/app/assets/builds/tinymce/skins/ui/alchemy/content.min.css +1 -0
  13. data/app/assets/builds/tinymce/skins/ui/alchemy/skin.min.css +1 -1
  14. data/app/assets/config/alchemy_manifest.js +0 -2
  15. data/app/assets/images/alchemy/icons-sprite.svg +1 -0
  16. data/app/components/alchemy/admin/resource/applied_filter.rb +29 -0
  17. data/app/components/alchemy/admin/resource/checkbox_filter.rb +36 -0
  18. data/app/components/alchemy/admin/resource/datepicker_filter.rb +42 -0
  19. data/app/components/alchemy/admin/resource/select_filter.rb +43 -0
  20. data/app/components/alchemy/admin/toolbar_button.rb +5 -2
  21. data/app/components/alchemy/ingredients/number_view.rb +18 -0
  22. data/app/controllers/alchemy/admin/attachments_controller.rb +8 -15
  23. data/app/controllers/alchemy/admin/clipboard_controller.rb +2 -6
  24. data/app/controllers/alchemy/admin/elements_controller.rb +1 -1
  25. data/app/controllers/alchemy/admin/languages_controller.rb +1 -1
  26. data/app/controllers/alchemy/admin/pages_controller.rb +15 -15
  27. data/app/controllers/alchemy/admin/pictures_controller.rb +9 -5
  28. data/app/controllers/alchemy/admin/resources_controller.rb +16 -106
  29. data/app/controllers/alchemy/attachments_controller.rb +43 -14
  30. data/app/controllers/alchemy/messages_controller.rb +1 -1
  31. data/app/controllers/alchemy/pages_controller.rb +7 -2
  32. data/app/controllers/concerns/alchemy/admin/resource_filter.rb +92 -0
  33. data/app/decorators/alchemy/element_editor.rb +5 -48
  34. data/app/decorators/alchemy/ingredient_editor.rb +3 -53
  35. data/app/helpers/alchemy/admin/base_helper.rb +14 -84
  36. data/app/helpers/alchemy/admin/elements_helper.rb +4 -4
  37. data/app/helpers/alchemy/admin/pages_helper.rb +1 -1
  38. data/app/helpers/alchemy/base_helper.rb +0 -30
  39. data/app/helpers/alchemy/elements_block_helper.rb +0 -14
  40. data/app/helpers/alchemy/pages_helper.rb +1 -1
  41. data/{lib → app/helpers}/alchemy/resources_helper.rb +5 -45
  42. data/app/javascript/alchemy_admin/components/action.js +2 -0
  43. data/app/javascript/alchemy_admin/components/alchemy_html_element.js +3 -3
  44. data/app/javascript/alchemy_admin/components/datepicker.js +10 -2
  45. data/app/javascript/alchemy_admin/components/element_editor/delete_element_button.js +7 -7
  46. data/app/javascript/alchemy_admin/components/element_editor.js +1 -1
  47. data/app/javascript/alchemy_admin/components/index.js +1 -0
  48. data/app/javascript/alchemy_admin/components/remote_select.js +4 -1
  49. data/app/javascript/alchemy_admin/components/tags_autocomplete.js +5 -1
  50. data/app/javascript/alchemy_admin/components/tinymce.js +4 -2
  51. data/app/javascript/alchemy_admin/components/update_check.js +42 -0
  52. data/app/javascript/alchemy_admin/components/uploader/file_upload.js +15 -8
  53. data/app/javascript/alchemy_admin/components/uploader/progress.js +12 -6
  54. data/app/javascript/alchemy_admin/components/uploader.js +4 -2
  55. data/app/javascript/alchemy_admin/confirm_dialog.js +27 -57
  56. data/app/javascript/alchemy_admin/dirty.js +3 -2
  57. data/app/javascript/alchemy_admin/i18n.js +15 -16
  58. data/app/javascript/alchemy_admin/initializer.js +1 -49
  59. data/app/javascript/alchemy_admin/utils/ajax.js +51 -44
  60. data/app/javascript/alchemy_admin.js +3 -8
  61. data/app/models/alchemy/admin/filters/base.rb +38 -0
  62. data/app/models/alchemy/admin/filters/checkbox.rb +24 -0
  63. data/app/models/alchemy/admin/filters/datepicker.rb +53 -0
  64. data/app/models/alchemy/admin/filters/select.rb +70 -0
  65. data/app/models/alchemy/admin/resource_name.rb +27 -0
  66. data/app/models/alchemy/attachment.rb +51 -34
  67. data/app/models/alchemy/base_record.rb +2 -0
  68. data/app/models/alchemy/element/definitions.rb +1 -1
  69. data/app/models/alchemy/element/element_ingredients.rb +6 -6
  70. data/app/models/alchemy/element/presenters.rb +3 -12
  71. data/app/models/alchemy/element.rb +9 -27
  72. data/app/models/alchemy/element_definition.rb +160 -0
  73. data/app/models/alchemy/ingredient.rb +10 -43
  74. data/app/models/alchemy/ingredient_definition.rb +134 -0
  75. data/app/models/alchemy/ingredient_validator.rb +7 -3
  76. data/app/models/alchemy/ingredients/number.rb +19 -0
  77. data/app/models/alchemy/language.rb +0 -14
  78. data/app/models/alchemy/message.rb +3 -7
  79. data/app/models/alchemy/node.rb +1 -1
  80. data/app/models/alchemy/page/{page_layouts.rb → definitions.rb} +12 -19
  81. data/app/models/alchemy/page/fixed_attributes.rb +1 -1
  82. data/app/models/alchemy/page/page_elements.rb +13 -14
  83. data/app/models/alchemy/page/page_natures.rb +7 -7
  84. data/app/models/alchemy/page/page_scopes.rb +1 -1
  85. data/app/models/alchemy/page.rb +11 -33
  86. data/app/models/alchemy/page_definition.rb +115 -0
  87. data/app/models/alchemy/picture.rb +69 -79
  88. data/app/models/alchemy/picture_variant.rb +115 -5
  89. data/{lib → app/models}/alchemy/resource.rb +4 -18
  90. data/{lib → app/models}/alchemy/searchable_resource.rb +15 -0
  91. data/app/models/alchemy/site/layout.rb +5 -5
  92. data/app/models/alchemy/site.rb +0 -15
  93. data/app/models/alchemy/storage_adapter/active_storage/attachment_url.rb +41 -0
  94. data/app/models/alchemy/storage_adapter/active_storage/picture_url.rb +55 -0
  95. data/app/models/alchemy/storage_adapter/active_storage/preprocessor.rb +40 -0
  96. data/app/models/alchemy/storage_adapter/active_storage.rb +173 -0
  97. data/app/models/alchemy/{attachment/url.rb → storage_adapter/dragonfly/attachment_url.rb} +12 -12
  98. data/app/models/alchemy/{picture/url.rb → storage_adapter/dragonfly/picture_url.rb} +28 -12
  99. data/app/models/alchemy/{picture → storage_adapter/dragonfly}/preprocessor.rb +4 -4
  100. data/app/models/alchemy/storage_adapter/dragonfly.rb +183 -0
  101. data/app/models/alchemy/storage_adapter.rb +74 -0
  102. data/app/models/concerns/alchemy/picture_thumbnails.rb +19 -6
  103. data/app/serializers/alchemy/element_serializer.rb +0 -1
  104. data/app/services/alchemy/dragonfly_to_image_processing.rb +100 -0
  105. data/app/stylesheets/alchemy/_defaults.scss +3 -0
  106. data/app/stylesheets/alchemy/_extends.scss +69 -0
  107. data/app/{assets/stylesheets → stylesheets}/alchemy/_mixins.scss +36 -49
  108. data/app/stylesheets/alchemy/_variables.scss +5 -0
  109. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/archive.scss +20 -37
  110. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/base.scss +16 -14
  111. data/app/stylesheets/alchemy/admin/buttons.scss +160 -0
  112. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/clipboard.scss +2 -2
  113. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/dashboard.scss +13 -16
  114. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/dialogs.scss +23 -16
  115. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/elements.scss +150 -105
  116. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/errors.scss +5 -5
  117. data/app/stylesheets/alchemy/admin/filters.scss +58 -0
  118. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/flatpickr.scss +53 -60
  119. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/form_fields.scss +21 -7
  120. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/forms.scss +31 -19
  121. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/frame.scss +20 -16
  122. data/app/stylesheets/alchemy/admin/hints.scss +5 -0
  123. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/icons.scss +10 -1
  124. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/image_library.scss +10 -8
  125. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/images.scss +1 -1
  126. data/app/stylesheets/alchemy/admin/labels.scss +5 -0
  127. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/lists.scss +3 -3
  128. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/navigation.scss +61 -55
  129. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/nodes.scss +21 -18
  130. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/notices.scss +18 -18
  131. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/page-select.scss +2 -2
  132. data/app/stylesheets/alchemy/admin/pagination.scss +144 -0
  133. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/preview_window.scss +8 -6
  134. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/print.scss +1 -1
  135. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/resource_info.scss +8 -5
  136. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/search.scss +9 -6
  137. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/selects.scss +49 -37
  138. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/shoelace.scss +5 -6
  139. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/sitemap.scss +38 -33
  140. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/tables.scss +6 -4
  141. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/tags.scss +6 -4
  142. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/toolbar.scss +12 -6
  143. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/typography.scss +2 -2
  144. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/upload.scss +7 -5
  145. data/app/stylesheets/alchemy/admin.scss +44 -0
  146. data/app/stylesheets/alchemy/custom-properties.css +244 -0
  147. data/app/stylesheets/alchemy/welcome.scss +75 -0
  148. data/app/{assets/stylesheets → stylesheets}/tinymce/skins/content/alchemy/content.scss +8 -9
  149. data/app/stylesheets/tinymce/skins/ui/alchemy/content.scss +1 -0
  150. data/app/{assets/stylesheets → stylesheets}/tinymce/skins/ui/alchemy/skin.scss +133 -136
  151. data/app/views/alchemy/admin/attachments/_files_list.html.erb +2 -2
  152. data/app/views/alchemy/admin/attachments/_overlay_file_list.html.erb +1 -1
  153. data/app/views/alchemy/admin/{elements/_clipboard_button.html.erb → clipboard/_button.html.erb} +3 -5
  154. data/app/views/alchemy/admin/clipboard/_update_nested_element_button.turbo_stream.erb +11 -0
  155. data/app/views/alchemy/admin/clipboard/clear.turbo_stream.erb +4 -0
  156. data/app/views/alchemy/admin/clipboard/index.html.erb +15 -13
  157. data/app/views/alchemy/admin/clipboard/insert.turbo_stream.erb +18 -0
  158. data/app/views/alchemy/admin/clipboard/remove.turbo_stream.erb +9 -0
  159. data/app/views/alchemy/admin/dashboard/info.html.erb +17 -31
  160. data/app/views/alchemy/admin/elements/_element.html.erb +4 -8
  161. data/app/views/alchemy/admin/elements/_form.html.erb +1 -1
  162. data/app/views/alchemy/admin/elements/_header.html.erb +1 -0
  163. data/app/views/alchemy/admin/elements/_toolbar.html.erb +4 -6
  164. data/app/views/alchemy/admin/elements/create.turbo_stream.erb +2 -1
  165. data/app/views/alchemy/admin/elements/index.html.erb +2 -2
  166. data/app/views/alchemy/admin/ingredients/_file_fields.html.erb +3 -16
  167. data/app/views/alchemy/admin/ingredients/_picture_fields.html.erb +0 -9
  168. data/app/views/alchemy/admin/languages/_form.html.erb +1 -1
  169. data/app/views/alchemy/admin/languages/_table.html.erb +1 -1
  170. data/app/views/alchemy/admin/languages/index.html.erb +5 -2
  171. data/app/views/alchemy/admin/layoutpages/index.html.erb +1 -12
  172. data/app/views/alchemy/admin/pages/_form.html.erb +2 -2
  173. data/app/views/alchemy/admin/pages/_page.html.erb +2 -3
  174. data/app/views/alchemy/admin/pages/_toolbar.html.erb +1 -15
  175. data/app/views/alchemy/admin/pages/index.html.erb +1 -1
  176. data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +9 -12
  177. data/app/views/alchemy/admin/partials/_search_form.html.erb +4 -9
  178. data/app/views/alchemy/admin/pictures/_archive.html.erb +4 -7
  179. data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +2 -1
  180. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +1 -1
  181. data/app/views/alchemy/admin/pictures/index.html.erb +2 -7
  182. data/app/views/alchemy/admin/resources/_applied_filters.html.erb +8 -0
  183. data/app/views/alchemy/admin/resources/_filter_bar.html.erb +11 -21
  184. data/app/views/alchemy/admin/resources/_pagination.html.erb +6 -0
  185. data/app/views/alchemy/admin/resources/_per_page_select.html.erb +4 -2
  186. data/app/views/alchemy/admin/resources/_resource_table.html.erb +1 -1
  187. data/app/views/alchemy/admin/resources/_table_header.html.erb +1 -15
  188. data/app/views/alchemy/admin/sites/index.html.erb +5 -1
  189. data/app/views/alchemy/admin/styleguide/index.html.erb +8 -0
  190. data/app/views/alchemy/admin/tags/index.html.erb +1 -1
  191. data/app/views/alchemy/admin/tinymce/_setup.html.erb +7 -7
  192. data/app/{javascript/alchemy_admin/locales/en.js → views/alchemy/admin/translations/_en.js} +5 -2
  193. data/app/views/alchemy/admin/uploader/_button.html.erb +1 -1
  194. data/app/views/alchemy/admin/uploader/_setup.html.erb +4 -4
  195. data/app/views/alchemy/base/redirect.js.erb +1 -1
  196. data/app/views/alchemy/ingredients/_number_editor.html.erb +24 -0
  197. data/app/views/alchemy/no_index.html.erb +31 -0
  198. data/app/views/alchemy/welcome.html.erb +12 -10
  199. data/app/views/kaminari/alchemy/_first_page.html.erb +5 -3
  200. data/app/views/kaminari/alchemy/_last_page.html.erb +5 -3
  201. data/app/views/kaminari/alchemy/_next_page.html.erb +5 -3
  202. data/app/views/kaminari/alchemy/_paginator.html.erb +18 -13
  203. data/app/views/kaminari/alchemy/_prev_page.html.erb +5 -3
  204. data/app/views/layouts/alchemy/admin.html.erb +5 -9
  205. data/bun.lockb +0 -0
  206. data/bundles/remixicon.mjs +153 -0
  207. data/config/alchemy/config.yml +3 -2
  208. data/config/initializers/dragonfly.rb +0 -1
  209. data/config/initializers/mime_types.rb +1 -0
  210. data/config/locales/alchemy.en.yml +32 -14
  211. data/config/routes.rb +0 -2
  212. data/eslint.config.js +2 -1
  213. data/lib/alchemy/admin/preview_url.rb +4 -5
  214. data/lib/alchemy/cache_digests/template_tracker.rb +6 -9
  215. data/lib/alchemy/config_missing.rb +14 -0
  216. data/lib/alchemy/configuration/base_option.rb +24 -0
  217. data/lib/alchemy/configuration/boolean_option.rb +16 -0
  218. data/lib/alchemy/configuration/class_option.rb +15 -0
  219. data/lib/alchemy/configuration/class_set_option.rb +46 -0
  220. data/lib/alchemy/configuration/integer_list_option.rb +13 -0
  221. data/lib/alchemy/configuration/integer_option.rb +12 -0
  222. data/lib/alchemy/configuration/list_option.rb +22 -0
  223. data/lib/alchemy/configuration/regexp_option.rb +11 -0
  224. data/lib/alchemy/configuration/string_list_option.rb +13 -0
  225. data/lib/alchemy/configuration/string_option.rb +11 -0
  226. data/lib/alchemy/configuration.rb +115 -0
  227. data/lib/alchemy/configuration_methods.rb +3 -1
  228. data/lib/alchemy/configurations/default_language.rb +12 -0
  229. data/lib/alchemy/configurations/default_site.rb +10 -0
  230. data/lib/alchemy/configurations/format_matchers.rb +11 -0
  231. data/lib/alchemy/configurations/mailer.rb +16 -0
  232. data/lib/alchemy/configurations/main.rb +216 -0
  233. data/lib/alchemy/configurations/preview.rb +32 -0
  234. data/lib/alchemy/configurations/sitemap.rb +10 -0
  235. data/lib/alchemy/configurations/uploader.rb +34 -0
  236. data/lib/alchemy/engine.rb +65 -17
  237. data/lib/alchemy/hints.rb +3 -7
  238. data/lib/alchemy/on_page_layout.rb +2 -2
  239. data/lib/alchemy/propshaft/tinymce_asset.rb +15 -0
  240. data/lib/alchemy/seeder.rb +2 -2
  241. data/lib/alchemy/tasks/usage.rb +4 -4
  242. data/lib/alchemy/test_support/config_stubbing.rb +1 -7
  243. data/lib/alchemy/test_support/factories/attachment_factory.rb +13 -2
  244. data/lib/alchemy/test_support/factories/language_factory.rb +1 -1
  245. data/lib/alchemy/test_support/factories/page_factory.rb +2 -3
  246. data/lib/alchemy/test_support/factories/picture_factory.rb +30 -2
  247. data/lib/alchemy/test_support/factories/site_factory.rb +2 -2
  248. data/lib/alchemy/test_support/having_crop_action_examples.rb +2 -2
  249. data/lib/alchemy/test_support/having_picture_thumbnails_examples.rb +80 -26
  250. data/lib/alchemy/test_support/shared_ingredient_examples.rb +5 -5
  251. data/lib/alchemy/upgrader/.keep +0 -0
  252. data/lib/alchemy/upgrader/eight_zero.rb +14 -0
  253. data/lib/alchemy/upgrader.rb +33 -20
  254. data/lib/alchemy/version.rb +1 -1
  255. data/lib/alchemy.rb +192 -170
  256. data/lib/alchemy_cms.rb +1 -7
  257. data/lib/generators/alchemy/ingredient/ingredient_generator.rb +0 -3
  258. data/lib/generators/alchemy/install/files/_article.html.erb +6 -4
  259. data/lib/generators/alchemy/install/files/alchemy.en.yml +22 -3
  260. data/lib/generators/alchemy/install/files/application.html.erb +5 -0
  261. data/lib/generators/alchemy/install/install_generator.rb +5 -14
  262. data/lib/generators/alchemy/install/templates/alchemy.rb.tt +196 -0
  263. data/lib/generators/alchemy/install/templates/dragonfly.rb.tt +0 -1
  264. data/lib/generators/alchemy/install/templates/elements.yml.tt +3 -1
  265. data/lib/generators/alchemy/install/templates/menus.yml.tt +1 -1
  266. data/lib/generators/alchemy/install/templates/page_layouts.yml.tt +2 -2
  267. data/lib/generators/alchemy/page_layouts/page_layouts_generator.rb +2 -2
  268. data/lib/tasks/alchemy/assets.rake +14 -0
  269. data/lib/tasks/alchemy/upgrade.rake +12 -47
  270. data/vendor/javascript/tinymce.min.js +1 -1
  271. data/vitest.config.js +21 -0
  272. metadata +181 -180
  273. data/app/assets/builds/alchemy/admin/page-select.css.map +0 -1
  274. data/app/assets/builds/alchemy/admin/print.css.map +0 -1
  275. data/app/assets/builds/alchemy/admin.css.map +0 -1
  276. data/app/assets/builds/alchemy/custom-properties.css.map +0 -1
  277. data/app/assets/builds/alchemy/welcome.css.map +0 -1
  278. data/app/assets/builds/tinymce/skins/content/alchemy/content.min.css.map +0 -1
  279. data/app/assets/builds/tinymce/skins/ui/alchemy/skin.min.css.map +0 -1
  280. data/app/assets/javascripts/alchemy/admin.js +0 -10
  281. data/app/assets/stylesheets/alchemy/_defaults.scss +0 -3
  282. data/app/assets/stylesheets/alchemy/_deprecated_variables.scss +0 -45
  283. data/app/assets/stylesheets/alchemy/_deprecation.scss +0 -17
  284. data/app/assets/stylesheets/alchemy/_extends.scss +0 -62
  285. data/app/assets/stylesheets/alchemy/_variables.scss +0 -201
  286. data/app/assets/stylesheets/alchemy/admin/buttons.scss +0 -124
  287. data/app/assets/stylesheets/alchemy/admin/hints.scss +0 -5
  288. data/app/assets/stylesheets/alchemy/admin/labels.scss +0 -3
  289. data/app/assets/stylesheets/alchemy/admin/pagination.scss +0 -92
  290. data/app/assets/stylesheets/alchemy/admin.scss +0 -42
  291. data/app/assets/stylesheets/alchemy/custom-properties.css +0 -98
  292. data/app/assets/stylesheets/alchemy/welcome.scss +0 -57
  293. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.css +0 -711
  294. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.inline.css +0 -705
  295. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.inline.min.css +0 -7
  296. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.min.css +0 -7
  297. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.mobile.css +0 -29
  298. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.mobile.min.css +0 -7
  299. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/skin.mobile.css +0 -677
  300. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/skin.mobile.min.css +0 -7
  301. data/app/controllers/alchemy/elements_controller.rb +0 -32
  302. data/app/models/alchemy/element/dom_id.rb +0 -31
  303. data/app/models/alchemy/picture/calculations.rb +0 -49
  304. data/app/models/alchemy/picture/transformations.rb +0 -115
  305. data/app/views/alchemy/admin/attachments/destroy.js.erb +0 -1
  306. data/app/views/alchemy/admin/clipboard/clear.js.erb +0 -3
  307. data/app/views/alchemy/admin/clipboard/insert.js.erb +0 -29
  308. data/app/views/alchemy/admin/clipboard/remove.js.erb +0 -10
  309. data/app/views/alchemy/admin/resources/_filter.html.erb +0 -12
  310. data/app/views/alchemy/admin/resources/_resource.html.erb +0 -34
  311. data/app/views/alchemy/admin/resources/_table.html.erb +0 -29
  312. data/app/views/alchemy/elements/show.html.erb +0 -1
  313. data/app/views/alchemy/elements/show.js.erb +0 -1
  314. data/app/views/alchemy/ingredients/_audio_view.html.erb +0 -1
  315. data/app/views/alchemy/ingredients/_boolean_view.html.erb +0 -1
  316. data/app/views/alchemy/ingredients/_datetime_view.html.erb +0 -3
  317. data/app/views/alchemy/ingredients/_file_view.html.erb +0 -4
  318. data/app/views/alchemy/ingredients/_headline_view.html.erb +0 -4
  319. data/app/views/alchemy/ingredients/_html_view.html.erb +0 -1
  320. data/app/views/alchemy/ingredients/_link_view.html.erb +0 -4
  321. data/app/views/alchemy/ingredients/_node_view.html.erb +0 -1
  322. data/app/views/alchemy/ingredients/_page_view.html.erb +0 -1
  323. data/app/views/alchemy/ingredients/_picture_view.html.erb +0 -4
  324. data/app/views/alchemy/ingredients/_richtext_view.html.erb +0 -3
  325. data/app/views/alchemy/ingredients/_select_view.html.erb +0 -1
  326. data/app/views/alchemy/ingredients/_text_view.html.erb +0 -4
  327. data/app/views/alchemy/ingredients/_video_view.html.erb +0 -3
  328. data/babel.config.js +0 -12
  329. data/config/initializers/assets.rb +0 -4
  330. data/lib/alchemy/config.rb +0 -114
  331. data/lib/alchemy/element_definition.rb +0 -73
  332. data/lib/alchemy/page_layout.rb +0 -73
  333. data/lib/alchemy/resource_filter.rb +0 -40
  334. data/lib/alchemy/upgrader/seven_point_four.rb +0 -26
  335. data/lib/alchemy/upgrader/seven_point_three.rb +0 -52
  336. data/lib/generators/alchemy/ingredient/templates/view.html.erb +0 -1
  337. data/lib/generators/alchemy/install/files/alchemy_admin.js +0 -1
  338. data/lib/generators/alchemy/install/files/all.js +0 -11
  339. data/lib/generators/alchemy/install/files/article.css +0 -25
  340. data/vendor/assets/images/remixicon.symbol.svg +0 -11
  341. /data/app/{assets/stylesheets → stylesheets}/alchemy/_fonts.scss +0 -0
  342. /data/app/{assets/stylesheets → stylesheets}/alchemy/admin/attachment-select.scss +0 -0
  343. /data/app/{assets/stylesheets → stylesheets}/alchemy/admin/attachments.scss +0 -0
  344. /data/app/{assets/stylesheets → stylesheets}/alchemy/admin/flash.scss +0 -0
  345. /data/app/{assets/stylesheets → stylesheets}/alchemy/admin/list_filter.scss +0 -0
  346. /data/app/{assets/stylesheets → stylesheets}/alchemy/admin/node-select.scss +0 -0
  347. /data/app/{assets/stylesheets → stylesheets}/alchemy/admin/spinner.scss +0 -0
  348. /data/app/{assets/stylesheets → stylesheets}/tinymce/skins/skintool.json +0 -0
  349. /data/app/{assets/stylesheets → stylesheets}/tinymce/skins/ui/alchemy/fonts/tinymce-mobile.woff +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dac52b8382bc65dd200d1e8c0217e0a53b7e5774f2b074c6a3bc6716da242e41
4
- data.tar.gz: ddbd1426fedc2282cb82b3ece15d1d6b1a9553c0da5b7f640b84198599c6eca9
3
+ metadata.gz: 708aeccfd9ff6e2b377839f142bae8f4cc2bbb7580c526ca385e265b5b7d8b82
4
+ data.tar.gz: 4a1c029aaf995d1d5e644c5be255fef48a1b084241ece80c804fe2d93a4c3c6a
5
5
  SHA512:
6
- metadata.gz: 213cf6190790413cfd04f8e0b6fc9f8c45fe718d2474a5c2aa097cbb455986989491cf149ffcf8d2bad15e0d21fff2c2894d7eb3fedb5f5acab743e38d9c6d53
7
- data.tar.gz: b6f588b2940581cd18a33bc1e126d8b128f5ce78c403ec79db66e320605df8088fa84d856efe6e84912d3909e40fed4d7ea5764b68f99c304c04e173fb00ab99
6
+ metadata.gz: 52e23716317e088a6c9c79db087ffc2bd40928f29f09b7620461996308aa3b257341ae0e4696c45a5a2c3b7bce1738687e00b7ebbc61180f30efa60124ba3e9e
7
+ data.tar.gz: ad540d4a2c64082a63d901edc66e0daa26a0d489a986b1dd588e756a4338e96d989182efb155b84e973224ba633d322c33ef869a912677fbae3b6081b32d26c4
data/CHANGELOG.md CHANGED
@@ -1,5 +1,91 @@
1
1
  # Changelog
2
2
 
3
+ ## 8.0.0.a (2025-07-10)
4
+
5
+ - Resources Admin: Fix editing with filters [#3311](https://github.com/AlchemyCMS/alchemy_cms/pull/3311) ([mamhoff](https://github.com/mamhoff))
6
+ - Fix XMLHttpRequest AggregateError in Vitest test suite [#3310](https://github.com/AlchemyCMS/alchemy_cms/pull/3310) ([tvdeyen](https://github.com/tvdeyen))
7
+ - Update net-smtp requirement from ~> 0.4.0 to ~> 0.5.1 [#3309](https://github.com/AlchemyCMS/alchemy_cms/pull/3309) ([dependabot](https://github.com/apps/dependabot))
8
+ - Update execjs requirement from ~> 2.9.1 to ~> 2.10.0 [#3308](https://github.com/AlchemyCMS/alchemy_cms/pull/3308) ([dependabot](https://github.com/apps/dependabot))
9
+ - Update rspec-rails requirement from ~> 7.1 to ~> 8.0 [#3307](https://github.com/AlchemyCMS/alchemy_cms/pull/3307) ([dependabot](https://github.com/apps/dependabot))
10
+ - Update rails_live_reload requirement from ~> 0.4.0 to ~> 0.5.0 [#3306](https://github.com/AlchemyCMS/alchemy_cms/pull/3306) ([dependabot](https://github.com/apps/dependabot))
11
+ - Convert JS test suite from Jest to Vitest [#3300](https://github.com/AlchemyCMS/alchemy_cms/pull/3300) ([tvdeyen](https://github.com/tvdeyen))
12
+ - refactor(uploader): Do not use arguments in constructor [#3299](https://github.com/AlchemyCMS/alchemy_cms/pull/3299) ([tvdeyen](https://github.com/tvdeyen))
13
+ - Fix yaml syntax in dependabot config file [#3298](https://github.com/AlchemyCMS/alchemy_cms/pull/3298) ([tvdeyen](https://github.com/tvdeyen))
14
+ - Do not generate CSS source maps [#3297](https://github.com/AlchemyCMS/alchemy_cms/pull/3297) ([tvdeyen](https://github.com/tvdeyen))
15
+ - Update bundled Tinymce to v7.9.1 [#3296](https://github.com/AlchemyCMS/alchemy_cms/pull/3296) ([tvdeyen](https://github.com/tvdeyen))
16
+ - fix(dependabot): Use bun [#3295](https://github.com/AlchemyCMS/alchemy_cms/pull/3295) ([tvdeyen](https://github.com/tvdeyen))
17
+ - Fix multi language picture descriptions [#3290](https://github.com/AlchemyCMS/alchemy_cms/pull/3290) ([tvdeyen](https://github.com/tvdeyen))
18
+ - Add robot icon to SVG sprite [#3289](https://github.com/AlchemyCMS/alchemy_cms/pull/3289) ([tvdeyen](https://github.com/tvdeyen))
19
+ - Tweak small button appearance [#3288](https://github.com/AlchemyCMS/alchemy_cms/pull/3288) ([tvdeyen](https://github.com/tvdeyen))
20
+ - Add server error turbo_stream template [#3287](https://github.com/AlchemyCMS/alchemy_cms/pull/3287) ([tvdeyen](https://github.com/tvdeyen))
21
+ - fix(PictureThumbnails): Do not fail if size is nil [#3286](https://github.com/AlchemyCMS/alchemy_cms/pull/3286) ([tvdeyen](https://github.com/tvdeyen))
22
+ - Remove non visual custom elements after connect [#3285](https://github.com/AlchemyCMS/alchemy_cms/pull/3285) ([tvdeyen](https://github.com/tvdeyen))
23
+ - Add Active Storage adapter [#3283](https://github.com/AlchemyCMS/alchemy_cms/pull/3283) ([tvdeyen](https://github.com/tvdeyen))
24
+ - Remove admin attachments download action [#3282](https://github.com/AlchemyCMS/alchemy_cms/pull/3282) ([tvdeyen](https://github.com/tvdeyen))
25
+ - Use mime type for attachment extension [#3281](https://github.com/AlchemyCMS/alchemy_cms/pull/3281) ([tvdeyen](https://github.com/tvdeyen))
26
+ - Merge Transformations module into PictureVariant [#3280](https://github.com/AlchemyCMS/alchemy_cms/pull/3280) ([tvdeyen](https://github.com/tvdeyen))
27
+ - Use image_file_extension in picture validation [#3279](https://github.com/AlchemyCMS/alchemy_cms/pull/3279) ([tvdeyen](https://github.com/tvdeyen))
28
+ - Extract Dragonfly integration into adapter [#3278](https://github.com/AlchemyCMS/alchemy_cms/pull/3278) ([tvdeyen](https://github.com/tvdeyen))
29
+ - Use image_file_extension for picture variant rendering [#3277](https://github.com/AlchemyCMS/alchemy_cms/pull/3277) ([tvdeyen](https://github.com/tvdeyen))
30
+ - Use Alchemy.config accessors instead of hash key [#3275](https://github.com/AlchemyCMS/alchemy_cms/pull/3275) ([tvdeyen](https://github.com/tvdeyen))
31
+ - Move `can_be_cropped_to?` into `picture_thumbnails` [#3274](https://github.com/AlchemyCMS/alchemy_cms/pull/3274) ([tvdeyen](https://github.com/tvdeyen))
32
+ - Pass picture to Picture.url_class [#3273](https://github.com/AlchemyCMS/alchemy_cms/pull/3273) ([tvdeyen](https://github.com/tvdeyen))
33
+ - Use image_file extension as render format [#3272](https://github.com/AlchemyCMS/alchemy_cms/pull/3272) ([tvdeyen](https://github.com/tvdeyen))
34
+ - Move file fixtures into default Rails folder [#3271](https://github.com/AlchemyCMS/alchemy_cms/pull/3271) ([tvdeyen](https://github.com/tvdeyen))
35
+ - Fix formatting of alchemy config template [#3269](https://github.com/AlchemyCMS/alchemy_cms/pull/3269) ([tvdeyen](https://github.com/tvdeyen))
36
+ - Copy new config initializer during upgrade [#3268](https://github.com/AlchemyCMS/alchemy_cms/pull/3268) ([tvdeyen](https://github.com/tvdeyen))
37
+ - Drop Rails 7.0 support [#3267](https://github.com/AlchemyCMS/alchemy_cms/pull/3267) ([tvdeyen](https://github.com/tvdeyen))
38
+ - Add IngredientDefinition model [#3266](https://github.com/AlchemyCMS/alchemy_cms/pull/3266) ([tvdeyen](https://github.com/tvdeyen))
39
+ - Convert ElementDefinition into ActiveModel [#3264](https://github.com/AlchemyCMS/alchemy_cms/pull/3264) ([tvdeyen](https://github.com/tvdeyen))
40
+ - Convert PageLayout into ActiveModel [#3263](https://github.com/AlchemyCMS/alchemy_cms/pull/3263) ([tvdeyen](https://github.com/tvdeyen))
41
+ - New welcome screen [#3260](https://github.com/AlchemyCMS/alchemy_cms/pull/3260) ([tvdeyen](https://github.com/tvdeyen))
42
+ - New pagination UX [#3259](https://github.com/AlchemyCMS/alchemy_cms/pull/3259) ([tvdeyen](https://github.com/tvdeyen))
43
+ - Use Turbo Confirms [#3258](https://github.com/AlchemyCMS/alchemy_cms/pull/3258) ([tvdeyen](https://github.com/tvdeyen))
44
+ - Fix Icons [#3256](https://github.com/AlchemyCMS/alchemy_cms/pull/3256) ([tvdeyen](https://github.com/tvdeyen))
45
+ - Use Turbo Frame and Streams for clipboard [#3255](https://github.com/AlchemyCMS/alchemy_cms/pull/3255) ([tvdeyen](https://github.com/tvdeyen))
46
+ - Remove ingredient view partials [#3254](https://github.com/AlchemyCMS/alchemy_cms/pull/3254) ([tvdeyen](https://github.com/tvdeyen))
47
+ - fix(alchemy-select): Remove clear button of select2 [#3252](https://github.com/AlchemyCMS/alchemy_cms/pull/3252) ([tvdeyen](https://github.com/tvdeyen))
48
+ - Fix thumbnail bg pattern [#3249](https://github.com/AlchemyCMS/alchemy_cms/pull/3249) ([tvdeyen](https://github.com/tvdeyen))
49
+ - Remove dragonfly_svg plugin [#3247](https://github.com/AlchemyCMS/alchemy_cms/pull/3247) ([tvdeyen](https://github.com/tvdeyen))
50
+ - Add alchemy-update-check element [#3246](https://github.com/AlchemyCMS/alchemy_cms/pull/3246) ([tvdeyen](https://github.com/tvdeyen))
51
+ - Lazy load page layouts for select [#3244](https://github.com/AlchemyCMS/alchemy_cms/pull/3244) ([tvdeyen](https://github.com/tvdeyen))
52
+ - New filters: Translate `include_blank` per filter [#3243](https://github.com/AlchemyCMS/alchemy_cms/pull/3243) ([mamhoff](https://github.com/mamhoff))
53
+ - Use custom properties instead of Sass variables [#3242](https://github.com/AlchemyCMS/alchemy_cms/pull/3242) ([tvdeyen](https://github.com/tvdeyen))
54
+ - Only enhance `assets:precompile` task if Propshaft is present [#3241](https://github.com/AlchemyCMS/alchemy_cms/pull/3241) ([mamhoff](https://github.com/mamhoff))
55
+ - Fix assign dialogs search [#3240](https://github.com/AlchemyCMS/alchemy_cms/pull/3240) ([tvdeyen](https://github.com/tvdeyen))
56
+ - Use fetch() over XHR for ajax [#3239](https://github.com/AlchemyCMS/alchemy_cms/pull/3239) ([tvdeyen](https://github.com/tvdeyen))
57
+ - Fix redirect to recent pictures after upload [#3238](https://github.com/AlchemyCMS/alchemy_cms/pull/3238) ([tvdeyen](https://github.com/tvdeyen))
58
+ - Respect default resource filter set in controller [#3237](https://github.com/AlchemyCMS/alchemy_cms/pull/3237) ([tvdeyen](https://github.com/tvdeyen))
59
+ - Filter Bar: Submit form on any "change" event in #filter_bar [#3236](https://github.com/AlchemyCMS/alchemy_cms/pull/3236) ([mamhoff](https://github.com/mamhoff))
60
+ - fix(<alchemy-tinymce>): Do not expect an element editor [#3235](https://github.com/AlchemyCMS/alchemy_cms/pull/3235) ([tvdeyen](https://github.com/tvdeyen))
61
+ - Load JS translations into DOM [#3233](https://github.com/AlchemyCMS/alchemy_cms/pull/3233) ([tvdeyen](https://github.com/tvdeyen))
62
+ - Allow filtering with a time/date picker [#3231](https://github.com/AlchemyCMS/alchemy_cms/pull/3231) ([mamhoff](https://github.com/mamhoff))
63
+ - Remove require of alchemy/admin/all file [#3230](https://github.com/AlchemyCMS/alchemy_cms/pull/3230) ([tvdeyen](https://github.com/tvdeyen))
64
+ - Load Alchemy's config.yml before app initializers [#3229](https://github.com/AlchemyCMS/alchemy_cms/pull/3229) ([mamhoff](https://github.com/mamhoff))
65
+ - Compile icon sprite [#3227](https://github.com/AlchemyCMS/alchemy_cms/pull/3227) ([tvdeyen](https://github.com/tvdeyen))
66
+ - Hide body while custom elements load [#3226](https://github.com/AlchemyCMS/alchemy_cms/pull/3226) ([tvdeyen](https://github.com/tvdeyen))
67
+ - Custom format validations [#3225](https://github.com/AlchemyCMS/alchemy_cms/pull/3225) ([tvdeyen](https://github.com/tvdeyen))
68
+ - Add Number ingredient [#3224](https://github.com/AlchemyCMS/alchemy_cms/pull/3224) ([tvdeyen](https://github.com/tvdeyen))
69
+ - Stop testing Ruby 3.1 [#3223](https://github.com/AlchemyCMS/alchemy_cms/pull/3223) ([mamhoff](https://github.com/mamhoff))
70
+ - Skip PushJavaScript Job for PRs without changed bun lock [#3221](https://github.com/AlchemyCMS/alchemy_cms/pull/3221) ([mamhoff](https://github.com/mamhoff))
71
+ - Move resource name methods into Module [#3220](https://github.com/AlchemyCMS/alchemy_cms/pull/3220) ([mamhoff](https://github.com/mamhoff))
72
+ - Use Alchemy.config in specs [#3218](https://github.com/AlchemyCMS/alchemy_cms/pull/3218) ([mamhoff](https://github.com/mamhoff))
73
+ - Use Alchemy.user_class_name to configure model_stamper [#3217](https://github.com/AlchemyCMS/alchemy_cms/pull/3217) ([mamhoff](https://github.com/mamhoff))
74
+ - Stop testing Rails 7.0 [#3216](https://github.com/AlchemyCMS/alchemy_cms/pull/3216) ([mamhoff](https://github.com/mamhoff))
75
+ - Ransack filters [#3215](https://github.com/AlchemyCMS/alchemy_cms/pull/3215) ([mamhoff](https://github.com/mamhoff))
76
+ - Use `Alchemy.config.show_page_searchable_checkbox` [#3214](https://github.com/AlchemyCMS/alchemy_cms/pull/3214) ([tvdeyen](https://github.com/tvdeyen))
77
+ - Allow is_safe_redirect_path to recognize customized admin path [#3212](https://github.com/AlchemyCMS/alchemy_cms/pull/3212) ([rabbitbike](https://github.com/rabbitbike))
78
+ - Resource "Download CSV" link: Use all filter params [#3209](https://github.com/AlchemyCMS/alchemy_cms/pull/3209) ([mamhoff](https://github.com/mamhoff))
79
+ - Use editable resource attributes for resource_params [#3208](https://github.com/AlchemyCMS/alchemy_cms/pull/3208) ([tvdeyen](https://github.com/tvdeyen))
80
+ - Fix link dialog for links with url scheme mailto [#3204](https://github.com/AlchemyCMS/alchemy_cms/pull/3204) ([tvdeyen](https://github.com/tvdeyen))
81
+ - Fix hidden element style [#3203](https://github.com/AlchemyCMS/alchemy_cms/pull/3203) ([tvdeyen](https://github.com/tvdeyen))
82
+ - CI: Use own script to check changes files [#3198](https://github.com/AlchemyCMS/alchemy_cms/pull/3198) ([tvdeyen](https://github.com/tvdeyen))
83
+ - Only set elementEditor dirty if present during assignment [#3195](https://github.com/AlchemyCMS/alchemy_cms/pull/3195) ([tvdeyen](https://github.com/tvdeyen))
84
+ - Prevent content overflowing in tinymce editor fullscreen mode [#3194](https://github.com/AlchemyCMS/alchemy_cms/pull/3194) ([rabbitbike](https://github.com/rabbitbike))
85
+ - Fix image cropper [#3192](https://github.com/AlchemyCMS/alchemy_cms/pull/3192) ([tvdeyen](https://github.com/tvdeyen))
86
+ - Deprecate `Alchemy.enable_searchable` for `Alchemy.config.show_page_searchable_checkbox` [#3188](https://github.com/AlchemyCMS/alchemy_cms/pull/3188) ([mamhoff](https://github.com/mamhoff))
87
+ - Add Alchemy.config and DSL for type-safe configuration [#3178](https://github.com/AlchemyCMS/alchemy_cms/pull/3178) ([mamhoff](https://github.com/mamhoff))
88
+
3
89
  ## 7.4.6 (2025-27-06)
4
90
 
5
91
  - [7.4-stable] Fix multi language picture descriptions [#3293](https://github.com/AlchemyCMS/alchemy_cms/pull/3293) ([alchemycms-bot](https://github.com/alchemycms-bot))
data/Gemfile CHANGED
@@ -15,17 +15,22 @@ if ENV["DB"] == "mysql" || ENV["DB"] == "mariadb"
15
15
  end
16
16
  gem "pg", "~> 1.0" if ENV["DB"] == "postgresql"
17
17
 
18
- gem "alchemy_i18n", git: "https://github.com/AlchemyCMS/alchemy_i18n.git", branch: "4.2-stable"
18
+ gem "alchemy_i18n", github: "AlchemyCMS/alchemy_i18n", branch: "main"
19
+
20
+ if ENV["ALCHEMY_STORAGE_ADAPTER"] == "active_storage"
21
+ gem "ruby-vips"
22
+ end
19
23
 
20
24
  group :development, :test do
21
- gem "execjs", "~> 2.9.1"
25
+ gem "execjs", "~> 2.10.0"
22
26
  gem "rubocop", require: false
23
27
  gem "standard", "~> 1.25", require: false
24
28
 
29
+ # Still need Sprockets for tests
30
+ gem "sprockets", "~> 4.2", ">= 4.2.1", require: false
31
+
25
32
  if ENV["GITHUB_ACTIONS"]
26
33
  gem "simplecov-cobertura", "~> 2.1"
27
- # Necessary because GH Actions gem cache does not have this "Bundled with Ruby" gem installed
28
- gem "rexml", "~> 3.2.4"
29
34
 
30
35
  # https://github.com/hotwired/turbo-rails/issues/512
31
36
  if rails_version == "7.1"
@@ -59,13 +64,15 @@ end
59
64
  # Necessary until https://github.com/mikel/mail/pull/1439
60
65
  # got merged and released.
61
66
  if Gem.ruby_version >= Gem::Version.new("3.1.0")
62
- gem "net-smtp", "~> 0.4.0", require: false
67
+ gem "net-smtp", "~> 0.5.1", require: false
63
68
  end
64
69
 
65
70
  gem "web-console", "~> 4.2", group: :development
66
71
 
67
- gem "rails_live_reload", "~> 0.4.0"
72
+ gem "rails_live_reload", "~> 0.5.0"
68
73
 
69
74
  gem "dartsass-rails", "~> 0.5.0"
70
75
 
76
+ gem "propshaft", "~> 1.0"
77
+
71
78
  gem "gem-release", "~> 2.2"
data/README.md CHANGED
@@ -10,6 +10,7 @@
10
10
 
11
11
  [![Backers on Open Collective](https://opencollective.com/alchemy_cms/backers/badge.svg?color=blue)](#backers)
12
12
  [![Sponsors on Open Collective](https://opencollective.com/alchemy_cms/sponsors/badge.svg?color=blue)](#sponsors)
13
+ [![Open Source Helpers](https://www.codetriage.com/alchemycms/alchemy_cms/badges/users.svg)](https://www.codetriage.com/alchemycms/alchemy_cms)
13
14
 
14
15
  <img src="./app/assets/images/alchemy/alchemy-logo.svg" width=300>
15
16
 
@@ -17,7 +18,7 @@ Alchemy is an open source CMS engine written in Ruby on Rails.
17
18
 
18
19
  Read more about Alchemy on the [website](https://alchemy-cms.com) and in the [guidelines](https://guides.alchemy-cms.com).
19
20
 
20
- **CAUTION: This main branch is a development branch that *can* contain bugs. For productive environments you should use the [current Ruby gem version](https://rubygems.org/gems/alchemy_cms), or the [latest stable branch (7.0-stable)](https://github.com/AlchemyCMS/alchemy_cms/tree/7.0-stable).**
21
+ **CAUTION: This main branch is a development branch that *can* contain bugs. For productive environments you should use the [current Ruby gem version](https://rubygems.org/gems/alchemy_cms), or the [latest stable branch (7.3-stable)](https://github.com/AlchemyCMS/alchemy_cms/tree/7.3-stable).**
21
22
 
22
23
  ## 🏆 Main sponsor
23
24
 
@@ -43,14 +44,14 @@ Read more about Alchemy on the [website](https://alchemy-cms.com) and in the [gu
43
44
 
44
45
  ## 🎮 Demo
45
46
 
46
- Visit the existing demo at https://alchemy-demo.fly.dev/
47
+ Visit the existing demo at https://demo.alchemy-cms.com/
47
48
 
48
49
  - Login: `demo`
49
50
  - Password: `demo123`
50
51
 
51
52
  ## 🚂 Rails Version
52
53
 
53
- **This version of AlchemyCMS runs with Rails 7.0 and 7.1**
54
+ **This version of AlchemyCMS runs with >= Rails 7.0**
54
55
 
55
56
  * For a Rails 6.1 compatible version use the [`7.0-stable` branch](https://github.com/AlchemyCMS/alchemy_cms/tree/7.0-stable).
56
57
  * For a Rails 6.0 compatible version use the [`6.1-stable` branch](https://github.com/AlchemyCMS/alchemy_cms/tree/6.1-stable).
@@ -66,7 +67,9 @@ Visit the existing demo at https://alchemy-demo.fly.dev/
66
67
 
67
68
  ## 💎 Ruby Version
68
69
 
69
- Alchemy runs with Ruby >= 2.5.0.
70
+ Alchemy runs with Ruby >= 3.1.0.
71
+
72
+ For a Ruby 3.0 compatible version use the [`7.2-stable` branch](https://github.com/AlchemyCMS/alchemy_cms/tree/7.2-stable).
70
73
 
71
74
  For a Ruby 2.4 compatible version use the [`5.2-stable` branch](https://github.com/AlchemyCMS/alchemy_cms/tree/5.2-stable).
72
75
 
@@ -243,7 +246,7 @@ $ bin/rake alchemy:upgrade
243
246
  Alchemy will print out useful information after running the automated tasks that help a smooth upgrade path.
244
247
  So please **take your time and read them**.
245
248
 
246
- Always be sure to keep an eye on the `config/alchemy/config.yml.defaults` file and update your `config/alchemy/config.yml` accordingly.
249
+ Always be sure to keep an eye on the output of your Rails app when starting. There will probably be useful information about deprecations.
247
250
 
248
251
  Also, `git diff` is your friend.
249
252
 
@@ -411,7 +414,12 @@ $ bundle exec rake release
411
414
  ## ✍️ Authors
412
415
 
413
416
  * Thomas von Deyen: <https://github.com/tvdeyen>
417
+ * Martin Meyerhoff: <https://github.com/mamhoff>
418
+ * Sascha Karnatz: <https://github.com/sascha-karnatz>
414
419
  * Robin Böning: <https://github.com/robinboening>
420
+
421
+ ### Alumni
422
+
415
423
  * Marc Schettke: <https://github.com/masche842>
416
424
  * Hendrik Mans: <https://github.com/hmans>
417
425
  * Carsten Fregin: <https://github.com/cfregin>
data/alchemy_cms.gemspec CHANGED
@@ -19,6 +19,10 @@ Gem::Specification.new do |gem|
19
19
  gem.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^spec/|bun\.lockdb|package\.json|^\.}) }
20
20
  gem.require_paths = ["lib"]
21
21
 
22
+ gem.metadata["homepage_uri"] = gem.homepage
23
+ gem.metadata["source_code_uri"] = "https://github.com/AlchemyCMS/alchemy_cms"
24
+ gem.metadata["changelog_uri"] = "https://github.com/AlchemyCMS/alchemy_cms/blob/main/CHANGELOG.md"
25
+
22
26
  %w[
23
27
  actionmailer
24
28
  actionpack
@@ -26,10 +30,11 @@ Gem::Specification.new do |gem|
26
30
  activejob
27
31
  activemodel
28
32
  activerecord
33
+ activestorage
29
34
  activesupport
30
35
  railties
31
36
  ].each do |rails_gem|
32
- gem.add_runtime_dependency rails_gem, [">= 7.0", "< 8.1"]
37
+ gem.add_runtime_dependency rails_gem, [">= 7.1", "< 8.1"]
33
38
  end
34
39
 
35
40
  gem.add_runtime_dependency "active_model_serializers", ["~> 0.10.14"]
@@ -38,14 +43,13 @@ Gem::Specification.new do |gem|
38
43
  gem.add_runtime_dependency "cancancan", [">= 2.1", "< 4.0"]
39
44
  gem.add_runtime_dependency "csv", ["~> 3.3"]
40
45
  gem.add_runtime_dependency "dragonfly", ["~> 1.4"]
41
- gem.add_runtime_dependency "dragonfly_svg", ["~> 0.0.4"]
42
46
  gem.add_runtime_dependency "gutentag", ["~> 2.2", ">= 2.2.1"]
43
- gem.add_runtime_dependency "importmap-rails", ["~> 1.2", ">= 1.2.1"]
47
+ gem.add_runtime_dependency "image_processing", ["~> 1.14"]
48
+ gem.add_runtime_dependency "importmap-rails", ["~> 2.0"]
44
49
  gem.add_runtime_dependency "kaminari", ["~> 1.1"]
45
50
  gem.add_runtime_dependency "originator", ["~> 3.1"]
46
51
  gem.add_runtime_dependency "ransack", [">= 1.8", "< 5.0"]
47
52
  gem.add_runtime_dependency "simple_form", [">= 4.0", "< 6"]
48
- gem.add_runtime_dependency "sprockets-rails", [">= 3.5", "< 4"]
49
53
  gem.add_runtime_dependency "turbo-rails", [">= 1.4", "< 2.1"]
50
54
  gem.add_runtime_dependency "view_component", ["~> 3.0"]
51
55
 
@@ -56,7 +60,12 @@ Gem::Specification.new do |gem|
56
60
  gem.add_development_dependency "puma", ["~> 6.0"]
57
61
  gem.add_development_dependency "rails-controller-testing", ["~> 1.0"]
58
62
  gem.add_development_dependency "rspec-activemodel-mocks", ["~> 1.0"]
59
- gem.add_development_dependency "rspec-rails", ["~> 6.1"]
63
+ case ENV.fetch("RAILS_VERSION", "8.0")
64
+ when "7.1"
65
+ gem.add_development_dependency "rspec-rails", ["~> 7.1"]
66
+ else
67
+ gem.add_development_dependency "rspec-rails", ["~> 8.0"]
68
+ end
60
69
  gem.add_development_dependency "simplecov", ["~> 0.20"]
61
70
  gem.add_development_dependency "selenium-webdriver", ["~> 4.10"]
62
71
  gem.add_development_dependency "webmock", ["~> 3.3"]
@@ -1 +1 @@
1
- .page-select--page,.page-select--page-name,.page-select--page-urlname{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.page-select--page{--size-1: var(--spacing-0, 2px);--size-2: var(--spacing-1, 4px);--size-3: var(--spacing-2, 8px);--small-font-size: var(--font-size_small, 10px);--grey: var(--color-grey_light, hsl(0deg, 0%, 94%));--color: var(--color-text, hsla(224deg, 23%, 26%, 0.8));--highlight-color: var(--grey);display:flex;flex-direction:column;color:var(--color)}.page-select--page alchemy-icon{margin-right:var(--size-2)}.page-select--page alchemy-icon .icon{fill:currentColor}.select2-highlighted .page-select--page{color:var(--highlight-color)}.page-select--top,.page-select--bottom{display:flex;flex-direction:row;align-items:center}.page-select--bottom{font-size:var(--small-font-size);padding-left:var(--size-1)}.page-select--page-urlname{color:var(--color-text_muted, hsla(224, 23%, 26%, 0.5));padding-right:var(--size-2)}.select2-highlighted .page-select--page-urlname{color:var(--highlight-color)}.page-select--language-code{--bg-color: var(--grey);--highlight-bg-color: var(--color-white, hsl(0deg, 0%, 100%));--border-radius: var(--border-radius_medium, 3px);display:inline-block;background-color:var(--bg-color);margin-left:auto;border-radius:var(--border-radius);padding:var(--size-1) var(--size-2);text-transform:uppercase}.select2-highlighted .page-select--language-code{color:var(--color);background-color:var(--highlight-bg-color)}.page-select--site-name{margin-left:auto;padding:var(--size-2) 0 var(--size-2) var(--size-3);font-size:var(--small-font-size)}/*# sourceMappingURL=page-select.css.map */
1
+ .page-select--page,.page-select--page-name,.page-select--page-urlname{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.page-select--page{--size-1: var(--spacing-0, 2px);--size-2: var(--spacing-1, 4px);--size-3: var(--spacing-2, 8px);--small-font-size: var(--font-size_small, 10px);--grey: var(--color-grey_light, hsl(0deg, 0%, 94%));--color: var(--text-color, hsla(224deg, 23%, 26%, 0.8));--highlight-color: var(--grey);display:flex;flex-direction:column;color:var(--color)}.page-select--page alchemy-icon{margin-right:var(--size-2)}.page-select--page alchemy-icon .icon{fill:currentColor}.select2-highlighted .page-select--page{color:var(--highlight-color)}.page-select--top,.page-select--bottom{display:flex;flex-direction:row;align-items:center}.page-select--bottom{font-size:var(--small-font-size);padding-left:var(--size-1)}.page-select--page-urlname{color:var(--text-color-muted, hsla(224, 23%, 26%, 0.5));padding-right:var(--size-2)}.select2-highlighted .page-select--page-urlname{color:var(--highlight-color)}.page-select--language-code{--bg-color: var(--grey);--highlight-bg-color: var(--color-white, hsl(0deg, 0%, 100%));--border-radius: var(--border-radius_medium, 3px);display:inline-block;background-color:var(--bg-color);margin-left:auto;border-radius:var(--border-radius);padding:var(--size-1) var(--size-2);text-transform:uppercase}.select2-highlighted .page-select--language-code{color:var(--color);background-color:var(--highlight-bg-color)}.page-select--site-name{margin-left:auto;padding:var(--size-2) 0 var(--size-2) var(--size-3);font-size:var(--small-font-size)}
@@ -1 +1 @@
1
- div#main_menu,div#top_menu,div#corner,div#flash_notices,div.pagination span,div.pagination a{display:none}div#archive_all{padding:0}span.icon.true:before{content:"x"}div.pagination{text-align:right}div.pagination em.current{border:none;text-shadow:none}div.pagination em:before{content:"Page "}/*# sourceMappingURL=print.css.map */
1
+ div#main_menu,div#top_menu,div#corner,div#flash_notices,div.pagination span,div.pagination a{display:none}div#archive_all{padding:0}span.icon.true:before{content:"x"}div.pagination{text-align:right}div.pagination em.current{border:none;text-shadow:none}div.pagination em:before{content:"Page "}