alchemy_cms 7.3.4 → 7.4.0

Sign up to get free protection for your applications and to get access to all the features.
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