Commit 1f2f7efd6ef7d2affe4929abb21ab516b943307a

Authored by Leandro Santos
2 parents 95c37b6c 6639c037
Exists in staging and in 1 other branch production

Merge branch 'master' into staging

plugins/context_content/controllers/profile/context_content_plugin_profile_controller.rb
@@ -7,9 +7,11 @@ class ContextContentPluginProfileController < ProfileController @@ -7,9 +7,11 @@ class ContextContentPluginProfileController < ProfileController
7 contents = block.contents(profile.articles.find(params[:article_id]), p) 7 contents = block.contents(profile.articles.find(params[:article_id]), p)
8 8
9 if contents 9 if contents
  10 + @page = Article.find(params[:article_id])
  11 +
10 render :update do |page| 12 render :update do |page|
11 - page.replace_html "context_content_#{block.id}", :file => "blocks/context_content", :locals => {:block => block, :contents => contents}  
12 - page.replace_html "context_content_more_#{block.id}", :partial => 'blocks/more', :locals => {:block => block, :contents => contents, :article_id => params[:article_id] } 13 + page.replace_html "context_content_#{block.id}", :file => "blocks/context_content", :locals => {:block => block}
  14 + page.replace_html "context_content_more_#{block.id}", :file => 'blocks/footers/context_content', :locals => {:block => block}
13 end 15 end
14 else 16 else
15 render :text => "invalid page", :status => 500 17 render :text => "invalid page", :status => 500
plugins/context_content/lib/context_content_block_helper.rb 0 → 100644
@@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
  1 +module ContextContentBlockHelper
  2 + def content_image(content)
  3 + if content.image?
  4 + image_tag(content.public_filename(:thumb))
  5 + else
  6 + extra_class = content.uploaded_file? ? "extension-#{content.extension}" : ''
  7 + klasses = [content.icon_name].flatten.map{|name| 'icon-'+name}.join(' ')
  8 + content_tag 'div', '', :class => "context-icon #{klasses} #{extra_class}"
  9 + end
  10 + end
  11 +end
