Commit 8eba02a990c0ea29e9bc8b86aec54c0a0cee83d8

Authored by Victor Costa
1 parent e8d4ea47

proposals_discussion: improve proposals list

public/images/score.png

1.61 KB | W: | H:

1.65 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
public/style.css
  1 +.proposals_list .proposal .abstract {
  2 + color: rgb(160, 160, 160);
  3 + margin-bottom: 15px;
  4 + float: left;
  5 +}
  6 +.proposals_list .proposal .comments-count {
  7 + clear: both;
  8 + float: right;
  9 + color: rgb(162, 162, 162);
  10 + font-size: 10px;
  11 +}
  12 +.proposals_list .proposal .tags {
  13 + float: left;
  14 + clear: both;
  15 +}
  16 +.proposal .author {
  17 + display: table-cell;
  18 + font-size: 10px;
  19 + margin-right: 10px;
  20 +}
  21 +#content #article .proposal .author .profile-link img {
  22 + max-width: 70%;
  23 +}
  24 +
1 25 .private-proposals .proposal {
2 26 background: url(/images/hachure.png);
3 27 opacity: 0.5;
... ... @@ -6,18 +30,23 @@
6 30 }
7 31  
8 32 .proposal {
9   - width: 100%;
10   - min-width: 272px;
11 33 vertical-align: top;
12   - margin: 12px 13px 12px 0;
  34 + margin: 15px 0;
  35 + background-color: rgb(236, 236, 236);
  36 + border-radius: 5px;
  37 + padding: 10px;
13 38 }
14 39  
  40 +.article-body-proposals-discussion-plugin_discussion .new-proposal {
  41 + clear: both;
  42 + margin: 20px 0;
  43 +}
15 44 .article-body-proposals-discussion-plugin_discussion .actions,
16 45 .article-body-proposals-discussion-plugin_topic .actions {
17 46 margin: 10px 0 25px 0;
18 47 }
19 48  
20   -.proposal .content, .proposal .score, .proposal .topic {
  49 +.proposal .content, .proposal .topic {
21 50 display: inline-block;
22 51 border-color: rgb(201, 201, 201);
23 52 padding: 5px;
... ... @@ -32,6 +61,7 @@
32 61 .proposal .score {
33 62 width: 5%;
34 63 text-align: center;
  64 + float: right;
35 65 }
36 66 .proposal .score span {
37 67 background: url(/plugins/proposals_discussion/images/score.png) no-repeat;
... ... @@ -41,19 +71,20 @@
41 71 position: relative;
42 72 }
43 73  
44   -.proposal .content:hover, .proposal .topic:hover {
45   - background: rgb(230, 230, 230);
46   -}
47   -
48 74 .proposal .title {
49 75 font-weight: bold;
50   - font-size: 12px;
  76 + font-size: 14px;
  77 + background-color: rgb(136, 136, 136);
  78 + padding: 9px;
  79 + border-radius: 5px;
51 80 }
52 81  
53 82 #article .proposal a:visited, #article .proposal a {
54   - color: rgb(70, 70, 70);
55 83 text-decoration: none;
  84 +}
  85 +#article .proposal .title a:visited, #article .proposal .title a {
56 86 width: 100%;
  87 + color: rgb(240, 240, 240);
57 88 display: inline-block;
58 89 }
59 90 #article .proposal .private.actions a:visited, #article .proposal .private.actions a {
... ... @@ -61,7 +92,8 @@
61 92 }
62 93  
63 94 .proposal .content {
64   - width: 84%;
  95 + width: 100%;
  96 + display: table-cell;
65 97 color: rgb(83, 83, 83);
66 98 vertical-align: top;
67 99 position: relative;
... ... @@ -98,6 +130,7 @@ form .proposals-discussion-plugin .body textarea {
98 130 }
99 131  
100 132 .proposals_list .filters {
  133 + clear: both;
101 134 float: right;
102 135 margin-top: 4px;
103 136 }
... ... @@ -210,7 +243,8 @@ form .proposals-discussion-plugin .body textarea {
210 243 min-height: 50px;
211 244 }
212 245  
213   -.article-body-proposals-discussion-plugin_topic .graph {
  246 +.article-body-proposals-discussion-plugin_topic .statistics .graph,
  247 +.article-body-proposals-discussion-plugin_discussion .statistics .graph {
214 248 float: left;
215 249 }
216 250 .article-body-proposals-discussion-plugin_topic .graph #proposals-time,
... ...
test/functional/proposals_discussion_plugin_public_controller_test.rb
... ... @@ -3,21 +3,22 @@ require File.dirname(__FILE__) + '/../test_helper'
3 3 class ProposalsDiscussionPluginPublicControllerTest < ActionController::TestCase
4 4  
5 5 def setup
  6 + @person = fast_create(Person)
6 7 @profile = fast_create(Community)
7 8 @discussion = ProposalsDiscussionPlugin::Discussion.create!(:profile => @profile, :allow_topics => true, :name => 'discussion')
8 9 @topic = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => @discussion.id, :profile_id => @profile.id)
9 10 end
10 11  
11   - attr_reader :profile, :discussion, :topic
  12 + attr_reader :profile, :discussion, :topic, :person
12 13  
13 14 should 'load proposals' do
14   - proposals = 3.times.map { fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal title', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id)}
  15 + proposals = 3.times.map { fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal title', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :author_id => person.id)}
15 16 get :load_proposals, :profile => profile.identifier, :holder_id => topic.id
16 17 assert_equivalent proposals, assigns(:proposals)
17 18 end
18 19  
19 20 should 'add link to next page' do
20   - proposal = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal title', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id)
  21 + proposal = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal title', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :author_id => person.id)
21 22 get :load_proposals, :profile => profile.identifier, :holder_id => topic.id
22 23 assert_match /href=.*page=2/, response.body
23 24 end
... ... @@ -28,17 +29,17 @@ class ProposalsDiscussionPluginPublicControllerTest &lt; ActionController::TestCase
28 29 end
29 30  
30 31 should 'load proposals with alphabetical order' do
31   - proposal1 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'z proposal', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id)
32   - proposal2 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'abc proposal', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id)
33   - proposal3 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'abd proposal', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id)
  32 + proposal1 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'z proposal', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :author_id => person.id)
  33 + proposal2 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'abc proposal', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :author_id => person.id)
  34 + proposal3 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'abd proposal', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :author_id => person.id)
