web/views/calendar.py
branchstable
changeset 2312 af4d8f75c5db
parent 1977 606923dff11b
child 2996 866a2c135c33
equal deleted inserted replaced
2311:f178182b1305 2312:af4d8f75c5db
     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">&lt;&lt;</a></th><th colspan="5">%s %s</th>'
   245         self.w(u'<tr><th><a href="%s">&lt;&lt;</a></th><th colspan="5">%s %s</th>'
   246                u'<th><a href="%s">&gt;&gt;</a></th></tr>' %
   246                u'<th><a href="%s">&gt;&gt;</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'&nbsp;')
   296             self.w(u'&nbsp;')
   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"&nbsp;")
   315                 self.w(u"&nbsp;")
   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">&lt;&lt;</a></th><th colspan="5">%s %s %s</th>'
   389         self.w(u'<th><a href="%s">&lt;&lt;</a></th><th colspan="5">%s %s %s</th>'
   390                u'<th><a href="%s">&gt;&gt;</a></th></tr>' %
   390                u'<th><a href="%s">&gt;&gt;</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;">')