Commit 9f2ce2c2c31d51844f5c593847a17fe15750fc86
1 parent
d8556255
Exists in
master
and in
11 other branches
Proposal view refactor
Showing
3 changed files
with
72 additions
and
17 deletions
Show diff stats
... | ... | @@ -0,0 +1,20 @@ |
1 | +module ProposalsDiscussionPlugin::ProposalHelper | |
2 | + | |
3 | + def proposal_score(proposal) | |
4 | + return '' unless proposal.published? | |
5 | + normalized_score = proposal.normalized_score | |
6 | + pos = 26 * (normalized_score*4 - 1).round | |
7 | + content_tag 'span', ' ', :title => "#{normalized_score}", :style => "background-position-y: -#{pos}px" | |
8 | + end | |
9 | + | |
10 | + def proposal_locations(proposal) | |
11 | + proposal.locations.map do |location| | |
12 | + content_tag 'span', location.name, :class => "location" | |
13 | + end.join(', ') | |
14 | + end | |
15 | + | |
16 | + def proposal_tags(proposal) | |
17 | + proposal.tags.map { |t| link_to(t, :controller => 'profile', :profile => proposal.profile.identifier, :action => 'tags', :id => t.name ) }.join("\n") | |
18 | + end | |
19 | + | |
20 | +end | ... | ... |
... | ... | @@ -0,0 +1,44 @@ |
1 | +require_relative '../test_helper' | |
2 | + | |
3 | +class ProposalHelperTest < ActionView::TestCase | |
4 | + | |
5 | + def setup | |
6 | + @proposal = ProposalsDiscussionPlugin::Proposal.new(:name => 'test', :abstract => 'abstract') | |
7 | + end | |
8 | + | |
9 | + include ProposalsDiscussionPlugin::ProposalHelper | |
10 | + | |
11 | + attr_reader :proposal | |
12 | + | |
13 | + should 'display proposal score' do | |
14 | + proposal.expects(:normalized_score).returns(1) | |
15 | + assert proposal_score(proposal).present? | |
16 | + end | |
17 | + | |
18 | + should 'not display score for unpublished proposals' do | |
19 | + proposal.expects(:published?).returns(false) | |
20 | + assert proposal_score(proposal).blank? | |
21 | + end | |
22 | + | |
23 | + should 'display proposal locations' do | |
24 | + proposal.expects(:locations).returns([Region.new]) | |
25 | + assert proposal_locations(proposal).present? | |
26 | + end | |
27 | + | |
28 | + should 'return blank if a proposal has no locations' do | |
29 | + proposal.expects(:locations).returns([]) | |
30 | + assert proposal_locations(proposal).blank? | |
31 | + end | |
32 | + | |
33 | + should 'display proposal tags' do | |
34 | + proposal.expects(:tags).returns([ActsAsTaggableOn::Tag.new]) | |
35 | + proposal.expects(:profile).returns(fast_create(Profile)) | |
36 | + assert proposal_tags(proposal).present? | |
37 | + end | |
38 | + | |
39 | + should 'return blank if a proposal has no tags' do | |
40 | + proposal.expects(:tags).returns([]) | |
41 | + assert proposal_tags(proposal).blank? | |
42 | + end | |
43 | + | |
44 | +end | ... | ... |
views/content_viewer/_proposal_card.html.erb
1 | +<% extend ProposalsDiscussionPlugin::ProposalHelper %> | |
1 | 2 | <div class="proposal"> |
2 | 3 | <div class="author"> |
3 | 4 | <%= link_to_profile profile_image(proposal_card.author, :minor, :class => 'disable-zoom') + '<br/>' + proposal_card.author.short_name, proposal_card.author.identifier, :class => 'profile-link' %> |
... | ... | @@ -21,24 +22,14 @@ |
21 | 22 | <%= proposal_card.abstract %> |
22 | 23 | </div> |
23 | 24 | <div class="score"> |
24 | - <% if proposal_card.published? %> | |
25 | - <% normalized_score = proposal_card.normalized_score %> | |
26 | - <% pos = 26 * (normalized_score*4 - 1).round %> | |
27 | - <span title="<%= normalized_score %>" style="background-position-y: -<%= pos %>px"> </span> | |
28 | - <% end %> | |
25 | + <%= proposal_score(proposal_card) %> | |
26 | + </div> | |
27 | + <div class="locations"> | |
28 | + <%= proposal_locations(proposal_card) %> | |
29 | + </div> | |
30 | + <div class="tags" id="article-tags"> | |
31 | + <%= proposal_tags(proposal_card) %> | |
29 | 32 | </div> |
30 | - <% if proposal_card.locations.present? %> | |
31 | - <div class="locations"> | |
32 | - <% proposal_card.locations.each do |location| %> | |
33 | - <span class="location"><%= location.name %></span> | |
34 | - <% end %> | |
35 | - </div> | |
36 | - <% end %> | |
37 | - <% if !proposal_card.tags.empty? %> | |
38 | - <div class="tags" id="article-tags"> | |
39 | - <%= proposal_card.tags.map { |t| link_to(t, :controller => 'profile', :profile => @profile.identifier, :action => 'tags', :id => t.name ) }.join("\n") %> | |
40 | - </div> | |
41 | - <% end %> | |
42 | 33 | <div class="comments-count"> |
43 | 34 | <%= n_("%s comment", "%s comments", proposal_card.comments_count) % proposal_card.comments_count %> |
44 | 35 | </div> | ... | ... |