34 35 get :load_proposals, :profile => profile.identifier, :holder_id => topic.id, :order => 'alphabetical'
35 36 assert_equal [proposal2, proposal3, proposal1], assigns(:proposals)
36 37 end
37 38  
38 39 should 'load proposals with most commented order' do
39   - proposal1 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal1', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id)
40   - proposal2 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal2', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id)
41   - proposal3 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal3', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id)
  40 + proposal1 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal1', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :author_id => person.id)
  41 + proposal2 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal2', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :author_id => person.id)
  42 + proposal3 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal3', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :author_id => person.id)
42 43  
43 44 author = fast_create(Person)
44 45 Comment.create!(:source => proposal2, :body => 'text', :author => author)
... ... @@ -50,9 +51,9 @@ class ProposalsDiscussionPluginPublicControllerTest &lt; ActionController::TestCase
50 51 end
51 52  
52 53 should 'load proposals with most recent order' do
53   - proposal1 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'z', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :created_at => Date.today - 2.day)
54   - proposal2 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'b', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :created_at => Date.today - 1.day)
55   - proposal3 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'k', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :created_at => Date.today)
  54 + proposal1 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'z', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :created_at => Date.today - 2.day, :author_id => person.id)
  55 + proposal2 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'b', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :created_at => Date.today - 1.day, :author_id => person.id)
  56 + proposal3 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'k', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :created_at => Date.today, :author_id => person.id)
56 57  
57 58 author = fast_create(Person)
58 59  
... ... @@ -61,9 +62,9 @@ class ProposalsDiscussionPluginPublicControllerTest &lt; ActionController::TestCase
61 62 end
62 63  
63 64 should 'load proposals with most recently commented order' do
64   - proposal1 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal1', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id)
65   - proposal2 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal2', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id)
66   - proposal3 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal3', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id)
  65 + proposal1 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal1', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :author_id => person.id)
  66 + proposal2 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal2', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :author_id => person.id)
  67 + proposal3 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal3', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :author_id => person.id)
