alchemy_cms 5.1.9 → 5.2.0.b1
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 +2 -1
- data/CHANGELOG.md +21 -25
- data/Gemfile +2 -6
- data/alchemy_cms.gemspec +3 -3
- data/app/assets/stylesheets/alchemy/_variables.scss +2 -0
- data/app/assets/stylesheets/alchemy/elements.scss +38 -5
- data/app/assets/stylesheets/tinymce/skins/alchemy/content.min.css.scss +3 -3
- data/app/assets/stylesheets/tinymce/skins/alchemy/skin.min.css.scss +7 -7
- data/app/controllers/alchemy/admin/base_controller.rb +1 -0
- data/app/controllers/alchemy/admin/trash_controller.rb +2 -0
- data/app/decorators/alchemy/content_editor.rb +64 -0
- data/app/decorators/alchemy/element_editor.rb +1 -25
- data/app/helpers/alchemy/admin/contents_helper.rb +3 -8
- data/app/helpers/alchemy/elements_helper.rb +0 -18
- data/app/helpers/alchemy/pages_helper.rb +1 -1
- data/app/models/alchemy/attachment.rb +5 -1
- data/app/models/alchemy/content.rb +7 -0
- data/app/models/alchemy/element/definitions.rb +5 -22
- data/app/models/alchemy/element.rb +39 -1
- data/app/models/alchemy/node.rb +1 -1
- data/app/models/alchemy/page/page_elements.rb +9 -2
- data/app/models/alchemy/page.rb +1 -1
- data/app/models/alchemy/picture.rb +2 -2
- data/app/models/alchemy/picture_variant.rb +1 -1
- data/app/views/alchemy/admin/elements/_element.html.erb +1 -1
- data/app/views/alchemy/admin/elements/_element_header.html.erb +2 -0
- data/app/views/alchemy/essences/_essence_picture_view.html.erb +3 -3
- data/config/brakeman.ignore +305 -17
- data/config/locales/alchemy.en.yml +40 -24
- data/lib/alchemy/deprecation.rb +1 -1
- data/lib/alchemy/element_definition.rb +70 -0
- data/lib/alchemy/elements_finder.rb +6 -2
- data/lib/alchemy/engine.rb +1 -1
- data/lib/alchemy/essence.rb +4 -4
- data/lib/alchemy/filetypes.rb +13 -0
- data/lib/alchemy/forms/builder.rb +1 -1
- data/lib/alchemy/i18n.rb +4 -5
- data/lib/alchemy/page_layout.rb +1 -0
- data/lib/alchemy/resource.rb +3 -5
- data/lib/alchemy/test_support/integration_helpers.rb +5 -5
- data/lib/alchemy/upgrader/five_point_zero.rb +0 -32
- data/lib/alchemy/version.rb +1 -1
- data/lib/alchemy_cms.rb +1 -0
- data/lib/generators/alchemy/install/install_generator.rb +1 -2
- data/lib/tasks/alchemy/thumbnails.rake +2 -4
- data/lib/tasks/alchemy/upgrade.rake +0 -20
- data/package/admin.js +0 -2
- data/package/src/__tests__/i18n.spec.js +0 -23
- data/package/src/i18n.js +3 -1
- data/package.json +1 -1
- metadata +12 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2d282ae615eeffe270108252f3979dbad9a1233d280f8834c1b5420afc27929
|
4
|
+
data.tar.gz: '095d174025843dd1c347c17ef6fe9ca93bf80398d6eb33f1d5f6d5c2d1c2e7d4'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 260ad000c50c5466d49644054541829229f4eebf0bb75e375c25aeffd835a61acfe5fd8d4accf45bc7724c707966fc8501c21f7ee1e080d73e84c1435265d4b0
|
7
|
+
data.tar.gz: '08af0b5dab164cfda123d3d600f486592ffc2f5ac59caf63a4c8b6642cf3febff9371c394adab35811c3c7e0c11601bf0b63e17211906dbd31300e7e9d70964a'
|
data/.github/workflows/ci.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,39 +1,35 @@
|
|
1
|
-
## 5.
|
1
|
+
## 5.2.0.b1 (2021-02-11)
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
## 5.1.8 (2021-11-17)
|
6
|
-
|
7
|
-
- Set stampable user_class_name without root identifier ([tvdeyen](https://github.com/tvdeyen))
|
8
|
-
- Use relative path for tinymce font-face ([tvdeyen](https://github.com/tvdeyen))
|
9
|
-
|
10
|
-
## 5.1.7 (2021-10-26)
|
11
|
-
|
12
|
-
- Make sure to install correct npm package ([tvdeyen](https://github.com/tvdeyen))
|
13
|
-
|
14
|
-
## 5.1.6 (2021-09-17)
|
15
|
-
|
16
|
-
- Use self_and_ancestors in page_active? helper [#2194](https://github.com/AlchemyCMS/alchemy_cms/pull/2194) ([mamhoff](https://github.com/mamhoff))
|
3
|
+
### Features
|
17
4
|
|
18
|
-
|
5
|
+
- Allow Element and Content deprecation notices [#1988](https://github.com/AlchemyCMS/alchemy_cms/pull/1988) ([tvdeyen](https://github.com/tvdeyen))
|
6
|
+
- Add element definition api (based on PageLayout definitions) [#1986](https://github.com/AlchemyCMS/alchemy_cms/pull/1986) ([stockime](https://github.com/stockime))
|
19
7
|
|
20
|
-
|
21
|
-
- Backport #2115 to v5.1 [#2125](https://github.com/AlchemyCMS/alchemy_cms/pull/2125) ([dbwinger](https://github.com/dbwinger))
|
22
|
-
- Backport #2114 to v5.1 [#2117](https://github.com/AlchemyCMS/alchemy_cms/pull/2117) ([afdev82](https://github.com/afdev82))
|
8
|
+
### Changes
|
23
9
|
|
24
|
-
|
10
|
+
- Fix jpeg quality option for jpeg files [#2016](https://github.com/AlchemyCMS/alchemy_cms/pull/2016) ([kulturbande](https://github.com/kulturbande))
|
11
|
+
- Pin Ransack to below 2.4.2 [#2012](https://github.com/AlchemyCMS/alchemy_cms/pull/2012) ([tvdeyen](https://github.com/tvdeyen))
|
12
|
+
- Fix setting current_user in integration helper [#2006](https://github.com/AlchemyCMS/alchemy_cms/pull/2006) ([tvdeyen](https://github.com/tvdeyen))
|
13
|
+
- Update mime type icons and translations [#2002](https://github.com/AlchemyCMS/alchemy_cms/pull/2002) ([tvdeyen](https://github.com/tvdeyen))
|
14
|
+
- Deprecate page layout change [#1993](https://github.com/AlchemyCMS/alchemy_cms/pull/1993) ([tvdeyen](https://github.com/tvdeyen))
|
15
|
+
- Fix Ruby 2.7 deprecations [#1989](https://github.com/AlchemyCMS/alchemy_cms/pull/1989) ([tvdeyen](https://github.com/tvdeyen))
|
16
|
+
- Deprecate trash [#1985](https://github.com/AlchemyCMS/alchemy_cms/pull/1985) ([tvdeyen](https://github.com/tvdeyen))
|
17
|
+
- Deprecate elements fallbacks [#1982](https://github.com/AlchemyCMS/alchemy_cms/pull/1982) ([tvdeyen](https://github.com/tvdeyen))
|
25
18
|
|
26
|
-
|
27
|
-
- Do not attempt to generate thumbs for svg files. [#2090](https://github.com/AlchemyCMS/alchemy_cms/pull/2090) ([oneiros](https://github.com/oneiros))
|
19
|
+
### Misc
|
28
20
|
|
29
|
-
|
21
|
+
- Use Ubuntu 18.04 on GH actions [#2018](https://github.com/AlchemyCMS/alchemy_cms/pull/2018) ([tvdeyen](https://github.com/tvdeyen))
|
22
|
+
- [ruby - main] Upgrade rubocop to version 1.9.0 [#2011](https://github.com/AlchemyCMS/alchemy_cms/pull/2011) ([depfu](https://github.com/apps/depfu))
|
23
|
+
- [ruby - main] Upgrade rubocop to version 1.8.1 [#1999](https://github.com/AlchemyCMS/alchemy_cms/pull/1999) ([depfu](https://github.com/apps/depfu))
|
24
|
+
- Update brakeman ignores [#1992](https://github.com/AlchemyCMS/alchemy_cms/pull/1992) ([tvdeyen](https://github.com/tvdeyen))
|
25
|
+
- [ruby - main] Upgrade rubocop to version 1.6.1 [#1978](https://github.com/AlchemyCMS/alchemy_cms/pull/1978) ([depfu](https://github.com/apps/depfu))
|
26
|
+
- [ruby - main] Upgrade simplecov to version 0.20.0 [#1971](https://github.com/AlchemyCMS/alchemy_cms/pull/1971) ([depfu](https://github.com/apps/depfu))
|
30
27
|
|
31
|
-
- Use symbols in polymorphic routes for resources [#2087](https://github.com/AlchemyCMS/alchemy_cms/pull/2087) ([tvdeyen](https://github.com/tvdeyen))
|
32
|
-
- Backport #2049 to 5.1 [#2059](https://github.com/AlchemyCMS/alchemy_cms/pull/2059) ([rickythefox](https://github.com/rickythefox))
|
33
28
|
## 5.1.2 (2021-01-26)
|
34
29
|
|
35
30
|
- Allow to safe hidden elements [#2007](https://github.com/AlchemyCMS/alchemy_cms/pull/2007) ([tvdeyen](https://github.com/tvdeyen))
|
36
31
|
|
32
|
+
|
37
33
|
## 5.1.1 (2021-01-12)
|
38
34
|
|
39
35
|
- Fix copy element feature [#1996](https://github.com/AlchemyCMS/alchemy_cms/pull/1996) ([tvdeyen](https://github.com/tvdeyen))
|
data/Gemfile
CHANGED
@@ -13,11 +13,6 @@ gem "mysql2", "~> 0.5.1" if ENV["DB"] == "mysql"
|
|
13
13
|
gem "pg", "~> 1.0" if ENV["DB"] == "postgresql"
|
14
14
|
|
15
15
|
group :development, :test do
|
16
|
-
# execjs 2.8 removes deprecation warnings but also breaks a number of dependent projects.
|
17
|
-
# in our case the culprit is `handlebars-assets`. The changes between 2.7.0 and 2.8.0 are
|
18
|
-
# minimal, but breaking.
|
19
|
-
gem "execjs", "= 2.7.0"
|
20
|
-
|
21
16
|
if ENV["GITHUB_ACTIONS"]
|
22
17
|
gem "sassc", "~> 2.4.0" # https://github.com/sass/sassc-ruby/issues/146
|
23
18
|
else
|
@@ -27,7 +22,7 @@ group :development, :test do
|
|
27
22
|
gem "yard"
|
28
23
|
gem "redcarpet"
|
29
24
|
gem "pry-byebug"
|
30
|
-
gem "rubocop", "~> 1.
|
25
|
+
gem "rubocop", "~> 1.9.0", require: false
|
31
26
|
gem "listen"
|
32
27
|
gem "localeapp", "~> 3.0", require: false
|
33
28
|
gem "dotenv", "~> 2.2"
|
@@ -35,5 +30,6 @@ group :development, :test do
|
|
35
30
|
gem "active_record_query_trace", require: false
|
36
31
|
gem "rack-mini-profiler", require: false
|
37
32
|
gem "rufo", require: false
|
33
|
+
gem "brakeman", require: false
|
38
34
|
end
|
39
35
|
end
|
data/alchemy_cms.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |gem|
|
|
23
23
|
gem.add_runtime_dependency 'awesome_nested_set', ['~> 3.1']
|
24
24
|
gem.add_runtime_dependency 'cancancan', ['>= 2.1', '< 4.0']
|
25
25
|
gem.add_runtime_dependency 'coffee-rails', ['>= 4.0', '< 6.0']
|
26
|
-
gem.add_runtime_dependency 'dragonfly', ['~> 1.0', '>= 1.0.7'
|
26
|
+
gem.add_runtime_dependency 'dragonfly', ['~> 1.0', '>= 1.0.7']
|
27
27
|
gem.add_runtime_dependency 'dragonfly_svg', ['~> 0.0.4']
|
28
28
|
gem.add_runtime_dependency 'gutentag', ['~> 2.2', '>= 2.2.1']
|
29
29
|
gem.add_runtime_dependency 'handlebars_assets', ['~> 0.23']
|
@@ -33,7 +33,7 @@ Gem::Specification.new do |gem|
|
|
33
33
|
gem.add_runtime_dependency 'originator', ['~> 3.1']
|
34
34
|
gem.add_runtime_dependency 'non-stupid-digest-assets', ['~> 1.0.8']
|
35
35
|
gem.add_runtime_dependency 'rails', ['>= 5.2.0', '< 6.1']
|
36
|
-
gem.add_runtime_dependency 'ransack', ['>= 1.8', '<
|
36
|
+
gem.add_runtime_dependency 'ransack', ['>= 1.8', '< 2.4.2'] # 2.4.2 dropped Ruby 2.5 support in a patch level release
|
37
37
|
gem.add_runtime_dependency 'request_store', ['~> 1.2']
|
38
38
|
gem.add_runtime_dependency 'responders', ['>= 2.0', '< 4.0']
|
39
39
|
gem.add_runtime_dependency 'sassc-rails', ['~> 2.1']
|
@@ -49,7 +49,7 @@ Gem::Specification.new do |gem|
|
|
49
49
|
gem.add_development_dependency 'rails-controller-testing', ['~> 1.0']
|
50
50
|
gem.add_development_dependency 'rspec-activemodel-mocks', ['~> 1.0']
|
51
51
|
gem.add_development_dependency 'rspec-rails', ['>= 4.0.0.beta2']
|
52
|
-
gem.add_development_dependency 'simplecov', ['~> 0.
|
52
|
+
gem.add_development_dependency 'simplecov', ['~> 0.20']
|
53
53
|
gem.add_development_dependency 'webdrivers', ['~> 4.0']
|
54
54
|
gem.add_development_dependency 'webmock', ['~> 3.3']
|
55
55
|
gem.add_development_dependency 'shoulda-matchers', ['~> 4.0']
|
@@ -145,6 +145,8 @@ $elements-window-min-width: 400px !default;
|
|
145
145
|
$element-header-bg-color: $medium-gray !default;
|
146
146
|
$element-header-active-bg-color: $dark-blue !default;
|
147
147
|
$element-header-active-color: $white !default;
|
148
|
+
$element-header-deprecated-bg-color: rgba(253, 213, 175, 0.25) !default;
|
149
|
+
$element-deprecated-border-color: rgb(253, 213, 175) !default;
|
148
150
|
$top-menu-height: 75px !default;
|
149
151
|
|
150
152
|
$tabs-height: 31px !default;
|
@@ -170,13 +170,32 @@
|
|
170
170
|
}
|
171
171
|
}
|
172
172
|
|
173
|
+
&.deprecated {
|
174
|
+
border-color: $element-deprecated-border-color;
|
175
|
+
|
176
|
+
> .element-header {
|
177
|
+
background-color: $element-header-deprecated-bg-color;
|
178
|
+
background-image: linear-gradient(
|
179
|
+
45deg,
|
180
|
+
$element-header-deprecated-bg-color 25%,
|
181
|
+
$element-header-bg-color 25%,
|
182
|
+
$element-header-bg-color 50%,
|
183
|
+
$element-header-deprecated-bg-color 50%,
|
184
|
+
$element-header-deprecated-bg-color 75%,
|
185
|
+
$element-header-bg-color 75%,
|
186
|
+
$element-header-bg-color 100%
|
187
|
+
);
|
188
|
+
background-size: 28.28px 28.28px;
|
189
|
+
}
|
190
|
+
}
|
191
|
+
|
173
192
|
&.selected:not(.is-fixed), &:hover {
|
174
193
|
&:not(.hidden) {
|
175
194
|
box-shadow: 0 2px 8px rgba(#9b9b9b, 0.75);
|
176
195
|
}
|
177
196
|
}
|
178
197
|
|
179
|
-
&.selected:not(.is-fixed):not(.folded):not(.dirty):not(.hidden) {
|
198
|
+
&.selected:not(.is-fixed):not(.folded):not(.dirty):not(.hidden):not(.deprecated) {
|
180
199
|
> .element-header {
|
181
200
|
background-color: $element-header-active-bg-color;
|
182
201
|
color: $element-header-active-color;
|
@@ -670,6 +689,24 @@ select.long {
|
|
670
689
|
}
|
671
690
|
}
|
672
691
|
|
692
|
+
&.deprecated {
|
693
|
+
border-radius: $default-border-radius;
|
694
|
+
background-color: $element-header-deprecated-bg-color;
|
695
|
+
background-image: linear-gradient(
|
696
|
+
45deg,
|
697
|
+
$element-header-deprecated-bg-color 25%,
|
698
|
+
$element-header-bg-color 25%,
|
699
|
+
$element-header-bg-color 50%,
|
700
|
+
$element-header-deprecated-bg-color 50%,
|
701
|
+
$element-header-deprecated-bg-color 75%,
|
702
|
+
$element-header-bg-color 75%,
|
703
|
+
$element-header-bg-color 100%
|
704
|
+
);
|
705
|
+
background-size: 28.28px 28.28px;
|
706
|
+
padding-left: 2px;
|
707
|
+
padding-right: 2px;
|
708
|
+
}
|
709
|
+
|
673
710
|
label {
|
674
711
|
display: block;
|
675
712
|
margin: $default-margin 0;
|
@@ -802,10 +839,6 @@ textarea.has_tinymce {
|
|
802
839
|
}
|
803
840
|
}
|
804
841
|
|
805
|
-
.element-handle .hint-with-icon {
|
806
|
-
top: -1px;
|
807
|
-
}
|
808
|
-
|
809
842
|
.is-fixed {
|
810
843
|
&.with-contents {
|
811
844
|
>.element-footer {
|
@@ -30,7 +30,7 @@ td,th {
|
|
30
30
|
|
31
31
|
.mce-object {
|
32
32
|
border: 1px dotted #3a3a3a;
|
33
|
-
background: #d5d5d5 url(
|
33
|
+
background: #d5d5d5 url(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(
|
58
|
+
background: #d5d5d5 url(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(
|
80
|
+
background: url(img/wline.gif) repeat-x bottom left;
|
81
81
|
cursor: default;
|
82
82
|
}
|
83
83
|
|
@@ -1561,23 +1561,23 @@ i.mce-i-resize {
|
|
1561
1561
|
opacity: 0.6;
|
1562
1562
|
filter: alpha(opacity=60);
|
1563
1563
|
zoom: 1;
|
1564
|
-
background: #fff url('
|
1564
|
+
background: #fff url('img/loader.gif') no-repeat center center;
|
1565
1565
|
}
|
1566
1566
|
|
1567
1567
|
@font-face {
|
1568
1568
|
font-family: 'tinymce';
|
1569
|
-
src: url('
|
1570
|
-
url('
|
1571
|
-
url('
|
1569
|
+
src: url('fonts/tinymce.woff') format('woff'),
|
1570
|
+
url('fonts/tinymce.ttf') format('truetype'),
|
1571
|
+
url('fonts/tinymce.svg#tinymce') format('svg');
|
1572
1572
|
font-weight: normal;
|
1573
1573
|
font-style: normal;
|
1574
1574
|
}
|
1575
1575
|
|
1576
1576
|
@font-face {
|
1577
1577
|
font-family: 'tinymce-small';
|
1578
|
-
src: url('
|
1579
|
-
url('
|
1580
|
-
url('
|
1578
|
+
src: url('fonts/tinymce-small.woff') format('woff'),
|
1579
|
+
url('fonts/tinymce-small.ttf') format('truetype'),
|
1580
|
+
url('fonts/tinymce-small.svg#tinymce') format('svg');
|
1581
1581
|
font-weight: normal;
|
1582
1582
|
font-style: normal;
|
1583
1583
|
}
|
@@ -12,12 +12,14 @@ module Alchemy
|
|
12
12
|
@page = Page.find(params[:page_id])
|
13
13
|
@allowed_elements = @page.available_element_definitions
|
14
14
|
end
|
15
|
+
deprecate :index, deprecator: Alchemy::Deprecation
|
15
16
|
|
16
17
|
def clear
|
17
18
|
@page = Page.find(params[:page_id])
|
18
19
|
@elements = Element.trashed
|
19
20
|
@elements.map(&:destroy)
|
20
21
|
end
|
22
|
+
deprecate :clear, deprecator: Alchemy::Deprecation
|
21
23
|
|
22
24
|
private
|
23
25
|
|
@@ -12,6 +12,7 @@ module Alchemy
|
|
12
12
|
[
|
13
13
|
"content_editor",
|
14
14
|
essence_partial_name,
|
15
|
+
deprecated? ? "deprecated" : nil,
|
15
16
|
].compact
|
16
17
|
end
|
17
18
|
|
@@ -51,5 +52,68 @@ module Alchemy
|
|
51
52
|
|
52
53
|
super
|
53
54
|
end
|
55
|
+
|
56
|
+
def has_warnings?
|
57
|
+
definition.blank? || deprecated?
|
58
|
+
end
|
59
|
+
|
60
|
+
def warnings
|
61
|
+
return unless has_warnings?
|
62
|
+
|
63
|
+
if definition.blank?
|
64
|
+
Logger.warn("Content #{name} is missing its definition", caller(1..1))
|
65
|
+
Alchemy.t(:content_definition_missing)
|
66
|
+
else
|
67
|
+
deprecation_notice
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# Returns a deprecation notice for contents marked deprecated
|
72
|
+
#
|
73
|
+
# You can either use localizations or pass a String as notice
|
74
|
+
# in the content definition.
|
75
|
+
#
|
76
|
+
# == Custom deprecation notices
|
77
|
+
#
|
78
|
+
# Use general content deprecation notice
|
79
|
+
#
|
80
|
+
# - name: element_name
|
81
|
+
# contents:
|
82
|
+
# - name: old_content
|
83
|
+
# type: EssenceText
|
84
|
+
# deprecated: true
|
85
|
+
#
|
86
|
+
# Add a translation to your locale file for a per content notice.
|
87
|
+
#
|
88
|
+
# en:
|
89
|
+
# alchemy:
|
90
|
+
# content_deprecation_notices:
|
91
|
+
# element_name:
|
92
|
+
# old_content: Foo baz widget is deprecated
|
93
|
+
#
|
94
|
+
# or use the global translation that apply to all deprecated contents.
|
95
|
+
#
|
96
|
+
# en:
|
97
|
+
# alchemy:
|
98
|
+
# content_deprecation_notice: Foo baz widget is deprecated
|
99
|
+
#
|
100
|
+
# or pass string as deprecation notice.
|
101
|
+
#
|
102
|
+
# - name: element_name
|
103
|
+
# contents:
|
104
|
+
# - name: old_content
|
105
|
+
# type: EssenceText
|
106
|
+
# deprecated: This content will be removed soon.
|
107
|
+
#
|
108
|
+
def deprecation_notice
|
109
|
+
case definition["deprecated"]
|
110
|
+
when String
|
111
|
+
definition["deprecated"]
|
112
|
+
when TrueClass
|
113
|
+
Alchemy.t(name,
|
114
|
+
scope: [:content_deprecation_notices, element.name],
|
115
|
+
default: Alchemy.t(:content_deprecated))
|
116
|
+
end
|
117
|
+
end
|
54
118
|
end
|
55
119
|
end
|
@@ -8,17 +8,6 @@ module Alchemy
|
|
8
8
|
"alchemy/admin/elements/element"
|
9
9
|
end
|
10
10
|
|
11
|
-
# Returns content editor instances for defined contents
|
12
|
-
#
|
13
|
-
# Creates contents on demand if the content is not yet present on the element
|
14
|
-
#
|
15
|
-
# @return Array<Alchemy::ContentEditor>
|
16
|
-
def contents
|
17
|
-
element.definition.fetch(:contents, []).map do |content|
|
18
|
-
Alchemy::ContentEditor.new(find_or_create_content(content[:name]))
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
11
|
# CSS classes for the element editor partial.
|
23
12
|
def css_classes
|
24
13
|
[
|
@@ -28,6 +17,7 @@ module Alchemy
|
|
28
17
|
taggable? ? "taggable" : "not-taggable",
|
29
18
|
folded ? "folded" : "expanded",
|
30
19
|
compact? ? "compact" : nil,
|
20
|
+
deprecated? ? "deprecated" : nil,
|
31
21
|
fixed? ? "is-fixed" : "not-fixed",
|
32
22
|
public? ? "visible" : "hidden",
|
33
23
|
].join(" ")
|
@@ -88,19 +78,5 @@ module Alchemy
|
|
88
78
|
default: Alchemy.t(:element_deprecated))
|
89
79
|
end
|
90
80
|
end
|
91
|
-
|
92
|
-
private
|
93
|
-
|
94
|
-
def find_or_create_content(name)
|
95
|
-
find_content(name) || create_content(name)
|
96
|
-
end
|
97
|
-
|
98
|
-
def find_content(name)
|
99
|
-
element.contents.find { |content| content.name == name }
|
100
|
-
end
|
101
|
-
|
102
|
-
def create_content(name)
|
103
|
-
Alchemy::Content.create(element: element, name: name)
|
104
|
-
end
|
105
81
|
end
|
106
82
|
end
|
@@ -19,13 +19,8 @@ module Alchemy
|
|
19
19
|
|
20
20
|
content_name = content.name_for_label
|
21
21
|
|
22
|
-
if content.
|
23
|
-
|
24
|
-
|
25
|
-
icon = hint_with_tooltip(
|
26
|
-
Alchemy.t(:content_definition_missing),
|
27
|
-
)
|
28
|
-
|
22
|
+
if content.has_warnings?
|
23
|
+
icon = hint_with_tooltip(content.warnings)
|
29
24
|
content_name = "#{icon} #{content_name}".html_safe
|
30
25
|
end
|
31
26
|
|
@@ -39,7 +34,7 @@ module Alchemy
|
|
39
34
|
# Renders the label and a remove link for a content.
|
40
35
|
def content_label(content)
|
41
36
|
content_tag :label, for: content.form_field_id do
|
42
|
-
[
|
37
|
+
[render_content_name(content), render_hint_for(content)].compact.join(" ").html_safe
|
43
38
|
end
|
44
39
|
end
|
45
40
|
end
|
@@ -28,22 +28,6 @@ module Alchemy
|
|
28
28
|
# <%= render_elements from_page: 'footer' %>
|
29
29
|
# </footer>
|
30
30
|
#
|
31
|
-
# === Fallback to elements from global page:
|
32
|
-
#
|
33
|
-
# You can use the fallback option as an override for elements that are stored on another page.
|
34
|
-
# So you can take elements from a global page and only if the user adds an element on current page the
|
35
|
-
# local one gets rendered.
|
36
|
-
#
|
37
|
-
# 1. You have to pass the the name of the element the fallback is for as <tt>for</tt> key.
|
38
|
-
# 2. You have to pass a <tt>page_layout</tt> name or {Alchemy::Page} from where the fallback elements is taken from as <tt>from</tt> key.
|
39
|
-
# 3. You can pass the name of element to fallback with as <tt>with</tt> key. This is optional (the element name from the <tt>for</tt> key is taken as default).
|
40
|
-
#
|
41
|
-
# <%= render_elements(fallback: {
|
42
|
-
# for: 'contact_teaser',
|
43
|
-
# from: 'sidebar',
|
44
|
-
# with: 'contact_teaser'
|
45
|
-
# }) %>
|
46
|
-
#
|
47
31
|
# === Custom elements finder:
|
48
32
|
#
|
49
33
|
# Having a custom element finder class:
|
@@ -76,8 +60,6 @@ module Alchemy
|
|
76
60
|
# The amount of elements to be rendered (begins with first element found)
|
77
61
|
# @option options [Number] :offset
|
78
62
|
# The offset to begin loading elements from
|
79
|
-
# @option options [Hash] :fallback
|
80
|
-
# Define elements that are rendered from another page.
|
81
63
|
# @option options [Boolean] :random (false)
|
82
64
|
# Randomize the output of elements
|
83
65
|
# @option options [Boolean] :reverse (false)
|
@@ -100,7 +100,7 @@ module Alchemy
|
|
100
100
|
|
101
101
|
# Returns true if page is in the active branch
|
102
102
|
def page_active?(page)
|
103
|
-
@_page_ancestors ||= @page
|
103
|
+
@_page_ancestors ||= Page.ancestors_for(@page)
|
104
104
|
@_page_ancestors.include?(page)
|
105
105
|
end
|
106
106
|
|
@@ -28,7 +28,7 @@ module Alchemy
|
|
28
28
|
after_assign { |f| write_attribute(:file_mime_type, f.mime_type) }
|
29
29
|
end
|
30
30
|
|
31
|
-
stampable stamper_class_name: Alchemy.
|
31
|
+
stampable stamper_class_name: Alchemy.user_class_name
|
32
32
|
|
33
33
|
has_many :essence_files, class_name: "Alchemy::EssenceFile", foreign_key: "attachment_id"
|
34
34
|
has_many :contents, through: :essence_files
|
@@ -125,6 +125,10 @@ module Alchemy
|
|
125
125
|
"file-alt"
|
126
126
|
when *EXCEL_FILE_TYPES
|
127
127
|
"file-excel"
|
128
|
+
when *POWERPOINT_FILE_TYPES
|
129
|
+
"file-powerpoint"
|
130
|
+
when *WORD_FILE_TYPES
|
131
|
+
"file-word"
|
128
132
|
when *VCARD_FILE_TYPES
|
129
133
|
"address-card"
|
130
134
|
when *ARCHIVE_FILE_TYPES
|
@@ -46,9 +46,12 @@ module Alchemy
|
|
46
46
|
|
47
47
|
delegate :restricted?, to: :page, allow_nil: true
|
48
48
|
delegate :trashed?, to: :element, allow_nil: true
|
49
|
+
deprecate :trashed?, deprecator: Alchemy::Deprecation
|
49
50
|
delegate :public?, to: :element, allow_nil: true
|
50
51
|
|
51
52
|
class << self
|
53
|
+
deprecate :not_trashed, deprecator: Alchemy::Deprecation
|
54
|
+
|
52
55
|
# Returns the translated label for a content name.
|
53
56
|
#
|
54
57
|
# Translate it in your locale yml file:
|
@@ -189,6 +192,10 @@ module Alchemy
|
|
189
192
|
essence && !essence.link.blank?
|
190
193
|
end
|
191
194
|
|
195
|
+
def deprecated?
|
196
|
+
!!definition["deprecated"]
|
197
|
+
end
|
198
|
+
|
192
199
|
# Returns true if this content should be taken for element preview.
|
193
200
|
def preview_content?
|
194
201
|
!!definition["as_element_title"]
|
@@ -13,41 +13,24 @@ module Alchemy
|
|
13
13
|
# your own set of elements
|
14
14
|
#
|
15
15
|
def definitions
|
16
|
-
|
16
|
+
ElementDefinition.all
|
17
17
|
end
|
18
18
|
|
19
19
|
# Returns one element definition by given name.
|
20
20
|
#
|
21
21
|
def definition_by_name(name)
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
# Reads the element definitions file named +elements.yml+ from +config/alchemy/+ folder.
|
28
|
-
#
|
29
|
-
def read_definitions_file
|
30
|
-
if ::File.exist?(definitions_file_path)
|
31
|
-
::YAML.safe_load(ERB.new(File.read(definitions_file_path)).result, YAML_WHITELIST_CLASSES, [], true) || []
|
32
|
-
else
|
33
|
-
raise LoadError, "Could not find elements.yml file! Please run `rails generate alchemy:install`"
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
# Returns the +elements.yml+ file path
|
38
|
-
#
|
39
|
-
def definitions_file_path
|
40
|
-
Rails.root.join "config/alchemy/elements.yml"
|
22
|
+
ElementDefinition.get(name)
|
41
23
|
end
|
42
24
|
end
|
43
25
|
|
44
26
|
# The definition of this element.
|
45
27
|
#
|
46
28
|
def definition
|
47
|
-
if definition = self.class.
|
29
|
+
if definition = self.class.definition_by_name(name)
|
48
30
|
definition
|
49
31
|
else
|
50
|
-
log_warning "Could not find element definition for #{name}.
|
32
|
+
log_warning "Could not find element definition for #{name}. " \
|
33
|
+
"Please check your elements.yml file!"
|
51
34
|
{}
|
52
35
|
end
|
53
36
|
end
|