alchemy_cms 7.4.5 → 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 (358) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +92 -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/picture_descriptions_controller.rb +5 -1
  28. data/app/controllers/alchemy/admin/pictures_controller.rb +10 -5
  29. data/app/controllers/alchemy/admin/resources_controller.rb +16 -106
  30. data/app/controllers/alchemy/attachments_controller.rb +43 -14
  31. data/app/controllers/alchemy/messages_controller.rb +1 -1
  32. data/app/controllers/alchemy/pages_controller.rb +7 -2
  33. data/app/controllers/concerns/alchemy/admin/picture_descriptions_form_helper.rb +16 -0
  34. data/app/controllers/concerns/alchemy/admin/resource_filter.rb +92 -0
  35. data/app/decorators/alchemy/element_editor.rb +5 -48
  36. data/app/decorators/alchemy/ingredient_editor.rb +3 -53
  37. data/app/helpers/alchemy/admin/base_helper.rb +14 -84
  38. data/app/helpers/alchemy/admin/elements_helper.rb +4 -4
  39. data/app/helpers/alchemy/admin/pages_helper.rb +1 -1
  40. data/app/helpers/alchemy/base_helper.rb +0 -30
  41. data/app/helpers/alchemy/elements_block_helper.rb +0 -14
  42. data/app/helpers/alchemy/pages_helper.rb +1 -1
  43. data/{lib → app/helpers}/alchemy/resources_helper.rb +5 -45
  44. data/app/javascript/alchemy_admin/components/action.js +4 -0
  45. data/app/javascript/alchemy_admin/components/alchemy_html_element.js +3 -3
  46. data/app/javascript/alchemy_admin/components/datepicker.js +10 -2
  47. data/app/javascript/alchemy_admin/components/element_editor/delete_element_button.js +7 -7
  48. data/app/javascript/alchemy_admin/components/element_editor.js +1 -1
  49. data/app/javascript/alchemy_admin/components/growl.js +1 -0
  50. data/app/javascript/alchemy_admin/components/index.js +1 -0
  51. data/app/javascript/alchemy_admin/components/remote_select.js +4 -1
  52. data/app/javascript/alchemy_admin/components/tags_autocomplete.js +5 -1
  53. data/app/javascript/alchemy_admin/components/tinymce.js +4 -2
  54. data/app/javascript/alchemy_admin/components/update_check.js +42 -0
  55. data/app/javascript/alchemy_admin/components/uploader/file_upload.js +15 -8
  56. data/app/javascript/alchemy_admin/components/uploader/progress.js +12 -6
  57. data/app/javascript/alchemy_admin/components/uploader.js +4 -2
  58. data/app/javascript/alchemy_admin/confirm_dialog.js +27 -57
  59. data/app/javascript/alchemy_admin/dirty.js +3 -2
  60. data/app/javascript/alchemy_admin/i18n.js +15 -16
  61. data/app/javascript/alchemy_admin/initializer.js +1 -49
  62. data/app/javascript/alchemy_admin/utils/ajax.js +51 -44
  63. data/app/javascript/alchemy_admin.js +3 -8
  64. data/app/models/alchemy/admin/filters/base.rb +38 -0
  65. data/app/models/alchemy/admin/filters/checkbox.rb +24 -0
  66. data/app/models/alchemy/admin/filters/datepicker.rb +53 -0
  67. data/app/models/alchemy/admin/filters/select.rb +70 -0
  68. data/app/models/alchemy/admin/resource_name.rb +27 -0
  69. data/app/models/alchemy/attachment.rb +51 -34
  70. data/app/models/alchemy/base_record.rb +2 -0
  71. data/app/models/alchemy/element/definitions.rb +1 -1
  72. data/app/models/alchemy/element/element_ingredients.rb +6 -6
  73. data/app/models/alchemy/element/presenters.rb +3 -12
  74. data/app/models/alchemy/element.rb +9 -27
  75. data/app/models/alchemy/element_definition.rb +160 -0
  76. data/app/models/alchemy/ingredient.rb +10 -43
  77. data/app/models/alchemy/ingredient_definition.rb +134 -0
  78. data/app/models/alchemy/ingredient_validator.rb +7 -3
  79. data/app/models/alchemy/ingredients/number.rb +19 -0
  80. data/app/models/alchemy/language.rb +0 -14
  81. data/app/models/alchemy/message.rb +3 -7
  82. data/app/models/alchemy/node.rb +1 -1
  83. data/app/models/alchemy/page/{page_layouts.rb → definitions.rb} +12 -19
  84. data/app/models/alchemy/page/fixed_attributes.rb +1 -1
  85. data/app/models/alchemy/page/page_elements.rb +13 -14
  86. data/app/models/alchemy/page/page_natures.rb +7 -7
  87. data/app/models/alchemy/page/page_scopes.rb +1 -1
  88. data/app/models/alchemy/page.rb +11 -33
  89. data/app/models/alchemy/page_definition.rb +115 -0
  90. data/app/models/alchemy/picture.rb +69 -79
  91. data/app/models/alchemy/picture_variant.rb +115 -5
  92. data/{lib → app/models}/alchemy/resource.rb +4 -18
  93. data/{lib → app/models}/alchemy/searchable_resource.rb +15 -0
  94. data/app/models/alchemy/site/layout.rb +5 -5
  95. data/app/models/alchemy/site.rb +0 -15
  96. data/app/models/alchemy/storage_adapter/active_storage/attachment_url.rb +41 -0
  97. data/app/models/alchemy/storage_adapter/active_storage/picture_url.rb +55 -0
  98. data/app/models/alchemy/storage_adapter/active_storage/preprocessor.rb +40 -0
  99. data/app/models/alchemy/storage_adapter/active_storage.rb +173 -0
  100. data/app/models/alchemy/{attachment/url.rb → storage_adapter/dragonfly/attachment_url.rb} +12 -12
  101. data/app/models/alchemy/{picture/url.rb → storage_adapter/dragonfly/picture_url.rb} +28 -12
  102. data/app/models/alchemy/{picture → storage_adapter/dragonfly}/preprocessor.rb +4 -4
  103. data/app/models/alchemy/storage_adapter/dragonfly.rb +183 -0
  104. data/app/models/alchemy/storage_adapter.rb +74 -0
  105. data/app/models/concerns/alchemy/picture_thumbnails.rb +19 -6
  106. data/app/serializers/alchemy/element_serializer.rb +0 -1
  107. data/app/services/alchemy/dragonfly_to_image_processing.rb +100 -0
  108. data/app/stylesheets/alchemy/_defaults.scss +3 -0
  109. data/app/stylesheets/alchemy/_extends.scss +69 -0
  110. data/app/{assets/stylesheets → stylesheets}/alchemy/_mixins.scss +36 -49
  111. data/app/stylesheets/alchemy/_variables.scss +5 -0
  112. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/archive.scss +20 -37
  113. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/base.scss +16 -14
  114. data/app/stylesheets/alchemy/admin/buttons.scss +160 -0
  115. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/clipboard.scss +2 -2
  116. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/dashboard.scss +13 -16
  117. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/dialogs.scss +23 -16
  118. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/elements.scss +150 -105
  119. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/errors.scss +5 -5
  120. data/app/stylesheets/alchemy/admin/filters.scss +58 -0
  121. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/flatpickr.scss +53 -60
  122. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/form_fields.scss +21 -7
  123. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/forms.scss +31 -19
  124. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/frame.scss +20 -16
  125. data/app/stylesheets/alchemy/admin/hints.scss +5 -0
  126. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/icons.scss +10 -1
  127. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/image_library.scss +10 -8
  128. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/images.scss +1 -1
  129. data/app/stylesheets/alchemy/admin/labels.scss +5 -0
  130. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/lists.scss +3 -3
  131. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/navigation.scss +61 -55
  132. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/nodes.scss +21 -18
  133. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/notices.scss +18 -18
  134. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/page-select.scss +2 -2
  135. data/app/stylesheets/alchemy/admin/pagination.scss +144 -0
  136. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/preview_window.scss +8 -6
  137. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/print.scss +1 -1
  138. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/resource_info.scss +8 -5
  139. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/search.scss +9 -6
  140. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/selects.scss +49 -37
  141. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/shoelace.scss +5 -6
  142. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/sitemap.scss +38 -33
  143. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/tables.scss +6 -4
  144. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/tags.scss +6 -4
  145. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/toolbar.scss +12 -6
  146. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/typography.scss +2 -2
  147. data/app/{assets/stylesheets → stylesheets}/alchemy/admin/upload.scss +7 -5
  148. data/app/stylesheets/alchemy/admin.scss +44 -0
  149. data/app/stylesheets/alchemy/custom-properties.css +244 -0
  150. data/app/stylesheets/alchemy/welcome.scss +75 -0
  151. data/app/{assets/stylesheets → stylesheets}/tinymce/skins/content/alchemy/content.scss +8 -9
  152. data/app/stylesheets/tinymce/skins/ui/alchemy/content.scss +1 -0
  153. data/app/{assets/stylesheets → stylesheets}/tinymce/skins/ui/alchemy/skin.scss +133 -136
  154. data/app/views/alchemy/admin/attachments/_files_list.html.erb +2 -2
  155. data/app/views/alchemy/admin/attachments/_overlay_file_list.html.erb +1 -1
  156. data/app/views/alchemy/admin/{elements/_clipboard_button.html.erb → clipboard/_button.html.erb} +3 -5
  157. data/app/views/alchemy/admin/clipboard/_update_nested_element_button.turbo_stream.erb +11 -0
  158. data/app/views/alchemy/admin/clipboard/clear.turbo_stream.erb +4 -0
  159. data/app/views/alchemy/admin/clipboard/index.html.erb +15 -13
  160. data/app/views/alchemy/admin/clipboard/insert.turbo_stream.erb +18 -0
  161. data/app/views/alchemy/admin/clipboard/remove.turbo_stream.erb +9 -0
  162. data/app/views/alchemy/admin/dashboard/info.html.erb +17 -31
  163. data/app/views/alchemy/admin/elements/_element.html.erb +4 -8
  164. data/app/views/alchemy/admin/elements/_form.html.erb +1 -1
  165. data/app/views/alchemy/admin/elements/_header.html.erb +1 -0
  166. data/app/views/alchemy/admin/elements/_toolbar.html.erb +4 -6
  167. data/app/views/alchemy/admin/elements/create.turbo_stream.erb +2 -1
  168. data/app/views/alchemy/admin/elements/index.html.erb +2 -2
  169. data/app/views/alchemy/admin/ingredients/_file_fields.html.erb +3 -16
  170. data/app/views/alchemy/admin/ingredients/_picture_fields.html.erb +0 -9
  171. data/app/views/alchemy/admin/languages/_form.html.erb +1 -1
  172. data/app/views/alchemy/admin/languages/_table.html.erb +1 -1
  173. data/app/views/alchemy/admin/languages/index.html.erb +5 -2
  174. data/app/views/alchemy/admin/layoutpages/index.html.erb +1 -12
  175. data/app/views/alchemy/admin/pages/_form.html.erb +2 -2
  176. data/app/views/alchemy/admin/pages/_page.html.erb +2 -3
  177. data/app/views/alchemy/admin/pages/_toolbar.html.erb +1 -15
  178. data/app/views/alchemy/admin/pages/index.html.erb +1 -1
  179. data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +9 -12
  180. data/app/views/alchemy/admin/partials/_search_form.html.erb +4 -9
  181. data/app/views/alchemy/admin/picture_descriptions/_form.html.erb +5 -7
  182. data/app/views/alchemy/admin/picture_descriptions/edit.html.erb +2 -2
  183. data/app/views/alchemy/admin/pictures/_archive.html.erb +4 -7
  184. data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +2 -1
  185. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +1 -1
  186. data/app/views/alchemy/admin/pictures/_form.html.erb +2 -2
  187. data/app/views/alchemy/admin/pictures/_picture_description_field.html.erb +21 -13
  188. data/app/views/alchemy/admin/pictures/index.html.erb +2 -7
  189. data/app/views/alchemy/admin/resources/_applied_filters.html.erb +8 -0
  190. data/app/views/alchemy/admin/resources/_filter_bar.html.erb +11 -21
  191. data/app/views/alchemy/admin/resources/_pagination.html.erb +6 -0
  192. data/app/views/alchemy/admin/resources/_per_page_select.html.erb +4 -2
  193. data/app/views/alchemy/admin/resources/_resource_table.html.erb +1 -1
  194. data/app/views/alchemy/admin/resources/_table_header.html.erb +1 -15
  195. data/app/views/alchemy/admin/sites/index.html.erb +5 -1
  196. data/app/views/alchemy/admin/styleguide/index.html.erb +8 -0
  197. data/app/views/alchemy/admin/tags/index.html.erb +1 -1
  198. data/app/views/alchemy/admin/tinymce/_setup.html.erb +7 -7
  199. data/app/{javascript/alchemy_admin/locales/en.js → views/alchemy/admin/translations/_en.js} +5 -2
  200. data/app/views/alchemy/admin/uploader/_button.html.erb +1 -1
  201. data/app/views/alchemy/admin/uploader/_setup.html.erb +4 -4
  202. data/app/views/alchemy/base/500.turbo_stream.erb +3 -0
  203. data/app/views/alchemy/base/redirect.js.erb +1 -1
  204. data/app/views/alchemy/ingredients/_number_editor.html.erb +24 -0
  205. data/app/views/alchemy/no_index.html.erb +31 -0
  206. data/app/views/alchemy/welcome.html.erb +12 -10
  207. data/app/views/kaminari/alchemy/_first_page.html.erb +5 -3
  208. data/app/views/kaminari/alchemy/_last_page.html.erb +5 -3
  209. data/app/views/kaminari/alchemy/_next_page.html.erb +5 -3
  210. data/app/views/kaminari/alchemy/_paginator.html.erb +18 -13
  211. data/app/views/kaminari/alchemy/_prev_page.html.erb +5 -3
  212. data/app/views/layouts/alchemy/admin.html.erb +5 -9
  213. data/bun.lockb +0 -0
  214. data/bundles/remixicon.mjs +153 -0
  215. data/config/alchemy/config.yml +3 -2
  216. data/config/initializers/dragonfly.rb +0 -1
  217. data/config/initializers/mime_types.rb +1 -0
  218. data/config/locales/alchemy.en.yml +32 -14
  219. data/config/routes.rb +0 -2
  220. data/db/migrate/20250626160259_add_unique_index_to_picture_descriptions.rb +7 -0
  221. data/eslint.config.js +2 -1
  222. data/lib/alchemy/admin/preview_url.rb +4 -5
  223. data/lib/alchemy/cache_digests/template_tracker.rb +6 -9
  224. data/lib/alchemy/config_missing.rb +14 -0
  225. data/lib/alchemy/configuration/base_option.rb +24 -0
  226. data/lib/alchemy/configuration/boolean_option.rb +16 -0
  227. data/lib/alchemy/configuration/class_option.rb +15 -0
  228. data/lib/alchemy/configuration/class_set_option.rb +46 -0
  229. data/lib/alchemy/configuration/integer_list_option.rb +13 -0
  230. data/lib/alchemy/configuration/integer_option.rb +12 -0
  231. data/lib/alchemy/configuration/list_option.rb +22 -0
  232. data/lib/alchemy/configuration/regexp_option.rb +11 -0
  233. data/lib/alchemy/configuration/string_list_option.rb +13 -0
  234. data/lib/alchemy/configuration/string_option.rb +11 -0
  235. data/lib/alchemy/configuration.rb +115 -0
  236. data/lib/alchemy/configuration_methods.rb +3 -1
  237. data/lib/alchemy/configurations/default_language.rb +12 -0
  238. data/lib/alchemy/configurations/default_site.rb +10 -0
  239. data/lib/alchemy/configurations/format_matchers.rb +11 -0
  240. data/lib/alchemy/configurations/mailer.rb +16 -0
  241. data/lib/alchemy/configurations/main.rb +216 -0
  242. data/lib/alchemy/configurations/preview.rb +32 -0
  243. data/lib/alchemy/configurations/sitemap.rb +10 -0
  244. data/lib/alchemy/configurations/uploader.rb +34 -0
  245. data/lib/alchemy/engine.rb +65 -17
  246. data/lib/alchemy/hints.rb +3 -7
  247. data/lib/alchemy/on_page_layout.rb +2 -2
  248. data/lib/alchemy/propshaft/tinymce_asset.rb +15 -0
  249. data/lib/alchemy/seeder.rb +2 -2
  250. data/lib/alchemy/tasks/usage.rb +4 -4
  251. data/lib/alchemy/test_support/config_stubbing.rb +1 -7
  252. data/lib/alchemy/test_support/factories/attachment_factory.rb +13 -2
  253. data/lib/alchemy/test_support/factories/language_factory.rb +1 -1
  254. data/lib/alchemy/test_support/factories/page_factory.rb +2 -3
  255. data/lib/alchemy/test_support/factories/picture_factory.rb +30 -2
  256. data/lib/alchemy/test_support/factories/site_factory.rb +2 -2
  257. data/lib/alchemy/test_support/having_crop_action_examples.rb +2 -2
  258. data/lib/alchemy/test_support/having_picture_thumbnails_examples.rb +80 -26
  259. data/lib/alchemy/test_support/shared_ingredient_examples.rb +5 -5
  260. data/lib/alchemy/upgrader/.keep +0 -0
  261. data/lib/alchemy/upgrader/eight_zero.rb +14 -0
  262. data/lib/alchemy/upgrader.rb +33 -20
  263. data/lib/alchemy/version.rb +1 -1
  264. data/lib/alchemy.rb +192 -170
  265. data/lib/alchemy_cms.rb +1 -7
  266. data/lib/generators/alchemy/ingredient/ingredient_generator.rb +0 -3
  267. data/lib/generators/alchemy/install/files/_article.html.erb +6 -4
  268. data/lib/generators/alchemy/install/files/alchemy.en.yml +22 -3
  269. data/lib/generators/alchemy/install/files/application.html.erb +5 -0
  270. data/lib/generators/alchemy/install/install_generator.rb +5 -14
  271. data/lib/generators/alchemy/install/templates/alchemy.rb.tt +196 -0
  272. data/lib/generators/alchemy/install/templates/dragonfly.rb.tt +0 -1
  273. data/lib/generators/alchemy/install/templates/elements.yml.tt +3 -1
  274. data/lib/generators/alchemy/install/templates/menus.yml.tt +1 -1
  275. data/lib/generators/alchemy/install/templates/page_layouts.yml.tt +2 -2
  276. data/lib/generators/alchemy/page_layouts/page_layouts_generator.rb +2 -2
  277. data/lib/tasks/alchemy/assets.rake +14 -0
  278. data/lib/tasks/alchemy/upgrade.rake +12 -47
  279. data/vendor/javascript/tinymce.min.js +1 -1
  280. data/vitest.config.js +21 -0
  281. metadata +184 -180
  282. data/app/assets/builds/alchemy/admin/page-select.css.map +0 -1
  283. data/app/assets/builds/alchemy/admin/print.css.map +0 -1
  284. data/app/assets/builds/alchemy/admin.css.map +0 -1
  285. data/app/assets/builds/alchemy/custom-properties.css.map +0 -1
  286. data/app/assets/builds/alchemy/welcome.css.map +0 -1
  287. data/app/assets/builds/tinymce/skins/content/alchemy/content.min.css.map +0 -1
  288. data/app/assets/builds/tinymce/skins/ui/alchemy/skin.min.css.map +0 -1
  289. data/app/assets/javascripts/alchemy/admin.js +0 -10
  290. data/app/assets/stylesheets/alchemy/_defaults.scss +0 -3
  291. data/app/assets/stylesheets/alchemy/_deprecated_variables.scss +0 -45
  292. data/app/assets/stylesheets/alchemy/_deprecation.scss +0 -17
  293. data/app/assets/stylesheets/alchemy/_extends.scss +0 -62
  294. data/app/assets/stylesheets/alchemy/_variables.scss +0 -201
  295. data/app/assets/stylesheets/alchemy/admin/buttons.scss +0 -124
  296. data/app/assets/stylesheets/alchemy/admin/hints.scss +0 -5
  297. data/app/assets/stylesheets/alchemy/admin/labels.scss +0 -3
  298. data/app/assets/stylesheets/alchemy/admin/pagination.scss +0 -92
  299. data/app/assets/stylesheets/alchemy/admin.scss +0 -42
  300. data/app/assets/stylesheets/alchemy/custom-properties.css +0 -98
  301. data/app/assets/stylesheets/alchemy/welcome.scss +0 -57
  302. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.css +0 -711
  303. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.inline.css +0 -705
  304. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.inline.min.css +0 -7
  305. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.min.css +0 -7
  306. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.mobile.css +0 -29
  307. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.mobile.min.css +0 -7
  308. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/skin.mobile.css +0 -677
  309. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/skin.mobile.min.css +0 -7
  310. data/app/controllers/alchemy/elements_controller.rb +0 -32
  311. data/app/models/alchemy/element/dom_id.rb +0 -31
  312. data/app/models/alchemy/picture/calculations.rb +0 -49
  313. data/app/models/alchemy/picture/transformations.rb +0 -115
  314. data/app/views/alchemy/admin/attachments/destroy.js.erb +0 -1
  315. data/app/views/alchemy/admin/clipboard/clear.js.erb +0 -3
  316. data/app/views/alchemy/admin/clipboard/insert.js.erb +0 -29
  317. data/app/views/alchemy/admin/clipboard/remove.js.erb +0 -10
  318. data/app/views/alchemy/admin/resources/_filter.html.erb +0 -12
  319. data/app/views/alchemy/admin/resources/_resource.html.erb +0 -34
  320. data/app/views/alchemy/admin/resources/_table.html.erb +0 -29
  321. data/app/views/alchemy/elements/show.html.erb +0 -1
  322. data/app/views/alchemy/elements/show.js.erb +0 -1
  323. data/app/views/alchemy/ingredients/_audio_view.html.erb +0 -1
  324. data/app/views/alchemy/ingredients/_boolean_view.html.erb +0 -1
  325. data/app/views/alchemy/ingredients/_datetime_view.html.erb +0 -3
  326. data/app/views/alchemy/ingredients/_file_view.html.erb +0 -4
  327. data/app/views/alchemy/ingredients/_headline_view.html.erb +0 -4
  328. data/app/views/alchemy/ingredients/_html_view.html.erb +0 -1
  329. data/app/views/alchemy/ingredients/_link_view.html.erb +0 -4
  330. data/app/views/alchemy/ingredients/_node_view.html.erb +0 -1
  331. data/app/views/alchemy/ingredients/_page_view.html.erb +0 -1
  332. data/app/views/alchemy/ingredients/_picture_view.html.erb +0 -4
  333. data/app/views/alchemy/ingredients/_richtext_view.html.erb +0 -3
  334. data/app/views/alchemy/ingredients/_select_view.html.erb +0 -1
  335. data/app/views/alchemy/ingredients/_text_view.html.erb +0 -4
  336. data/app/views/alchemy/ingredients/_video_view.html.erb +0 -3
  337. data/babel.config.js +0 -12
  338. data/config/initializers/assets.rb +0 -4
  339. data/lib/alchemy/config.rb +0 -114
  340. data/lib/alchemy/element_definition.rb +0 -73
  341. data/lib/alchemy/page_layout.rb +0 -73
  342. data/lib/alchemy/resource_filter.rb +0 -40
  343. data/lib/alchemy/upgrader/seven_point_four.rb +0 -26
  344. data/lib/alchemy/upgrader/seven_point_three.rb +0 -52
  345. data/lib/generators/alchemy/ingredient/templates/view.html.erb +0 -1
  346. data/lib/generators/alchemy/install/files/alchemy_admin.js +0 -1
  347. data/lib/generators/alchemy/install/files/all.js +0 -11
  348. data/lib/generators/alchemy/install/files/article.css +0 -25
  349. data/vendor/assets/images/remixicon.symbol.svg +0 -11
  350. /data/app/{assets/stylesheets → stylesheets}/alchemy/_fonts.scss +0 -0
  351. /data/app/{assets/stylesheets → stylesheets}/alchemy/admin/attachment-select.scss +0 -0
  352. /data/app/{assets/stylesheets → stylesheets}/alchemy/admin/attachments.scss +0 -0
  353. /data/app/{assets/stylesheets → stylesheets}/alchemy/admin/flash.scss +0 -0
  354. /data/app/{assets/stylesheets → stylesheets}/alchemy/admin/list_filter.scss +0 -0
  355. /data/app/{assets/stylesheets → stylesheets}/alchemy/admin/node-select.scss +0 -0
  356. /data/app/{assets/stylesheets → stylesheets}/alchemy/admin/spinner.scss +0 -0
  357. /data/app/{assets/stylesheets → stylesheets}/tinymce/skins/skintool.json +0 -0
  358. /data/app/{assets/stylesheets → stylesheets}/tinymce/skins/ui/alchemy/fonts/tinymce-mobile.woff +0 -0