plugins/context_content/lib/context_content_plugin/context_content_block.rb
@@ -43,19 +43,6 @@ class ContextContentPlugin::ContextContentBlock < Block @@ -43,19 +43,6 @@ class ContextContentPlugin::ContextContentBlock < Block
43 settings[:types] = new_types.reject(&:blank?) 43 settings[:types] = new_types.reject(&:blank?)
44 end 44 end
45 45
46 - def content_image(content)  
47 - block = self  
48 - proc do  
49 - if content.image?  
50 - image_tag(content.public_filename(:thumb))  
51 - else  
52 - extra_class = content.uploaded_file? ? "extension-#{content.extension}" : ''  
53 - klasses = [content.icon_name].flatten.map{|name| 'icon-'+name}.join(' ')  
54 - content_tag 'div', '', :class => "context-icon #{klasses} #{extra_class}"  
55 - end  
56 - end  
57 - end  
58 -  
59 def contents(page, p=1) 46 def contents(page, p=1)
60 return @children unless @children.blank? 47 return @children unless @children.blank?
61 if page 48 if page
@@ -71,33 +58,6 @@ class ContextContentPlugin::ContextContentBlock < Block @@ -71,33 +58,6 @@ class ContextContentPlugin::ContextContentBlock < Block
71 contents.first.parent.name 58 contents.first.parent.name
72 end 59 end
73 60
74 - def footer  
75 - block = self  
76 - proc do  
77 - contents = block.contents(@page)  
78 - if contents  
79 - content_tag('div',  
80 - render(:partial => 'blocks/more', :locals => {:block => block, :contents => contents, :article_id => @page.id}), :id => "context_content_more_#{block.id}", :class => "more_button")  
81 - else  
82 - ''  
83 - end  
84 - end  
85 - end  
86 -  
87 - def content(args={})  
88 - block = self  
89 - ret = proc do  
90 - contents = block.contents(@page)  
91 - parent_title = block.parent_title(contents)  
92 - if contents.present?  
93 - render(:file => 'blocks/context_content', :locals => {:block => block, :contents => contents, :parent_title => parent_title})  
94 - else  
95 - ''  
96 - end  
97 - end  
98 - ret  
99 - end  
100 -  
101 def cacheable? 61 def cacheable?
102 false 62 false
103 end 63 end
plugins/context_content/test/unit/context_content_block_helper_test.rb 0 → 100644
@@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
  1 +require 'test_helper'
  2 +
  3 +class ContextContentBlockHelperTest < ActionView::TestCase
  4 + include ContextContentBlockHelper
  5 +
  6 + should 'display thumbnail for image content' do
  7 + content = UploadedFile.new(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'))
  8 + content = FilePresenter.for(content)
  9 + expects(:image_tag).once
  10 + content_image(content)
  11 + end
  12 +
  13 + should 'display div as content image for content that is not a image' do
  14 + content = fast_create(Folder)
  15 + content = FilePresenter.for(content)
  16 + expects(:content_tag).once
  17 + content_image(content)
  18 + end
  19 +
  20 + should 'display div with extension class for uploaded file that is not an image' do
  21 + content = UploadedFile.new(:uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain'))
  22 + content = FilePresenter.for(content)
  23 + expects(:content_tag).with('div', '', :class => "context-icon icon-text icon-text-plain extension-txt").once
  24 + content_image(content)
  25 + end
  26 +
  27 +end
plugins/context_content/test/unit/context_content_block_test.rb
@@ -20,17 +20,6 @@ class ContextContentBlockTest &lt; ActiveSupport::TestCase @@ -20,17 +20,6 @@ class ContextContentBlockTest &lt; ActiveSupport::TestCase
20 assert_equal nil, @block.contents(nil) 20 assert_equal nil, @block.contents(nil)
21 end 21 end
22 22
23 - should 'render nothing if it has no content to show' do  
24 - assert_equal '', instance_eval(&@block.content)  
25 - end  
26 -  
27 - should 'render context content block view' do  
28 - @page = fast_create(Folder)  
29 - article = fast_create(TinyMceArticle, :parent_id => @page.id)  
30 - expects(:render).with(:file => 'blocks/context_content', :locals => {:block => @block, :contents => [article], :parent_title => @page.name})  
31 - instance_eval(&@block.content)  
32 - end  
33 -  
34 should 'return children of page' do 23 should 'return children of page' do
35 folder = fast_create(Folder) 24 folder = fast_create(Folder)
36 article = fast_create(TinyMceArticle, :parent_id => folder.id) 25 article = fast_create(TinyMceArticle, :parent_id => folder.id)
@@ -134,34 +123,56 @@ class ContextContentBlockTest &lt; ActiveSupport::TestCase @@ -134,34 +123,56 @@ class ContextContentBlockTest &lt; ActiveSupport::TestCase
134 assert_equal [UploadedFile, Event, TinyMceArticle, TextileArticle, RawHTMLArticle, Folder, Blog, Forum, Gallery, RssFeed, SomePluginContent], @block.available_content_types 123 assert_equal [UploadedFile, Event, TinyMceArticle, TextileArticle, RawHTMLArticle, Folder, Blog, Forum, Gallery, RssFeed, SomePluginContent], @block.available_content_types
135 end 124 end
136 125
137 - should 'display thumbnail for image content' do  
138 - content = UploadedFile.new(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'))  
139 - content = FilePresenter.for(content)  
140 - expects(:image_tag).once  
141 - instance_eval(&@block.content_image(content)) 126 + should 'return box owner on profile method call' do
  127 + profile = fast_create(Community)
  128 + box = Box.create!(:owner => profile)
  129 + block = ContextContentPlugin::ContextContentBlock.create!(:box_id => box.id)
  130 + assert_equal profile, block.profile
  131 + end
  132 +
  133 + should 'not be cacheable' do
  134 + refute @block.cacheable?
  135 + end
  136 +
  137 +end
  138 +
  139 +require 'boxes_helper'
  140 +
  141 +class ContextContentBlockViewTest < ActionView::TestCase
  142 + include BoxesHelper
  143 +
  144 + def setup
  145 + Noosfero::Plugin::Manager.any_instance.stubs(:enabled_plugins).returns([])
  146 + @block = ContextContentPlugin::ContextContentBlock.create!
  147 + @block.types = ['TinyMceArticle']
142 end 148 end
143 149
144 - should 'display div as content image for content that is not a image' do  
145 - content = fast_create(Folder)  
146 - content = FilePresenter.for(content)  
147 - expects(:content_tag).once  
148 - instance_eval(&@block.content_image(content)) 150 + should 'render nothing if it has no content to show' do
  151 + assert_equal "\n", render_block_content(@block)
149 end 152 end
150 153
151 - should 'display div with extension class for uploaded file that is not a image' do  
152 - content = UploadedFile.new(:uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain'))  
153 - content = FilePresenter.for(content)  
154 - expects(:content_tag).with('div', '', :class => "context-icon icon-text icon-text-plain extension-txt").once  
155 - instance_eval(&@block.content_image(content)) 154 + should 'render context content block view' do
  155 + @page = fast_create(Folder)
  156 + article = fast_create(TinyMceArticle, :parent_id => @page.id)
  157 + contents = [article]
  158 + @block.use_parent_title = true
  159 +
  160 + article.expects(:view_url).returns('http://test.noosfero.plugins')
  161 + @block.expects(:contents).with(@page).returns(contents)
  162 + @block.expects(:parent_title).with(contents).returns(@page.name)
  163 + ActionView::Base.any_instance.expects(:block_title).with(@page.name, @block.subtitle).returns("")
  164 +
  165 + render_block_content(@block)
156 end 166 end
157 167
158 should 'do not display pagination links if page is nil' do 168 should 'do not display pagination links if page is nil' do
159 @page = nil 169 @page = nil
160 - assert_equal '', instance_eval(&@block.footer) 170 +
  171 + assert_equal "\n", render_block_content(@block)
161 end 172 end
162 173
163 should 'do not display pagination links if it has until one page' do 174 should 'do not display pagination links if it has until one page' do
164 - assert_equal '', instance_eval(&@block.footer) 175 + assert_equal "\n", render_block_content(@block)
165 end 176 end
166 177
167 should 'display pagination links if it has more than one page' do 178 should 'display pagination links if it has more than one page' do
@@ -170,20 +181,14 @@ class ContextContentBlockTest &lt; ActiveSupport::TestCase @@ -170,20 +181,14 @@ class ContextContentBlockTest &lt; ActiveSupport::TestCase
170 article1 = fast_create(TinyMceArticle, :parent_id => @page.id) 181 article1 = fast_create(TinyMceArticle, :parent_id => @page.id)
171 article2 = fast_create(TinyMceArticle, :parent_id => @page.id) 182 article2 = fast_create(TinyMceArticle, :parent_id => @page.id)
172 article3 = fast_create(TinyMceArticle, :parent_id => @page.id) 183 article3 = fast_create(TinyMceArticle, :parent_id => @page.id)
173 - expects(:content_tag).once  
174 - expects(:render).with(has_entry(:partial => 'blocks/more'))  
175 - instance_eval(&@block.footer)  
176 - end 184 + contents = [article1, article2, article3]
  185 + contents.each do |article|
  186 + article.expects(:view_url).returns('http://test.noosfero.plugins')
  187 + end
177 188
178 - should 'return box owner on profile method call' do  
179 - profile = fast_create(Community)  
180 - box = Box.create!(:owner => profile)  
181 - block = ContextContentPlugin::ContextContentBlock.create!(:box_id => box.id)  
182 - assert_equal profile, block.profile  
183 - end 189 + ActionView::Base.any_instance.expects(:block_title).returns("")
  190 + @block.expects(:contents).with(@page).returns(contents)
184 191
185 - should 'not be cacheable' do  
186 - refute @block.cacheable? 192 + render_block_content(@block)
187 end 193 end
188 -  
189 end 194 end
plugins/context_content/views/blocks/_more.html.erb
@@ -1,4 +0,0 @@ @@ -1,4 +0,0 @@
1 -<% if contents.total_pages > 1 %>  
2 - <%= link_to_remote(nil, :url => {:profile => block.owner.identifier, :id => block.id, :controller => 'context_content_plugin_profile', :action => 'view_content', :page => contents.previous_page, :article_id => article_id }, :html => {:class => "button icon-button icon-left #{contents.previous_page ? '':'disabled'}".strip}, :condition => "#{!contents.previous_page.nil?}", :success => "jQuery('#context_content_#{block.id}').effect('slide', {direction: 'left'});" )%>  
3 - <%= link_to_remote(nil, :url => {:profile => block.owner.identifier, :id => block.id, :controller => 'context_content_plugin_profile', :action => 'view_content', :page => contents.next_page, :article_id => article_id }, :html => {:class => "button icon-button icon-right #{contents.next_page ? '':'disabled'}".strip}, :condition => "#{!contents.next_page.nil?}", :success => "jQuery('#context_content_#{block.id}').effect('slide', {direction: 'right'});" )%>  
4 -<% end %>  
plugins/context_content/views/blocks/context_content.html.erb
1 -<% if block.use_parent_title %>  
2 - <%= block_title(parent_title, block.subtitle) %>  
3 -<% else %>  
4 - <%= block_title(block.title, block.subtitle) %>  
5 -<% end %> 1 +<% extend ContextContentBlockHelper %>
6 2
7 -<div class='contents' id='<%="context_content_#{block.id}"%>'>  
8 - <% contents.each do |content| %>  
9 - <% content = FilePresenter.for(content) %>  
10 - <span class="item">  
11 - <a href="<%= url_for(content.view_url) %>">  
12 - <div class="image">  
13 - <%= instance_eval(&block.content_image(content)) if block.show_image %>  
14 - </div>  
15 - <% if block.show_name %>  
16 - <div class="name"><%= content.name %></div>  
17 - <% end %>  
18 - </a>  
19 - </span> 3 +<% contents = block.contents(@page)
  4 + unless contents.blank? %>
  5 + <% if block.use_parent_title %>
  6 + <%= block_title(block.parent_title(contents), block.subtitle) %>
  7 + <% else %>
  8 + <%= block_title(block.title, block.subtitle) %>
20 <% end %> 9 <% end %>
21 -</div> 10 +
  11 + <div class='contents' id='<%="context_content_#{block.id}"%>'>
  12 + <% contents.each do |content| %>
  13 + <% content = FilePresenter.for(content) %>
  14 + <span class="item">
  15 + <a href="<%= url_for(content.view_url) %>">
  16 + <div class="image">
  17 + <%= content_image(content) if block.show_image %>
  18 + </div>
  19 + <% if block.show_name %>
  20 + <div class="name"><%= content.name %></div>
  21 + <% end %>
  22 + </a>
  23 + </span>
  24 + <% end %>
  25 + </div>
  26 +<% end %>
plugins/context_content/views/blocks/footers/context_content.html.erb 0 → 100644
@@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
  1 +<% contents = block.contents(@page)
  2 + unless contents.blank? %>
  3 + <div id="context_content_more_<%= block.id %>" class="more_button">
  4 + <% if contents.total_pages > 1 %>
  5 + <%= link_to_remote(nil, :url => {:profile => block.owner.identifier, :id => block.id, :controller => 'context_content_plugin_profile', :action => 'view_content', :page => contents.previous_page, :article_id => @page.id }, :html => {:class => "button icon-button icon-left #{contents.previous_page ? '':'disabled'}".strip}, :condition => "#{!contents.previous_page.nil?}", :success => "jQuery('#context_content_#{block.id}').effect('slide', {direction: 'left'});" )%>
  6 + <%= link_to_remote(nil, :url => {:profile => block.owner.identifier, :id => block.id, :controller => 'context_content_plugin_profile', :action => 'view_content', :page => contents.next_page, :article_id => @page.id }, :html => {:class => "button icon-button icon-right #{contents.next_page ? '':'disabled'}".strip}, :condition => "#{!contents.next_page.nil?}", :success => "jQuery('#context_content_#{block.id}').effect('slide', {direction: 'right'});" )%>
  7 + <% end %>
  8 + </div>
  9 +<% end %>
plugins/recent_content/lib/recent_content_block.rb
@@ -44,13 +44,6 @@ class RecentContentBlock &lt; Block @@ -44,13 +44,6 @@ class RecentContentBlock &lt; Block
44 44
45 include DatesHelper 45 include DatesHelper
46 46
47 - def content(args={})  
48 - block = self  
49 - proc do  
50 - render :file => 'blocks/recent_content_block', :locals => {:root => block.root, :block => block}  
51 - end  
52 - end  
53 -  
54 def mode?(attr) 47 def mode?(attr)
55 attr == self.presentation_mode 48 attr == self.presentation_mode
56 end 49 end
plugins/recent_content/test/unit/recent_content_block_test.rb
@@ -73,3 +73,73 @@ class RecentContentBlockTest &lt; ActiveSupport::TestCase @@ -73,3 +73,73 @@ class RecentContentBlockTest &lt; ActiveSupport::TestCase
73 end 73 end
74 74
75 end 75 end
  76 +
  77 +require 'boxes_helper'
  78 +
  79 +class RecentContentBlockViewTest < ActionView::TestCase
  80 + include BoxesHelper
  81 +
  82 + should 'show the alert when the block has no root' do
  83 + block = RecentContentBlock.new
  84 +
  85 + block.expects(:root).returns(nil)
  86 +
  87 + content = render_block_content(block)
  88 +
  89 + assert_match /#{_('This is the recent content block. Please edit it to show the content you want.')}/, content
  90 + end
  91 +
  92 + should 'show the title and the child titles when the block has a root and is set to title only mode' do
  93 + profile = create_user('testuser').person
  94 +
  95 + root = fast_create(Blog, :name => 'test-blog', :profile_id => profile.id)
  96 +
  97 + block = RecentContentBlock.new
  98 + block.stubs(:holder).returns(profile)
  99 + block.selected_folder = root.id
  100 + block.presentation_mode = 'title_only'
  101 +
  102 + ActionView::Base.any_instance.expects(:block_title).returns("Block Title")
  103 + ActionView::Base.any_instance.expects(:profile).returns(profile)
  104 +
  105 + content = render_block_content(block)
  106 +
  107 + assert_match /Block Title/, content
  108 + end
  109 +
  110 + should 'show the title and the child titles and abstracts when the block has a root and is set to title and abstract mode' do
  111 + profile = create_user('testuser').person
  112 +
  113 + root = fast_create(Blog, :name => 'test-blog', :profile_id => profile.id)
  114 +
  115 + block = RecentContentBlock.new
  116 + block.stubs(:holder).returns(profile)
  117 + block.selected_folder = root.id
  118 + block.presentation_mode = 'title_and_abstract'
  119 +
  120 + ActionView::Base.any_instance.expects(:block_title).returns("Block Title")
  121 + ActionView::Base.any_instance.expects(:profile).returns(profile)
  122 +
  123 + content = render_block_content(block)
  124 +
  125 + assert_match /Block Title/, content
  126 + end
  127 +
  128 + should 'show the title and the child full content when the block has a root and has no mode set' do
  129 + profile = create_user('testuser').person
  130 +
  131 + root = fast_create(Blog, :name => 'test-blog', :profile_id => profile.id)
  132 +
  133 + block = RecentContentBlock.new
  134 + block.stubs(:holder).returns(profile)
  135 + block.selected_folder = root.id
  136 + block.presentation_mode = ''
  137 +
  138 + ActionView::Base.any_instance.expects(:block_title).returns("Block Title")
  139 + ActionView::Base.any_instance.expects(:profile).returns(profile)
  140 +
  141 + content = render_block_content(block)
  142 +
  143 + assert_match /Block Title/, content
  144 + end
  145 +end
plugins/recent_content/views/blocks/recent_content.html.erb 0 → 100644
@@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
  1 +<% unless block.root.nil? %>
  2 + <div id="recent-content-block">
  3 + <% children = block.articles_of_folder(block.root, block.total_items)%>
  4 + <div class="recent-content">
  5 + <%= block_title(block.title.blank? ? c_("Recent content") : block.title, block.subtitle ) %>
  6 + <% if block.show_blog_picture and !block.root.image.nil? %>
  7 + <div class="recent-content-cover">
  8 + <%= image_tag(block.root.image.public_filename(:big)) %>
  9 + </div>
  10 + <% end %>
  11 + </div>
  12 + <% if block.mode?('title_only') %>
  13 + <div class="recent-content-title">
  14 + <ul>
  15 + <% children.each do |item| %>
  16 + <li> <%= link_to(h(item.title), item.url)%></li>
  17 + <% end %>
  18 + </ul>
  19 + </div>
  20 + <% elsif block.mode?('title_and_abstract') %>
  21 + <div class="recent-content-abstract">
  22 + <% children.each do |item| %>
  23 + <h2><%= link_to(item.title,item.url, :class => 'post-title')%></h2>
  24 + <span class="post-date"><%= show_date(item.published_at, true)%></span>
  25 + <div class="headline"><%=item.lead%></div>
  26 + <p class="highlighted-news-read-more"><%= link_to(_('Read more'), item.url) %></p>
  27 + <% end %>
  28 + </div>
  29 + <% else %>
  30 + <div class="recent-content-full">
  31 + <% children.each do |item| %>
  32 + <h2><%= link_to(item.title,item.url, :class => 'post-title')%></h2>
  33 + <span class="post-date"><%= show_date(item.published_at, true)%></span>
  34 + <div class="headline"><%=item.body%></div>
  35 + <p class="highlighted-news-read-more"><%= link_to(_('Read more'), item.url) %></p>
  36 + <% end %>
  37 + </div>
  38 + <% end %>
  39 + <%= link_to _('View All'), :profile => profile.identifier, :controller => 'content_viewer', :action => 'view_page', :page => block.root.path %>
  40 + </div>
  41 +<% else %>
  42 + <span class="alert-block">
  43 + <%= _('This is the recent content block. Please edit it to show the content you want.') %>
  44 + </span>
  45 +<% end %>
plugins/recent_content/views/blocks/recent_content_block.html.erb
@@ -1,45 +0,0 @@ @@ -1,45 +0,0 @@
1 -<% unless root.nil? %>  
2 - <div id="recent-content-block">  
3 - <% children = block.articles_of_folder(root, block.total_items)%>  
4 - <div class="recent-content">  
5 - <%= block_title(block.title.blank? ? c_("Recent content") : block.title, block.subtitle ) %>  
6 - <% if block.show_blog_picture and !root.image.nil? %>  
7 - <div class="recent-content-cover">  
8 - <%= image_tag(root.image.public_filename(:big)) %>  
9 - </div>  
10 - <% end %>  
11 - </div>  
12 - <% if block.mode?('title_only') %>  
13 - <div class="recent-content-title">  
14 - <ul>  
15 - <% children.each do |item| %>  
16 - <li> <%= link_to(h(item.title), item.url)%></li>  
17 - <% end %>  
18 - </ul>  
19 - </div>  
20 - <% elsif block.mode?('title_and_abstract') %>  
21 - <div class="recent-content-abstract">  
22 - <% children.each do |item| %>  
23 - <h2><%= link_to(item.title,item.url, :class => 'post-title')%></h2>  
24 - <span class="post-date"><%= show_date(item.published_at, true)%></span>  
25 - <div class="headline"><%=item.lead%></div>  
26 - <p class="highlighted-news-read-more"><%= link_to(_('Read more'), item.url) %></p>  
27 - <% end %>  
28 - </div>  
29 - <% else %>  
30 - <div class="recent-content-full">  
31 - <% children.each do |item| %>  
32 - <h2><%= link_to(item.title,item.url, :class => 'post-title')%></h2>  
33 - <span class="post-date"><%= show_date(item.published_at, true)%></span>  
34 - <div class="headline"><%=item.body%></div>  
35 - <p class="highlighted-news-read-more"><%= link_to(_('Read more'), item.url) %></p>  
36 - <% end %>  
37 - </div>  
38 - <% end %>  
39 - <%= link_to _('View All'), :profile => profile.identifier, :controller => 'content_viewer', :action => 'view_page', :page => block.root.path %>  
40 - </div>  
41 -<% else %>  
42 - <span class="alert-block">  
43 - <%= _('This is the recent content block. Please edit it to show the content you want.') %>  
44 - </span>  
45 -<% end %>