Commit 071c3d7992625c53fa52d8c3af8e26531892b63b

Authored by Rodrigo Souto
Committed by Daniela Feitosa
1 parent e7d2150d

Adding hot spots and fixing somethings

* Hot Spots:
    - Catalog item extra content
    - Stylesheet
    - JS
    - Application body extra content
    - Product info extra content
  * Plugin new methods
    - Public name
    - Public path
  * Plugin manager
    - Fixing map and adding collect method
  * Fixes:
    - Expand template method
app/helpers/catalog_helper.rb
... ... @@ -6,7 +6,7 @@ include ManageProductsHelper
6 6 def display_products_list(profile, products)
7 7 data = ''
8 8 products.each { |product|
9   -
  9 + extra_content = @plugins.map(:catalog_item_extras, product).collect { |content| instance_eval(&content) }
10 10 data << content_tag('li',
11 11 link_to_product(product, :class => 'product-pic', :style => 'background-image:url(%s)' % ( product.image ? product.image.public_filename(:portrait) : '/images/icons-app/product-default-pic-portrait.png' )) +
12 12 content_tag('h3', link_to_product(product)) +
... ... @@ -14,7 +14,11 @@ include ManageProductsHelper
14 14 (product.price ? content_tag('li', _('Price: %s') % ( "%.2f" % product.price), :class => 'product_price') : '') +
15 15 content_tag('li', product_category_name(profile, product.product_category), :class => 'product_category')
16 16 ) +
17   - (product.description ? content_tag('div', txt2html(product.description), :class => 'description') : tag('br', :style => 'clear:both')),
  17 + (product.description ? content_tag('div',
  18 + txt2html(product.description),
  19 + :class => 'description') : tag('br',
  20 + :style => 'clear:both')) +
  21 + extra_content.join("\n"),
18 22 :class => 'product')
19 23 }
20 24 content_tag('h1', _('Products/Services')) + content_tag('ul', data, :id => 'product_list')
... ...
app/views/layouts/application-ng.rhtml
... ... @@ -13,10 +13,20 @@
13 13 <%= stylesheet_link_tag icon_theme_stylesheet_path %>
14 14 <%= stylesheet_link_tag theme_stylesheet_path %>
15 15 <%= stylesheet_link_tag jquery_ui_theme_stylesheet_path %>
  16 + <% @plugins.enabled_plugins.each do |plugin| %>
  17 + <% if plugin.stylesheet? %>
  18 + <%= stylesheet_tag plugin.class.public_path('style.css'), {} %>
  19 + <% end %>
  20 + <% end %>
16 21  
17 22 <%# Add custom tags/styles/etc via content_for %>
18 23 <%= yield :head %>
19 24 <%= javascript_tag('render_all_jquery_ui_widgets()') %>
  25 + <% @plugins.enabled_plugins.each do |plugin| %>
  26 + <% plugin.js_files.each do |js_file| %>
  27 + <%= javascript_src_tag plugin.class.public_path(js_file), {} %>
  28 + <% end %>
  29 + <% end %>
20 30 </head>
21 31 <body class="<%=
22 32 # Identify the current controller and action for the CSS:
... ... @@ -27,6 +37,11 @@
27 37 %>" >
28 38  
29 39 <a href="#content" id="link-go-content"><span><%= _("Go to the content") %></span></a>
  40 + <%=
  41 + @plugins.map(:body_beginning).collect do |content|
  42 + content.respond_to?(:call) ? content.call : content
  43 + end.join('\n')
  44 + %>
30 45  
31 46 <div id="wrap-1">
32 47 <div id='theme-header'>
... ...
app/views/manage_products/show.rhtml
... ... @@ -14,6 +14,8 @@
14 14 </div>
15 15 <div id='product-info'>
16 16 <%= render :partial => 'manage_products/display_info' %>
  17 + <% extra_content = @plugins.map(:product_info_extras, @product).collect { |content| instance_eval(&content) } %>
  18 + <%= extra_content.join("\n") %>
