Commit 071c3d7992625c53fa52d8c3af8e26531892b63b
Committed by
Daniela Feitosa
1 parent
e7d2150d
Exists in
master
and in
29 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 | ... | ... |