@@ -0,0 +1,196 @@
1
+ Alchemy.configure do |config|
2
+ # == This is the global Alchemy configuration file
3
+ #
4
+
5
+ # === Auto Log Out Time
6
+ #
7
+ # The amount of time of inactivity in minutes after which the user is kicked out of his current session.
8
+ #
9
+ # NOTE: This is only active in production environments
10
+ #
11
+ # config.auto_logout_time = <%= @default_config.auto_logout_time.inspect %>
12
+
13
+ # === Page caching
14
+ #
15
+ # Enable/Disable page caching globally.
16
+ #
17
+ # NOTE: You can enable/disable page caching for single Alchemy::Definitions in the page_layout.yml file.
18
+ #
19
+ # config.cache_pages = <%= @default_config.cache_pages.inspect %>
20
+
21
+ # === Sitemap
22
+ #
23
+ # Alchemy creates a XML, Google compatible, sitemap for you.
24
+ #
25
+ # The url is: http://your-domain.tld/sitemap.xml
26
+ #
27
+ # ==== Config Options:
28
+ #
29
+ # show_root [Boolean] # Show language root page in sitemap?
30
+ # show_flag [Boolean] # Enables the Checkbox in Page#update overlay. So your customer can set the visibility of pages in the sitemap.
31
+ #
32
+ # config.sitemap.tap do |sitemap|
33
+ # sitemap.show_root = <%= @default_config.sitemap.show_root.inspect %>
34
+ # sitemap.show_flag = <%= @default_config.sitemap.show_flag.inspect %>
35
+ # end
36
+
37
+ # === Default items per page in admin views
38
+ #
39
+ # In Alchemy's Admin, change how many items you would get shown per page by Kaminari
40
+ # config.items_per_page = <%= @default_config.items_per_page %>
41
+
42
+ # === Preview window URL configuration
43
+ #
44
+ # By default Alchemy uses its internal page preview renderer,
45
+ # but you can configure it to be any URL instead.
46
+ #
47
+ # Basic Auth is supported.
48
+ #
49
+ # config.preview = {
50
+ # host: https://www.my-static-site.com
51
+ # auth:
52
+ # username: <%%= ENV["BASIC_AUTH_USERNAME"] %%>
53
+ # password: <%%= ENV["BASIC_AUTH_PASSWORD"] %%>
54
+ # }
55
+ # Preview config per site is supported as well.
56
+ #
57
+ # config.preview = {
58
+ # My site name:
59
+ # host: https://www.my-static-site.com
60
+ # auth:
61
+ # username: <%%= ENV["BASIC_AUTH_USERNAME"] %%>
62
+ # password: <%%= ENV["BASIC_AUTH_PASSWORD"] %%>
63
+ # }
64
+
65
+ # === Picture rendering settings
66
+ #
67
+ # Alchemy uses Dragonfly to render images. Settings for image rendering are specific to elements and are defined in elements.yml
68
+ #
69
+ # Example:
70
+ # - name: some_element
71
+ # ingredients:
72
+ # - role: some_picture
73
+ # type: Picture
74
+ # settings:
75
+ # hint: true
76
+ # crop: true # turns on image cropping
77
+ # size: '500x500' # image will be cropped to this size
78
+ #
79
+ # See http://markevans.github.com/dragonfly for further info.
80
+ #
81
+ # ==== Global Options:
82
+ #
83
+ # output_image_quality [Integer] # If image gets rendered as JPG or WebP this is the quality setting for it. (Default 85)
84
+ # preprocess_image_resize [String] # Use this option to resize images to the given size when they are uploaded to the image library. Downsizing example: '1000x1000>' (Default nil)
85
+ # image_output_format [String] # The global image output format setting. (Default +original+)
86
+ #
87
+ # NOTE: You can always override the output format in the settings of your ingredients in elements.yml, I.E. {format: 'gif'}
88
+ #
89
+ # config.output_image_quality = <%= @default_config.output_image_quality %>
90
+ # config.preprocess_image_resize = <%= @default_config.preprocess_image_resize.inspect %>
91
+ # config.image_output_format = <%= @default_config.image_output_format.inspect %>
92
+
93
+ # This is used by the seeder to create the default site.
94
+ # config.default_site.tap do |default_site|
95
+ # default_site.name = <%= @default_config.default_site.name.inspect %>
96
+ # default_site.host = <%= @default_config.default_site.host.inspect %>
97
+ # end
98
+
99
+ # This is the default language when seeding.
100
+ # config.default_language.tap do |default_language|
101
+ # default_language.code = <%= @default_config.default_language.code.inspect %>
102
+ # default_language.name = <%= @default_config.default_language.name.inspect %>
103
+ # default_language.page_layout = <%= @default_config.default_language.page_layout.inspect %>
104
+ # default_language.frontpage_name = <%= @default_config.default_language.frontpage_name.inspect %>
105
+ # end
106
+
107
+ # === Mailer Settings:
108
+ #
109
+ # To send emails via contact forms, you can create your form fields here and set which fields are to be validated.
110
+ #
111
+ # === Validating fields:
112
+ #
113
+ # Pass the field name as a symbol and a message_id (will be translated) to :validate_fields:
114
+ #
115
+ # ==== Options:
116
+ #
117
+ # page_layout_name: [String] # A +Alchemy::PageDefinition+ name. Used to render the contactform on a page with this layout.
118
+ # fields: [Array] # An Array of fieldnames.
119
+ # validate_fields: [Array] # An Array of fieldnames to be validated on presence.
120
+ #
121
+ # ==== Translating validation messages:
122
+ #
123
+ # The validation messages are passed through ::I18n.t so you can translate it in your language yml file.
124
+ #
125
+ # ==== Example:
126
+ #
127
+ # de:
128
+ # activemodel:
129
+ # attributes:
130
+ # alchemy/message:
131
+ # firstname: Vorname
132
+ #
133
+ # config.mailer.tap do |mailer|
134
+ # mailer.page_layout_name = <%= @default_config.mailer.page_layout_name.inspect %>
135
+ # mailer.forward_to_page = <%= @default_config.mailer.forward_to_page.inspect %>
136
+ # mailer.mail_success_page = <%= @default_config.mailer.mail_success_page.inspect %>
137
+ # mailer.mail_from = <%= @default_config.mailer.mail_from.inspect %>
138
+ # mailer.mail_to = <%= @default_config.mailer.mail_to.inspect %>
139
+ # mailer.subject = <%= @default_config.mailer.subject.inspect %>
140
+ # mailer.fields = <%= @default_config.mailer.fields.inspect %>
141
+ # mailer.validate_fields = <%= @default_config.mailer.validate_fields.inspect %>
142
+ # end
143
+
144
+ # === User roles
145
+ #
146
+ # You can add own user roles.
147
+ #
148
+ # Further documentation for the auth system used please visit:
149
+ #
150
+ # https://github.com/ryanb/cancan/wiki
151
+ #
152
+ # ==== Translating User roles
153
+ #
154
+ # Userroles can be translated inside your the language yml file under:
155
+ #
156
+ # alchemy:
157
+ # user_roles:
158
+ # rolename: Name of the role
159
+ #
160
+ # config.user_roles = <%= @default_config.user_roles.inspect %>
161
+
162
+ # === Uploader Settings
163
+ #
164
+ # upload_limit [Integer] # Set an amount of files upload limit of files which can be uploaded at once. Set 0 for unlimited.
165
+ # file_size_limit* [Integer] # Set a file size limit in mega bytes for a per file limit.
166
+ #
167
+ # *) Allow filetypes to upload. Pass * to allow all kind of files.
168
+ #
169
+ # config.uploader.tap do |uploader|
170
+ # uploader.upload_limit = <%= @default_config.uploader.upload_limit.inspect %>
171
+ # uploader.file_size_limit = <%= @default_config.uploader.file_size_limit.inspect %>
172
+ # uploader.allowed_filetypes.tap do |file_types|
173
+ # file_types.alchemy_attachments = <%= @default_config.uploader.allowed_filetypes.alchemy_attachments.inspect %>
174
+ # file_types.alchemy_pictures = <%= @default_config.uploader.allowed_filetypes.alchemy_pictures.inspect %>
175
+ # end
176
+ # end
177
+
178
+ # === Link Target Options
179
+ #
180
+ # Values for the link target selectbox inside the page link overlay.
181
+ # The value gets attached as a data-link-target attribute to the link.
182
+ #
183
+ # == Example:
184
+ #
185
+ # Open all links set to overlay inside an jQuery UI Dialog Window.
186
+ #
187
+ # jQuery(a[data-link-target="overlay"]).dialog();
188
+ #
189
+ # config.link_target_options = <%= @default_config.link_target_options.inspect %>
190
+
191
+ # The layout used for rendering the +alchemy/admin/pages#show+ action.
192
+ # config.admin_page_preview_layout = <%= @default_config.admin_page_preview_layout.inspect %>
193
+
194
+ # The sizes for the preview size select in the page editor.
195
+ # config.page_preview_sizes = <%= @default_config.page_preview_sizes.inspect %>
196
+ end
@@ -14,7 +14,6 @@
14
14
  Dragonfly.app(:alchemy_pictures).configure do
