alchemy_cms 2.5.0.b5 → 2.5.0.b9
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/README.md +1 -1
- data/alchemy_cms.gemspec +2 -2
- data/app/assets/javascripts/alchemy/alchemy.base.js +0 -24
- data/app/assets/javascripts/alchemy/alchemy.growler.js +2 -4
- data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +0 -1
- data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +1 -1
- data/app/assets/stylesheets/alchemy/base.scss +4 -20
- data/app/assets/stylesheets/alchemy/elements.scss +19 -31
- data/app/assets/stylesheets/alchemy/flash.scss +11 -0
- data/app/assets/stylesheets/alchemy/form_elements.scss +2 -14
- data/app/assets/stylesheets/alchemy/menubar.css.scss +1 -0
- data/app/assets/stylesheets/alchemy/mixins.scss +37 -2
- data/app/assets/stylesheets/alchemy/notices.scss +1 -0
- data/app/assets/stylesheets/alchemy/sitemap.scss +30 -0
- data/app/assets/stylesheets/alchemy/tables.scss +20 -27
- data/app/controllers/alchemy/admin/attachments_controller.rb +3 -3
- data/app/controllers/alchemy/admin/base_controller.rb +1 -1
- data/app/controllers/alchemy/admin/contents_controller.rb +2 -2
- data/app/controllers/alchemy/admin/elements_controller.rb +3 -3
- data/app/controllers/alchemy/admin/essence_pictures_controller.rb +2 -2
- data/app/controllers/alchemy/admin/pages_controller.rb +16 -9
- data/app/controllers/alchemy/admin/pictures_controller.rb +8 -8
- data/app/controllers/alchemy/admin/resources_controller.rb +1 -1
- data/app/controllers/alchemy/admin/tags_controller.rb +4 -4
- data/app/controllers/alchemy/admin/users_controller.rb +3 -3
- data/app/controllers/alchemy/base_controller.rb +10 -12
- data/app/controllers/alchemy/messages_controller.rb +2 -2
- data/app/controllers/alchemy/pages_controller.rb +4 -1
- data/app/controllers/alchemy/pictures_controller.rb +1 -4
- data/app/controllers/alchemy/user_sessions_controller.rb +5 -5
- data/app/helpers/alchemy/admin/attachments_helper.rb +1 -1
- data/app/helpers/alchemy/admin/base_helper.rb +13 -13
- data/app/helpers/alchemy/admin/contents_helper.rb +6 -6
- data/app/helpers/alchemy/admin/elements_helper.rb +2 -2
- data/app/helpers/alchemy/admin/essences_helper.rb +8 -8
- data/app/helpers/alchemy/admin/pages_helper.rb +13 -7
- data/app/helpers/alchemy/base_helper.rb +20 -5
- data/app/helpers/alchemy/elements_helper.rb +2 -2
- data/app/helpers/alchemy/essences_helper.rb +2 -2
- data/app/helpers/alchemy/pages_helper.rb +2 -3
- data/app/models/alchemy/cell.rb +11 -3
- data/app/models/alchemy/content.rb +17 -17
- data/app/models/alchemy/element.rb +49 -26
- data/app/models/alchemy/legacy_page_url.rb +6 -0
- data/app/models/alchemy/page.rb +24 -45
- data/app/models/alchemy/picture.rb +1 -2
- data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +3 -3
- data/app/views/alchemy/admin/attachments/_attachment.html.erb +6 -6
- data/app/views/alchemy/admin/attachments/_files_list.html.erb +2 -2
- data/app/views/alchemy/admin/attachments/edit.html.erb +5 -3
- data/app/views/alchemy/admin/attachments/index.html.erb +3 -3
- data/app/views/alchemy/admin/attachments/new.html.erb +2 -2
- data/app/views/alchemy/admin/clipboard/clear.js.erb +1 -1
- data/app/views/alchemy/admin/clipboard/index.html.erb +3 -3
- data/app/views/alchemy/admin/clipboard/insert.js.erb +2 -2
- data/app/views/alchemy/admin/clipboard/remove.js.erb +4 -4
- data/app/views/alchemy/admin/contents/_missing.html.erb +2 -2
- data/app/views/alchemy/admin/contents/create.js.erb +1 -1
- data/app/views/alchemy/admin/contents/new.html.erb +3 -3
- data/app/views/alchemy/admin/dashboard/index.html.erb +12 -12
- data/app/views/alchemy/admin/elements/_add_picture.html.erb +1 -1
- data/app/views/alchemy/admin/elements/_element.html.erb +1 -1
- data/app/views/alchemy/admin/elements/_element_foot.html.erb +5 -5
- data/app/views/alchemy/admin/elements/_element_head.html.erb +6 -6
- data/app/views/alchemy/admin/elements/_elements_select.html.erb +2 -2
- data/app/views/alchemy/admin/elements/_new_element_form.html.erb +4 -4
- data/app/views/alchemy/admin/elements/_picture_gallery_editor.html.erb +1 -1
- data/app/views/alchemy/admin/elements/create.js.erb +2 -2
- data/app/views/alchemy/admin/elements/index.html.erb +2 -2
- data/app/views/alchemy/admin/elements/list.js.erb +1 -1
- data/app/views/alchemy/admin/elements/new.html.erb +4 -4
- data/app/views/alchemy/admin/elements/order.js.erb +1 -1
- data/app/views/alchemy/admin/elements/trash.js.erb +1 -1
- data/app/views/alchemy/admin/elements/update.js.erb +1 -1
- data/app/views/alchemy/admin/essence_files/edit.html.erb +5 -5
- data/app/views/alchemy/admin/essence_pictures/crop.html.erb +4 -4
- data/app/views/alchemy/admin/essence_pictures/edit.html.erb +4 -4
- data/app/views/alchemy/admin/languages/_form.html.erb +6 -10
- data/app/views/alchemy/admin/languages/_language.html.erb +4 -4
- data/app/views/alchemy/admin/languages/_table.html.erb +1 -1
- data/app/views/alchemy/admin/languages/index.html.erb +1 -1
- data/app/views/alchemy/admin/layoutpages/_layoutpage.html.erb +6 -6
- data/app/views/alchemy/admin/layoutpages/index.html.erb +8 -8
- data/app/views/alchemy/admin/pages/_contactform_links.html.erb +7 -7
- data/app/views/alchemy/admin/pages/_create_language_form.html.erb +10 -9
- data/app/views/alchemy/admin/pages/_external_link.html.erb +7 -7
- data/app/views/alchemy/admin/pages/_file_link.html.erb +6 -6
- data/app/views/alchemy/admin/pages/_internal_link.html.erb +5 -5
- data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_page.html.erb +28 -28
- data/app/views/alchemy/admin/pages/_page_for_links.html.erb +5 -5
- data/app/views/alchemy/admin/pages/_page_infos.html.erb +3 -3
- data/app/views/alchemy/admin/pages/_page_status.html.erb +3 -3
- data/app/views/alchemy/admin/pages/_sitemap.html.erb +1 -1
- data/app/views/alchemy/admin/pages/configure.html.erb +11 -11
- data/app/views/alchemy/admin/pages/configure_external.html.erb +4 -4
- data/app/views/alchemy/admin/pages/destroy.js.erb +0 -1
- data/app/views/alchemy/admin/pages/edit.html.erb +35 -35
- data/app/views/alchemy/admin/pages/flush.js.erb +1 -1
- data/app/views/alchemy/admin/pages/fold.js.erb +0 -1
- data/app/views/alchemy/admin/pages/index.html.erb +14 -14
- data/app/views/alchemy/admin/pages/link.html.erb +4 -4
- data/app/views/alchemy/admin/pages/locked.html.erb +1 -1
- data/app/views/alchemy/admin/pages/new.html.erb +4 -4
- data/app/views/alchemy/admin/pages/update.js.erb +2 -2
- data/app/views/alchemy/admin/partials/_autocomplete_tag_list.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_flash_notices.html.erb +3 -3
- data/app/views/alchemy/admin/partials/_flash_upload.html.erb +8 -8
- data/app/views/alchemy/admin/partials/_language_tree_select.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +2 -2
- data/app/views/alchemy/admin/partials/_search_form.html.erb +2 -2
- data/app/views/alchemy/admin/partials/_sub_navigation_tab.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_upload_form.html.erb +11 -11
- data/app/views/alchemy/admin/pictures/_archive.html.erb +13 -13
- data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +7 -7
- data/app/views/alchemy/admin/pictures/_filter_bar.html.erb +4 -4
- data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/_picture.html.erb +7 -7
- data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/_tag_list.html.erb +2 -2
- data/app/views/alchemy/admin/pictures/edit.html.erb +2 -2
- data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +6 -6
- data/app/views/alchemy/admin/pictures/index.html.erb +10 -10
- data/app/views/alchemy/admin/pictures/info.html.erb +2 -2
- data/app/views/alchemy/admin/pictures/new.html.erb +2 -2
- data/app/views/alchemy/admin/resources/_boolean.html.erb +5 -0
- data/app/views/alchemy/admin/resources/_datetime.html.erb +2 -0
- data/app/views/alchemy/admin/resources/_form.html.erb +17 -28
- data/app/views/alchemy/admin/resources/_resource.html.erb +4 -4
- data/app/views/alchemy/admin/resources/_string.html.erb +5 -0
- data/app/views/alchemy/admin/resources/_table.html.erb +1 -1
- data/app/views/alchemy/admin/resources/_text.html.erb +5 -0
- data/app/views/alchemy/admin/resources/index.html.erb +1 -1
- data/app/views/alchemy/admin/tags/_tag.html.erb +4 -4
- data/app/views/alchemy/admin/tags/edit.html.erb +4 -4
- data/app/views/alchemy/admin/tags/index.html.erb +5 -5
- data/app/views/alchemy/admin/tags/new.html.erb +2 -2
- data/app/views/alchemy/admin/trash/clear.js.coffee +1 -1
- data/app/views/alchemy/admin/trash/index.html.erb +3 -3
- data/app/views/alchemy/admin/users/_table.html.erb +3 -3
- data/app/views/alchemy/admin/users/_user.html.erb +6 -6
- data/app/views/alchemy/admin/users/index.html.erb +4 -4
- data/app/views/alchemy/base/error_notice.html.erb +1 -4
- data/app/views/alchemy/elements/_editor_not_found.html.erb +2 -2
- data/app/views/alchemy/essences/_essence_boolean_view.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_file_editor.html.erb +7 -7
- data/app/views/alchemy/essences/_essence_picture_editor.html.erb +5 -5
- data/app/views/alchemy/essences/_essence_picture_tools.html.erb +8 -8
- data/app/views/alchemy/essences/_linkable_essence_tools.html.erb +2 -2
- data/app/views/alchemy/search/_form.html.erb +2 -2
- data/app/views/alchemy/search/_result.html.erb +1 -1
- data/app/views/alchemy/search/_results.html.erb +3 -3
- data/app/views/alchemy/user_sessions/leave.html.erb +5 -5
- data/app/views/alchemy/user_sessions/login.html.erb +1 -1
- data/app/views/alchemy/user_sessions/signup.html.erb +2 -2
- data/app/views/kaminari/_gap.html.erb +1 -1
- data/app/views/kaminari/_next_page.html.erb +2 -2
- data/app/views/kaminari/_prev_page.html.erb +2 -2
- data/app/views/layouts/alchemy/admin.html.erb +7 -7
- data/bin/alchemy +1 -1
- data/config/authorization_rules.rb +1 -3
- data/config/locales/alchemy.de.yml +33 -23
- data/config/locales/alchemy.en.yml +31 -6
- data/db/migrate/{20121026100815_alchemy_two_point_three.rb → 20121118000000_alchemy_two_point_four.rb} +51 -28
- data/db/migrate/20130110212411_create_alchemy_legacy_page_urls.rb +11 -0
- data/lib/alchemy/capistrano.rb +22 -30
- data/lib/alchemy/errors.rb +45 -0
- data/lib/alchemy/i18n.rb +7 -5
- data/lib/alchemy/logger.rb +16 -0
- data/lib/alchemy/page_layout.rb +3 -3
- data/lib/alchemy/resource.rb +17 -1
- data/lib/alchemy/resources_helper.rb +8 -1
- data/lib/alchemy/upgrader.rb +9 -0
- data/lib/alchemy/version.rb +1 -1
- data/lib/alchemy_cms.rb +1 -6
- data/lib/rails/generators/alchemy/scaffold/files/elements.yml +41 -19
- data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +13 -0
- data/lib/tasks/alchemy/db.rake +5 -11
- data/lib/tasks/alchemy/install.rake +7 -7
- data/spec/controllers/admin/pages_controller_spec.rb +14 -2
- data/spec/controllers/pages_controller_spec.rb +50 -17
- data/spec/dummy/config/application.rb +1 -1
- data/spec/dummy/db/migrate/{20121026100815_alchemy_two_point_three.rb → 20121118000000_alchemy_two_point_four.rb} +51 -28
- data/spec/dummy/db/migrate/20130110212411_create_alchemy_legacy_page_urls.rb +11 -0
- data/spec/dummy/db/schema.rb +10 -1
- data/spec/factories.rb +1 -0
- data/spec/integration/admin/picture_library_integration_spec.rb +8 -2
- data/spec/integration/security_spec.rb +2 -2
- data/spec/integration/translation_integration_spec.rb +20 -4
- data/spec/libraries/resources_helper_spec.rb +1 -1
- data/spec/models/cell_spec.rb +45 -0
- data/spec/models/page_spec.rb +19 -2
- data/spec/models/picture_spec.rb +12 -0
- data/spec/routing_spec.rb +115 -115
- data/spec/spec_helper.rb +3 -0
- data/spec/support/alchemy/specs_helpers.rb +6 -2
- data/spec/support/image.png +0 -0
- data/spec/support/image2.PNG +0 -0
- data/spec/support/image3.jpeg +0 -0
- metadata +27 -23
- data/db/migrate/20121113115120_create_alchemy_essence_links.rb +0 -13
- data/db/migrate/20121115100736_add_cached_tag_list_to_elements_pages_and_users.rb +0 -7
- data/db/migrate/20121116140636_add_cached_tag_list_to_alchemy_attachments.rb +0 -5
- data/db/migrate/20121116141016_change_alchemy_pictures_tag_list_column.rb +0 -9
- data/spec/dummy/db/migrate/20121113115120_create_alchemy_essence_links.rb +0 -13
- data/spec/dummy/db/migrate/20121115100736_add_cached_tag_list_to_elements_pages_and_users.rb +0 -7
- data/spec/dummy/db/migrate/20121116140636_add_cached_tag_list_to_alchemy_attachments.rb +0 -5
- data/spec/dummy/db/migrate/20121116141016_change_alchemy_pictures_tag_list_column.rb +0 -9
|
@@ -52,10 +52,10 @@ module Alchemy
|
|
|
52
52
|
return '' if page.level == 1
|
|
53
53
|
if page.folded?(current_user.id)
|
|
54
54
|
css_class = 'folded'
|
|
55
|
-
title =
|
|
55
|
+
title = _t('Show childpages')
|
|
56
56
|
else
|
|
57
57
|
css_class = 'collapsed'
|
|
58
|
-
title =
|
|
58
|
+
title = _t('Hide childpages')
|
|
59
59
|
end
|
|
60
60
|
link_to(
|
|
61
61
|
'',
|
|
@@ -78,7 +78,7 @@ module Alchemy
|
|
|
78
78
|
# Used for translations selector in Alchemy cockpit user settings.
|
|
79
79
|
def translations_for_select
|
|
80
80
|
Alchemy::I18n.available_locales.map do |locale|
|
|
81
|
-
[
|
|
81
|
+
[_t(locale, :scope => :translations), locale]
|
|
82
82
|
end
|
|
83
83
|
end
|
|
84
84
|
|
|
@@ -98,9 +98,9 @@ module Alchemy
|
|
|
98
98
|
:onclick => "jQuery('##{options[:id]}').val(''); #{options[:onkeyup]}",
|
|
99
99
|
:class => "js_filter_field_clear",
|
|
100
100
|
:style => "display: none",
|
|
101
|
-
:title =>
|
|
101
|
+
:title => _t("click_to_show_all")
|
|
102
102
|
})
|
|
103
|
-
filter_field << %(<label for="#{options[:id]}">#{
|
|
103
|
+
filter_field << %(<label for="#{options[:id]}">#{_t(:search)}</label>)
|
|
104
104
|
filter_field << '</div>'
|
|
105
105
|
filter_field.html_safe
|
|
106
106
|
end
|
|
@@ -122,10 +122,10 @@ module Alchemy
|
|
|
122
122
|
link_to(link_string, url,
|
|
123
123
|
html_options.merge(
|
|
124
124
|
'data-alchemy-confirm-delete' => {
|
|
125
|
-
:title =>
|
|
125
|
+
:title => _t("please_confirm"),
|
|
126
126
|
:message => message,
|
|
127
|
-
:ok_label =>
|
|
128
|
-
:cancel_label =>
|
|
127
|
+
:ok_label => _t("Yes"),
|
|
128
|
+
:cancel_label => _t("No")
|
|
129
129
|
}.to_json
|
|
130
130
|
)
|
|
131
131
|
)
|
|
@@ -143,7 +143,7 @@ module Alchemy
|
|
|
143
143
|
defaults = {
|
|
144
144
|
:from_page => nil,
|
|
145
145
|
:elements_with_name => nil,
|
|
146
|
-
:prompt =>
|
|
146
|
+
:prompt => _t('Please choose')
|
|
147
147
|
}
|
|
148
148
|
options = defaults.merge(options)
|
|
149
149
|
if options[:from_page]
|
|
@@ -171,7 +171,7 @@ module Alchemy
|
|
|
171
171
|
# 4. The fourth parameter is the method that is called on the page object to get the value that is passed with the params of the form.
|
|
172
172
|
#
|
|
173
173
|
def pages_for_select(pages = nil, selected = nil, prompt = "", page_attribute = :id)
|
|
174
|
-
result = [[prompt.blank? ?
|
|
174
|
+
result = [[prompt.blank? ? _t('Choose page') : prompt, ""]]
|
|
175
175
|
if pages.blank?
|
|
176
176
|
pages = Page.with_language(session[:language_id]).published.order(:lft)
|
|
177
177
|
pages.each do |p|
|
|
@@ -192,7 +192,7 @@ module Alchemy
|
|
|
192
192
|
content = element.contents[content - 1]
|
|
193
193
|
end
|
|
194
194
|
if content.essence.nil?
|
|
195
|
-
return warning('Element',
|
|
195
|
+
return warning('Element', _t('content_essence_not_found'))
|
|
196
196
|
end
|
|
197
197
|
select_options = options_for_select(select_options, content.essence.content)
|
|
198
198
|
select_tag(
|
|
@@ -292,7 +292,7 @@ module Alchemy
|
|
|
292
292
|
if content_for?(:title)
|
|
293
293
|
title = content_for(:title)
|
|
294
294
|
else
|
|
295
|
-
title =
|
|
295
|
+
title = _t(controller_name, :scope => :modules)
|
|
296
296
|
end
|
|
297
297
|
"Alchemy CMS - #{title}"
|
|
298
298
|
end
|
|
@@ -314,7 +314,7 @@ module Alchemy
|
|
|
314
314
|
|
|
315
315
|
# (internal) Renders a select tag for all items in the clipboard
|
|
316
316
|
def clipboard_select_tag(items, html_options = {})
|
|
317
|
-
options = [[
|
|
317
|
+
options = [[_t('Please choose'), ""]]
|
|
318
318
|
items.each do |item|
|
|
319
319
|
options << [item.class.to_s == 'Alchemy::Element' ? item.display_name_with_preview_text : item.name, item.id]
|
|
320
320
|
end
|
|
@@ -26,7 +26,7 @@ module Alchemy
|
|
|
26
26
|
end
|
|
27
27
|
if content.description.blank?
|
|
28
28
|
warning("Content #{content.name} is missing its description")
|
|
29
|
-
title =
|
|
29
|
+
title = _t(:content_description_missing)
|
|
30
30
|
content_name = %(<span class="warning icon" title="#{title}"></span> #{content_name}).html_safe
|
|
31
31
|
end
|
|
32
32
|
content.has_validations? ? "#{content_name}<span class='validation_indicator'>*</span>".html_safe : content_name
|
|
@@ -38,11 +38,11 @@ module Alchemy
|
|
|
38
38
|
#
|
|
39
39
|
def render_new_content_link(element)
|
|
40
40
|
link_to_overlay_window(
|
|
41
|
-
render_icon(:create) +
|
|
41
|
+
render_icon(:create) + _t('add new content'),
|
|
42
42
|
alchemy.new_admin_element_content_path(element),
|
|
43
43
|
{
|
|
44
44
|
:size => '310x115',
|
|
45
|
-
:title =>
|
|
45
|
+
:title => _t('Select an content'),
|
|
46
46
|
:overflow => true
|
|
47
47
|
},
|
|
48
48
|
{
|
|
@@ -77,7 +77,7 @@ module Alchemy
|
|
|
77
77
|
#
|
|
78
78
|
def render_create_content_link(element, content_name, options = {}, options_for_content = {})
|
|
79
79
|
defaults = {
|
|
80
|
-
:label =>
|
|
80
|
+
:label => _t('Add %{name}', :name => _t(content_name, :scope => :content_names))
|
|
81
81
|
}
|
|
82
82
|
options = defaults.merge(options)
|
|
83
83
|
link_to(render_icon(:create) + options[:label], alchemy.admin_contents_path(
|
|
@@ -98,10 +98,10 @@ module Alchemy
|
|
|
98
98
|
def delete_content_link(content)
|
|
99
99
|
link_to_confirmation_window(
|
|
100
100
|
render_icon('delete-small'),
|
|
101
|
-
|
|
101
|
+
_t('Do you really want to delete this content?'),
|
|
102
102
|
alchemy.admin_content_path(content),
|
|
103
103
|
:class => 'icon_button small',
|
|
104
|
-
:title =>
|
|
104
|
+
:title => _t('Remove this content')
|
|
105
105
|
) if content.settings[:deletable]
|
|
106
106
|
end
|
|
107
107
|
|
|
@@ -68,7 +68,7 @@ module Alchemy
|
|
|
68
68
|
# The elements are returned as an array to be used in alchemy_selectbox form builder.
|
|
69
69
|
def elements_for_select(elements)
|
|
70
70
|
return [] if elements.nil?
|
|
71
|
-
options = elements.collect { |e| [
|
|
71
|
+
options = elements.collect { |e| [_t(e['name'], :scope => :element_names), e["name"]] }
|
|
72
72
|
return options_for_select(options)
|
|
73
73
|
end
|
|
74
74
|
|
|
@@ -90,7 +90,7 @@ module Alchemy
|
|
|
90
90
|
end
|
|
91
91
|
other_elements = elements - celled_elements
|
|
92
92
|
unless other_elements.blank?
|
|
93
|
-
optgroup_label =
|
|
93
|
+
optgroup_label = _t(:main_content)
|
|
94
94
|
options[optgroup_label] = other_elements.map do |e|
|
|
95
95
|
element_array_for_options(e, object_method)
|
|
96
96
|
end
|
|
@@ -22,8 +22,8 @@ module Alchemy
|
|
|
22
22
|
# * editor_options (Hash) - Will be passed to the render_essence_editor partial renderer
|
|
23
23
|
#
|
|
24
24
|
def render_essence_editor_by_type(element, essence_type, options = {}, editor_options = {})
|
|
25
|
-
return warning('Element is nil',
|
|
26
|
-
return warning('EssenceType is blank',
|
|
25
|
+
return warning('Element is nil', _t("no_element_given")) if element.blank?
|
|
26
|
+
return warning('EssenceType is blank', _t("No EssenceType given")) if essence_type.blank?
|
|
27
27
|
defaults = {
|
|
28
28
|
:position => 1,
|
|
29
29
|
:all => false
|
|
@@ -68,7 +68,7 @@ module Alchemy
|
|
|
68
68
|
#
|
|
69
69
|
def render_essence_editor_by_name(element, name, options = {}, html_options = {})
|
|
70
70
|
if element.blank?
|
|
71
|
-
return warning('Element is nil',
|
|
71
|
+
return warning('Element is nil', _t("no_element_given"))
|
|
72
72
|
end
|
|
73
73
|
content = element.content_by_name(name)
|
|
74
74
|
if content.nil?
|
|
@@ -78,24 +78,24 @@ module Alchemy
|
|
|
78
78
|
end
|
|
79
79
|
end
|
|
80
80
|
|
|
81
|
-
# Renders the EssenceSelect editor partial with a form select for storing page
|
|
81
|
+
# Renders the EssenceSelect editor partial with a form select for storing page ids
|
|
82
82
|
#
|
|
83
83
|
# === Options:
|
|
84
84
|
#
|
|
85
85
|
# :only [Hash] # Pagelayout names. Only pages with this page_layout will be displayed inside the select.
|
|
86
|
-
# :page_attribute [Symbol] # The Page attribute which will be stored.
|
|
86
|
+
# :page_attribute [Symbol] # The Page attribute which will be stored. Default is id.
|
|
87
87
|
# :global [Boolean] # Display only global pages. Default is false.
|
|
88
88
|
# :order_by [Symbol] # Order pages by this attribute.
|
|
89
89
|
#
|
|
90
|
-
# NOTE: The
|
|
91
|
-
# Then the default is :name.
|
|
90
|
+
# NOTE: The +order_by+ option only works if the +only+ or the +global+ option is also set.
|
|
91
|
+
# Then the default ordering is by :name.
|
|
92
92
|
# Otherwise the pages are ordered by their position in the nested set.
|
|
93
93
|
#
|
|
94
94
|
def page_selector(element, content_name, options = {}, select_options = {})
|
|
95
95
|
default_options = {
|
|
96
96
|
:page_attribute => :id,
|
|
97
97
|
:global => false,
|
|
98
|
-
:prompt =>
|
|
98
|
+
:prompt => _t('Choose page'),
|
|
99
99
|
:order_by => :name
|
|
100
100
|
}
|
|
101
101
|
options = default_options.merge(options)
|
|
@@ -52,7 +52,7 @@ module Alchemy
|
|
|
52
52
|
custom_config_contents = Alchemy::Tinymce.custom_config_contents
|
|
53
53
|
content_names = custom_config_contents.collect{ |c| c['name'] }
|
|
54
54
|
if content_names.uniq.length != content_names.length
|
|
55
|
-
raise "Duplicated content names with tinymce setting in elements.yml found. Please rename these contents."
|
|
55
|
+
raise TinymceError, "Duplicated content names with tinymce setting in elements.yml found. Please rename these contents."
|
|
56
56
|
end
|
|
57
57
|
custom_config_contents.each do |content|
|
|
58
58
|
next unless content['settings']['tinymce']
|
|
@@ -84,15 +84,21 @@ module Alchemy
|
|
|
84
84
|
def preview_sizes_for_select
|
|
85
85
|
options_for_select([
|
|
86
86
|
'auto',
|
|
87
|
-
[
|
|
88
|
-
[
|
|
89
|
-
[
|
|
90
|
-
[
|
|
91
|
-
[
|
|
92
|
-
[
|
|
87
|
+
[_t('240', :scope => 'preview_sizes'), 240],
|
|
88
|
+
[_t('320', :scope => 'preview_sizes'), 320],
|
|
89
|
+
[_t('480', :scope => 'preview_sizes'), 480],
|
|
90
|
+
[_t('768', :scope => 'preview_sizes'), 768],
|
|
91
|
+
[_t('1024', :scope => 'preview_sizes'), 1024],
|
|
92
|
+
[_t('1280', :scope => 'preview_sizes'), 1280]
|
|
93
93
|
])
|
|
94
94
|
end
|
|
95
95
|
|
|
96
|
+
# Returns the translated explanation of the page´s status.
|
|
97
|
+
#
|
|
98
|
+
def combined_page_status(page)
|
|
99
|
+
_t(page.status.to_a.map{ |k, v| "#{k}.#{v}" }.flatten, :scope => "page_states").delete_if(&:blank?).join("<br>").html_safe
|
|
100
|
+
end
|
|
101
|
+
|
|
96
102
|
end
|
|
97
103
|
end
|
|
98
104
|
end
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
module Alchemy
|
|
2
2
|
module BaseHelper
|
|
3
3
|
|
|
4
|
+
def _t(key, *args)
|
|
5
|
+
I18n.t(key, *args)
|
|
6
|
+
end
|
|
7
|
+
|
|
4
8
|
# An alias for truncate.
|
|
5
9
|
# Left here for downwards compatibilty.
|
|
6
10
|
def shorten(text, length)
|
|
@@ -29,9 +33,7 @@ module Alchemy
|
|
|
29
33
|
|
|
30
34
|
# Logs a message in the Rails logger (warn level) and optionally displays an error message to the user.
|
|
31
35
|
def warning(message, text = nil)
|
|
32
|
-
|
|
33
|
-
++++ WARNING: #{message}! from: #{caller.first}\n
|
|
34
|
-
)
|
|
36
|
+
Logger.warn(message, caller.first)
|
|
35
37
|
unless text.nil?
|
|
36
38
|
warning = content_tag('p', :class => 'content_editor_error') do
|
|
37
39
|
render_icon('warning') + text
|
|
@@ -55,8 +57,12 @@ module Alchemy
|
|
|
55
57
|
# <p>Caution! This is a warning!</p>
|
|
56
58
|
# <% end %>
|
|
57
59
|
#
|
|
58
|
-
def render_message(type = :info, &blk)
|
|
59
|
-
|
|
60
|
+
def render_message(type = :info, msg = nil, &blk)
|
|
61
|
+
if block_given?
|
|
62
|
+
content_tag :div, render_icon(type) + capture(&blk), :class => "#{type} message"
|
|
63
|
+
else
|
|
64
|
+
content_tag :div, render_icon(type) + msg, :class => "#{type} message"
|
|
65
|
+
end
|
|
60
66
|
end
|
|
61
67
|
|
|
62
68
|
# Returns an array of all pages in the same branch from current.
|
|
@@ -105,5 +111,14 @@ module Alchemy
|
|
|
105
111
|
Alchemy::Language.published.count > 1
|
|
106
112
|
end
|
|
107
113
|
|
|
114
|
+
# Renders the flash partial (+alchemy/admin/partials/flash+)
|
|
115
|
+
#
|
|
116
|
+
# @param [String] notice The notice you want to display
|
|
117
|
+
# @param [Symbol] style The style of this flash. Valid values are +:notice+ (default), +:warn+ and +:error+
|
|
118
|
+
#
|
|
119
|
+
def render_flash_notice(notice, style = :notice)
|
|
120
|
+
render('alchemy/admin/partials/flash', flash_type: style, message: notice)
|
|
121
|
+
end
|
|
122
|
+
|
|
108
123
|
end
|
|
109
124
|
end
|
|
@@ -81,7 +81,7 @@ module Alchemy
|
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
# This helper renders the Element partial for either the view or the editor part.
|
|
84
|
-
# Generate element partials with
|
|
84
|
+
# Generate element partials with rails generate alchemy:elements
|
|
85
85
|
def render_element(element, part = :view, options = {}, i = 1)
|
|
86
86
|
begin
|
|
87
87
|
if element.blank?
|
|
@@ -108,7 +108,7 @@ module Alchemy
|
|
|
108
108
|
Element #{part} partial not found for #{element.name}.\n
|
|
109
109
|
#{e}
|
|
110
110
|
))
|
|
111
|
-
render :partial => "alchemy/elements/#{part}_not_found", :locals => {:name => element.name, :error => "Element #{part} partial not found
|
|
111
|
+
render :partial => "alchemy/elements/#{part}_not_found", :locals => {:name => element.name, :error => "Element #{part} partial not found.<br>Use <code>rails generate alchemy:elements</code> to generate it."}
|
|
112
112
|
end
|
|
113
113
|
end
|
|
114
114
|
|
|
@@ -110,9 +110,9 @@ module Alchemy
|
|
|
110
110
|
def render_essence(content, part = :view, options = {}, html_options = {})
|
|
111
111
|
options = {:for_view => {}, :for_editor => {}}.update(options)
|
|
112
112
|
if content.nil?
|
|
113
|
-
return part == :view ? "" : warning('Content is nil',
|
|
113
|
+
return part == :view ? "" : warning('Content is nil', _t("content_not_found"))
|
|
114
114
|
elsif content.essence.nil?
|
|
115
|
-
return part == :view ? "" : warning('Essence is nil',
|
|
115
|
+
return part == :view ? "" : warning('Essence is nil', _t("content_essence_not_found"))
|
|
116
116
|
end
|
|
117
117
|
render(
|
|
118
118
|
:partial => "alchemy/essences/#{content.essence_partial_name}_#{part.to_s}",
|
|
@@ -362,14 +362,13 @@ module Alchemy
|
|
|
362
362
|
# Description = Your page description
|
|
363
363
|
# Keywords: cms, ruby, rubyonrails, rails, software, development, html, javascript, ajax
|
|
364
364
|
#
|
|
365
|
-
# Then placing +render_meta_data(:title_prefix => "
|
|
365
|
+
# Then placing +render_meta_data(:title_prefix => "Company", :title_seperator => "-")+ into the <head> part of the +pages.html.erb+ layout produces:
|
|
366
366
|
#
|
|
367
367
|
# <meta charset="UTF-8">
|
|
368
368
|
# <title>Company - #{@page.title}</title>
|
|
369
369
|
# <meta name="description" content="Your page description">
|
|
370
370
|
# <meta name="keywords" content="cms, ruby, rubyonrails, rails, software, development, html, javascript, ajax">
|
|
371
|
-
# <meta name="
|
|
372
|
-
# <meta name="date" content="Tue Dec 16 10:21:26 +0100 2008">
|
|
371
|
+
# <meta name="created" content="Tue Dec 16 10:21:26 +0100 2008">
|
|
373
372
|
# <meta name="robots" content="index, follow">
|
|
374
373
|
#
|
|
375
374
|
def render_meta_data options={}
|
data/app/models/alchemy/cell.rb
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
#
|
|
13
13
|
module Alchemy
|
|
14
14
|
class Cell < ActiveRecord::Base
|
|
15
|
+
include Logger
|
|
15
16
|
|
|
16
17
|
attr_accessible :page_id, :name
|
|
17
18
|
|
|
@@ -57,13 +58,20 @@ module Alchemy
|
|
|
57
58
|
end
|
|
58
59
|
|
|
59
60
|
# Returns the cell definition defined in +config/alchemy/cells.yml+
|
|
60
|
-
def
|
|
61
|
-
self.class.definition_for(self.name)
|
|
61
|
+
def description
|
|
62
|
+
description = self.class.definition_for(self.name)
|
|
63
|
+
if description.blank?
|
|
64
|
+
warn "Could not find cell definition for #{self.name}. Please check your cells.yml!"
|
|
65
|
+
return {}
|
|
66
|
+
else
|
|
67
|
+
description
|
|
68
|
+
end
|
|
62
69
|
end
|
|
70
|
+
alias_method :definition, :description
|
|
63
71
|
|
|
64
72
|
# Returns all elements that can be placed in this cell
|
|
65
73
|
def available_elements
|
|
66
|
-
|
|
74
|
+
description['elements'] || []
|
|
67
75
|
end
|
|
68
76
|
|
|
69
77
|
def name_for_label
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
module Alchemy
|
|
2
2
|
class Content < ActiveRecord::Base
|
|
3
|
+
include Logger
|
|
3
4
|
|
|
4
5
|
attr_accessible(
|
|
5
6
|
:do_not_index,
|
|
@@ -50,7 +51,9 @@ module Alchemy
|
|
|
50
51
|
description = element.content_description_for(essences_hash[:name])
|
|
51
52
|
description = element.available_content_description_for(essences_hash[:name]) if description.blank?
|
|
52
53
|
end
|
|
53
|
-
|
|
54
|
+
if description.blank?
|
|
55
|
+
raise ContentDefinitionError, "No description found in elements.yml for #{essences_hash.inspect} and #{element.inspect}"
|
|
56
|
+
end
|
|
54
57
|
content = new(:name => description['name'], :element_id => element.id)
|
|
55
58
|
content.create_essence!(description)
|
|
56
59
|
content
|
|
@@ -139,17 +142,15 @@ module Alchemy
|
|
|
139
142
|
# Returns my description hash from elements.yml
|
|
140
143
|
# Returns the description from available_contents if my own description is blank
|
|
141
144
|
def description
|
|
142
|
-
if
|
|
143
|
-
|
|
144
|
-
return
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
else
|
|
150
|
-
return @desc
|
|
151
|
-
end
|
|
145
|
+
if element.blank?
|
|
146
|
+
warn "Content with id #{self.id} is missing its Element."
|
|
147
|
+
return {}
|
|
148
|
+
end
|
|
149
|
+
desc = self.element.content_description_for(self.name)
|
|
150
|
+
if desc.blank?
|
|
151
|
+
self.element.available_content_description_for(self.name)
|
|
152
152
|
end
|
|
153
|
+
desc || {}
|
|
153
154
|
end
|
|
154
155
|
alias_method :definition, :description
|
|
155
156
|
|
|
@@ -161,14 +162,14 @@ module Alchemy
|
|
|
161
162
|
|
|
162
163
|
# Sets the ingredient from essence
|
|
163
164
|
def ingredient=(value)
|
|
164
|
-
raise
|
|
165
|
+
raise EssenceMissingError if essence.nil?
|
|
165
166
|
essence.ingredient = value
|
|
166
167
|
end
|
|
167
168
|
|
|
168
169
|
# Calls essence.update_attributes. Called from +Alchemy::Element#save_contents+
|
|
169
170
|
# Ads errors to self.base if essence validation fails.
|
|
170
171
|
def update_essence(params={})
|
|
171
|
-
raise
|
|
172
|
+
raise EssenceMissingError if essence.nil?
|
|
172
173
|
if essence.update_attributes(params)
|
|
173
174
|
return true
|
|
174
175
|
else
|
|
@@ -182,8 +183,7 @@ module Alchemy
|
|
|
182
183
|
end
|
|
183
184
|
|
|
184
185
|
def has_validations?
|
|
185
|
-
|
|
186
|
-
!description['validate'].blank?
|
|
186
|
+
description['validate'].present?
|
|
187
187
|
end
|
|
188
188
|
|
|
189
189
|
# Returns a string to be passed to Rails form field tags to ensure we have same params layout everywhere.
|
|
@@ -243,7 +243,7 @@ module Alchemy
|
|
|
243
243
|
def create_essence!(description)
|
|
244
244
|
essence_class = self.class.normalize_essence_type(description['type']).constantize
|
|
245
245
|
attributes = {
|
|
246
|
-
:ingredient =>
|
|
246
|
+
:ingredient => default_text(description['default'])
|
|
247
247
|
}
|
|
248
248
|
if description['type'] == "EssenceRichtext" || description['type'] == "EssenceText"
|
|
249
249
|
attributes.merge!(:do_not_index => !description['do_not_index'].nil?)
|
|
@@ -257,7 +257,7 @@ module Alchemy
|
|
|
257
257
|
end
|
|
258
258
|
end
|
|
259
259
|
|
|
260
|
-
def
|
|
260
|
+
def default_text(default)
|
|
261
261
|
return if default.nil?
|
|
262
262
|
if default.is_a? Symbol
|
|
263
263
|
I18n.t(default, :scope => :default_content_texts)
|