alchemy_cms 4.0.1 → 4.0.6
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/.travis.yml +4 -5
- data/CHANGELOG.md +26 -0
- data/alchemy_cms.gemspec +2 -2
- data/app/controllers/alchemy/admin/elements_controller.rb +4 -1
- data/app/controllers/alchemy/pages_controller.rb +1 -1
- data/app/models/alchemy/folded_page.rb +5 -0
- data/app/serializers/alchemy/page_tree_serializer.rb +10 -9
- data/app/views/alchemy/admin/elements/index.html.erb +4 -2
- data/app/views/alchemy/admin/elements/new.html.erb +2 -1
- data/app/views/alchemy/admin/pages/index.html.erb +4 -0
- data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +1 -1
- data/lib/alchemy/tasks/tidy.rb +9 -1
- data/lib/alchemy/version.rb +1 -1
- data/lib/tasks/alchemy/tidy.rake +6 -0
- metadata +19 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a09c975c4f08333ff19d8d65ec1ccbffbb9d379b6b51c5ae72394b0f9407ad93
|
4
|
+
data.tar.gz: 6639c81d4b059fc5281de173792aec47281d86958d2aadf30a64e566d193d15e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb6fadb1c5daf32aed6e4e74331b1a30fbb8da2b6d6ca3c638a3e0d6974046ef64de59a478a59702775787f233a8b07c9520d853f1b20f4eae4c811358e2f24a
|
7
|
+
data.tar.gz: 041b34771016cc0d83d445f9bd358a9ec2428e86dc6eb8778bc218497394c4b329bc10dc508d28f4028834841df6756e9233b5079dffe436ed704539e58012ec
|
data/.travis.yml
CHANGED
@@ -6,9 +6,8 @@ cache:
|
|
6
6
|
directories:
|
7
7
|
- "travis_phantomjs"
|
8
8
|
rvm:
|
9
|
-
- 2.
|
10
|
-
- 2.
|
11
|
-
- 2.4.2
|
9
|
+
- 2.3.5
|
10
|
+
- 2.4.2
|
12
11
|
before_install:
|
13
12
|
- "phantomjs --version"
|
14
13
|
- "export PATH=$PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64/bin:$PATH"
|
@@ -22,8 +21,8 @@ before_script: bundle exec rake alchemy:spec:prepare
|
|
22
21
|
script: bundle exec rspec
|
23
22
|
after_success: bundle exec codeclimate-test-reporter
|
24
23
|
env:
|
25
|
-
- DB=mysql
|
26
|
-
- DB=postgresql
|
24
|
+
- DB=mysql
|
25
|
+
- DB=postgresql
|
27
26
|
notifications:
|
28
27
|
slack:
|
29
28
|
secure: QzOFw1Ph69pzwWBFgtIVkOnjbcRxB9HPRQ+RYjK+2tg+fsbiTJ+wYgHcZL49tPYcLAls4kymkFWzWBF3PCAXJMfKgUCqXzdQ2FuJC/JoVRTLll4wDnZFPG33jsm5tVznmycZ3ma4+ZWfJQ+C+elEBOba6v1kG9eGIy6sH2cvXfE=
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,31 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## 4.0.6 (2021-05-28)
|
4
|
+
|
5
|
+
- Allow "data" key for module navigations [#1512](https://github.com/AlchemyCMS/alchemy_cms/pull/1512) ([mamhoff](https://github.com/mamhoff))
|
6
|
+
|
7
|
+
## 4.0.5 (2018-09-17)
|
8
|
+
|
9
|
+
- Do not cache sitemap in Turbolinks [#1463](https://github.com/AlchemyCMS/alchemy_cms/pull/1463) ([tvdeyen](https://github.com/tvdeyen))
|
10
|
+
- Skip folded deeper levels when rendering page tree [#1324](https://github.com/AlchemyCMS/alchemy_cms/pull/1324) ([pascalj](https://github.com/pascalj))
|
11
|
+
|
12
|
+
## 4.0.4 (2018-09-05)
|
13
|
+
|
14
|
+
- Allow Kaminari 1.x [#1467](https://github.com/AlchemyCMS/alchemy_cms/pull/1467) ([tvdeyen](https://github.com/tvdeyen))
|
15
|
+
|
16
|
+
## 4.0.3 (2018-05-14)
|
17
|
+
|
18
|
+
- Add must_revalidate to cache-control header [#1340](https://github.com/AlchemyCMS/alchemy_cms/pull/1340) ([afdev82](https://github.com/afdev82))
|
19
|
+
|
20
|
+
## 4.0.2 (2018-05-08)
|
21
|
+
|
22
|
+
- Fix draggable trash item feature [#1429](https://github.com/AlchemyCMS/alchemy_cms/pull/1429) ([tvdeyen](https://github.com/tvdeyen))
|
23
|
+
- Allow CanCanCan 2.x [#1418](https://github.com/AlchemyCMS/alchemy_cms/pull/1418) ([tvdeyen](https://github.com/tvdeyen))
|
24
|
+
|
25
|
+
## 4.0.1 (2018-04-23)
|
26
|
+
|
27
|
+
- Add more classes to YAML.safe_load [#1414](https://github.com/AlchemyCMS/alchemy_cms/pull/1414) ([tvdeyen](https://github.com/tvdeyen))
|
28
|
+
|
3
29
|
## 4.0.0 (2017-11-06)
|
4
30
|
|
5
31
|
* Fixes image cropping issues [#1320](https://github.com/AlchemyCMS/alchemy_cms/pull/1320) and [#1321](https://github.com/AlchemyCMS/alchemy_cms/pull/1321) by [tvdeyen](https://github.com/tvdeyen)
|
data/alchemy_cms.gemspec
CHANGED
@@ -23,14 +23,14 @@ Gem::Specification.new do |gem|
|
|
23
23
|
gem.add_runtime_dependency 'acts-as-taggable-on', ['~> 5.0']
|
24
24
|
gem.add_runtime_dependency 'awesome_nested_set', ['~> 3.1']
|
25
25
|
gem.add_runtime_dependency 'bourbon', ['~> 4.2']
|
26
|
-
gem.add_runtime_dependency 'cancancan', ['
|
26
|
+
gem.add_runtime_dependency 'cancancan', ['>= 1.9', '< 3.0']
|
27
27
|
gem.add_runtime_dependency 'coffee-rails', ['~> 4.0']
|
28
28
|
gem.add_runtime_dependency 'dragonfly', ['~> 1.0', '>= 1.0.7']
|
29
29
|
gem.add_runtime_dependency 'dragonfly_svg', ['~> 0.0.4']
|
30
30
|
gem.add_runtime_dependency 'handlebars_assets', ['~> 0.23']
|
31
31
|
gem.add_runtime_dependency 'jquery-rails', ['~> 4.0']
|
32
32
|
gem.add_runtime_dependency 'jquery-ui-rails', ['~> 5.0.0']
|
33
|
-
gem.add_runtime_dependency 'kaminari', ['
|
33
|
+
gem.add_runtime_dependency 'kaminari', ['>= 0.15', '< 2.0']
|
34
34
|
gem.add_runtime_dependency 'originator', ['~> 3.1']
|
35
35
|
gem.add_runtime_dependency 'non-stupid-digest-assets', ['~> 1.0.8']
|
36
36
|
gem.add_runtime_dependency 'rails', ['~> 5.0', '< 6.0']
|
@@ -147,7 +147,10 @@ module Alchemy
|
|
147
147
|
|
148
148
|
def paste_element_from_clipboard
|
149
149
|
@source_element = Element.find(element_from_clipboard['id'])
|
150
|
-
new_attributes = {
|
150
|
+
new_attributes = {
|
151
|
+
parent_element_id: create_element_params[:parent_element_id],
|
152
|
+
page_id: @page.id
|
153
|
+
}
|
151
154
|
if @page.can_have_cells?
|
152
155
|
new_attributes = new_attributes.merge({cell_id: find_or_create_cell.try(:id)})
|
153
156
|
end
|
@@ -156,7 +156,7 @@ module Alchemy
|
|
156
156
|
|
157
157
|
def set_expiration_headers
|
158
158
|
if @page.cache_page?
|
159
|
-
expires_in @page.expiration_time, public: !@page.restricted
|
159
|
+
expires_in @page.expiration_time, public: !@page.restricted, must_revalidate: true
|
160
160
|
else
|
161
161
|
expires_now
|
162
162
|
end
|
@@ -15,5 +15,10 @@ module Alchemy
|
|
15
15
|
belongs_to :page, required: true
|
16
16
|
belongs_to :user, required: true,
|
17
17
|
class_name: Alchemy.user_class_name
|
18
|
+
|
19
|
+
def self.folded_for_user(user)
|
20
|
+
return none unless Alchemy.user_class < ActiveRecord::Base
|
21
|
+
where(user: user, folded: true)
|
22
|
+
end
|
18
23
|
end
|
19
24
|
end
|
@@ -10,23 +10,24 @@ module Alchemy
|
|
10
10
|
tree = []
|
11
11
|
path = [{id: object.parent_id, children: tree}]
|
12
12
|
page_list = object.self_and_descendants
|
13
|
-
skip_branch = false
|
14
13
|
base_level = object.level - 1
|
14
|
+
# Load folded pages in advance
|
15
|
+
folded_user_pages = FoldedPage.folded_for_user(opts[:user]).pluck(:page_id)
|
16
|
+
folded_depth = Float::INFINITY
|
15
17
|
|
16
18
|
page_list.each_with_index do |page, i|
|
17
19
|
has_children = page_list[i + 1] && page_list[i + 1].parent_id == page.id
|
18
|
-
folded = has_children &&
|
20
|
+
folded = has_children && folded_user_pages.include?(page.id)
|
19
21
|
|
20
|
-
if
|
21
|
-
next
|
22
|
-
|
23
|
-
|
22
|
+
if page.depth > folded_depth
|
23
|
+
next
|
24
|
+
else
|
25
|
+
folded_depth = Float::INFINITY
|
24
26
|
end
|
25
27
|
|
26
|
-
#
|
27
|
-
# full tree.
|
28
|
+
# If this page is folded, skip all pages that are on a higher level (further down the tree).
|
28
29
|
if folded && !opts[:full]
|
29
|
-
|
30
|
+
folded_depth = page.depth
|
30
31
|
end
|
31
32
|
|
32
33
|
if page.parent_id != path.last[:id]
|
@@ -10,7 +10,9 @@
|
|
10
10
|
</li>
|
11
11
|
<% end %>
|
12
12
|
</ul>
|
13
|
-
<div id="cell_for_other_elements"
|
13
|
+
<div id="cell_for_other_elements"
|
14
|
+
class="sortable_cell for_other_elements_cell"
|
15
|
+
data-droppable-elements="<%= @page.element_names_from_definition.join(' ') %>">
|
14
16
|
<%= render partial: 'alchemy/admin/elements/element',
|
15
17
|
collection: @page.elements.not_trashed.not_in_cell %>
|
16
18
|
</div>
|
@@ -18,7 +20,7 @@
|
|
18
20
|
<%= content_tag :div,
|
19
21
|
id: "cell_#{cell.name}",
|
20
22
|
class: ["sortable_cell", "#{cell.name}_cell"].join(' '),
|
21
|
-
data: {'cell-id' => cell.id, '
|
23
|
+
data: {'cell-id' => cell.id, 'droppable-elements' => cell.element_definitions.join(' ')} do %>
|
22
24
|
<%= render partial: 'alchemy/admin/elements/element', collection: elements %>
|
23
25
|
<% end %>
|
24
26
|
<% end %>
|
@@ -11,7 +11,8 @@
|
|
11
11
|
</div>
|
12
12
|
<div id="paste_element_tab">
|
13
13
|
<%= alchemy_form_for([:admin, @element]) do |f| %>
|
14
|
-
<%= f.hidden_field
|
14
|
+
<%= f.hidden_field :page_id %>
|
15
|
+
<%= f.hidden_field :parent_element_id, value: @parent_element.try(:id) %>
|
15
16
|
<div class="input select">
|
16
17
|
<label for="paste_from_clipboard" class="control-label"><%= Alchemy.t("Element") %></label>
|
17
18
|
<%= select_tag 'paste_from_clipboard',
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<% if can? *navigate_module(navigation) %>
|
2
|
-
<%= content_tag :div, class: main_navigation_css_classes(navigation) do %>
|
2
|
+
<%= content_tag :div, class: main_navigation_css_classes(navigation), data: navigation["data"] do %>
|
3
3
|
<%= link_to url_for_module(alchemy_module) do %>
|
4
4
|
<% if navigation["image"] %>
|
5
5
|
<%= image_tag(navigation["image"]) %>
|
data/lib/alchemy/tasks/tidy.rb
CHANGED
@@ -117,12 +117,20 @@ module Alchemy
|
|
117
117
|
end
|
118
118
|
end
|
119
119
|
|
120
|
+
def remove_duplicate_folded_pages
|
121
|
+
Alchemy::FoldedPage.select(:page_id, :user_id).group(:page_id, :user_id).having("count(*) > 1").each do |duplicate_page|
|
122
|
+
duplicate_page_ids = Alchemy::FoldedPage.where(duplicate_page.attributes.except("id")).pluck(:id)
|
123
|
+
duplicate_page_ids_except_oldest = duplicate_page_ids.reject { |i| i == duplicate_page_ids.min }
|
124
|
+
Alchemy::FoldedPage.where(id: duplicate_page_ids_except_oldest).delete_all
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
120
128
|
private
|
121
129
|
|
122
130
|
def destroy_orphaned_records(records, class_name)
|
123
131
|
records.each do |record|
|
124
132
|
log "Destroy orphaned #{class_name}: #{record.inspect}"
|
125
|
-
record.destroy
|
133
|
+
record.reload.try(:destroy)
|
126
134
|
end
|
127
135
|
end
|
128
136
|
end
|
data/lib/alchemy/version.rb
CHANGED
data/lib/tasks/alchemy/tidy.rake
CHANGED
@@ -8,6 +8,7 @@ namespace :alchemy do
|
|
8
8
|
Rake::Task['alchemy:tidy:element_positions'].invoke
|
9
9
|
Rake::Task['alchemy:tidy:content_positions'].invoke
|
10
10
|
Rake::Task['alchemy:tidy:remove_orphaned_records'].invoke
|
11
|
+
Rake::Task['alchemy:tidy:remove_duplicate_folded_pages'].invoke
|
11
12
|
end
|
12
13
|
|
13
14
|
desc "Creates missing cells for pages."
|
@@ -56,5 +57,10 @@ namespace :alchemy do
|
|
56
57
|
task remove_orphaned_contents: [:environment] do
|
57
58
|
Alchemy::Tidy.remove_orphaned_contents
|
58
59
|
end
|
60
|
+
|
61
|
+
desc "Remove duplicate folded pages."
|
62
|
+
task remove_duplicate_folded_pages: [:environment] do
|
63
|
+
Alchemy::Tidy.remove_duplicate_folded_pages
|
64
|
+
end
|
59
65
|
end
|
60
66
|
end
|
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: 4.0.
|
4
|
+
version: 4.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas von Deyen
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date:
|
16
|
+
date: 2021-05-28 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: active_model_serializers
|
@@ -89,16 +89,22 @@ dependencies:
|
|
89
89
|
name: cancancan
|
90
90
|
requirement: !ruby/object:Gem::Requirement
|
91
91
|
requirements:
|
92
|
-
- - "
|
92
|
+
- - ">="
|
93
93
|
- !ruby/object:Gem::Version
|
94
94
|
version: '1.9'
|
95
|
+
- - "<"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '3.0'
|
95
98
|
type: :runtime
|
96
99
|
prerelease: false
|
97
100
|
version_requirements: !ruby/object:Gem::Requirement
|
98
101
|
requirements:
|
99
|
-
- - "
|
102
|
+
- - ">="
|
100
103
|
- !ruby/object:Gem::Version
|
101
104
|
version: '1.9'
|
105
|
+
- - "<"
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '3.0'
|
102
108
|
- !ruby/object:Gem::Dependency
|
103
109
|
name: coffee-rails
|
104
110
|
requirement: !ruby/object:Gem::Requirement
|
@@ -193,16 +199,22 @@ dependencies:
|
|
193
199
|
name: kaminari
|
194
200
|
requirement: !ruby/object:Gem::Requirement
|
195
201
|
requirements:
|
196
|
-
- - "
|
202
|
+
- - ">="
|
197
203
|
- !ruby/object:Gem::Version
|
198
204
|
version: '0.15'
|
205
|
+
- - "<"
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: '2.0'
|
199
208
|
type: :runtime
|
200
209
|
prerelease: false
|
201
210
|
version_requirements: !ruby/object:Gem::Requirement
|
202
211
|
requirements:
|
203
|
-
- - "
|
212
|
+
- - ">="
|
204
213
|
- !ruby/object:Gem::Version
|
205
214
|
version: '0.15'
|
215
|
+
- - "<"
|
216
|
+
- !ruby/object:Gem::Version
|
217
|
+
version: '2.0'
|
206
218
|
- !ruby/object:Gem::Dependency
|
207
219
|
name: originator
|
208
220
|
requirement: !ruby/object:Gem::Requirement
|
@@ -1001,8 +1013,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1001
1013
|
version: '0'
|
1002
1014
|
requirements:
|
1003
1015
|
- ImageMagick (libmagick), v6.6 or greater.
|
1004
|
-
|
1005
|
-
rubygems_version: 2.7.6
|
1016
|
+
rubygems_version: 3.1.4
|
1006
1017
|
signing_key:
|
1007
1018
|
specification_version: 4
|
1008
1019
|
summary: A powerful, userfriendly and flexible CMS for Rails 4
|