alchemy_cms 8.0.7 → 8.1.1

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 (280) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -10
  3. data/app/assets/builds/alchemy/admin.css +1 -1
  4. data/app/assets/builds/alchemy/dark-theme.css +1 -1
  5. data/app/assets/builds/alchemy/light-theme.css +1 -1
  6. data/app/assets/builds/alchemy/preview.min.js +1 -1
  7. data/app/assets/builds/alchemy/theme.css +1 -1
  8. data/app/{views/alchemy/admin/elements/_element.html.erb → components/alchemy/admin/element_editor.html.erb} +34 -29
  9. data/app/components/alchemy/admin/element_editor.rb +115 -0
  10. data/app/components/alchemy/admin/element_select.rb +12 -9
  11. data/app/components/alchemy/admin/ingredient_editor.rb +54 -0
  12. data/app/components/alchemy/admin/list_filter.rb +16 -5
  13. data/app/components/alchemy/admin/page_node.html.erb +215 -0
  14. data/app/components/alchemy/admin/page_node.rb +70 -0
  15. data/app/components/alchemy/admin/picture_thumbnail.rb +36 -0
  16. data/app/components/alchemy/admin/publish_page_button.html.erb +15 -0
  17. data/app/components/alchemy/admin/publish_page_button.rb +54 -0
  18. data/app/{helpers/alchemy/admin/tags_helper.rb → components/alchemy/admin/tags_list.rb} +19 -11
  19. data/app/components/alchemy/admin/toolbar_button.rb +16 -12
  20. data/app/components/alchemy/ingredients/audio_editor.rb +8 -0
  21. data/app/components/alchemy/ingredients/base_editor.rb +222 -0
  22. data/app/components/alchemy/ingredients/boolean_editor.rb +21 -0
  23. data/app/components/alchemy/ingredients/color_editor.rb +80 -0
  24. data/app/components/alchemy/ingredients/color_view.rb +13 -0
  25. data/app/components/alchemy/ingredients/datetime_editor.rb +28 -0
  26. data/app/components/alchemy/ingredients/file_editor.rb +69 -0
  27. data/app/components/alchemy/ingredients/headline_editor.rb +88 -0
  28. data/app/components/alchemy/ingredients/html_editor.rb +11 -0
  29. data/app/components/alchemy/ingredients/link_editor.rb +29 -0
  30. data/app/components/alchemy/ingredients/node_editor.rb +23 -0
  31. data/app/components/alchemy/ingredients/number_editor.rb +28 -0
  32. data/app/components/alchemy/ingredients/page_editor.rb +19 -0
  33. data/app/components/alchemy/ingredients/picture_editor.rb +81 -0
  34. data/app/components/alchemy/ingredients/richtext_editor.rb +31 -0
  35. data/app/components/alchemy/ingredients/select_editor.rb +37 -0
  36. data/app/components/alchemy/ingredients/select_view.rb +7 -0
  37. data/app/components/alchemy/ingredients/text_editor.rb +41 -0
  38. data/app/components/alchemy/ingredients/video_editor.rb +8 -0
  39. data/app/controllers/alchemy/admin/attachments_controller.rb +8 -6
  40. data/app/controllers/alchemy/admin/base_controller.rb +7 -18
  41. data/app/controllers/alchemy/admin/clipboard_controller.rb +15 -11
  42. data/app/controllers/alchemy/admin/dashboard_controller.rb +2 -2
  43. data/app/controllers/alchemy/admin/elements_controller.rb +34 -32
  44. data/app/controllers/alchemy/admin/ingredients_controller.rb +1 -0
  45. data/app/controllers/alchemy/admin/layoutpages_controller.rb +2 -1
  46. data/app/controllers/alchemy/admin/legacy_page_urls_controller.rb +1 -1
  47. data/app/controllers/alchemy/admin/nodes_controller.rb +24 -1
  48. data/app/controllers/alchemy/admin/pages_controller.rb +31 -41
  49. data/app/controllers/alchemy/admin/pictures_controller.rb +2 -5
  50. data/app/controllers/alchemy/admin/resources_controller.rb +1 -1
  51. data/app/controllers/alchemy/api/ingredients_controller.rb +1 -1
  52. data/app/controllers/alchemy/api/pages_controller.rb +5 -3
  53. data/app/controllers/alchemy/base_controller.rb +6 -6
  54. data/app/controllers/alchemy/pages_controller.rb +12 -6
  55. data/app/controllers/concerns/alchemy/admin/archive_overlay.rb +0 -1
  56. data/app/controllers/concerns/alchemy/admin/clipboard.rb +57 -0
  57. data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +2 -2
  58. data/app/controllers/concerns/alchemy/site_redirects.rb +1 -1
  59. data/app/decorators/alchemy/ingredient_editor.rb +37 -4
  60. data/app/helpers/alchemy/admin/base_helper.rb +10 -6
  61. data/app/helpers/alchemy/admin/ingredients_helper.rb +6 -3
  62. data/app/helpers/alchemy/base_helper.rb +1 -1
  63. data/app/helpers/alchemy/pages_helper.rb +1 -1
  64. data/app/javascript/alchemy_admin/components/action.js +5 -1
  65. data/app/javascript/alchemy_admin/components/color_select.js +73 -0
  66. data/app/javascript/alchemy_admin/components/element_editor/delete_element_button.js +11 -3
  67. data/app/javascript/alchemy_admin/components/element_editor/publish_element_button.js +7 -2
  68. data/app/javascript/alchemy_admin/components/element_editor.js +11 -12
  69. data/app/javascript/alchemy_admin/components/element_select.js +39 -17
  70. data/app/javascript/alchemy_admin/components/elements_window.js +0 -2
  71. data/app/javascript/alchemy_admin/components/file_editor.js +26 -0
  72. data/app/javascript/alchemy_admin/components/index.js +9 -0
  73. data/app/javascript/alchemy_admin/components/list_filter.js +57 -8
  74. data/app/javascript/alchemy_admin/components/message.js +9 -3
  75. data/app/javascript/alchemy_admin/components/page_node.js +119 -0
  76. data/app/javascript/alchemy_admin/{page_publication_fields.js → components/page_publication_fields.js} +9 -8
  77. data/app/javascript/alchemy_admin/{picture_editors.js → components/picture_editor.js} +30 -45
  78. data/app/javascript/alchemy_admin/components/picture_thumbnail.js +107 -0
  79. data/app/javascript/alchemy_admin/components/publish_page_button.js +41 -0
  80. data/app/javascript/alchemy_admin/components/select.js +3 -1
  81. data/app/javascript/alchemy_admin/components/sitemap.js +210 -0
  82. data/app/javascript/alchemy_admin/{sortable_elements.js → components/sortable_elements.js} +22 -25
  83. data/app/javascript/alchemy_admin/components/tinymce.js +10 -5
  84. data/app/javascript/alchemy_admin/components/update_check.js +1 -1
  85. data/app/javascript/alchemy_admin/components/uploader.js +30 -0
  86. data/app/javascript/alchemy_admin/image_overlay.js +0 -2
  87. data/app/javascript/alchemy_admin/initializer.js +0 -3
  88. data/app/javascript/alchemy_admin/templates/compiled.js +1 -1
  89. data/app/javascript/alchemy_admin/utils/ajax.js +15 -3
  90. data/app/javascript/alchemy_admin.js +0 -6
  91. data/app/models/alchemy/attachment.rb +4 -4
  92. data/app/models/alchemy/element/definitions.rb +1 -2
  93. data/app/models/alchemy/element/element_ingredients.rb +6 -2
  94. data/app/models/alchemy/element.rb +54 -13
  95. data/app/models/alchemy/element_definition.rb +4 -1
  96. data/app/models/alchemy/elements_repository.rb +6 -0
  97. data/app/models/alchemy/folded_page.rb +2 -2
  98. data/app/models/alchemy/ingredient.rb +38 -1
  99. data/app/models/alchemy/ingredient_definition.rb +4 -1
  100. data/app/models/alchemy/ingredient_validator.rb +6 -2
  101. data/app/models/alchemy/ingredients/color.rb +10 -0
  102. data/app/models/alchemy/ingredients/headline.rb +2 -17
  103. data/app/models/alchemy/ingredients/picture.rb +4 -4
  104. data/app/models/alchemy/ingredients/select.rb +19 -0
  105. data/app/models/alchemy/node.rb +28 -1
  106. data/app/models/alchemy/page/page_naming.rb +0 -7
  107. data/app/models/alchemy/page/page_natures.rb +7 -3
  108. data/app/models/alchemy/page/page_scopes.rb +1 -1
  109. data/app/models/alchemy/page/publisher.rb +14 -2
  110. data/app/models/alchemy/page.rb +102 -23
  111. data/app/models/alchemy/page_definition.rb +4 -1
  112. data/app/models/alchemy/page_version.rb +22 -6
  113. data/app/models/alchemy/picture.rb +10 -11
  114. data/app/models/alchemy/picture_variant.rb +1 -3
  115. data/app/models/alchemy/resource.rb +1 -1
  116. data/app/models/alchemy/storage_adapter/active_storage.rb +14 -2
  117. data/app/models/alchemy/storage_adapter/dragonfly.rb +12 -0
  118. data/app/models/alchemy/storage_adapter.rb +2 -0
  119. data/app/models/concerns/alchemy/picture_thumbnails.rb +4 -4
  120. data/app/models/concerns/alchemy/publishable.rb +54 -0
  121. data/app/serializers/alchemy/page_tree_serializer.rb +11 -31
  122. data/app/services/alchemy/copy_page.rb +17 -0
  123. data/app/services/alchemy/duplicate_element.rb +1 -1
  124. data/app/services/alchemy/page_tree_preloader.rb +105 -0
  125. data/app/stylesheets/alchemy/_extends.scss +3 -9
  126. data/app/stylesheets/alchemy/_mixins.scss +3 -1
  127. data/app/stylesheets/alchemy/_themes.scss +19 -10
  128. data/app/stylesheets/alchemy/admin/archive.scss +1 -0
  129. data/app/stylesheets/alchemy/admin/base.scss +5 -2
  130. data/app/stylesheets/alchemy/admin/buttons.scss +3 -3
  131. data/app/stylesheets/alchemy/admin/element-select.scss +18 -0
  132. data/app/stylesheets/alchemy/admin/elements.scss +123 -23
  133. data/app/stylesheets/alchemy/admin/errors.scss +17 -9
  134. data/app/stylesheets/alchemy/admin/flash.scss +6 -4
  135. data/app/stylesheets/alchemy/admin/images.scss +9 -5
  136. data/app/stylesheets/alchemy/admin/list_filter.scss +4 -4
  137. data/app/stylesheets/alchemy/admin/notices.scss +1 -2
  138. data/app/stylesheets/alchemy/admin/selects.scss +36 -21
  139. data/app/stylesheets/alchemy/admin/shoelace.scss +14 -1
  140. data/app/stylesheets/alchemy/admin/sitemap.scss +11 -3
  141. data/app/stylesheets/alchemy/admin/tags.scss +3 -1
  142. data/app/stylesheets/alchemy/admin/toolbar.scss +1 -1
  143. data/app/views/alchemy/_edit_mode.html.erb +1 -1
  144. data/app/views/alchemy/_menubar.html.erb +1 -1
  145. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +35 -31
  146. data/app/views/alchemy/admin/attachments/_library_sidebar.html.erb +6 -0
  147. data/app/views/alchemy/admin/attachments/_overlay_file_list.html.erb +1 -1
  148. data/app/views/alchemy/admin/attachments/_replace_button.html.erb +1 -8
  149. data/app/views/alchemy/admin/attachments/_sorting_select.html.erb +13 -0
  150. data/app/views/alchemy/admin/attachments/_tag_list.html.erb +2 -3
  151. data/app/views/alchemy/admin/attachments/index.html.erb +5 -11
  152. data/app/views/alchemy/admin/attachments/show.html.erb +1 -1
  153. data/app/views/alchemy/admin/clipboard/_button.html.erb +1 -0
  154. data/app/views/alchemy/admin/clipboard/index.html.erb +4 -5
  155. data/app/views/alchemy/admin/clipboard/insert.turbo_stream.erb +1 -1
  156. data/app/views/alchemy/admin/crop.html.erb +5 -7
  157. data/app/views/alchemy/admin/elements/_add_nested_element_form.html.erb +6 -6
  158. data/app/views/alchemy/admin/elements/_fixed_element.html.erb +1 -1
  159. data/app/views/alchemy/admin/elements/_footer.html.erb +7 -1
  160. data/app/views/alchemy/admin/elements/_header.html.erb +5 -5
  161. data/app/views/alchemy/admin/elements/_toolbar.html.erb +33 -8
  162. data/app/views/alchemy/admin/elements/create.turbo_stream.erb +10 -10
  163. data/app/views/alchemy/admin/elements/index.html.erb +29 -16
  164. data/app/views/alchemy/admin/elements/new.html.erb +2 -2
  165. data/app/views/alchemy/admin/ingredients/update.turbo_stream.erb +3 -5
  166. data/app/views/alchemy/admin/leave.html.erb +1 -1
  167. data/app/views/alchemy/admin/nodes/_node.html.erb +19 -0
  168. data/app/views/alchemy/admin/nodes/edit.html.erb +1 -1
  169. data/app/views/alchemy/admin/nodes/index.html.erb +3 -1
  170. data/app/views/alchemy/admin/nodes/new.html.erb +14 -1
  171. data/app/views/alchemy/admin/pages/_current_page.html.erb +3 -1
  172. data/app/views/alchemy/admin/pages/_form.html.erb +21 -9
  173. data/app/views/alchemy/admin/pages/_page_status.html.erb +1 -1
  174. data/app/views/alchemy/admin/pages/_publication_fields.html.erb +28 -26
  175. data/app/views/alchemy/admin/pages/_table.html.erb +0 -7
  176. data/app/views/alchemy/admin/pages/_toolbar.html.erb +3 -5
  177. data/app/views/alchemy/admin/pages/edit.html.erb +5 -11
  178. data/app/views/alchemy/admin/pages/flush.turbo_stream.erb +2 -0
  179. data/app/views/alchemy/admin/pages/fold.turbo_stream.erb +5 -0
  180. data/app/views/alchemy/admin/pages/index.html.erb +5 -3
  181. data/app/views/alchemy/admin/pages/new.html.erb +2 -12
  182. data/app/views/alchemy/admin/pages/publish.turbo_stream.erb +12 -0
  183. data/app/views/alchemy/admin/pages/tree.html.erb +13 -0
  184. data/app/views/alchemy/admin/pages/update.turbo_stream.erb +5 -16
  185. data/app/views/alchemy/admin/partials/_flash_notices.html.erb +1 -1
  186. data/app/views/alchemy/admin/partials/{_remote_search_form.html.erb → _overlay_search_form.html.erb} +1 -2
  187. data/app/views/alchemy/admin/partials/_paste_from_clipboard_form.html.erb +12 -0
  188. data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +24 -21
  189. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +18 -26
  190. data/app/views/alchemy/admin/pictures/_picture.html.erb +11 -15
  191. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +3 -6
  192. data/app/views/alchemy/admin/pictures/_tag_list.html.erb +2 -3
  193. data/app/views/alchemy/admin/pictures/index.html.erb +0 -1
  194. data/app/views/alchemy/admin/pictures/update.turbo_stream.erb +1 -1
  195. data/app/views/alchemy/admin/resources/_resource_usage_info.html.erb +1 -1
  196. data/app/views/alchemy/admin/resources/_tag_list.html.erb +2 -3
  197. data/app/views/alchemy/admin/styleguide/index.html.erb +25 -20
  198. data/app/views/alchemy/admin/tags/edit.html.erb +1 -1
  199. data/app/views/alchemy/admin/tinymce/_setup.html.erb +2 -2
  200. data/app/views/alchemy/admin/uploader/_button.html.erb +1 -15
  201. data/app/views/alchemy/attachments/show.html.erb +1 -1
  202. data/app/views/alchemy/base/permission_denied.js.erb +1 -1
  203. data/app/views/alchemy/ingredients/shared/_anchor.html.erb +9 -7
  204. data/app/views/alchemy/ingredients/shared/_link_tools.html.erb +12 -5
  205. data/app/views/alchemy/ingredients/shared/_picture_tools.html.erb +10 -11
  206. data/app/views/alchemy/language_links/_spacer.html.erb +1 -1
  207. data/app/views/alchemy/messages_mailer/new.html.erb +1 -1
  208. data/app/views/alchemy/welcome.html.erb +1 -1
  209. data/config/locales/alchemy.en.yml +12 -2
  210. data/config/routes.rb +2 -2
  211. data/db/migrate/20230123112425_add_searchable_to_alchemy_pages.rb +1 -1
  212. data/db/migrate/20230505132743_add_indexes_to_alchemy_pictures.rb +1 -1
  213. data/db/migrate/20231113104432_create_page_mutexes.rb +1 -1
  214. data/db/migrate/20240314105244_create_alchemy_picture_descriptions.rb +1 -1
  215. data/db/migrate/20250626160259_add_unique_index_to_picture_descriptions.rb +1 -1
  216. data/db/migrate/20250905140323_add_created_at_index_to_pictures_and_attachments.rb +1 -1
  217. data/db/migrate/20251106150010_convert_select_value_for_multiple.rb +11 -0
  218. data/db/migrate/20260102121232_add_metadata_to_page_versions.rb +9 -0
  219. data/db/migrate/20260115164704_add_publication_timestamps_to_alchemy_elements.rb +30 -0
  220. data/db/migrate/20260115164705_add_index_to_element_publication_timestamps.rb +13 -0
  221. data/lib/alchemy/ability_helper.rb +1 -3
  222. data/lib/alchemy/auth_accessors.rb +51 -117
  223. data/lib/alchemy/configuration.rb +1 -0
  224. data/lib/alchemy/configurations/main.rb +63 -0
  225. data/lib/alchemy/controller_actions.rb +1 -1
  226. data/lib/alchemy/engine.rb +9 -12
  227. data/lib/alchemy/error_tracking/error_logger.rb +1 -1
  228. data/lib/alchemy/errors.rb +1 -1
  229. data/lib/alchemy/logger.rb +34 -4
  230. data/lib/alchemy/name_conversions.rb +0 -6
  231. data/lib/alchemy/seeder.rb +2 -2
  232. data/lib/alchemy/tasks/usage.rb +4 -4
  233. data/lib/alchemy/test_support/factories/page_version_factory.rb +3 -0
  234. data/lib/alchemy/test_support/having_picture_thumbnails_examples.rb +30 -0
  235. data/lib/alchemy/test_support/shared_ingredient_editor_examples.rb +26 -6
  236. data/lib/alchemy/test_support/shared_publishable_examples.rb +114 -0
  237. data/lib/alchemy/upgrader/eight_one.rb +56 -0
  238. data/lib/alchemy/upgrader.rb +9 -1
  239. data/lib/alchemy/version.rb +1 -1
  240. data/lib/alchemy.rb +1 -4
  241. data/lib/alchemy_cms.rb +0 -1
  242. data/lib/generators/alchemy/elements/templates/view.html.erb +3 -3
  243. data/lib/generators/alchemy/ingredient/ingredient_generator.rb +6 -8
  244. data/lib/generators/alchemy/ingredient/templates/editor_component.rb.tt +22 -0
  245. data/lib/generators/alchemy/page_layouts/templates/layout.html.erb +1 -1
  246. data/lib/generators/alchemy/site_layouts/templates/layout.html.erb +1 -1
  247. data/lib/tasks/alchemy/upgrade.rake +21 -7
  248. data/vendor/javascript/shoelace.min.js +713 -31
  249. data/vendor/javascript/tinymce.min.js +1 -1
  250. metadata +103 -83
  251. data/app/decorators/alchemy/element_editor.rb +0 -90
  252. data/app/helpers/alchemy/admin/pictures_helper.rb +0 -14
  253. data/app/javascript/alchemy_admin/file_editors.js +0 -28
  254. data/app/javascript/alchemy_admin/image_loader.js +0 -54
  255. data/app/javascript/alchemy_admin/page_sorter.js +0 -71
  256. data/app/javascript/alchemy_admin/sitemap.js +0 -154
  257. data/app/javascript/alchemy_admin/templates/page_folder.hbs +0 -3
  258. data/app/views/alchemy/admin/attachments/archive_overlay.js.erb +0 -4
  259. data/app/views/alchemy/admin/pages/_page.html.erb +0 -163
  260. data/app/views/alchemy/admin/pages/_sitemap.html.erb +0 -30
  261. data/app/views/alchemy/admin/pages/flush.js.erb +0 -2
  262. data/app/views/alchemy/admin/pictures/archive_overlay.js.erb +0 -5
  263. data/app/views/alchemy/admin/pictures/index.js.erb +0 -2
  264. data/app/views/alchemy/ingredients/_audio_editor.html.erb +0 -5
  265. data/app/views/alchemy/ingredients/_boolean_editor.html.erb +0 -11
  266. data/app/views/alchemy/ingredients/_datetime_editor.html.erb +0 -20
  267. data/app/views/alchemy/ingredients/_file_editor.html.erb +0 -52
  268. data/app/views/alchemy/ingredients/_headline_editor.html.erb +0 -44
  269. data/app/views/alchemy/ingredients/_html_editor.html.erb +0 -8
  270. data/app/views/alchemy/ingredients/_link_editor.html.erb +0 -30
  271. data/app/views/alchemy/ingredients/_node_editor.html.erb +0 -13
  272. data/app/views/alchemy/ingredients/_number_editor.html.erb +0 -24
  273. data/app/views/alchemy/ingredients/_page_editor.html.erb +0 -13
  274. data/app/views/alchemy/ingredients/_picture_editor.html.erb +0 -59
  275. data/app/views/alchemy/ingredients/_richtext_editor.html.erb +0 -15
  276. data/app/views/alchemy/ingredients/_select_editor.html.erb +0 -31
  277. data/app/views/alchemy/ingredients/_text_editor.html.erb +0 -29
  278. data/app/views/alchemy/ingredients/_video_editor.html.erb +0 -5
  279. data/lib/generators/alchemy/ingredient/templates/editor.html.erb +0 -14
  280. /data/{lib → app/models}/alchemy/permissions.rb +0 -0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alchemy_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.7
