5 from django import template
6 from django.db.models.query import QuerySet
7 from django.utils import simplejson
8 from datetime import datetime, timedelta
9 from django.views.generic.dates import _date_from_string
11 from emissions.utils import period_program
13 register = template.Library()
15 @register.filter(name='zip')
19 @register.inclusion_tag('includes/audio.html', takes_context=True)
20 def audio(context, sound=None):
22 'episode': context.get('episode'),
26 @register.inclusion_tag('episodes/resume.html', takes_context=True)
27 def episode_resume(context, date=None, model=None, klass=None):
31 'episode': context.get('episode'),
35 @register.inclusion_tag('emissions/detail.html', takes_context=True)
36 def emission_detail(context, date=None):
38 'emission': context.get('emission'),
39 'schedules': context.get('schedules'),
42 @register.inclusion_tag('includes/player.html', takes_context=False)
44 return {'unique': uuid.uuid4()}
46 @register.inclusion_tag('includes/metaNav.html', takes_context=False)
50 @register.inclusion_tag('includes/week.html', takes_context=True)
51 def weekview(context, year=None, week=None, weekday=None, fragment= None):
52 year = year if year else datetime.today().year
53 week = week if week else datetime.today().isocalendar()[1]-1
54 weekday = weekday if weekday else datetime.today().weekday()
55 date = _date_from_string(str(year), '%Y', '1', '%w', str(week), '%W')
56 date = datetime(*date.timetuple()[:3])
58 program = period_program(date, date+timedelta(days=7))
61 days.append({'cells': [x for x in program if x.is_on_weekday(day+1)],
62 'datetime': date+timedelta(days=day)})
71 @register.inclusion_tag('news/inline.html', takes_context=False)
72 def news_inline(content=None, klass=None, logo=None):
82 if isinstance(object, QuerySet):
83 return serialize('json', object)
84 return simplejson.dumps(object)
87 def remove_tag_facet(url, facet):
88 facet = urllib2.quote(facet.encode('utf-8'), safe='')
89 return re.sub(r'&page=\d+', '', url.replace('&selected_facets=tags_exact:%s' % facet, ''))
92 def remove_category_facet(url, facet):
93 facet = urllib2.quote(facet.encode('utf-8'), safe='')
94 return re.sub(r'&page=\d+', '', url.replace('&selected_facets=categories_exact:%s' % facet, ''))
98 def append_tag_facet(url, facet):
99 facet = urllib2.quote(facet.encode('utf-8'), safe='')
100 return re.sub(r'&page=\d+', '', url + '&selected_facets=tags_exact:%s' % facet)
103 def append_category_facet(url, facet):
104 facet = urllib2.quote(facet.encode('utf-8'), safe='')
105 return re.sub(r'&page=\d+', '', url + '&selected_facets=categories_exact:%s' % facet)
109 def search_result_template(parser, token):
111 tag_name, result_str = token.split_contents()
113 raise template.TemplateSyntaxError("%r tag requires exactly one argument" % token.contents.split()[0])
114 return FormatSearchResultNode(result_str)
117 class FormatSearchResultNode(template.Node):
118 def __init__(self, result_str):
119 self.result_var = template.Variable(result_str)
121 def render(self, context):
122 result = self.result_var.resolve(context)
125 'emission': 'emissions',
126 'episode': 'episodes'
128 t = template.loader.get_template('%s/search_result.html' % dir_mapping.get(result.model_name))
129 return t.render(template.context.Context({'result': result}, autoescape=context.autoescape))