8 from django import template
9 from django.conf import settings
10 from django.db.models.query import QuerySet
11 from django.utils import simplejson
12 from datetime import datetime, timedelta
14 from emissions.utils import period_program
16 from panikweb import utils
18 register = template.Library()
20 @register.filter(name='zip')
24 @register.inclusion_tag('includes/audio.html', takes_context=True)
25 def audio(context, sound=None):
27 'episode': context.get('episode'),
31 @register.inclusion_tag('news/nav.html', takes_context=True)
32 def news_nav(context, date=None):
34 'newsitem': context.get('newsitem'),
35 'news': context.get('news'),
38 @register.inclusion_tag('emissions/nav.html', takes_context=True)
39 def emission_nav(context, date=None, klass=None):
42 'categories': context.get('categories'),
43 'episodes': context.get('episodes'),
44 'emission': context.get('emission'),
45 'episode': context.get('episode'),
48 @register.inclusion_tag('episodes/resume.html', takes_context=True)
49 def episode_resume(context, date=None, model=None, klass=None):
53 'episode': context.get('episode'),
57 @register.inclusion_tag('episodes/detail.html', takes_context=True)
58 def episode_detail(context, date=None):
60 'episode': context.get('episode'),
61 'emission': context.get('emission'),
62 'diffusions': context.get('diffusions'),
65 @register.inclusion_tag('emissions/detail.html', takes_context=True)
66 def emission_detail(context, date=None):
68 'emission': context.get('emission'),
69 'schedules': context.get('schedules'),
72 @register.inclusion_tag('emissions/resume.html', takes_context=True)
73 def emission_resume(context, date=None):
75 'emission': context.get('emission'),
76 'schedules': context.get('schedules'),
79 @register.inclusion_tag('emissions/inline.html', takes_context=True)
80 def emission_inline(context, date=None):
82 'emission': context.get('emission'),
83 'schedules': context.get('schedules'),
86 @register.inclusion_tag('includes/player.html', takes_context=False)
88 return {'unique': uuid.uuid4()}
90 @register.inclusion_tag('includes/metaNav.html', takes_context=True)
91 def metanav(context, active=None):
93 'sectionName': context.get('sectionName')
96 @register.inclusion_tag('includes/week.html', takes_context=True)
97 def weekview(context, year=None, week=None, weekday=None, fragment=None):
98 year = year if year else datetime.today().isocalendar()[0]
99 week = week if week else datetime.today().isocalendar()[1]
100 weekday = weekday if weekday else datetime.today().weekday()
102 date = utils.tofirstdayinisoweek(year, week)
103 date = datetime(*date.timetuple()[:3])
105 program = period_program(date, date+timedelta(days=7))
108 days.append({'cells': [x for x in program if x.is_on_weekday(day+1)],
109 'datetime': date+timedelta(days=day)})
111 'fragment': fragment,
118 @register.inclusion_tag('news/inline.html', takes_context=False)
119 def news_inline(content=None, klass=None, logo=None):
126 @register.inclusion_tag('news/roll.html', takes_context=True)
127 def newsroll(context, nbr=None):
129 'categories': context.get('categories'),
130 'news': context.get('news'),
131 'focus': context.get('focus'),
138 if isinstance(object, QuerySet):
139 return serialize('json', object)
140 return simplejson.dumps(object)
143 def strreplace ( string, args ):
144 find = args.split(',')[0]
145 replace = args.split(',')[1]
146 return string.replace(find,replace)
149 def replace ( string, args ):
150 search = args.split(args[0])[1]
151 replace = args.split(args[0])[2]
153 return re.sub( search, replace, string )
156 def remove_tag_facet(url, facet):
157 facet = urllib2.quote(facet.encode('utf-8'), safe='')
158 return re.sub(r'&page=\d+', '', url.replace('&selected_facets=tags_exact:%s' % facet, ''))
161 def remove_category_facet(url, facet):
162 facet = urllib2.quote(facet.encode('utf-8'), safe='')
163 return re.sub(r'&page=\d+', '', url.replace('&selected_facets=categories_exact:%s' % facet, ''))
167 def append_tag_facet(url, facet):
168 facet = urllib2.quote(facet.encode('utf-8'), safe='')
169 return re.sub(r'&page=\d+', '', url + '&selected_facets=tags_exact:%s' % facet)
172 def append_category_facet(url, facet):
173 facet = urllib2.quote(facet.encode('utf-8'), safe='')
174 return re.sub(r'&page=\d+', '', url + '&selected_facets=categories_exact:%s' % facet)
178 def search_result_template(parser, token):
180 tag_name, result_str = token.split_contents()
182 raise template.TemplateSyntaxError("%r tag requires exactly one argument" % token.contents.split()[0])
183 return FormatSearchResultNode(result_str)
186 class FormatSearchResultNode(template.Node):
187 def __init__(self, result_str):
188 self.result_var = template.Variable(result_str)
190 def render(self, context):
191 result = self.result_var.resolve(context)
194 'emission': 'emissions',
195 'episode': 'episodes'
197 t = template.loader.get_template('%s/search_result.html' % dir_mapping.get(result.model_name))
198 return t.render(template.context.Context({'result': result}, autoescape=context.autoescape))
201 @register.inclusion_tag('includes/piwik.html')
203 return {'enabled': settings.ENABLE_PIWIK}
207 def rfc822(datetime):
210 return email.utils.formatdate(time.mktime(datetime.timetuple()))