8 __docformat__ = "restructuredtext en" |
8 __docformat__ = "restructuredtext en" |
9 _ = unicode |
9 _ = unicode |
10 |
10 |
11 from datetime import datetime, date, timedelta |
11 from datetime import datetime, date, timedelta |
12 |
12 |
13 from logilab.mtconverter import html_escape |
13 from logilab.mtconverter import xml_escape |
14 |
14 |
15 from cubicweb.interfaces import ICalendarable |
15 from cubicweb.interfaces import ICalendarable |
16 from cubicweb.selectors import implements |
16 from cubicweb.selectors import implements |
17 from cubicweb.utils import strptime, date_range, todate, todatetime |
17 from cubicweb.utils import strptime, date_range, todate, todatetime |
18 from cubicweb.view import EntityView |
18 from cubicweb.view import EntityView |
80 def call(self): |
80 def call(self): |
81 self.w(u'<div class="hcalendar">') |
81 self.w(u'<div class="hcalendar">') |
82 for i in range(len(self.rset.rows)): |
82 for i in range(len(self.rset.rows)): |
83 task = self.complete_entity(i) |
83 task = self.complete_entity(i) |
84 self.w(u'<div class="vevent">') |
84 self.w(u'<div class="vevent">') |
85 self.w(u'<h3 class="summary">%s</h3>' % html_escape(task.dc_title())) |
85 self.w(u'<h3 class="summary">%s</h3>' % xml_escape(task.dc_title())) |
86 self.w(u'<div class="description">%s</div>' |
86 self.w(u'<div class="description">%s</div>' |
87 % task.dc_description(format='text/html')) |
87 % task.dc_description(format='text/html')) |
88 if task.start: |
88 if task.start: |
89 self.w(u'<abbr class="dtstart" title="%s">%s</abbr>' % (task.start.isoformat(), self.format_date(task.start))) |
89 self.w(u'<abbr class="dtstart" title="%s">%s</abbr>' % (task.start.isoformat(), self.format_date(task.start))) |
90 if task.stop: |
90 if task.stop: |
242 # build schedule |
242 # build schedule |
243 self.w(u'<table class="omcalendar">') |
243 self.w(u'<table class="omcalendar">') |
244 prevlink, nextlink = self._prevnext_links(curdate) # XXX |
244 prevlink, nextlink = self._prevnext_links(curdate) # XXX |
245 self.w(u'<tr><th><a href="%s"><<</a></th><th colspan="5">%s %s</th>' |
245 self.w(u'<tr><th><a href="%s"><<</a></th><th colspan="5">%s %s</th>' |
246 u'<th><a href="%s">>></a></th></tr>' % |
246 u'<th><a href="%s">>></a></th></tr>' % |
247 (html_escape(prevlink), self.req._(curdate.strftime('%B').lower()), |
247 (xml_escape(prevlink), self.req._(curdate.strftime('%B').lower()), |
248 curdate.year, html_escape(nextlink))) |
248 curdate.year, xml_escape(nextlink))) |
249 |
249 |
250 # output header |
250 # output header |
251 self.w(u'<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>' % |
251 self.w(u'<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>' % |
252 tuple(self.req._(day) for day in WEEKDAYS)) |
252 tuple(self.req._(day) for day in WEEKDAYS)) |
253 |
253 |
290 start=self.format_date(celldate), stop=self.format_date(celldate), |
290 start=self.format_date(celldate), stop=self.format_date(celldate), |
291 __redirectrql=self.rset.printable_rql(), |
291 __redirectrql=self.rset.printable_rql(), |
292 __redirectparams=self.req.build_url_params(year=curdate.year, month=curmonth), |
292 __redirectparams=self.req.build_url_params(year=curdate.year, month=curmonth), |
293 __redirectvid=self.id |
293 __redirectvid=self.id |
294 ) |
294 ) |
295 self.w(u'<div class="cmd"><a href="%s">%s</a></div>' % (html_escape(url), self.req._(u'add'))) |
295 self.w(u'<div class="cmd"><a href="%s">%s</a></div>' % (xml_escape(url), self.req._(u'add'))) |
296 self.w(u' ') |
296 self.w(u' ') |
297 self.w(u'</div>') |
297 self.w(u'</div>') |
298 self.w(u'<div class="cellContent">') |
298 self.w(u'<div class="cellContent">') |
299 for task_descr in rows: |
299 for task_descr in rows: |
300 if task_descr: |
300 if task_descr: |
305 __redirectrql=self.rset.printable_rql(), |
305 __redirectrql=self.rset.printable_rql(), |
306 __redirectparams=self.req.build_url_params(year=curdate.year, month=curmonth), |
306 __redirectparams=self.req.build_url_params(year=curdate.year, month=curmonth), |
307 __redirectvid=self.id |
307 __redirectvid=self.id |
308 ) |
308 ) |
309 |
309 |
310 self.w(u'<div class="tooltip" ondblclick="stopPropagation(event); window.location.assign(\'%s\'); return false;">' % html_escape(url)) |
310 self.w(u'<div class="tooltip" ondblclick="stopPropagation(event); window.location.assign(\'%s\'); return false;">' % xml_escape(url)) |
311 task.view('tooltip', w=self.w ) |
311 task.view('tooltip', w=self.w ) |
312 self.w(u'</div>') |
312 self.w(u'</div>') |
313 else: |
313 else: |
314 self.w(u'<div class="task">') |
314 self.w(u'<div class="task">') |
315 self.w(u" ") |
315 self.w(u" ") |
386 self.w(u'<table class="omcalendar" id="week">') |
386 self.w(u'<table class="omcalendar" id="week">') |
387 prevlink, nextlink = self._prevnext_links(first_day_of_week) # XXX |
387 prevlink, nextlink = self._prevnext_links(first_day_of_week) # XXX |
388 self.w(u'<tr><th class="transparent"></th>') |
388 self.w(u'<tr><th class="transparent"></th>') |
389 self.w(u'<th><a href="%s"><<</a></th><th colspan="5">%s %s %s</th>' |
389 self.w(u'<th><a href="%s"><<</a></th><th colspan="5">%s %s %s</th>' |
390 u'<th><a href="%s">>></a></th></tr>' % |
390 u'<th><a href="%s">>></a></th></tr>' % |
391 (html_escape(prevlink), first_day_of_week.year, |
391 (xml_escape(prevlink), first_day_of_week.year, |
392 self.req._(u'week'), first_day_of_week.isocalendar()[1], |
392 self.req._(u'week'), first_day_of_week.isocalendar()[1], |
393 html_escape(nextlink))) |
393 xml_escape(nextlink))) |
394 |
394 |
395 # output header |
395 # output header |
396 self.w(u'<tr>') |
396 self.w(u'<tr>') |
397 self.w(u'<th class="transparent"></th>') # column for hours |
397 self.w(u'<th class="transparent"></th>') # column for hours |
398 _today = date.today() |
398 _today = date.today() |
427 __redirectrql=self.rset.printable_rql(), |
427 __redirectrql=self.rset.printable_rql(), |
428 __redirectparams=self.req.build_url_params(year=year, week=week), |
428 __redirectparams=self.req.build_url_params(year=year, week=week), |
429 __redirectvid=self.id |
429 __redirectvid=self.id |
430 ) |
430 ) |
431 extra = ' ondblclick="addCalendarItem(event, hmin=8, hmax=20, year=%s, month=%s, day=%s, duration=2, baseurl=\'%s\')"' % ( |
431 extra = ' ondblclick="addCalendarItem(event, hmin=8, hmax=20, year=%s, month=%s, day=%s, duration=2, baseurl=\'%s\')"' % ( |
432 wdate.year, wdate.month, wdate.day, html_escape(url)) |
432 wdate.year, wdate.month, wdate.day, xml_escape(url)) |
433 else: |
433 else: |
434 extra = "" |
434 extra = "" |
435 self.w(u'<div class="columndiv"%s>'% extra) |
435 self.w(u'<div class="columndiv"%s>'% extra) |
436 for h in range(8, 20): |
436 for h in range(8, 20): |
437 self.w(u'<div class="hourline" style="top:%sex;">'%((h-7)*8)) |
437 self.w(u'<div class="hourline" style="top:%sex;">'%((h-7)*8)) |
499 __redirectrql=self.rset.printable_rql(), |
499 __redirectrql=self.rset.printable_rql(), |
500 __redirectparams=self.req.build_url_params(year=date.year, week=date.isocalendar()[1]), |
500 __redirectparams=self.req.build_url_params(year=date.year, week=date.isocalendar()[1]), |
501 __redirectvid=self.id |
501 __redirectvid=self.id |
502 ) |
502 ) |
503 |
503 |
504 self.w(u'<div class="tooltip" ondblclick="stopPropagation(event); window.location.assign(\'%s\'); return false;">' % html_escape(url)) |
504 self.w(u'<div class="tooltip" ondblclick="stopPropagation(event); window.location.assign(\'%s\'); return false;">' % xml_escape(url)) |
505 task.view('tooltip', w=self.w) |
505 task.view('tooltip', w=self.w) |
506 self.w(u'</div>') |
506 self.w(u'</div>') |
507 if task.start is None: |
507 if task.start is None: |
508 self.w(u'<div class="bottommarker">') |
508 self.w(u'<div class="bottommarker">') |
509 self.w(u'<div class="bottommarkerline" style="margin: 0px 3px 0px 3px; height: 1px;">') |
509 self.w(u'<div class="bottommarkerline" style="margin: 0px 3px 0px 3px; height: 1px;">') |