4
+ version: 8.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas von Deyen
@@ -20,180 +20,180 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: '7.1'
23
+ version: '7.2'
24
24
  - - "<"
25
25
  - !ruby/object:Gem::Version
26
- version: '8.1'
26
+ version: '8.2'
27
27
  type: :runtime
28
28
  prerelease: false
29
29
  version_requirements: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '7.1'
33
+ version: '7.2'
34
34
  - - "<"
35
35
  - !ruby/object:Gem::Version
36
- version: '8.1'
36
+ version: '8.2'
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: actionpack
39
39
  requirement: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: '7.1'
43
+ version: '7.2'
44
44
  - - "<"
45
45
  - !ruby/object:Gem::Version
46
- version: '8.1'
46
+ version: '8.2'
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: '7.1'
53
+ version: '7.2'
54
54
  - - "<"
55
55
  - !ruby/object:Gem::Version
56
- version: '8.1'
56
+ version: '8.2'
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: actionview
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - ">="
62
62
  - !ruby/object:Gem::Version
63
- version: '7.1'
63
+ version: '7.2'
64
64
  - - "<"
65
65
  - !ruby/object:Gem::Version
66
- version: '8.1'
66
+ version: '8.2'
67
67
  type: :runtime
68
68
  prerelease: false
69
69
  version_requirements: !ruby/object:Gem::Requirement
