alchemy_cms 7.3.4 → 7.4.0

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 (134) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +67 -1
  3. data/Gemfile +10 -3
  4. data/README.md +2 -2
  5. data/Rakefile +2 -0
  6. data/alchemy_cms.gemspec +1 -4
  7. data/app/assets/builds/alchemy/admin.css +9 -1
  8. data/app/assets/builds/alchemy/admin.css.map +1 -1
  9. data/app/assets/builds/alchemy/custom-properties.css +1 -1
  10. data/app/assets/builds/alchemy/custom-properties.css.map +1 -1
  11. data/app/assets/builds/alchemy/preview.min.js +1 -0
  12. data/app/assets/builds/alchemy/welcome.css +1 -1
  13. data/app/assets/builds/alchemy/welcome.css.map +1 -1
  14. data/app/assets/builds/tinymce/skins/content/alchemy/content.min.css +1 -1
  15. data/app/assets/builds/tinymce/skins/content/alchemy/content.min.css.map +1 -1
  16. data/app/assets/config/alchemy_manifest.js +0 -4
  17. data/app/assets/javascripts/alchemy/admin.js +8 -6
  18. data/app/assets/stylesheets/alchemy/admin/elements.scss +43 -7
  19. data/app/assets/stylesheets/alchemy/admin/forms.scss +4 -0
  20. data/app/assets/stylesheets/alchemy/admin/image_library.scss +40 -26
  21. data/app/assets/stylesheets/alchemy/admin/navigation.scss +9 -1
  22. data/app/assets/stylesheets/alchemy/admin/preview_window.scss +22 -17
  23. data/app/assets/stylesheets/alchemy/admin.scss +1 -1
  24. data/app/assets/stylesheets/alchemy/custom-properties.css +2 -1
  25. data/app/components/alchemy/ingredients/link_view.rb +7 -1
  26. data/app/components/alchemy/ingredients/picture_view.rb +5 -2
  27. data/app/components/alchemy/ingredients/text_view.rb +4 -1
  28. data/app/components/concerns/alchemy/ingredients/link_target.rb +18 -0
  29. data/app/controllers/alchemy/admin/base_controller.rb +34 -5
  30. data/app/controllers/alchemy/admin/elements_controller.rb +2 -2
  31. data/app/controllers/alchemy/admin/languages_controller.rb +1 -1
  32. data/app/controllers/alchemy/admin/layoutpages_controller.rb +1 -0
  33. data/app/controllers/alchemy/admin/pages_controller.rb +6 -6
  34. data/app/controllers/alchemy/admin/resources_controller.rb +1 -1
  35. data/app/controllers/alchemy/elements_controller.rb +3 -0
  36. data/app/helpers/alchemy/admin/form_helper.rb +1 -1
  37. data/app/helpers/alchemy/admin/navigation_helper.rb +22 -1
  38. data/app/javascript/alchemy_admin/components/action.js +2 -1
  39. data/app/javascript/alchemy_admin/components/dialog_link.js +3 -18
  40. data/app/javascript/alchemy_admin/components/element_editor.js +9 -0
  41. data/app/javascript/alchemy_admin/components/elements_window.js +34 -0
  42. data/app/javascript/alchemy_admin/components/elements_window_handle.js +65 -0
  43. data/app/javascript/alchemy_admin/components/icon.js +2 -2
  44. data/app/javascript/alchemy_admin/components/index.js +1 -0
  45. data/app/javascript/alchemy_admin/components/preview_window.js +5 -5
  46. data/app/javascript/alchemy_admin/components/uploader/file_upload.js +1 -1
  47. data/app/javascript/alchemy_admin/confirm_dialog.js +9 -11
  48. data/app/javascript/alchemy_admin/dialog.js +329 -0
  49. data/app/javascript/alchemy_admin/hotkeys.js +3 -2
  50. data/app/javascript/alchemy_admin/image_cropper.js +57 -40
  51. data/app/javascript/alchemy_admin/image_overlay.js +73 -0
  52. data/app/javascript/alchemy_admin/initializer.js +51 -2
  53. data/app/javascript/alchemy_admin/link_dialog.js +2 -1
  54. data/app/javascript/alchemy_admin/node_tree.js +3 -1
  55. data/app/javascript/alchemy_admin/page_sorter.js +1 -1
  56. data/app/javascript/alchemy_admin/picture_selector.js +2 -1
  57. data/app/javascript/alchemy_admin/shoelace_theme.js +2 -2
  58. data/app/javascript/alchemy_admin/templates/compiled.js +1 -0
  59. data/app/javascript/alchemy_admin.js +10 -6
  60. data/app/javascript/preview.js +117 -0
  61. data/app/models/alchemy/image_cropper_settings.rb +3 -4
  62. data/app/views/alchemy/_menubar.html.erb +1 -1
  63. data/app/views/alchemy/_preview_mode_code.html.erb +1 -1
  64. data/app/views/alchemy/admin/crop.html.erb +19 -16
  65. data/app/views/alchemy/admin/dashboard/info.html.erb +1 -1
  66. data/app/views/alchemy/admin/elements/_add_nested_element_form.html.erb +9 -8
  67. data/app/views/alchemy/admin/elements/_clipboard_button.html.erb +14 -0
  68. data/app/views/alchemy/admin/elements/_element.html.erb +2 -0
  69. data/app/views/alchemy/admin/elements/_form.html.erb +15 -13
  70. data/app/views/alchemy/admin/elements/create.turbo_stream.erb +34 -0
  71. data/app/views/alchemy/admin/elements/index.html.erb +3 -15
  72. data/app/views/alchemy/admin/ingredients/_picture_fields.html.erb +1 -1
  73. data/app/views/alchemy/admin/layoutpages/edit.html.erb +7 -5
  74. data/app/views/alchemy/admin/nodes/_form.html.erb +1 -1
  75. data/app/views/alchemy/admin/pages/_current_page.html.erb +1 -1
  76. data/app/views/alchemy/admin/pages/_form.html.erb +43 -40
  77. data/app/views/alchemy/admin/pages/_locked_page.html.erb +1 -1
  78. data/app/views/alchemy/admin/pages/_page_layout_filter.html.erb +1 -1
  79. data/app/views/alchemy/admin/pages/_sitemap.html.erb +1 -1
  80. data/app/views/alchemy/admin/pages/_table.html.erb +2 -2
  81. data/app/views/alchemy/admin/pages/edit.html.erb +1 -1
  82. data/app/views/alchemy/admin/pages/update.turbo_stream.erb +39 -0
  83. data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +3 -4
  84. data/app/views/alchemy/admin/pictures/_picture_description_field.html.erb +7 -5
  85. data/app/views/alchemy/admin/pictures/index.html.erb +13 -9
  86. data/app/views/alchemy/admin/resources/_filter_bar.html.erb +1 -1
  87. data/app/views/layouts/alchemy/admin.html.erb +8 -4
  88. data/bun.lockb +0 -0
  89. data/bundles/tinymce.js +2 -0
  90. data/config/alchemy/config.yml +3 -3
  91. data/config/alchemy/modules.yml +7 -6
  92. data/config/importmap.rb +4 -0
  93. data/config/routes.rb +1 -1
  94. data/lib/alchemy/engine.rb +6 -0
  95. data/lib/alchemy/modules.rb +0 -27
  96. data/lib/alchemy/resource.rb +14 -4
  97. data/lib/alchemy/test_support/having_picture_thumbnails_examples.rb +10 -10
  98. data/lib/alchemy/tinymce.rb +2 -1
  99. data/lib/alchemy/upgrader/seven_point_four.rb +26 -0
  100. data/lib/alchemy/version.rb +1 -1
  101. data/lib/alchemy.rb +14 -0
  102. data/lib/alchemy_cms.rb +0 -2
  103. data/lib/generators/alchemy/ingredient/ingredient_generator.rb +5 -0
  104. data/lib/generators/alchemy/ingredient/templates/view.html.erb +1 -1
  105. data/lib/generators/alchemy/ingredient/templates/view_component.rb.tt +10 -0
  106. data/lib/generators/alchemy/install/install_generator.rb +0 -1
  107. data/lib/generators/alchemy/install/templates/elements.yml.tt +1 -1
  108. data/lib/tasks/alchemy/upgrade.rake +19 -20
  109. data/rollup.config.mjs +44 -1
  110. data/vendor/javascript/cropperjs.min.js +10 -0
  111. data/vendor/javascript/handlebars.min.js +29 -0
  112. data/vendor/javascript/jquery.min.js +2 -0
  113. data/vendor/javascript/select2.min.js +23 -0
  114. data/vendor/javascript/tinymce.min.js +1 -1
  115. metadata +40 -94
  116. data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +0 -271
  117. data/app/assets/javascripts/alchemy/alchemy.image_overlay.coffee +0 -54
  118. data/app/assets/javascripts/alchemy/alchemy.preview.js.coffee +0 -97
  119. data/app/assets/javascripts/alchemy/preview.js +0 -1
  120. data/app/assets/javascripts/alchemy/templates/index.js +0 -2
  121. data/app/javascript/alchemy_admin/gui.js +0 -12
  122. data/app/views/alchemy/admin/elements/create.js.erb +0 -35
  123. data/app/views/alchemy/admin/pages/update.js.erb +0 -43
  124. data/lib/alchemy/upgrader/seven_point_zero.rb +0 -36
  125. data/vendor/assets/images/Jcrop.gif +0 -0
  126. data/vendor/assets/javascripts/jquery_plugins/jquery.Jcrop.min.js +0 -7
  127. data/vendor/assets/javascripts/jquery_plugins/select2.js +0 -3729
  128. data/vendor/assets/stylesheets/jquery.Jcrop.min.css +0 -2
  129. data/vendor/assets/stylesheets/tinymce/skins/content/default/content.min.css +0 -1
  130. /data/app/{assets/javascripts/alchemy → javascript/alchemy_admin}/templates/node_folder.hbs +0 -0
  131. /data/app/{assets/javascripts/alchemy → javascript/alchemy_admin}/templates/page_folder.hbs +0 -0
  132. /data/app/{assets/javascripts/tinymce/icons/remixicons/icons.js → javascript/tinymce/icons/remixicons/index.js} +0 -0
  133. /data/app/{assets/javascripts/tinymce/plugins/alchemy_link/plugin.min.js → javascript/tinymce/plugins/alchemy_link/index.js} +0 -0
  134. /data/vendor/assets/{fonts → images}/remixicon.symbol.svg +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: 7.3.4
