alchemy_cms 7.2.2 → 7.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -0
- data/app/assets/stylesheets/alchemy/dialogs.scss +8 -4
- data/app/assets/stylesheets/alchemy/errors.scss +4 -0
- data/app/controllers/alchemy/admin/layoutpages_controller.rb +19 -0
- data/app/controllers/alchemy/admin/resources_controller.rb +7 -4
- data/app/controllers/alchemy/messages_controller.rb +1 -1
- data/app/controllers/concerns/alchemy/admin/current_language.rb +10 -0
- data/app/javascript/alchemy_admin/picture_editors.js +3 -3
- data/app/views/alchemy/admin/layoutpages/edit.html.erb +1 -1
- data/app/views/alchemy/admin/pages/unlock.js.erb +1 -1
- data/app/views/alchemy/admin/partials/_autocomplete_tag_list.html.erb +1 -1
- data/app/views/alchemy/admin/resources/_per_page_select.html.erb +1 -1
- data/app/views/layouts/alchemy/admin.html.erb +1 -0
- data/config/routes.rb +1 -1
- data/lib/alchemy/permissions.rb +1 -1
- data/lib/alchemy/test_support/current_language_shared_examples.rb +33 -0
- data/lib/alchemy/version.rb +1 -1
- data/lib/tasks/alchemy/tidy.rake +0 -1
- data/package.json +1 -1
- data/vendor/javascript/tinymce.min.js +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3f9a554636616ea87a438350ad7e91462a8b2196047504d81669782b8d08a6d8
|
4
|
+
data.tar.gz: 6897d00c7e23af4de0023fb6c2f63819e7de68a549274afb5c258463e3924482
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e446096fe1d3e1aa5dcc327ad1b7d779447b668c7294d83a4789f2694a0c7e90ee053c422e17bd8168bcaf420a0909b3614ec3302c33986235ef02459eb29074
|
7
|
+
data.tar.gz: 52851127d29b47907b9c9ea25ead515bb94060962585e7c70afc65f2cb426c7dfc63d65263e16d21e157b0f1786391fea1410327d8669bee9b5b7a3aa3c3897a
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,23 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 7.2.4 (2024-08-10)
|
4
|
+
|
5
|
+
- [7.2-stable] Fix margin of alchemy-message in alchemy-dialog [#2993](https://github.com/AlchemyCMS/alchemy_cms/pull/2993) ([tvdeyen](https://github.com/tvdeyen))
|
6
|
+
- [7.2-stable] fix PictureEditor defaultCropSize [#2992](https://github.com/AlchemyCMS/alchemy_cms/pull/2992) ([alchemycms-bot](https://github.com/alchemycms-bot))
|
7
|
+
- [7.2] Resource Controller: Allow additional Ransack filters [#2985](https://github.com/AlchemyCMS/alchemy_cms/pull/2985) ([mamhoff](https://github.com/mamhoff))
|
8
|
+
- [7.2-stable] Fix combining search filters and pagination [#2982](https://github.com/AlchemyCMS/alchemy_cms/pull/2982) ([alchemycms-bot](https://github.com/alchemycms-bot))
|
9
|
+
- [7.2-stable] Clear current language when switching sites [#2974](https://github.com/AlchemyCMS/alchemy_cms/pull/2974) ([alchemycms-bot](https://github.com/alchemycms-bot))
|
10
|
+
- [7.2-stable] Update _autocomplete_tag_list.html.erb [#2966](https://github.com/AlchemyCMS/alchemy_cms/pull/2966) ([alchemycms-bot](https://github.com/alchemycms-bot))
|
11
|
+
- [7.2-stable] Remove call to missing content_positions task [#2963](https://github.com/AlchemyCMS/alchemy_cms/pull/2963) ([alchemycms-bot](https://github.com/alchemycms-bot))
|
12
|
+
- [7.2-stable] Fix re-render of layoutpages form if validation fails [#2954](https://github.com/AlchemyCMS/alchemy_cms/pull/2954) ([alchemycms-bot](https://github.com/alchemycms-bot))
|
13
|
+
|
14
|
+
## 7.2.3 (2024-06-27)
|
15
|
+
|
16
|
+
- [7.2-stable] Disable Turbo Prefetch in Admin [#2947](https://github.com/AlchemyCMS/alchemy_cms/pull/2947) ([tvdeyen](https://github.com/tvdeyen))
|
17
|
+
- [7.2-stable] Prevent Javascript error if the page will be unlocked [#2946](https://github.com/AlchemyCMS/alchemy_cms/pull/2946) ([alchemycms-bot](https://github.com/alchemycms-bot))
|
18
|
+
- [7.2-stable] fix(ContactMessages): Use alchemy route proxy [#2929](https://github.com/AlchemyCMS/alchemy_cms/pull/2929) ([alchemycms-bot](https://github.com/alchemycms-bot))
|
19
|
+
- [7.2-stable] [js] Update tinymce 7.1.0 → 7.1.1 (patch) [#2921](https://github.com/AlchemyCMS/alchemy_cms/pull/2921) ([alchemycms-bot](https://github.com/alchemycms-bot))
|
20
|
+
|
3
21
|
## 7.2.2 (2024-06-04)
|
4
22
|
|
5
23
|
- [7.2-stable] fix(RoutingConstraints): Allow Turbo Stream requests [#2916](https://github.com/AlchemyCMS/alchemy_cms/pull/2916) ([alchemycms-bot](https://github.com/alchemycms-bot))
|
@@ -82,13 +82,15 @@ $dialog-transition-duration: 150ms;
|
|
82
82
|
}
|
83
83
|
|
84
84
|
form,
|
85
|
-
.info.message
|
85
|
+
.info.message,
|
86
|
+
alchemy-message[type="info"] {
|
86
87
|
position: absolute;
|
87
88
|
right: 2 * $default-padding;
|
88
89
|
width: 256px;
|
89
90
|
}
|
90
91
|
|
91
|
-
.info.message
|
92
|
+
.info.message,
|
93
|
+
alchemy-message[type="info"] {
|
92
94
|
top: 2 * $default-padding;
|
93
95
|
margin: 0 0 0 8px;
|
94
96
|
padding: 0 8px 0 32px;
|
@@ -158,14 +160,16 @@ $dialog-transition-duration: 150ms;
|
|
158
160
|
position: relative;
|
159
161
|
color: $text-color;
|
160
162
|
|
161
|
-
.message
|
163
|
+
.message,
|
164
|
+
alchemy-message {
|
162
165
|
margin: 8px;
|
163
166
|
}
|
164
167
|
|
165
168
|
&.padded {
|
166
169
|
padding: 4 * $default-padding;
|
167
170
|
|
168
|
-
.message
|
171
|
+
.message,
|
172
|
+
alchemy-message {
|
169
173
|
margin: 0 0 8px 0;
|
170
174
|
}
|
171
175
|
}
|
@@ -17,6 +17,25 @@ module Alchemy
|
|
17
17
|
def edit
|
18
18
|
@page = Page.find(params[:id])
|
19
19
|
end
|
20
|
+
|
21
|
+
def update
|
22
|
+
@page = Page.find(params[:id])
|
23
|
+
if @page.update(page_params)
|
24
|
+
@notice = Alchemy.t("Page saved", name: @page.name)
|
25
|
+
render "alchemy/admin/pages/update"
|
26
|
+
else
|
27
|
+
render :edit, status: :unprocessable_entity
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def page_params
|
34
|
+
params.require(:page).permit(
|
35
|
+
:name,
|
36
|
+
:tag_list
|
37
|
+
)
|
38
|
+
end
|
20
39
|
end
|
21
40
|
end
|
22
41
|
end
|
@@ -200,10 +200,7 @@ module Alchemy
|
|
200
200
|
def common_search_filter_includes
|
201
201
|
search_filters = [
|
202
202
|
{
|
203
|
-
q: [
|
204
|
-
resource_handler.search_field_name,
|
205
|
-
:s
|
206
|
-
]
|
203
|
+
q: [:s] + permitted_ransack_search_fields
|
207
204
|
},
|
208
205
|
:tagged_with,
|
209
206
|
:page,
|
@@ -219,6 +216,12 @@ module Alchemy
|
|
219
216
|
search_filters
|
220
217
|
end
|
221
218
|
|
219
|
+
def permitted_ransack_search_fields
|
220
|
+
[
|
221
|
+
resource_handler.search_field_name
|
222
|
+
]
|
223
|
+
end
|
224
|
+
|
222
225
|
def items_per_page
|
223
226
|
cookies[:alchemy_items_per_page] =
|
224
227
|
params[:per_page] || cookies[:alchemy_items_per_page] || Alchemy::Config.get(:items_per_page)
|
@@ -6,11 +6,21 @@ module Alchemy
|
|
6
6
|
extend ActiveSupport::Concern
|
7
7
|
|
8
8
|
included do
|
9
|
+
# This needs to happen before BaseController#current_alchemy_site sets the session value.
|
10
|
+
prepend_before_action :clear_current_language_from_session, if: :switching_site?, only: :index
|
9
11
|
before_action :load_current_language
|
10
12
|
end
|
11
13
|
|
12
14
|
private
|
13
15
|
|
16
|
+
def switching_site?
|
17
|
+
params[:site_id].present? && (params[:site_id] != session[:alchemy_site_id]&.to_s)
|
18
|
+
end
|
19
|
+
|
20
|
+
def clear_current_language_from_session
|
21
|
+
session.delete(:alchemy_language_id)
|
22
|
+
end
|
23
|
+
|
14
24
|
def load_current_language
|
15
25
|
@current_language = if session[:alchemy_language_id].present?
|
16
26
|
set_alchemy_language(session[:alchemy_language_id])
|
@@ -8,7 +8,7 @@ const UPDATE_DELAY = 125
|
|
8
8
|
const IMAGE_PLACEHOLDER = '<alchemy-icon name="image"></alchemy-icon>'
|
9
9
|
const THUMBNAIL_SIZE = "160x120"
|
10
10
|
|
11
|
-
class PictureEditor {
|
11
|
+
export class PictureEditor {
|
12
12
|
constructor(container) {
|
13
13
|
this.container = container
|
14
14
|
this.cropFromField = container.querySelector("[data-crop-from]")
|
@@ -132,10 +132,10 @@ class PictureEditor {
|
|
132
132
|
if (!this.imageCropperEnabled) return []
|
133
133
|
|
134
134
|
const mask = this.targetSize.split("x").map((n) => parseInt(n))
|
135
|
-
const zoom = max(
|
135
|
+
const zoom = max(
|
136
136
|
mask[0] / this.imageFileWidth,
|
137
137
|
mask[1] / this.imageFileHeight
|
138
|
-
|
138
|
+
)
|
139
139
|
|
140
140
|
return [Math.round(mask[0] / zoom), Math.round(mask[1] / zoom)]
|
141
141
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<%= alchemy_form_for [:admin, @page], class: 'edit_page' do |f| %>
|
1
|
+
<%= alchemy_form_for [:admin, @page], url: alchemy.admin_layoutpage_path(@page), class: 'edit_page' do |f| %>
|
2
2
|
<%= f.input :name, autofocus: true %>
|
3
3
|
<%= render Alchemy::Admin::TagsAutocomplete.new do %>
|
4
4
|
<%= f.input :tag_list, input_html: { value: f.object.tag_list.join(",") } %>
|
@@ -15,6 +15,6 @@
|
|
15
15
|
}
|
16
16
|
locked_page_icon.outerHTML = locked_page_icon_content
|
17
17
|
}
|
18
|
-
document.querySelector("#page_<%= @page.id -%> .page_status.locked")
|
18
|
+
document.querySelector("#page_<%= @page.id -%> .page_status.locked")?.remove()
|
19
19
|
Alchemy.growl('<%= flash[:notice] -%>')
|
20
20
|
})()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<%= form_tag url_for, method: :get, class: 'per-page-select-form' do |f| %>
|
2
2
|
<% search_filter_params.reject { |k, _| k == 'page' || k == 'per_page' }.each do |key, value| %>
|
3
|
-
<% if value.
|
3
|
+
<% if value.respond_to?(:keys) %>
|
4
4
|
<% value.each do |k, v| %>
|
5
5
|
<%= hidden_field_tag "#{key}[#{k}]", v, id: nil %>
|
6
6
|
<% end %>
|
@@ -8,6 +8,7 @@
|
|
8
8
|
<%= csrf_meta_tag %>
|
9
9
|
<meta name="robots" content="noindex">
|
10
10
|
<meta name="alchemy-icon-sprite" content="<%= asset_path("remixicon.symbol.svg") %>">
|
11
|
+
<meta name="turbo-prefetch" content="false">
|
11
12
|
<%= stylesheet_link_tag('alchemy/admin/all', media: 'screen', 'data-turbo-track' => true) %>
|
12
13
|
<%= stylesheet_link_tag('alchemy/print', media: 'print', 'data-turbo-track' => true) %>
|
13
14
|
<%= yield :stylesheets %>
|
data/config/routes.rb
CHANGED
data/lib/alchemy/permissions.rb
CHANGED
@@ -96,7 +96,7 @@ module Alchemy
|
|
96
96
|
can :leave, :alchemy_admin
|
97
97
|
can [:info, :help], :alchemy_admin_dashboard
|
98
98
|
can :manage, :alchemy_admin_clipboard
|
99
|
-
can :
|
99
|
+
can :update, :alchemy_admin_layoutpages
|
100
100
|
can :tree, :alchemy_admin_pages
|
101
101
|
|
102
102
|
# Resources
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.shared_examples_for "a controller that loads current language" do |args|
|
4
|
+
context "when session has current language id key" do
|
5
|
+
let!(:site_1) { create(:alchemy_site) }
|
6
|
+
let!(:site_1_default_language) { create :alchemy_language, site: site_1, default: true }
|
7
|
+
let!(:another_site_1_language) { create :alchemy_language, site: site_1, code: :de }
|
8
|
+
let(:site_2) { create :alchemy_site, host: "another.host", languages: [build(:alchemy_language, code: :en), build(:alchemy_language, code: :de)] }
|
9
|
+
|
10
|
+
context "on index action" do
|
11
|
+
context "when switching the current site" do
|
12
|
+
before do
|
13
|
+
session[:alchemy_site_id] = site_1.id
|
14
|
+
session[:alchemy_language_id] = another_site_1_language.id
|
15
|
+
end
|
16
|
+
|
17
|
+
it "sets @current_language to the new site default language" do
|
18
|
+
get :index, params: {site_id: site_2.id}
|
19
|
+
expect(assigns(:current_language)).to eq site_2.default_language
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "when no language to set" do
|
24
|
+
it "shows flash warning with redirect" do
|
25
|
+
Alchemy::Language.destroy_all
|
26
|
+
get :index, params: {site_id: site_1.id}
|
27
|
+
expect(flash[:warning]).to eq Alchemy.t("Please create a language first.")
|
28
|
+
expect(response).to redirect_to admin_languages_path
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/alchemy/version.rb
CHANGED
data/lib/tasks/alchemy/tidy.rake
CHANGED
@@ -7,7 +7,6 @@ namespace :alchemy do
|
|
7
7
|
desc "Tidy up Alchemy database."
|
8
8
|
task :up do
|
9
9
|
Rake::Task["alchemy:tidy:element_positions"].invoke
|
10
|
-
Rake::Task["alchemy:tidy:content_positions"].invoke
|
11
10
|
Rake::Task["alchemy:tidy:remove_orphaned_records"].invoke
|
12
11
|
Rake::Task["alchemy:tidy:remove_trashed_elements"].invoke
|
13
12
|
Rake::Task["alchemy:tidy:remove_duplicate_legacy_urls"].invoke
|