From 6d28dbeb61b2ec56e765e87e14ccc1d75e7c97dd Mon Sep 17 00:00:00 2001 From: Joenio Costa Date: Tue, 3 May 2016 19:18:09 -0300 Subject: [PATCH] refactoring breadcrumbs --- plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb | 62 -------------------------------------------------------------- plugins/breadcrumbs/lib/breadcrumbs_plugin_helper.rb | 43 +++++++++++++++++++++++++++++++++++++++++++ plugins/breadcrumbs/views/blocks/_link.html.erb | 1 + plugins/breadcrumbs/views/blocks/_separator.html.erb | 1 + plugins/breadcrumbs/views/blocks/content_breadcrumbs.html.erb | 9 +++++++++ 5 files changed, 54 insertions(+), 62 deletions(-) create mode 100644 plugins/breadcrumbs/lib/breadcrumbs_plugin_helper.rb create mode 100644 plugins/breadcrumbs/views/blocks/_link.html.erb create mode 100644 plugins/breadcrumbs/views/blocks/_separator.html.erb create mode 100644 plugins/breadcrumbs/views/blocks/content_breadcrumbs.html.erb diff --git a/plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb b/plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb index 416791c..aa30201 100644 --- a/plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb +++ b/plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb @@ -22,70 +22,8 @@ class BreadcrumbsPlugin::ContentBreadcrumbsBlock < Block _('This block displays breadcrumb trail.') end - def page_trail(page, params={}) - links = [] - if page - links = page.ancestors.reverse.map { |p| { :name => p.title, :url => p.url } } - links << { :name => page.title, :url => page.url } - elsif params[:controller] == 'cms' - id = params[:id] || params[:parent_id] - links = page_trail(Article.find(id)) if id - links << { :name => cms_action(params[:action]), :url => params } if show_cms_action - elsif (params[:controller] == 'profile' || params[:controller] == 'events') - links << { :name => _('Profile'), :url => {:controller=> 'profile', :action =>'index', :profile =>params[:profile]}} - links << { :name => profile_action(params[:action]), :url => params } unless params[:action] == 'index' - end - links - end - - def trail(page, profile=nil, params={}) - links = page_trail(page, params) - if profile && !links.empty? && show_profile - [ {:name => profile.name, :url => profile.url} ] + links - else - links - end - end - - def content(args={}) - block = self - ret = (proc do - trail = block.trail(@page, @profile, params) - if !trail.empty? - separator = content_tag('span', ' > ', :class => 'separator') - - breadcrumb = trail.map do |t| - link_to(t[:name], t[:url], :class => 'item') - end.join(separator) - - if block.show_section_name - section_name = block.show_profile ? trail.second[:name] : trail.first[:name] - breadcrumb << content_tag('div', section_name, :class => 'section-name') - end - - breadcrumb.html_safe - else - '' - end - end) - ret - end - def cacheable? false end - protected - - CMS_ACTIONS = {:edit => c_('Edit'), :upload_files => _('Upload Files'), :new => c_('New')} - PROFILE_ACTIONS = {:members => _('Members'), :events => _('Events')} - - def cms_action(action) - CMS_ACTIONS[action.to_sym] || action - end - - def profile_action(action) - PROFILE_ACTIONS[action.to_sym] || action - end - end diff --git a/plugins/breadcrumbs/lib/breadcrumbs_plugin_helper.rb b/plugins/breadcrumbs/lib/breadcrumbs_plugin_helper.rb new file mode 100644 index 0000000..50cce6b --- /dev/null +++ b/plugins/breadcrumbs/lib/breadcrumbs_plugin_helper.rb @@ -0,0 +1,43 @@ +module BreadcrumbsPluginHelper + + def action(action) + { :edit => c_('Edit'), + :upload_files => _('Upload Files'), + :new => c_('New'), + :members => _('Members'), + :events => _('Events') + }[action.to_sym] || action + end + + def page_trail(page) + links = [] + page.ancestors.reverse.each do |p| + links << { :name => p.title, :url => p.url } + end + links << { :name => page.title, :url => page.url } + links + end + + def trail(block, page, profile=nil, params={}) + links = [] + if page + links << page_trail(page) + elsif params[:controller] == 'cms' && (id = params[:id] || params[:parent_id]) + links << page_trail(Article.find(id)) + if block.show_cms_action + links << { :name => action(params[:action]), :url => params } + end + elsif (params[:controller] == 'profile' || params[:controller] == 'events') + _params = {:controller=> 'profile', :action =>'index', :profile => params[:profile]} + links << { :name => _('Profile'), :url => _params } + unless params[:action] == 'index' + links << { :name => action(params[:action]), :url => params } + end + end + if !links.empty? && profile && block.show_profile + links.unshift({:name => profile.name, :url => profile.url}) + end + links + end + +end diff --git a/plugins/breadcrumbs/views/blocks/_link.html.erb b/plugins/breadcrumbs/views/blocks/_link.html.erb new file mode 100644 index 0000000..478aafc --- /dev/null +++ b/plugins/breadcrumbs/views/blocks/_link.html.erb @@ -0,0 +1 @@ +<%= link_to link[:name], link[:url], :class => 'item' %> diff --git a/plugins/breadcrumbs/views/blocks/_separator.html.erb b/plugins/breadcrumbs/views/blocks/_separator.html.erb new file mode 100644 index 0000000..2fb13a8 --- /dev/null +++ b/plugins/breadcrumbs/views/blocks/_separator.html.erb @@ -0,0 +1 @@ +<%= content_tag('span', ' > ', :class => 'separator') %> diff --git a/plugins/breadcrumbs/views/blocks/content_breadcrumbs.html.erb b/plugins/breadcrumbs/views/blocks/content_breadcrumbs.html.erb new file mode 100644 index 0000000..c56e64e --- /dev/null +++ b/plugins/breadcrumbs/views/blocks/content_breadcrumbs.html.erb @@ -0,0 +1,9 @@ +<% extend BreadcrumbsPluginHelper %> + +<% links = trail(block, @page, @profile, params).flatten %> +<% unless links.empty? %> + <%= render :partial => 'blocks/link', :collection => links, :as => 'link', :spacer_template => 'blocks/separator' %> + <% if block.show_section_name %> + <%= content_tag('div', (block.show_profile ? links.second[:name] : links.first[:name]), :class => 'section-name') %> + <% end %> +<% end %> -- libgit2 0.21.2