Commit 6d28dbeb61b2ec56e765e87e14ccc1d75e7c97dd
Committed by
Rafael Reggiani Manzo
1 parent
141c0c41
Exists in
ratings_minor_fixes
and in
4 other branches
refactoring breadcrumbs
moved all `params` references to `trial` method, also `trial` method moved to a plugin helper
Showing
5 changed files
with
54 additions
and
62 deletions
Show diff stats
plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb
| ... | ... | @@ -22,70 +22,8 @@ class BreadcrumbsPlugin::ContentBreadcrumbsBlock < Block |
| 22 | 22 | _('This block displays breadcrumb trail.') |
| 23 | 23 | end |
| 24 | 24 | |
| 25 | - def page_trail(page, params={}) | |
| 26 | - links = [] | |
| 27 | - if page | |
| 28 | - links = page.ancestors.reverse.map { |p| { :name => p.title, :url => p.url } } | |
| 29 | - links << { :name => page.title, :url => page.url } | |
| 30 | - elsif params[:controller] == 'cms' | |
| 31 | - id = params[:id] || params[:parent_id] | |
| 32 | - links = page_trail(Article.find(id)) if id | |
| 33 | - links << { :name => cms_action(params[:action]), :url => params } if show_cms_action | |
| 34 | - elsif (params[:controller] == 'profile' || params[:controller] == 'events') | |
| 35 | - links << { :name => _('Profile'), :url => {:controller=> 'profile', :action =>'index', :profile =>params[:profile]}} | |
| 36 | - links << { :name => profile_action(params[:action]), :url => params } unless params[:action] == 'index' | |
| 37 | - end | |
| 38 | - links | |
| 39 | - end | |
| 40 | - | |
| 41 | - def trail(page, profile=nil, params={}) | |
| 42 | - links = page_trail(page, params) | |
| 43 | - if profile && !links.empty? && show_profile | |
| 44 | - [ {:name => profile.name, :url => profile.url} ] + links | |
| 45 | - else | |
| 46 | - links | |
| 47 | - end | |
| 48 | - end | |
| 49 | - | |
| 50 | - def content(args={}) | |
| 51 | - block = self | |
| 52 | - ret = (proc do | |
| 53 | - trail = block.trail(@page, @profile, params) | |
| 54 | - if !trail.empty? | |
| 55 | - separator = content_tag('span', ' > ', :class => 'separator') | |
| 56 | - | |
| 57 | - breadcrumb = trail.map do |t| | |
| 58 | - link_to(t[:name], t[:url], :class => 'item') | |
| 59 | - end.join(separator) | |
| 60 | - | |
| 61 | - if block.show_section_name | |
| 62 | - section_name = block.show_profile ? trail.second[:name] : trail.first[:name] | |
| 63 | - breadcrumb << content_tag('div', section_name, :class => 'section-name') | |
| 64 | - end | |
| 65 | - | |
| 66 | - breadcrumb.html_safe | |
| 67 | - else | |
| 68 | - '' | |
| 69 | - end | |
| 70 | - end) | |
| 71 | - ret | |
| 72 | - end | |
| 73 | - | |
| 74 | 25 | def cacheable? |
| 75 | 26 | false |
| 76 | 27 | end |
| 77 | 28 | |
| 78 | - protected | |
| 79 | - | |
| 80 | - CMS_ACTIONS = {:edit => c_('Edit'), :upload_files => _('Upload Files'), :new => c_('New')} | |
| 81 | - PROFILE_ACTIONS = {:members => _('Members'), :events => _('Events')} | |
| 82 | - | |
| 83 | - def cms_action(action) | |
| 84 | - CMS_ACTIONS[action.to_sym] || action | |
| 85 | - end | |
| 86 | - | |
| 87 | - def profile_action(action) | |
| 88 | - PROFILE_ACTIONS[action.to_sym] || action | |
| 89 | - end | |
| 90 | - | |
| 91 | 29 | end | ... | ... |
| ... | ... | @@ -0,0 +1,43 @@ |
| 1 | +module BreadcrumbsPluginHelper | |
| 2 | + | |
| 3 | + def action(action) | |
| 4 | + { :edit => c_('Edit'), | |
| 5 | + :upload_files => _('Upload Files'), | |
| 6 | + :new => c_('New'), | |
| 7 | + :members => _('Members'), | |
| 8 | + :events => _('Events') | |
| 9 | + }[action.to_sym] || action | |
| 10 | + end | |
| 11 | + | |
| 12 | + def page_trail(page) | |
| 13 | + links = [] | |
| 14 | + page.ancestors.reverse.each do |p| | |
| 15 | + links << { :name => p.title, :url => p.url } | |
| 16 | + end | |
| 17 | + links << { :name => page.title, :url => page.url } | |
| 18 | + links | |
| 19 | + end | |
| 20 | + | |
| 21 | + def trail(block, page, profile=nil, params={}) | |
| 22 | + links = [] | |
| 23 | + if page | |
| 24 | + links << page_trail(page) | |
| 25 | + elsif params[:controller] == 'cms' && (id = params[:id] || params[:parent_id]) | |
| 26 | + links << page_trail(Article.find(id)) | |
| 27 | + if block.show_cms_action | |
| 28 | + links << { :name => action(params[:action]), :url => params } | |
| 29 | + end | |
| 30 | + elsif (params[:controller] == 'profile' || params[:controller] == 'events') | |
| 31 | + _params = {:controller=> 'profile', :action =>'index', :profile => params[:profile]} | |
| 32 | + links << { :name => _('Profile'), :url => _params } | |
| 33 | + unless params[:action] == 'index' | |
| 34 | + links << { :name => action(params[:action]), :url => params } | |
| 35 | + end | |
| 36 | + end | |
| 37 | + if !links.empty? && profile && block.show_profile | |
| 38 | + links.unshift({:name => profile.name, :url => profile.url}) | |
| 39 | + end | |
| 40 | + links | |
| 41 | + end | |
| 42 | + | |
| 43 | +end | ... | ... |
| ... | ... | @@ -0,0 +1 @@ |
| 1 | +<%= link_to link[:name], link[:url], :class => 'item' %> | ... | ... |
| ... | ... | @@ -0,0 +1 @@ |
| 1 | +<%= content_tag('span', ' > ', :class => 'separator') %> | ... | ... |
plugins/breadcrumbs/views/blocks/content_breadcrumbs.html.erb
0 → 100644
| ... | ... | @@ -0,0 +1,9 @@ |
| 1 | +<% extend BreadcrumbsPluginHelper %> | |
| 2 | + | |
| 3 | +<% links = trail(block, @page, @profile, params).flatten %> | |
| 4 | +<% unless links.empty? %> | |
| 5 | + <%= render :partial => 'blocks/link', :collection => links, :as => 'link', :spacer_template => 'blocks/separator' %> | |
| 6 | + <% if block.show_section_name %> | |
| 7 | + <%= content_tag('div', (block.show_profile ? links.second[:name] : links.first[:name]), :class => 'section-name') %> | |
| 8 | + <% end %> | |
| 9 | +<% end %> | ... | ... |