15
15
  dragonfly_url nil
16
16
  plugin :imagemagick
17
- plugin :svg
18
17
  secret "<%= SecureRandom.hex(32) %>"
19
18
  url_format "/pictures/:job/:basename.:ext"
20
19
 
@@ -8,12 +8,14 @@
8
8
  unique: true
9
9
  ingredients:
10
10
  - role: headline
11
- type: Text
11
+ type: Headline
12
12
  default: :article_headline
13
13
  hint: true
14
14
  - role: picture
15
15
  type: Picture
16
16
  hint: true
17
+ settings:
18
+ size: 1200x600
17
19
  - role: text
18
20
  type: Richtext
19
21
  default: :article_text
@@ -1,6 +1,6 @@
1
1
  # == In this configuration, you set up Alchemy's menu names.
2
2
  #
3
- # For further information please see http://guides.alchemy-cms.com/stable/menus.html
3
+ # For further information please see https://guides.alchemy-cms.com/
4
4
 
5
5
  <%- unless @options[:skip_demo_files] -%>
6
6
  - main_menu
@@ -1,9 +1,9 @@
1
1
  # == This file defines the page layouts for new pages.
2
2
  #
3
- # For further information please see http://guides.alchemy-cms.com/stable/page_layouts.html
3
+ # For further information please see https://guides.alchemy-cms.com/pages.html
4
4
 
