Commit ac6da245d710953fe1f015f29600b9afc8182194

Authored by Victor Costa
1 parent 6ec69965

Organize type selection at context content block

Show main types first and render a link to display more types at context content block edition
plugins/context_content/lib/context_content_block.rb
... ... @@ -18,7 +18,21 @@ class ContextContentBlock < Block
18 18 end
19 19  
20 20 def available_content_types
21   - @available_content_types ||= [TinyMceArticle, TextileArticle, RawHTMLArticle, Event, Folder, Blog, UploadedFile, Forum, Gallery, RssFeed] + plugins.dispatch(:content_types)
  21 + @available_content_types ||= [UploadedFile, Event, TinyMceArticle, TextileArticle, RawHTMLArticle, Folder, Blog, Forum, Gallery, RssFeed] + plugins.dispatch(:content_types)
  22 + checked_types = types.map {|t| t.constantize}
  23 + checked_types + (@available_content_types - checked_types)
  24 + end
  25 +
  26 + def first_content_types
  27 + available_content_types.first(first_types_count)
  28 + end
  29 +
  30 + def more_content_types
  31 + available_content_types.drop(first_types_count)
  32 + end
  33 +
  34 + def first_types_count
  35 + [2, types.length].max
22 36 end
23 37  
24 38 def types=(new_types)
... ...
plugins/context_content/test/unit/context_content_block_test.rb
... ... @@ -84,8 +84,37 @@ class ContextContentBlockTest < ActiveSupport::TestCase
84 84 assert_equal nil, @block.contents(folder)
85 85 end
86 86  
  87 + should 'return available content types with checked types first' do
  88 + @block.types = ['TinyMceArticle', 'Folder']
  89 + assert_equal [TinyMceArticle, Folder, UploadedFile, Event, TextileArticle, RawHTMLArticle, Blog, Forum, Gallery, RssFeed], @block.available_content_types
  90 + end
  91 +
87 92 should 'return available content types' do
88   - assert_equal [TinyMceArticle, TextileArticle, RawHTMLArticle, Event, Folder, Blog, UploadedFile, Forum, Gallery, RssFeed], @block.available_content_types
  93 + @block.types = []
  94 + assert_equal [UploadedFile, Event, TinyMceArticle, TextileArticle, RawHTMLArticle, Folder, Blog, Forum, Gallery, RssFeed], @block.available_content_types
  95 + end
  96 +
  97 + should 'return first 2 content types' do
  98 + assert_equal 2, @block.first_content_types.length
  99 + end
  100 +
  101 + should 'return all but first 2 content types' do
  102 + assert_equal @block.available_content_types.length - 2, @block.more_content_types.length
  103 + end
  104 +
  105 + should 'return 2 as default value for first_types_count' do
  106 + assert_equal 2, @block.first_types_count
  107 + end
  108 +
  109 + should 'return types length if it has more than 2 selected types' do
  110 + @block.types = ['UploadedFile', 'Event', 'Folder']
  111 + assert_equal 3, @block.first_types_count
  112 + end
  113 +
  114 + should 'return selected types at first_content_types' do
  115 + @block.types = ['UploadedFile', 'Event', 'Folder']
  116 + assert_equal [UploadedFile, Event, Folder], @block.first_content_types
  117 + assert_equal @block.available_content_types - [UploadedFile, Event, Folder], @block.more_content_types
89 118 end
90 119  
91 120 should 'include plugin content at available content types' do
... ... @@ -93,7 +122,8 @@ class ContextContentBlockTest < ActiveSupport::TestCase
93 122 class SomePlugin; def content_types; SomePluginContent end end
94 123 Noosfero::Plugin::Manager.any_instance.stubs(:enabled_plugins).returns([SomePlugin.new])
95 124  
96   - assert_equal [TinyMceArticle, TextileArticle, RawHTMLArticle, Event, Folder, Blog, UploadedFile, Forum, Gallery, RssFeed, SomePluginContent], @block.available_content_types
  125 + @block.types = []
  126 + assert_equal [UploadedFile, Event, TinyMceArticle, TextileArticle, RawHTMLArticle, Folder, Blog, Forum, Gallery, RssFeed, SomePluginContent], @block.available_content_types
97 127 end
98 128  
99 129 should 'display thumbnail for image content' do
... ...
plugins/context_content/views/box_organizer/_context_content_block.rhtml
... ... @@ -4,8 +4,20 @@
4 4 <%= labelled_form_field check_box(:block, :show_image) + _('Show content image'), '' %>
5 5 <%= labelled_form_field check_box(:block, :show_parent_content) + _('Show parent content when children is empty'), '' %>
6 6  
7   - <p>Display content types:</p>
8   - <% @block.available_content_types.each do |type| %>
9   - <%= labelled_form_field check_box(:block, 'types', {:multiple => true}, type.name, nil) + _(type.short_description), '' %>
10   - <% end %>
  7 + <br/>
  8 + <%= label :block, :types, _('Display content types:'), :class => 'formlabel' %>
  9 + <div class="content_types">
  10 + <% @block.first_content_types.each do |type| %>
  11 + <%= labelled_form_field check_box(:block, 'types', {:multiple => true}, type.name, nil) + _(type.short_description), '' %>
  12 + <% end %>
  13 + <% if !@block.more_content_types.empty? %>
  14 + <a href="#" onclick="jQuery('.content_types .more').toggle(); return false;"><%= _('more') %></a>
  15 + <% end %>
  16 + <div class="more" style="display: none">
  17 + <% @block.more_content_types.each do |type| %>
  18 + <%= labelled_form_field check_box(:block, 'types', {:multiple => true}, type.name, nil) + _(type.short_description), '' %>
  19 + <% end %>
  20 + </div>
  21 + </div>
  22 + <br/>
11 23 </div>
... ...