70
70
  requirements:
71
71
  - - ">="
72
72
  - !ruby/object:Gem::Version
73
- version: '7.1'
73
+ version: '7.2'
74
74
  - - "<"
75
75
  - !ruby/object:Gem::Version
76
- version: '8.1'
76
+ version: '8.2'
77
77
  - !ruby/object:Gem::Dependency
78
78
  name: activejob
79
79
  requirement: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - ">="
82
82
  - !ruby/object:Gem::Version
83
- version: '7.1'
83
+ version: '7.2'
84
84
  - - "<"
85
85
  - !ruby/object:Gem::Version
86
- version: '8.1'
86
+ version: '8.2'
87
87
  type: :runtime
88
88
  prerelease: false
89
89
  version_requirements: !ruby/object:Gem::Requirement
90
90
  requirements:
91
91
  - - ">="
92
92
  - !ruby/object:Gem::Version
93
- version: '7.1'
93
+ version: '7.2'
94
94
  - - "<"
95
95
  - !ruby/object:Gem::Version
96
- version: '8.1'
96
+ version: '8.2'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: activemodel
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: '7.1'
103
+ version: '7.2'
104
104
  - - "<"
105
105
  - !ruby/object:Gem::Version
106
- version: '8.1'
106
+ version: '8.2'
107
107
  type: :runtime
