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 | 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 < 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 < 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 < 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 < 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 < 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"> </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"> </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
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} %> | ... | ... |