[Checkins] SVN: CMF/branches/2.0/CMFCalendar/browser/ - cleanups and improvements to the CMFCalendar views following suggestions

Jens Vagelpohl jens at dataflake.org
Tue Apr 4 17:19:31 EDT 2006


Log message for revision 66451:
  - cleanups and improvements to the CMFCalendar views following suggestions
    from Yvo Schubbe
  
  

Changed:
  U   CMF/branches/2.0/CMFCalendar/browser/TODO.txt
  U   CMF/branches/2.0/CMFCalendar/browser/calendar.py
  U   CMF/branches/2.0/CMFCalendar/browser/event.py
  U   CMF/branches/2.0/CMFCalendar/browser/templates/calendar_day.pt
  U   CMF/branches/2.0/CMFCalendar/browser/templates/event_edit.pt

-=-
Modified: CMF/branches/2.0/CMFCalendar/browser/TODO.txt
===================================================================
--- CMF/branches/2.0/CMFCalendar/browser/TODO.txt	2006-04-04 21:09:30 UTC (rev 66450)
+++ CMF/branches/2.0/CMFCalendar/browser/TODO.txt	2006-04-04 21:19:31 UTC (rev 66451)
@@ -2,7 +2,11 @@
 
   [x] @@calendar_day.html:
 
-      [x] calendar_day_view.py -> CalendarView.dayInfo
+      [x] calendar_day_view.py -> CalendarView.viewDay
+                                  CalendarView.formattedDate
+                                  CalendarView.eventsForDay
+                                  CalendarView.previousDayURL
+                                  CalendarView.nextDayURL
       [x] calendar_day_view_template.pt -> templates/calendar_day.pt
       [x] getEndAsString.py -> CalendarView.getEndAsString
       [x] getStartAsString.py -> CalendarView.getStartAsString

Modified: CMF/branches/2.0/CMFCalendar/browser/calendar.py
===================================================================
--- CMF/branches/2.0/CMFCalendar/browser/calendar.py	2006-04-04 21:09:30 UTC (rev 66450)
+++ CMF/branches/2.0/CMFCalendar/browser/calendar.py	2006-04-04 21:19:31 UTC (rev 66451)
@@ -32,56 +32,66 @@
     """ Helper class for calendar-related templates
     """
 
-    @memoize
     @decode
-    def dayInfo(self):
-        """ Event info for a specific day
-        """
-        info = {}
-        caltool = self._getTool('portal_calendar')
-        view_url = self._getViewURL()
-        date_string = self.request.get('date',DateTime().aCommon()[:12])
-        thisDay = DateTime(date_string)
-
-        info['previous_url'] = '%s?date=%s' % (view_url, (thisDay-1).Date())
-        info['date'] = thisDay.aCommon()[:12]
-        info['next_url'] =  '%s?date=%s' % (view_url, (thisDay+1).Date())
-        
-        items = [ {'title': item.Title,
-                   'url': item.getURL(),
-                   'start': self.getStartAsString(thisDay, item),
-                   'stop': self.getEndAsString(thisDay, item)}
-                  for item in caltool.getEventsForThisDay(thisDay) ]
-        
-        info['listItemInfos'] = tuple(items)
-        
-        return info
-
-    @memoize
-    @decode
-    def getStartAsString(self, day, event):
+    def getStartAsString(self, day, event_brain):
         """ Retrieve formatted start string
         """
+        event_start = event_brain.getObject().start()
         first_date = DateTime(day.Date()+" 00:00:00")
         
-        if event.start < first_date:
-            return event.start.aCommon()[:12]
+        if event_start < first_date:
+            return event_start.aCommon()[:12]
         else:
-            return event.start.TimeMinutes()
+            return event_start.TimeMinutes()
 
-    @memoize
     @decode
-    def getEndAsString(self, day, event):
+    def getEndAsString(self, day, event_brain):
         """ Retrieve formatted end string
         """
+        event_end = event_brain.getObject().end()
         last_date = DateTime(day.Date()+" 23:59:59")
         
-        if event.end > last_date:
-            return event.end.aCommon()[:12]
+        if event_end > last_date:
+            return event_end.aCommon()[:12]
         else:
-            return event.end.TimeMinutes()
+            return event_end.TimeMinutes()
 
     @memoize
+    def viewDay(self):
+        """ Return a DateTime for a passed-in date or today
+        """
+        date = self.request.get('date', None) or DateTime().aCommon()[:12]
+
+        return DateTime(date)
+
+    def formattedDate(self, day):
+        """ Return a simple formatted date string
+        """
+        return day.aCommon()[:12]
+
+    def eventsForDay(self, day):
+        """ Get all event catalog records for a specific day
+        """
+        caltool = self._getTool('portal_calendar')
+
+        return caltool.getEventsForThisDay(day)
+
+    @memoize
+    def previousDayURL(self, day):
+        """ URL to the previous day's view
+        """
+        view_url = self._getViewURL()
+
+        return '%s?date=%s' % (view_url, (day-1).Date())
+
+    @memoize
+    def nextDayURL(self, day):
+        """ URL to the next day's view
+        """
+        view_url = self._getViewURL()
+
+        return '%s?date=%s' % (view_url, (day+1).Date())
+
     @decode
     def getNextDayLink(self, base_url, day):
         """ Return URL for the next day link
@@ -90,7 +100,6 @@
         
         return '%s?date=%s' % (base_url, day.Date())
 
-    @memoize
     @decode
     def getPreviousDayLink(self, base_url, day):
         """ Return URL for the previous day link

