Commit 8eba02a990c0ea29e9bc8b86aec54c0a0cee83d8
1 parent
e8d4ea47
Exists in
master
and in
11 other branches
proposals_discussion: improve proposals list
Showing
6 changed files
with
90 additions
and
42 deletions
Show diff stats
public/images/score.png
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 | .private-proposals .proposal { | 25 | .private-proposals .proposal { |
2 | background: url(/images/hachure.png); | 26 | background: url(/images/hachure.png); |
3 | opacity: 0.5; | 27 | opacity: 0.5; |
@@ -6,18 +30,23 @@ | @@ -6,18 +30,23 @@ | ||
6 | } | 30 | } |
7 | 31 | ||
8 | .proposal { | 32 | .proposal { |
9 | - width: 100%; | ||
10 | - min-width: 272px; | ||
11 | vertical-align: top; | 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 | .article-body-proposals-discussion-plugin_discussion .actions, | 44 | .article-body-proposals-discussion-plugin_discussion .actions, |
16 | .article-body-proposals-discussion-plugin_topic .actions { | 45 | .article-body-proposals-discussion-plugin_topic .actions { |
17 | margin: 10px 0 25px 0; | 46 | margin: 10px 0 25px 0; |
18 | } | 47 | } |
19 | 48 | ||
20 | -.proposal .content, .proposal .score, .proposal .topic { | 49 | +.proposal .content, .proposal .topic { |
21 | display: inline-block; | 50 | display: inline-block; |
22 | border-color: rgb(201, 201, 201); | 51 | border-color: rgb(201, 201, 201); |
23 | padding: 5px; | 52 | padding: 5px; |
@@ -32,6 +61,7 @@ | @@ -32,6 +61,7 @@ | ||
32 | .proposal .score { | 61 | .proposal .score { |
33 | width: 5%; | 62 | width: 5%; |
34 | text-align: center; | 63 | text-align: center; |
64 | + float: right; | ||
35 | } | 65 | } |
36 | .proposal .score span { | 66 | .proposal .score span { |
37 | background: url(/plugins/proposals_discussion/images/score.png) no-repeat; | 67 | background: url(/plugins/proposals_discussion/images/score.png) no-repeat; |
@@ -41,19 +71,20 @@ | @@ -41,19 +71,20 @@ | ||
41 | position: relative; | 71 | position: relative; |
42 | } | 72 | } |
43 | 73 | ||
44 | -.proposal .content:hover, .proposal .topic:hover { | ||
45 | - background: rgb(230, 230, 230); | ||
46 | -} | ||
47 | - | ||
48 | .proposal .title { | 74 | .proposal .title { |
49 | font-weight: bold; | 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 | #article .proposal a:visited, #article .proposal a { | 82 | #article .proposal a:visited, #article .proposal a { |
54 | - color: rgb(70, 70, 70); | ||
55 | text-decoration: none; | 83 | text-decoration: none; |
84 | +} | ||
85 | +#article .proposal .title a:visited, #article .proposal .title a { | ||
56 | width: 100%; | 86 | width: 100%; |
87 | + color: rgb(240, 240, 240); | ||
57 | display: inline-block; | 88 | display: inline-block; |
58 | } | 89 | } |
59 | #article .proposal .private.actions a:visited, #article .proposal .private.actions a { | 90 | #article .proposal .private.actions a:visited, #article .proposal .private.actions a { |
@@ -61,7 +92,8 @@ | @@ -61,7 +92,8 @@ | ||
61 | } | 92 | } |
62 | 93 | ||
63 | .proposal .content { | 94 | .proposal .content { |
64 | - width: 84%; | 95 | + width: 100%; |
96 | + display: table-cell; | ||
65 | color: rgb(83, 83, 83); | 97 | color: rgb(83, 83, 83); |
66 | vertical-align: top; | 98 | vertical-align: top; |
67 | position: relative; | 99 | position: relative; |
@@ -98,6 +130,7 @@ form .proposals-discussion-plugin .body textarea { | @@ -98,6 +130,7 @@ form .proposals-discussion-plugin .body textarea { | ||
98 | } | 130 | } |
99 | 131 | ||
100 | .proposals_list .filters { | 132 | .proposals_list .filters { |
133 | + clear: both; | ||
101 | float: right; | 134 | float: right; |
102 | margin-top: 4px; | 135 | margin-top: 4px; |
103 | } | 136 | } |
@@ -210,7 +243,8 @@ form .proposals-discussion-plugin .body textarea { | @@ -210,7 +243,8 @@ form .proposals-discussion-plugin .body textarea { | ||
210 | min-height: 50px; | 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 | float: left; | 248 | float: left; |
215 | } | 249 | } |
216 | .article-body-proposals-discussion-plugin_topic .graph #proposals-time, | 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,21 +3,22 @@ require File.dirname(__FILE__) + '/../test_helper' | ||
3 | class ProposalsDiscussionPluginPublicControllerTest < ActionController::TestCase | 3 | class ProposalsDiscussionPluginPublicControllerTest < ActionController::TestCase |
4 | 4 | ||
5 | def setup | 5 | def setup |
6 | + @person = fast_create(Person) | ||
6 | @profile = fast_create(Community) | 7 | @profile = fast_create(Community) |
7 | @discussion = ProposalsDiscussionPlugin::Discussion.create!(:profile => @profile, :allow_topics => true, :name => 'discussion') | 8 | @discussion = ProposalsDiscussionPlugin::Discussion.create!(:profile => @profile, :allow_topics => true, :name => 'discussion') |
8 | @topic = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => @discussion.id, :profile_id => @profile.id) | 9 | @topic = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => @discussion.id, :profile_id => @profile.id) |
9 | end | 10 | end |
10 | 11 | ||
11 | - attr_reader :profile, :discussion, :topic | 12 | + attr_reader :profile, :discussion, :topic, :person |
12 | 13 | ||
13 | should 'load proposals' do | 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 | get :load_proposals, :profile => profile.identifier, :holder_id => topic.id | 16 | get :load_proposals, :profile => profile.identifier, :holder_id => topic.id |
16 | assert_equivalent proposals, assigns(:proposals) | 17 | assert_equivalent proposals, assigns(:proposals) |
17 | end | 18 | end |
18 | 19 | ||
19 | should 'add link to next page' do | 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 | get :load_proposals, :profile => profile.identifier, :holder_id => topic.id | 22 | get :load_proposals, :profile => profile.identifier, :holder_id => topic.id |
22 | assert_match /href=.*page=2/, response.body | 23 | assert_match /href=.*page=2/, response.body |
23 | end | 24 | end |
@@ -28,17 +29,17 @@ class ProposalsDiscussionPluginPublicControllerTest < ActionController::TestCase | @@ -28,17 +29,17 @@ class ProposalsDiscussionPluginPublicControllerTest < ActionController::TestCase | ||
28 | end | 29 | end |
29 | 30 | ||
30 | should 'load proposals with alphabetical order' do | 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 | get :load_proposals, :profile => profile.identifier, :holder_id => topic.id, :order => 'alphabetical' | 35 | get :load_proposals, :profile => profile.identifier, :holder_id => topic.id, :order => 'alphabetical' |
35 | assert_equal [proposal2, proposal3, proposal1], assigns(:proposals) | 36 | assert_equal [proposal2, proposal3, proposal1], assigns(:proposals) |
36 | end | 37 | end |
37 | 38 | ||
38 | should 'load proposals with most commented order' do | 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 | author = fast_create(Person) | 44 | author = fast_create(Person) |
44 | Comment.create!(:source => proposal2, :body => 'text', :author => author) | 45 | Comment.create!(:source => proposal2, :body => 'text', :author => author) |
@@ -50,9 +51,9 @@ class ProposalsDiscussionPluginPublicControllerTest < ActionController::TestCase | @@ -50,9 +51,9 @@ class ProposalsDiscussionPluginPublicControllerTest < ActionController::TestCase | ||
50 | end | 51 | end |
51 | 52 | ||
52 | should 'load proposals with most recent order' do | 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 | author = fast_create(Person) | 58 | author = fast_create(Person) |
58 | 59 | ||
@@ -61,9 +62,9 @@ class ProposalsDiscussionPluginPublicControllerTest < ActionController::TestCase | @@ -61,9 +62,9 @@ class ProposalsDiscussionPluginPublicControllerTest < ActionController::TestCase | ||
61 | end | 62 | end |
62 | 63 | ||
63 | should 'load proposals with most recently commented order' do | 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 | author = fast_create(Person) | 69 | author = fast_create(Person) |
69 | Comment.create!({:source => proposal2, :body => 'text', :author => author, :created_at => 10.days.ago}, :without_protection => true) | 70 | Comment.create!({:source => proposal2, :body => 'text', :author => author, :created_at => 10.days.ago}, :without_protection => true) |
@@ -82,7 +83,7 @@ class ProposalsDiscussionPluginPublicControllerTest < ActionController::TestCase | @@ -82,7 +83,7 @@ class ProposalsDiscussionPluginPublicControllerTest < ActionController::TestCase | ||
82 | profile.add_member(person) | 83 | profile.add_member(person) |
83 | profile.update_attribute(:public_profile, false) | 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 | get :load_proposals, :profile => profile.identifier, :holder_id => topic.id | 87 | get :load_proposals, :profile => profile.identifier, :holder_id => topic.id |
87 | assert_equivalent proposals, assigns(:proposals) | 88 | assert_equivalent proposals, assigns(:proposals) |
88 | end | 89 | end |
@@ -90,7 +91,7 @@ class ProposalsDiscussionPluginPublicControllerTest < ActionController::TestCase | @@ -90,7 +91,7 @@ class ProposalsDiscussionPluginPublicControllerTest < ActionController::TestCase | ||
90 | should 'not load proposals when profile is private and user is not logged' do | 91 | should 'not load proposals when profile is private and user is not logged' do |
91 | logout | 92 | logout |
92 | profile.update_attribute(:public_profile, false) | 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 | get :load_proposals, :profile => profile.identifier, :holder_id => topic.id | 95 | get :load_proposals, :profile => profile.identifier, :holder_id => topic.id |
95 | assert_equal nil, assigns(:proposals) | 96 | assert_equal nil, assigns(:proposals) |
96 | end | 97 | end |
views/content_viewer/_proposal_card.html.erb
1 | <div class="proposal"> | 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"> </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 | </div> | 4 | </div> |
9 | <div class="content"> | 5 | <div class="content"> |
10 | <div class="title"> | 6 | <div class="title"> |
@@ -22,7 +18,22 @@ | @@ -22,7 +18,22 @@ | ||
22 | </div> | 18 | </div> |
23 | <% end %> | 19 | <% end %> |
24 | <div class="abstract"> | 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"> </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 | </div> | 37 | </div> |
27 | </div> | 38 | </div> |
28 | </div> | 39 | </div> |
views/content_viewer/_statistics.html.erb
views/content_viewer/discussion.html.erb
@@ -14,14 +14,16 @@ | @@ -14,14 +14,16 @@ | ||
14 | </div> | 14 | </div> |
15 | <% end %> | 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 | <%= render :partial => 'content_viewer/statistics', :locals => {:holder => discussion} %> | 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 | <%= tag_cloud(discussion.proposal_tags, :tag, {:action => :tag, :controller => 'search'}, :max_size => 18, :min_size => 10) %> | 20 | <%= tag_cloud(discussion.proposal_tags, :tag, {:action => :tag, :controller => 'search'}, :max_size => 18, :min_size => 10) %> |
25 | </div> | 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 | <%= render :partial => 'content_viewer/proposals_list', :locals => {:holder => discussion} %> | 29 | <%= render :partial => 'content_viewer/proposals_list', :locals => {:holder => discussion} %> |