Commit 8bb809101b910ad58a10a86af8d5eab99a201eb7

Authored by Victor Costa
1 parent 777b0a5f

Add breadcrumbs plugin namespace and rename block to ContentBreadcrumbsBlock

plugins/breadcrumbs/lib/breadcrumbs_block.rb
@@ -1,60 +0,0 @@ @@ -1,60 +0,0 @@
1 -class BreadcrumbsBlock < Block  
2 -  
3 - settings_items :show_cms_action, :type => :boolean, :default => true  
4 - settings_items :show_profile, :type => :boolean, :default => true  
5 -  
6 - def self.description  
7 - _('Breadcrumbs')  
8 - end  
9 -  
10 - def help  
11 - _('This block displays breadcrumb trail.')  
12 - end  
13 -  
14 - def page_trail(page, params={})  
15 - links = []  
16 - if page  
17 - links = page.ancestors.reverse.map { |p| { :name => p.title, :url => p.url } }  
18 - links << { :name => page.title, :url => page.url }  
19 - elsif params[:controller] == 'cms'  
20 - id = params[:id] || params[:parent_id]  
21 - links = page_trail(Article.find(id)) if id  
22 - links << { :name => cms_action(params[:action]), :url => params } if show_cms_action  
23 - end  
24 - links  
25 - end  
26 -  
27 - def trail(page, profile=nil, params={})  
28 - links = page_trail(page, params)  
29 - if profile && !links.empty? && show_profile  
30 - [ {:name => profile.name, :url => profile.url} ] + links  
31 - else  
32 - links  
33 - end  
34 - end  
35 -  
36 - def content(args={})  
37 - block = self  
38 - lambda do  
39 - trail = block.trail(@page, @profile, params)  
40 - if !trail.empty?  
41 - trail.map { |t| link_to(t[:name], t[:url], :class => 'item') }.join(content_tag('span', ' > ', :class => 'separator'))  
42 - else  
43 - ''  
44 - end  
45 - end  
46 - end  
47 -  
48 - def cacheable?  
49 - false  
50 - end  
51 -  
52 - protected  
53 -  
54 - CMS_ACTIONS = {:edit => _('Edit'), :upload_files => _('Upload Files'), :new => _('New')}  
55 -  
56 - def cms_action(action)  
57 - CMS_ACTIONS[action.to_sym] || action  
58 - end  
59 -  
60 -end  
plugins/breadcrumbs/lib/breadcrumbs_plugin.rb
@@ -7,9 +7,9 @@ class BreadcrumbsPlugin &lt; Noosfero::Plugin @@ -7,9 +7,9 @@ class BreadcrumbsPlugin &lt; Noosfero::Plugin
7 def self.plugin_description 7 def self.plugin_description
8 _("A plugin that add a block to display breadcrumbs.") 8 _("A plugin that add a block to display breadcrumbs.")
9 end 9 end
10 - 10 +
11 def self.extra_blocks 11 def self.extra_blocks
12 - { BreadcrumbsBlock => {:type => [Community, Person, Enterprise] } } 12 + { BreadcrumbsPlugin::ContentBreadcrumbsBlock => {:type => [Community, Person, Enterprise] } }
13 end 13 end
14 14
15 end 15 end
plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb 0 → 100644
@@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
  1 +class BreadcrumbsPlugin::ContentBreadcrumbsBlock < Block
  2 +
  3 + settings_items :show_cms_action, :type => :boolean, :default => true
  4 + settings_items :show_profile, :type => :boolean, :default => true
  5 +
  6 + def self.description
  7 + _('Content Breadcrumbs')
  8 + end
  9 +
  10 + def help
  11 + _('This block displays breadcrumb trail.')
  12 + end
  13 +
  14 + def page_trail(page, params={})
  15 + links = []
  16 + if page
  17 + links = page.ancestors.reverse.map { |p| { :name => p.title, :url => p.url } }
  18 + links << { :name => page.title, :url => page.url }
  19 + elsif params[:controller] == 'cms'
  20 + id = params[:id] || params[:parent_id]
  21 + links = page_trail(Article.find(id)) if id
  22 + links << { :name => cms_action(params[:action]), :url => params } if show_cms_action
  23 + end
  24 + links
  25 + end
  26 +
  27 + def trail(page, profile=nil, params={})
  28 + links = page_trail(page, params)
  29 + if profile && !links.empty? && show_profile
  30 + [ {:name => profile.name, :url => profile.url} ] + links
  31 + else
  32 + links
  33 + end
  34 + end
  35 +
  36 + def content(args={})
  37 + block = self
  38 + lambda do
  39 + trail = block.trail(@page, @profile, params)
  40 + if !trail.empty?
  41 + trail.map { |t| link_to(t[:name], t[:url], :class => 'item') }.join(content_tag('span', ' > ', :class => 'separator'))
  42 + else
  43 + ''
  44 + end
  45 + end
  46 + end
  47 +
  48 + def cacheable?
  49 + false
  50 + end
  51 +
  52 + protected
  53 +
  54 + CMS_ACTIONS = {:edit => _('Edit'), :upload_files => _('Upload Files'), :new => _('New')}
  55 +
  56 + def cms_action(action)
  57 + CMS_ACTIONS[action.to_sym] || action
  58 + end
  59 +
  60 +end