Modified: CMF/branches/2.0/CMFCalendar/browser/event.py
===================================================================
--- CMF/branches/2.0/CMFCalendar/browser/event.py	2006-04-04 21:09:30 UTC (rev 66450)
+++ CMF/branches/2.0/CMFCalendar/browser/event.py	2006-04-04 21:19:31 UTC (rev 66451)
@@ -18,7 +18,7 @@
 from DateTime.DateTime import DateTime
 
 from Products.CMFDefault.exceptions import ResourceLockedError
-from Products.CMFDefault.utils import Message as _
+from Products.CMFCalendar.utils import Message as _
 
 from Products.CMFDefault.browser.utils import decode
 from Products.CMFDefault.browser.utils import FormViewBase
@@ -103,109 +103,135 @@
     @memoize
     @decode
     def title(self):
-        return self.request.form.get('title', self.context.Title())
+        form = self.request.form
+        return form.get('title', None) or self.context.Title()
 
     @memoize
     @decode
     def description(self):
-        return self.request.form.get('description', self.context.Description())
+        form = self.request.form
+        return form.get('description', None) or self.context.Description()
 
     @memoize
     @decode
     def contact_name(self):
-        return self.request.form.get('contact_name', self.context.contact_name)
+        form = self.request.form
+        return form.get('contact_name', None) or self.context.contact_name
 
     @memoize
     @decode
     def location(self):
-        return self.request.form.get('location', self.context.location)
+        form = self.request.form
+        return form.get('location', None) or self.context.location
 
     @memoize
     @decode
     def contact_email(self):
-        return self.request.form.get( 'contact_email'
-                                    , self.context.contact_email
-                                    )
+        form = self.request.form
+        return form.get('contact_email', None) or self.context.contact_email
 
     @memoize
     @decode
     def event_type(self):
-        return self.request.form.get('event_type', self.context.Subject())
+        form = self.request.form
+        return form.get('event_type', None) or self.context.Subject()
 
     @memoize
     @decode
     def contact_phone(self):
-        return self.request.form.get( 'contact_phone'
-                                    , self.context.contact_phone
-                                    )
+        form = self.request.form
+        return form.get('contact_phone', None) or self.context.contact_phone
 
     @memoize
     @decode
     def event_url(self):
-        return self.request.form.get('event_url', self.context.event_url)
+        form = self.request.form
+        return form.get('event_url', None) or self.context.event_url
 
     @memoize
     @decode
     def start_time(self):
-        time_strings = self.context.getStartTimeString().split()
-        return self.request.form.get('start_time', time_strings[0])
+        start_string = self.request.form.get('start_time', None)
 
+        if start_string is None:
+            start_string = self.context.getStartTimeString().split()[0]
+
+        return start_string
+
     @memoize
     @decode
     def startAMPM(self):
-        time_strings = self.context.getStartTimeString().split()
-        AMPM = (len(time_strings) == 2 and time_strings[1] or 'pm')
-        return self.request.form.get('startAMPM', AMPM)
+        start_ampm = self.request.form.get('startAMPM', None)
 
+        if start_ampm is None:
+            time_strings = self.context.getStartTimeString().split()
+            start_ampm = (len(time_strings) == 2 and time_strings[1] or 'pm')
+
+        return start_ampm
+
     @memoize
     @decode
     def stop_time(self):
-        time_strings = self.context.getStopTimeString().split()
-        return self.request.form.get('stop_time', time_strings[0])
+        stop_string = self.request.form.get('stop_time', None)
 
+        if stop_string is None:
+            stop_string = self.context.getStopTimeString().split()[0]
+
+        return stop_string
+
     @memoize
     @decode
     def stopAMPM(self):
-        time_strings = self.context.getStopTimeString().split()
-        AMPM = (len(time_strings) == 2 and time_strings[1] or 'pm')
-        return self.request.form.get('stopAMPM', AMPM)
+        stop_ampm = self.request.form.get('stopAMPM', None)
 
+        if stop_ampm is None:
+            time_strings = self.context.getStopTimeString().split()
+            stop_ampm = (len(time_strings) == 2 and time_strings[1] or 'pm')
+
+        return stop_ampm
+
     @memoize
     @decode
     def effectiveYear(self):
-        date_strings = self.context.getStartStrings()
-        return self.request.form.get('effectiveYear', date_strings['year'])
+        eff_year = self.request.form.get('effectiveYear', None)
 
