alchemy_cms 3.5.0 → 3.6.0
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/.rubocop.yml +82 -26
- data/.travis.yml +1 -1
- data/CHANGELOG.md +23 -1
- data/README.md +14 -5
- data/Rakefile +0 -1
- data/alchemy_cms.gemspec +2 -5
- data/app/assets/images/alchemy/alchemy-logo.png +0 -0
- data/app/assets/javascripts/alchemy/admin.js +1 -1
- data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +4 -8
- data/app/assets/javascripts/alchemy/alchemy.buttons.js.coffee +2 -2
- data/app/assets/javascripts/alchemy/alchemy.datepicker.js.coffee +18 -27
- data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +3 -8
- data/app/assets/javascripts/alchemy/alchemy.elements_window.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +0 -1
- data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +22 -46
- data/app/assets/javascripts/alchemy/alchemy.preview_window.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.sitemap.js.coffee +2 -2
- data/app/assets/javascripts/alchemy/alchemy.spinner.js +32 -0
- data/app/assets/javascripts/alchemy/alchemy.tinymce.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/templates/index.js +1 -0
- data/app/assets/javascripts/alchemy/templates/spinner.hbs +7 -0
- data/app/assets/stylesheets/alchemy/_extends.scss +1 -0
- data/app/assets/stylesheets/alchemy/admin.scss +1 -0
- data/app/assets/stylesheets/alchemy/base.scss +1 -7
- data/app/assets/stylesheets/alchemy/buttons.scss +1 -5
- data/app/assets/stylesheets/alchemy/dialogs.scss +0 -4
- data/app/assets/stylesheets/alchemy/elements.scss +2 -6
- data/app/assets/stylesheets/alchemy/frame.scss +0 -5
- data/app/assets/stylesheets/alchemy/image_library.scss +0 -13
- data/app/assets/stylesheets/alchemy/sitemap.scss +5 -34
- data/app/assets/stylesheets/alchemy/spinner.scss +52 -0
- data/app/controllers/alchemy/admin/attachments_controller.rb +12 -11
- data/app/controllers/alchemy/admin/base_controller.rb +3 -7
- data/app/controllers/alchemy/admin/essence_pictures_controller.rb +2 -1
- data/app/controllers/alchemy/admin/languages_controller.rb +3 -8
- data/app/controllers/alchemy/admin/pictures_controller.rb +11 -7
- data/app/controllers/alchemy/admin/resources_controller.rb +1 -1
- data/app/controllers/alchemy/attachments_controller.rb +2 -0
- data/app/controllers/alchemy/base_controller.rb +4 -5
- data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +1 -1
- data/app/helpers/alchemy/admin/base_helper.rb +17 -8
- data/app/helpers/alchemy/admin/tags_helper.rb +31 -18
- data/app/helpers/alchemy/base_helper.rb +1 -1
- data/app/helpers/alchemy/pages_helper.rb +4 -7
- data/app/models/alchemy/attachment.rb +4 -0
- data/app/models/alchemy/cell.rb +1 -1
- data/app/models/alchemy/element.rb +6 -12
- data/app/models/alchemy/element/definitions.rb +2 -2
- data/app/models/alchemy/element/element_contents.rb +1 -1
- data/app/models/alchemy/essence_picture_view.rb +14 -2
- data/app/models/alchemy/language.rb +4 -4
- data/app/models/alchemy/page.rb +25 -28
- data/app/models/alchemy/page/page_elements.rb +1 -1
- data/app/models/alchemy/page/page_natures.rb +1 -1
- data/app/models/alchemy/picture.rb +5 -1
- data/app/models/alchemy/site.rb +27 -12
- data/app/views/alchemy/admin/attachments/_tag_list.html.erb +14 -13
- data/app/views/alchemy/admin/dashboard/info.html.erb +1 -1
- data/app/views/alchemy/admin/layoutpages/edit.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_create_language_form.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_form.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_page.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_sitemap.html.erb +2 -2
- data/app/views/alchemy/admin/pages/configure_external.html.erb +1 -1
- data/app/views/alchemy/admin/pages/index.html.erb +5 -7
- data/app/views/alchemy/admin/pages/sort.html.erb +19 -0
- data/app/views/alchemy/admin/pages/update.js.erb +1 -1
- data/app/views/alchemy/admin/pictures/_archive.html.erb +19 -19
- data/app/views/alchemy/admin/pictures/_tag_list.html.erb +3 -4
- data/app/views/alchemy/admin/resources/_tag_list.html.erb +3 -4
- data/app/views/alchemy/admin/resources/edit.html.erb +1 -1
- data/app/views/alchemy/admin/resources/new.html.erb +1 -1
- data/app/views/alchemy/pages/_meta_data.html.erb +1 -1
- data/app/views/alchemy/pages/show.rss.builder +0 -2
- data/app/views/alchemy/welcome.html.erb +1 -1
- data/app/views/layouts/alchemy/admin.html.erb +1 -1
- data/config/locales/alchemy.de.yml +4 -4
- data/config/locales/alchemy.en.yml +4 -4
- data/config/locales/alchemy.es.yml +3 -3
- data/config/locales/alchemy.fr.yml +4 -4
- data/config/locales/alchemy.it.yml +3 -3
- data/config/locales/alchemy.nl.yml +4 -4
- data/config/locales/alchemy.ru.yml +3 -3
- data/lib/alchemy/auth_accessors.rb +6 -6
- data/lib/alchemy/cache_digests/template_tracker.rb +5 -5
- data/lib/alchemy/controller_actions.rb +1 -6
- data/lib/alchemy/engine.rb +0 -53
- data/lib/alchemy/errors.rb +12 -3
- data/lib/alchemy/i18n.rb +1 -1
- data/lib/alchemy/logger.rb +1 -1
- data/lib/alchemy/page_layout.rb +5 -5
- data/lib/alchemy/seeder.rb +16 -49
- data/lib/alchemy/tasks/helpers.rb +1 -1
- data/lib/alchemy/test_support/config_stubbing.rb +28 -0
- data/lib/alchemy/test_support/essence_shared_examples.rb +6 -6
- data/lib/alchemy/test_support/factories/language_factory.rb +1 -1
- data/lib/alchemy/test_support/factories/page_factory.rb +7 -0
- data/lib/alchemy/test_support/factories/site_factory.rb +6 -0
- data/lib/alchemy/test_support/shared_contexts.rb +14 -0
- data/lib/alchemy/test_support/shared_uploader_examples.rb +10 -0
- data/lib/alchemy/touching.rb +1 -1
- data/lib/alchemy/version.rb +1 -1
- data/lib/alchemy_cms.rb +56 -1
- data/lib/{alchemy/kaminari → kaminari}/scoped_pagination_url_helper.rb +0 -0
- data/lib/rails/generators/alchemy/base.rb +1 -1
- data/lib/rails/generators/alchemy/elements/elements_generator.rb +2 -1
- data/lib/rails/generators/alchemy/page_layouts/page_layouts_generator.rb +2 -1
- data/lib/rails/generators/alchemy/site_layouts/site_layouts_generator.rb +2 -1
- data/lib/tasks/alchemy/tidy.rake +91 -89
- data/lib/tasks/alchemy/upgrade.rake +15 -15
- metadata +29 -14
- data/app/assets/javascripts/alchemy/alchemy.spinner.js.coffee +0 -49
- data/app/views/alchemy/admin/pages/sort.js.erb +0 -4
- data/vendor/assets/javascripts/handlebars.js +0 -4608
- data/vendor/assets/javascripts/spin.min.js +0 -1
|
@@ -95,7 +95,7 @@ module Alchemy
|
|
|
95
95
|
def content_definition_for(content_name)
|
|
96
96
|
if content_definitions.blank?
|
|
97
97
|
log_warning "Element #{name} is missing the content definition for #{content_name}"
|
|
98
|
-
|
|
98
|
+
nil
|
|
99
99
|
else
|
|
100
100
|
content_definitions.detect { |d| d['name'] == content_name }
|
|
101
101
|
end
|
|
@@ -9,7 +9,9 @@ module Alchemy
|
|
|
9
9
|
|
|
10
10
|
DEFAULT_OPTIONS = {
|
|
11
11
|
show_caption: true,
|
|
12
|
-
disable_link: false
|
|
12
|
+
disable_link: false,
|
|
13
|
+
srcset: [],
|
|
14
|
+
sizes: []
|
|
13
15
|
}
|
|
14
16
|
|
|
15
17
|
def initialize(content, options = {}, html_options = {})
|
|
@@ -59,7 +61,9 @@ module Alchemy
|
|
|
59
61
|
essence.picture_url(options.except(*DEFAULT_OPTIONS.keys)), {
|
|
60
62
|
alt: essence.alt_tag.presence,
|
|
61
63
|
title: essence.title.presence,
|
|
62
|
-
class: caption ? nil : essence.css_class.presence
|
|
64
|
+
class: caption ? nil : essence.css_class.presence,
|
|
65
|
+
srcset: srcset.join(', ').presence,
|
|
66
|
+
sizes: options[:sizes].join(', ').presence
|
|
63
67
|
}.merge(caption ? {} : html_options)
|
|
64
68
|
)
|
|
65
69
|
end
|
|
@@ -71,5 +75,13 @@ module Alchemy
|
|
|
71
75
|
def is_linked?
|
|
72
76
|
!options[:disable_link] && essence.link.present?
|
|
73
77
|
end
|
|
78
|
+
|
|
79
|
+
def srcset
|
|
80
|
+
options[:srcset].map do |size|
|
|
81
|
+
url = essence.picture_url(size: size)
|
|
82
|
+
width, height = size.split('x')
|
|
83
|
+
width.present? ? "#{url} #{width}w" : "#{url} #{height}h"
|
|
84
|
+
end
|
|
85
|
+
end
|
|
74
86
|
end
|
|
75
87
|
end
|
|
@@ -128,18 +128,18 @@ module Alchemy
|
|
|
128
128
|
def publicity_of_default_language
|
|
129
129
|
if default? && !public?
|
|
130
130
|
errors.add(:public, Alchemy.t("Default language has to be public"))
|
|
131
|
-
|
|
131
|
+
false
|
|
132
132
|
else
|
|
133
|
-
|
|
133
|
+
true
|
|
134
134
|
end
|
|
135
135
|
end
|
|
136
136
|
|
|
137
137
|
def presence_of_default_language
|
|
138
138
|
if Language.default == self && default_changed?
|
|
139
139
|
errors.add(:default, Alchemy.t("We need at least one default."))
|
|
140
|
-
|
|
140
|
+
false
|
|
141
141
|
else
|
|
142
|
-
|
|
142
|
+
true
|
|
143
143
|
end
|
|
144
144
|
end
|
|
145
145
|
|
data/app/models/alchemy/page.rb
CHANGED
|
@@ -43,7 +43,6 @@ module Alchemy
|
|
|
43
43
|
|
|
44
44
|
DEFAULT_ATTRIBUTES_FOR_COPY = {
|
|
45
45
|
do_not_autogenerate: true,
|
|
46
|
-
do_not_sweep: true,
|
|
47
46
|
visible: false,
|
|
48
47
|
public_on: nil,
|
|
49
48
|
public_until: nil,
|
|
@@ -99,9 +98,6 @@ module Alchemy
|
|
|
99
98
|
validates_format_of :page_layout, with: /\A[a-z0-9_-]+\z/, unless: -> { systempage? || page_layout.blank? }
|
|
100
99
|
validates_presence_of :parent_id, if: proc { Page.count > 1 }
|
|
101
100
|
|
|
102
|
-
attr_accessor :do_not_sweep
|
|
103
|
-
attr_accessor :do_not_validate_language
|
|
104
|
-
|
|
105
101
|
before_save :set_language_code,
|
|
106
102
|
if: -> { language.present? },
|
|
107
103
|
unless: :systempage?
|
|
@@ -143,6 +139,15 @@ module Alchemy
|
|
|
143
139
|
# Class methods
|
|
144
140
|
#
|
|
145
141
|
class << self
|
|
142
|
+
# The root page of the page tree
|
|
143
|
+
#
|
|
144
|
+
# Internal use only. You wouldn't use this page ever.
|
|
145
|
+
#
|
|
146
|
+
# Automatically created when accessed the first time.
|
|
147
|
+
#
|
|
148
|
+
def root
|
|
149
|
+
super || create!(name: 'Root')
|
|
150
|
+
end
|
|
146
151
|
alias_method :rootpage, :root
|
|
147
152
|
|
|
148
153
|
# Used to store the current page previewed in the edit page template.
|
|
@@ -306,19 +311,27 @@ module Alchemy
|
|
|
306
311
|
|
|
307
312
|
# Returns the previous page on the same level or nil.
|
|
308
313
|
#
|
|
309
|
-
#
|
|
314
|
+
# @option options [Boolean] :restricted (false)
|
|
315
|
+
# only restricted pages (true), skip restricted pages (false)
|
|
316
|
+
# @option options [Boolean] :public (true)
|
|
317
|
+
# only public pages (true), skip public pages (false)
|
|
310
318
|
#
|
|
311
319
|
def previous(options = {})
|
|
312
|
-
|
|
320
|
+
pages = self_and_siblings.where('lft < ?', lft)
|
|
321
|
+
select_page(pages, options.merge(order: :desc))
|
|
313
322
|
end
|
|
314
323
|
alias_method :previous_page, :previous
|
|
315
324
|
|
|
316
325
|
# Returns the next page on the same level or nil.
|
|
317
326
|
#
|
|
318
|
-
#
|
|
327
|
+
# @option options [Boolean] :restricted (false)
|
|
328
|
+
# only restricted pages (true), skip restricted pages (false)
|
|
329
|
+
# @option options [Boolean] :public (true)
|
|
330
|
+
# only public pages (true), skip public pages (false)
|
|
319
331
|
#
|
|
320
332
|
def next(options = {})
|
|
321
|
-
|
|
333
|
+
pages = self_and_siblings.where('lft > ?', lft)
|
|
334
|
+
select_page(pages, options.merge(order: :asc))
|
|
322
335
|
end
|
|
323
336
|
alias_method :next_page, :next
|
|
324
337
|
|
|
@@ -453,26 +466,10 @@ module Alchemy
|
|
|
453
466
|
end
|
|
454
467
|
end
|
|
455
468
|
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
#
|
|
461
|
-
# @option options [Boolean] :restricted (nil)
|
|
462
|
-
# only restricted pages (true), skip restricted pages (false)
|
|
463
|
-
# @option options [Boolean] :public (true)
|
|
464
|
-
# only public pages (true), skip public pages (false)
|
|
465
|
-
#
|
|
466
|
-
def next_or_previous(dir = '>', options = {})
|
|
467
|
-
options = {
|
|
468
|
-
restricted: false,
|
|
469
|
-
public: true
|
|
470
|
-
}.update(options)
|
|
471
|
-
|
|
472
|
-
pages = self_and_siblings.where(["#{Page.table_name}.lft #{dir} ?", lft])
|
|
473
|
-
pages = options[:public] ? pages.published : pages.not_public
|
|
474
|
-
pages.where(restricted: options[:restricted])
|
|
475
|
-
.reorder(dir == '>' ? 'lft' : 'lft DESC')
|
|
469
|
+
def select_page(pages, options = {})
|
|
470
|
+
pages = options.fetch(:public, true) ? pages.published : pages.not_public
|
|
471
|
+
pages.where(restricted: options.fetch(:restricted, false))
|
|
472
|
+
.reorder(lft: options.fetch(:order))
|
|
476
473
|
.limit(1).first
|
|
477
474
|
end
|
|
478
475
|
|
|
@@ -310,7 +310,7 @@ module Alchemy
|
|
|
310
310
|
if cell = cells.find_by_name(name)
|
|
311
311
|
cell.elements
|
|
312
312
|
else
|
|
313
|
-
Alchemy::Logger.warn("Cell with name `#{name}` could not be found!", caller
|
|
313
|
+
Alchemy::Logger.warn("Cell with name `#{name}` could not be found!", caller(0..0))
|
|
314
314
|
Element.none
|
|
315
315
|
end
|
|
316
316
|
end
|
|
@@ -92,6 +92,10 @@ module Alchemy
|
|
|
92
92
|
# Class methods
|
|
93
93
|
|
|
94
94
|
class << self
|
|
95
|
+
def searchable_alchemy_resource_attributes
|
|
96
|
+
%w(name image_file_name)
|
|
97
|
+
end
|
|
98
|
+
|
|
95
99
|
def last_upload
|
|
96
100
|
last_picture = Picture.last
|
|
97
101
|
return Picture.all unless last_picture
|
|
@@ -231,7 +235,7 @@ module Alchemy
|
|
|
231
235
|
# Returns true if picture is not assigned to any EssencePicture.
|
|
232
236
|
#
|
|
233
237
|
def deletable?
|
|
234
|
-
|
|
238
|
+
essence_pictures.empty?
|
|
235
239
|
end
|
|
236
240
|
|
|
237
241
|
# A size String from original image file values.
|
data/app/models/alchemy/site.rb
CHANGED
|
@@ -24,7 +24,7 @@ module Alchemy
|
|
|
24
24
|
scope :published, -> { where(public: true) }
|
|
25
25
|
|
|
26
26
|
# Callbacks
|
|
27
|
-
before_create :create_default_language
|
|
27
|
+
before_create :create_default_language!, unless: -> { languages.any? }
|
|
28
28
|
|
|
29
29
|
# concerns
|
|
30
30
|
include Alchemy::Site::Layout
|
|
@@ -62,7 +62,7 @@ module Alchemy
|
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
def default
|
|
65
|
-
Site.first
|
|
65
|
+
Site.first || create_default_site!
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
def find_for_host(host)
|
|
@@ -79,23 +79,38 @@ module Alchemy
|
|
|
79
79
|
site.aliases.split.include?(host) if site.aliases.present?
|
|
80
80
|
end
|
|
81
81
|
end
|
|
82
|
+
|
|
83
|
+
private
|
|
84
|
+
|
|
85
|
+
def create_default_site!
|
|
86
|
+
default_site = Alchemy::Config.get(:default_site)
|
|
87
|
+
if default_site
|
|
88
|
+
create!(name: default_site['name'], host: default_site['host'])
|
|
89
|
+
else
|
|
90
|
+
raise DefaultSiteNotFoundError
|
|
91
|
+
end
|
|
92
|
+
end
|
|
82
93
|
end
|
|
83
94
|
|
|
84
95
|
private
|
|
85
96
|
|
|
86
97
|
# If no languages are present, create a default language based
|
|
87
98
|
# on the host app's Alchemy configuration.
|
|
88
|
-
def create_default_language
|
|
99
|
+
def create_default_language!
|
|
89
100
|
default_language = Alchemy::Config.get(:default_language)
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
101
|
+
if default_language
|
|
102
|
+
languages.build(
|
|
103
|
+
name: default_language['name'],
|
|
104
|
+
language_code: default_language['code'],
|
|
105
|
+
locale: default_language['code'],
|
|
106
|
+
frontpage_name: default_language['frontpage_name'],
|
|
107
|
+
page_layout: default_language['page_layout'],
|
|
108
|
+
public: true,
|
|
109
|
+
default: true
|
|
110
|
+
)
|
|
111
|
+
else
|
|
112
|
+
raise DefaultLanguageNotFoundError
|
|
113
|
+
end
|
|
99
114
|
end
|
|
100
115
|
end
|
|
101
116
|
end
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
<%
|
|
2
|
-
<h2><%= Alchemy.t("Filter by tag") %></h2>
|
|
3
|
-
<%= js_filter_field '.tag-list li' %>
|
|
4
|
-
<ul>
|
|
5
|
-
|
|
6
|
-
</ul>
|
|
7
|
-
<% if
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
<% if Alchemy::Attachment.tag_counts.any? %>
|
|
2
|
+
<h2><%= Alchemy.t("Filter by tag") %></h2>
|
|
3
|
+
<%= js_filter_field '.tag-list li' %>
|
|
4
|
+
<ul>
|
|
5
|
+
<%= render_tag_list('Alchemy::Attachment') %>
|
|
6
|
+
</ul>
|
|
7
|
+
<% if params[:tagged_with].present? %>
|
|
8
|
+
<%= link_to(
|
|
9
|
+
render_icon('delete-small') + Alchemy.t('Remove tag filter'),
|
|
10
|
+
url_for(tag_list_params.delete_if { |k, v| k == "tagged_with" }.merge(action: 'index')),
|
|
11
|
+
remote: request.xhr?,
|
|
12
|
+
class: 'button small with_icon please_wait'
|
|
13
|
+
) %>
|
|
14
|
+
<% end %>
|
|
14
15
|
<% end %>
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
<script type="text/javascript">
|
|
47
47
|
(function() {
|
|
48
48
|
var el = $('#update_check');
|
|
49
|
-
var spinner = Alchemy.Spinner
|
|
49
|
+
var spinner = new Alchemy.Spinner('small');
|
|
50
50
|
spinner.spin(el[0]);
|
|
51
51
|
$.get('<%= alchemy.update_check_path %>', function(data, textStatus, jqXHR) {
|
|
52
52
|
if (data == 'true') {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<%= f.input :page_layout,
|
|
3
3
|
collection: @page_layouts,
|
|
4
4
|
label: page_layout_label(@page),
|
|
5
|
-
include_blank:
|
|
5
|
+
include_blank: Alchemy.t('Please choose'),
|
|
6
6
|
input_html: {class: 'alchemy_selectbox'} %>
|
|
7
7
|
<%= f.input :name, autofocus: true %>
|
|
8
8
|
<% if @page.taggable? %>
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
collection: @page_layouts,
|
|
32
32
|
selected: @language.page_layout,
|
|
33
33
|
label: Alchemy.t(:page_type),
|
|
34
|
-
include_blank:
|
|
34
|
+
include_blank: Alchemy.t('Please choose'),
|
|
35
35
|
required: true,
|
|
36
36
|
input_html: {class: 'alchemy_selectbox'} %>
|
|
37
37
|
<%= form.hidden_field :language_id, value: @language.id %>
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
alchemy.fold_admin_page_path(page),
|
|
9
9
|
remote: true,
|
|
10
10
|
method: :post,
|
|
11
|
-
class: "page_folder {{#if folded}}folded{{else}}collapsed{{/if}}
|
|
11
|
+
class: "page_folder {{#if folded}}folded{{else}}collapsed{{/if}}",
|
|
12
12
|
title: "{{#if folded}}#{Alchemy.t('Show childpages')}{{else}}#{Alchemy.t('Hide childpages')}{{/if}}",
|
|
13
13
|
id: "fold_button_{{id}}"
|
|
14
14
|
)
|
|
@@ -22,10 +22,10 @@
|
|
|
22
22
|
full: <%= full %>
|
|
23
23
|
<% if @sorting %>
|
|
24
24
|
,ready: function () {
|
|
25
|
-
Alchemy.PageSorter
|
|
25
|
+
Alchemy.PageSorter();
|
|
26
26
|
}
|
|
27
27
|
<% elsif action_name == 'link' %>
|
|
28
|
-
,spinner: Alchemy.Spinner
|
|
28
|
+
,spinner: new Alchemy.Spinner('small'),
|
|
29
29
|
ready: function () {
|
|
30
30
|
if (Alchemy.currentDialog()) {
|
|
31
31
|
Alchemy.currentDialog().attachTreeEvents();
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<%= f.input :page_layout,
|
|
3
3
|
collection: @page_layouts,
|
|
4
4
|
label: Alchemy.t(:page_type),
|
|
5
|
-
include_blank:
|
|
5
|
+
include_blank: Alchemy.t('Please choose'),
|
|
6
6
|
input_html: {class: 'alchemy_selectbox'} %>
|
|
7
7
|
<div class="input check_boxes">
|
|
8
8
|
<label class="control-label"><%= Alchemy.t(:page_status) %></label>
|
|
@@ -16,15 +16,13 @@
|
|
|
16
16
|
</div>
|
|
17
17
|
<% end %>
|
|
18
18
|
<% if can?(:sort, Alchemy::Page) %>
|
|
19
|
-
<div class="button_with_label"
|
|
19
|
+
<div class="button_with_label">
|
|
20
20
|
<%= link_to(
|
|
21
|
-
render_icon(
|
|
21
|
+
render_icon(:sort),
|
|
22
22
|
alchemy.sort_admin_pages_path,
|
|
23
|
-
:
|
|
24
|
-
:
|
|
25
|
-
:
|
|
26
|
-
:class => 'icon_button please_wait',
|
|
27
|
-
:title => Alchemy.t('Sort pages')
|
|
23
|
+
method: :get,
|
|
24
|
+
class: 'icon_button please_wait',
|
|
25
|
+
title: Alchemy.t('Sort pages')
|
|
28
26
|
) %>
|
|
29
27
|
<label><%= Alchemy.t('Sort pages') %></label>
|
|
30
28
|
</div>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<% content_for :toolbar do %>
|
|
2
|
+
<div class="button_with_label">
|
|
3
|
+
<%= link_to alchemy.admin_pages_path, class: 'icon_button' do %>
|
|
4
|
+
<%= render_icon :back %>
|
|
5
|
+
<% end %>
|
|
6
|
+
<label><%= Alchemy.t(:cancel) %></label>
|
|
7
|
+
</div>
|
|
8
|
+
<% end %>
|
|
9
|
+
|
|
10
|
+
<div id="sort_panel">
|
|
11
|
+
<%= render_message do %>
|
|
12
|
+
<%= Alchemy.t(:explain_sitemap_dragndrop_sorting) %>
|
|
13
|
+
<% end %>
|
|
14
|
+
<div class="buttons">
|
|
15
|
+
<%= button_tag Alchemy.t('save order'), id: 'save_page_order' %>
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
<%= render 'sitemap', page_partial: 'page', full: true %>
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
var page_html = "<%= j render('page', page: @page) %>";
|
|
17
17
|
var compiler = Handlebars.compile(page_html);
|
|
18
|
-
var tree =
|
|
18
|
+
var tree = <%== @tree.to_json %>;
|
|
19
19
|
var html = compiler(tree.pages[0]);
|
|
20
20
|
$('#page_<%= @page.id %>').replaceWith(html);
|
|
21
21
|
|
|
@@ -1,37 +1,37 @@
|
|
|
1
1
|
<div id="library_sidebar">
|
|
2
|
-
<%= render
|
|
2
|
+
<%= render 'filter_bar' %>
|
|
3
3
|
<div class="tag-list with_filter_bar<%= params[:tagged_with].present? ? ' filtered' : '' %>">
|
|
4
|
-
<%= render
|
|
4
|
+
<%= render 'tag_list' %>
|
|
5
5
|
</div>
|
|
6
6
|
</div>
|
|
7
|
-
<%= form_tag delete_multiple_admin_pictures_path, :
|
|
7
|
+
<%= form_tag delete_multiple_admin_pictures_path, method: :delete do %>
|
|
8
8
|
<div class="selected_item_tools">
|
|
9
9
|
<h2><%= Alchemy.t(:edit_selected_pictures) %></h2>
|
|
10
10
|
<%= link_to(
|
|
11
11
|
render_icon('edit') + Alchemy.t("Edit"),
|
|
12
12
|
edit_multiple_admin_pictures_path,
|
|
13
|
-
:
|
|
14
|
-
:
|
|
15
|
-
:
|
|
16
|
-
:
|
|
13
|
+
class: 'button with_icon',
|
|
14
|
+
title: Alchemy.t('Edit multiple pictures'),
|
|
15
|
+
id: 'edit_multiple_pictures',
|
|
16
|
+
style: 'float: none'
|
|
17
17
|
) %>
|
|
18
18
|
<%= button_tag render_icon('destroy') + Alchemy.t("Delete"), 'data-alchemy-confirm' => {
|
|
19
|
-
:
|
|
20
|
-
:
|
|
21
|
-
:
|
|
22
|
-
:
|
|
23
|
-
}.to_json, :
|
|
19
|
+
title: Alchemy.t(:please_confirm),
|
|
20
|
+
message: Alchemy.t(:confirm_to_delete_images_from_server),
|
|
21
|
+
ok_label: Alchemy.t("Yes"),
|
|
22
|
+
cancel_label: Alchemy.t("No")
|
|
23
|
+
}.to_json, class: 'button with_icon' %>
|
|
24
24
|
<%= Alchemy.t(:or) %>
|
|
25
25
|
<%= link_to(
|
|
26
26
|
render_icon('delete-small') + Alchemy.t("Clear selection"),
|
|
27
27
|
admin_pictures_path(
|
|
28
|
-
:
|
|
29
|
-
:
|
|
30
|
-
:
|
|
31
|
-
:
|
|
28
|
+
q: params[:q],
|
|
29
|
+
tagged_with: params[:tagged_with],
|
|
30
|
+
size: params[:size],
|
|
31
|
+
filter: params[:filter]
|
|
32
32
|
),
|
|
33
|
-
:
|
|
34
|
-
:
|
|
33
|
+
class: 'button with_icon',
|
|
34
|
+
style: 'float: none'
|
|
35
35
|
) %>
|
|
36
36
|
</div>
|
|
37
37
|
<div id="pictures">
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
<%= Alchemy.t(:no_search_results) %>
|
|
47
47
|
</div>
|
|
48
48
|
<% else %>
|
|
49
|
-
<%= render :
|
|
49
|
+
<%= render partial: 'picture', collection: @pictures %>
|
|
50
50
|
<%= paginate @pictures, theme: 'alchemy' %>
|
|
51
51
|
<% end %>
|
|
52
52
|
</div>
|