alchemy_cms 7.3.6 → 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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +55 -6
- data/Gemfile +3 -3
- data/README.md +2 -2
- data/alchemy_cms.gemspec +1 -4
- data/app/assets/builds/alchemy/admin.css +9 -1
- data/app/assets/builds/alchemy/admin.css.map +1 -1
- data/app/assets/builds/alchemy/custom-properties.css +1 -1
- data/app/assets/builds/alchemy/custom-properties.css.map +1 -1
- data/app/assets/builds/alchemy/preview.min.js +1 -0
- data/app/assets/builds/alchemy/welcome.css +1 -1
- data/app/assets/builds/alchemy/welcome.css.map +1 -1
- data/app/assets/builds/tinymce/skins/content/alchemy/content.min.css +1 -1
- data/app/assets/builds/tinymce/skins/content/alchemy/content.min.css.map +1 -1
- data/app/assets/config/alchemy_manifest.js +0 -4
- data/app/assets/javascripts/alchemy/admin.js +8 -6
- data/app/assets/stylesheets/alchemy/admin/elements.scss +43 -7
- data/app/assets/stylesheets/alchemy/admin/forms.scss +4 -0
- data/app/assets/stylesheets/alchemy/admin/navigation.scss +8 -0
- data/app/assets/stylesheets/alchemy/admin/preview_window.scss +22 -17
- data/app/assets/stylesheets/alchemy/admin.scss +1 -1
- data/app/assets/stylesheets/alchemy/custom-properties.css +2 -1
- data/app/components/alchemy/admin/link_dialog/internal_tab.rb +1 -2
- data/app/controllers/alchemy/admin/base_controller.rb +8 -3
- data/app/controllers/alchemy/admin/elements_controller.rb +2 -2
- data/app/controllers/alchemy/admin/layoutpages_controller.rb +1 -0
- data/app/controllers/alchemy/admin/pages_controller.rb +5 -1
- data/app/controllers/alchemy/elements_controller.rb +3 -0
- data/app/helpers/alchemy/admin/form_helper.rb +1 -1
- data/app/helpers/alchemy/admin/navigation_helper.rb +22 -1
- data/app/javascript/alchemy_admin/components/action.js +2 -1
- data/app/javascript/alchemy_admin/components/dialog_link.js +3 -18
- data/app/javascript/alchemy_admin/components/element_editor.js +9 -0
- data/app/javascript/alchemy_admin/components/elements_window.js +34 -0
- data/app/javascript/alchemy_admin/components/elements_window_handle.js +65 -0
- data/app/javascript/alchemy_admin/components/icon.js +2 -2
- data/app/javascript/alchemy_admin/components/index.js +1 -0
- data/app/javascript/alchemy_admin/components/preview_window.js +5 -5
- data/app/javascript/alchemy_admin/components/uploader/file_upload.js +1 -1
- data/app/javascript/alchemy_admin/confirm_dialog.js +9 -11
- data/app/javascript/alchemy_admin/dialog.js +329 -0
- data/app/javascript/alchemy_admin/hotkeys.js +3 -2
- data/app/javascript/alchemy_admin/image_cropper.js +57 -40
- data/app/javascript/alchemy_admin/image_overlay.js +73 -0
- data/app/javascript/alchemy_admin/initializer.js +51 -2
- data/app/javascript/alchemy_admin/link_dialog.js +2 -1
- data/app/javascript/alchemy_admin/node_tree.js +3 -1
- data/app/javascript/alchemy_admin/page_sorter.js +1 -1
- data/app/javascript/alchemy_admin/picture_selector.js +2 -1
- data/app/javascript/alchemy_admin/shoelace_theme.js +2 -2
- data/app/javascript/alchemy_admin/templates/compiled.js +1 -0
- data/app/javascript/alchemy_admin.js +10 -6
- data/app/javascript/preview.js +117 -0
- data/app/models/alchemy/image_cropper_settings.rb +3 -4
- data/app/views/alchemy/_preview_mode_code.html.erb +1 -1
- data/app/views/alchemy/admin/crop.html.erb +19 -16
- data/app/views/alchemy/admin/dashboard/info.html.erb +1 -1
- data/app/views/alchemy/admin/elements/_add_nested_element_form.html.erb +9 -8
- data/app/views/alchemy/admin/elements/_clipboard_button.html.erb +14 -0
- data/app/views/alchemy/admin/elements/_element.html.erb +2 -0
- data/app/views/alchemy/admin/elements/_form.html.erb +15 -13
- data/app/views/alchemy/admin/elements/create.turbo_stream.erb +34 -0
- data/app/views/alchemy/admin/elements/index.html.erb +3 -15
- data/app/views/alchemy/admin/ingredients/_picture_fields.html.erb +1 -1
- data/app/views/alchemy/admin/layoutpages/edit.html.erb +7 -5
- data/app/views/alchemy/admin/nodes/_form.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_current_page.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_form.html.erb +43 -40
- data/app/views/alchemy/admin/pages/_locked_page.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_page_layout_filter.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_sitemap.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_table.html.erb +2 -2
- data/app/views/alchemy/admin/pages/edit.html.erb +1 -1
- data/app/views/alchemy/admin/pages/update.turbo_stream.erb +39 -0
- data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +3 -4
- data/app/views/alchemy/admin/pictures/_picture_description_field.html.erb +7 -5
- data/app/views/alchemy/admin/pictures/index.html.erb +13 -9
- data/app/views/alchemy/admin/resources/_filter_bar.html.erb +1 -1
- data/app/views/layouts/alchemy/admin.html.erb +8 -4
- data/bun.lockb +0 -0
- data/bundles/tinymce.js +2 -0
- data/config/alchemy/config.yml +3 -3
- data/config/alchemy/modules.yml +7 -6
- data/config/importmap.rb +4 -0
- data/config/routes.rb +1 -1
- data/lib/alchemy/engine.rb +6 -0
- data/lib/alchemy/modules.rb +0 -27
- data/lib/alchemy/test_support/having_picture_thumbnails_examples.rb +10 -10
- data/lib/alchemy/tinymce.rb +2 -1
- data/lib/alchemy/upgrader/seven_point_four.rb +26 -0
- data/lib/alchemy/version.rb +1 -1
- data/lib/alchemy.rb +14 -0
- data/lib/alchemy_cms.rb +0 -2
- data/lib/generators/alchemy/ingredient/ingredient_generator.rb +5 -0
- data/lib/generators/alchemy/ingredient/templates/view.html.erb +1 -1
- data/lib/generators/alchemy/ingredient/templates/view_component.rb.tt +10 -0
- data/lib/generators/alchemy/install/install_generator.rb +0 -1
- data/lib/generators/alchemy/install/templates/elements.yml.tt +1 -1
- data/lib/tasks/alchemy/upgrade.rake +19 -20
- data/rollup.config.mjs +44 -1
- data/vendor/javascript/cropperjs.min.js +10 -0
- data/vendor/javascript/handlebars.min.js +29 -0
- data/vendor/javascript/jquery.min.js +2 -0
- data/vendor/javascript/select2.min.js +23 -0
- data/vendor/javascript/tinymce.min.js +1 -1
- metadata +39 -92
- data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +0 -271
- data/app/assets/javascripts/alchemy/alchemy.image_overlay.coffee +0 -54
- data/app/assets/javascripts/alchemy/alchemy.preview.js.coffee +0 -97
- data/app/assets/javascripts/alchemy/preview.js +0 -1
- data/app/assets/javascripts/alchemy/templates/index.js +0 -2
- data/app/javascript/alchemy_admin/gui.js +0 -12
- data/app/views/alchemy/admin/elements/create.js.erb +0 -35
- data/app/views/alchemy/admin/pages/update.js.erb +0 -43
- data/lib/alchemy/upgrader/seven_point_zero.rb +0 -36
- data/vendor/assets/images/Jcrop.gif +0 -0
- data/vendor/assets/javascripts/jquery_plugins/jquery.Jcrop.min.js +0 -7
- data/vendor/assets/javascripts/jquery_plugins/select2.js +0 -3729
- data/vendor/assets/stylesheets/jquery.Jcrop.min.css +0 -2
- data/vendor/assets/stylesheets/tinymce/skins/content/default/content.min.css +0 -1
- /data/app/{assets/javascripts/alchemy → javascript/alchemy_admin}/templates/node_folder.hbs +0 -0
- /data/app/{assets/javascripts/alchemy → javascript/alchemy_admin}/templates/page_folder.hbs +0 -0
- /data/app/{assets/javascripts/tinymce/icons/remixicons/icons.js → javascript/tinymce/icons/remixicons/index.js} +0 -0
- /data/app/{assets/javascripts/tinymce/plugins/alchemy_link/plugin.min.js → javascript/tinymce/plugins/alchemy_link/index.js} +0 -0
- /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.
|
4
|
+
version: 7.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas von Deyen
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
- Martin Meyerhoff
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2025-
|
15
|
+
date: 2025-02-07 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: actionmailer
|
@@ -23,7 +23,7 @@ dependencies:
|
|
23
23
|
version: '7.0'
|
24
24
|
- - "<"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '8.1'
|
27
27
|
type: :runtime
|
28
28
|
prerelease: false
|
29
29
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
version: '7.0'
|
34
34
|
- - "<"
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: '
|
36
|
+
version: '8.1'
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: actionpack
|
39
39
|
requirement: !ruby/object:Gem::Requirement
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '7.0'
|
44
44
|
- - "<"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
46
|
+
version: '8.1'
|
47
47
|
type: :runtime
|
48
48
|
prerelease: false
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
version: '7.0'
|
54
54
|
- - "<"
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: '
|
56
|
+
version: '8.1'
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
58
|
name: actionview
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
@@ -63,7 +63,7 @@ dependencies:
|
|
63
63
|
version: '7.0'
|
64
64
|
- - "<"
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version: '
|
66
|
+
version: '8.1'
|
67
67
|
type: :runtime
|
68
68
|
prerelease: false
|
69
69
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -73,7 +73,7 @@ dependencies:
|
|
73
73
|
version: '7.0'
|
74
74
|
- - "<"
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: '
|
76
|
+
version: '8.1'
|
77
77
|
- !ruby/object:Gem::Dependency
|
78
78
|
name: activejob
|
79
79
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,7 +83,7 @@ dependencies:
|
|
83
83
|
version: '7.0'
|
84
84
|
- - "<"
|
85
85
|
- !ruby/object:Gem::Version
|
86
|
-
version: '
|
86
|
+
version: '8.1'
|
87
87
|
type: :runtime
|
88
88
|
prerelease: false
|
89
89
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -93,7 +93,7 @@ dependencies:
|
|
93
93
|
version: '7.0'
|
94
94
|
- - "<"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '8.1'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: activemodel
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -103,7 +103,7 @@ dependencies:
|
|
103
103
|
version: '7.0'
|
104
104
|
- - "<"
|
105
105
|
- !ruby/object:Gem::Version
|
106
|
-
version: '
|
106
|
+
version: '8.1'
|
107
107
|
type: :runtime
|
108
108
|
prerelease: false
|
109
109
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -113,7 +113,7 @@ dependencies:
|
|
113
113
|
version: '7.0'
|
114
114
|
- - "<"
|
115
115
|
- !ruby/object:Gem::Version
|
116
|
-
version: '
|
116
|
+
version: '8.1'
|
117
117
|
- !ruby/object:Gem::Dependency
|
118
118
|
name: activerecord
|
119
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -123,7 +123,7 @@ dependencies:
|
|
123
123
|
version: '7.0'
|
124
124
|
- - "<"
|
125
125
|
- !ruby/object:Gem::Version
|
126
|
-
version: '
|
126
|
+
version: '8.1'
|
127
127
|
type: :runtime
|
128
128
|
prerelease: false
|
129
129
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -133,7 +133,7 @@ dependencies:
|
|
133
133
|
version: '7.0'
|
134
134
|
- - "<"
|
135
135
|
- !ruby/object:Gem::Version
|
136
|
-
version: '
|
136
|
+
version: '8.1'
|
137
137
|
- !ruby/object:Gem::Dependency
|
138
138
|
name: activesupport
|
139
139
|
requirement: !ruby/object:Gem::Requirement
|
@@ -143,7 +143,7 @@ dependencies:
|
|
143
143
|
version: '7.0'
|
144
144
|
- - "<"
|
145
145
|
- !ruby/object:Gem::Version
|
146
|
-
version: '
|
146
|
+
version: '8.1'
|
147
147
|
type: :runtime
|
148
148
|
prerelease: false
|
149
149
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -153,7 +153,7 @@ dependencies:
|
|
153
153
|
version: '7.0'
|
154
154
|
- - "<"
|
155
155
|
- !ruby/object:Gem::Version
|
156
|
-
version: '
|
156
|
+
version: '8.1'
|
157
157
|
- !ruby/object:Gem::Dependency
|
158
158
|
name: railties
|
159
159
|
requirement: !ruby/object:Gem::Requirement
|
@@ -163,7 +163,7 @@ dependencies:
|
|
163
163
|
version: '7.0'
|
164
164
|
- - "<"
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
-
version: '
|
166
|
+
version: '8.1'
|
167
167
|
type: :runtime
|
168
168
|
prerelease: false
|
169
169
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -173,7 +173,7 @@ dependencies:
|
|
173
173
|
version: '7.0'
|
174
174
|
- - "<"
|
175
175
|
- !ruby/object:Gem::Version
|
176
|
-
version: '
|
176
|
+
version: '8.1'
|
177
177
|
- !ruby/object:Gem::Dependency
|
178
178
|
name: active_model_serializers
|
179
179
|
requirement: !ruby/object:Gem::Requirement
|
@@ -248,26 +248,6 @@ dependencies:
|
|
248
248
|
- - "<"
|
249
249
|
- !ruby/object:Gem::Version
|
250
250
|
version: '4.0'
|
251
|
-
- !ruby/object:Gem::Dependency
|
252
|
-
name: coffee-rails
|
253
|
-
requirement: !ruby/object:Gem::Requirement
|
254
|
-
requirements:
|
255
|
-
- - ">="
|
256
|
-
- !ruby/object:Gem::Version
|
257
|
-
version: '4.0'
|
258
|
-
- - "<"
|
259
|
-
- !ruby/object:Gem::Version
|
260
|
-
version: '6.0'
|
261
|
-
type: :runtime
|
262
|
-
prerelease: false
|
263
|
-
version_requirements: !ruby/object:Gem::Requirement
|
264
|
-
requirements:
|
265
|
-
- - ">="
|
266
|
-
- !ruby/object:Gem::Version
|
267
|
-
version: '4.0'
|
268
|
-
- - "<"
|
269
|
-
- !ruby/object:Gem::Version
|
270
|
-
version: '6.0'
|
271
251
|
- !ruby/object:Gem::Dependency
|
272
252
|
name: csv
|
273
253
|
requirement: !ruby/object:Gem::Requirement
|
@@ -330,20 +310,6 @@ dependencies:
|
|
330
310
|
- - ">="
|
331
311
|
- !ruby/object:Gem::Version
|
332
312
|
version: 2.2.1
|
333
|
-
- !ruby/object:Gem::Dependency
|
334
|
-
name: handlebars_assets
|
335
|
-
requirement: !ruby/object:Gem::Requirement
|
336
|
-
requirements:
|
337
|
-
- - "~>"
|
338
|
-
- !ruby/object:Gem::Version
|
339
|
-
version: '0.23'
|
340
|
-
type: :runtime
|
341
|
-
prerelease: false
|
342
|
-
version_requirements: !ruby/object:Gem::Requirement
|
343
|
-
requirements:
|
344
|
-
- - "~>"
|
345
|
-
- !ruby/object:Gem::Version
|
346
|
-
version: '0.23'
|
347
313
|
- !ruby/object:Gem::Dependency
|
348
314
|
name: importmap-rails
|
349
315
|
requirement: !ruby/object:Gem::Requirement
|
@@ -364,26 +330,6 @@ dependencies:
|
|
364
330
|
- - ">="
|
365
331
|
- !ruby/object:Gem::Version
|
366
332
|
version: 1.2.1
|
367
|
-
- !ruby/object:Gem::Dependency
|
368
|
-
name: jquery-rails
|
369
|
-
requirement: !ruby/object:Gem::Requirement
|
370
|
-
requirements:
|
371
|
-
- - "~>"
|
372
|
-
- !ruby/object:Gem::Version
|
373
|
-
version: '4.0'
|
374
|
-
- - ">="
|
375
|
-
- !ruby/object:Gem::Version
|
376
|
-
version: 4.0.4
|
377
|
-
type: :runtime
|
378
|
-
prerelease: false
|
379
|
-
version_requirements: !ruby/object:Gem::Requirement
|
380
|
-
requirements:
|
381
|
-
- - "~>"
|
382
|
-
- !ruby/object:Gem::Version
|
383
|
-
version: '4.0'
|
384
|
-
- - ">="
|
385
|
-
- !ruby/object:Gem::Version
|
386
|
-
version: 4.0.4
|
387
333
|
- !ruby/object:Gem::Dependency
|
388
334
|
name: kaminari
|
389
335
|
requirement: !ruby/object:Gem::Requirement
|
@@ -712,6 +658,7 @@ files:
|
|
712
658
|
- app/assets/builds/alchemy/admin/print.css.map
|
713
659
|
- app/assets/builds/alchemy/custom-properties.css
|
714
660
|
- app/assets/builds/alchemy/custom-properties.css.map
|
661
|
+
- app/assets/builds/alchemy/preview.min.js
|
715
662
|
- app/assets/builds/alchemy/welcome.css
|
716
663
|
- app/assets/builds/alchemy/welcome.css.map
|
717
664
|
- app/assets/builds/tinymce/skins/content/alchemy/content.min.css
|
@@ -726,15 +673,6 @@ files:
|
|
726
673
|
- app/assets/images/alchemy/icon.svg
|
727
674
|
- app/assets/images/alchemy/missing-image.svg
|
728
675
|
- app/assets/javascripts/alchemy/admin.js
|
729
|
-
- app/assets/javascripts/alchemy/alchemy.dialog.js.coffee
|
730
|
-
- app/assets/javascripts/alchemy/alchemy.image_overlay.coffee
|
731
|
-
- app/assets/javascripts/alchemy/alchemy.preview.js.coffee
|
732
|
-
- app/assets/javascripts/alchemy/preview.js
|
733
|
-
- app/assets/javascripts/alchemy/templates/index.js
|
734
|
-
- app/assets/javascripts/alchemy/templates/node_folder.hbs
|
735
|
-
- app/assets/javascripts/alchemy/templates/page_folder.hbs
|
736
|
-
- app/assets/javascripts/tinymce/icons/remixicons/icons.js
|
737
|
-
- app/assets/javascripts/tinymce/plugins/alchemy_link/plugin.min.js
|
738
676
|
- app/assets/stylesheets/alchemy/_defaults.scss
|
739
677
|
- app/assets/stylesheets/alchemy/_deprecated_variables.scss
|
740
678
|
- app/assets/stylesheets/alchemy/_deprecation.scss
|
@@ -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.
|
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.
|
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/
|
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,7 +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.6.
|
1409
|
+
rubygems_version: 3.6.3
|
1463
1410
|
specification_version: 4
|
1464
1411
|
summary: A powerful, userfriendly and flexible CMS for Rails
|
1465
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
|
@@ -1,54 +0,0 @@
|
|
1
|
-
class window.Alchemy.ImageOverlay extends Alchemy.Dialog
|
2
|
-
|
3
|
-
constructor: (url) ->
|
4
|
-
super(url, @options)
|
5
|
-
return
|
6
|
-
|
7
|
-
init: ->
|
8
|
-
Alchemy.ImageLoader(@dialog_body[0])
|
9
|
-
$('.zoomed-picture-background').on "click", (e) =>
|
10
|
-
e.stopPropagation()
|
11
|
-
return if e.target.nodeName == 'IMG'
|
12
|
-
@close()
|
13
|
-
false
|
14
|
-
$('.picture-overlay-handle').on "click", (e) =>
|
15
|
-
@dialog.toggleClass('hide-form')
|
16
|
-
false
|
17
|
-
@$previous = $('.previous-picture')
|
18
|
-
@$next = $('.next-picture')
|
19
|
-
@$document.keydown (e) =>
|
20
|
-
if e.target.nodeName == 'INPUT' || e.target.nodeName == 'TEXTAREA'
|
21
|
-
return true
|
22
|
-
switch e.which
|
23
|
-
when 37
|
24
|
-
@previous()
|
25
|
-
false
|
26
|
-
when 39
|
27
|
-
@next()
|
28
|
-
false
|
29
|
-
else
|
30
|
-
true
|
31
|
-
super()
|
32
|
-
|
33
|
-
previous: ->
|
34
|
-
@$previous[0]?.click()
|
35
|
-
return
|
36
|
-
|
37
|
-
next: ->
|
38
|
-
@$next[0]?.click()
|
39
|
-
return
|
40
|
-
|
41
|
-
build: ->
|
42
|
-
@dialog_container = $('<div class="alchemy-image-overlay-container" />')
|
43
|
-
@dialog = $('<div class="alchemy-image-overlay-dialog" />')
|
44
|
-
@dialog_body = $('<div class="alchemy-image-overlay-body" />')
|
45
|
-
@close_button = $('<a class="alchemy-image-overlay-close">
|
46
|
-
<alchemy-icon name="close" size="xl"></alchemy-icon>
|
47
|
-
</a>')
|
48
|
-
@dialog.append(@close_button)
|
49
|
-
@dialog.append(@dialog_body)
|
50
|
-
@dialog_container.append(@dialog)
|
51
|
-
@overlay = $('<div class="alchemy-image-overlay" />')
|
52
|
-
@$body.append(@overlay)
|
53
|
-
@$body.append(@dialog_container)
|
54
|
-
@dialog
|