Limiting max number of tags shown on debate cards ~ issue#144

This commit is contained in:
David Gil
2015-08-11 20:47:41 +02:00
parent e49567c953
commit 06d8c96d54
5 changed files with 25 additions and 6 deletions

View File

@@ -1,7 +1,15 @@
module ApplicationHelper
def tags(debate)
debate.tag_list.sort.map { |tag| link_to sanitize(tag), debates_path(tag: tag) }.join('').html_safe
def tags(debate, limit = nil)
tag_names = debate.tag_list_with_limit(limit)
tag_names.sort.map do |tag|
link_to sanitize(tag), debates_path(tag: tag)
end.join('').html_safe.tap do |output|
if limit && extra_tags = debate.tags_count_out_of_limit(limit)
output.concat(link_to("#{extra_tags}+", debate_path(debate)))
end
end
end
def percentage(vote, debate)

View File

@@ -42,6 +42,15 @@ class Debate < ActiveRecord::Base
super.try :html_safe
end
def tag_list_with_limit(limit = nil)
tags.most_used(limit).pluck :name
end
def tags_count_out_of_limit(limit = nil)
count = tags.count - limit
count < 0 ? 0 : count
end
protected
def sanitize_description

View File

@@ -15,7 +15,7 @@
<%= link_to debate.description, debate %>
<div class="truncate"></div>
</div>
<%= render "shared/tags", debate: debate %>
<%= render "shared/tags", debate: debate, limit: 5 %>
</div>
</div>

View File

@@ -1,3 +1,5 @@
<%- limit ||= nil %>
<% if debate.tags.any? %>
<span class='tags'><%= tags(debate) %></span>
<% end %>
<span class='tags'><%= tags(debate, limit) %></span>
<% end %>

View File

@@ -14,7 +14,7 @@
<%= link_to featured_debate.description, featured_debate %>
<div class="truncate"></div>
</div>
<%= render "shared/tags", debate: featured_debate %>
<%= render "shared/tags", debate: featured_debate, limit: 5 %>
</div>
<div class="row">