108
108
  prerelease: false
109
109
  version_requirements: !ruby/object:Gem::Requirement
110
110
  requirements:
111
111
  - - ">="
112
112
  - !ruby/object:Gem::Version
113
- version: '7.1'
113
+ version: '7.2'
114
114
  - - "<"
115
115
  - !ruby/object:Gem::Version
116
- version: '8.1'
116
+ version: '8.2'
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: activerecord
119
119
  requirement: !ruby/object:Gem::Requirement
120
120
  requirements:
121
121
  - - ">="
122
122
  - !ruby/object:Gem::Version
123
- version: '7.1'
123
+ version: '7.2'
124
124
  - - "<"
125
125
  - !ruby/object:Gem::Version
126
- version: '8.1'
126
+ version: '8.2'
127
127
  type: :runtime
128
128
  prerelease: false
129
129
  version_requirements: !ruby/object:Gem::Requirement
130
130
  requirements:
131
131
  - - ">="
132
132
  - !ruby/object:Gem::Version
133
- version: '7.1'
133
+ version: '7.2'
134
134
  - - "<"
135
135
  - !ruby/object:Gem::Version
136
- version: '8.1'
136
+ version: '8.2'
137
137
  - !ruby/object:Gem::Dependency
138
138
  name: activestorage
139
139
  requirement: !ruby/object:Gem::Requirement
140
140
  requirements:
141
141
  - - ">="
142
142
  - !ruby/object:Gem::Version
143
- version: '7.1'
143
+ version: '7.2'
144
144
  - - "<"
145
145
  - !ruby/object:Gem::Version
146
- version: '8.1'
146
+ version: '8.2'
147
147
  type: :runtime
148
148
  prerelease: false
149
149
  version_requirements: !ruby/object:Gem::Requirement
150
150
  requirements:
151
151
  - - ">="
152
152
  - !ruby/object:Gem::Version
153
- version: '7.1'
153
+ version: '7.2'
154
154
  - - "<"
155
155
  - !ruby/object:Gem::Version
156
- version: '8.1'
156
+ version: '8.2'
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: activesupport
159
159
  requirement: !ruby/object:Gem::Requirement
160
160
  requirements:
161
161
  - - ">="
162
162
  - !ruby/object:Gem::Version
163
- version: '7.1'
163
+ version: '7.2'
164
164
  - - "<"
165
165
  - !ruby/object:Gem::Version
166
- version: '8.1'
166
+ version: '8.2'
167
167
  type: :runtime
168
168
  prerelease: false
169
169
  version_requirements: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - ">="
172
172
  - !ruby/object:Gem::Version
173
- version: '7.1'
173
+ version: '7.2'
174
174
  - - "<"
175
175
  - !ruby/object:Gem::Version
176
- version: '8.1'
176
+ version: '8.2'
177
177
  - !ruby/object:Gem::Dependency
178
178
  name: railties
179
179
  requirement: !ruby/object:Gem::Requirement
180
180
  requirements:
181
181
  - - ">="
182
182
  - !ruby/object:Gem::Version
183
- version: '7.1'
183
+ version: '7.2'
184
184
  - - "<"
185
185
  - !ruby/object:Gem::Version
