Commit 0b8db772dc24fa6e039018cd9f467dc94beed49c
Exists in
master
and in
29 other branches
Merge branch 'AI2892-display_content_order_attributes' of /mnt/ebs/repositories/…
…participa/noosfero into next
Showing
11 changed files
with
191 additions
and
54 deletions
Show diff stats
app/views/shared/_lead_and_body.rhtml
@@ -7,11 +7,18 @@ | @@ -7,11 +7,18 @@ | ||
7 | <% lead_id ||= 0%> | 7 | <% lead_id ||= 0%> |
8 | <% f ||= false%> | 8 | <% f ||= false%> |
9 | 9 | ||
10 | +<% if @article %> | ||
11 | + <% fields_for 'article[image_builder]', @article.image do |i| %> | ||
12 | + <%= file_field_or_thumbnail(_('Image:'), @article.image, i) %> | ||
13 | + <% end %> | ||
14 | +<% end %> | ||
15 | + | ||
10 | <br style="clear: both;"/> | 16 | <br style="clear: both;"/> |
11 | <%= button :add, _("Lead"), '#', :class => "lead-button", :article_id => "#article-lead-"+lead_id.to_s, :style => "margin-left: 0px;" %> | 17 | <%= button :add, _("Lead"), '#', :class => "lead-button", :article_id => "#article-lead-"+lead_id.to_s, :style => "margin-left: 0px;" %> |
12 | <em><%= _('Used when a short version of your text is needed.') %></em> | 18 | <em><%= _('Used when a short version of your text is needed.') %></em> |
13 | 19 | ||
14 | <div class='article-lead' id="article-lead-<%=lead_id.to_s%>"> | 20 | <div class='article-lead' id="article-lead-<%=lead_id.to_s%>"> |
21 | + | ||
15 | <% if f %> | 22 | <% if f %> |
16 | <%= labelled_form_field(_(abstract_label), f.text_area(abstract_method, :style => 'width: 98%; height: 200px;', :class => editor_type)) %> | 23 | <%= labelled_form_field(_(abstract_label), f.text_area(abstract_method, :style => 'width: 98%; height: 200px;', :class => editor_type)) %> |
17 | <% else %> | 24 | <% else %> |
plugins/display_content/README
@@ -33,7 +33,7 @@ As a Noosfero administrator user, go to administrator panel: | @@ -33,7 +33,7 @@ As a Noosfero administrator user, go to administrator panel: | ||
33 | DEVELOPMENT | 33 | DEVELOPMENT |
34 | =========== | 34 | =========== |
35 | 35 | ||
36 | -Noosfero uses jQuery 1.5.1 and the jsTree doesn't works fine with this jQuery version. | 36 | +Noosfero uses jQuery 1.5.1 and the jsTree doesn't works fine with this jQuery version. |
37 | Until Noosfero upgrade its JQuery version to a newer one is necessary to load jQuery 1.8.3 inside plugin and apply some changes in jsTree to avoid jQuery conflit. | 37 | Until Noosfero upgrade its JQuery version to a newer one is necessary to load jQuery 1.8.3 inside plugin and apply some changes in jsTree to avoid jQuery conflit. |
38 | 38 | ||
39 | Get the Display Content (Noosfero with Display Content Plugin) development repository: | 39 | Get the Display Content (Noosfero with Display Content Plugin) development repository: |
plugins/display_content/controllers/display_content_plugin_admin_controller.rb
@@ -4,6 +4,6 @@ class DisplayContentPluginAdminController < AdminController | @@ -4,6 +4,6 @@ class DisplayContentPluginAdminController < AdminController | ||
4 | 4 | ||
5 | append_view_path File.join(File.dirname(__FILE__) + '/../views') | 5 | append_view_path File.join(File.dirname(__FILE__) + '/../views') |
6 | 6 | ||
7 | - include DisplayContentPluginController | 7 | + include DisplayContentPluginController |
8 | 8 | ||
9 | end | 9 | end |
plugins/display_content/controllers/display_content_plugin_module.rb
@@ -18,10 +18,10 @@ module DisplayContentPluginController | @@ -18,10 +18,10 @@ module DisplayContentPluginController | ||
18 | node[:data] = article.title | 18 | node[:data] = article.title |
19 | node[:attr] = { 'node_id' => article.id, 'parent_id' => article.parent_id} | 19 | node[:attr] = { 'node_id' => article.id, 'parent_id' => article.parent_id} |
20 | if block.nodes.include?(article.id) | 20 | if block.nodes.include?(article.id) |
21 | - node[:attr].merge!('class' => 'jstree-checked') | 21 | + node[:attr].merge!('class' => 'jstree-checked') |
22 | elsif block.parent_nodes.include?(article.id) | 22 | elsif block.parent_nodes.include?(article.id) |
23 | node[:children] = get_node(block, article.children) | 23 | node[:children] = get_node(block, article.children) |
24 | - node[:attr].merge!('class' => 'jstree-undetermined') | 24 | + node[:attr].merge!('class' => 'jstree-undetermined') |
25 | end | 25 | end |
26 | node[:state] = 'closed' if Article.exists?(:parent_id => article.id) | 26 | node[:state] = 'closed' if Article.exists?(:parent_id => article.id) |
27 | nodes.push(node) | 27 | nodes.push(node) |
plugins/display_content/controllers/display_content_plugin_myprofile_controller.rb
@@ -4,6 +4,6 @@ class DisplayContentPluginMyprofileController < MyProfileController | @@ -4,6 +4,6 @@ class DisplayContentPluginMyprofileController < MyProfileController | ||
4 | 4 | ||
5 | append_view_path File.join(File.dirname(__FILE__) + '/../views') | 5 | append_view_path File.join(File.dirname(__FILE__) + '/../views') |
6 | 6 | ||
7 | - include DisplayContentPluginController | 7 | + include DisplayContentPluginController |
8 | 8 | ||
9 | end | 9 | end |
plugins/display_content/lib/display_content_block.rb
1 | class DisplayContentBlock < Block | 1 | class DisplayContentBlock < Block |
2 | 2 | ||
3 | + MONTHS = [ | ||
4 | + N_('January'), | ||
5 | + N_('February'), | ||
6 | + N_('March'), | ||
7 | + N_('April'), | ||
8 | + N_('May'), | ||
9 | + N_('June'), | ||
10 | + N_('July'), | ||
11 | + N_('August'), | ||
12 | + N_('September'), | ||
13 | + N_('October'), | ||
14 | + N_('November'), | ||
15 | + N_('December') | ||
16 | + ] | ||
17 | + | ||
3 | settings_items :nodes, :type => Array, :default => [] | 18 | settings_items :nodes, :type => Array, :default => [] |
4 | settings_items :parent_nodes, :type => Array, :default => [] | 19 | settings_items :parent_nodes, :type => Array, :default => [] |
5 | - settings_items :chosen_attributes, :type => Array, :default => ['title'] | 20 | + settings_items :sections, |
21 | + :type => Array, | ||
22 | + :default => [{:name => _('Publish date'), :checked => true}, | ||
23 | + {:name => _('Title'), :checked => true}, | ||
24 | + {:name => _('Abstract'), :checked => true}, | ||
25 | + {:name => _('Body'), :checked => false}, | ||
26 | + {:name => _('Image'), :checked => false}, | ||
27 | + {:name => _('Tags'), :checked => false}] | ||
6 | 28 | ||
7 | def self.description | 29 | def self.description |
8 | _('Display your contents') | 30 | _('Display your contents') |
@@ -33,20 +55,50 @@ class DisplayContentBlock < Block | @@ -33,20 +55,50 @@ class DisplayContentBlock < Block | ||
33 | 55 | ||
34 | def articles_of_parent(parent = nil) | 56 | def articles_of_parent(parent = nil) |
35 | return [] if self.holder.nil? | 57 | return [] if self.holder.nil? |
36 | - holder.articles.find(:all, :conditions => {:type => VALID_CONTENT, :parent_id => (parent.nil? ? nil : parent)}) | 58 | + holder.articles.find(:all, :conditions => {:type => VALID_CONTENT, :parent_id => (parent.nil? ? nil : parent)}) |
37 | end | 59 | end |
38 | 60 | ||
39 | include ActionController::UrlWriter | 61 | include ActionController::UrlWriter |
40 | def content(args={}) | 62 | def content(args={}) |
41 | docs = owner.articles.find(:all, :conditions => {:id => self.nodes}) | 63 | docs = owner.articles.find(:all, :conditions => {:id => self.nodes}) |
64 | + | ||
42 | block_title(title) + | 65 | block_title(title) + |
43 | - content_tag('ul', docs.map {|item| | ||
44 | - content_tag('li', | ||
45 | - (display_attribute?('title') ? content_tag('div', link_to(h(item.title), item.url), :class => 'title') : '') + | ||
46 | - (display_attribute?('abstract') ? content_tag('div', item.abstract ,:class => 'lead') : '') + | ||
47 | - (display_attribute?('body') ? content_tag('div', item.body ,:class => 'body') : '') | ||
48 | - ) | ||
49 | - }.join("\n")) | 66 | + content_tag('ul', docs.map {|item| |
67 | + | ||
68 | + content_sections = '' | ||
69 | + read_more_section = '' | ||
70 | + tags_section = '' | ||
71 | + | ||
72 | + sections.select { |section| | ||
73 | + case section[:name] | ||
74 | + when 'Publish date' | ||
75 | + content_sections += (display_section?(section) ? (content_tag('div', show_date(item.published_at, false), :class => 'published-at') ) : '') | ||
76 | + when 'Title' | ||
77 | + content_sections += (display_section?(section) ? (content_tag('div', link_to(h(item.title), item.url), :class => 'title') ) : '') | ||
78 | + when 'Abstract' | ||
79 | + content_sections += (display_section?(section) ? (content_tag('div', item.abstract , :class => 'lead')) : '' ) | ||
80 | + if display_section?(section) | ||
81 | + read_more_section = content_tag('div', link_to(_('Read more'), item.url), :class => 'read_more') | ||
82 | + end | ||
83 | + when 'Body' | ||
84 | + content_sections += (display_section?(section) ? (content_tag('div', item.body ,:class => 'body')) : '' ) | ||
85 | + when 'Image' | ||
86 | + image_section = image_tag item.image.public_filename if item.image | ||
87 | + if !image_section.blank? | ||
88 | + content_sections += (display_section?(section) ? (content_tag('div', link_to( image_section, item.url ) ,:class => 'image')) : '' ) | ||
89 | + end | ||
90 | + when 'Tags' | ||
91 | + if !item.tags.empty? | ||
92 | + tags_section = item.tags.map { |t| content_tag('span', t.name) }.join("") | ||
93 | + content_sections += (display_section?(section) ? (content_tag('div', tags_section, :class => 'tags')) : '') | ||
94 | + end | ||
95 | + end | ||
96 | + } | ||
97 | + | ||
98 | + content_sections += read_more_section if !read_more_section.blank? | ||
99 | + | ||
100 | + content_tag('li', content_sections) | ||
101 | + }.join(" ")) | ||
50 | 102 | ||
51 | end | 103 | end |
52 | 104 | ||
@@ -61,15 +113,15 @@ class DisplayContentBlock < Block | @@ -61,15 +113,15 @@ class DisplayContentBlock < Block | ||
61 | params | 113 | params |
62 | end | 114 | end |
63 | 115 | ||
64 | - def display_attribute?(attr) | ||
65 | - chosen_attributes.include?(attr) | 116 | + def display_section?(section) |
117 | + section[:checked] | ||
66 | end | 118 | end |
67 | 119 | ||
68 | protected | 120 | protected |
69 | 121 | ||
70 | def holder | 122 | def holder |
71 | return nil if self.box.nil? || self.box.owner.nil? | 123 | return nil if self.box.nil? || self.box.owner.nil? |
72 | - if self.box.owner.kind_of?(Environment) | 124 | + if self.box.owner.kind_of?(Environment) |
73 | return nil if self.box.owner.portal_community.nil? | 125 | return nil if self.box.owner.portal_community.nil? |
74 | self.box.owner.portal_community | 126 | self.box.owner.portal_community |
75 | else | 127 | else |
@@ -87,4 +139,20 @@ class DisplayContentBlock < Block | @@ -87,4 +139,20 @@ class DisplayContentBlock < Block | ||
87 | { :profile => [:article], :environment => [:article] } | 139 | { :profile => [:article], :environment => [:article] } |
88 | end | 140 | end |
89 | 141 | ||
142 | + def show_date(date, use_numbers = false, year=true) | ||
143 | + if date && use_numbers | ||
144 | + date_format = year ? _('%{month}/%{day}/%{year}') : _('%{month}/%{day}') | ||
145 | + date_format % { :day => date.day, :month => date.month, :year => date.year } | ||
146 | + elsif date | ||
147 | + date_format = year ? _('%{month_name} %{day}, %{year}') : _('%{month_name} %{day}') | ||
148 | + date_format % { :day => date.day, :month_name => month_name(date.month), :year => date.year } | ||
149 | + else | ||
150 | + '' | ||
151 | + end | ||
152 | + end | ||
153 | + | ||
154 | + def month_name(n) | ||
155 | + _(MONTHS[n-1]) | ||
156 | + end | ||
157 | + | ||
90 | end | 158 | end |
plugins/display_content/lib/display_content_plugin.rb
plugins/display_content/public/style.css
1 | -#display_content_plugin ul { | 1 | +#display_content_plugin .sections { |
2 | + width: auto; | ||
3 | +} | ||
4 | + | ||
5 | +#display_content_plugin .sections td { | ||
6 | + padding: 2px; | ||
7 | +} | ||
8 | + | ||
9 | +.block.display-content-block ul { | ||
2 | list-style: none; | 10 | list-style: none; |
11 | + padding: 0px; | ||
12 | +} | ||
13 | + | ||
14 | +.block.display-content-block li { | ||
15 | + margin: 5px; | ||
16 | +} | ||
17 | + | ||
18 | +.block.display-content-block .published-at, | ||
19 | +.block.display-content-block .title, | ||
20 | +.block.display-content-block .lead, | ||
21 | +.block.display-content-block .body, | ||
22 | +.block.display-content-block .image, | ||
23 | +.block.display-content-block .read_more, | ||
24 | +.block.display-content-block .tags { | ||
25 | + margin: 2px 0px 2px 0px; | ||
26 | +} | ||
27 | + | ||
28 | +.block.display-content-block .tags span { | ||
29 | + margin-right: 3px; | ||
3 | } | 30 | } |
4 | 31 | ||
5 | -#display_content_plugin .display_attributes li{ | ||
6 | - display: inline; | 32 | +.block.display-content-block .tags a { |
33 | + text-decoration: none; | ||
34 | + -webkit-border-radius: 3px; | ||
35 | + background-color: #BBB; | ||
36 | + color: #FFF; | ||
37 | + padding: 2px; | ||
7 | } | 38 | } |
plugins/display_content/test/functional/display_content_plugin_admin_controller_test.rb
@@ -19,7 +19,7 @@ class DisplayContentPluginAdminControllerTest < ActionController::TestCase | @@ -19,7 +19,7 @@ class DisplayContentPluginAdminControllerTest < ActionController::TestCase | ||
19 | @environment.enabled_plugins = ['DisplayContentPlugin'] | 19 | @environment.enabled_plugins = ['DisplayContentPlugin'] |
20 | @environment.portal_community = fast_create(Community, :name => 'my test profile', :identifier => 'mytestcommunity') | 20 | @environment.portal_community = fast_create(Community, :name => 'my test profile', :identifier => 'mytestcommunity') |
21 | @environment.save! | 21 | @environment.save! |
22 | - | 22 | + |
23 | box = Box.new(:owner => @environment, :position => 1) | 23 | box = Box.new(:owner => @environment, :position => 1) |
24 | box.save | 24 | box.save |
25 | 25 |
plugins/display_content/test/unit/display_content_block_test.rb
@@ -515,7 +515,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -515,7 +515,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
515 | Article.delete_all | 515 | Article.delete_all |
516 | a1 = fast_create(invalid_article, :name => 'test article 1', :profile_id => profile.id) | 516 | a1 = fast_create(invalid_article, :name => 'test article 1', :profile_id => profile.id) |
517 | a2 = fast_create(VALID_KIND_OF_ARTICLE.first, :name => 'test article 2', :profile_id => profile.id) | 517 | a2 = fast_create(VALID_KIND_OF_ARTICLE.first, :name => 'test article 2', :profile_id => profile.id) |
518 | - | 518 | + |
519 | block = DisplayContentBlock.new | 519 | block = DisplayContentBlock.new |
520 | box = mock() | 520 | box = mock() |
521 | box.stubs(:owner).returns(profile) | 521 | box.stubs(:owner).returns(profile) |
@@ -523,7 +523,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -523,7 +523,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
523 | assert_equal [], [a2] - block.articles_of_parent | 523 | assert_equal [], [a2] - block.articles_of_parent |
524 | assert_equal [], block.articles_of_parent - [a2] | 524 | assert_equal [], block.articles_of_parent - [a2] |
525 | end | 525 | end |
526 | - | 526 | + |
527 | end | 527 | end |
528 | 528 | ||
529 | VALID_KIND_OF_ARTICLE.map do |valid_article| | 529 | VALID_KIND_OF_ARTICLE.map do |valid_article| |
@@ -533,14 +533,14 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -533,14 +533,14 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
533 | Article.delete_all | 533 | Article.delete_all |
534 | a1 = fast_create(valid_article, :name => 'test article 1', :profile_id => profile.id) | 534 | a1 = fast_create(valid_article, :name => 'test article 1', :profile_id => profile.id) |
535 | a2 = fast_create(INVALID_KIND_OF_ARTICLE.first, :name => 'test article 2', :profile_id => profile.id) | 535 | a2 = fast_create(INVALID_KIND_OF_ARTICLE.first, :name => 'test article 2', :profile_id => profile.id) |
536 | - | 536 | + |
537 | block = DisplayContentBlock.new | 537 | block = DisplayContentBlock.new |
538 | box = mock() | 538 | box = mock() |
539 | box.stubs(:owner).returns(profile) | 539 | box.stubs(:owner).returns(profile) |
540 | block.stubs(:box).returns(box) | 540 | block.stubs(:box).returns(box) |
541 | assert_equal [a1], block.articles_of_parent | 541 | assert_equal [a1], block.articles_of_parent |
542 | end | 542 | end |
543 | - | 543 | + |
544 | end | 544 | end |
545 | 545 | ||
546 | should 'list links for all articles title defined in nodes' do | 546 | should 'list links for all articles title defined in nodes' do |
@@ -554,7 +554,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -554,7 +554,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
554 | box = mock() | 554 | box = mock() |
555 | block.stubs(:box).returns(box) | 555 | block.stubs(:box).returns(box) |
556 | box.stubs(:owner).returns(profile) | 556 | box.stubs(:owner).returns(profile) |
557 | - | 557 | + |
558 | assert_match /.*<a.*>#{a1.title}<\/a>/, block.content | 558 | assert_match /.*<a.*>#{a1.title}<\/a>/, block.content |
559 | assert_match /.*<a.*>#{a2.title}<\/a>/, block.content | 559 | assert_match /.*<a.*>#{a2.title}<\/a>/, block.content |
560 | end | 560 | end |
@@ -566,12 +566,12 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -566,12 +566,12 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
566 | a2 = fast_create(TextArticle, :name => 'test article 2', :profile_id => profile.id, :abstract => 'abstract article 2') | 566 | a2 = fast_create(TextArticle, :name => 'test article 2', :profile_id => profile.id, :abstract => 'abstract article 2') |
567 | 567 | ||
568 | block = DisplayContentBlock.new | 568 | block = DisplayContentBlock.new |
569 | - block.chosen_attributes = ['abstract'] | 569 | + block.sections = [{:name => 'Abstract', :checked => true}] |
570 | block.nodes = [a1.id, a2.id] | 570 | block.nodes = [a1.id, a2.id] |
571 | box = mock() | 571 | box = mock() |
572 | block.stubs(:box).returns(box) | 572 | block.stubs(:box).returns(box) |
573 | box.stubs(:owner).returns(profile) | 573 | box.stubs(:owner).returns(profile) |
574 | - | 574 | + |
575 | assert_match /<div class="lead">#{a1.lead}<\/div>/, block.content | 575 | assert_match /<div class="lead">#{a1.lead}<\/div>/, block.content |
576 | assert_match /<div class="lead">#{a2.lead}<\/div>/, block.content | 576 | assert_match /<div class="lead">#{a2.lead}<\/div>/, block.content |
577 | end | 577 | end |
@@ -585,7 +585,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -585,7 +585,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
585 | box = mock() | 585 | box = mock() |
586 | block.stubs(:box).returns(box) | 586 | block.stubs(:box).returns(box) |
587 | box.stubs(:owner).returns(profile) | 587 | box.stubs(:owner).returns(profile) |
588 | - | 588 | + |
589 | Article.delete_all | 589 | Article.delete_all |
590 | assert_match /<ul><\/ul>/, block.content | 590 | assert_match /<ul><\/ul>/, block.content |
591 | end | 591 | end |
@@ -595,7 +595,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -595,7 +595,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
595 | block = DisplayContentBlock.new | 595 | block = DisplayContentBlock.new |
596 | block.box = profile.boxes.first | 596 | block.box = profile.boxes.first |
597 | block.save! | 597 | block.save! |
598 | - | 598 | + |
599 | params = {:block_id => block.id} | 599 | params = {:block_id => block.id} |
600 | params[:controller] = "display_content_plugin_myprofile" | 600 | params[:controller] = "display_content_plugin_myprofile" |
601 | params[:profile] = profile.identifier | 601 | params[:profile] = profile.identifier |
@@ -607,7 +607,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -607,7 +607,7 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
607 | block = DisplayContentBlock.new | 607 | block = DisplayContentBlock.new |
608 | block.box = environment.boxes.first | 608 | block.box = environment.boxes.first |
609 | block.save! | 609 | block.save! |
610 | - | 610 | + |
611 | params = {:block_id => block.id} | 611 | params = {:block_id => block.id} |
612 | params[:controller] = "display_content_plugin_admin" | 612 | params[:controller] = "display_content_plugin_admin" |
613 | assert_equal params, block.url_params | 613 | assert_equal params, block.url_params |
@@ -619,11 +619,11 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -619,11 +619,11 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
619 | 619 | ||
620 | block = DisplayContentBlock.new | 620 | block = DisplayContentBlock.new |
621 | block.nodes = [a.id] | 621 | block.nodes = [a.id] |
622 | - block.chosen_attributes = ['title'] | 622 | + block.sections = [{:name => 'Title', :checked => true}] |
623 | box = mock() | 623 | box = mock() |
624 | block.stubs(:box).returns(box) | 624 | block.stubs(:box).returns(box) |
625 | box.stubs(:owner).returns(profile) | 625 | box.stubs(:owner).returns(profile) |
626 | - | 626 | + |
627 | assert_match /.*<a.*>#{a.title}<\/a>/, block.content | 627 | assert_match /.*<a.*>#{a.title}<\/a>/, block.content |
628 | end | 628 | end |
629 | 629 | ||
@@ -633,11 +633,11 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -633,11 +633,11 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
633 | 633 | ||
634 | block = DisplayContentBlock.new | 634 | block = DisplayContentBlock.new |
635 | block.nodes = [a.id] | 635 | block.nodes = [a.id] |
636 | - block.chosen_attributes = ['abstract'] | 636 | + block.sections = [{:name => 'Abstract', :checked => true}] |
637 | box = mock() | 637 | box = mock() |
638 | block.stubs(:box).returns(box) | 638 | block.stubs(:box).returns(box) |
639 | box.stubs(:owner).returns(profile) | 639 | box.stubs(:owner).returns(profile) |
640 | - | 640 | + |
641 | assert_match /#{a.abstract}/, block.content | 641 | assert_match /#{a.abstract}/, block.content |
642 | end | 642 | end |
643 | 643 | ||
@@ -647,11 +647,11 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -647,11 +647,11 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
647 | 647 | ||
648 | block = DisplayContentBlock.new | 648 | block = DisplayContentBlock.new |
649 | block.nodes = [a.id] | 649 | block.nodes = [a.id] |
650 | - block.chosen_attributes = ['body'] | 650 | + block.sections = [{:name => 'Body', :checked => true}] |
651 | box = mock() | 651 | box = mock() |
652 | block.stubs(:box).returns(box) | 652 | block.stubs(:box).returns(box) |
653 | box.stubs(:owner).returns(profile) | 653 | box.stubs(:owner).returns(profile) |
654 | - | 654 | + |
655 | assert_match /#{a.body}/, block.content | 655 | assert_match /#{a.body}/, block.content |
656 | end | 656 | end |
657 | 657 | ||
@@ -659,17 +659,41 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | @@ -659,17 +659,41 @@ class DisplayContentBlockTest < ActiveSupport::TestCase | ||
659 | profile = create_user('testuser').person | 659 | profile = create_user('testuser').person |
660 | 660 | ||
661 | block = DisplayContentBlock.new | 661 | block = DisplayContentBlock.new |
662 | - | ||
663 | - assert block.display_attribute?('title') | 662 | + |
663 | + assert block.display_section?({:name => 'Title', :checked => true}) | ||
664 | end | 664 | end |
665 | 665 | ||
666 | should 'display_attribute be true if the attribute was chosen' do | 666 | should 'display_attribute be true if the attribute was chosen' do |
667 | profile = create_user('testuser').person | 667 | profile = create_user('testuser').person |
668 | 668 | ||
669 | block = DisplayContentBlock.new | 669 | block = DisplayContentBlock.new |
670 | - block.chosen_attributes = ['body'] | ||
671 | - | ||
672 | - assert block.display_attribute?('body') | 670 | + |
671 | + block.sections = [{:name => 'Body', :checked => true}] | ||
672 | + section = block.sections.first | ||
673 | + | ||
674 | + assert block.display_section?(section) | ||
675 | + end | ||
676 | + | ||
677 | + should 'display_attribute be true for publish date by default' do | ||
678 | + profile = create_user('testuser').person | ||
679 | + | ||
680 | + block = DisplayContentBlock.new | ||
681 | + | ||
682 | + assert block.display_section?({:name => 'Publish date', :checked => true}) | ||
683 | + end | ||
684 | + | ||
685 | + should 'show publishd date if defined by user' do | ||
686 | + profile = create_user('testuser').person | ||
687 | + a = fast_create(TextArticle, :name => 'test article 1', :profile_id => profile.id, :body => 'some body') | ||
688 | + | ||
689 | + block = DisplayContentBlock.new | ||
690 | + block.nodes = [a.id] | ||
691 | + block.sections = [{:name => 'Publish date', :checked => true}] | ||
692 | + box = mock() | ||
693 | + block.stubs(:box).returns(box) | ||
694 | + box.stubs(:owner).returns(profile) | ||
695 | + | ||
696 | + assert_match /#{a.published_at}/, block.content | ||
673 | end | 697 | end |
674 | 698 | ||
675 | end | 699 | end |
plugins/display_content/views/box_organizer/_display_content_block.rhtml
1 | <div id="display_content_plugin"> | 1 | <div id="display_content_plugin"> |
2 | 2 | ||
3 | -<h3> <%= _('Choose which attributes should be displayed:') %> </h3> | ||
4 | -<ul class='display_attributes'> | ||
5 | - <li> <%= _('Title: ')%> <%= check_box_tag "block[chosen_attributes][]", 'title', @block.display_attribute?('title') %> </li> | ||
6 | - <li> <%= _('Abstract: ')%> <%= check_box_tag "block[chosen_attributes][]", 'abstract', @block.display_attribute?('abstract') %> </li> | ||
7 | - <li> <%= _('Body: ')%> <%= check_box_tag "block[chosen_attributes][]", 'body', @block.display_attribute?('body') %> </li> | ||
8 | -</ul> | 3 | +<h3> <%= _('Choose which attributes should be displayed and drag to reorder them:') %> </h3> |
4 | + | ||
5 | +<table class="sections"> | ||
6 | + <tbody id="sortable"> | ||
7 | + <% for section in @block.sections do %> | ||
8 | + <tr> | ||
9 | + <td><%= hidden_field_tag 'block[sections][][name]', section[:name] %> <%= check_box_tag 'block[sections][][checked]', section[:name], section[:checked] %></td> | ||
10 | + <td><%= section[:name]%></td> | ||
11 | + </tr> | ||
12 | + <% end %> | ||
13 | + </tbody> | ||
14 | +</table> | ||
9 | 15 | ||
10 | <h3> <%= _('Choose which content should be displayed:') %> </h3> | 16 | <h3> <%= _('Choose which content should be displayed:') %> </h3> |
11 | <div id="display_content"> | 17 | <div id="display_content"> |
@@ -16,20 +22,22 @@ | @@ -16,20 +22,22 @@ | ||
16 | jQuery_1_8_3("#display_content").jstree({ | 22 | jQuery_1_8_3("#display_content").jstree({ |
17 | plugins : ["themes","json_data", "checkbox"], | 23 | plugins : ["themes","json_data", "checkbox"], |
18 | checkbox : { | 24 | checkbox : { |
19 | - real_checkboxes : true, | ||
20 | - real_checkboxes_names : function (n) { return [("block[checked_nodes[" + n.attr('node_id') + "]]"), 1]; } | 25 | + real_checkboxes : true, |
26 | + real_checkboxes_names : function (n) { return [("block[checked_nodes[" + n.attr('node_id') + "]]"), 1]; } | ||
21 | }, | 27 | }, |
22 | themes : {"theme" : "classic", "icons" : true, "url": "/plugins/display_content/javascripts/jstree/themes/classic/style.css"}, | 28 | themes : {"theme" : "classic", "icons" : true, "url": "/plugins/display_content/javascripts/jstree/themes/classic/style.css"}, |
23 | json_data : { | 29 | json_data : { |
24 | - ajax : { | ||
25 | - url : '<%= url_for @block.url_params %>', | 30 | + ajax : { |
31 | + url : '<%= url_for @block.url_params %>', | ||
26 | async: true, | 32 | async: true, |
27 | - data : function (m) { | 33 | + data : function (m) { |
28 | return m.attr ? {"id" : m.attr("node_id")} : {}; | 34 | return m.attr ? {"id" : m.attr("node_id")} : {}; |
29 | } | 35 | } |
30 | } | 36 | } |
31 | } | 37 | } |
32 | }); | 38 | }); |
33 | 39 | ||
40 | +jQuery( "#sortable" ).sortable(); | ||
41 | + | ||
34 | </script> | 42 | </script> |
35 | </div> | 43 | </div> |