# coding: utf-8
import re
from django import template
from django.contrib.humanize.templatetags.humanize import naturalday
from django.contrib.staticfiles.templatetags.staticfiles import static
from django.utils.safestring import mark_safe
register = template.Library()
link = u'{label}'
def cssify(string):
return re.sub('[^a-z_-]', '', string.lower())
@register.filter
def country_flag(country, tplace='bottom'):
# Enable using groups instead of countries
code = country.code if hasattr(country, 'code') else country.abbreviation
return mark_safe(
u''.format(
code=code.lower(), place=tplace, name=country.name))
@register.filter
def chamber_icon(chamber, tplace='bottom'):
url = static('images/chamber-%s.png' % cssify(chamber.abbreviation))
return mark_safe(
u''.format(
name=chamber.name,
url=url,
place=tplace
)
)
@register.filter
def group_icon(group, tplace='bottom'):
url = static('images/group-%s.png' % cssify('%s-%s' % (
group.chamber.abbreviation, group.abbreviation)))
return mark_safe(
u''
u''.format(url=url, name=group.name, place=tplace))
@register.filter
def mandate_date(date, arg=None):
if date is None or date.year == 9999:
return 'present'
else:
return naturalday(date, arg)
@register.filter
def position_icon(position, recommendation=None):
color = 'default'
if recommendation:
if position == recommendation:
color = 'success'
else:
color = 'danger'
if position == 'for':
icon = "thumbs-up"
elif position == 'against':
icon = "thumbs-down"
else:
icon = "circle-o"
pattern = ''
return mark_safe(pattern % (icon, color, position))
@register.filter
def proposal_status_label(status, recommendation=None):
color = 'default'
if recommendation:
reco = recommendation.recommendation
if (reco == 'for' and status == 'adopted' or
reco == 'against' and status == 'rejected'):
color = 'success'
elif (reco == 'for' and status == 'rejected' or
reco == 'against' and status == 'adopted'):
color = 'danger'
pattern = '%s'
return mark_safe(pattern % (color, status))
@register.filter
def score_badge(score, tooltip=None):
score = int(score or 0)
if score > 0:
color = 'success'
elif score < 0:
color = 'danger'
else:
color = 'primary'
attrs = ''
if tooltip:
attrs = 'data-toggle="tooltip" data-placement="%s" title="%s"'
attrs = attrs % ('left', tooltip)
pattern = '%s'
return mark_safe(pattern % (color, attrs, score))
@register.filter
def cast_str(val):
return str(val)
@register.filter
def proposal_themes(proposal):
return set(proposal.themes.all()) | set(proposal.dossier.themes.all())