# 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.core.urlresolvers import reverse
from django.utils.safestring import mark_safe
from django.utils.html import escape
register = template.Library()
link = u'{label}'
def cssify(string):
return re.sub('[^a-z_-]', '', string.lower())
def fix_url(url):
# Ensure we have a usable URL
return re.sub('^(https?://)?', 'https://', url.strip())
@register.filter
def twitter_link(url):
furl = fix_url(url)
return mark_safe(link.format(network='twitter', url=furl,
label=re.sub(r'.*/@?([^/]+)', '@\\1', re.sub(r'/$', '', furl))))
@register.filter
def facebook_link(url):
furl = fix_url(url)
clean_url = re.sub(r'/$', '', re.sub(r'\?.*', '', furl))
m = re.search(r'/pages/([^/]+)', clean_url, re.I)
return mark_safe(link.format(network='facebook', url=furl,
label=m.group(1) if m else re.sub(r'.*/([^/]+)', '\\1', clean_url)))
@register.filter
def website_link(url):
furl = fix_url(url)
short_url = re.sub(r'^https?://([^/]+).*', '\\1', furl)
return mark_safe(link.format(network='website', url=furl,
label=short_url))
@register.filter
def email_link(address):
return mark_safe(link.format(network='email', url='mailto:%s' % address,
label=address))
@register.simple_tag
def group_url(group):
if group.kind == 'chamber' or group.chamber is None:
return escape(reverse('representative-list', kwargs={
'group_kind': group.kind,
'group': group.name
}))
else:
return escape(reverse('representative-list', kwargs={
'group_kind': group.kind,
'chamber': group.chamber.name,
'group': group.name
}))
@register.simple_tag
def chamber_url(chamber):
return escape(reverse('representative-list', kwargs={
'group_kind': 'chamber',
'group': chamber.name
}))
@register.simple_tag
def country_url(country):
return escape(reverse('representative-list', kwargs={
'group_kind': 'country',
'group': country.name
}))
@register.filter
def country_flag(country):
# Enable using groups instead of countries
code = country.code if hasattr(country, 'code') else country.abbreviation
return mark_safe(
' {name}'.format(
name=country.name,
code=code.lower()))
@register.filter
def chamber_icon(chamber):
url = static('images/chamber-%s.png' % cssify(chamber.abbreviation))
return mark_safe(
u''
u' {name}'.format(name=chamber.name, url=url))
@register.filter
def chamber_small_icon(chamber):
url = static('images/chamber-%s.png' % cssify(chamber.abbreviation))
return mark_safe(
u''.format(name=chamber.name, url=url))
@register.simple_tag
def chamber_page_link(site, name):
icon_url = static('images/chamber-%s.png' % cssify(site.kind))
site_url = fix_url(site.url)
return mark_safe(
u' {name}'
.format(name=name, site=site_url, icon=icon_url))
@register.filter
def mandate_icon(main_mandate):
group = main_mandate.group
url = static('images/group-%s.png' % cssify('%s-%s' % (
group.chamber.abbreviation, group.abbreviation)))
return mark_safe(
u''
u' {role} of {name}'.format(
role=main_mandate.role,
name=main_mandate.group.name,
url=url))
@register.filter
def group_icon(group):
url = static('images/group-%s.png' % cssify('%s-%s' % (
group.chamber.abbreviation, group.abbreviation)))
return mark_safe(
u''
u' {name}'.format(url=url, name=group.abbreviation))
@register.filter
def group_long_icon(group):
url = static('images/group-%s.png' % cssify('%s-%s' % (
group.chamber.abbreviation, group.abbreviation)))
return mark_safe(
u''
u' {name}'.format(url=url, name=group.name))
@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):
if position == 'for':
return mark_safe(
'')
elif position == 'against':
return mark_safe(
'')
else:
return mark_safe(
'')