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