4
+ version: 7.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas von Deyen
@@ -10,10 +10,9 @@ authors:
10
10
  - Hendrik Mans
11
11
  - Carsten Fregin
12
12
  - Martin Meyerhoff
13
- autorequire:
14
13
  bindir: bin
15
14
  cert_chain: []
16
- date: 2024-11-18 00:00:00.000000000 Z
15
+ date: 2025-02-07 00:00:00.000000000 Z
17
16
  dependencies:
18
17
  - !ruby/object:Gem::Dependency
19
18
  name: actionmailer
@@ -24,7 +23,7 @@ dependencies:
24
23
  version: '7.0'
25
24
  - - "<"
26
25
  - !ruby/object:Gem::Version
27
- version: '7.3'
26
+ version: '8.1'
28
27
  type: :runtime
29
28
  prerelease: false
30
29
  version_requirements: !ruby/object:Gem::Requirement
@@ -34,7 +33,7 @@ dependencies:
34
33
  version: '7.0'
35
34
  - - "<"
36
35
  - !ruby/object:Gem::Version
37
- version: '7.3'
36
+ version: '8.1'
38
37
  - !ruby/object:Gem::Dependency
39
38
  name: actionpack
40
39
  requirement: !ruby/object:Gem::Requirement
@@ -44,7 +43,7 @@ dependencies:
44
43
  version: '7.0'