5
5
  <%- unless @options[:skip_demo_files] -%>
6
- - name: <%= Alchemy::Config.get(:default_language)['page_layout'] %>
6
+ - name: <%= Alchemy.config.default_language.page_layout %>
7
7
  unique: true
8
8
  elements: [article]
9
9
  autogenerate: [article]
@@ -13,8 +13,8 @@ module Alchemy
13
13
  return unless @page_layouts
14
14
 
15
15
  @page_layouts.each do |page_layout|
16
- @page_layout_name = page_layout["name"].underscore
17
- conditional_template "layout.html.#{template_engine}", "#{page_layouts_dir}/_#{@page_layout_name}.html.#{template_engine}"
16
+ layout_name = page_layout.name.underscore
17
+ conditional_template "layout.html.#{template_engine}", "#{page_layouts_dir}/_#{layout_name}.html.#{template_engine}"
18
18
  end
19
19
  end
20
20
 
@@ -0,0 +1,14 @@
1
+ if Rake::Task.task_defined?("assets:precompile") && defined?(Propshaft)
2
+ Rake::Task["assets:precompile"].enhance do
3
+ manifest_path = Rails.application.config.assets.manifest_path
4
+ assets_path = Rails.root.join("public#{Rails.application.config.assets.prefix}")
5
+ manifest = JSON.parse(manifest_path.read)
6
+ manifest.select { |k| k.include?("tinymce/") }.each do |k, v|
7
+ Propshaft.logger.info "Copying #{v} to #{k}"
8
+ FileUtils.cp(
9
+ assets_path.join(v),
10
+ assets_path.join(k)
11
+ )
12
+ end
13
+ end
14
+ end
@@ -3,14 +3,16 @@
3
3
  require "alchemy/upgrader"
