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   -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 7 def self.plugin_description
8 8 _("A plugin that add a block to display breadcrumbs.")
9 9 end
10   -
  10 +
11 11 def self.extra_blocks
12   - { BreadcrumbsBlock => {:type => [Community, Person, Enterprise] } }
  12 + { BreadcrumbsPlugin::ContentBreadcrumbsBlock => {:type => [Community, Person, Enterprise] } }
13 13 end
14 14  
15 15 end
... ...
plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb 0 → 100644
... ... @@ -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 2  
3 3 class ProfileDesignController
4 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 8 end
9 9  
10 10 class ProfileDesignControllerTest < ActionController::TestCase
11 11  
12 12 def setup
13   - Environment.delete_all
14   - @environment = Environment.create(:name => 'testenv', :is_default => true)
  13 + @environment = Environment.default
15 14 @environment.enabled_plugins = ['BreadcrumbsPlugin']
16 15 @environment.save!
17 16  
... ... @@ -19,7 +18,7 @@ class ProfileDesignControllerTest &lt; ActionController::TestCase
19 18 @page = fast_create(Folder, :profile_id => @profile.id)
20 19  
21 20 box = Box.create!(:owner => @profile)
22   - @block = BreadcrumbsBlock.create!(:box => box)
  21 + @block = BreadcrumbsPlugin::ContentBreadcrumbsBlock.create!(:box => box)
23 22  
24 23 user = create_user('testinguser')
25 24 @profile.add_admin(user.person)
... ...
plugins/breadcrumbs/test/unit/breadcrumbs_block_test.rb
... ... @@ -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 13 should 'has a description' do
14 14 assert !BreadcrumbsPlugin.plugin_description.blank?
15 15 end
16   -
  16 +
17 17 should 'add a block' do
18   - assert_equal [BreadcrumbsBlock], BreadcrumbsPlugin.extra_blocks.keys
  18 + assert_equal [BreadcrumbsPlugin::ContentBreadcrumbsBlock], BreadcrumbsPlugin.extra_blocks.keys
19 19 end
20 20  
21 21 end
... ...
plugins/breadcrumbs/test/unit/content_breadcrumbs_block_test.rb 0 → 100644
... ... @@ -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   -<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 @@
  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   -box_organizer
2 0 \ No newline at end of file
plugins/breadcrumbs/views/profile_design/breadcrumbs_plugin 0 → 120000
... ... @@ -0,0 +1 @@
  1 +../box_organizer/breadcrumbs_plugin/
0 2 \ No newline at end of file
... ...