45
44
  - - "<"
46
45
  - !ruby/object:Gem::Version
47
- version: '7.3'
46
+ version: '8.1'
48
47
  type: :runtime
49
48
  prerelease: false
50
49
  version_requirements: !ruby/object:Gem::Requirement
@@ -54,7 +53,7 @@ dependencies:
54
53
  version: '7.0'
55
54
  - - "<"
56
55
  - !ruby/object:Gem::Version
57
- version: '7.3'
56
+ version: '8.1'
58
57
  - !ruby/object:Gem::Dependency
59
58
  name: actionview
60
59
  requirement: !ruby/object:Gem::Requirement
@@ -64,7 +63,7 @@ dependencies:
64
63
  version: '7.0'
65
64
  - - "<"
66
65
  - !ruby/object:Gem::Version
67
- version: '7.3'
66
+ version: '8.1'
68
67
  type: :runtime
69
68
  prerelease: false
70
69
  version_requirements: !ruby/object:Gem::Requirement
@@ -74,7 +73,7 @@ dependencies:
74
73
  version: '7.0'
75
74
  - - "<"
76
75
  - !ruby/object:Gem::Version
77
- version: '7.3'
76
+ version: '8.1'
78
77
  - !ruby/object:Gem::Dependency
79
78
  name: activejob
80
79
  requirement: !ruby/object:Gem::Requirement
@@ -84,7 +83,7 @@ dependencies:
84
83
  version: '7.0'
85
84
  - - "<"
86
85
  - !ruby/object:Gem::Version
87
- version: '7.3'
86
+ version: '8.1'
88
87
  type: :runtime
89
88
  prerelease: false
90
89
  version_requirements: !ruby/object:Gem::Requirement
@@ -94,7 +93,7 @@ dependencies:
94
93
  version: '7.0'
95
94
  - - "<"
96
95
  - !ruby/object:Gem::Version
97
- version: '7.3'
96
+ version: '8.1'
98
97
  - !ruby/object:Gem::Dependency
99
98
  name: activemodel
100
99
  requirement: !ruby/object:Gem::Requirement
@@ -104,7 +103,7 @@ dependencies:
104
103
  version: '7.0'
105
104
  - - "<"
106
105
  - !ruby/object:Gem::Version
107
- version: '7.3'
106
+ version: '8.1'
108
107
  type: :runtime
109
108
  prerelease: false
110
109
  version_requirements: !ruby/object:Gem::Requirement
@@ -114,7 +113,7 @@ dependencies:
114
113
  version: '7.0'
115
114
  - - "<"
116
115
  - !ruby/object:Gem::Version
117
- version: '7.3'
116
+ version: '8.1'
118
117
  - !ruby/object:Gem::Dependency
119
118
  name: activerecord
120
119
  requirement: !ruby/object:Gem::Requirement
@@ -124,7 +123,7 @@ dependencies:
124
123
  version: '7.0'
125
124
  - - "<"
126
125
  - !ruby/object:Gem::Version
127
- version: '7.3'
126
+ version: '8.1'
128
127
  type: :runtime
129
128
  prerelease: false
130
129
  version_requirements: !ruby/object:Gem::Requirement