186
- version: '8.1'
186
+ version: '8.2'
187
187
  type: :runtime
188
188
  prerelease: false
189
189
  version_requirements: !ruby/object:Gem::Requirement
190
190
  requirements:
191
191
  - - ">="
192
192
  - !ruby/object:Gem::Version
193
- version: '7.1'
193
+ version: '7.2'
194
194
  - - "<"
195
195
  - !ruby/object:Gem::Version
196
- version: '8.1'
196
+ version: '8.2'
197
197
  - !ruby/object:Gem::Dependency
198
198
  name: active_model_serializers
199
199
  requirement: !ruby/object:Gem::Requirement
@@ -232,22 +232,22 @@ dependencies:
232
232
  name: awesome_nested_set
233
233
  requirement: !ruby/object:Gem::Requirement
234
234
  requirements:
235
- - - "~>"
236
- - !ruby/object:Gem::Version
237
- version: '3.1'
238
235
  - - ">="
239
236
  - !ruby/object:Gem::Version
240
- version: 3.7.0
237
+ version: 3.9.0
238
+ - - "<"
239
+ - !ruby/object:Gem::Version
240
+ version: '4.0'
241
241
  type: :runtime
242
242
  prerelease: false
243
243
  version_requirements: !ruby/object:Gem::Requirement
244
244
  requirements:
245
- - - "~>"
246
- - !ruby/object:Gem::Version
247
- version: '3.1'
248
245
  - - ">="
249
246
  - !ruby/object:Gem::Version
250
- version: 3.7.0
247
+ version: 3.9.0
248
+ - - "<"
249
+ - !ruby/object:Gem::Version
250
+ version: '4.0'
251
251
  - !ruby/object:Gem::Dependency
252
252
  name: cancancan
253
253
  requirement: !ruby/object:Gem::Requirement
@@ -612,14 +612,14 @@ dependencies:
612
612
  requirements:
613
613
  - - "~>"
614
614
  - !ruby/object:Gem::Version
615
- version: '6.0'
615
+ version: '7.0'
616
616
  type: :development
617
617
  prerelease: false
618
618
  version_requirements: !ruby/object:Gem::Requirement
619
619
  requirements:
620
620
  - - "~>"
621
621
  - !ruby/object:Gem::Version
622
- version: '6.0'
622
+ version: '7.0'
623
623
  - !ruby/object:Gem::Dependency
624
624
  name: timecop
625
625
  requirement: !ruby/object:Gem::Requirement
@@ -667,8 +667,11 @@ files:
667
667
  - app/assets/images/alchemy/icons-sprite.svg
668
668
  - app/assets/images/alchemy/missing-image.svg
669
669
  - app/components/alchemy/admin/attachment_select.rb
670
+ - app/components/alchemy/admin/element_editor.html.erb
671
+ - app/components/alchemy/admin/element_editor.rb
670
672
  - app/components/alchemy/admin/element_select.rb
671
673
  - app/components/alchemy/admin/icon.rb
674
+ - app/components/alchemy/admin/ingredient_editor.rb
672
675
  - app/components/alchemy/admin/link_dialog/anchor_tab.rb
673
676
  - app/components/alchemy/admin/link_dialog/base_tab.rb
674
677
  - app/components/alchemy/admin/link_dialog/external_tab.rb
@@ -679,8 +682,13 @@ files:
679
682
  - app/components/alchemy/admin/locale_select.rb
680
683
  - app/components/alchemy/admin/message.rb
681
684
  - app/components/alchemy/admin/node_select.rb
685
+ - app/components/alchemy/admin/page_node.html.erb
686
+ - app/components/alchemy/admin/page_node.rb
682
687
  - app/components/alchemy/admin/page_select.rb
683
688
  - app/components/alchemy/admin/picture_description_select.rb
689
+ - app/components/alchemy/admin/picture_thumbnail.rb
690
+ - app/components/alchemy/admin/publish_page_button.html.erb
691
+ - app/components/alchemy/admin/publish_page_button.rb
684
692
  - app/components/alchemy/admin/resource/action.rb
685
693
  - app/components/alchemy/admin/resource/applied_filter.rb
686
694
  - app/components/alchemy/admin/resource/cell.rb
@@ -690,23 +698,42 @@ files:
690
698
  - app/components/alchemy/admin/resource/select_filter.rb
691
699
  - app/components/alchemy/admin/resource/table.rb
692
700
  - app/components/alchemy/admin/tags_autocomplete.rb
701
+ - app/components/alchemy/admin/tags_list.rb
693
702
  - app/components/alchemy/admin/toolbar_button.rb
694
703
  - app/components/alchemy/admin/update_check.rb
704
+ - app/components/alchemy/ingredients/audio_editor.rb
695
705
  - app/components/alchemy/ingredients/audio_view.rb
706
+ - app/components/alchemy/ingredients/base_editor.rb
696
707
  - app/components/alchemy/ingredients/base_view.rb
708
+ - app/components/alchemy/ingredients/boolean_editor.rb
697
709
  - app/components/alchemy/ingredients/boolean_view.rb
710
+ - app/components/alchemy/ingredients/color_editor.rb
711
+ - app/components/alchemy/ingredients/color_view.rb
712
+ - app/components/alchemy/ingredients/datetime_editor.rb
698
713
  - app/components/alchemy/ingredients/datetime_view.rb
714
+ - app/components/alchemy/ingredients/file_editor.rb
699
715
  - app/components/alchemy/ingredients/file_view.rb
716
+ - app/components/alchemy/ingredients/headline_editor.rb
700
717
  - app/components/alchemy/ingredients/headline_view.rb
718
+ - app/components/alchemy/ingredients/html_editor.rb
701
719
  - app/components/alchemy/ingredients/html_view.rb
720
+ - app/components/alchemy/ingredients/link_editor.rb
702
721
  - app/components/alchemy/ingredients/link_view.rb
722
+ - app/components/alchemy/ingredients/node_editor.rb
703
723
  - app/components/alchemy/ingredients/node_view.rb
724
+ - app/components/alchemy/ingredients/number_editor.rb
704
725
  - app/components/alchemy/ingredients/number_view.rb
726
+ - app/components/alchemy/ingredients/page_editor.rb
705
727
  - app/components/alchemy/ingredients/page_view.rb
728
+ - app/components/alchemy/ingredients/picture_editor.rb
706
729
  - app/components/alchemy/ingredients/picture_view.rb
730
+ - app/components/alchemy/ingredients/richtext_editor.rb
707
731
  - app/components/alchemy/ingredients/richtext_view.rb
732
+ - app/components/alchemy/ingredients/select_editor.rb
708
733
  - app/components/alchemy/ingredients/select_view.rb
734
+ - app/components/alchemy/ingredients/text_editor.rb
709
735
  - app/components/alchemy/ingredients/text_view.rb
736
+ - app/components/alchemy/ingredients/video_editor.rb
710
737
  - app/components/alchemy/ingredients/video_view.rb
711
738
  - app/components/concerns/alchemy/ingredients/link_target.rb
712
739
  - app/controllers/alchemy/admin/attachments_controller.rb
@@ -738,6 +765,7 @@ files:
738
765
  - app/controllers/alchemy/messages_controller.rb
