ac49062decd2bb73e32842d825fdba814e385c15
[mygpo.git] / mygpo / web / templatetags / charts.py
blobac49062decd2bb73e32842d825fdba814e385c15
1 from django import template
2 from django.utils.safestring import mark_safe
3 from django.utils.translation import ugettext as _
4 import hashlib
5 import math
7 register = template.Library()
9 @register.filter
10 def vertical_bar(value, max):
11 if max == 0:
12 return ''
14 ratio = float(value) / float(max) * 100
15 if ratio > 40:
16 left, right = '<span>'+str(value)+'</span>', ''
17 else:
18 left, right = '&nbsp;', '<span>'+str(value)+'</span>'
19 s = '<div class="barbg"><div class="bar" style="width: %s">%s</div>%s</div>' % (ratio, left, right)
20 return mark_safe(s)
22 @register.filter
23 def format_diff(value):
24 if value > 1:
25 s = '<img src="/media/better.png" title="+%s">' % value
26 elif value < -1:
27 s = '<img src="/media/worse.png" title="%s">' % value
28 else:
29 s = ''
31 return mark_safe(s)
33 @register.filter
34 def timeline(data):
35 s = '<script type="text/javascript" src="http://www.google.com/jsapi"></script>\n'
36 s += '<script type="text/javascript">\n'
37 s += 'google.load("visualization", "1", {"packages":["annotatedtimeline"]});\n'
38 s += 'google.setOnLoadCallback(drawChart);\n'
39 s += 'function drawChart() {\n'
40 s += 'var data = new google.visualization.DataTable();\n'
41 s += 'data.addColumn("date", "Date");\n'
42 s += 'data.addColumn("number", "Listeners");\n'
43 s += 'data.addColumn("string", "title1");\n'
44 s += 'data.addColumn("string", "text1");\n'
45 s += 'data.addRows([\n'
47 for r in data:
48 if 'episode' in r and r['episode']:
49 episode = '"%s"' % r['episode'].title if r['episode'].title else '"Unnamed Episode"'
50 episode_ = '"released"'
51 else:
52 episode = 'undefined'
53 episode_ = 'undefined'
55 s += '[new Date(%d, %d, %d), %d, %s, %s],\n' % (r['date'].year, r['date'].month-1, r['date'].day, r['listeners'], episode, episode_)
57 s += ']);\n'
58 s += 'var chart = new google.visualization.AnnotatedTimeLine(document.getElementById("chart_div"));\n'
59 s += 'chart.draw(data, {displayAnnotations: true});\n'
60 s += '}\n'
61 s += '</script>\n'
63 return mark_safe(s)
66 @register.filter
67 def pie_chart(parts):
68 parts = [
69 'cht=p',
70 'chs=250x100',
71 'chl=%s' % '|'.join(parts.iterkeys()),
72 'chd=t:%s' % ','.join([ repr(x) for x in parts.itervalues() ])
75 s = '<img src="http://chart.apis.google.com/chart?%s"' % '&'.join(parts)
77 return mark_safe(s)