alchemy_cms 4.0.1 → 4.0.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|