@@ -134,7 +133,7 @@ dependencies:
134
133
  version: '7.0'
135
134
  - - "<"
136
135
  - !ruby/object:Gem::Version
137
- version: '7.3'
136
+ version: '8.1'
138
137
  - !ruby/object:Gem::Dependency
139
138
  name: activesupport
140
139
  requirement: !ruby/object:Gem::Requirement
@@ -144,7 +143,7 @@ dependencies:
144
143
  version: '7.0'
145
144
  - - "<"
146
145
  - !ruby/object:Gem::Version
147
- version: '7.3'
146
+ version: '8.1'
148
147
  type: :runtime
149
148
  prerelease: false
150
149
  version_requirements: !ruby/object:Gem::Requirement
@@ -154,7 +153,7 @@ dependencies:
154
153
  version: '7.0'
155
154
  - - "<"
156
155
  - !ruby/object:Gem::Version
157
- version: '7.3'
156
+ version: '8.1'
158
157
  - !ruby/object:Gem::Dependency
159
158
  name: railties
160
159
  requirement: !ruby/object:Gem::Requirement
@@ -164,7 +163,7 @@ dependencies:
164
163
  version: '7.0'
165
164
  - - "<"
166
165
  - !ruby/object:Gem::Version
167
- version: '7.3'
166
+ version: '8.1'
168
167
  type: :runtime
169
168
  prerelease: false
170
169
  version_requirements: !ruby/object:Gem::Requirement
@@ -174,7 +173,7 @@ dependencies:
174
173
  version: '7.0'
175
174
  - - "<"
176
175
  - !ruby/object:Gem::Version
177
- version: '7.3'
176
+ version: '8.1'
178
177
  - !ruby/object:Gem::Dependency
179
178
  name: active_model_serializers
180
179
  requirement: !ruby/object:Gem::Requirement
@@ -249,26 +248,6 @@ dependencies:
249
248
  - - "<"
250
249
  - !ruby/object:Gem::Version
251
250
  version: '4.0'
252
- - !ruby/object:Gem::Dependency
253
- name: coffee-rails
254
- requirement: !ruby/object:Gem::Requirement
255
- requirements:
256
- - - ">="
257
- - !ruby/object:Gem::Version
258
- version: '4.0'
259
- - - "<"
260
- - !ruby/object:Gem::Version
261
- version: '6.0'
262
- type: :runtime
263
- prerelease: false
264
- version_requirements: !ruby/object:Gem::Requirement
265
- requirements:
266
- - - ">="
267
- - !ruby/object:Gem::Version
268
- version: '4.0'
269
- - - "<"
270
- - !ruby/object:Gem::Version
271
- version: '6.0'
272
251
  - !ruby/object:Gem::Dependency
273
252
  name: csv
274
253
  requirement: !ruby/object:Gem::Requirement
@@ -331,20 +310,6 @@ dependencies:
331
310
  - - ">="
332
311
  - !ruby/object:Gem::Version
333
312
  version: 2.2.1
334
- - !ruby/object:Gem::Dependency
335
- name: handlebars_assets
336
- requirement: !ruby/object:Gem::Requirement
337
- requirements:
338
- - - "~>"
339
- - !ruby/object:Gem::Version
340
- version: '0.23'
341
- type: :runtime
342
- prerelease: false
343
- version_requirements: !ruby/object:Gem::Requirement
344
- requirements:
345
- - - "~>"
346
- - !ruby/object:Gem::Version
347
- version: '0.23'
348
313
  - !ruby/object:Gem::Dependency
349
314
  name: importmap-rails
350
315
  requirement: !ruby/object:Gem::Requirement
@@ -365,26 +330,6 @@ dependencies:
365
330
  - - ">="
366
331
  - !ruby/object:Gem::Version
367
332
  version: 1.2.1
368
- - !ruby/object:Gem::Dependency
369
- name: jquery-rails
370
- requirement: !ruby/object:Gem::Requirement
371
- requirements:
372
- - - "~>"
373
- - !ruby/object:Gem::Version
374
- version: '4.0'
375
- - - ">="
376
- - !ruby/object:Gem::Version
377
- version: 4.0.4
378
- type: :runtime
379
- prerelease: false
380
- version_requirements: !ruby/object:Gem::Requirement
381
- requirements:
382
- - - "~>"
383
- - !ruby/object:Gem::Version
384
- version: '4.0'
385
- - - ">="
386
- - !ruby/object:Gem::Version
387
- version: 4.0.4
388
333
  - !ruby/object:Gem::Dependency
389
334
  name: kaminari
390
335
  requirement: !ruby/object:Gem::Requirement
@@ -713,6 +658,7 @@ files:
713
658
  - app/assets/builds/alchemy/admin/print.css.map
714
659
  - app/assets/builds/alchemy/custom-properties.css
715
660
  - app/assets/builds/alchemy/custom-properties.css.map
661
+ - app/assets/builds/alchemy/preview.min.js
716
662
  - app/assets/builds/alchemy/welcome.css
717
663
  - app/assets/builds/alchemy/welcome.css.map
