]> git.0d.be Git - panikweb.git/blob - panikweb/paniktags/templatetags/paniktags.py
Make unique episode resume with inline & resume
[panikweb.git] / panikweb / paniktags / templatetags / paniktags.py
1 import re
2 import urllib2
3 import uuid
4
5 from django import template
6
7 register = template.Library()
8
9 @register.filter(name='zip')
10 def zip_lists(a, b):
11     return zip(a, b)
12
13 @register.inclusion_tag('includes/audio.html')
14 def audio(sound=None):
15     return {
16         'sound': sound
17     }
18
19 @register.inclusion_tag('episodes/resume.html', takes_context=True)
20 def episode_resume(context, date=None, model=None, klass=None):
21     return {
22         'model': model,
23         'class': klass,
24         'episode': context.get('episode'),
25         'date': date,
26     }
27
28 @register.inclusion_tag('episodes/inline.html', takes_context=True)
29 def episode_inline(context, date=None, klass=None):
30     return {
31         'class': klass,
32         'episode': context.get('episode'),
33         'date': date,
34     }
35
36 @register.inclusion_tag('emissions/detail.html', takes_context=True)
37 def emission_detail(context, date=None):
38     return {
39         'emission': context.get('emission'),
40         'schedules': context.get('schedules'),
41     }
42
43 @register.inclusion_tag('includes/player.html', takes_context=False)
44 def player():
45     return {'unique': uuid.uuid4()}
46
47 @register.inclusion_tag('includes/metaNav.html', takes_context=False)
48 def metanav():
49     return {}
50
51 @register.inclusion_tag('news/inline.html', takes_context=False)
52 def news_inline(content=None, klass=None, logo=None):
53     return {
54             'content': content,
55             'class': klass,
56             'logo': logo
57     }
58
59
60 @register.filter
61 def remove_tag_facet(url, facet):
62     facet = urllib2.quote(facet.encode('utf-8'), safe='')
63     return re.sub(r'&page=\d+', '', url.replace('&selected_facets=tags_exact:%s' % facet, ''))
64
65 @register.filter
66 def remove_category_facet(url, facet):
67     facet = urllib2.quote(facet.encode('utf-8'), safe='')
68     return re.sub(r'&page=\d+', '', url.replace('&selected_facets=categories_exact:%s' % facet, ''))
69
70
71 @register.filter
72 def append_tag_facet(url, facet):
73     facet = urllib2.quote(facet.encode('utf-8'), safe='')
74     return re.sub(r'&page=\d+', '', url + '&selected_facets=tags_exact:%s' % facet)
75
76 @register.filter
77 def append_category_facet(url, facet):
78     facet = urllib2.quote(facet.encode('utf-8'), safe='')
79     return re.sub(r'&page=\d+', '', url + '&selected_facets=categories_exact:%s' % facet)
80
81
82 @register.tag
83 def search_result_template(parser, token):
84     try:
85         tag_name, result_str = token.split_contents()
86     except ValueError:
87         raise template.TemplateSyntaxError("%r tag requires exactly one argument" % token.contents.split()[0])
88     return FormatSearchResultNode(result_str)
89
90
91 class FormatSearchResultNode(template.Node):
92     def __init__(self, result_str):
93         self.result_var = template.Variable(result_str)
94
95     def render(self, context):
96         result = self.result_var.resolve(context)
97         dir_mapping = {
98             'newsitem': 'news',
99             'emission': 'emissions',
100             'episode': 'episodes'
101         }
102         t = template.loader.get_template('%s/search_result.html' % dir_mapping.get(result.model_name))
103         return t.render(template.context.Context({'result': result}, autoescape=context.autoescape))