67 68  
68 69 author = fast_create(Person)
69 70 Comment.create!({:source => proposal2, :body => 'text', :author => author, :created_at => 10.days.ago}, :without_protection => true)
... ... @@ -82,7 +83,7 @@ class ProposalsDiscussionPluginPublicControllerTest &lt; ActionController::TestCase
82 83 profile.add_member(person)
83 84 profile.update_attribute(:public_profile, false)
84 85  
85   - proposals = 3.times.map { fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal title', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id)}
  86 + proposals = 3.times.map { fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal title', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :author_id => person.id)}
86 87 get :load_proposals, :profile => profile.identifier, :holder_id => topic.id
87 88 assert_equivalent proposals, assigns(:proposals)
88 89 end
... ... @@ -90,7 +91,7 @@ class ProposalsDiscussionPluginPublicControllerTest &lt; ActionController::TestCase
90 91 should 'not load proposals when profile is private and user is not logged' do
91 92 logout
92 93 profile.update_attribute(:public_profile, false)
93   - proposals = 3.times.map { fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal title', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id)}
  94 + proposals = 3.times.map { fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal title', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id, :author_id => person.id)}
94 95 get :load_proposals, :profile => profile.identifier, :holder_id => topic.id
95 96 assert_equal nil, assigns(:proposals)
96 97 end
... ...
views/content_viewer/_proposal_card.html.erb
1 1 <div class="proposal">
2   - <div class="score">
3   - <% if proposal_card.published? %>
4   - <% normalized_score = proposal_card.normalized_score %>
5   - <% pos = 26 * (normalized_score*4 - 1).round %>
6   - <span title="<%= normalized_score %>" style="background-position-y: -<%= pos %>px">&nbsp;</span>
7   - <% end %>
  2 + <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' %>
8 4 </div>
9 5 <div class="content">
10 6 <div class="title">
... ... @@ -22,7 +18,22 @@
22 18 </div>
23 19 <% end %>
24 20 <div class="abstract">
25   - <%= link_to strip_tags(proposal_card.abstract), proposal_card.view_url %>
  21 + <%= proposal_card.abstract %>
  22 + </div>
  23 + <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">&nbsp;</span>
  28 + <% end %>
  29 + </div>
  30 + <% if !proposal_card.tags.empty? %>
  31 + <div class="tags" id="article-tags">
  32 + <%= proposal_card.tags.map { |t| link_to(t, :controller => 'profile', :profile => @profile.identifier, :action => 'tags', :id => t.name ) }.join("\n") %>
  33 + </div>
  34 + <% end %>
  35 + <div class="comments-count">
  36 + <%= n_("%s comment", "%s comments", proposal_card.comments_count) % proposal_card.comments_count %>
26 37 </div>
27 38 </div>
28 39 </div>
... ...
views/content_viewer/_statistics.html.erb
1   -<div class="statistics">
  1 +<div class="statistics clearfix">
2 2 <h5><%= _('Statistics') %></h5>
3 3  
4 4 <div class="graph">
... ...
views/content_viewer/discussion.html.erb
... ... @@ -14,14 +14,16 @@
14 14 </div>
15 15 <% end %>
16 16  
17   -<%= link_to url_for({:controller => 'cms', :action => 'new', :type => "ProposalsDiscussionPlugin::Proposal", :parent_id => discussion.id}), :class => 'button with-text icon-add' do %>
18   - <strong><%= _("Send your proposal!") %></strong>
19   -<% end %>
20   -
21 17 <%= render :partial => 'content_viewer/statistics', :locals => {:holder => discussion} %>
22 18  
23   -<div class="tag_cloud">
  19 +<div id="article-tags" class="tag_cloud">
24 20 <%= tag_cloud(discussion.proposal_tags, :tag, {:action => :tag, :controller => 'search'}, :max_size => 18, :min_size => 10) %>
25 21 </div>
26 22  
  23 +<div class="new-proposal">
  24 + <%= link_to url_for({:controller => 'cms', :action => 'new', :type => "ProposalsDiscussionPlugin::Proposal", :parent_id => discussion.id}), :class => 'button with-text icon-add' do %>
  25 + <strong><%= _("Send your proposal!") %></strong>
  26 + <% end %>
  27 +</div>
  28 +
27 29 <%= render :partial => 'content_viewer/proposals_list', :locals => {:holder => discussion} %>
... ...