plugins/breadcrumbs/test/functional/profile_design_controller_test.rb
@@ -2,16 +2,15 @@ require File.dirname(__FILE__) + &#39;/../test_helper&#39; @@ -2,16 +2,15 @@ require File.dirname(__FILE__) + &#39;/../test_helper&#39;
2 2
3 class ProfileDesignController 3 class ProfileDesignController
4 append_view_path File.join(File.dirname(__FILE__) + '/../../views') 4 append_view_path File.join(File.dirname(__FILE__) + '/../../views')
5 - def rescue_action(e)  
6 - raise e  
7 - end 5 + def rescue_action(e)
  6 + raise e
  7 + end
8 end 8 end
9 9
10 class ProfileDesignControllerTest < ActionController::TestCase 10 class ProfileDesignControllerTest < ActionController::TestCase
11 11
12 def setup 12 def setup
13 - Environment.delete_all  
14 - @environment = Environment.create(:name => 'testenv', :is_default => true) 13 + @environment = Environment.default
15 @environment.enabled_plugins = ['BreadcrumbsPlugin'] 14 @environment.enabled_plugins = ['BreadcrumbsPlugin']
16 @environment.save! 15 @environment.save!
17 16
@@ -19,7 +18,7 @@ class ProfileDesignControllerTest &lt; ActionController::TestCase @@ -19,7 +18,7 @@ class ProfileDesignControllerTest &lt; ActionController::TestCase
19 @page = fast_create(Folder, :profile_id => @profile.id) 18 @page = fast_create(Folder, :profile_id => @profile.id)
20 19
21 box = Box.create!(:owner => @profile) 20 box = Box.create!(:owner => @profile)
22 - @block = BreadcrumbsBlock.create!(:box => box) 21 + @block = BreadcrumbsPlugin::ContentBreadcrumbsBlock.create!(:box => box)
23 22
24 user = create_user('testinguser') 23 user = create_user('testinguser')
25 @profile.add_admin(user.person) 24 @profile.add_admin(user.person)
plugins/breadcrumbs/test/unit/breadcrumbs_block_test.rb
@@ -1,75 +0,0 @@ @@ -1,75 +0,0 @@
1 -require File.dirname(__FILE__) + '/../test_helper'  
2 -  
3 -class BreadcrumbsBlockTest < ActiveSupport::TestCase  
4 -  
5 - include NoosferoTestHelper  
6 -  
7 - def setup  
8 - @block = BreadcrumbsBlock.new  
9 - @profile = fast_create(Community)  
10 - @folder = fast_create(Folder, :profile_id => @profile.id)  
11 - @article = fast_create(Folder, :profile_id => @profile.id, :parent_id => @folder.id)  
12 - @params = {}  
13 - end  
14 -  
15 - attr_reader :params  
16 -  
17 - should 'has a description' do  
18 - assert_not_equal Block.description, BreadcrumbsBlock.description  
19 - end  
20 -  
21 - should 'has a help' do  
22 - assert @block.help  
23 - end  
24 -  
25 - should 'return path of links to reach a page' do  
26 - links = [{:name => @folder.name, :url => @folder.url}, {:name => @article.name, :url => @article.url}]  
27 - assert_equal links, @block.page_trail(@article)  
28 - end  
29 -  
30 - should 'return path of links when current page is at cms controller' do  
31 - params = {:controller => 'cms', :action => 'edit', :id => @article.id}  
32 - links = [{:name => @folder.name, :url => @folder.url}, {:name => @article.name, :url => @article.url}, {:url=>{:controller=>"cms", :action=>"edit", :id=>@article.id}, :name=>"Edit"}]  
33 - assert_equal links, @block.page_trail(nil, params)  
34 - end  
35 -  
36 - should 'not return cms action link when show_cms_action is false' do  
37 - params = {:controller => 'cms', :action => 'edit', :id => @article.id}  
38 - links = [{:name => @folder.name, :url => @folder.url}, {:name => @article.name, :url => @article.url}]  
39 - @block.show_cms_action = false  
40 - assert_equal links, @block.page_trail(nil, params)  
41 - end  
42 -  
43 - should 'include profile link on path of links to reach a page' do  
44 - links = [{:name => @profile.name, :url => @profile.url}, {:name => @folder.name, :url => @folder.url}, {:name => @article.name, :url => @article.url}]  
45 - assert_equal links, @block.trail(@article, @profile)  
46 - end  
47 -  
48 - should 'not include profile link on path of links when show_profile is false' do  
49 - links = [{:name => @folder.name, :url => @folder.url}, {:name => @article.name, :url => @article.url}]  
50 - @block.show_profile = false  
51 - assert_equal links, @block.trail(@article, @profile)  
52 - end  
53 -  
54 - should 'not include profile link on path of links when trail is empty' do  
55 - assert_equal [], @block.trail(nil, @profile)  
56 - end  
57 -  
58 - should 'render trail if there is links to show' do  
59 - @page = @article  
60 - trail = instance_eval(&@block.content)  
61 - assert_match /#{@profile.name}/, trail  
62 - assert_match /#{@folder.name}/, trail  
63 - assert_match /#{@page.name}/, trail  
64 - end  
65 -  
66 - should 'render nothing if there is no links to show' do  
67 - @page = nil  
68 - assert_equal '', instance_eval(&@block.content)  
69 - end  
70 -  
71 - should 'not be cacheable' do  
72 - assert !@block.cacheable?  
73 - end  
74 -  
75 -end  
plugins/breadcrumbs/test/unit/breadcrumbs_plugin_test.rb
@@ -13,9 +13,9 @@ class BreadcrumbsPluginTest &lt; ActiveSupport::TestCase @@ -13,9 +13,9 @@ class BreadcrumbsPluginTest &lt; ActiveSupport::TestCase
13 should 'has a description' do 13 should 'has a description' do
14 assert !BreadcrumbsPlugin.plugin_description.blank? 14 assert !BreadcrumbsPlugin.plugin_description.blank?
15 end 15 end
16 - 16 +
17 should 'add a block' do 17 should 'add a block' do
18 - assert_equal [BreadcrumbsBlock], BreadcrumbsPlugin.extra_blocks.keys 18 + assert_equal [BreadcrumbsPlugin::ContentBreadcrumbsBlock], BreadcrumbsPlugin.extra_blocks.keys
19 end 19 end
20 20
21 end 21 end
plugins/breadcrumbs/test/unit/content_breadcrumbs_block_test.rb 0 → 100644
@@ -0,0 +1,75 @@ @@ -0,0 +1,75 @@
  1 +require File.dirname(__FILE__) + '/../test_helper'
  2 +
  3 +class ContentBreadcrumbsBlockTest < ActiveSupport::TestCase
  4 +
  5 + include NoosferoTestHelper
  6 +
  7 + def setup
  8 + @block = BreadcrumbsPlugin::ContentBreadcrumbsBlock.new
  9 + @profile = fast_create(Community)
  10 + @folder = fast_create(Folder, :profile_id => @profile.id)
  11 + @article = fast_create(Folder, :profile_id => @profile.id, :parent_id => @folder.id)
  12 + @params = {}
  13 + end
  14 +
  15 + attr_reader :params
  16 +
  17 + should 'has a description' do
  18 + assert_not_equal Block.description, BreadcrumbsPlugin::ContentBreadcrumbsBlock.description
  19 + end
  20 +
  21 + should 'has a help' do
  22 + assert @block.help
  23 + end
  24 +
  25 + should 'return path of links to reach a page' do
  26 + links = [{:name => @folder.name, :url => @folder.url}, {:name => @article.name, :url => @article.url}]
  27 + assert_equal links, @block.page_trail(@article)
  28 + end
  29 +
  30 + should 'return path of links when current page is at cms controller' do
  31 + params = {:controller => 'cms', :action => 'edit', :id => @article.id}
  32 + links = [{:name => @folder.name, :url => @folder.url}, {:name => @article.name, :url => @article.url}, {:url=>{:controller=>"cms", :action=>"edit", :id=>@article.id}, :name=>"Edit"}]
  33 + assert_equal links, @block.page_trail(nil, params)
  34 + end
  35 +
  36 + should 'not return cms action link when show_cms_action is false' do
  37 + params = {:controller => 'cms', :action => 'edit', :id => @article.id}
  38 + links = [{:name => @folder.name, :url => @folder.url}, {:name => @article.name, :url => @article.url}]
  39 + @block.show_cms_action = false
  40 + assert_equal links, @block.page_trail(nil, params)
  41 + end
  42 +
  43 + should 'include profile link on path of links to reach a page' do
  44 + links = [{:name => @profile.name, :url => @profile.url}, {:name => @folder.name, :url => @folder.url}, {:name => @article.name, :url => @article.url}]
  45 + assert_equal links, @block.trail(@article, @profile)
  46 + end
  47 +
  48 + should 'not include profile link on path of links when show_profile is false' do
  49 + links = [{:name => @folder.name, :url => @folder.url}, {:name => @article.name, :url => @article.url}]
  50 + @block.show_profile = false
  51 + assert_equal links, @block.trail(@article, @profile)
  52 + end
  53 +
  54 + should 'not include profile link on path of links when trail is empty' do
  55 + assert_equal [], @block.trail(nil, @profile)
  56 + end
  57 +
  58 + should 'render trail if there is links to show' do
  59 + @page = @article
  60 + trail = instance_eval(&@block.content)
  61 + assert_match /#{@profile.name}/, trail
  62 + assert_match /#{@folder.name}/, trail
  63 + assert_match /#{@page.name}/, trail
  64 + end
  65 +
  66 + should 'render nothing if there is no links to show' do
  67 + @page = nil
  68 + assert_equal '', instance_eval(&@block.content)
  69 + end
  70 +
  71 + should 'not be cacheable' do
  72 + assert !@block.cacheable?
  73 + end
  74 +
  75 +end
