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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +67 -1
- data/Gemfile +10 -3
- data/README.md +2 -2
- data/Rakefile +2 -0
- 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/image_library.scss +40 -26
- data/app/assets/stylesheets/alchemy/admin/navigation.scss +9 -1
- 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/ingredients/link_view.rb +7 -1
- data/app/components/alchemy/ingredients/picture_view.rb +5 -2
- data/app/components/alchemy/ingredients/text_view.rb +4 -1
- data/app/components/concerns/alchemy/ingredients/link_target.rb +18 -0
- data/app/controllers/alchemy/admin/base_controller.rb +34 -5
- data/app/controllers/alchemy/admin/elements_controller.rb +2 -2
- data/app/controllers/alchemy/admin/languages_controller.rb +1 -1
- data/app/controllers/alchemy/admin/layoutpages_controller.rb +1 -0
- data/app/controllers/alchemy/admin/pages_controller.rb +6 -6
- data/app/controllers/alchemy/admin/resources_controller.rb +1 -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/_menubar.html.erb +1 -1
- 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/resource.rb +14 -4
- 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 +40 -94
- 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
|
|
@@ -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:
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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.
|
|
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,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.
|
|
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
|