739
766
  - app/controllers/alchemy/pages_controller.rb
740
767
  - app/controllers/concerns/alchemy/admin/archive_overlay.rb
768
+ - app/controllers/concerns/alchemy/admin/clipboard.rb
741
769
  - app/controllers/concerns/alchemy/admin/crop_action.rb
742
770
  - app/controllers/concerns/alchemy/admin/current_language.rb
743
771
  - app/controllers/concerns/alchemy/admin/picture_descriptions_form_helper.rb
@@ -745,7 +773,6 @@ files:
745
773
  - app/controllers/concerns/alchemy/admin/uploader_responses.rb
746
774
  - app/controllers/concerns/alchemy/legacy_page_redirects.rb
747
775
  - app/controllers/concerns/alchemy/site_redirects.rb
748
- - app/decorators/alchemy/element_editor.rb
749
776
  - app/decorators/alchemy/ingredient_editor.rb
750
777
  - app/helpers/alchemy/admin/attachments_helper.rb
751
778
  - app/helpers/alchemy/admin/base_helper.rb
@@ -753,8 +780,6 @@ files:
753
780
  - app/helpers/alchemy/admin/ingredients_helper.rb
754
781
  - app/helpers/alchemy/admin/navigation_helper.rb
755
782
  - app/helpers/alchemy/admin/pages_helper.rb
756
- - app/helpers/alchemy/admin/pictures_helper.rb
757
- - app/helpers/alchemy/admin/tags_helper.rb
758
783
  - app/helpers/alchemy/base_helper.rb
759
784
  - app/helpers/alchemy/elements_block_helper.rb
760
785
  - app/helpers/alchemy/elements_helper.rb
@@ -769,6 +794,7 @@ files:
769
794
  - app/javascript/alchemy_admin/components/button.js
770
795
  - app/javascript/alchemy_admin/components/char_counter.js
771
796
  - app/javascript/alchemy_admin/components/clipboard_button.js
797
+ - app/javascript/alchemy_admin/components/color_select.js
772
798
  - app/javascript/alchemy_admin/components/datepicker.js
773
799
  - app/javascript/alchemy_admin/components/dialog_link.js
774
800
  - app/javascript/alchemy_admin/components/dom_id_select.js
@@ -778,6 +804,7 @@ files:
778
804
  - app/javascript/alchemy_admin/components/element_select.js
779
805
  - app/javascript/alchemy_admin/components/elements_window.js
780
806
  - app/javascript/alchemy_admin/components/elements_window_handle.js
807
+ - app/javascript/alchemy_admin/components/file_editor.js
781
808
  - app/javascript/alchemy_admin/components/growl.js
782
809
  - app/javascript/alchemy_admin/components/icon.js
783
810
  - app/javascript/alchemy_admin/components/index.js
@@ -789,11 +816,18 @@ files:
789
816
  - app/javascript/alchemy_admin/components/message.js
790
817
  - app/javascript/alchemy_admin/components/node_select.js
791
818
  - app/javascript/alchemy_admin/components/overlay.js
819
+ - app/javascript/alchemy_admin/components/page_node.js
820
+ - app/javascript/alchemy_admin/components/page_publication_fields.js
792
821
  - app/javascript/alchemy_admin/components/page_select.js
793
822
  - app/javascript/alchemy_admin/components/picture_description_select.js
823
+ - app/javascript/alchemy_admin/components/picture_editor.js
824
+ - app/javascript/alchemy_admin/components/picture_thumbnail.js
794
825
  - app/javascript/alchemy_admin/components/preview_window.js
826
+ - app/javascript/alchemy_admin/components/publish_page_button.js
795
827
  - app/javascript/alchemy_admin/components/remote_select.js
796
828
  - app/javascript/alchemy_admin/components/select.js
829
+ - app/javascript/alchemy_admin/components/sitemap.js
830
+ - app/javascript/alchemy_admin/components/sortable_elements.js
797
831
  - app/javascript/alchemy_admin/components/spinner.js
798
832
  - app/javascript/alchemy_admin/components/tags_autocomplete.js
799
833
  - app/javascript/alchemy_admin/components/tinymce.js
@@ -804,30 +838,22 @@ files:
804
838
  - app/javascript/alchemy_admin/confirm_dialog.js
805
839
  - app/javascript/alchemy_admin/dialog.js
806
840
  - app/javascript/alchemy_admin/dirty.js
807
- - app/javascript/alchemy_admin/file_editors.js
808
841
  - app/javascript/alchemy_admin/fixed_elements.js
809
842
  - app/javascript/alchemy_admin/growler.js
810
843
  - app/javascript/alchemy_admin/hotkeys.js
811
844
  - app/javascript/alchemy_admin/i18n.js
812
845
  - app/javascript/alchemy_admin/image_cropper.js
813
- - app/javascript/alchemy_admin/image_loader.js
814
846
  - app/javascript/alchemy_admin/image_overlay.js
815
847
  - app/javascript/alchemy_admin/ingredient_anchor_link.js
816
848
  - app/javascript/alchemy_admin/initializer.js
817
849
  - app/javascript/alchemy_admin/link_dialog.js
818
850
  - app/javascript/alchemy_admin/node_tree.js
819
- - app/javascript/alchemy_admin/page_publication_fields.js
820
- - app/javascript/alchemy_admin/page_sorter.js
821
- - app/javascript/alchemy_admin/picture_editors.js
822
851
  - app/javascript/alchemy_admin/picture_selector.js
823
852
  - app/javascript/alchemy_admin/please_wait_overlay.js
824
853
  - app/javascript/alchemy_admin/shoelace_theme.js
825
- - app/javascript/alchemy_admin/sitemap.js
826
- - app/javascript/alchemy_admin/sortable_elements.js
827
854
  - app/javascript/alchemy_admin/spinner.js
828
855
  - app/javascript/alchemy_admin/templates/compiled.js
829
856
  - app/javascript/alchemy_admin/templates/node_folder.hbs
830
- - app/javascript/alchemy_admin/templates/page_folder.hbs
831
857
  - app/javascript/alchemy_admin/utils/ajax.js
832
858
  - app/javascript/alchemy_admin/utils/debounce.js
833
859
  - app/javascript/alchemy_admin/utils/dom_helpers.js
@@ -867,6 +893,7 @@ files:
867
893
  - app/models/alchemy/ingredient_validator.rb
868
894
  - app/models/alchemy/ingredients/audio.rb
869
895
  - app/models/alchemy/ingredients/boolean.rb
896
+ - app/models/alchemy/ingredients/color.rb
870
897
  - app/models/alchemy/ingredients/datetime.rb
871
898
  - app/models/alchemy/ingredients/file.rb
872
899
  - app/models/alchemy/ingredients/headline.rb
@@ -897,6 +924,7 @@ files:
897
924
  - app/models/alchemy/page_definition.rb
898
925
  - app/models/alchemy/page_mutex.rb
899
926
  - app/models/alchemy/page_version.rb
927
+ - app/models/alchemy/permissions.rb
900
928
  - app/models/alchemy/picture.rb