plugins/breadcrumbs/views/box_organizer/_breadcrumbs_block.rhtml
@@ -1,4 +0,0 @@ @@ -1,4 +0,0 @@
1 -<div id='edit-breadcrumbs-block'>  
2 - <%= labelled_form_field check_box(:block, :show_cms_action) + _('Show cms action'), '' %>  
3 - <%= labelled_form_field check_box(:block, :show_profile) + _('Show profile'), '' %>  
4 -</div>  
plugins/breadcrumbs/views/box_organizer/breadcrumbs_plugin/_content_breadcrumbs_block.rhtml 0 → 100644
@@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
  1 +<div id='edit-breadcrumbs-block'>
  2 + <%= labelled_form_field check_box(:block, :show_cms_action) + _('Show cms action'), '' %>
  3 + <%= labelled_form_field check_box(:block, :show_profile) + _('Show profile'), '' %>
  4 +</div>
plugins/breadcrumbs/views/profile_design
@@ -1 +0,0 @@ @@ -1 +0,0 @@
1 -box_organizer  
2 \ No newline at end of file 0 \ No newline at end of file
plugins/breadcrumbs/views/profile_design/breadcrumbs_plugin 0 → 120000
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +../box_organizer/breadcrumbs_plugin/
0 \ No newline at end of file 2 \ No newline at end of file