17 19 </div>
18 20 </div>
19 21  
... ...
lib/noosfero/plugin.rb
... ... @@ -32,7 +32,15 @@ class Noosfero::Plugin
32 32 # Here the developer should specify the meta-informations that the plugin can
33 33 # inform.
34 34 def plugin_name
35   - self.to_s.underscore.humanize
  35 + self.name.underscore.humanize
  36 + end
  37 +
  38 + def public_name
  39 + self.name.underscore.gsub('_plugin','')
  40 + end
  41 +
  42 + def public_path(file = '')
  43 + compute_public_path((public_name + '/' + file), 'plugins')
36 44 end
37 45  
38 46 def plugin_description
... ... @@ -41,12 +49,18 @@ class Noosfero::Plugin
41 49  
42 50 end
43 51  
44   - def expanded_template(original_path, file_path, locals = {})
45   - while(File.basename(File.dirname(original_path)) != 'plugins')
46   - original_path = File.dirname(original_path)
47   - end
  52 + def expanded_template(file_path, locals = {})
  53 + views_path = "#{RAILS_ROOT}/plugins/#{self.class.public_name}/views"
  54 + ERB.new(File.read("#{views_path}/#{file_path}")).result(binding)
  55 + end
  56 +
  57 + # Here the developer may specify the events to which the plugins can
  58 + # register and must return true or false. The default value must be false.
48 59  
49   - ERB.new(File.read("#{original_path}/#{file_path}")).result(binding)
  60 + # -> If true, noosfero will include plugin_dir/public/style.css into
  61 + # application
  62 + def stylesheet?
  63 + false
50 64 end
51 65  
52 66 # Here the developer should specify the events to which the plugins can
... ... @@ -72,4 +86,28 @@ class Noosfero::Plugin
72 86 nil
73 87 end
74 88  
  89 + # -> Adds content to calalog item
  90 + # returns = lambda block that creates a html code
  91 + def catalog_item_extras(item)
  92 + nil
  93 + end
  94 +
  95 + # -> Adds content to products info
  96 + # returns = lambda block that creates a html code
  97 + def product_info_extras(product)
  98 + nil
  99 + end
  100 +
  101 + # -> Adds content to the beginning of the page
  102 + # returns = lambda block that creates html code or raw rhtml/html.erb
  103 + def body_beginning
  104 + nil
  105 + end
  106 +
  107 + # -> Add plugins' javascript files to application
  108 + # returns = ['example1.js', 'javascripts/example2.js', 'example3.js']
  109 + def js_files
  110 + []
  111 + end
  112 +
75 113 end
... ...
lib/noosfero/plugin/manager.rb
... ... @@ -6,8 +6,12 @@ class Noosfero::Plugin::Manager
6 6 @context = Noosfero::Plugin::Context.new(controller)
7 7 end
8 8  
9   - def map(event)
10   - enabled_plugins.map { |plugin| plugin.send(event) }.compact.flatten
  9 + def map(event, *args)
  10 + enabled_plugins.map { |plugin| plugin.send(event, *args) }.compact.flatten
  11 + end
  12 +
  13 + def collect(&block)
  14 + enabled_plugins.collect(&block)
11 15 end
12 16  
13 17 def enabled_plugins
... ...
plugins/mezuro/lib/mezuro_plugin.rb
... ... @@ -19,7 +19,7 @@ class MezuroPlugin &lt; Noosfero::Plugin
19 19 MezuroPlugin::Project.by_profile(context.profile).with_tab.map do |project|
20 20 { :title => 'Mezuro ' + project.name,
21 21 :id => 'mezuro-project-'+project.identifier,
22   - :content => expanded_template(__FILE__,"views/show.html.erb",{:current_project => project}) }
  22 + :content => expanded_template("show.html.erb",{:current_project => project}) }
23 23 end
24 24 end
25 25 end
... ...