901
929
  - app/models/alchemy/picture_description.rb
902
930
  - app/models/alchemy/picture_thumb.rb
@@ -921,6 +949,7 @@ files:
921
949
  - app/models/alchemy/tag.rb
922
950
  - app/models/concerns/alchemy/dom_ids.rb
923
951
  - app/models/concerns/alchemy/picture_thumbnails.rb
952
+ - app/models/concerns/alchemy/publishable.rb
924
953
  - app/models/concerns/alchemy/relatable_resource.rb
925
954
  - app/models/concerns/alchemy/touch_elements.rb
926
955
  - app/serializers/alchemy/attachment_serializer.rb
@@ -938,6 +967,7 @@ files:
938
967
  - app/services/alchemy/delete_elements.rb
939
968
  - app/services/alchemy/dragonfly_to_image_processing.rb
940
969
  - app/services/alchemy/duplicate_element.rb
970
+ - app/services/alchemy/page_tree_preloader.rb
941
971
  - app/services/alchemy/tag_validations.rb
942
972
  - app/services/alchemy/update_checker.rb
943
973
  - app/services/alchemy/update_checks/alchemy_app.rb
@@ -1011,10 +1041,11 @@ files:
1011
1041
  - app/views/alchemy/admin/attachments/_archive_overlay.html.erb
1012
1042
  - app/views/alchemy/admin/attachments/_file_to_assign.html.erb
1013
1043
  - app/views/alchemy/admin/attachments/_files_list.html.erb
1044
+ - app/views/alchemy/admin/attachments/_library_sidebar.html.erb
1014
1045
  - app/views/alchemy/admin/attachments/_overlay_file_list.html.erb
1015
1046
  - app/views/alchemy/admin/attachments/_replace_button.html.erb
1047
+ - app/views/alchemy/admin/attachments/_sorting_select.html.erb
1016
1048
  - app/views/alchemy/admin/attachments/_tag_list.html.erb
1017
- - app/views/alchemy/admin/attachments/archive_overlay.js.erb
1018
1049
  - app/views/alchemy/admin/attachments/assign.js.erb
1019
1050
  - app/views/alchemy/admin/attachments/edit.html.erb
1020
1051
  - app/views/alchemy/admin/attachments/index.html.erb
@@ -1038,7 +1069,6 @@ files:
1038
1069
  - app/views/alchemy/admin/dashboard/widgets/_sites.html.erb
1039
1070
  - app/views/alchemy/admin/dashboard/widgets/_users.html.erb
1040
1071
  - app/views/alchemy/admin/elements/_add_nested_element_form.html.erb
1041
- - app/views/alchemy/admin/elements/_element.html.erb
1042
1072
  - app/views/alchemy/admin/elements/_fixed_element.html.erb
1043
1073
  - app/views/alchemy/admin/elements/_footer.html.erb
1044
1074
  - app/views/alchemy/admin/elements/_form.html.erb
@@ -1091,29 +1121,31 @@ files:
1091
1121
  - app/views/alchemy/admin/pages/_legacy_urls.html.erb
1092
1122
  - app/views/alchemy/admin/pages/_locked_page.html.erb
1093
1123
  - app/views/alchemy/admin/pages/_new_page_form.html.erb
1094
- - app/views/alchemy/admin/pages/_page.html.erb
1095
1124
  - app/views/alchemy/admin/pages/_page_infos.html.erb
1096
1125
  - app/views/alchemy/admin/pages/_page_layout_filter.html.erb
1097
1126
  - app/views/alchemy/admin/pages/_page_status.html.erb
1098
1127
  - app/views/alchemy/admin/pages/_publication_fields.html.erb
1099
- - app/views/alchemy/admin/pages/_sitemap.html.erb
1100
1128
  - app/views/alchemy/admin/pages/_table.html.erb
1101
1129
  - app/views/alchemy/admin/pages/_toolbar.html.erb
1102
1130
  - app/views/alchemy/admin/pages/configure.html.erb
1103
1131
  - app/views/alchemy/admin/pages/edit.html.erb
1104
- - app/views/alchemy/admin/pages/flush.js.erb
1132
+ - app/views/alchemy/admin/pages/flush.turbo_stream.erb
1133
+ - app/views/alchemy/admin/pages/fold.turbo_stream.erb
1105
1134
  - app/views/alchemy/admin/pages/index.html.erb
1106
1135
  - app/views/alchemy/admin/pages/info.html.erb
1107
1136
  - app/views/alchemy/admin/pages/locked.html.erb
1108
1137
  - app/views/alchemy/admin/pages/new.html.erb
1138
+ - app/views/alchemy/admin/pages/publish.turbo_stream.erb
1109
1139
  - app/views/alchemy/admin/pages/show.html.erb
1140
+ - app/views/alchemy/admin/pages/tree.html.erb
1110
1141
  - app/views/alchemy/admin/pages/unlock.js.erb
1111
1142
  - app/views/alchemy/admin/pages/update.turbo_stream.erb
1112
1143
  - app/views/alchemy/admin/partials/_autocomplete_tag_list.html.erb
1113
1144
  - app/views/alchemy/admin/partials/_flash_notices.html.erb
1114
1145
  - app/views/alchemy/admin/partials/_language_tree_select.html.erb
1115
1146
  - app/views/alchemy/admin/partials/_main_navigation_entry.html.erb
1116
- - app/views/alchemy/admin/partials/_remote_search_form.html.erb
1147
+ - app/views/alchemy/admin/partials/_overlay_search_form.html.erb
1148
+ - app/views/alchemy/admin/partials/_paste_from_clipboard_form.html.erb
1117
1149
  - app/views/alchemy/admin/partials/_routes.html.erb
1118
1150
  - app/views/alchemy/admin/partials/_search_form.html.erb
1119
1151
  - app/views/alchemy/admin/partials/_site_select.html.erb
@@ -1131,11 +1163,9 @@ files:
1131
1163
  - app/views/alchemy/admin/pictures/_picture_to_assign.html.erb
1132
1164
  - app/views/alchemy/admin/pictures/_sorting_select.html.erb
1133
1165
  - app/views/alchemy/admin/pictures/_tag_list.html.erb
1134
- - app/views/alchemy/admin/pictures/archive_overlay.js.erb
1135
1166
  - app/views/alchemy/admin/pictures/assign.js.erb
1136
1167
  - app/views/alchemy/admin/pictures/edit_multiple.html.erb
1137
1168
  - app/views/alchemy/admin/pictures/index.html.erb
1138
- - app/views/alchemy/admin/pictures/index.js.erb
1139
1169
  - app/views/alchemy/admin/pictures/show.html.erb
1140
1170
  - app/views/alchemy/admin/pictures/update.turbo_stream.erb
1141
1171
  - app/views/alchemy/admin/resources/_applied_filters.html.erb
@@ -1176,21 +1206,6 @@ files:
1176
1206
  - app/views/alchemy/breadcrumb/_separator.html.erb
1177
1207
  - app/views/alchemy/breadcrumb/_wrapper.html.erb
1178
1208
  - app/views/alchemy/elements/_view_not_found.html.erb
