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 @@ | @@ -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 @@ | @@ -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 | <div class="proposal"> | 2 | <div class="proposal"> |
2 | <div class="author"> | 3 | <div class="author"> |
3 | <%= 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' %> | 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,24 +22,14 @@ | ||
21 | <%= proposal_card.abstract %> | 22 | <%= proposal_card.abstract %> |
22 | </div> | 23 | </div> |
23 | <div class="score"> | 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 | </div> | 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 | <div class="comments-count"> | 33 | <div class="comments-count"> |
43 | <%= n_("%s comment", "%s comments", proposal_card.comments_count) % proposal_card.comments_count %> | 34 | <%= n_("%s comment", "%s comments", proposal_card.comments_count) % proposal_card.comments_count %> |
44 | </div> | 35 | </div> |