decode unicode before passing to urllib.quote_plus
[mygpo.git] / mygpo / web / templatetags / utils.py
blobfc3398700c84d46bf3e42ace6a885aa4e86fa6e4
1 from django import template
2 from django.utils.safestring import mark_safe
4 from mygpo.web.utils import get_page_list, license_info
7 register = template.Library()
9 @register.filter
10 def lookup(dic, key):
11 return mark_safe(dic.get(key, ''))
13 @register.filter
14 def lookup_list(dict, keys):
15 for key in keys:
16 if key in dict:
17 yield dict[key]
20 @register.simple_tag
21 def smartwidthratio(val, min_val, max_val, upper, lower):
22 if max_val == 0:
23 return 0
24 return max(lower, (float(val-min_val) / max_val * upper))
26 @register.filter
27 def page_list(cur, start, total, show_max):
28 return get_page_list(start, total, cur, show_max)
31 @register.filter
32 def filter_dict(dic):
33 return [key for key, val in dic.iteritems() if val]
36 @register.filter
37 def append(l, item):
38 return l + [item]
40 @register.filter
41 def remove(l, item):
42 return [x for x in l if x != item]
44 @register.filter
45 def format_time(time):
46 from mygpo.utils import format_time as _format_time
47 return mark_safe(_format_time(time))
50 @register.filter
51 def is_tuple(obj):
52 return isinstance(obj, tuple)
54 @register.filter
55 def is_list(obj):
56 return isinstance(obj, list)
58 @register.filter
59 def markdown(txt):
60 import markdown2
61 html = markdown2.markdown(txt)
62 return mark_safe(html)
65 @register.filter
66 def nbsp(s):
67 """ collapses multiple whitespaces and replaces them with   """
68 import re
69 s = re.sub("\s+", " ", s)
70 return mark_safe(s)
73 @register.filter
74 def license_name(license_url):
75 """ returns a "pretty" license name for a license URL """
77 info = license_info(license_url)
79 if info.name:
80 return '%s %s' % (info.name, info.version or '')
82 return info.url
85 @register.filter
86 def urlquote(s):
87 """ makes urllib.quote_plus available as a template filter """
88 import urllib
89 if isinstance(s, unicode):
90 s = s.encode('utf-8')
91 return mark_safe(urllib.quote_plus(s))