Commit a79d01ab7f327b07409c24efa5e0fba73626d076

Authored by Leandro Santos
1 parent a8f1e7f9

hotspot: adding article_extra_toolbar_buttons hostspot

app/helpers/application_helper.rb
... ... @@ -212,6 +212,7 @@ module ApplicationHelper
212 212 end
213 213  
214 214 def button(type, label, url, html_options = {})
  215 + html_options ||= {}
215 216 the_class = 'with-text'
216 217 if html_options.has_key?(:class)
217 218 the_class << ' ' << html_options[:class]
... ...
app/views/content_viewer/_article_toolbar.html.erb
... ... @@ -46,7 +46,10 @@
46 46 <%= button(:clock, _('All versions'), {:controller => 'content_viewer', :profile => profile.identifier, :action => 'article_versions'}, :id => 'article-versions-link') %>
47 47 <% end %>
48 48  
49   - <%= @plugins.dispatch(:article_toolbar_actions, @page).collect { |content| instance_exec(&content) }.join("")%>
  49 + <% @plugins.dispatch(:article_extra_toolbar_buttons, @page).each do |plugin_button| %>
  50 + <%= button plugin_button[:icon], plugin_button[:title], plugin_button[:url], plugin_button[:html_options] %>
  51 + <% end %>
  52 +
50 53  
51 54 <%= report_abuse(profile, :link, @page) %>
52 55  
... ...
lib/noosfero/plugin.rb
... ... @@ -426,10 +426,17 @@ class Noosfero::Plugin
426 426 []
427 427 end
428 428  
429   - # -> Adds aditional actions to article
430   - # returns = lambda block that creates html code
431   - def article_toolbar_actions article
432   - nil
  429 + # -> Adds aditional action buttons to article
  430 + # returns = { :title => title, :icon => icon, :url => url, :html_options => {} }
  431 + # title = name that will be displayed.
  432 + # icon = css class name (for customized icons include them in a css file).
  433 + # url = url or route to which the button will redirect.
  434 + # html_options = Html options for customization
  435 + #
  436 + # Multiple values could be passed as parameter.
  437 + # returns = [{:title => title, :icon => icon}, {:title => title, :icon => icon}]
  438 + def article_extra_toolbar_buttons(article)
  439 + []
433 440 end
434 441  
435 442 # -> Adds adicional content to article
... ...
test/functional/content_viewer_controller_test.rb
... ... @@ -1436,4 +1436,76 @@ class ContentViewerControllerTest &lt; ActionController::TestCase
1436 1436  
1437 1437 assert_no_tag :tag => 'h1', :attributes => { :class => /title/ }, :content => article.name
1438 1438 end
  1439 +
  1440 + should 'add extra toolbar actions on article from plugins' do
  1441 + class Plugin1 < Noosfero::Plugin
  1442 + def article_extra_toolbar_buttons(article)
  1443 + {:title => 'some_title1', :icon => 'some_icon1', :url => {}}
  1444 + end
  1445 + end
  1446 + Noosfero::Plugin.stubs(:all).returns([Plugin1.name])
  1447 +
  1448 + Environment.default.enable_plugin(Plugin1.name)
  1449 +
  1450 + page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text')
  1451 +
  1452 + get :view_page, :profile => profile.identifier, :page => [ 'myarticle' ]
  1453 + assert_tag :tag => 'div', :attributes => { :id => 'article-actions' }, :descendant => { :tag => 'a', :attributes => { :title => "some_title1" }}
  1454 + end
  1455 +
  1456 + should 'add more than one extra toolbar actions on article from plugins' do
  1457 + class Plugin1 < Noosfero::Plugin
  1458 + def article_extra_toolbar_buttons(article)
  1459 + {:title => 'some_title1', :icon => 'some_icon1', :url => {}}
  1460 + end
  1461 + end
  1462 + class Plugin2 < Noosfero::Plugin
  1463 + def article_extra_toolbar_buttons(article)
  1464 + {:title => 'some_title2', :icon => 'some_icon2', :url => {}}
  1465 + end
  1466 + end
  1467 + Noosfero::Plugin.stubs(:all).returns([Plugin1.name, Plugin2.name])
  1468 +
  1469 + Environment.default.enable_plugin(Plugin1.name)
  1470 + Environment.default.enable_plugin(Plugin2.name)
  1471 +
  1472 + page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text')
  1473 +
  1474 + get :view_page, :profile => profile.identifier, :page => [ 'myarticle' ]
  1475 + assert_tag :tag => 'div', :attributes => { :id => 'article-actions' }, :descendant => { :tag => 'a', :attributes => { :title => "some_title1" }}
  1476 + assert_tag :tag => 'div', :attributes => { :id => 'article-actions' }, :descendant => { :tag => 'a', :attributes => { :title => "some_title2" }}
  1477 + end
  1478 +
  1479 + should 'add icon attribute in extra toolbar actions on article from plugins' do
  1480 + class Plugin1 < Noosfero::Plugin
  1481 + def article_extra_toolbar_buttons(article)
  1482 + {:title => 'some_title1', :icon => 'some_icon1', :url => {}}
  1483 + end
  1484 + end
  1485 + Noosfero::Plugin.stubs(:all).returns([Plugin1.name])
  1486 +
  1487 + Environment.default.enable_plugin(Plugin1.name)
  1488 +
  1489 + page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text')
  1490 +
  1491 + get :view_page, :profile => profile.identifier, :page => [ 'myarticle' ]
  1492 + assert_tag :tag => 'div', :attributes => { :id => 'article-actions' }, :descendant => { :tag => 'a', :attributes => { :class => /some_icon1/ }}
  1493 + end
  1494 +
  1495 + should 'add url attribute in extra toolbar actions on article from plugins' do
  1496 + class Plugin1 < Noosfero::Plugin
  1497 + def article_extra_toolbar_buttons(article)
  1498 + {:title => 'some_title1', :icon => 'some_icon1', :url => '/bli'}
  1499 + end
  1500 + end
  1501 + Noosfero::Plugin.stubs(:all).returns([Plugin1.name])
  1502 +
  1503 + Environment.default.enable_plugin(Plugin1.name)
  1504 +
  1505 + page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text')
  1506 +
  1507 + get :view_page, :profile => profile.identifier, :page => [ 'myarticle' ]
  1508 + assert_tag :tag => 'div', :attributes => { :id => 'article-actions' }, :descendant => { :tag => 'a', :attributes => { :href => "/bli" }}
  1509 + end
  1510 +
1439 1511 end
... ...
test/unit/plugin_test.rb
... ... @@ -560,4 +560,13 @@ class PluginTest &lt; ActiveSupport::TestCase
560 560 assert_equivalent [st4.term, st2.term], limited_suggestions
561 561 end
562 562  
  563 + should 'article_extra_toolbar_buttons return an empty array by default' do
  564 + class CustomBlock1 < Block; end;
  565 +
  566 + class Plugin1 < Noosfero::Plugin
  567 + end
  568 + p = Plugin1.new
  569 + assert_equal [], p.article_extra_toolbar_buttons(nil)
  570 + end
  571 +
563 572 end
... ...