import random
import jinja2
from jingo import register, env
from tower import ugettext as _
@register.function
def emaillink(email, title=None):
if not email:
return ""
fallback = email[::-1] # reverse
# inject junk somewhere
i = random.randint(0, len(email) - 1)
fallback = u"%s%s%s" % (jinja2.escape(fallback[:i]),
u'null',
jinja2.escape(fallback[i:]))
# replace @ and .
fallback = fallback.replace('@', '@').replace('.', '.')
if title:
title = jinja2.escape(title)
else:
title = '%s' % fallback
node = u'%s%s' % (
title, fallback)
return jinja2.Markup(node)
@register.filter
def user_link(user):
if not user:
return ''
return jinja2.Markup(_user_link(user))
@register.function
def users_list(users, size=None):
if not users:
return ''
tail = []
if size and size < len(users):
users = users[:size]
tail = [_('others', 'user_list_others')]
return jinja2.Markup(', '.join(map(_user_link, users) + tail))
def _user_link(user):
if isinstance(user, basestring):
return user
return u'%s' % (
user.get_url_path(), unicode(jinja2.escape(user.name)))
@register.filter
def user_vcard(user, table_class='person-info',
about_addons=True):
c = {'profile': user, 'table_class': table_class,
'about_addons': about_addons}
t = env.get_template('users/vcard.html').render(**c)
return jinja2.Markup(t)
@register.inclusion_tag('users/report_abuse.html')
@jinja2.contextfunction
def user_report_abuse(context, hide, profile):
new = dict(context.items())
new.update({'hide': hide, 'profile': profile,
'abuse_form': context['abuse_form']})
return new