Commit 071c3d7992625c53fa52d8c3af8e26531892b63b
Committed by
Daniela Feitosa
1 parent
e7d2150d
Exists in
master
and in
22 other branches
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
Showing
6 changed files
with
74 additions
and
11 deletions
Show diff stats
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 < 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 | ... | ... |