refinerycms-core 0.9.9.1
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/admin/base_controller.rb +10 -0
- data/app/controllers/admin/dialogs_controller.rb +26 -0
- data/app/controllers/admin/refinery_core_controller.rb +12 -0
- data/app/controllers/application_controller.rb +6 -0
- data/app/controllers/refinery/fast_controller.rb +9 -0
- data/app/controllers/sitemap_controller.rb +14 -0
- data/app/helpers/application_helper.rb +5 -0
- data/app/views/admin/_head.html.erb +43 -0
- data/app/views/admin/_javascripts.html.erb +32 -0
- data/app/views/admin/_menu.html.erb +17 -0
- data/app/views/admin/dialogs/show.html.erb +19 -0
- data/app/views/layouts/admin.html.erb +24 -0
- data/app/views/layouts/admin_dialog.html.erb +14 -0
- data/app/views/layouts/application.html.erb +21 -0
- data/app/views/shared/_content_page.html.erb +63 -0
- data/app/views/shared/_draft_page_message.html.erb +3 -0
- data/app/views/shared/_footer.html.erb +4 -0
- data/app/views/shared/_google_analytics.html.erb +8 -0
- data/app/views/shared/_head.html.erb +42 -0
- data/app/views/shared/_header.html.erb +8 -0
- data/app/views/shared/_html_tag.html.erb +6 -0
- data/app/views/shared/_ie6check.html.erb +63 -0
- data/app/views/shared/_javascripts.html.erb +10 -0
- data/app/views/shared/_menu.html.erb +30 -0
- data/app/views/shared/_menu_branch.html.erb +26 -0
- data/app/views/shared/_message.html.erb +10 -0
- data/app/views/shared/_no_script.html.erb +9 -0
- data/app/views/shared/_site_bar.html.erb +25 -0
- data/app/views/shared/admin/_continue_editing.html.erb +3 -0
- data/app/views/shared/admin/_error_messages.html.erb +16 -0
- data/app/views/shared/admin/_form_actions.html.erb +75 -0
- data/app/views/shared/admin/_image_picker.html.erb +60 -0
- data/app/views/shared/admin/_make_sortable.html.erb +13 -0
- data/app/views/shared/admin/_resource_picker.html.erb +66 -0
- data/app/views/shared/admin/_search.html.erb +6 -0
- data/app/views/shared/admin/_sortable_list.html.erb +7 -0
- data/app/views/shared/admin/_tabbed_fields.html.erb +42 -0
- data/app/views/welcome.html.erb +17 -0
- data/app/views/wymiframe.html.erb +15 -0
- data/config/locales/cs.yml +77 -0
- data/config/locales/da.yml +75 -0
- data/config/locales/de.yml +75 -0
- data/config/locales/el.yml +75 -0
- data/config/locales/en.yml +75 -0
- data/config/locales/es.yml +68 -0
- data/config/locales/fr.yml +72 -0
- data/config/locales/it.yml +96 -0
- data/config/locales/lolcat.yml +68 -0
- data/config/locales/lt.yml +75 -0
- data/config/locales/lv.yml +72 -0
- data/config/locales/nb.yml +75 -0
- data/config/locales/nl.yml +75 -0
- data/config/locales/pl.yml +75 -0
- data/config/locales/pt-BR.yml +72 -0
- data/config/locales/rs.yml +76 -0
- data/config/locales/ru.yml +71 -0
- data/config/locales/sl.yml +72 -0
- data/config/locales/sv.yml +75 -0
- data/config/locales/vi.yml +75 -0
- data/config/locales/zh-CN.yml +75 -0
- data/config/locales/zh-TW.yml +75 -0
- data/config/routes.rb +19 -0
- data/crud.md +197 -0
- data/doc/included-jquery-ui-packages.jpg +0 -0
- data/engines.md +179 -0
- data/features/search.feature +55 -0
- data/features/site_bar.feature +24 -0
- data/features/step_definitions/core_steps.rb +61 -0
- data/features/support/paths.rb +14 -0
- data/features/uploads/beach.jpeg +0 -0
- data/features/uploads/refinery_is_awesome.txt +1 -0
- data/lib/gemspec.rb +43 -0
- data/lib/generators/refinerycms_generator.rb +110 -0
- data/lib/generators/templates/.gitignore +83 -0
- data/lib/generators/templates/app/views/sitemap/index.xml.builder +22 -0
- data/lib/generators/templates/autotest/autotest.rb +17 -0
- data/lib/generators/templates/autotest/discover.rb +2 -0
- data/lib/generators/templates/config/database.yml.mysql +20 -0
- data/lib/generators/templates/config/database.yml.postgresql +57 -0
- data/lib/generators/templates/config/database.yml.sqlite3 +26 -0
- data/lib/generators/templates/config/i18n-js.yml +6 -0
- data/lib/generators/templates/config/initializers/devise.rb +142 -0
- data/lib/generators/templates/config/settings.rb +2 -0
- data/lib/generators/templates/db/seeds.rb +5 -0
- data/lib/refinery/activity.rb +45 -0
- data/lib/refinery/admin/base_controller.rb +111 -0
- data/lib/refinery/admin_base_controller.rb +5 -0
- data/lib/refinery/application.rb +48 -0
- data/lib/refinery/application_controller.rb +120 -0
- data/lib/refinery/application_helper.rb +19 -0
- data/lib/refinery/base_presenter.rb +27 -0
- data/lib/refinery/catch_all_routes.rb +11 -0
- data/lib/refinery/crud.rb +295 -0
- data/lib/refinery/helpers/form_helper.rb +66 -0
- data/lib/refinery/helpers/head_helper.rb +17 -0
- data/lib/refinery/helpers/html_truncation_helper.rb +25 -0
- data/lib/refinery/helpers/image_helper.rb +49 -0
- data/lib/refinery/helpers/menu_helper.rb +68 -0
- data/lib/refinery/helpers/meta_helper.rb +67 -0
- data/lib/refinery/helpers/pagination_helper.rb +16 -0
- data/lib/refinery/helpers/script_helper.rb +36 -0
- data/lib/refinery/helpers/site_bar_helper.rb +24 -0
- data/lib/refinery/helpers/tag_helper.rb +21 -0
- data/lib/refinery/helpers/translation_helper.rb +17 -0
- data/lib/refinery/link_renderer.rb +55 -0
- data/lib/refinery/plugin.rb +106 -0
- data/lib/refinery/plugins.rb +75 -0
- data/lib/refinerycms-core.rb +156 -0
- data/lib/tasks/doc.rake +29 -0
- data/lib/tasks/refinery.rake +231 -0
- data/lib/tasks/yard.rake +30 -0
- data/license.md +21 -0
- data/public/404.html +26 -0
- data/public/422.html +26 -0
- data/public/500.html +26 -0
- data/public/favicon.ico +0 -0
- data/public/images/refinery/add.png +0 -0
- data/public/images/refinery/admin_bg.png +0 -0
- data/public/images/refinery/ajax-loader.gif +0 -0
- data/public/images/refinery/branch-end.gif +0 -0
- data/public/images/refinery/branch-start.gif +0 -0
- data/public/images/refinery/branch.gif +0 -0
- data/public/images/refinery/carousel-left.png +0 -0
- data/public/images/refinery/carousel-right.png +0 -0
- data/public/images/refinery/cross.png +0 -0
- data/public/images/refinery/dialogLoadingAnimation.gif +0 -0
- data/public/images/refinery/header_background.png +0 -0
- data/public/images/refinery/hover-gradient.jpg +0 -0
- data/public/images/refinery/icons/accept.png +0 -0
- data/public/images/refinery/icons/add.png +0 -0
- data/public/images/refinery/icons/ajax-loader.gif +0 -0
- data/public/images/refinery/icons/application_edit.png +0 -0
- data/public/images/refinery/icons/application_go.png +0 -0
- data/public/images/refinery/icons/arrow_left.png +0 -0
- data/public/images/refinery/icons/arrow_switch.png +0 -0
- data/public/images/refinery/icons/arrow_up.png +0 -0
- data/public/images/refinery/icons/bin.png +0 -0
- data/public/images/refinery/icons/bin_closed.png +0 -0
- data/public/images/refinery/icons/cancel.png +0 -0
- data/public/images/refinery/icons/cog_add.png +0 -0
- data/public/images/refinery/icons/cog_edit.png +0 -0
- data/public/images/refinery/icons/cross.png +0 -0
- data/public/images/refinery/icons/delete.png +0 -0
- data/public/images/refinery/icons/doc.png +0 -0
- data/public/images/refinery/icons/down.gif +0 -0
- data/public/images/refinery/icons/edit.png +0 -0
- data/public/images/refinery/icons/email.png +0 -0
- data/public/images/refinery/icons/email_edit.png +0 -0
- data/public/images/refinery/icons/email_go.png +0 -0
- data/public/images/refinery/icons/email_open.png +0 -0
- data/public/images/refinery/icons/eye.png +0 -0
- data/public/images/refinery/icons/folder_page_white.png +0 -0
- data/public/images/refinery/icons/image_add.png +0 -0
- data/public/images/refinery/icons/image_edit.png +0 -0
- data/public/images/refinery/icons/img.png +0 -0
- data/public/images/refinery/icons/information.png +0 -0
- data/public/images/refinery/icons/layout_add.png +0 -0
- data/public/images/refinery/icons/layout_edit.png +0 -0
- data/public/images/refinery/icons/music.png +0 -0
- data/public/images/refinery/icons/page_add.png +0 -0
- data/public/images/refinery/icons/page_edit.png +0 -0
- data/public/images/refinery/icons/page_white_edit.png +0 -0
- data/public/images/refinery/icons/page_white_gear.png +0 -0
- data/public/images/refinery/icons/page_white_put.png +0 -0
- data/public/images/refinery/icons/pdf.png +0 -0
- data/public/images/refinery/icons/ppt.png +0 -0
- data/public/images/refinery/icons/star.png +0 -0
- data/public/images/refinery/icons/tick.png +0 -0
- data/public/images/refinery/icons/up.gif +0 -0
- data/public/images/refinery/icons/user_add.png +0 -0
- data/public/images/refinery/icons/user_comment.png +0 -0
- data/public/images/refinery/icons/user_edit.png +0 -0
- data/public/images/refinery/icons/xls.png +0 -0
- data/public/images/refinery/icons/zip.png +0 -0
- data/public/images/refinery/icons/zoom.png +0 -0
- data/public/images/refinery/logo-large.png +0 -0
- data/public/images/refinery/logo-medium.png +0 -0
- data/public/images/refinery/logo-site-bar.png +0 -0
- data/public/images/refinery/logo-small-medium.png +0 -0
- data/public/images/refinery/logo-small.png +0 -0
- data/public/images/refinery/logo-tiny.png +0 -0
- data/public/images/refinery/logo.png +0 -0
- data/public/images/refinery/nav-3-background.gif +0 -0
- data/public/images/refinery/nav_inactive_background.png +0 -0
- data/public/images/refinery/orange_button.png +0 -0
- data/public/images/refinery/page_bg.png +0 -0
- data/public/images/refinery/resolve_digital_footer_logo.png +0 -0
- data/public/images/refinery/text_field_background.png +0 -0
- data/public/images/refinery/tooltip-nib.gif +0 -0
- data/public/images/refinery/tooltip-nib.png +0 -0
- data/public/images/wymeditor/skins/refinery/arrow_redo.png +0 -0
- data/public/images/wymeditor/skins/refinery/arrow_undo.png +0 -0
- data/public/images/wymeditor/skins/refinery/eye.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-blockquote.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-h1.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-h2.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-h3.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-h4.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-h5.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-h6.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-p.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-pre.png +0 -0
- data/public/images/wymeditor/skins/refinery/link_add.png +0 -0
- data/public/images/wymeditor/skins/refinery/link_break.png +0 -0
- data/public/images/wymeditor/skins/refinery/page_code.png +0 -0
- data/public/images/wymeditor/skins/refinery/page_paste.png +0 -0
- data/public/images/wymeditor/skins/refinery/photo_add.png +0 -0
- data/public/images/wymeditor/skins/refinery/right.png +0 -0
- data/public/images/wymeditor/skins/refinery/style.png +0 -0
- data/public/images/wymeditor/skins/refinery/table_add.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_align_center.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_align_justify.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_align_left.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_align_right.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_bold.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_heading_1.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_heading_2.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_heading_3.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_heading_4.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_heading_5.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_heading_6.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_indent.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_indent_remove.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_italic.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_list_bullets.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_list_numbers.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_paragraph.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_strikethrough.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_subscript.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_superscript.png +0 -0
- data/public/images/wymeditor/skins/refinery/text_underline.png +0 -0
- data/public/images/wymeditor/skins/wymeditor_icon.png +0 -0
- data/public/javascripts/admin.js +7 -0
- data/public/javascripts/application.js +1 -0
- data/public/javascripts/dd_belatedpng.js +13 -0
- data/public/javascripts/i18n-messages.js +2 -0
- data/public/javascripts/jquery-min.js +16 -0
- data/public/javascripts/jquery-ui-custom-min.js +251 -0
- data/public/javascripts/jquery.js +8176 -0
- data/public/javascripts/jquery/GPL-LICENSE.txt +278 -0
- data/public/javascripts/jquery/MIT-LICENSE.txt +20 -0
- data/public/javascripts/jquery/jquery.corner.js +345 -0
- data/public/javascripts/jquery/jquery.html5-placeholder-shim.js +88 -0
- data/public/javascripts/jquery/jquery.jcarousel.js +900 -0
- data/public/javascripts/jquery/jquery.textTruncate.js +174 -0
- data/public/javascripts/jquery/jquery.timers.js +138 -0
- data/public/javascripts/modernizr-min.js +30 -0
- data/public/javascripts/rails.js +175 -0
- data/public/javascripts/refinery/admin.js +1114 -0
- data/public/javascripts/refinery/boot_wym.js +285 -0
- data/public/javascripts/refinery/core.js +18 -0
- data/public/javascripts/refinery/i18n.js +340 -0
- data/public/javascripts/refinery/nestedsortables.js +164 -0
- data/public/javascripts/refinery/serializelist.js +66 -0
- data/public/javascripts/refinery/site_bar.js +16 -0
- data/public/javascripts/refinery/submenu.js +49 -0
- data/public/javascripts/wymeditor/jquery.refinery.wymeditor.js +5156 -0
- data/public/javascripts/wymeditor/lang/ca.js +45 -0
- data/public/javascripts/wymeditor/lang/cs.js +45 -0
- data/public/javascripts/wymeditor/lang/da.js +48 -0
- data/public/javascripts/wymeditor/lang/de.js +45 -0
- data/public/javascripts/wymeditor/lang/en.js +47 -0
- data/public/javascripts/wymeditor/lang/es.js +48 -0
- data/public/javascripts/wymeditor/lang/fa.js +46 -0
- data/public/javascripts/wymeditor/lang/fr.js +45 -0
- data/public/javascripts/wymeditor/lang/he.js +45 -0
- data/public/javascripts/wymeditor/lang/hu.js +45 -0
- data/public/javascripts/wymeditor/lang/it.js +48 -0
- data/public/javascripts/wymeditor/lang/lv.js +47 -0
- data/public/javascripts/wymeditor/lang/nb.js +48 -0
- data/public/javascripts/wymeditor/lang/nl.js +47 -0
- data/public/javascripts/wymeditor/lang/nn.js +45 -0
- data/public/javascripts/wymeditor/lang/pl.js +45 -0
- data/public/javascripts/wymeditor/lang/pt-BR.js +47 -0
- data/public/javascripts/wymeditor/lang/pt.js +45 -0
- data/public/javascripts/wymeditor/lang/rs.js +47 -0
- data/public/javascripts/wymeditor/lang/ru.js +45 -0
- data/public/javascripts/wymeditor/lang/sl.js +47 -0
- data/public/javascripts/wymeditor/lang/sv.js +45 -0
- data/public/javascripts/wymeditor/lang/tr.js +45 -0
- data/public/javascripts/wymeditor/lang/vi.js +47 -0
- data/public/javascripts/wymeditor/lang/zh_cn.js +47 -0
- data/public/javascripts/wymeditor/skins/refinery/skin.js +48 -0
- data/public/robots.txt +3 -0
- data/public/stylesheets/application.css +4 -0
- data/public/stylesheets/formatting.css +4 -0
- data/public/stylesheets/home.css +4 -0
- data/public/stylesheets/refinery/application.css +72 -0
- data/public/stylesheets/refinery/formatting.css +57 -0
- data/public/stylesheets/refinery/home.css +0 -0
- data/public/stylesheets/refinery/refinery.css +1579 -0
- data/public/stylesheets/refinery/site_bar.css +87 -0
- data/public/stylesheets/refinery/submenu.css +22 -0
- data/public/stylesheets/refinery/theme.css +36 -0
- data/public/stylesheets/refinery/tooltips.css +34 -0
- data/public/stylesheets/refinery/ui.css +107 -0
- data/public/stylesheets/theme.css +4 -0
- data/public/stylesheets/wymeditor/skins/refinery/skin.css +528 -0
- data/public/stylesheets/wymeditor/skins/refinery/wymiframe.css +96 -0
- data/public/wymeditor/GPL-license.txt +278 -0
- data/public/wymeditor/MIT-license.txt +20 -0
- data/public/wymeditor/README +35 -0
- data/refinerycms-core.gemspec +391 -0
- data/spec/lib/refinery/plugins_spec.rb +90 -0
- metadata +482 -0
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'action_view'
|
2
|
+
require 'action_view/helpers'
|
3
|
+
|
4
|
+
ActionView::Helpers::FormHelper.module_eval do
|
5
|
+
|
6
|
+
def required_label(object_name, method, text = nil, options = {})
|
7
|
+
options = {:class => "required"}.merge!(options)
|
8
|
+
|
9
|
+
label(object_name, method, "#{label_humanize_text(object_name, method, text, options)} *", options)
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
def label_humanize_text object_name, method, text = nil, options = {}
|
14
|
+
if text.blank?
|
15
|
+
text = object_name.classify.constantize.respond_to?(:human_attribute_name) ? object_name.classify.constantize.human_attribute_name(method) : method.to_s
|
16
|
+
else
|
17
|
+
text = text.to_s
|
18
|
+
end
|
19
|
+
text.humanize
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
ActionView::Helpers::FormBuilder.module_eval do
|
25
|
+
|
26
|
+
def required_label(method, text = nil, options = {})
|
27
|
+
@template.required_label(@object_name, method, text, objectify_options(options))
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
ActionView::Helpers::FormTagHelper.module_eval do
|
33
|
+
|
34
|
+
def required_label_tag(name, text = nil, options = {})
|
35
|
+
options = {:class => "required"}.merge!(options)
|
36
|
+
text ||= "#{name.to_s.humanize} *"
|
37
|
+
|
38
|
+
label_tag(name, text, options)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
# I18n labels automatically
|
45
|
+
module ActionView
|
46
|
+
module Helpers
|
47
|
+
class InstanceTag
|
48
|
+
def to_label_tag(text = nil, options = {})
|
49
|
+
options = options.stringify_keys
|
50
|
+
name_and_id = options.dup
|
51
|
+
add_default_name_and_id(name_and_id)
|
52
|
+
options.delete("index")
|
53
|
+
options["for"] ||= name_and_id["id"]
|
54
|
+
if text.blank?
|
55
|
+
content = method_name.humanize
|
56
|
+
if object.class.respond_to?(:human_attribute_name)
|
57
|
+
content = object.class.human_attribute_name(method_name)
|
58
|
+
end
|
59
|
+
else
|
60
|
+
content = text.to_s
|
61
|
+
end
|
62
|
+
label_tag(name_and_id["id"], content, options)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Helpers
|
3
|
+
module HeadHelper
|
4
|
+
|
5
|
+
def stylesheets_for_head(stylesheets, theme = false)
|
6
|
+
# you can disable the use of the built-in refinery stylesheets by disabling the setting.
|
7
|
+
stylesheets.map! {|ss| ["refinery/#{ss}", ss] }.flatten! if RefinerySetting.find_or_set(:frontend_refinery_stylesheets_enabled, true)
|
8
|
+
|
9
|
+
# if theme is set, use themed stylesheet links.
|
10
|
+
stylesheets.map! {|ss| ss =~ /^refinery\// ? ss : "/theme/stylesheets/#{ss}" } if theme
|
11
|
+
|
12
|
+
stylesheets
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'truncate_html'
|
2
|
+
|
3
|
+
module Refinery
|
4
|
+
module Helpers
|
5
|
+
module HtmlTruncationHelper
|
6
|
+
|
7
|
+
# Like the Rails _truncate_ helper but doesn't break HTML tags, entities, and words.
|
8
|
+
# <script> tags pass through and are not counted in the total.
|
9
|
+
# the omission specified _does_ count toward the total length count.
|
10
|
+
# use :link => link_to('more', post_path), or something to that effect
|
11
|
+
def truncate(text, options = {})
|
12
|
+
return unless text.present?
|
13
|
+
return super unless options.delete(:preserve_html_tags) == true # ensure preserve_html_tags doesn't pass through
|
14
|
+
|
15
|
+
max_length = options[:length] || 30
|
16
|
+
omission = options[:omission] || "..."
|
17
|
+
|
18
|
+
return truncate_html(text,
|
19
|
+
:length => max_length,
|
20
|
+
:word_boundary => true,
|
21
|
+
:omission => omission)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Helpers
|
3
|
+
module ImageHelper
|
4
|
+
|
5
|
+
# replace all system images with a thumbnail version of them (handy for all images inside a page part)
|
6
|
+
# for example, <%= content_fu(@page[:body], '96x96#c') %> converts all /system/images to a 96x96 cropped thumbnail
|
7
|
+
def content_fu(content, thumbnail)
|
8
|
+
content.gsub(%r{<img.+?src=['"](/system/images/.+?)/.+?/>}) do |image_match|
|
9
|
+
begin
|
10
|
+
uid = Dragonfly::Job.from_path(
|
11
|
+
"#{image_match.match(%r{(/system/images/.+?)/})[1]}", Dragonfly[:images]
|
12
|
+
).uid
|
13
|
+
|
14
|
+
image_fu Image.where(:image_uid => uid).first, thumbnail
|
15
|
+
rescue
|
16
|
+
# FAIL, don't care why but return what we found initially.
|
17
|
+
image_match
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# image_fu is a helper for inserting an image that has been uploaded into a template.
|
23
|
+
# Say for example that we had a @model.image (@model having a belongs_to :image relationship)
|
24
|
+
# and we wanted to display a thumbnail cropped to 200x200 then we can use image_fu like this:
|
25
|
+
# <%= image_fu @model.image, '200x200' %> or with no thumbnail: <%= image_fu @model.image %>
|
26
|
+
def image_fu(image, geometry = nil, options={})
|
27
|
+
if image.present?
|
28
|
+
# call rails' image tag function with default alt tag.
|
29
|
+
# if any other options were supplied these are merged in and can replace the defaults.
|
30
|
+
# if the geomtry is nil, then we know the image height and width already.
|
31
|
+
# detect nil geometry or cropping presence which is where we can guess the dimensions
|
32
|
+
unless geometry.nil? or !(split_geometry = geometry.to_s.split('#')).many? or !(split_geometry = split_geometry.first.split('x')).many?
|
33
|
+
image_width, image_height = split_geometry
|
34
|
+
else
|
35
|
+
image_with = nil
|
36
|
+
image_height = nil
|
37
|
+
end
|
38
|
+
|
39
|
+
image_tag(image.thumbnail(geometry).url, {
|
40
|
+
:alt => image.respond_to?(:title) ? image.title : image.image_name,
|
41
|
+
:width => image_width,
|
42
|
+
:height => image_height
|
43
|
+
}.merge(options))
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Helpers
|
3
|
+
module MenuHelper
|
4
|
+
|
5
|
+
# Adds conditional caching
|
6
|
+
def cache_if(condition, name = {}, &block)
|
7
|
+
if condition
|
8
|
+
cache(name, &block)
|
9
|
+
else
|
10
|
+
yield
|
11
|
+
end
|
12
|
+
|
13
|
+
# for <%= style helpers vs <% style
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
|
17
|
+
# This was extracted from app/views/shared/_menu_branch.html.erb
|
18
|
+
# to remove the complexity of that template by reducing logic in the view.
|
19
|
+
def css_for_menu_branch(menu_branch, menu_branch_counter, sibling_count = nil, collection = [], selected_item = nil)
|
20
|
+
css = []
|
21
|
+
css << "selected" if selected_page_or_descendant_page_selected?(menu_branch, collection, selected_item)
|
22
|
+
css << "first" if menu_branch_counter == 0
|
23
|
+
css << "last" if menu_branch_counter == (sibling_count ||= menu_branch.shown_siblings.size)
|
24
|
+
css
|
25
|
+
end
|
26
|
+
|
27
|
+
# Determines whether any page underneath the supplied page is the current page according to rails.
|
28
|
+
# Just calls selected_page? for each descendant of the supplied page.
|
29
|
+
# if you pass a collection it won't check its own descendants but use the collection supplied.
|
30
|
+
def descendant_page_selected?(page, collection = [], selected_item = nil)
|
31
|
+
return false unless page.has_descendants? or (selected_item && !selected_item.in_menu?)
|
32
|
+
|
33
|
+
descendants = if collection.present? and (!selected_item or (selected_item && selected_item.in_menu?))
|
34
|
+
collection.select{ |item| item.parent_id == page.id }
|
35
|
+
else
|
36
|
+
page.descendants
|
37
|
+
end
|
38
|
+
|
39
|
+
descendants.any? do |descendant|
|
40
|
+
selected_item ? selected_item == descendant : selected_page?(descendant)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def selected_page_or_descendant_page_selected?(page, collection = [], selected_item = nil)
|
45
|
+
selected = false
|
46
|
+
selected = selected_item ? selected_item === page : selected_page?(page)
|
47
|
+
selected = descendant_page_selected?(page, collection, selected_item) unless selected
|
48
|
+
selected
|
49
|
+
end
|
50
|
+
|
51
|
+
# Determine whether the supplied page is the currently open page according to Refinery.
|
52
|
+
# Also checks whether Rails thinks it is selected after that using current_page?
|
53
|
+
def selected_page?(page)
|
54
|
+
# ensure we match the path without the locale.
|
55
|
+
path = request.path
|
56
|
+
if defined?(::Refinery::I18n) and ::Refinery::I18n.enabled?
|
57
|
+
path = path.split("/#{::I18n.locale}").last
|
58
|
+
end
|
59
|
+
|
60
|
+
(path =~ Regexp.new(page.menu_match) if page.menu_match.present?) or
|
61
|
+
(path == page.link_url) or
|
62
|
+
(path == page.nested_path) or
|
63
|
+
current_page?(page)
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Helpers
|
3
|
+
module MetaHelper
|
4
|
+
|
5
|
+
# This is used to display the title of the current object (normally a page) in the browser's titlebar.
|
6
|
+
#
|
7
|
+
def browser_title(yield_title=nil)
|
8
|
+
[
|
9
|
+
(yield_title if yield_title.present?),
|
10
|
+
@meta.browser_title.present? ? @meta.browser_title : @meta.path,
|
11
|
+
RefinerySetting.find_or_set(:site_name, "Company Name")
|
12
|
+
].compact.join(" - ")
|
13
|
+
end
|
14
|
+
|
15
|
+
# you can override the object used for the title by supplying options[:object]
|
16
|
+
# this object must support custom_title_type if you want custom titles.
|
17
|
+
def page_title(options = {})
|
18
|
+
object = options.fetch(:object, @meta)
|
19
|
+
options.delete(:object)
|
20
|
+
options = RefinerySetting.find_or_set(:page_title, {
|
21
|
+
:chain_page_title => false,
|
22
|
+
:ancestors => {
|
23
|
+
:separator => " | ",
|
24
|
+
:class => 'ancestors',
|
25
|
+
:tag => 'span'
|
26
|
+
},
|
27
|
+
:page_title => {
|
28
|
+
:class => nil,
|
29
|
+
:tag => nil,
|
30
|
+
:wrap_if_not_chained => false
|
31
|
+
}
|
32
|
+
}).merge(options)
|
33
|
+
|
34
|
+
title = []
|
35
|
+
objects = (options[:chain_page_title] and object.respond_to?(:ancestors)) ? [object.ancestors, object] : [object]
|
36
|
+
|
37
|
+
objects.flatten.compact.each do |obj|
|
38
|
+
if obj.respond_to?(:custom_title_type)
|
39
|
+
title << case obj.custom_title_type
|
40
|
+
when "text"
|
41
|
+
obj.custom_title
|
42
|
+
when "image"
|
43
|
+
image_fu(obj.custom_title_image, nil, {:alt => obj.title}) rescue obj.title
|
44
|
+
else
|
45
|
+
obj.title
|
46
|
+
end
|
47
|
+
else
|
48
|
+
title << obj.title
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
final_title = title.pop
|
53
|
+
if (options[:page_title][:wrap_if_not_chained] and title.empty?) and options[:page_title][:tag].present?
|
54
|
+
css = " class='#{options[:page_title][:class]}'" if options[:page_title][:class].present?
|
55
|
+
final_title = "<#{options[:page_title][:tag]}#{css}>#{final_title}</#{options[:page_title][:tag]}>"
|
56
|
+
end
|
57
|
+
|
58
|
+
if title.empty?
|
59
|
+
return final_title.to_s.html_safe
|
60
|
+
else
|
61
|
+
return "<#{options[:ancestors][:tag]} class='#{options[:ancestors][:class]}'>#{title.join options[:ancestors][:separator]}#{options[:ancestors][:separator]}</#{options[:ancestors][:tag]}>#{final_title}".html_safe
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Helpers
|
3
|
+
module PaginationHelper
|
4
|
+
|
5
|
+
# Figures out the CSS classname to apply to your pagination list for animations.
|
6
|
+
def pagination_css_class
|
7
|
+
if request.xhr? and params[:from_page].present? and params[:page].present?
|
8
|
+
"frame_#{params[:from_page].to_s > params[:page].to_s ? 'left' : 'right'}"
|
9
|
+
else
|
10
|
+
"frame_center"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Helpers
|
3
|
+
module ScriptHelper
|
4
|
+
|
5
|
+
# This function helps when including both the jquery and jqueryui libraries.
|
6
|
+
# If you use this function then whenever we update or relocate the version of jquery or jquery ui in use
|
7
|
+
# we will update the reference here and your existing application starts to use it.
|
8
|
+
# Use <%= jquery_include_tags %> to include it in your <head> section.
|
9
|
+
def jquery_include_tags(options={})
|
10
|
+
# Merge in options
|
11
|
+
options = {
|
12
|
+
:caching => (Rails.root.writable? and RefinerySetting.find_or_set(:use_resource_caching, true)),
|
13
|
+
:google => RefinerySetting.find_or_set(:use_google_ajax_libraries, false),
|
14
|
+
:jquery_ui => true
|
15
|
+
}.merge(options)
|
16
|
+
|
17
|
+
# render the tags normally unless
|
18
|
+
unless options[:google] and !local_request?
|
19
|
+
if options[:jquery_ui]
|
20
|
+
javascript_include_tag "jquery#{"-min" if Rails.env.production?}", "jquery-ui-custom-min",
|
21
|
+
:cache => ("cache/jquery" if options[:caching])
|
22
|
+
else
|
23
|
+
javascript_include_tag "jquery#{"-min" if Rails.env.production?}"
|
24
|
+
end
|
25
|
+
else
|
26
|
+
"#{javascript_include_tag("http://www.google.com/jsapi").gsub(".js", "")}
|
27
|
+
<script>
|
28
|
+
google.load('jquery', '1.5.0');
|
29
|
+
#{"google.load('jqueryui', '1.8.9');" if options[:jquery_ui]}
|
30
|
+
</script>".html_safe
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Helpers
|
3
|
+
module SiteBarHelper
|
4
|
+
|
5
|
+
# Generates the link to determine where the site bar switch button returns to.
|
6
|
+
def site_bar_switch_link
|
7
|
+
link_to_if(admin?, t('.switch_to_your_website'),
|
8
|
+
(if session.keys.include?(:website_return_to) and session[:website_return_to].present?
|
9
|
+
session[:website_return_to]
|
10
|
+
else
|
11
|
+
root_path
|
12
|
+
end)) do
|
13
|
+
link_to t('.switch_to_your_website_editor'),
|
14
|
+
(if session.keys.include?(:refinery_return_to) and session[:refinery_return_to].present?
|
15
|
+
session[:refinery_return_to]
|
16
|
+
else
|
17
|
+
admin_root_path
|
18
|
+
end rescue admin_root_path)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Helpers
|
3
|
+
module TagHelper
|
4
|
+
|
5
|
+
# Returns <span class='help' title='Your Input'>(help)</span>
|
6
|
+
# Remember to wrap your block with <span class='label_with_help'></span> if you're using a label next to the help tag.
|
7
|
+
def refinery_help_tag(title='')
|
8
|
+
title = h(title) unless title.html_safe?
|
9
|
+
|
10
|
+
"<span class=\"help\" title=\"#{title}\">(#{t('help', :scope => 'shared.admin')})</span>".html_safe
|
11
|
+
end
|
12
|
+
|
13
|
+
# This is just a quick wrapper to render an image tag that lives inside refinery/icons.
|
14
|
+
# They are all 16x16 so this is the default but is able to be overriden with supplied options.
|
15
|
+
def refinery_icon_tag(filename, options = {})
|
16
|
+
image_tag "refinery/icons/#{filename}", {:width => 16, :height => 16}.merge(options)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Helpers
|
3
|
+
module TranslationHelper
|
4
|
+
|
5
|
+
# Overrides Rails' core I18n.t() function to produce a more helpful error message.
|
6
|
+
# The default one wreaks havoc with CSS and makes it hard to understand the problem.
|
7
|
+
def t(key, options = {})
|
8
|
+
if (val = super) =~ /class.+?translation_missing/
|
9
|
+
val = val.to_s.gsub(/<span[^>]*>/, 'i18n: ').gsub('</span>', '').gsub(', ', '.')
|
10
|
+
end
|
11
|
+
|
12
|
+
val
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
class Refinery::LinkRenderer < WillPaginate::ViewHelpers::LinkRenderer
|
2
|
+
|
3
|
+
# TODO: Rewrite for WillPaginate 3 API
|
4
|
+
|
5
|
+
=begin
|
6
|
+
|
7
|
+
attr_accessor :url
|
8
|
+
|
9
|
+
def url_for(page)
|
10
|
+
# extract any url parameter and store it for subsequent requests but delete it
|
11
|
+
# this is so that we don't end up with it being an attribute of the resulting HTML.
|
12
|
+
@url ||= @options.delete(:url) || {}
|
13
|
+
page_one = page == 1
|
14
|
+
@url_params = {}
|
15
|
+
# page links should preserve GET parameters
|
16
|
+
stringified_merge @url_params, @template.params if @template.request.get?
|
17
|
+
stringified_merge @url_params, @options[:params] if @options[:params]
|
18
|
+
|
19
|
+
if complex = param_name.index(/[^\w-]/)
|
20
|
+
page_param = parse_query_parameters("#{param_name}=#{page}")
|
21
|
+
|
22
|
+
stringified_merge @url_params, page_param
|
23
|
+
else
|
24
|
+
@url_params[param_name] = page_one ? 1 : 2
|
25
|
+
end
|
26
|
+
|
27
|
+
url = @template.url_for(@url_params.merge!(@url).to_options)
|
28
|
+
return url if page_one
|
29
|
+
|
30
|
+
if complex
|
31
|
+
@url_string = url.sub(%r!((?:\?|&)#{CGI.escape param_name}=)#{page}!, '\1@')
|
32
|
+
return url
|
33
|
+
else
|
34
|
+
@url_string = url
|
35
|
+
@url_params[param_name] = 3
|
36
|
+
@template.url_for(@url_params).split(//).each_with_index do |char, i|
|
37
|
+
if char == '3' and url[i, 1] == '2'
|
38
|
+
@url_string[i] = '@'
|
39
|
+
break
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
# finally!
|
44
|
+
@url_string.sub '@', page.to_s
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def param_name
|
50
|
+
@options[:param_name].to_s
|
51
|
+
end
|
52
|
+
|
53
|
+
=end
|
54
|
+
|
55
|
+
end
|