alchemy_cms 2.6.0.rc5 → 2.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.
- data/.travis.yml +1 -1
- data/Gemfile +2 -1
- data/README.md +2 -4
- data/alchemy_cms.gemspec +1 -1
- data/app/assets/fonts/alchemy/icons.eot +0 -0
- data/app/assets/fonts/alchemy/icons.svg +71 -0
- data/app/assets/fonts/alchemy/icons.ttf +0 -0
- data/app/assets/fonts/alchemy/icons.woff +0 -0
- data/app/assets/javascripts/alchemy/alchemy.elements_window.js.coffee +6 -8
- data/app/assets/javascripts/alchemy/alchemy.hotkeys.js.coffee +2 -3
- data/app/assets/javascripts/alchemy/alchemy.image_cropper.js.coffee +3 -8
- data/app/assets/javascripts/alchemy/alchemy.link_overlay.js.coffee +3 -3
- data/app/assets/javascripts/alchemy/alchemy.preview_window.js.coffee +19 -9
- data/app/assets/javascripts/tiny_mce/plugins/alchemy_link/editor_plugin.js +6 -7
- data/app/assets/stylesheets/alchemy/admin.css.scss +0 -1
- data/app/assets/stylesheets/alchemy/archive.scss +55 -7
- data/app/assets/stylesheets/alchemy/base.scss +8 -144
- data/app/assets/stylesheets/alchemy/defaults.scss +1 -1
- data/app/assets/stylesheets/alchemy/elements.scss +20 -16
- data/app/assets/stylesheets/alchemy/flash.scss +1 -1
- data/app/assets/stylesheets/alchemy/form_elements.scss +49 -42
- data/app/assets/stylesheets/alchemy/icon-font.css.scss +67 -0
- data/app/assets/stylesheets/alchemy/icons.scss +16 -4
- data/app/assets/stylesheets/alchemy/jquery-ui.scss +40 -26
- data/app/assets/stylesheets/alchemy/menubar.css.scss +1 -1
- data/app/assets/stylesheets/alchemy/notices.scss +6 -1
- data/app/assets/stylesheets/alchemy/search.scss +3 -2
- data/app/assets/stylesheets/alchemy/sitemap.scss +72 -13
- data/app/assets/stylesheets/alchemy/tables.scss +31 -24
- data/app/assets/stylesheets/alchemy/upload.scss +1 -1
- data/app/assets/stylesheets/alchemy/variables.scss +2 -1
- data/app/assets/stylesheets/tiny_mce/plugins/inlinepopups/skins/{alchemy → alchemy-tinymce-dialog}/window.css.scss +70 -65
- data/app/controllers/alchemy/admin/base_controller.rb +7 -4
- data/app/controllers/alchemy/admin/pictures_controller.rb +2 -0
- data/app/controllers/alchemy/admin/users_controller.rb +1 -1
- data/app/controllers/alchemy/user_sessions_controller.rb +1 -1
- data/app/helpers/alchemy/admin/base_helper.rb +161 -60
- data/app/helpers/alchemy/admin/pages_helper.rb +4 -1
- data/app/helpers/alchemy/elements_block_helper.rb +1 -1
- data/app/helpers/alchemy/elements_helper.rb +119 -31
- data/app/helpers/alchemy/pages_helper.rb +29 -72
- data/app/models/alchemy/attachment.rb +0 -2
- data/app/models/alchemy/content.rb +1 -1
- data/app/models/alchemy/language.rb +1 -0
- data/app/models/alchemy/page.rb +8 -8
- data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +3 -1
- data/app/views/alchemy/admin/attachments/_overlay_file_list.html.erb +1 -1
- data/app/views/alchemy/admin/attachments/_tag_list.html.erb +25 -27
- data/app/views/alchemy/admin/attachments/index.html.erb +4 -1
- data/app/views/alchemy/admin/elements/_elements_select.html.erb +6 -6
- data/app/views/alchemy/admin/elements/list.js.erb +1 -1
- data/app/views/alchemy/admin/pages/_page.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_page_for_links.html.erb +1 -1
- data/app/views/alchemy/admin/pages/edit.html.erb +4 -2
- data/app/views/alchemy/admin/pictures/_archive.html.erb +0 -1
- data/app/views/alchemy/admin/pictures/_filter_bar.html.erb +2 -1
- data/app/views/alchemy/admin/pictures/_picture.html.erb +5 -0
- data/app/views/alchemy/admin/pictures/index.html.erb +1 -0
- data/app/views/alchemy/base/500.html.erb +26 -5
- data/app/views/alchemy/essences/_essence_picture_tools.html.erb +1 -1
- data/app/views/alchemy/essences/_linkable_essence_tools.html.erb +1 -1
- data/app/views/alchemy/language_links/_language.html.erb +12 -0
- data/app/views/alchemy/language_links/_spacer.html.erb +1 -0
- data/config/locales/alchemy.de.yml +7 -3
- data/config/locales/alchemy.en.yml +8 -3
- data/lib/alchemy/page_layout.rb +1 -1
- data/lib/alchemy/tinymce.rb +1 -1
- data/lib/alchemy/upgrader.rb +26 -0
- data/lib/alchemy/version.rb +1 -1
- data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +4 -1
- data/lib/tasks/ferret.rake +1 -0
- data/spec/controllers/admin/users_controller_spec.rb +5 -5
- data/spec/features/admin/pages_controller_spec.rb +1 -1
- data/spec/helpers/admin/pages_helper_spec.rb +31 -0
- data/spec/helpers/pages_helper_spec.rb +60 -72
- data/spec/models/content_spec.rb +2 -1
- data/spec/models/page_layout_spec.rb +29 -0
- data/spec/models/page_spec.rb +33 -1
- data/spec/support/alchemy/test_tweaks.rb +2 -6
- metadata +34 -12
- data/app/assets/fonts/alchemy-icons.eot +0 -0
- data/app/assets/fonts/alchemy-icons.svg +0 -54
- data/app/assets/fonts/alchemy-icons.ttf +0 -0
- data/app/assets/fonts/alchemy-icons.woff +0 -0
- data/app/assets/images/alchemy/placeholder.png +0 -0
- data/app/assets/stylesheets/alchemy/fonts.scss +0 -46
|
@@ -15,82 +15,39 @@ module Alchemy
|
|
|
15
15
|
content.essence.caption
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
#
|
|
18
|
+
# Renders links to language root pages of all published languages.
|
|
19
19
|
#
|
|
20
|
-
#
|
|
21
|
-
#
|
|
22
|
-
#
|
|
23
|
-
#
|
|
24
|
-
# :linkname => :name,
|
|
25
|
-
# :spacer => "",
|
|
26
|
-
# :link_to_public_child => configuration(:redirect_to_public_child),
|
|
27
|
-
# :link_to_page_with_layout => nil,
|
|
28
|
-
# :show_title => true,
|
|
29
|
-
# :reverse => false,
|
|
30
|
-
# :as_select_box => false,
|
|
31
|
-
# :show_flags => false
|
|
20
|
+
# @option options linkname [String] ('name') Renders name/code of language, or I18n translation for code.
|
|
21
|
+
# @option options show_title [Boolean] (true) Renders title attributes for the links.
|
|
22
|
+
# @option options spacer [String] ('') Renders the passed spacer string. You can also overwrite the spacer partial: "alchemy/language_links/_spacer".
|
|
23
|
+
# @option options reverse [Boolean] (false) Reverses the ordering of the links.
|
|
32
24
|
#
|
|
25
|
+
def language_links(options={})
|
|
26
|
+
options = {
|
|
27
|
+
linkname: 'name',
|
|
28
|
+
show_title: true,
|
|
29
|
+
spacer: '',
|
|
30
|
+
reverse: false
|
|
31
|
+
}.merge(options)
|
|
32
|
+
languages = Language.published.with_language_root.order("name #{options[:reverse] ? 'DESC' : 'ASC'}")
|
|
33
|
+
return nil if languages.count < 2
|
|
34
|
+
render(
|
|
35
|
+
partial: "alchemy/language_links/language",
|
|
36
|
+
collection: languages,
|
|
37
|
+
spacer_template: "alchemy/language_links/spacer",
|
|
38
|
+
locals: {languages: languages, options: options}
|
|
39
|
+
)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def language_switches(options={})
|
|
43
|
+
ActiveSupport::Deprecation.warn("Used deprecated language_switches helper. Please use language_links instead.")
|
|
44
|
+
language_links(options)
|
|
45
|
+
end
|
|
46
|
+
|
|
33
47
|
def language_switcher(options={})
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
:spacer => "",
|
|
37
|
-
:link_to_public_child => configuration(:redirect_to_public_child),
|
|
38
|
-
:link_to_page_with_layout => nil,
|
|
39
|
-
:show_title => true,
|
|
40
|
-
:reverse => false,
|
|
41
|
-
:as_select_box => false,
|
|
42
|
-
:show_flags => false
|
|
43
|
-
}
|
|
44
|
-
options = default_options.merge(options)
|
|
45
|
-
if multi_language?
|
|
46
|
-
language_links = []
|
|
47
|
-
pages = (options[:link_to_public_child] == true) ? Page.from_current_site.language_roots : Page.from_current_site.public_language_roots
|
|
48
|
-
return nil if (pages.blank? || pages.length == 1)
|
|
49
|
-
pages.each_with_index do |page, i|
|
|
50
|
-
if (options[:link_to_page_with_layout] != nil)
|
|
51
|
-
page_found_by_layout = Page.from_current_site.where(:page_layout => options[:link_to_page_with_layout].to_s, :language_id => page.language_id).first
|
|
52
|
-
end
|
|
53
|
-
page = page_found_by_layout || page
|
|
54
|
-
page = (options[:link_to_public_child] ? (page.first_public_child.blank? ? nil : page.first_public_child) : nil) if !page.public?
|
|
55
|
-
if !page.blank?
|
|
56
|
-
active = session[:language_id] == page.language.id
|
|
57
|
-
linkname = page.language.label(options[:linkname])
|
|
58
|
-
if options[:as_select_box]
|
|
59
|
-
language_links << [linkname, show_page_url(:urlname => page.urlname, :lang => page.language.code)]
|
|
60
|
-
else
|
|
61
|
-
language_links << link_to(
|
|
62
|
-
"#{content_tag(:span, '', :class => "flag") if options[:show_flags]}#{ content_tag(:span, linkname)}".html_safe,
|
|
63
|
-
alchemy.show_page_path(:urlname => page.urlname, :lang => page.language.code),
|
|
64
|
-
:class => "#{(active ? 'active ' : nil)}#{page.language.code} #{(i == 0) ? 'first' : (i==pages.length-1) ? 'last' : nil}",
|
|
65
|
-
:title => options[:show_title] ? Alchemy::I18n.t("alchemy.language_links.#{page.language.code}.title", :default => page.language.name) : nil
|
|
66
|
-
)
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
# when last iteration and we have just one language_link,
|
|
70
|
-
# we dont need to render it.
|
|
71
|
-
if (i==pages.length-1) && language_links.length == 1
|
|
72
|
-
return nil
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
return nil if language_links.empty? || language_links.length == 1
|
|
76
|
-
language_links.reverse! if options[:reverse]
|
|
77
|
-
if options[:as_select_box]
|
|
78
|
-
return select_tag(
|
|
79
|
-
'language',
|
|
80
|
-
options_for_select(
|
|
81
|
-
language_links,
|
|
82
|
-
show_page_url(:urlname => @page.urlname, :lang => @page.language.code)
|
|
83
|
-
),
|
|
84
|
-
:onchange => "window.location=this.value"
|
|
85
|
-
)
|
|
86
|
-
else
|
|
87
|
-
raw(language_links.join(options[:spacer]))
|
|
88
|
-
end
|
|
89
|
-
else
|
|
90
|
-
nil
|
|
91
|
-
end
|
|
48
|
+
ActiveSupport::Deprecation.warn("Used deprecated language_switcher helper. Please use language_links instead.")
|
|
49
|
+
language_links(options)
|
|
92
50
|
end
|
|
93
|
-
alias_method :language_switches, :language_switcher
|
|
94
51
|
|
|
95
52
|
# Renders the layout from @page.page_layout. File resists in /app/views/page_layouts/_LAYOUT-NAME.html.erb
|
|
96
53
|
def render_page_layout(options={})
|
|
@@ -121,7 +121,7 @@ module Alchemy
|
|
|
121
121
|
|
|
122
122
|
# Returns all content descriptions from elements.yml
|
|
123
123
|
def descriptions
|
|
124
|
-
|
|
124
|
+
Element.descriptions.collect { |e| e['contents'] }.flatten.compact
|
|
125
125
|
end
|
|
126
126
|
|
|
127
127
|
def normalize_essence_type(essence_type)
|
|
@@ -31,6 +31,7 @@ module Alchemy
|
|
|
31
31
|
before_save :remove_old_default, :if => proc { |m| m.default_changed? && m != Language.get_default }
|
|
32
32
|
|
|
33
33
|
scope :published, where(:public => true)
|
|
34
|
+
scope :with_language_root, joins(:pages).where("alchemy_pages" => {language_root: true})
|
|
34
35
|
|
|
35
36
|
# multi-site support
|
|
36
37
|
scope :on_site, lambda { |s| s.present? ? where(site_id: s) : scoped }
|
data/app/models/alchemy/page.rb
CHANGED
|
@@ -252,15 +252,15 @@ module Alchemy
|
|
|
252
252
|
folded_page.folded
|
|
253
253
|
end
|
|
254
254
|
|
|
255
|
-
# Returns a Hash
|
|
255
|
+
# Returns a Hash describing the status of the Page.
|
|
256
256
|
#
|
|
257
257
|
def status
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
258
|
+
{
|
|
259
|
+
visible: visible?,
|
|
260
|
+
public: public?,
|
|
261
|
+
locked: locked?,
|
|
262
|
+
restricted: restricted?
|
|
263
|
+
}
|
|
264
264
|
end
|
|
265
265
|
|
|
266
266
|
# Returns the translated status for given status type.
|
|
@@ -268,7 +268,7 @@ module Alchemy
|
|
|
268
268
|
# @param [Symbol] status_type
|
|
269
269
|
#
|
|
270
270
|
def status_title(status_type)
|
|
271
|
-
I18n.t(self.
|
|
271
|
+
I18n.t(self.status[status_type].to_s, scope: "page_states.#{status_type}")
|
|
272
272
|
end
|
|
273
273
|
|
|
274
274
|
def has_controller?
|
|
@@ -20,12 +20,14 @@
|
|
|
20
20
|
<%= render 'alchemy/admin/partials/remote_search_form' %>
|
|
21
21
|
</div>
|
|
22
22
|
<div id="assign_file_list" class="with_padding<%= params[:tagged_with].present? ? ' filtered' : '' %>">
|
|
23
|
+
<% if any_tags = Alchemy::Attachment.tag_counts.any? %>
|
|
23
24
|
<div id="library_sidebar">
|
|
24
25
|
<div id="tag_list">
|
|
25
26
|
<%= render 'tag_list' %>
|
|
26
27
|
</div>
|
|
27
28
|
</div>
|
|
28
|
-
|
|
29
|
+
<% end %>
|
|
30
|
+
<div id="overlay_file_list" class="<%= any_tags ? 'with_tag_list' : nil %>">
|
|
29
31
|
<%= render 'overlay_file_list' %>
|
|
30
32
|
</div>
|
|
31
33
|
</div>
|
|
@@ -1,31 +1,29 @@
|
|
|
1
1
|
<% p = params.dup %>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
<%
|
|
7
|
-
|
|
8
|
-
<%=
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
) %>
|
|
20
|
-
<% end %>
|
|
2
|
+
<h2><%= _t("Filter by tag") %></h2>
|
|
3
|
+
<%= js_filter_field '#tag_list li' %>
|
|
4
|
+
<ul>
|
|
5
|
+
<% Alchemy::Attachment.tag_counts.each do |t| %>
|
|
6
|
+
<% attachment_tags = filtered_by_tag?(t) ? tag_filter(remove: t) : tag_filter(add: t) %>
|
|
7
|
+
<%= content_tag 'li', name: t.name, class: p[:tagged_with].try(:split, ',').try(:include?, t.name) ? 'active' : nil do %>
|
|
8
|
+
<%= link_to(
|
|
9
|
+
"#{t.name} (#{t.count})",
|
|
10
|
+
url_for(
|
|
11
|
+
p.delete_if { |k, v| k == "page" }.merge(
|
|
12
|
+
action: 'index',
|
|
13
|
+
tagged_with: attachment_tags
|
|
14
|
+
)
|
|
15
|
+
),
|
|
16
|
+
remote: request.xhr?,
|
|
17
|
+
class: 'please_wait'
|
|
18
|
+
) %>
|
|
21
19
|
<% end %>
|
|
22
|
-
</ul>
|
|
23
|
-
<% if p[:tagged_with].present? %>
|
|
24
|
-
<%= link_to(
|
|
25
|
-
render_icon('delete-small') + _t('Remove tag filter'),
|
|
26
|
-
url_for(p.delete_if { |k, v| k == "tagged_with" }.merge(action: 'index')),
|
|
27
|
-
remote: request.xhr?,
|
|
28
|
-
class: 'button small with_icon please_wait'
|
|
29
|
-
) %>
|
|
30
20
|
<% end %>
|
|
21
|
+
</ul>
|
|
22
|
+
<% if p[:tagged_with].present? %>
|
|
23
|
+
<%= link_to(
|
|
24
|
+
render_icon('delete-small') + _t('Remove tag filter'),
|
|
25
|
+
url_for(p.delete_if { |k, v| k == "tagged_with" }.merge(action: 'index')),
|
|
26
|
+
remote: request.xhr?,
|
|
27
|
+
class: 'button small with_icon please_wait'
|
|
28
|
+
) %>
|
|
31
29
|
<% end %>
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
<% any_tags = Alchemy::Attachment.tag_counts.any? %>
|
|
1
2
|
<%= toolbar(
|
|
2
3
|
buttons: [
|
|
3
4
|
{
|
|
@@ -15,12 +16,14 @@
|
|
|
15
16
|
}
|
|
16
17
|
]
|
|
17
18
|
) %>
|
|
18
|
-
<div id="archive_all" class="with_tag_filter">
|
|
19
|
+
<div id="archive_all" class="<%= any_tags ? 'with_tag_filter' : nil %>">
|
|
19
20
|
<%= resources_header %>
|
|
20
21
|
<%= render partial: 'files_list' %>
|
|
22
|
+
<% if any_tags %>
|
|
21
23
|
<div id="library_sidebar">
|
|
22
24
|
<div id="tag_list" class="<%= params[:tagged_with].present? ? 'filtered' : '' %>">
|
|
23
25
|
<%= render partial: 'tag_list' %>
|
|
24
26
|
</div>
|
|
25
27
|
</div>
|
|
28
|
+
<% end %>
|
|
26
29
|
</div>
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<%= select_tag(
|
|
2
2
|
"element_from_page_#{@page_id}_to_link",
|
|
3
|
-
options_for_select(@elements.collect{ |m| [m.display_name_with_preview_text, "##{m.dom_id}"] }),
|
|
4
|
-
:
|
|
5
|
-
:
|
|
6
|
-
:
|
|
7
|
-
:
|
|
8
|
-
:
|
|
3
|
+
options_for_select(@elements.collect{ |m| [m.display_name_with_preview_text.html_safe, "##{m.dom_id}"] }),
|
|
4
|
+
prompt: _t(:choose_element_to_link),
|
|
5
|
+
class: "elements_from_page_selector alchemy_selectbox",
|
|
6
|
+
onchange: "jQuery('#page_anchor').val(value)",
|
|
7
|
+
title: _t(:choose_element_as_target),
|
|
8
|
+
autofocus: true
|
|
9
9
|
) %>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
(function($) {
|
|
2
2
|
|
|
3
|
-
var close = $('<a class="close_elements_from_page_selector" title="<%= _t(:remove) -%>"
|
|
3
|
+
var close = $('<a class="close_elements_from_page_selector" title="<%= _t(:remove) -%>"/>');
|
|
4
4
|
$('#elements_for_page_<%= @page_id -%>').html('<%= escape_javascript(render("elements_select")) %>');
|
|
5
5
|
$('#elements_for_page_<%= @page_id -%>').append(close);
|
|
6
6
|
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
</div>
|
|
90
90
|
<div class="sitemap_sitename">
|
|
91
91
|
<%- if page.redirects_to_external? -%>
|
|
92
|
-
<span class="sitemap_pagename_link
|
|
92
|
+
<span class="sitemap_pagename_link inactive"><%= page.name %></span>
|
|
93
93
|
<span class="redirect_url" title="<%= h page.urlname %>">
|
|
94
94
|
» <%= _t('Redirects to') %>:
|
|
95
95
|
<%= h page.urlname %>
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
:url => @url_prefix + page_for_links.urlname
|
|
34
34
|
},
|
|
35
35
|
:title => _t('page_for_links.choose_page', :name => page_for_links.name),
|
|
36
|
-
:class => "sitemap_pagename_link
|
|
36
|
+
:class => "sitemap_pagename_link"
|
|
37
37
|
}) %>
|
|
38
38
|
<% end %>
|
|
39
39
|
</div>
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
<div class="toolbar_buttons">
|
|
27
27
|
<div class="button_with_label">
|
|
28
28
|
<%= form_tag alchemy.unlock_admin_page_path(@page, :redirect_to => @layoutpage ? alchemy.admin_layoutpages_path : alchemy.admin_pages_path), :id => 'unlock_page_form' do %>
|
|
29
|
-
<button class="icon_button" title="<%= _t(:explain_unlocking) %>">
|
|
29
|
+
<button class="icon_button" title="<%= _t(:explain_unlocking) %>" data-alchemy-hotkey="alt-x">
|
|
30
30
|
<%= render_icon('close') %>
|
|
31
31
|
</button>
|
|
32
32
|
<label><%= _t(:unlock_page) %></label>
|
|
@@ -51,7 +51,8 @@
|
|
|
51
51
|
:size => @page.layoutpage? ? '410x150' : '410x650'
|
|
52
52
|
},
|
|
53
53
|
:class => :icon_button,
|
|
54
|
-
:title => _t(:edit_page_properties)
|
|
54
|
+
:title => _t(:edit_page_properties),
|
|
55
|
+
'data-alchemy-hotkey' => 'alt-e'
|
|
55
56
|
) %>
|
|
56
57
|
<label><%= _t(:page_properties) %></label>
|
|
57
58
|
</div>
|
|
@@ -111,6 +112,7 @@
|
|
|
111
112
|
{
|
|
112
113
|
title: '<%= _t("New Element") %>',
|
|
113
114
|
label: '<%= _t("New Element") %>',
|
|
115
|
+
hotkey: 'alt-n',
|
|
114
116
|
iconClass: 'new_element',
|
|
115
117
|
onClick: function() {
|
|
116
118
|
Alchemy.openWindow('<%= alchemy.new_admin_element_path(:page_id => @page.id) %>', {
|
|
@@ -34,7 +34,6 @@
|
|
|
34
34
|
:style => 'float: none'
|
|
35
35
|
) %>
|
|
36
36
|
</div>
|
|
37
|
-
<%= content_tag :h3, _t("picture_library.filter.#{params[:filter]}") if params[:filter].present? %>
|
|
38
37
|
<div id="pictures">
|
|
39
38
|
<% if @pictures.blank? and @recent_pictures.blank? and params[:query].nil? %>
|
|
40
39
|
<div class="info">
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
options_for_select([
|
|
8
8
|
[_t(:all_pictures), ''],
|
|
9
9
|
[_t(:last_upload_only), 'last_upload'],
|
|
10
|
-
[_t(:recently_uploaded_only), 'recent']
|
|
10
|
+
[_t(:recently_uploaded_only), 'recent'],
|
|
11
|
+
[_t(:without_tag), 'without_tag']
|
|
11
12
|
], params[:filter]),
|
|
12
13
|
:data => { :remote => !!request.xhr? },
|
|
13
14
|
:class => 'alchemy_selectbox'
|
|
@@ -79,4 +79,9 @@
|
|
|
79
79
|
<span class="picture_name" title="<%= picture.name %>" id="image_picture_<%= picture.id %>_name">
|
|
80
80
|
<%= picture.name %>
|
|
81
81
|
</span>
|
|
82
|
+
<div class="picture_tags">
|
|
83
|
+
<% picture.tag_list.each do |tag| %>
|
|
84
|
+
<span class="tag"><%= tag %></span>
|
|
85
|
+
<% end %>
|
|
86
|
+
</div>
|
|
82
87
|
</div>
|
|
@@ -1,5 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
<%= toolbar(
|
|
2
|
+
buttons: [
|
|
3
|
+
{
|
|
4
|
+
icon: 'back',
|
|
5
|
+
url: request.referer || alchemy.admin_dashboard_path,
|
|
6
|
+
label: _t(:back),
|
|
7
|
+
title: _t(:back),
|
|
8
|
+
hotkey: 'alt-z',
|
|
9
|
+
overlay: false,
|
|
10
|
+
skip_permission_check: true
|
|
11
|
+
}
|
|
12
|
+
]
|
|
13
|
+
) %>
|
|
14
|
+
|
|
15
|
+
<%= render_message(:error) do %>
|
|
16
|
+
<h1><%= _t('An error happened') %></h1>
|
|
17
|
+
<h2>
|
|
18
|
+
<%= @error.class %>
|
|
19
|
+
<%= @notice %>
|
|
20
|
+
</h2>
|
|
21
|
+
<p>
|
|
22
|
+
<% @trace.each do |line| %>
|
|
23
|
+
<%= line %><br>
|
|
24
|
+
<% end %>
|
|
25
|
+
</p>
|
|
26
|
+
<% end %>
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
) %>
|
|
33
33
|
|
|
34
34
|
<%= link_to(render_icon(:link), '#', {
|
|
35
|
-
:onclick => "Alchemy.LinkOverlay.open(this
|
|
35
|
+
:onclick => "Alchemy.LinkOverlay.open(this)",
|
|
36
36
|
:class => content.linked? ? 'linked' : nil,
|
|
37
37
|
:title => _t(:link_image),
|
|
38
38
|
:data => {'content-id' => content.id},
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<%= link_to(
|
|
3
3
|
render_icon(:link),
|
|
4
4
|
'#',
|
|
5
|
-
:onclick => "Alchemy.LinkOverlay.open(this
|
|
5
|
+
:onclick => "Alchemy.LinkOverlay.open(this); return false;",
|
|
6
6
|
:class => "icon_button#{content.linked? ? ' linked' : ''}",
|
|
7
7
|
:data => {'content-id' => content.id},
|
|
8
8
|
:title => _t(:place_link),
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<% css_classes = [language.code] %>
|
|
2
|
+
<% css_classes << 'active' if session[:language_id] == language.id %>
|
|
3
|
+
<% css_classes << 'first' if languages.first == language %>
|
|
4
|
+
<% css_classes << 'last' if languages.last == language %>
|
|
5
|
+
<% link_title = options[:show_title] ? _t("#{language.code}.title", scope: 'language_links', default: language.name) : nil %>
|
|
6
|
+
|
|
7
|
+
<%= link_to(
|
|
8
|
+
content_tag(:span, language.label(options[:linkname])).html_safe,
|
|
9
|
+
show_alchemy_page_path(language.pages.language_roots.first, lang: language.code),
|
|
10
|
+
class: css_classes.join(" "),
|
|
11
|
+
title: link_title
|
|
12
|
+
) %>
|