+        return eff_year or self.context.getStartStrings()['year']
+
     @memoize
     @decode
     def effectiveMo(self):
-        date_strings = self.context.getStartStrings()
-        return self.request.form.get('effectiveMo', date_strings['month'])
+        eff_month = self.request.form.get('effectiveMo', None)
 
+        return eff_month or self.context.getStartStrings()['month']
+
     @memoize
     @decode
     def effectiveDay(self):
-        date_strings = self.context.getStartStrings()
-        return self.request.form.get('effectiveDay', date_strings['day'])
+        eff_day = self.request.form.get('effectiveDay', None)
 
+        return eff_day or self.context.getStartStrings()['day']
+
     @memoize
     @decode
     def expirationYear(self):
-        date_strings = self.context.getEndStrings()
-        return self.request.form.get('expirationYear', date_strings['year'])
+        exp_year = self.request.form.get('expirationYear', None)
 
+        return exp_year or self.context.getEndStrings()['year']
+
     @memoize
     @decode
     def expirationMo(self):
-        date_strings = self.context.getEndStrings()
-        return self.request.form.get('expirationMo', date_strings['month'])
+        exp_month = self.request.form.get('expirationMo', None)
 
+        return exp_month or self.context.getEndStrings()['month']
+
     @memoize
     @decode
     def expirationDay(self):
-        date_strings = self.context.getEndStrings()
-        return self.request.form.get('expirationDay', date_strings['day'])
+        exp_day = self.request.form.get('expirationDay', None)
 
+        return exp_day or self.context.getEndStrings()['day']
+
     # controllers
 
     def edit_control( self

Modified: CMF/branches/2.0/CMFCalendar/browser/templates/calendar_day.pt
===================================================================
--- CMF/branches/2.0/CMFCalendar/browser/templates/calendar_day.pt	2006-04-04 21:09:30 UTC (rev 66450)
+++ CMF/branches/2.0/CMFCalendar/browser/templates/calendar_day.pt	2006-04-04 21:19:31 UTC (rev 66451)
@@ -12,29 +12,35 @@
 
 <div class="dayViewBox" metal:define-macro="dayViewBox">
 <table class="dayView" cellpadding="0" cellspacing="0" border="0"
-       tal:define="day_info view/dayInfo">
+       tal:define="thisDay view/viewDay;
+                   events python: view.eventsForDay(thisDay)">
  <tr>
   <th>
-   <a href="#" tal:attributes="href day_info/previous_url">&laquo;</a>
+   <a href="#" 
+      tal:attributes="href python: view.previousDayURL(thisDay)">&laquo;</a>
   </th>
-  <th colspan="3" nowrap="nowrap" tal:content="day_info/date">Date Heading</th>
+  <th colspan="3" nowrap="nowrap" 
+      tal:content="python: view.formattedDate(thisDay)">Date Heading</th>
   <th>
-   <a href="#" tal:attributes="href day_info/next_url">&raquo;</a>
+   <a href="#" 
+      tal:attributes="href python: view.nextDayURL(thisDay)">&raquo;</a>
   </th>
  </tr>
- <tal:loop tal:repeat="item_info day_info/listItemInfos">
+ <tal:loop tal:repeat="item_info python: view.eventsForDay(thisDay)">
  <tr>
   <td class="heading" colspan="5" nowrap="nowrap">
-   <a href="#" tal:attributes="href item_info/url"
-      tal:content="item_info/title">event title</a>
+   <a href="#" tal:attributes="href item_info/getURL"
+      tal:content="item_info/Title">event title</a>
   </td>
  </tr>
  <tr>
   <td class="startDate" colspan="2" nowrap="nowrap"
-     tal:content="item_info/start">Event Start</td>
+      tal:content="python: view.getStartAsString(thisDay, item_info)"
+      >Event Start</td>
   <td nowrap="nowrap"> -- </td>
   <td class="endDate" colspan="2" nowrap="nowrap"
-     tal:content="item_info/stop">Event End</td>
+      tal:content="python: view.getEndAsString(thisDay, item_info)"
+      >Event End</td>
  </tr>
  </tal:loop>
 </table>

Modified: CMF/branches/2.0/CMFCalendar/browser/templates/event_edit.pt
===================================================================
--- CMF/branches/2.0/CMFCalendar/browser/templates/event_edit.pt	2006-04-04 21:09:30 UTC (rev 66450)
+++ CMF/branches/2.0/CMFCalendar/browser/templates/event_edit.pt	2006-04-04 21:19:31 UTC (rev 66451)
@@ -5,8 +5,6 @@
 <h1 i18n:translate="">Edit: <tal:span
     tal:content="view/title" i18n:name="obj_title">Title</tal:span></h1>
 
-<div class="Desktop">
-
 <form action="event_edit_form" method="post"
       tal:attributes="action view/form_action">
 <table class="FormLayout">
@@ -171,7 +169,6 @@
 </table>
 </form>
 
-</div>
 </metal:slot>
 
 </body>



More information about the Checkins mailing list