718
664
  - app/assets/builds/tinymce/skins/content/alchemy/content.min.css
@@ -727,15 +673,6 @@ files:
727
673
  - app/assets/images/alchemy/icon.svg
728
674
  - app/assets/images/alchemy/missing-image.svg
729
675
  - app/assets/javascripts/alchemy/admin.js
730
- - app/assets/javascripts/alchemy/alchemy.dialog.js.coffee
731
- - app/assets/javascripts/alchemy/alchemy.image_overlay.coffee
732
- - app/assets/javascripts/alchemy/alchemy.preview.js.coffee
733
- - app/assets/javascripts/alchemy/preview.js
734
- - app/assets/javascripts/alchemy/templates/index.js
735
- - app/assets/javascripts/alchemy/templates/node_folder.hbs
736
- - app/assets/javascripts/alchemy/templates/page_folder.hbs
737
- - app/assets/javascripts/tinymce/icons/remixicons/icons.js
738
- - app/assets/javascripts/tinymce/plugins/alchemy_link/plugin.min.js
739
676
  - app/assets/stylesheets/alchemy/_defaults.scss
740
677
  - app/assets/stylesheets/alchemy/_deprecated_variables.scss
741
678
  - app/assets/stylesheets/alchemy/_deprecation.scss
@@ -832,6 +769,7 @@ files:
832
769
  - app/components/alchemy/ingredients/select_view.rb
833
770
  - app/components/alchemy/ingredients/text_view.rb
834
771
  - app/components/alchemy/ingredients/video_view.rb
772
+ - app/components/concerns/alchemy/ingredients/link_target.rb
835
773
  - app/controllers/alchemy/admin/attachments_controller.rb
836
774
  - app/controllers/alchemy/admin/base_controller.rb
837
775
  - app/controllers/alchemy/admin/clipboard_controller.rb
@@ -896,6 +834,7 @@ files:
896
834
  - app/javascript/alchemy_admin/components/element_editor/delete_element_button.js
897
835
  - app/javascript/alchemy_admin/components/element_editor/publish_element_button.js
898
836
  - app/javascript/alchemy_admin/components/elements_window.js
837
+ - app/javascript/alchemy_admin/components/elements_window_handle.js
899
838
  - app/javascript/alchemy_admin/components/growl.js
900
839
  - app/javascript/alchemy_admin/components/icon.js
901
840
  - app/javascript/alchemy_admin/components/index.js
@@ -918,15 +857,16 @@ files:
918
857
  - app/javascript/alchemy_admin/components/uploader/file_upload.js
919
858
  - app/javascript/alchemy_admin/components/uploader/progress.js
920
859
  - app/javascript/alchemy_admin/confirm_dialog.js
860
+ - app/javascript/alchemy_admin/dialog.js
921
861
  - app/javascript/alchemy_admin/dirty.js
922
862
  - app/javascript/alchemy_admin/file_editors.js
923
863
  - app/javascript/alchemy_admin/fixed_elements.js
924
864
  - app/javascript/alchemy_admin/growler.js
925
- - app/javascript/alchemy_admin/gui.js
926
865
  - app/javascript/alchemy_admin/hotkeys.js
927
866
  - app/javascript/alchemy_admin/i18n.js
928
867
  - app/javascript/alchemy_admin/image_cropper.js
929
868
  - app/javascript/alchemy_admin/image_loader.js
869
+ - app/javascript/alchemy_admin/image_overlay.js
930
870
  - app/javascript/alchemy_admin/ingredient_anchor_link.js
931
871
  - app/javascript/alchemy_admin/initializer.js
932
872
  - app/javascript/alchemy_admin/link_dialog.js
@@ -941,6 +881,9 @@ files:
941
881
  - app/javascript/alchemy_admin/sitemap.js
942
882
  - app/javascript/alchemy_admin/sortable_elements.js
943
883
  - app/javascript/alchemy_admin/spinner.js
884
+ - app/javascript/alchemy_admin/templates/compiled.js
885
+ - app/javascript/alchemy_admin/templates/node_folder.hbs
886
+ - app/javascript/alchemy_admin/templates/page_folder.hbs
944
887
  - app/javascript/alchemy_admin/utils/ajax.js
945
888
  - app/javascript/alchemy_admin/utils/debounce.js
946
889
  - app/javascript/alchemy_admin/utils/dom_helpers.js
@@ -948,6 +891,9 @@ files:
948
891
  - app/javascript/alchemy_admin/utils/format.js
949
892
  - app/javascript/alchemy_admin/utils/max.js
950
893
  - app/javascript/alchemy_admin/utils/string_conversions.js
894
+ - app/javascript/preview.js
895
+ - app/javascript/tinymce/icons/remixicons/index.js
896
+ - app/javascript/tinymce/plugins/alchemy_link/index.js
951
897
  - app/jobs/alchemy/base_job.rb
952
898
  - app/jobs/alchemy/publish_page_job.rb
953
899
  - app/mailers/alchemy/base_mailer.rb
