alchemy_cms 6.0.0.pre.rc4 → 6.0.0.pre.rc7
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 +8 -15
- data/.github/workflows/stale.yml +21 -7
- data/.gitignore +0 -1
- data/.rspec +1 -0
- data/CHANGELOG.md +87 -0
- data/Gemfile +7 -6
- data/Rakefile +5 -1
- data/alchemy_cms.gemspec +2 -2
- data/app/assets/javascripts/alchemy/admin.js +0 -2
- data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +6 -1
- data/app/assets/javascripts/alchemy/page_select.js +13 -8
- data/app/assets/javascripts/alchemy/templates/index.js +1 -0
- data/app/assets/javascripts/alchemy/templates/page.hbs +17 -7
- data/app/assets/javascripts/alchemy/templates/page_folder.hbs +3 -0
- data/app/assets/stylesheets/alchemy/archive.scss +4 -0
- data/app/assets/stylesheets/alchemy/page-select.scss +29 -4
- data/app/assets/stylesheets/alchemy/sitemap.scss +9 -7
- data/app/controllers/alchemy/admin/pages_controller.rb +10 -15
- data/app/controllers/alchemy/api/pages_controller.rb +14 -4
- data/app/models/alchemy/ingredient.rb +6 -1
- data/app/models/alchemy/page.rb +9 -3
- data/app/serializers/alchemy/page_serializer.rb +7 -1
- data/app/serializers/alchemy/page_tree_serializer.rb +3 -3
- data/app/services/alchemy/tag_validations.rb +21 -0
- data/app/views/alchemy/admin/pages/_form.html.erb +19 -0
- data/app/views/alchemy/admin/pages/_new_page_form.html.erb +16 -5
- data/app/views/alchemy/admin/pages/_page.html.erb +111 -133
- data/app/views/alchemy/admin/pages/_sitemap.html.erb +10 -16
- data/app/views/alchemy/admin/pages/_toolbar.html.erb +0 -12
- data/app/views/alchemy/admin/pages/edit.html.erb +1 -1
- data/app/views/alchemy/admin/pages/index.html.erb +1 -1
- data/app/views/alchemy/admin/pages/update.js.erb +7 -5
- data/app/views/alchemy/admin/partials/_routes.html.erb +8 -1
- data/app/views/alchemy/essences/_essence_page_editor.html.erb +1 -1
- data/config/locales/alchemy.en.yml +0 -4
- data/config/routes.rb +4 -3
- data/db/migrate/20200226213334_alchemy_four_point_four.rb +30 -30
- data/db/migrate/20200423073425_create_alchemy_essence_nodes.rb +1 -1
- data/db/migrate/20200504210159_remove_site_id_from_nodes.rb +1 -1
- data/db/migrate/20200505215518_add_language_id_foreign_key_to_alchemy_pages.rb +1 -1
- data/db/migrate/20200511113603_add_menu_type_to_alchemy_nodes.rb +1 -1
- data/db/migrate/20200514091507_make_page_layoutpage_null_false.rb +1 -1
- data/db/migrate/20200519073500_remove_visible_from_alchemy_pages.rb +1 -1
- data/db/migrate/20200617110713_create_alchemy_picture_thumbs.rb +1 -1
- data/db/migrate/20200907111332_remove_tri_state_booleans.rb +1 -1
- data/db/migrate/20201207131309_create_page_versions.rb +1 -1
- data/db/migrate/20201207135820_add_page_version_id_to_alchemy_elements.rb +1 -1
- data/lib/alchemy/engine.rb +5 -11
- data/lib/alchemy/permissions.rb +0 -1
- data/lib/alchemy/test_support/shared_ingredient_examples.rb +4 -2
- data/lib/alchemy/version.rb +1 -1
- data/lib/generators/alchemy/install/install_generator.rb +6 -1
- data/package/admin.js +5 -1
- data/package/src/image_loader.js +4 -2
- data/package/src/node_tree.js +13 -6
- data/package/src/page_publication_fields.js +28 -0
- data/package/src/page_sorter.js +62 -0
- data/package/src/picture_editors.js +4 -4
- data/package/src/sitemap.js +148 -0
- data/package/src/utils/__tests__/ajax.spec.js +52 -16
- data/package/src/utils/ajax.js +12 -0
- data/package.json +1 -1
- metadata +24 -24
- data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +0 -24
- data/app/assets/javascripts/alchemy/alchemy.sitemap.js.coffee +0 -119
- data/app/views/alchemy/admin/pages/fold.js.erb +0 -2
- data/app/views/alchemy/admin/pages/sort.html.erb +0 -19
- data/lib/alchemy/error_tracking/airbrake_handler.rb +0 -13
- data/vendor/assets/javascripts/jquery_plugins/jquery.ui.nestedSortable.js +0 -434
data/app/models/alchemy/page.rb
CHANGED
@@ -144,7 +144,7 @@ module Alchemy
|
|
144
144
|
after_update :create_legacy_url,
|
145
145
|
if: :saved_change_to_urlname?
|
146
146
|
|
147
|
-
after_update
|
147
|
+
after_update :touch_nodes
|
148
148
|
|
149
149
|
# Concerns
|
150
150
|
include PageScopes
|
@@ -245,8 +245,8 @@ module Alchemy
|
|
245
245
|
|
246
246
|
def copy_and_paste(source, new_parent, new_name)
|
247
247
|
page = copy(source, {
|
248
|
-
|
249
|
-
language: new_parent
|
248
|
+
parent: new_parent,
|
249
|
+
language: new_parent&.language,
|
250
250
|
name: new_name,
|
251
251
|
title: new_name,
|
252
252
|
})
|
@@ -448,6 +448,7 @@ module Alchemy
|
|
448
448
|
next if child == new_parent
|
449
449
|
|
450
450
|
new_child = Page.copy(child, {
|
451
|
+
parent_id: new_parent.id,
|
451
452
|
language_id: new_parent.language_id,
|
452
453
|
language_code: new_parent.language_code,
|
453
454
|
})
|
@@ -603,5 +604,10 @@ module Alchemy
|
|
603
604
|
def create_legacy_url
|
604
605
|
legacy_urls.find_or_create_by(urlname: urlname_before_last_save)
|
605
606
|
end
|
607
|
+
|
608
|
+
def touch_nodes
|
609
|
+
ids = node_ids + nodes.flat_map { |n| n.ancestors.pluck(:id) }
|
610
|
+
Node.where(id: ids).touch_all
|
611
|
+
end
|
606
612
|
end
|
607
613
|
end
|
@@ -14,8 +14,14 @@ module Alchemy
|
|
14
14
|
:created_at,
|
15
15
|
:updated_at,
|
16
16
|
:status,
|
17
|
-
:url_path
|
17
|
+
:url_path,
|
18
|
+
:parent_id
|
18
19
|
|
19
20
|
has_many :elements
|
21
|
+
|
22
|
+
with_options if: -> { scope.can?(:edit_content, object) } do
|
23
|
+
belongs_to :site
|
24
|
+
belongs_to :language
|
25
|
+
end
|
20
26
|
end
|
21
27
|
end
|
@@ -3,13 +3,13 @@
|
|
3
3
|
module Alchemy
|
4
4
|
class PageTreeSerializer < BaseSerializer
|
5
5
|
def attributes
|
6
|
-
{"pages" => nil}
|
6
|
+
{ "pages" => nil }
|
7
7
|
end
|
8
8
|
|
9
9
|
def pages
|
10
10
|
tree = []
|
11
|
-
path = [{id: object.parent_id, children: tree}]
|
12
|
-
page_list = object.self_and_descendants
|
11
|
+
path = [{ id: object.parent_id, children: tree }]
|
12
|
+
page_list = object.self_and_descendants.includes(:public_version, { language: :site })
|
13
13
|
base_level = object.level - 1
|
14
14
|
# Load folded pages in advance
|
15
15
|
folded_user_pages = FoldedPage.folded_for_user(opts[:user]).pluck(:page_id)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Alchemy
|
4
|
+
class TagValidations
|
5
|
+
def self.call(klass)
|
6
|
+
new(klass).call
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(klass)
|
10
|
+
@klass = klass
|
11
|
+
end
|
12
|
+
|
13
|
+
def call
|
14
|
+
klass.validates :name, presence: true, uniqueness: { case_sensitive: true }
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_reader :klass
|
20
|
+
end
|
21
|
+
end
|
@@ -1,4 +1,8 @@
|
|
1
1
|
<%= alchemy_form_for [:admin, @page], class: 'edit_page' do |f| %>
|
2
|
+
<% unless @page.language_root? || @page.layoutpage %>
|
3
|
+
<%= f.input :parent_id, required: true, input_html: { class: 'alchemy_selectbox' } %>
|
4
|
+
<% end %>
|
5
|
+
|
2
6
|
<div class="input check_boxes">
|
3
7
|
<label class="control-label"><%= Alchemy.t(:page_status) %></label>
|
4
8
|
<div class="control_group">
|
@@ -37,3 +41,18 @@
|
|
37
41
|
|
38
42
|
<%= f.submit Alchemy.t(:save) %>
|
39
43
|
<% end %>
|
44
|
+
|
45
|
+
<script>
|
46
|
+
$('#page_parent_id').alchemyPageSelect({
|
47
|
+
placeholder: "<%= Alchemy.t(:search_page) %>",
|
48
|
+
url: "<%= alchemy.api_pages_path %>",
|
49
|
+
allowClear: false,
|
50
|
+
<% if @page.parent %>
|
51
|
+
initialSelection: {
|
52
|
+
id: <%= @page.parent.id %>,
|
53
|
+
text: "<%= @page.parent.name %>",
|
54
|
+
url_path: "<%= @page.parent.url_path %>"
|
55
|
+
}
|
56
|
+
<% end %>
|
57
|
+
})
|
58
|
+
</script>
|
@@ -3,11 +3,7 @@
|
|
3
3
|
<%= f.hidden_field(:parent_id) %>
|
4
4
|
<% else %>
|
5
5
|
<% @page.parent = @current_language.root_page %>
|
6
|
-
<%= f.input :parent_id,
|
7
|
-
collection: @current_language.pages.contentpages,
|
8
|
-
label_method: :name,
|
9
|
-
value_method: :id,
|
10
|
-
input_html: { class: "alchemy_selectbox" } %>
|
6
|
+
<%= f.input :parent_id, as: :string, input_html: { class: 'alchemy_selectbox' } %>
|
11
7
|
<% end %>
|
12
8
|
<%= f.hidden_field(:language_id) %>
|
13
9
|
<%= f.hidden_field(:layoutpage) %>
|
@@ -21,3 +17,18 @@
|
|
21
17
|
<%= f.input :name %>
|
22
18
|
<%= f.submit Alchemy.t(:create) %>
|
23
19
|
<% end %>
|
20
|
+
|
21
|
+
<script>
|
22
|
+
$('input[type="text"]#page_parent_id').alchemyPageSelect({
|
23
|
+
placeholder: "<%= Alchemy.t(:search_page) %>",
|
24
|
+
url: "<%= alchemy.api_pages_path %>",
|
25
|
+
allowClear: false,
|
26
|
+
<% if @page.parent %>
|
27
|
+
initialSelection: {
|
28
|
+
id: <%= @page.parent.id %>,
|
29
|
+
text: "<%= @page.parent.name %>",
|
30
|
+
url_path: "<%= @page.parent.url_path %>"
|
31
|
+
}
|
32
|
+
<% end %>
|
33
|
+
})
|
34
|
+
</script>
|
@@ -1,24 +1,7 @@
|
|
1
|
-
<li id="page_{{id}}" class="
|
1
|
+
<li id="page_{{id}}" class="sitemap-item {{page_layout}}" data-slug="{{slug}}" data-restricted="{{restricted}}" data-page-id="{{id}}" data-folded="{{folded}}">
|
2
2
|
<div class="sitemap_page{{#if locked}} locked{{/if}}" name="{{name}}">
|
3
|
-
<div class="sitemap_left_images
|
4
|
-
|
5
|
-
{{#unless root_or_leaf}}
|
6
|
-
<%= link_to(
|
7
|
-
alchemy.fold_admin_page_path(page),
|
8
|
-
remote: true,
|
9
|
-
method: :post,
|
10
|
-
class: "page_folder",
|
11
|
-
title: "{{#if folded}}#{Alchemy.t('Show childpages')}{{else}}#{Alchemy.t('Hide childpages')}{{/if}}",
|
12
|
-
id: "fold_button_{{id}}"
|
13
|
-
) do %>
|
14
|
-
{{#if folded}}
|
15
|
-
<i class="far fa-plus-square fa-fw"></i>
|
16
|
-
{{else}}
|
17
|
-
<i class="far fa-minus-square fa-fw"></i>
|
18
|
-
{{/if}}
|
19
|
-
<% end %>
|
20
|
-
{{/unless}}
|
21
|
-
<% end %>
|
3
|
+
<div class="sitemap_left_images">
|
4
|
+
<span class="page_folder"></span>
|
22
5
|
{{#if definition_missing}}
|
23
6
|
<%= page_layout_missing_warning %>
|
24
7
|
{{else}}
|
@@ -31,121 +14,121 @@
|
|
31
14
|
</span>
|
32
15
|
</span>
|
33
16
|
{{else}}
|
17
|
+
<span class="{{#unless root}}handle{{/unless}}">
|
34
18
|
<i class="icon far fa-file fa-lg"></i>
|
19
|
+
</span>
|
35
20
|
{{/if}}
|
36
21
|
{{else}}
|
37
22
|
<span class="with-hint">
|
38
23
|
<i class="icon fas fa-ban fa-fw"></i>
|
39
24
|
<span class="hint-bubble">
|
40
|
-
<%= Alchemy.t(
|
25
|
+
<%= Alchemy.t("Your user role does not allow you to edit this page") %>
|
41
26
|
</span>
|
42
27
|
</span>
|
43
28
|
{{/if}}
|
44
29
|
{{/if}}
|
45
30
|
</div>
|
46
31
|
<div class="sitemap_right_tools">
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
</div>
|
146
|
-
<%- end -%>
|
32
|
+
{{#if permissions.info}}
|
33
|
+
<div class="button_with_label sitemap_tool">
|
34
|
+
<%= link_to_dialog(
|
35
|
+
render_icon("info-circle"),
|
36
|
+
alchemy.info_admin_page_path(id: "__ID__"),
|
37
|
+
{
|
38
|
+
title: Alchemy.t(:page_infos),
|
39
|
+
size: "520x290"
|
40
|
+
}
|
41
|
+
) %>
|
42
|
+
<label class="center"><%= Alchemy.t(:page_infos) %></label>
|
43
|
+
{{else}}
|
44
|
+
<div class="sitemap_tool disabled with-hint">
|
45
|
+
<%= render_icon("info-circle") %>
|
46
|
+
<span class="hint-bubble">
|
47
|
+
<%= Alchemy.t("Your user role does not allow you to edit this page") %>
|
48
|
+
</span>
|
49
|
+
{{/if}}
|
50
|
+
</div>
|
51
|
+
{{#if permissions.configure}}
|
52
|
+
<div class="button_with_label sitemap_tool">
|
53
|
+
<%= link_to_dialog(
|
54
|
+
render_icon(:cog),
|
55
|
+
alchemy.configure_admin_page_path(id: "__ID__"),
|
56
|
+
{
|
57
|
+
title: Alchemy.t(:edit_page_properties),
|
58
|
+
size: "450x680"
|
59
|
+
}
|
60
|
+
) -%>
|
61
|
+
<label class="center"><%= Alchemy.t(:edit_page_properties) %></label>
|
62
|
+
{{else}}
|
63
|
+
<div class="sitemap_tool disabled with-hint">
|
64
|
+
<%= render_icon(:cog) %>
|
65
|
+
<span class="hint-bubble">
|
66
|
+
<%= Alchemy.t("Your user role does not allow you to edit this page") %>
|
67
|
+
</span>
|
68
|
+
{{/if}}
|
69
|
+
</div>
|
70
|
+
{{#if permissions.copy}}
|
71
|
+
<div class="button_with_label sitemap_tool">
|
72
|
+
<%= link_to(
|
73
|
+
render_icon(:copy),
|
74
|
+
alchemy.insert_admin_clipboard_path(
|
75
|
+
remarkable_type: :pages,
|
76
|
+
remarkable_id: "__ID__",
|
77
|
+
),
|
78
|
+
remote: true,
|
79
|
+
method: :post
|
80
|
+
) %>
|
81
|
+
<label class="center"><%= Alchemy.t(:copy_page) %></label>
|
82
|
+
{{else}}
|
83
|
+
<div class="sitemap_tool disabled with-hint">
|
84
|
+
<%= render_icon(:copy) %>
|
85
|
+
<span class="hint-bubble">
|
86
|
+
<%= Alchemy.t("Your user role does not allow you to edit this page") %>
|
87
|
+
</span>
|
88
|
+
{{/if}}
|
89
|
+
</div>
|
90
|
+
{{#if permissions.destroy}}
|
91
|
+
<div class="button_with_label sitemap_tool">
|
92
|
+
<%= link_to_confirm_dialog(
|
93
|
+
render_icon(:minus),
|
94
|
+
Alchemy.t(:confirm_to_delete_page),
|
95
|
+
url_for(
|
96
|
+
controller: "pages",
|
97
|
+
action: "destroy",
|
98
|
+
id: "__ID__"
|
99
|
+
)
|
100
|
+
) -%>
|
101
|
+
<label class="center"><%= Alchemy.t(:delete_page) %></label>
|
102
|
+
{{else}}
|
103
|
+
<div class="sitemap_tool disabled with-hint">
|
104
|
+
<%= render_icon(:minus) %>
|
105
|
+
<span class="hint-bubble">
|
106
|
+
<%= Alchemy.t("Your user role does not allow you to edit this page") %>
|
107
|
+
</span>
|
108
|
+
{{/if}}
|
109
|
+
</div>
|
110
|
+
{{#if permissions.create}}
|
111
|
+
<div class="button_with_label sitemap_tool">
|
112
|
+
<%= link_to_dialog(
|
113
|
+
render_icon(:plus),
|
114
|
+
alchemy.new_admin_page_path(parent_id: "__ID__"),
|
115
|
+
{
|
116
|
+
title: Alchemy.t(:create_page),
|
117
|
+
size: "340x165",
|
118
|
+
overflow: true
|
119
|
+
}
|
120
|
+
) -%>
|
121
|
+
<label class="left"><%= Alchemy.t(:create_page) %></label>
|
122
|
+
{{else}}
|
123
|
+
<div class="sitemap_tool disabled with-hint">
|
124
|
+
<%= render_icon(:plus) %>
|
125
|
+
<span class="hint-bubble">
|
126
|
+
<%= Alchemy.t("Your user role does not allow you to edit this page") %>
|
127
|
+
</span>
|
128
|
+
{{/if}}
|
129
|
+
</div>
|
147
130
|
</div>
|
148
|
-
<div class="page_infos"
|
131
|
+
<div class="page_infos">
|
149
132
|
<span class="page_status with-hint">
|
150
133
|
<i class="icon fas fa-fw fa-compass {{#unless public}}disabled{{/unless}}" data-fa-transform="shrink-2"></i>
|
151
134
|
<span class="hint-bubble">{{status_titles.public}}</span>
|
@@ -160,23 +143,18 @@
|
|
160
143
|
</div>
|
161
144
|
<div class="sitemap_sitename">
|
162
145
|
{{#if permissions.edit_content}}
|
163
|
-
<%=
|
164
|
-
|
165
|
-
|
166
|
-
alchemy.edit_admin_page_path(page),
|
146
|
+
<%= link_to(
|
147
|
+
"{{name}}",
|
148
|
+
alchemy.edit_admin_page_path(id: "__ID__"),
|
167
149
|
title: Alchemy.t(:edit_page),
|
168
150
|
class: "sitemap_pagename_link"
|
169
|
-
)
|
151
|
+
) -%>
|
170
152
|
{{else}}
|
171
|
-
<%= content_tag(
|
153
|
+
<%= content_tag("span", "{{name}}", class: "sitemap_pagename_link") %>
|
172
154
|
{{/if}}
|
173
155
|
</div>
|
174
156
|
</div>
|
175
|
-
{{
|
176
|
-
<% unless @sorting %>{{#unless folded}}<% end %>
|
177
|
-
<ul id="page_{{id}}_children" class="level_{{level}}_children">
|
157
|
+
<ul id="page_{{id}}_children" class="children" data-parent-id="{{id}}">
|
178
158
|
{{> list}}
|
179
159
|
</ul>
|
180
|
-
<% unless @sorting %>{{/unless}}<% end %>
|
181
|
-
{{/if}}
|
182
160
|
</li>
|
@@ -1,15 +1,14 @@
|
|
1
|
-
<
|
2
|
-
<
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
</h4>
|
1
|
+
<h4 id="sitemap_heading">
|
2
|
+
<span class="page_name"><%= Alchemy::Page.human_attribute_name(:name) %></span>
|
3
|
+
<span class="page_urlname"><%= Alchemy::Page.human_attribute_name(:urlname) %></span>
|
4
|
+
<span class="page_status"><%= Alchemy.t(:page_status) %></span>
|
5
|
+
</h4>
|
7
6
|
|
8
|
-
|
7
|
+
<div id="sitemap-wrapper">
|
9
8
|
</div>
|
10
9
|
|
11
10
|
<script id="sitemap-template" type="text/x-handlebars-template">
|
12
|
-
<ul id="sitemap" class="list
|
11
|
+
<ul id="sitemap" class="list">
|
13
12
|
{{> list}}
|
14
13
|
</ul>
|
15
14
|
</script>
|
@@ -22,15 +21,10 @@
|
|
22
21
|
|
23
22
|
<script type="text/javascript">
|
24
23
|
$(function() {
|
25
|
-
Alchemy.Sitemap
|
24
|
+
Alchemy.currentSitemap = new Alchemy.Sitemap({
|
26
25
|
url: '<%= alchemy.tree_admin_pages_path %>',
|
27
|
-
page_root_id: <%= @page_root.id
|
28
|
-
full: <%= full %>
|
29
|
-
<% if @sorting %>
|
30
|
-
,ready: function () {
|
31
|
-
Alchemy.PageSorter();
|
32
|
-
}
|
33
|
-
<% end %>
|
26
|
+
page_root_id: <%= @page_root.id %>
|
34
27
|
});
|
28
|
+
Alchemy.PagePublicationFields();
|
35
29
|
});
|
36
30
|
</script>
|
@@ -28,18 +28,6 @@
|
|
28
28
|
<label><%= Alchemy.t("Flush page cache") %></label>
|
29
29
|
</div>
|
30
30
|
<% end %>
|
31
|
-
<% if can?(:sort, Alchemy::Page) %>
|
32
|
-
<div class="button_with_label">
|
33
|
-
<%= link_to(
|
34
|
-
render_icon(:random),
|
35
|
-
alchemy.sort_admin_pages_path,
|
36
|
-
method: :get,
|
37
|
-
class: "icon_button",
|
38
|
-
title: Alchemy.t("Sort pages")
|
39
|
-
) %>
|
40
|
-
<label><%= Alchemy.t("Sort pages") %></label>
|
41
|
-
</div>
|
42
|
-
<% end %>
|
43
31
|
<div class="button_with_label" id="clipboard_button">
|
44
32
|
<%= link_to_dialog(
|
45
33
|
render_icon(clipboard_empty?("pages") ? :clipboard : :paste),
|
@@ -154,7 +154,7 @@
|
|
154
154
|
if (!not_dirty) Alchemy.pleaseWaitOverlay(false);
|
155
155
|
return not_dirty;
|
156
156
|
});
|
157
|
-
Alchemy.
|
157
|
+
Alchemy.PagePublicationFields();
|
158
158
|
Alchemy.PageLeaveObserver();
|
159
159
|
Alchemy.ElementsWindow.init('<%= alchemy.admin_elements_path(page_version_id: @page_version.id) %>', {
|
160
160
|
texts: {
|
@@ -30,7 +30,7 @@
|
|
30
30
|
<% else %>
|
31
31
|
<% if @page_root %>
|
32
32
|
<h2 id="page_filter_result"></h2>
|
33
|
-
<%= render "sitemap", page_partial: "page"
|
33
|
+
<%= render "sitemap", page_partial: "page" %>
|
34
34
|
<% elsif can?(:create, Alchemy::Page) %>
|
35
35
|
<%= render partial: "create_language_form" %>
|
36
36
|
<% else %>
|
@@ -1,11 +1,6 @@
|
|
1
1
|
(function() {
|
2
2
|
var page = document.querySelector('#page_<%= @page.id %>');
|
3
3
|
|
4
|
-
<% if @old_page_layout != @page.page_layout -%>
|
5
|
-
Alchemy.ElementsWindow.reload();
|
6
|
-
Alchemy.growl('<%= j Alchemy.t(:page_layout_changed_notice) %>');
|
7
|
-
<% end -%>
|
8
|
-
|
9
4
|
<% if @while_page_edit -%>
|
10
5
|
|
11
6
|
Alchemy.reloadPreview();
|
@@ -13,6 +8,13 @@
|
|
13
8
|
Alchemy.growl("<%= j @notice %>");
|
14
9
|
Alchemy.closeCurrentDialog();
|
15
10
|
|
11
|
+
<% elsif @page.parent_id != @old_parent_id -%>
|
12
|
+
|
13
|
+
Alchemy.closeCurrentDialog(function() {
|
14
|
+
Alchemy.growl("<%= j @notice %>");
|
15
|
+
Alchemy.currentSitemap.load(<%= @page.get_language_root.id %>);
|
16
|
+
});
|
17
|
+
|
16
18
|
<% else -%>
|
17
19
|
|
18
20
|
if (page) {
|
@@ -19,8 +19,15 @@
|
|
19
19
|
},
|
20
20
|
},
|
21
21
|
|
22
|
+
move_admin_page_path: function(id) {
|
23
|
+
return '<%= alchemy.move_api_page_path(id: 1) %>'.replace(/1/, id);
|
24
|
+
},
|
25
|
+
|
26
|
+
fold_admin_page_path: function(id) {
|
27
|
+
return '<%= alchemy.fold_admin_page_path(id: 1) %>'.replace(/1/, id);
|
28
|
+
},
|
29
|
+
|
22
30
|
order_admin_elements_path: '<%= alchemy.order_admin_elements_path %>',
|
23
|
-
order_admin_pages_path: '<%= alchemy.order_admin_pages_path %>',
|
24
31
|
link_admin_pages_path: '<%= alchemy.link_admin_pages_path %>',
|
25
32
|
api_pages_path: '<%= alchemy.api_pages_path %>',
|
26
33
|
api_elements_path: '<%= alchemy.api_elements_path %>'
|
@@ -14,7 +14,7 @@
|
|
14
14
|
<script>
|
15
15
|
$('#<%= essence_page_editor.form_field_id %>').alchemyPageSelect({
|
16
16
|
placeholder: "<%= Alchemy.t(:search_page) %>",
|
17
|
-
url: "<%= alchemy.api_pages_path %>",
|
17
|
+
url: "<%= alchemy.api_pages_path language_id: essence_page_editor.page&.language_id %>",
|
18
18
|
query_params: <%== essence_page_editor.settings[:query_params].to_json %>,
|
19
19
|
<% if essence_page_editor.essence.page %>
|
20
20
|
initialSelection: {
|
@@ -334,7 +334,6 @@ en:
|
|
334
334
|
"Site successfully removed": "Website successfully removed."
|
335
335
|
"Site successfully updated": "Website successfully updated."
|
336
336
|
"Size": "Size"
|
337
|
-
"Sort pages": "Reorder pages"
|
338
337
|
"Successfully added content": "Successfully added %{content}"
|
339
338
|
"Successfully deleted content": "Successfully deleted %{content}"
|
340
339
|
"Successfully deleted element": "Successfully deleted %{element}"
|
@@ -437,7 +436,6 @@ en:
|
|
437
436
|
enter_external_link: "Please enter the URL you want to link with"
|
438
437
|
explain_cropping: "<p>Move the frame and change its size with the mouse or arrow keys to adjust the image mask. Click on \"apply\" when you are satisfied with your selection.</p><p>If you want to return to the original centered image mask like it was defined in the layout, click \"reset\" and \"apply\" afterwards.</p>"
|
439
438
|
explain_publishing: "Publish current page content"
|
440
|
-
explain_sitemap_dragndrop_sorting: "Tip: Drag the pages at the icon in order to sort them."
|
441
439
|
explain_unlocking: "Leave page and unlock it for other users."
|
442
440
|
external_link_notice_1: "Please enter the complete url with http:// or a similar protocol."
|
443
441
|
external_link_notice_2: "To refer a path from your website url, start with a /."
|
@@ -534,7 +532,6 @@ en:
|
|
534
532
|
or_replace_it_with_an_existing_tag: 'Or replace it with an existing tag'
|
535
533
|
"Page created": "Page: '%{name}' created."
|
536
534
|
page_infos: 'Page info'
|
537
|
-
page_layout_changed_notice: "Page type was changed. Elements not usable anymore have been hided."
|
538
535
|
page_properties: "Page properties"
|
539
536
|
page_public: "published"
|
540
537
|
page_published: "Published page"
|
@@ -593,7 +590,6 @@ en:
|
|
593
590
|
robot_follow: "robot may follow links."
|
594
591
|
robot_index: "allow robot to index."
|
595
592
|
save: "Save"
|
596
|
-
"save order": "Save order"
|
597
593
|
saved_link: "Link saved."
|
598
594
|
search: "search"
|
599
595
|
search_engines: "Search engines"
|
data/config/routes.rb
CHANGED
@@ -28,13 +28,12 @@ Alchemy::Engine.routes.draw do
|
|
28
28
|
post :copy_language_tree
|
29
29
|
get :create_language
|
30
30
|
get :link
|
31
|
-
get :sort
|
32
31
|
get :tree
|
33
32
|
end
|
34
33
|
member do
|
35
34
|
post :unlock
|
36
35
|
post :publish
|
37
|
-
|
36
|
+
patch :fold
|
38
37
|
get :configure
|
39
38
|
get :preview
|
40
39
|
get :info
|
@@ -124,7 +123,6 @@ Alchemy::Engine.routes.draw do
|
|
124
123
|
|
125
124
|
resources :messages, only: [:index, :new, :create]
|
126
125
|
resources :elements, only: :show
|
127
|
-
resources :contents, only: :show
|
128
126
|
|
129
127
|
namespace :api, defaults: { format: "json" } do
|
130
128
|
resources :contents, only: [:index, :show]
|
@@ -140,6 +138,9 @@ Alchemy::Engine.routes.draw do
|
|
140
138
|
collection do
|
141
139
|
get :nested
|
142
140
|
end
|
141
|
+
member do
|
142
|
+
patch :move
|
143
|
+
end
|
143
144
|
end
|
144
145
|
|
145
146
|
get "/pages/*urlname(.:format)" => "pages#show", as: "page"
|