1179
- - app/views/alchemy/ingredients/_audio_editor.html.erb
1180
- - app/views/alchemy/ingredients/_boolean_editor.html.erb
1181
- - app/views/alchemy/ingredients/_datetime_editor.html.erb
1182
- - app/views/alchemy/ingredients/_file_editor.html.erb
1183
- - app/views/alchemy/ingredients/_headline_editor.html.erb
1184
- - app/views/alchemy/ingredients/_html_editor.html.erb
1185
- - app/views/alchemy/ingredients/_link_editor.html.erb
1186
- - app/views/alchemy/ingredients/_node_editor.html.erb
1187
- - app/views/alchemy/ingredients/_number_editor.html.erb
1188
- - app/views/alchemy/ingredients/_page_editor.html.erb
1189
- - app/views/alchemy/ingredients/_picture_editor.html.erb
1190
- - app/views/alchemy/ingredients/_richtext_editor.html.erb
1191
- - app/views/alchemy/ingredients/_select_editor.html.erb
1192
- - app/views/alchemy/ingredients/_text_editor.html.erb
1193
- - app/views/alchemy/ingredients/_video_editor.html.erb
1194
1209
  - app/views/alchemy/ingredients/shared/_anchor.html.erb
1195
1210
  - app/views/alchemy/ingredients/shared/_link_tools.html.erb
1196
1211
  - app/views/alchemy/ingredients/shared/_picture_css_class.html.erb
@@ -1234,6 +1249,10 @@ files:
1234
1249
  - db/migrate/20240314105244_create_alchemy_picture_descriptions.rb
1235
1250
  - db/migrate/20250626160259_add_unique_index_to_picture_descriptions.rb
1236
1251
  - db/migrate/20250905140323_add_created_at_index_to_pictures_and_attachments.rb
1252
+ - db/migrate/20251106150010_convert_select_value_for_multiple.rb
1253
+ - db/migrate/20260102121232_add_metadata_to_page_versions.rb
1254
+ - db/migrate/20260115164704_add_publication_timestamps_to_alchemy_elements.rb
1255
+ - db/migrate/20260115164705_add_index_to_element_publication_timestamps.rb
1237
1256
  - lib/alchemy.rb
1238
1257
  - lib/alchemy/ability_helper.rb
1239
1258
  - lib/alchemy/admin/locale.rb
@@ -1285,7 +1304,6 @@ files:
1285
1304
  - lib/alchemy/on_page_layout.rb
1286
1305
  - lib/alchemy/on_page_layout/callbacks_runner.rb
1287
1306
  - lib/alchemy/paths.rb
1288
- - lib/alchemy/permissions.rb
1289
1307
  - lib/alchemy/propshaft/tinymce_asset.rb
1290
1308
  - lib/alchemy/routing_constraints.rb
1291
1309
  - lib/alchemy/seeder.rb
@@ -1320,9 +1338,11 @@ files:
1320
1338
  - lib/alchemy/test_support/shared_ingredient_editor_examples.rb
1321
1339
  - lib/alchemy/test_support/shared_ingredient_examples.rb
1322
1340
  - lib/alchemy/test_support/shared_link_tab_examples.rb
1341
+ - lib/alchemy/test_support/shared_publishable_examples.rb
1323
1342
  - lib/alchemy/test_support/shared_uploader_examples.rb
1324
1343
  - lib/alchemy/tinymce.rb
1325
1344
  - lib/alchemy/upgrader.rb
1345
+ - lib/alchemy/upgrader/eight_one.rb
1326
1346
  - lib/alchemy/upgrader/eight_zero.rb
1327
1347
  - lib/alchemy/version.rb
1328
1348
  - lib/alchemy_cms.rb
@@ -1332,7 +1352,7 @@ files:
1332
1352
  - lib/generators/alchemy/elements/templates/view.html.haml
1333
1353
  - lib/generators/alchemy/elements/templates/view.html.slim
1334
1354
  - lib/generators/alchemy/ingredient/ingredient_generator.rb
1335
- - lib/generators/alchemy/ingredient/templates/editor.html.erb
1355
+ - lib/generators/alchemy/ingredient/templates/editor_component.rb.tt
1336
1356
  - lib/generators/alchemy/ingredient/templates/model.rb.tt
1337
1357
  - lib/generators/alchemy/ingredient/templates/view_component.rb.tt
1338
1358
  - lib/generators/alchemy/install/files/_article.html.erb
@@ -1,90 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Alchemy
4
- class ElementEditor < SimpleDelegator
5
- alias_method :element, :__getobj__
6
-
7
- def to_partial_path
8
- "alchemy/admin/elements/element"
9
- end
10
-
11
- # Returns ingredient editor instances for defined ingredients
12
- #
13
- # Creates ingredient on demand if the ingredient is not yet present on the element
14
- #
15
- # @return Array<Alchemy::IngredientEditor>
16
- def ingredients
17
- ingredient_definitions.map do |ingredient|
18
- Alchemy::IngredientEditor.new(find_or_create_ingredient(ingredient))
19
- end
20
- end
21
-
22
- # Are any ingredients defined?
23
- # @return [Boolean]
24
- def has_ingredients_defined?
25
- ingredient_definitions.any?
26
- end
27
-
28
- # Returns the translated ingredient group for displaying in admin editor group headings
29
- #
30
- # Translate it in your locale yml file:
31
- #
32
- # alchemy:
33
- # element_groups:
34
- # foo: Bar
35
- #
36
- # Optionally you can scope your ingredient role to an element:
37
- #
38
- # alchemy:
39
- # element_groups:
40
- # article:
41
- # foo: Baz
42
- #
43
- def translated_group(group)
44
- Alchemy.t(
45
- group,
46
- scope: "element_groups.#{element.name}",
47
- default: Alchemy.t("element_groups.#{group}", default: group.humanize)
48
- )
49
- end
50
-
51
- # CSS classes for the element editor partial.
52
- def css_classes
53
- [
54
- "element-editor",
55
- ingredient_definitions.present? ? "with-ingredients" : "without-ingredients",
56
- nestable_elements.any? ? "nestable" : "not-nestable",
57
- taggable? ? "taggable" : "not-taggable",
58
- folded ? "folded" : "expanded",
59
- compact? ? "compact" : nil,
60
- deprecated? ? "deprecated" : nil,
61
- fixed? ? "is-fixed" : "not-fixed",
62
- public? ? nil : "element-hidden"
63
- ]
64
- end
65
-
66
- # Tells us, if we should show the element footer and form inputs.
67
- def editable?
68
- ingredient_definitions.any? || taggable?
69
- end
70
-
71
- # Fixes Rails partial renderer calling to_model on the object
72
- # which reveals the delegated element instead of this decorator.
73
- def respond_to?(*args, **kwargs)
74
- method_name = args.first
75
- return false if method_name == :to_model
76
-
77
- super
78
- end
79
-
80
- private
81
-
82
- def find_or_create_ingredient(definition)
83
- element.ingredients.detect { _1.role == definition.role } ||
84
- element.ingredients.create!(
85
- role: definition.role,
86
- type: Alchemy::Ingredient.normalize_type(definition.type)
87
- )
88
- end
89
- end
90
- end