@@ -1063,12 +1009,13 @@ files:
1063
1009
  - app/views/alchemy/admin/dashboard/widgets/_sites.html.erb
1064
1010
  - app/views/alchemy/admin/dashboard/widgets/_users.html.erb
1065
1011
  - app/views/alchemy/admin/elements/_add_nested_element_form.html.erb
1012
+ - app/views/alchemy/admin/elements/_clipboard_button.html.erb
1066
1013
  - app/views/alchemy/admin/elements/_element.html.erb
1067
1014
  - app/views/alchemy/admin/elements/_footer.html.erb
1068
1015
  - app/views/alchemy/admin/elements/_form.html.erb
1069
1016
  - app/views/alchemy/admin/elements/_header.html.erb
1070
1017
  - app/views/alchemy/admin/elements/_toolbar.html.erb
1071
- - app/views/alchemy/admin/elements/create.js.erb
1018
+ - app/views/alchemy/admin/elements/create.turbo_stream.erb
1072
1019
  - app/views/alchemy/admin/elements/index.html.erb
1073
1020
  - app/views/alchemy/admin/elements/new.html.erb
1074
1021
  - app/views/alchemy/admin/ingredients/_audio_fields.html.erb
@@ -1132,7 +1079,7 @@ files:
1132
1079
  - app/views/alchemy/admin/pages/new.html.erb
1133
1080
  - app/views/alchemy/admin/pages/show.html.erb
1134
1081
  - app/views/alchemy/admin/pages/unlock.js.erb
1135
- - app/views/alchemy/admin/pages/update.js.erb
1082
+ - app/views/alchemy/admin/pages/update.turbo_stream.erb
1136
1083
  - app/views/alchemy/admin/partials/_autocomplete_tag_list.html.erb
1137
1084
  - app/views/alchemy/admin/partials/_flash_notices.html.erb
1138
1085
  - app/views/alchemy/admin/partials/_language_tree_select.html.erb
@@ -1348,8 +1295,8 @@ files:
1348
1295
  - lib/alchemy/test_support/shared_uploader_examples.rb
1349
1296
  - lib/alchemy/tinymce.rb
1350
1297
  - lib/alchemy/upgrader.rb
1298
+ - lib/alchemy/upgrader/seven_point_four.rb
1351
1299
  - lib/alchemy/upgrader/seven_point_three.rb
1352
- - lib/alchemy/upgrader/seven_point_zero.rb
1353
1300
  - lib/alchemy/upgrader/tasks/.keep
1354
1301
  - lib/alchemy/version.rb
1355
1302
  - lib/alchemy_cms.rb
@@ -1362,6 +1309,7 @@ files:
1362
1309
  - lib/generators/alchemy/ingredient/templates/editor.html.erb
1363
1310
  - lib/generators/alchemy/ingredient/templates/model.rb.tt
1364
1311
  - lib/generators/alchemy/ingredient/templates/view.html.erb
1312
+ - lib/generators/alchemy/ingredient/templates/view_component.rb.tt
1365
1313
  - lib/generators/alchemy/install/files/_article.html.erb
1366
1314
  - lib/generators/alchemy/install/files/_standard.html.erb
1367
1315
  - lib/generators/alchemy/install/files/alchemy.en.yml
@@ -1404,17 +1352,16 @@ files:
1404
1352
  - lib/tasks/alchemy/upgrade.rake
1405
1353
  - lib/tasks/alchemy/usage.rake
1406
1354
  - rollup.config.mjs
1407
- - vendor/assets/fonts/remixicon.symbol.svg
1408
- - vendor/assets/images/Jcrop.gif
1409
- - vendor/assets/javascripts/jquery_plugins/jquery.Jcrop.min.js
1410
- - vendor/assets/javascripts/jquery_plugins/select2.js
1355
+ - vendor/assets/images/remixicon.symbol.svg
1411
1356
  - vendor/assets/stylesheets/alchemy_admin/select2.css
1412
- - vendor/assets/stylesheets/jquery.Jcrop.min.css
1413
- - vendor/assets/stylesheets/tinymce/skins/content/default/content.min.css
1414
1357
  - vendor/javascript/clipboard.min.js
1358
+ - vendor/javascript/cropperjs.min.js
1415
1359
  - vendor/javascript/flatpickr.min.js
1360
+ - vendor/javascript/handlebars.min.js
1361
+ - vendor/javascript/jquery.min.js
1416
1362
  - vendor/javascript/keymaster.min.js
1417
1363
  - vendor/javascript/rails-ujs.min.js
1364
+ - vendor/javascript/select2.min.js
1418
1365
  - vendor/javascript/shoelace.min.js
1419
1366
  - vendor/javascript/sortable.min.js
1420
1367
  - vendor/javascript/tinymce.min.js
@@ -1459,8 +1406,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1459
1406
  version: '0'
1460
1407
  requirements:
1461
1408
  - ImageMagick (libmagick), v6.6 or greater.
1462
- rubygems_version: 3.5.22
1463
- signing_key:
1409
+ rubygems_version: 3.6.3
1464
1410
  specification_version: 4
