alchemy_cms 6.0.14 → 6.1.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.
Potentially problematic release.
This version of alchemy_cms might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +0 -3
- data/.github/workflows/stale.yml +2 -0
- data/CHANGELOG.md +34 -5
- data/Gemfile +2 -2
- data/alchemy_cms.gemspec +2 -1
- data/app/assets/javascripts/alchemy/alchemy.link_dialog.js.coffee +13 -11
- data/app/assets/stylesheets/alchemy/_variables.scss +9 -4
- data/app/assets/stylesheets/alchemy/elements.scss +96 -4
- data/app/assets/stylesheets/alchemy/forms.scss +59 -17
- data/app/assets/stylesheets/tinymce/skins/alchemy/content.min.css.scss +3 -3
- data/app/controllers/alchemy/admin/ingredients_controller.rb +1 -1
- data/app/controllers/alchemy/admin/pages_controller.rb +3 -3
- data/app/controllers/alchemy/api/ingredients_controller.rb +22 -0
- data/app/controllers/alchemy/messages_controller.rb +1 -1
- data/app/controllers/alchemy/pages_controller.rb +19 -5
- data/app/decorators/alchemy/ingredient_editor.rb +4 -0
- data/app/helpers/alchemy/elements_helper.rb +0 -8
- data/app/helpers/alchemy/url_helper.rb +0 -8
- data/app/models/alchemy/element/definitions.rb +16 -2
- data/app/models/alchemy/element/dom_id.rb +30 -0
- data/app/models/alchemy/element/presenters.rb +1 -1
- data/app/models/alchemy/element.rb +12 -3
- data/app/models/alchemy/ingredients/headline.rb +4 -1
- data/app/models/alchemy/ingredients/text.rb +3 -0
- data/app/models/alchemy/page/page_layouts.rb +128 -0
- data/app/models/alchemy/page.rb +4 -2
- data/app/models/alchemy/picture_thumb/create.rb +1 -1
- data/app/models/concerns/alchemy/dom_ids.rb +32 -0
- data/app/serializers/alchemy/ingredient_serializer.rb +11 -0
- data/app/views/alchemy/admin/elements/update.js.erb +3 -0
- data/app/views/alchemy/admin/ingredients/_dom_id_fields.html.erb +4 -0
- data/app/views/alchemy/admin/ingredients/_headline_fields.html.erb +3 -0
- data/app/views/alchemy/admin/ingredients/_text_fields.html.erb +3 -0
- data/app/views/alchemy/admin/ingredients/update.js.erb +7 -0
- data/app/views/alchemy/admin/languages/_form.html.erb +1 -1
- data/app/views/alchemy/admin/languages/_language.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_page_layout_filter.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_routes.html.erb +2 -1
- data/app/views/alchemy/ingredients/_headline_editor.html.erb +22 -20
- data/app/views/alchemy/ingredients/_headline_view.html.erb +1 -0
- data/app/views/alchemy/ingredients/_text_editor.html.erb +3 -0
- data/app/views/alchemy/ingredients/_text_view.html.erb +7 -3
- data/app/views/alchemy/ingredients/shared/_anchor.html.erb +9 -0
- data/app/views/alchemy/messages_mailer/contact_form_mail.de.text.erb +2 -0
- data/app/views/alchemy/messages_mailer/contact_form_mail.en.text.erb +2 -0
- data/app/views/alchemy/messages_mailer/contact_form_mail.es.text.erb +2 -0
- data/config/locales/alchemy.en.yml +5 -2
- data/config/routes.rb +1 -0
- data/lib/alchemy/error_tracking/error_logger.rb +13 -0
- data/lib/alchemy/error_tracking.rb +3 -1
- data/lib/alchemy/install/tasks.rb +1 -7
- data/lib/alchemy/page_layout.rb +0 -113
- data/lib/alchemy/test_support/shared_dom_ids_examples.rb +119 -0
- data/lib/alchemy/upgrader/tasks/add_page_versions.rb +2 -2
- data/lib/alchemy/upgrader/tasks/ingredients_migrator.rb +7 -5
- data/lib/alchemy/version.rb +1 -1
- data/lib/alchemy.rb +4 -0
- data/lib/alchemy_cms.rb +1 -1
- data/lib/generators/alchemy/elements/templates/view.html.erb +1 -1
- data/lib/generators/alchemy/elements/templates/view.html.haml +1 -1
- data/lib/generators/alchemy/elements/templates/view.html.slim +1 -1
- data/lib/tasks/alchemy/thumbnails.rake +1 -1
- data/package/admin.js +2 -0
- data/package/src/ingredient_anchor_link.js +17 -0
- data/package.json +2 -2
- data/vendor/assets/javascripts/tinymce/tinymce.min.js +2 -2
- metadata +32 -6
- data/lib/non_stupid_digest_assets.rb +0 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d85d573a2ae43f5152d2ae9082b0548f6cd4611b51f73aee187d796a037fb55e
|
4
|
+
data.tar.gz: 4d30a22cd1c6945e1fe51fdb68c94d716b623d297c6750643518bb291041fb1a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a2381b9af6f92c97955d9415f6d79160cd6940edfa01be10c28ddf7e1166416216e009d903ebf680fc6d788edb6b60f1019f6cbfdc252c1cc8b7829c49369607
|
7
|
+
data.tar.gz: 19a66a2d66bf5d34020a3e59a440baeb7d305dde3bc9681eb609cfef7862b58b7628b258683185f0b3fdb49d3abc89d3a0a4b1b40e4a7480129ca93f09980845
|
data/.github/workflows/ci.yml
CHANGED
@@ -82,9 +82,6 @@ jobs:
|
|
82
82
|
sudo apt update -qq
|
83
83
|
sudo apt install -qq --fix-missing libmysqlclient-dev -o dir::cache::archives="/home/runner/apt/cache"
|
84
84
|
sudo chown -R runner /home/runner/apt/cache
|
85
|
-
- uses: actions/setup-node@v3
|
86
|
-
with:
|
87
|
-
node-version: 16
|
88
85
|
- name: Restore node modules cache
|
89
86
|
id: yarn-cache
|
90
87
|
uses: actions/cache@v2.1.3
|
data/.github/workflows/stale.yml
CHANGED
@@ -12,6 +12,8 @@ jobs:
|
|
12
12
|
- uses: actions/stale@v5
|
13
13
|
with:
|
14
14
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
15
|
+
days-before-issue-stale: 180
|
16
|
+
days-before-close: 30
|
15
17
|
stale-issue-message: |
|
16
18
|
This issue has not seen any activity in a long time.
|
17
19
|
Please create a pull request with a fix or ask someone of the community if they can help.
|
data/CHANGELOG.md
CHANGED
@@ -1,13 +1,42 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
## 6.0
|
3
|
+
## 6.1.0 (2023-01-19)
|
4
4
|
|
5
|
-
|
5
|
+
### Features
|
6
|
+
|
7
|
+
- Add page layouts repository class option [#2410](https://github.com/AlchemyCMS/alchemy_cms/pull/2410) ([tvdeyen](https://github.com/tvdeyen))
|
8
|
+
- Add element definitions repository class option [#2409](https://github.com/AlchemyCMS/alchemy_cms/pull/2409) ([tvdeyen](https://github.com/tvdeyen))
|
9
|
+
- Allow to set preview_sources [#2407](https://github.com/AlchemyCMS/alchemy_cms/pull/2407) ([tvdeyen](https://github.com/tvdeyen))
|
10
|
+
- Allow to add anchors to ingredients [#2395](https://github.com/AlchemyCMS/alchemy_cms/pull/2395) ([tvdeyen](https://github.com/tvdeyen))
|
11
|
+
- Add a error logger exception handler [#2387](https://github.com/AlchemyCMS/alchemy_cms/pull/2387) ([tvdeyen](https://github.com/tvdeyen))
|
12
|
+
- Add a element DOM id class [#2373](https://github.com/AlchemyCMS/alchemy_cms/pull/2373) ([tvdeyen](https://github.com/tvdeyen))
|
13
|
+
|
14
|
+
### Changes
|
15
|
+
|
16
|
+
- Remove old jasmine based javascript specs [#2400](https://github.com/AlchemyCMS/alchemy_cms/pull/2400) ([tvdeyen](https://github.com/tvdeyen))
|
17
|
+
- Update bundled Tinymce to 4.9.11 [#2399](https://github.com/AlchemyCMS/alchemy_cms/pull/2399) ([tvdeyen](https://github.com/tvdeyen))
|
18
|
+
- Add Headline size and level selects as input addons [#2398](https://github.com/AlchemyCMS/alchemy_cms/pull/2398) ([tvdeyen](https://github.com/tvdeyen))
|
19
|
+
- Remove Element.available scope [#2372](https://github.com/AlchemyCMS/alchemy_cms/pull/2372) ([tvdeyen](https://github.com/tvdeyen))
|
20
|
+
- Remove element_dom_id helper [#2369](https://github.com/AlchemyCMS/alchemy_cms/pull/2369) ([tvdeyen](https://github.com/tvdeyen))
|
21
|
+
- Use position for element dom_id [#2368](https://github.com/AlchemyCMS/alchemy_cms/pull/2368) ([tvdeyen](https://github.com/tvdeyen))
|
22
|
+
- Disallow deleting pages if still attached to menu node [#2338](https://github.com/AlchemyCMS/alchemy_cms/pull/2338) ([afdev82](https://github.com/afdev82))
|
6
23
|
|
7
|
-
|
24
|
+
### Fixes
|
25
|
+
|
26
|
+
- Add `:contact_form_id` to `messages` params in `messages_controller` [#2403](https://github.com/AlchemyCMS/alchemy_cms/pull/2403) ([chiperific](https://github.com/chiperific))
|
27
|
+
- Do not create thumbs for invalid pictures [#2386](https://github.com/AlchemyCMS/alchemy_cms/pull/2386) ([tvdeyen](https://github.com/tvdeyen))
|
28
|
+
|
29
|
+
### Misc
|
8
30
|
|
9
|
-
-
|
10
|
-
-
|
31
|
+
- [ruby - main] Upgrade sqlite3 to version 1.6.0 [#2408](https://github.com/AlchemyCMS/alchemy_cms/pull/2408) ([depfu](https://github.com/apps/depfu))
|
32
|
+
- [ruby - main] Upgrade puma to version 6.0.1 [#2404](https://github.com/AlchemyCMS/alchemy_cms/pull/2404) ([depfu](https://github.com/apps/depfu))
|
33
|
+
- CI: Update brakeman scan [#2390](https://github.com/AlchemyCMS/alchemy_cms/pull/2390) ([tvdeyen](https://github.com/tvdeyen))
|
34
|
+
- [ruby - main] Upgrade net-imap to version 0.3.1 [#2379](https://github.com/AlchemyCMS/alchemy_cms/pull/2379) ([depfu](https://github.com/apps/depfu))
|
35
|
+
- CI: Try ubuntu-latest [#2378](https://github.com/AlchemyCMS/alchemy_cms/pull/2378) ([tvdeyen](https://github.com/tvdeyen))
|
36
|
+
- [ruby - main] Upgrade sqlite3 to version 1.5.0 [#2374](https://github.com/AlchemyCMS/alchemy_cms/pull/2374) ([depfu](https://github.com/apps/depfu))
|
37
|
+
- [js] Upgrade babel-jest to version 29.0.1 [#2362](https://github.com/AlchemyCMS/alchemy_cms/pull/2362) ([depfu](https://github.com/apps/depfu))
|
38
|
+
- Use released Rails gems again for local testing [#2355](https://github.com/AlchemyCMS/alchemy_cms/pull/2355) ([tvdeyen](https://github.com/tvdeyen))
|
39
|
+
- [js] Upgrade babel-jest to version 28.0.2 [#2324](https://github.com/AlchemyCMS/alchemy_cms/pull/2324) ([depfu](https://github.com/apps/depfu))
|
11
40
|
|
12
41
|
## 6.0.12 (2022-11-19)
|
13
42
|
|
data/Gemfile
CHANGED
@@ -7,7 +7,7 @@ rails_version = ENV.fetch("RAILS_VERSION", 7.0).to_f
|
|
7
7
|
gem "rails", "~> #{rails_version}.0"
|
8
8
|
|
9
9
|
if ENV["DB"].nil? || ENV["DB"] == "sqlite"
|
10
|
-
gem "sqlite3", "~> 1.
|
10
|
+
gem "sqlite3", "~> 1.6.0"
|
11
11
|
end
|
12
12
|
if ENV["DB"] == "mysql" || ENV["DB"] == "mariadb"
|
13
13
|
gem "mysql2", "~> 0.5.1"
|
@@ -50,7 +50,7 @@ if Gem.ruby_version >= Gem::Version.new("3.1.0")
|
|
50
50
|
if rails_version.to_s.match?(/6.1/)
|
51
51
|
# Rails 6.1 needs this as well
|
52
52
|
gem "net-pop", "~> 0.1.0", require: false
|
53
|
-
gem "net-imap", "~> 0.
|
53
|
+
gem "net-imap", "~> 0.3.1", require: false
|
54
54
|
end
|
55
55
|
gem "net-smtp", "~> 0.3.0", require: false
|
56
56
|
end
|
data/alchemy_cms.gemspec
CHANGED
@@ -45,6 +45,7 @@ Gem::Specification.new do |gem|
|
|
45
45
|
gem.add_runtime_dependency "jquery-ui-rails", ["~> 6.0"]
|
46
46
|
gem.add_runtime_dependency "kaminari", ["~> 1.1"]
|
47
47
|
gem.add_runtime_dependency "originator", ["~> 3.1"]
|
48
|
+
gem.add_runtime_dependency "non-stupid-digest-assets", ["~> 1.0.8"]
|
48
49
|
gem.add_runtime_dependency "ransack", [">= 1.8", "< 4.0"]
|
49
50
|
gem.add_runtime_dependency "request_store", ["~> 1.2"]
|
50
51
|
gem.add_runtime_dependency "responders", [">= 2.0", "< 4.0"]
|
@@ -57,7 +58,7 @@ Gem::Specification.new do |gem|
|
|
57
58
|
gem.add_development_dependency "capybara", ["~> 3.0"]
|
58
59
|
gem.add_development_dependency "capybara-screenshot", ["~> 1.0"]
|
59
60
|
gem.add_development_dependency "factory_bot_rails", ["~> 6.0"]
|
60
|
-
gem.add_development_dependency "puma", ["~>
|
61
|
+
gem.add_development_dependency "puma", ["~> 6.0"]
|
61
62
|
gem.add_development_dependency "rails-controller-testing", ["~> 1.0"]
|
62
63
|
gem.add_development_dependency "rspec-activemodel-mocks", ["~> 1.0"]
|
63
64
|
gem.add_development_dependency "rspec-rails", [">= 4.0.0.beta2"]
|
@@ -100,7 +100,7 @@ class window.Alchemy.LinkDialog extends Alchemy.Dialog
|
|
100
100
|
(data) =>
|
101
101
|
page = data.pages[0]
|
102
102
|
if page
|
103
|
-
@
|
103
|
+
@initDomIdSelect(page.id)
|
104
104
|
callback
|
105
105
|
id: page.url_path
|
106
106
|
name: page.name
|
@@ -116,16 +116,19 @@ class window.Alchemy.LinkDialog extends Alchemy.Dialog
|
|
116
116
|
@$element_anchor.select2('destroy').prop('disabled', true)
|
117
117
|
else
|
118
118
|
@$element_anchor.val('')
|
119
|
-
@
|
119
|
+
@initDomIdSelect(event.added.page_id)
|
120
120
|
|
121
|
-
# Initializes the select2 based
|
121
|
+
# Initializes the select2 based dom id select
|
122
122
|
# reveals after a page has been selected
|
123
|
-
|
124
|
-
$.get Alchemy.routes.
|
123
|
+
initDomIdSelect: (page_id) ->
|
124
|
+
$.get Alchemy.routes.api_ingredients_path, page_id: page_id, (data) =>
|
125
|
+
dom_ids = data.ingredients.filter (ingredient) ->
|
126
|
+
ingredient.data?.dom_id
|
127
|
+
.map (ingredient) ->
|
128
|
+
id: ingredient.data.dom_id
|
129
|
+
text: "##{ingredient.data.dom_id}"
|
125
130
|
@$element_anchor.prop('disabled', false).removeAttr('placeholder').select2
|
126
|
-
data: [ id: '', text: Alchemy.t('None') ].concat
|
127
|
-
id: element.dom_id
|
128
|
-
text: element.display_name
|
131
|
+
data: [ id: '', text: Alchemy.t('None') ].concat(dom_ids)
|
129
132
|
|
130
133
|
# Creates a link if no validation errors are present.
|
131
134
|
# Otherwise shows an error notice.
|
@@ -238,11 +241,10 @@ class window.Alchemy.LinkDialog extends Alchemy.Dialog
|
|
238
241
|
# Populates the internal anchors select
|
239
242
|
initAnchorLinks: ->
|
240
243
|
frame = document.getElementById('alchemy_preview_window')
|
241
|
-
elements = frame.contentDocument?.
|
244
|
+
elements = frame.contentDocument?.querySelectorAll('[id]') || []
|
242
245
|
if elements.length > 0
|
243
246
|
for element in elements
|
244
|
-
|
245
|
-
@$anchor_link.append("<option value='##{element.id}'>##{element.id}</option>")
|
247
|
+
@$anchor_link.append("<option value='##{element.id}'>##{element.id}</option>")
|
246
248
|
else
|
247
249
|
@$anchor_link.html("<option>#{Alchemy.t('No anchors found')}</option>")
|
248
250
|
return
|
@@ -21,8 +21,10 @@ $anchor-color: $very-dark-orange !default;
|
|
21
21
|
|
22
22
|
$body-background-color: $light-gray !default;
|
23
23
|
|
24
|
-
$default-font-family: "Open Sans", "Lucida Grande", "Lucida Sans Unicode",
|
25
|
-
|
24
|
+
$default-font-family: "Open Sans", "Lucida Grande", "Lucida Sans Unicode",
|
25
|
+
"Lucida Sans", Verdana, Tahoma, sans-serif !default;
|
26
|
+
$mono-font-family: Menlo, Monaco, "Bitstream Vera Sans Mono", "Lucida Console",
|
27
|
+
Terminal, monospace !default;
|
26
28
|
$base-font-size: 12px !default;
|
27
29
|
$default-font-size: 1em !default;
|
28
30
|
$small-font-size: 0.9em !default;
|
@@ -44,15 +46,18 @@ $default-border-color: rgba(#afafaf, 0.5) !default;
|
|
44
46
|
$border-inset-color: lighten($default-border-color, 10%) !default;
|
45
47
|
$default-border-width: 1px !default;
|
46
48
|
$default-border-style: solid !default;
|
47
|
-
$default-border: $default-border-width $default-border-style
|
49
|
+
$default-border: $default-border-width $default-border-style
|
50
|
+
$default-border-color !default;
|
48
51
|
$default-border-radius: 3px !default;
|
49
52
|
|
50
53
|
$form-field-margin: $default-margin 0 !default;
|
51
54
|
$form-field-height: 31px !default;
|
55
|
+
$form-field-addon-width: 30px !default;
|
52
56
|
$form-field-background-color: $white !default;
|
53
57
|
$form-field-border-width: $default-border-width !default;
|
54
58
|
$form-field-border-style: $default-border-style !default;
|
55
|
-
$form-field-border-color: $default-border-color $default-border-color
|
59
|
+
$form-field-border-color: $default-border-color $default-border-color
|
60
|
+
$border-inset-color $border-inset-color !default;
|
56
61
|
$form-field-box-shadow: inset 0px 0 1px $medium-gray !default;
|
57
62
|
$form-field-padding: 0.6em 0.75em !default;
|
58
63
|
$form-field-font-size: $default-font-size !default;
|
@@ -487,7 +487,7 @@
|
|
487
487
|
$focus-border-color: $focus-color,
|
488
488
|
$focus-box-shadow: 0 0 0 2px $focus-color
|
489
489
|
);
|
490
|
-
width:
|
490
|
+
width: $form-field-addon-width;
|
491
491
|
height: $form-field-height;
|
492
492
|
|
493
493
|
&.disabled,
|
@@ -601,6 +601,44 @@
|
|
601
601
|
}
|
602
602
|
}
|
603
603
|
|
604
|
+
.ingredient-editor.headline {
|
605
|
+
&.with-level-select {
|
606
|
+
input[type="text"] {
|
607
|
+
padding-right: $form-field-addon-width + 2 * $default-padding;
|
608
|
+
}
|
609
|
+
|
610
|
+
&.with-anchor {
|
611
|
+
input[type="text"] {
|
612
|
+
padding-right: 22px + $form-field-addon-width + $default-padding;
|
613
|
+
}
|
614
|
+
}
|
615
|
+
}
|
616
|
+
|
617
|
+
&.with-size-select {
|
618
|
+
input[type="text"] {
|
619
|
+
padding-right: $form-field-addon-width + 2 * $default-padding;
|
620
|
+
}
|
621
|
+
|
622
|
+
&.with-anchor {
|
623
|
+
input[type="text"] {
|
624
|
+
padding-right: 22px + $form-field-addon-width + $default-padding;
|
625
|
+
}
|
626
|
+
}
|
627
|
+
|
628
|
+
&.with-level-select {
|
629
|
+
input[type="text"] {
|
630
|
+
padding-right: 2 * ($form-field-addon-width + $default-padding);
|
631
|
+
}
|
632
|
+
|
633
|
+
&.with-anchor {
|
634
|
+
input[type="text"] {
|
635
|
+
padding-right: 16px + 2 * ($form-field-addon-width + $default-padding);
|
636
|
+
}
|
637
|
+
}
|
638
|
+
}
|
639
|
+
}
|
640
|
+
}
|
641
|
+
|
604
642
|
.content_editor.essence_audio,
|
605
643
|
.content_editor.essence_file,
|
606
644
|
.content_editor.essence_video,
|
@@ -690,6 +728,24 @@ select.long {
|
|
690
728
|
width: 100%;
|
691
729
|
}
|
692
730
|
|
731
|
+
&.linkable {
|
732
|
+
input[type="text"] {
|
733
|
+
padding-right: 2 * ($form-field-addon-width + $default-padding);
|
734
|
+
}
|
735
|
+
|
736
|
+
&.with-anchor {
|
737
|
+
input[type="text"] {
|
738
|
+
padding-right: 26px + 2 * ($form-field-addon-width + $default-padding);
|
739
|
+
}
|
740
|
+
}
|
741
|
+
}
|
742
|
+
|
743
|
+
&.with-anchor {
|
744
|
+
input[type="text"] {
|
745
|
+
padding-right: 26px;
|
746
|
+
}
|
747
|
+
}
|
748
|
+
|
693
749
|
&.missing {
|
694
750
|
.message {
|
695
751
|
margin: 0;
|
@@ -936,8 +992,44 @@ textarea.has_tinymce {
|
|
936
992
|
}
|
937
993
|
|
938
994
|
.ingredient-date--label,
|
939
|
-
.essence_date--label
|
995
|
+
.essence_date--label,
|
996
|
+
.edit-ingredient-anchor-link {
|
940
997
|
position: absolute;
|
941
|
-
right:
|
942
|
-
|
998
|
+
right: 2 * $default-padding;
|
999
|
+
bottom: 15px;
|
1000
|
+
margin: 0 !important;
|
1001
|
+
}
|
1002
|
+
|
1003
|
+
.edit-ingredient-anchor-link {
|
1004
|
+
right: $default-padding;
|
1005
|
+
|
1006
|
+
> a {
|
1007
|
+
padding: $default-padding;
|
1008
|
+
}
|
1009
|
+
|
1010
|
+
.linkable & {
|
1011
|
+
right: 2 * $form-field-addon-width + $default-padding;
|
1012
|
+
}
|
1013
|
+
|
1014
|
+
.with-size-select & {
|
1015
|
+
right: $form-field-addon-width + $default-padding;
|
1016
|
+
}
|
1017
|
+
|
1018
|
+
.with-level-select & {
|
1019
|
+
right: $form-field-addon-width + $default-padding;
|
1020
|
+
}
|
1021
|
+
|
1022
|
+
.with-level-select.with-size-select & {
|
1023
|
+
right: 2 * $form-field-addon-width + $default-padding;
|
1024
|
+
}
|
1025
|
+
}
|
1026
|
+
|
1027
|
+
.ingredient-properties-link {
|
1028
|
+
position: absolute;
|
1029
|
+
right: 2px;
|
1030
|
+
bottom: 15px;
|
1031
|
+
|
1032
|
+
> a {
|
1033
|
+
padding: $default-padding;
|
1034
|
+
}
|
943
1035
|
}
|
@@ -1,8 +1,7 @@
|
|
1
1
|
form {
|
2
|
-
|
3
2
|
#main_content > &.alchemy {
|
4
3
|
max-width: 600px;
|
5
|
-
padding: 2
|
4
|
+
padding: 2 * $default-padding;
|
6
5
|
margin: 2em auto;
|
7
6
|
}
|
8
7
|
|
@@ -43,8 +42,8 @@ form {
|
|
43
42
|
}
|
44
43
|
|
45
44
|
> .autocomplete_tag_list {
|
46
|
-
|
47
|
-
.select2-
|
45
|
+
.select2-container,
|
46
|
+
.select2-choices {
|
48
47
|
width: 100%;
|
49
48
|
}
|
50
49
|
}
|
@@ -81,16 +80,16 @@ form {
|
|
81
80
|
}
|
82
81
|
|
83
82
|
&.field_with_errors {
|
84
|
-
|
85
83
|
input[type="text"],
|
86
84
|
input[type="email"],
|
87
85
|
input[type="password"],
|
88
86
|
textarea,
|
89
87
|
.select2-choices {
|
90
|
-
@extend %field-with-error
|
88
|
+
@extend %field-with-error;
|
91
89
|
}
|
92
90
|
|
93
|
-
.select2-choice,
|
91
|
+
.select2-choice,
|
92
|
+
.select2-choices {
|
94
93
|
border-color: $error_border_color;
|
95
94
|
color: $error_text_color;
|
96
95
|
margin-bottom: 4px;
|
@@ -100,7 +99,9 @@ form {
|
|
100
99
|
}
|
101
100
|
}
|
102
101
|
|
103
|
-
label {
|
102
|
+
label {
|
103
|
+
color: $error_text_color;
|
104
|
+
}
|
104
105
|
}
|
105
106
|
|
106
107
|
small.error {
|
@@ -115,27 +116,71 @@ form {
|
|
115
116
|
|
116
117
|
&.language_locale small.error {
|
117
118
|
@include form-hint(
|
118
|
-
|
119
|
-
|
119
|
+
$background-color: $error_background_color,
|
120
|
+
$border-color: $error_border_color
|
120
121
|
);
|
121
122
|
text-align: left;
|
122
123
|
}
|
123
124
|
}
|
124
125
|
|
126
|
+
.input-addon {
|
127
|
+
width: $form-field-addon-width;
|
128
|
+
position: absolute;
|
129
|
+
bottom: 2 * $default-padding;
|
130
|
+
|
131
|
+
select {
|
132
|
+
width: 100%;
|
133
|
+
padding: 0 2px;
|
134
|
+
text-align: center;
|
135
|
+
}
|
136
|
+
|
137
|
+
&.left {
|
138
|
+
left: 0;
|
139
|
+
|
140
|
+
select {
|
141
|
+
border-top-right-radius: 0;
|
142
|
+
border-bottom-right-radius: 0;
|
143
|
+
}
|
144
|
+
}
|
145
|
+
|
146
|
+
&.right {
|
147
|
+
left: unset;
|
148
|
+
right: 0;
|
149
|
+
|
150
|
+
select {
|
151
|
+
border-top-left-radius: 0;
|
152
|
+
border-bottom-left-radius: 0;
|
153
|
+
}
|
154
|
+
|
155
|
+
&.second {
|
156
|
+
left: unset;
|
157
|
+
right: $form-field-addon-width;
|
158
|
+
|
159
|
+
select {
|
160
|
+
border-right-width: 0;
|
161
|
+
border-top-right-radius: 0;
|
162
|
+
border-bottom-right-radius: 0;
|
163
|
+
}
|
164
|
+
}
|
165
|
+
}
|
166
|
+
}
|
167
|
+
|
125
168
|
.input > .with-hint,
|
126
169
|
.checkbox > .with-hint {
|
127
170
|
cursor: default;
|
128
171
|
|
129
|
-
input,
|
172
|
+
input,
|
173
|
+
textarea {
|
130
174
|
cursor: not-allowed;
|
131
175
|
}
|
132
176
|
}
|
133
177
|
|
134
178
|
.inline-input {
|
135
179
|
@include clearfix;
|
136
|
-
margin: 0 -1
|
180
|
+
margin: 0 -1 * $default-margin;
|
137
181
|
|
138
|
-
.left-column,
|
182
|
+
.left-column,
|
183
|
+
.right-column {
|
139
184
|
padding: 0 $default-padding;
|
140
185
|
}
|
141
186
|
|
@@ -192,9 +237,7 @@ form {
|
|
192
237
|
}
|
193
238
|
|
194
239
|
.input-row {
|
195
|
-
|
196
240
|
.input-column {
|
197
|
-
|
198
241
|
&:first-of-type {
|
199
242
|
padding-left: 0;
|
200
243
|
}
|
@@ -212,7 +255,6 @@ textarea#essence_picture_caption {
|
|
212
255
|
|
213
256
|
// styles for link overlay selects
|
214
257
|
.window_form {
|
215
|
-
|
216
258
|
td.checkbox {
|
217
259
|
text-align: left;
|
218
260
|
}
|
@@ -224,5 +266,5 @@ textarea#essence_picture_caption {
|
|
224
266
|
|
225
267
|
.input-column > label {
|
226
268
|
display: block;
|
227
|
-
margin-top: $default-margin +1;
|
269
|
+
margin-top: $default-margin + 1;
|
228
270
|
}
|
@@ -30,7 +30,7 @@ td,th {
|
|
30
30
|
|
31
31
|
.mce-object {
|
32
32
|
border: 1px dotted #3a3a3a;
|
33
|
-
background: #d5d5d5 url('tinymce/skins/alchemy/
|
33
|
+
background: #d5d5d5 url('tinymce/skins/alchemy/img/object.gif') no-repeat center;
|
34
34
|
}
|
35
35
|
|
36
36
|
.mce-pagebreak {
|
@@ -55,7 +55,7 @@ td,th {
|
|
55
55
|
width: 9px!important;
|
56
56
|
height: 9px!important;
|
57
57
|
border: 1px dotted #3a3a3a;
|
58
|
-
background: #d5d5d5 url('tinymce/skins/alchemy/
|
58
|
+
background: #d5d5d5 url('tinymce/skins/alchemy/img/anchor.gif') no-repeat center;
|
59
59
|
}
|
60
60
|
|
61
61
|
.mce-nbsp {
|
@@ -77,7 +77,7 @@ hr {
|
|
77
77
|
}
|
78
78
|
|
79
79
|
.mce-spellchecker-word {
|
80
|
-
background: url('tinymce/skins/alchemy/
|
80
|
+
background: url('tinymce/skins/alchemy/img/wline.gif') repeat-x bottom left;
|
81
81
|
cursor: default;
|
82
82
|
}
|
83
83
|
|
@@ -78,9 +78,9 @@ module Alchemy
|
|
78
78
|
|
79
79
|
def new
|
80
80
|
@page ||= Page.new(layoutpage: params[:layoutpage] == "true", parent_id: params[:parent_id])
|
81
|
-
@page_layouts =
|
81
|
+
@page_layouts = Page.layouts_for_select(@current_language.id, layoutpages: @page.layoutpage?)
|
82
82
|
@clipboard = get_clipboard("pages")
|
83
|
-
@clipboard_items = Page.all_from_clipboard_for_select(@clipboard, @current_language.id, @page.layoutpage?)
|
83
|
+
@clipboard_items = Page.all_from_clipboard_for_select(@clipboard, @current_language.id, layoutpages: @page.layoutpage?)
|
84
84
|
end
|
85
85
|
|
86
86
|
def create
|
@@ -398,7 +398,7 @@ module Alchemy
|
|
398
398
|
def load_languages_and_layouts
|
399
399
|
@language = @current_language
|
400
400
|
@languages_with_page_tree = Language.on_current_site.with_root_page
|
401
|
-
@page_layouts =
|
401
|
+
@page_layouts = Page.layouts_for_select(@language.id)
|
402
402
|
end
|
403
403
|
|
404
404
|
def set_preview_mode
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Alchemy
|
4
|
+
class Api::IngredientsController < Api::BaseController
|
5
|
+
# Returns all ingredients as json object
|
6
|
+
#
|
7
|
+
# You can either load all or only these for :element_id or :page_id param
|
8
|
+
#
|
9
|
+
def index
|
10
|
+
@ingredients = Alchemy::Ingredient.accessible_by(current_ability, :index)
|
11
|
+
|
12
|
+
if params[:page_id].present?
|
13
|
+
@ingredients = @ingredients
|
14
|
+
.where(alchemy_page_versions: { page_id: params[:page_id] })
|
15
|
+
.merge(Alchemy::PageVersion.drafts)
|
16
|
+
.joins(element: :page_version)
|
17
|
+
end
|
18
|
+
|
19
|
+
render json: @ingredients, adapter: :json, root: "ingredients"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -104,7 +104,14 @@ module Alchemy
|
|
104
104
|
# If no index page and no admin users are present we show the "Welcome to Alchemy" page.
|
105
105
|
#
|
106
106
|
def load_index_page
|
107
|
-
@page ||=
|
107
|
+
@page ||= begin
|
108
|
+
Alchemy::Page.
|
109
|
+
contentpages.
|
110
|
+
language_roots.
|
111
|
+
where(language: Language.current).
|
112
|
+
includes(page_includes).
|
113
|
+
first
|
114
|
+
end
|
108
115
|
render template: "alchemy/welcome", layout: false if signup_required?
|
109
116
|
end
|
110
117
|
|
@@ -120,10 +127,13 @@ module Alchemy
|
|
120
127
|
def load_page
|
121
128
|
page_not_found! unless Language.current
|
122
129
|
|
123
|
-
@page ||=
|
124
|
-
|
125
|
-
|
126
|
-
|
130
|
+
@page ||= begin
|
131
|
+
Alchemy::Page.
|
132
|
+
contentpages.
|
133
|
+
where(language: Language.current).
|
134
|
+
includes(page_includes).
|
135
|
+
find_by(urlname: params[:urlname])
|
136
|
+
end
|
127
137
|
end
|
128
138
|
|
129
139
|
def enforce_locale
|
@@ -234,5 +244,9 @@ module Alchemy
|
|
234
244
|
def page_not_found!
|
235
245
|
not_found_error!("Alchemy::Page not found \"#{request.fullpath}\"")
|
236
246
|
end
|
247
|
+
|
248
|
+
def page_includes
|
249
|
+
Alchemy::EagerLoading.page_includes(version: :public_version)
|
250
|
+
end
|
237
251
|
end
|
238
252
|
end
|
@@ -36,6 +36,10 @@ module Alchemy
|
|
36
36
|
"ingredient-editor",
|
37
37
|
partial_name,
|
38
38
|
deprecated? ? "deprecated" : nil,
|
39
|
+
respond_to?(:level_options) && level_options.many? ? "with-level-select" : nil,
|
40
|
+
respond_to?(:size_options) && size_options.many? ? "with-size-select" : nil,
|
41
|
+
settings[:linkable] ? "linkable" : nil,
|
42
|
+
settings[:anchor] ? "with-anchor" : nil,
|
39
43
|
].compact
|
40
44
|
end
|
41
45
|
|
@@ -166,14 +166,6 @@ module Alchemy
|
|
166
166
|
render "alchemy/elements/view_not_found", name: element.name
|
167
167
|
end
|
168
168
|
|
169
|
-
# Returns a string for the id attribute of a html element for the given element
|
170
|
-
# @deprecated
|
171
|
-
def element_dom_id(element)
|
172
|
-
element&.dom_id
|
173
|
-
end
|
174
|
-
|
175
|
-
deprecate element_dom_id: "element.dom_id", deprecator: Alchemy::Deprecation
|
176
|
-
|
177
169
|
# Renders the HTML tag attributes required for preview mode.
|
178
170
|
def element_preview_code(element)
|
179
171
|
tag_builder.tag_options(element_preview_code_attributes(element))
|
@@ -33,13 +33,5 @@ module Alchemy
|
|
33
33
|
def download_alchemy_attachment_url(attachment)
|
34
34
|
alchemy.download_attachment_url(attachment, attachment.slug)
|
35
35
|
end
|
36
|
-
|
37
|
-
# Returns the full url containing host, page and anchor for the given element
|
38
|
-
# @deprecated
|
39
|
-
def full_url_for_element(element)
|
40
|
-
"#{current_server}/#{element.page.urlname}##{element.dom_id}"
|
41
|
-
end
|
42
|
-
|
43
|
-
deprecate :full_url_for_element, deprecator: Alchemy::Deprecation
|
44
36
|
end
|
45
37
|
end
|