4
4
  require "alchemy/version"
5
5
 
6
+ Upgrader = Alchemy::Upgrader.new("8.0")
7
+
6
8
  namespace :alchemy do
7
9
  desc "Upgrades your app to AlchemyCMS v#{Alchemy::VERSION}."
8
10
  task upgrade: [
9
11
  "alchemy:upgrade:prepare",
10
- "alchemy:upgrade:7.3:run",
11
- "alchemy:upgrade:7.4:run"
12
+ "alchemy:upgrade:8.0:run"
12
13
  ] do
13
- Alchemy::Upgrader.display_todos
14
+ Upgrader.run_migrations
15
+ Upgrader.display_todos
14
16
  end
15
17
 
16
18
  namespace :upgrade do
@@ -22,58 +24,21 @@ namespace :alchemy do
22
24
 
23
25
  desc "Alchemy Upgrader: Prepares the database."
24
26
  task database: [
25
- "alchemy:install:migrations",
26
- "db:migrate"
27
+ "alchemy:install:migrations"
27
28
  ]
28
29
 
29
- desc "Alchemy Upgrader: Copy configuration file."
30
+ desc "Alchemy Upgrader: Update configuration file."
30
31
  task config: [:environment] do
31
- Alchemy::Upgrader.copy_new_config_file
32
- end
33
-
34
- desc "Upgrade Alchemy to v7.3"
35
- task "7.3" => [
36
- "alchemy:upgrade:prepare",
37
- "alchemy:upgrade:7.3:run"
38
- ] do
39
- Alchemy::Upgrader.display_todos
40
- end
41
-
42
- desc "Upgrade Alchemy to v7.4"
43
- task "7.4" => [
44
- "alchemy:upgrade:prepare",
45
- "alchemy:upgrade:7.4:run"
46
- ] do
47
- Alchemy::Upgrader.display_todos
48
- end
49
-
50
- namespace "7.3" do
51
- task "run" => [
52
- "alchemy:upgrade:7.3:remove_admin_stylesheets",
53
- "alchemy:upgrade:7.3:generate_custom_css_entrypoint"
54
- ] do
55
- Alchemy::Upgrader::SevenPointThree.show_resource_table_notice
56
- end
57
-
58
- desc "Remove alchemy admin stylesheets"
59
- task remove_admin_stylesheets: [:environment] do
60
- Alchemy::Upgrader::SevenPointThree.remove_admin_stylesheets
61
- end
62
-
63
- desc "Generate custom css entrypoint"
64
- task generate_custom_css_entrypoint: [:environment] do
65
- Alchemy::Upgrader::SevenPointThree.generate_custom_css_entrypoint
66
- end
32
+ Upgrader.update_config
67
33
  end
68
34
 
69
- namespace "7.4" do
35
+ namespace "8.0" do
70
36
  task "run" => [
71
- "alchemy:upgrade:7.4:update_custom_css_config"
37
+ "alchemy:upgrade:8.0:mention_alchemy_config_initializer"
72
38
  ]
73
39
 
74
- desc "Update custom alchemy admin stylesheet config"
75
- task update_custom_css_config: [:environment] do
76
- Alchemy::Upgrader::SevenPointFour.update_custom_css_config
40
+ task :mention_alchemy_config_initializer do
41
+ Upgrader.mention_alchemy_config_initializer
77
42
  end
78
43
  end
79
44
  end