1465
1411
  summary: A powerful, userfriendly and flexible CMS for Rails
1466
1412
  test_files: []
@@ -1,271 +0,0 @@
1
- # Dialog windows
2
- #
3
- class window.Alchemy.Dialog
4
-
5
- DEFAULTS:
6
- header_height: 36
7
- size: '400x300'
8
- padding: true
9
- title: ''
10
- modal: true
11
- overflow: 'visible'
12
- ready: ->
13
- closed: ->
14
-
15
- # Arguments:
16
- # - url: The url to load the content from via ajax
17
- # - options: A object holding options
18
- # - size: The maximum size of the Dialog
19
- # - title: The title of the Dialog
20
- constructor: (@url, @options = {}) ->
21
- @options = $.extend({}, @DEFAULTS, @options)
22
- @$document = $(document)
23
- @$window = $(window)
24
- @$body = $('body')
25
- size = @options.size.split('x')
26
- @width = parseInt(size[0], 10)
27
- @height = parseInt(size[1], 10)
28
- @build()
29
-
30
- # Opens the Dialog and loads the content via ajax.
31
- open: ->
32
- @dialog.trigger 'Alchemy.DialogOpen'
33
- @bind_close_events()
34
- window.requestAnimationFrame =>
35
- @dialog_container.addClass('open')
36
- @overlay.addClass('open') if @overlay?
37
- @$body.addClass('prevent-scrolling')
38
- Alchemy.currentDialogs.push(this)
39
- @load()
40
- true
41
-
42
- # Closes the Dialog and removes it from the DOM
43
- close: ->
44
- @dialog.trigger 'DialogClose.Alchemy'
45
- @$document.off 'keydown'
46
- @dialog_container.removeClass('open')
47
- @overlay.removeClass('open') if @overlay?
48
- @$document.on 'webkitTransitionEnd transitionend oTransitionEnd', =>
49
- @$document.off 'webkitTransitionEnd transitionend oTransitionEnd'
50
- @dialog_container.remove()
51
- @overlay.remove() if @overlay?
52
- @$body.removeClass('prevent-scrolling')
53
- Alchemy.currentDialogs.pop(this)
54
- if @options.closed?
55
- @options.closed()
56
- true
57
-
58
- # Loads the content via ajax and replaces the Dialog body with server response.
59
- load: ->
60
- @show_spinner()
61
- $.get @url, (data) =>
62
- @replace(data)
63
- .fail (xhr) =>
64
- @show_error(xhr)
65
- true
66
-
67
- # Reloads the Dialog content
68
- reload: ->
69
- @dialog_body.empty()
70
- @load()
71
-
72
- # Replaces the dialog body with given content and initializes it.
73
- replace: (data) ->
74
- @remove_spinner()
75
- @dialog_body.hide()
76
- @dialog_body.html(data)
77
- @init()
78
- @dialog[0].dispatchEvent(new CustomEvent(
79
- "DialogReady.Alchemy",
80
- bubbles: true
81
- detail:
82
- body: @dialog_body[0]
83
- ))
84
- if @options.ready?
85
- @options.ready(@dialog_body)
86
- @dialog_body.show()
87
- true
88
-
89
- # Adds a spinner into Dialog body
90
- show_spinner: ->
91
- @spinner = new Alchemy.Spinner('medium')
92
- @spinner.spin(@dialog_body[0])
93
-
94
- # Removes the spinner from Dialog body
95
- remove_spinner: ->
96
- @spinner.stop()
97
-
98
- # Initializes the Dialog body
99
- init: ->
100
- Alchemy.GUI.init(@dialog_body)
101
- @watch_remote_forms()
102
-
103
- # Watches ajax requests inside of dialog body and replaces the content accordingly
104
- watch_remote_forms: ->
105
- form = $('[data-remote="true"]', @dialog_body)
106
- form.bind "ajax:success", (event) =>
107
- xhr = event.detail[2]
108
- content_type = xhr.getResponseHeader('Content-Type')
109
- if content_type.match(/javascript/)
110
- return
111
- else
112
- @dialog_body.html(xhr.responseText)
113
- @init()
114
- return
115
- form.bind "ajax:error", (event, b, c) =>
116
- statusText = event.detail[1]
117
- xhr = event.detail[2]
118
- @show_error(xhr, statusText)
119
- return
120
-
121
- # Displays an error message
122
- show_error: (xhr, status_message, $container = @dialog_body) ->
123
- error_type = "warning"
124
- switch xhr.status
125
- when 0
126
- error_header = "The server does not respond."
127
- error_body = "Please check server and try again."
128
- when 403
129
- error_header = "You are not authorized!"
130
- error_body = "Please close this window."
131
- when 422
132
- @dialog_body.html(xhr.responseText)
133
- @init()
134
- return
135
- else
136
- error_type = "error"
137
- if status_message
138
- error_header = status_message
139
- console.error(xhr.responseText)
140
- else
141
- error_header = "#{xhr.statusText} (#{xhr.status})"
142
- error_body = "Please check log and try again."
143
- $errorDiv = $("<alchemy-message type=\"#{error_type}\">
144
- <h1>#{error_header}</h1>
145
- <p>#{error_body}</p>
146
- </alchemy-message>")
147
- $container.html $errorDiv
148
-
149
- # Binds close events on:
150
- # - Close button
151
- # - Overlay (if the Dialog is a modal)
152
- # - ESC Key
153
- bind_close_events: ->
154
- @close_button.on "click", =>
155
- @close()
156
- false
157
- @dialog_container.addClass('closable').on "click", (e) =>
158
- return true if e.target != @dialog_container.get(0)
159
- @close()
160
- false
161
- @$document.keydown (e) =>
162
- if e.which == 27
163
- @close()
164
- false
165
- else
166
- true
167
-
168
- # Builds the html structure of the Dialog
169
- build: ->
170
- @dialog_container = $('<div class="alchemy-dialog-container" />')
171
- @dialog = $('<div class="alchemy-dialog" />')
172
- @dialog_body = $('<div class="alchemy-dialog-body" />')
173
- @dialog_header = $('<div class="alchemy-dialog-header" />')
174
- @dialog_title = $('<div class="alchemy-dialog-title" />')
175
- @close_button = $('<a class="alchemy-dialog-close"><alchemy-icon name="close"></alchemy-icon></a>')
176
- @dialog_title.text(@options.title)
177
- @dialog_header.append(@dialog_title)
178
- @dialog_header.append(@close_button)
179
- @dialog.append(@dialog_header)
180
- @dialog.append(@dialog_body)
181
- @dialog_container.append(@dialog)
182
- @dialog.addClass('modal') if @options.modal
183
- @dialog_body.addClass('padded') if @options.padding
184
- if @options.modal
185
- @overlay = $('<div class="alchemy-dialog-overlay" />')
186
- @$body.append(@overlay)
187
- @$body.append(@dialog_container)
188
- @resize()
189
- @dialog
190
-
191
- # Sets the correct size of the dialog
192
- # It normalizes the given size, so that it never acceeds the window size.
193
- resize: ->
194
- padding = 16
195
- $doc_width = @$window.width()
196
- $doc_height = @$window.height()
197
- if @options.size == 'fullscreen'
198
- [@width, @height] = [$doc_width, $doc_height]
199
- if @width >= $doc_width
200
- @width = $doc_width - padding
201
- if @height >= $doc_height
202
- @height = $doc_height - padding - @DEFAULTS.header_height
203
- @dialog.css
204
- 'width': @width
205
- 'min-height': @height
206
- overflow: @options.overflow
207
- if @options.overflow == 'hidden'
208
- @dialog_body.css
209
- height: @height
210
- overflow: 'auto'
211
- else
212
- @dialog_body.css
213
- 'min-height': @height
214
- overflow: 'visible'
215
- return
216
-
217
- # Collection of all current dialog instances
218
- window.Alchemy.currentDialogs = []
219
-
220
- # Gets the last dialog instantiated, which is the current one.
221
- window.Alchemy.currentDialog = ->
222
- length = Alchemy.currentDialogs.length
223
- return if length == 0
224
- Alchemy.currentDialogs[length - 1]
225
-
226
- # Utility function to close the current Dialog
227
- #
228
- # You can pass a callback function, that gets triggered after the Dialog gets closed.
229
- #
230
- window.Alchemy.closeCurrentDialog = (callback) ->
231
- dialog = Alchemy.currentDialog()
232
- if dialog?
233
- dialog.options.closed = callback
234
- dialog.close()
235
-
236
- # Utility function to open a new Dialog
237
- window.Alchemy.openDialog = (url, options) ->
238
- if !url
239
- throw('No url given! Please provide an url.')
240
- dialog = new Alchemy.Dialog(url, options)
241
- dialog.open()
242
-
243
- # Watches elements for Alchemy Dialogs
244
- #
245
- # Links having a data-alchemy-confirm-delete
246
- # and input/buttons having a data-alchemy-confirm attribute get watched.
247
- #
248
- # You can pass a scope so that only elements inside this scope are queried.
249
- #
250
- # The href attribute of the link is the url for the overlay window.
251
- #
252
- # See Alchemy.Dialog for further options you can add to the data attribute
253
- #
254
- window.Alchemy.watchForDialogs = (scope = '#alchemy') ->
255
- $(scope).on 'click', '[data-alchemy-confirm-delete]', (event) ->
256
- $this = $(this)
257
- options = $this.data('alchemy-confirm-delete')
258
- Alchemy.confirmToDeleteDialog($this.attr('href'), options)
259
- event.preventDefault()
260
- return
261
- $(scope).on 'click', '[data-alchemy-confirm]', (event) ->
262
- options = $(this).data('alchemy-confirm')
263
- Alchemy.openConfirmDialog options.message, $.extend options,
264
- ok_label: options.ok_label
265
- cancel_label: options.cancel_label
266
- on_ok: =>
267
- Alchemy.pleaseWaitOverlay()
268
- @form.submit()
269
- return
270
- event.preventDefault()
271
- return