[CMF-checkins] SVN: CMF/branches/yuppie-formlib/CMFCalendar/ - replaced event views by formlib based forms

Yvo Schubbe y.2006_ at wcm-solutions.de
Thu Nov 2 13:26:57 EST 2006


Log message for revision 71031:
  - replaced event views by formlib based forms

Changed:
  U   CMF/branches/yuppie-formlib/CMFCalendar/browser/configure.zcml
  U   CMF/branches/yuppie-formlib/CMFCalendar/browser/event.py
  D   CMF/branches/yuppie-formlib/CMFCalendar/browser/templates/event.pt
  D   CMF/branches/yuppie-formlib/CMFCalendar/browser/templates/event_edit.pt
  U   CMF/branches/yuppie-formlib/CMFCalendar/locales/cmf_calendar.pot

-=-
Modified: CMF/branches/yuppie-formlib/CMFCalendar/browser/configure.zcml
===================================================================
--- CMF/branches/yuppie-formlib/CMFCalendar/browser/configure.zcml	2006-11-02 18:10:11 UTC (rev 71030)
+++ CMF/branches/yuppie-formlib/CMFCalendar/browser/configure.zcml	2006-11-02 18:26:56 UTC (rev 71031)
@@ -2,12 +2,18 @@
     xmlns="http://namespaces.zope.org/zope"
     xmlns:browser="http://namespaces.zope.org/browser">
 
+  <adapter factory=".event.EventSchemaAdapter"/>
+
+  <utility
+      component=".event.EventTypeVocabularyFactory"
+      name="AvailableEventTypes"
+      />
+
   <browser:page
       for="Products.CMFCalendar.interfaces.IEvent"
       layer="Products.CMFDefault.interfaces.ICMFDefaultSkin"
       name="view.html"
       class=".event.EventView"
-      template="templates/event.pt"
       permission="zope2.View"
       />
 
@@ -16,7 +22,6 @@
       layer="Products.CMFDefault.interfaces.ICMFDefaultSkin"
       name="edit.html"
       class=".event.EventEditView"
-      template="templates/event_edit.pt"
       permission="cmf.ModifyPortalContent"
       />
 

Modified: CMF/branches/yuppie-formlib/CMFCalendar/browser/event.py
===================================================================
--- CMF/branches/yuppie-formlib/CMFCalendar/browser/event.py	2006-11-02 18:10:11 UTC (rev 71030)
+++ CMF/branches/yuppie-formlib/CMFCalendar/browser/event.py	2006-11-02 18:26:56 UTC (rev 71031)
@@ -15,305 +15,161 @@
 $Id$
 """
 
-from DateTime.DateTime import DateTime
+from zope.app.form.browser import DatetimeI18nWidget
+from zope.app.schema.vocabulary import IVocabularyFactory
+from zope.component import adapts
+from zope.formlib import form
+from zope.interface import implements
+from zope.interface import Interface
+from zope.schema import Choice
+from zope.schema import Datetime
+from zope.schema import Field
+from zope.schema import Set
+from zope.schema import Tuple
+from zope.schema import Text
+from zope.schema import TextLine
+from zope.schema import URI
 
-from Products.CMFDefault.exceptions import ResourceLockedError
+from Products.CMFCore.utils import getToolByName
+from Products.CMFDefault.formlib.form import ContentEditFormBase
+from Products.CMFDefault.formlib.form import DisplayFormBase
+from Products.CMFDefault.formlib.schema import EmailLine
+from Products.CMFDefault.formlib.schema import ProxyFieldProperty
+from Products.CMFDefault.formlib.schema import SchemaAdapterBase
+from Products.CMFDefault.formlib.vocabulary import SimpleVocabulary
+
+from Products.CMFCalendar.interfaces import IMutableEvent
 from Products.CMFCalendar.utils import Message as _
 
-from Products.CMFDefault.browser.utils import decode
-from Products.CMFDefault.browser.utils import FormViewBase
-from Products.CMFDefault.browser.utils import memoize
-from Products.CMFDefault.browser.utils import ViewBase
 
+class EventTypeVocabulary(object):
 
-class EventView(ViewBase):
-
-    """View for IEvent.
+    """Vocabulary factory for available event types.
     """
 
-    # interface
+    implements(IVocabularyFactory)
 
-    @memoize
-    @decode
-    def contact_name(self):
-        return self.context.contact_name
+    def __call__(self, context):
+        context = getattr(context, 'context', context)
+        mdtool = getToolByName(context, 'portal_metadata')
+        items = [ (str(v), unicode(v), _(v))
+                  for v in mdtool.listAllowedSubjects(context) ]
+        return SimpleVocabulary.fromTitleItems(items)
 
-    @memoize
-    @decode
-    def location(self):
-        return self.context.location
+EventTypeVocabularyFactory = EventTypeVocabulary()
 
-    @memoize
-    @decode
-    def contact_email(self):
-        return self.context.contact_email
 
-    @memoize
-    @decode
-    def event_types(self):
-        return self.context.Subject()
+class IEventSchema(Interface):
 
-    @memoize
-    @decode
-    def contact_phone(self):
-        return self.context.contact_phone
-
-    @memoize
-    @decode
-    def event_url(self):
-        return self.context.event_url
-
-    @memoize
-    @decode
-    def start_date(self):
-        return DateTime(self.context.start()).Date()
-
-    @memoize
-    @decode
-    def start_time(self):
-        return DateTime(self.context.start()).Time()
-
-    @memoize
-    @decode
-    def stop_date(self):
-        return DateTime(self.context.end()).Date()
-
-    @memoize
-    @decode
-    def stop_time(self):
-        return DateTime(self.context.end()).Time()
-
-
-class EventEditView(FormViewBase):
-
-    """Edit view for IMutableEvent.
+    """Schema for event views.
     """
 
-    _BUTTONS = ({'id': 'change',
-                 'title': _(u'Change'),
-                 'transform': ('edit_control',),
-                 'redirect': ('portal_types', 'object/edit')},
-                {'id': 'change_and_view',
-                 'title': _(u'Change and View'),
-                 'transform': ('edit_control',),
-                 'redirect': ('portal_types', 'object/view')})
+    title = TextLine(
+        title=_(u'Title'),
+        required=False,
+        missing_value=u'',
+        max_length=100)
 
-    # interface
+    contact_name = TextLine(
+        title=_(u'Contact Name'),
+        required=False,
+        missing_value=u'',
+        max_length=100)
 
-    @memoize
-    @decode
-    def title(self):
-        title = self.request.form.get('title', None)
+    location = TextLine(
+        title=_(u'Location'),
+        required=False,
+        missing_value=u'',
+        max_length=100)
 
-        if title is None:
-            title = self.context.Title()
+    contact_email = EmailLine(
+        title=_(u'Contact Email'),
+        required=False)
 
-        return title
+    categories = Set(
+        title=_(u'Category'),
+        required=False,
+        missing_value=set(),
+        value_type=Choice(vocabulary="AvailableEventTypes"))
 
-    @memoize
-    @decode
-    def description(self):
-        description = self.request.form.get('description', None)
+    contact_phone = TextLine(
+        title=_(u'Contact Phone'),
+        required=False,
+        missing_value=u'',
+        max_length=100)
 
-        if description is None:
-            description = self.context.Description()
+    event_url = URI(
+        title=_(u'URL'),
+        required=False,
+        missing_value=u'',
+        max_length=100)
 
-        return description
+    start_date = Datetime(
+        title=_(u'From'),)
 
-    @memoize
-    @decode
-    def contact_name(self):
-        contact_name = self.request.form.get('contact_name', None)
+    stop_date = Datetime(
+        title=_(u'To'),)
 
-        if contact_name is None:
-            contact_name = self.context.contact_name
+    description = Text(
+        title=_(u'Description'),
+        required=False,
+        missing_value=u'')
 
-        return contact_name
 
-    @memoize
-    @decode
-    def location(self):
-        location = self.request.form.get('location', None)
+class EventSchemaAdapter(SchemaAdapterBase):
 
-        if location is None:
-            location = self.context.location
+    """Adapter for IMutableEvent.
+    """
 
-        return location
+    adapts(IMutableEvent)
+    implements(IEventSchema)
 
-    @memoize
-    @decode
-    def contact_email(self):
-        contact_email = self.request.form.get('contact_email', None)
+    title = ProxyFieldProperty(IEventSchema['title'], 'Title', 'setTitle')
+    contact_name = ProxyFieldProperty(IEventSchema['contact_name'])
+    location = ProxyFieldProperty(IEventSchema['location'])
+    contact_email = ProxyFieldProperty(IEventSchema['contact_email'])
+    categories = ProxyFieldProperty(IEventSchema['categories'],
+                                    'Subject', 'setSubject')
+    contact_phone = ProxyFieldProperty(IEventSchema['contact_phone'])
+    event_url = ProxyFieldProperty(IEventSchema['event_url'])
+    start_date = ProxyFieldProperty(IEventSchema['start_date'],
+                                    'start', 'setStartDate')
+    stop_date = ProxyFieldProperty(IEventSchema['stop_date'],
+                                   'end', 'setEndDate')
+    description = ProxyFieldProperty(IEventSchema['description'],
+                                     'Description', 'setDescription')
 
-        if contact_email is None:
-            contact_email = self.context.contact_email
 
-        return contact_email
+class EventViewMixin(object):
 
-    @memoize
-    @decode
-    def event_type(self):
-        event_type = self.request.form.get('event_type', None)
+    def setUpWidgets(self, ignore_request=False):
+        super(EventViewMixin,
+              self).setUpWidgets(ignore_request=ignore_request)
+        self.widgets['title'].split = True
+        self.widgets['contact_name'].split = True
+        self.widgets['location'].split = True
+        self.widgets['contact_email'].split = True
+        self.widgets['categories'].split = True
+        self.widgets['categories'].size = 4
+        self.widgets['contact_phone'].split = True
+        self.widgets['start_date'].split = True
+        self.widgets['stop_date'].split = True
+        self.widgets['description'].height = 5
 
-        if event_type is None:
-            event_type = self.context.Subject()
 
-        return event_type
+class EventView(EventViewMixin, DisplayFormBase):
 
-    @memoize
-    @decode
-    def contact_phone(self):
-        contact_phone = self.request.form.get('contact_phone', None)
+    """View for IEvent.
+    """
 
-        if contact_phone is None:
-            contact_phone = self.context.contact_phone
+    form_fields = form.FormFields(IEventSchema)
 
-        return contact_phone
 
-    @memoize
-    @decode
-    def event_url(self):
-        event_url = self.request.form.get('event_url', None)
+class EventEditView(EventViewMixin, ContentEditFormBase):
 
-        if event_url is None:
-            event_url = self.context.event_url
+    """Edit view for IMutableEvent.
+    """
 
-        return event_url
-
-    @memoize
-    @decode
-    def start_time(self):
-        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):
-        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):
-        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):
-        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):
-        effective_year = self.request.form.get('effectiveYear', None)
-
-        if effective_year is None:
-            effective_year = self.context.getStartStrings()['year']
-
-        return effective_year
-
-    @memoize
-    @decode
-    def effectiveMo(self):
-        effective_month = self.request.form.get('effectiveMo', None)
-
-        if effective_month is None:
-            effective_month = self.context.getStartStrings()['month']
-
-        return effective_month
-
-    @memoize
-    @decode
-    def effectiveDay(self):
-        effective_day = self.request.form.get('effectiveDay', None)
-
-        if effective_day is None:
-            effective_day = self.context.getStartStrings()['day']
-
-        return effective_day
-
-    @memoize
-    @decode
-    def expirationYear(self):
-        expiration_year = self.request.form.get('expirationYear', None)
-
-        if expiration_year is None:
-            expiration_year = self.context.getEndStrings()['year']
-
-        return expiration_year
-
-    @memoize
-    @decode
-    def expirationMo(self):
-        expiration_month = self.request.form.get('expirationMo', None)
-
-        if expiration_month is None:
-            expiration_month = self.context.getEndStrings()['month']
-
-        return expiration_month
-
-    @memoize
-    @decode
-    def expirationDay(self):
-        expiration_day = self.request.form.get('expirationDay', None)
-
-        if expiration_day is None:
-            expiration_day = self.context.getEndStrings()['day']
-
-        return expiration_day
-
-    # controllers
-
-    def edit_control( self
-                    , title=None
-                    , description=None
-                    , event_type=None
-                    , effectiveDay=None
-                    , effectiveMo=None
-                    , effectiveYear=None
-                    , expirationDay=None
-                    , expirationMo=None
-                    , expirationYear=None
-                    , start_time=None
-                    , startAMPM=None
-                    , stop_time=None
-                    , stopAMPM=None
-                    , location=None
-                    , contact_name=None
-                    , contact_email=None
-                    , contact_phone=None
-                    , event_url=None
-                    , **kw
-                    ):
-
-        try:
-            self.context.edit( title, description, event_type, effectiveDay
-                             , effectiveMo, effectiveYear, expirationDay
-                             , expirationMo, expirationYear, start_time
-                             , startAMPM, stop_time, stopAMPM, location
-                             , contact_name, contact_email, contact_phone
-                             , event_url)
-            return True, _(u'Event changed.')
-        except ResourceLockedError, errmsg:
-            return False, errmsg
-
+    form_fields = form.FormFields(IEventSchema)
+    form_fields['start_date'].custom_widget = DatetimeI18nWidget
+    form_fields['stop_date'].custom_widget = DatetimeI18nWidget

Deleted: CMF/branches/yuppie-formlib/CMFCalendar/browser/templates/event.pt
===================================================================
--- CMF/branches/yuppie-formlib/CMFCalendar/browser/templates/event.pt	2006-11-02 18:10:11 UTC (rev 71030)
+++ CMF/branches/yuppie-formlib/CMFCalendar/browser/templates/event.pt	2006-11-02 18:26:56 UTC (rev 71031)
@@ -1,74 +0,0 @@
-<html metal:use-macro="context/@@standard_macros/page">
-<head>
-
-<metal:slot fill-slot="style_slot">
-<tal:span tal:replace="structure context/getBaseTag" />
-</metal:slot>
-
-</head>
-<body>
-
-<metal:slot metal:fill-slot="body" i18n:domain="cmf_calendar">
-
-<table class="Event" border="0" cellpadding="5" width="100%" cellspacing="3">
- <tr>
-  <th width="10%" i18n:translate="">Event Name</th>
-  <td nowrap="nowrap" tal:content="view/title">Title</td>
-  <th width="10%" i18n:translate="">Contact Name</th>
-  <td nowrap="nowrap" tal:content="view/contact_name">contact_name</td>
- </tr>
- <tr>
-  <th width="10%" i18n:translate="">Location</th>
-  <td nowrap="nowrap" tal:content="view/location">location</td>
-  <th width="10%" i18n:translate="">Contact Email</th>
-  <td nowrap="nowrap" tal:condition="view/contact_email">
-   <a tal:attributes="href string:mailto:${view/contact_email}"
-      tal:content="view/contact_email"
-      href="mailto:contact_email">contact_email</a></td>
- </tr>
- <tr>
-  <th width="10%" i18n:translate="">Event type</th>
-  <td valign="top" nowrap="nowrap"><tal:loop
-      tal:repeat="event_type view/event_types"><tal:span
-       tal:content="event_type" i18n:translate="" /> </tal:loop></td>
-  <th width="10%" i18n:translate="">Contact Phone</th>
-  <td nowrap="nowrap" tal:content="view/contact_phone">contact_phone</td>
- </tr>
- <tr tal:condition="view/event_url">
-  <th width="10%" i18n:translate="">Event URL</th>
-  <td colspan="3" nowrap="nowrap"><a href="event_url"
-     tal:attributes="href view/event_url"
-     tal:content="view/event_url">event_url</a></td>
- </tr>
- <tr>
-  <td colspan="4"><hr /></td>
- </tr>
- <tr>
-  <th width="10%" i18n:translate="">Start Date</th>
-  <td tal:content="view/start_date">start</td>
-  <th width="10%" i18n:translate="">Stop Date</th>
-  <td tal:content="view/stop_date">end</td>
- </tr>
- <tr>
-  <th width="10%" i18n:translate="">Start Time</th>
-  <td tal:content="view/start_time">start</td>
-  <th width="10%" i18n:translate="">Stop Time</th>
-  <td tal:content="view/stop_time">end</td>
- </tr>
- <tr>
-  <td colspan="4"><hr /></td>
- </tr>
- <tr>
-  <th width="10%" i18n:translate="">Description</th>
-  <td colspan="3" valign="top" nowrap="nowrap"
-     tal:content="view/description">Description</td>
- </tr>
- <tr>
-  <td colspan="4">&nbsp;</td>
- </tr>
-</table>
-
-</metal:slot>
-
-</body>
-</html>

Deleted: CMF/branches/yuppie-formlib/CMFCalendar/browser/templates/event_edit.pt
===================================================================
--- CMF/branches/yuppie-formlib/CMFCalendar/browser/templates/event_edit.pt	2006-11-02 18:10:11 UTC (rev 71030)
+++ CMF/branches/yuppie-formlib/CMFCalendar/browser/templates/event_edit.pt	2006-11-02 18:26:56 UTC (rev 71031)
@@ -1,175 +0,0 @@
-<html metal:use-macro="context/@@standard_macros/page">
-<body>
-
-<metal:slot metal:fill-slot="body" i18n:domain="cmf_calendar">
-<h1 i18n:translate="">Edit: <tal:span
-    tal:content="view/title" i18n:name="obj_title">Title</tal:span></h1>
-
-<form action="event_edit_form" method="post"
-      tal:attributes="action view/form_action">
-<table class="FormLayout">
- <tr>
-  <th i18n:translate="">Event Name</th>
-  <td>
-   <input type="text"
-      name="title" maxlength="100" size="35" value="Title"
-      tal:attributes="value view/title" />
-  </td>
-  <th i18n:translate="">Contact Name</th>
-  <td>
-   <input type="text"
-      name="contact_name" maxlength="100" size="35" value="contact_name"
-      tal:attributes="value view/contact_name" />
-  </td>
- </tr>
- <tr>
-  <th i18n:translate="">Location</th>
-  <td>
-   <input type="text"
-      name="location" maxlength="100" size="35" value="location"
-      tal:attributes="value view/location" />
-  </td>
-  <th i18n:translate="">Contact Email</th>
-  <td>
-   <input type="text"
-      name="contact_email" maxlength="100" size="35" value="contact_email"
-      tal:attributes="value view/contact_email" />
-  </td>
- </tr>
- <tr>
-  <th i18n:translate="">Event type</th>
-  <td>
-   <select name="event_type:list" multiple="multiple">
-    <option tal:replace="nothing">Event Type 1</option>
-    <option tal:replace="nothing">Event Type 2</option>
-    <option tal:replace="nothing">...</option>
-    <option value="subj"
-       tal:repeat="subj python: context.portal_metadata.listAllowedSubjects(context)"
-       tal:attributes="value subj;
-                       selected python: subj in view.event_type()"
-       tal:content="subj" i18n:translate="">Event Type N</option>
-   </select>
-  </td>
-  <th i18n:translate="">Contact Phone</th>
-  <td>
-   <input type="text" name="contact_phone" maxlength="100" size="35"
-      value="contact_phone" id="cb_contact_phone"
-      tal:attributes="value view/contact_phone" />
-  </td>
- </tr>
- <tr>
-  <th i18n:translate="">Event URL</th>
-  <td colspan="3">
-   <input type="text" name="event_url" size="55" maxlength="100"
-      value="event_url"
-      tal:attributes="value view/event_url" />
-  </td>
- </tr>
- <tr>
-  <th i18n:translate="">Start Date</th>
-  <td>
-   <select name="effectiveYear">
-    <option value=""
-       tal:repeat="year context/buildYears"
-       tal:attributes="value year;
-                       selected python: year == view.effectiveYear()"
-       tal:content="year">Year</option>
-   </select>
-   &nbsp;
-   <select name="effectiveMo">
-    <option value=""
-       tal:repeat="month context/buildMonths"
-       tal:attributes="value month;
-                       selected python: month == view.effectiveMo()"
-       tal:content="month">Month</option>
-   </select>
-   &nbsp;
-   <select name="effectiveDay">
-    <option value=""
-       tal:repeat="day context/buildDays"
-       tal:attributes="value day;
-                       selected python: day == view.effectiveDay()"
-       tal:content="day">Day</option>
-   </select>
-  </td>
-  <th i18n:translate="">Stop Date</th>
-  <td>
-   <select name="expirationYear">
-    <option value=""
-       tal:repeat="year context/buildYears"
-       tal:attributes="value year;
-                       selected python: year == view.expirationYear()"
-       tal:content="year">Day</option>
-   </select>
-   &nbsp;
-   <select name="expirationMo">
-    <option value=""
-       tal:repeat="month context/buildMonths"
-       tal:attributes="value month;
-                       selected python: month == view.expirationMo()"
-       tal:content="month">Month</option>
-   </select>
-   &nbsp;
-   <select name="expirationDay">
-    <option value=""
-       tal:repeat="day context/buildDays"
-       tal:attributes="value day;
-                       selected python: day == view.expirationDay()"
-       tal:content="day">Day</option>
-   </select>
-  </td>
- </tr>
- <tr>
-  <th i18n:translate="">Start Time</th>
-  <td>
-   <select name="start_time">
-    <option value=""
-       tal:repeat="bt context/buildTimes"
-       tal:attributes="value bt; selected python: bt == view.start_time()"
-       tal:content="bt">start time</option>
-   </select>
-   &nbsp;
-   <input type="radio" name="startAMPM" value="am" id="cb_start_am"
-      tal:attributes="checked python: view.startAMPM() == 'am'" />
-   <label for="cb_start_am" i18n:translate="">am</label>
-   <input type="radio" name="startAMPM" value="pm" id="cb_start_pm"
-      tal:attributes="checked python: view.startAMPM() == 'pm'" />
-   <label for="cb_start_pm" i18n:translate="">pm</label>
-  </td>
-  <th i18n:translate="">Stop Time</th>
-  <td>
-   <select name="stop_time">
-   <option value=""
-      tal:repeat="bt context/buildTimes"
-      tal:attributes="value bt; selected python: bt == view.stop_time()"
-      tal:content="bt">end time</option>
-   </select>
-   &nbsp;
-   <input type="radio" name="stopAMPM" value="am" id="cb_stop_am"
-      tal:attributes="checked python: view.stopAMPM() == 'am'" />
-   <label for="cb_stop_am" i18n:translate="">am</label>
-   <input type="radio" name="stopAMPM" value="pm" id="cb_stop_pm"
-      tal:attributes="checked python: view.stopAMPM() == 'pm'" />
-   <label for="cb_stop_pm" i18n:translate="">pm</label>
-  </td>
- </tr>
- <tr>
-  <th i18n:translate="">Description</th>
-  <td class="TextField" colspan="3">
-   <textarea name="description:text" rows="5" cols="70" wrap="soft"
-      tal:content="view/description"></textarea>
-  </td>
- </tr>
- <tr>
-  <td>&nbsp;</td>
-  <td colspan="3">
-   <metal:macro metal:use-macro="context/@@form_widget/buttons" />
-  </td>
- </tr>
-</table>
-</form>
-
-</metal:slot>
-
-</body>
-</html>

Modified: CMF/branches/yuppie-formlib/CMFCalendar/locales/cmf_calendar.pot
===================================================================
--- CMF/branches/yuppie-formlib/CMFCalendar/locales/cmf_calendar.pot	2006-11-02 18:10:11 UTC (rev 71030)
+++ CMF/branches/yuppie-formlib/CMFCalendar/locales/cmf_calendar.pot	2006-11-02 18:26:56 UTC (rev 71031)
@@ -12,175 +12,166 @@
 ##############################################################################
 msgid ""
 msgstr ""
-"Project-Id-Version: CMF 2.0\n"
+"Project-Id-Version: CMF 2.1\n"
 "POT-Creation-Date: $Date$\n"
 "Language-Team: CMF Developers <zope-cmf at zope.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: CMFCalendar/browser/event.py:316
-#: CMFCalendar/skins/zpt_calendar/event_edit_control.py:11
-msgid "Event changed."
+#: CMFCalendar/browser/event.py:102
+msgid "URL"
 msgstr ""
 
-#: CMFCalendar/browser/event.py:93
-#: CMFCalendar/skins/zpt_calendar/event_edit_form.py:50
-msgid "Change"
+#: CMFCalendar/browser/event.py:108
+msgid "From"
 msgstr ""
 
-#: CMFCalendar/browser/event.py:97
-#: CMFCalendar/skins/zpt_calendar/event_edit_form.py:51
-msgid "Change and View"
+#: CMFCalendar/browser/event.py:111
+msgid "To"
 msgstr ""
 
-#: CMFCalendar/browser/templates/calendar_widgets.pt:13
-#: CMFCalendar/skins/zpt_calendar/calendarBox.pt:12
-msgid "CMF Calendar"
+#: CMFCalendar/browser/event.py:114
+#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:160
+#: CMFCalendar/skins/zpt_calendar/event_view_template.pt:61
+msgid "Description"
 msgstr ""
 
-#: CMFCalendar/browser/templates/calendar_widgets.pt:29
-#: CMFCalendar/browser/templates/calendar_widgets.pt:42
-#: CMFCalendar/browser/templates/event.pt:32
-#: CMFCalendar/browser/templates/event_edit.pt:46
-#: CMFCalendar/skins/zpt_calendar/calendarBox.pt:28
-#: CMFCalendar/skins/zpt_calendar/calendarBox.pt:41
-#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:49
-#: CMFCalendar/skins/zpt_calendar/event_view_template.pt:31
-msgid "${DYNAMIC_CONTENT}"
+#: CMFCalendar/browser/event.py:68
+msgid "Title"
 msgstr ""
 
-#: CMFCalendar/browser/templates/event.pt:15
-#: CMFCalendar/browser/templates/event_edit.pt:12
-#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:15
-#: CMFCalendar/skins/zpt_calendar/event_view_template.pt:14
-msgid "Event Name"
-msgstr ""
-
-#: CMFCalendar/browser/templates/event.pt:17
-#: CMFCalendar/browser/templates/event_edit.pt:18
+#: CMFCalendar/browser/event.py:74
 #: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:21
 #: CMFCalendar/skins/zpt_calendar/event_view_template.pt:16
 msgid "Contact Name"
 msgstr ""
 
-#: CMFCalendar/browser/templates/event.pt:21
-#: CMFCalendar/browser/templates/event_edit.pt:26
+#: CMFCalendar/browser/event.py:80
 #: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:29
 #: CMFCalendar/skins/zpt_calendar/event_view_template.pt:20
 msgid "Location"
 msgstr ""
 
-#: CMFCalendar/browser/templates/event.pt:23
-#: CMFCalendar/browser/templates/event_edit.pt:32
+#: CMFCalendar/browser/event.py:86
 #: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:35
 #: CMFCalendar/skins/zpt_calendar/event_view_template.pt:22
 msgid "Contact Email"
 msgstr ""
 
-#: CMFCalendar/browser/templates/event.pt:30
-#: CMFCalendar/browser/templates/event_edit.pt:40
-#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:43
-#: CMFCalendar/skins/zpt_calendar/event_view_template.pt:29
-msgid "Event type"
+#: CMFCalendar/browser/event.py:90
+msgid "Category"
 msgstr ""
 
-#: CMFCalendar/browser/templates/event.pt:34
-#: CMFCalendar/browser/templates/event_edit.pt:53
+#: CMFCalendar/browser/event.py:96
 #: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:56
 #: CMFCalendar/skins/zpt_calendar/event_view_template.pt:33
 msgid "Contact Phone"
 msgstr ""
 
-#: CMFCalendar/browser/templates/event.pt:38
-#: CMFCalendar/browser/templates/event_edit.pt:61
-#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:64
-#: CMFCalendar/skins/zpt_calendar/event_view_template.pt:37
-msgid "Event URL"
+#: CMFCalendar/browser/templates/calendar_widgets.pt:13
+#: CMFCalendar/skins/zpt_calendar/calendarBox.pt:12
+msgid "CMF Calendar"
 msgstr ""
 
-#: CMFCalendar/browser/templates/event.pt:47
-#: CMFCalendar/browser/templates/event_edit.pt:69
-#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:72
-#: CMFCalendar/skins/zpt_calendar/event_view_template.pt:46
-msgid "Start Date"
+#: CMFCalendar/browser/templates/calendar_widgets.pt:29
+#: CMFCalendar/browser/templates/calendar_widgets.pt:42
+#: CMFCalendar/skins/zpt_calendar/calendarBox.pt:28
+#: CMFCalendar/skins/zpt_calendar/calendarBox.pt:41
+#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:49
+#: CMFCalendar/skins/zpt_calendar/event_view_template.pt:31
+msgid "${DYNAMIC_CONTENT}"
 msgstr ""
 
-#: CMFCalendar/browser/templates/event.pt:49
-#: CMFCalendar/browser/templates/event_edit.pt:95
-#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:98
-#: CMFCalendar/skins/zpt_calendar/event_view_template.pt:48
-msgid "Stop Date"
+#: CMFCalendar/profiles/default/types/Event.xml:5
+msgid "Event"
 msgstr ""
 
-#: CMFCalendar/browser/templates/event.pt:53
-#: CMFCalendar/browser/templates/event_edit.pt:123
-#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:126
-#: CMFCalendar/skins/zpt_calendar/event_view_template.pt:52
-msgid "Start Time"
+#: CMFCalendar/profiles/default/types/Event.xml:6
+msgid "Events are objects for use in Calendar topical queries on the catalog."
 msgstr ""
 
-#: CMFCalendar/browser/templates/event.pt:55
-#: CMFCalendar/browser/templates/event_edit.pt:139
-#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:142
-#: CMFCalendar/skins/zpt_calendar/event_view_template.pt:54
-msgid "Stop Time"
+#: CMFCalendar/setuphandlers.py:42
+msgid "Appointment"
 msgstr ""
 
-#: CMFCalendar/browser/templates/event.pt:62
-#: CMFCalendar/browser/templates/event_edit.pt:157
-#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:160
-#: CMFCalendar/skins/zpt_calendar/event_view_template.pt:61
-msgid "Description"
+#: CMFCalendar/setuphandlers.py:43
+msgid "Convention"
 msgstr ""
 
-#: CMFCalendar/browser/templates/event_edit.pt:134
-#: CMFCalendar/browser/templates/event_edit.pt:150
+#: CMFCalendar/setuphandlers.py:44
+msgid "Meeting"
+msgstr ""
+
+#: CMFCalendar/setuphandlers.py:45
+msgid "Social Event"
+msgstr ""
+
+#: CMFCalendar/setuphandlers.py:46
+msgid "Work"
+msgstr ""
+
+#: CMFCalendar/skins/zpt_calendar/event_edit_control.py:11
+msgid "Event changed."
+msgstr ""
+
+#: CMFCalendar/skins/zpt_calendar/event_edit_form.py:50
+msgid "Change"
+msgstr ""
+
+#: CMFCalendar/skins/zpt_calendar/event_edit_form.py:51
+msgid "Change and View"
+msgstr ""
+
+#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:126
+#: CMFCalendar/skins/zpt_calendar/event_view_template.pt:52
+msgid "Start Time"
+msgstr ""
+
 #: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:137
 #: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:153
 msgid "am"
 msgstr ""
 
-#: CMFCalendar/browser/templates/event_edit.pt:137
-#: CMFCalendar/browser/templates/event_edit.pt:153
 #: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:140
 #: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:156
 msgid "pm"
 msgstr ""
 
-#: CMFCalendar/browser/templates/event_edit.pt:5
-#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:5
-msgid "Edit: ${obj_title}"
+#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:142
+#: CMFCalendar/skins/zpt_calendar/event_view_template.pt:54
+msgid "Stop Time"
 msgstr ""
 
-#: CMFCalendar/profiles/default/types/Event.xml:5
-msgid "Event"
+#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:15
+#: CMFCalendar/skins/zpt_calendar/event_view_template.pt:14
+msgid "Event Name"
 msgstr ""
 
-#: CMFCalendar/profiles/default/types/Event.xml:6
-msgid "Events are objects for use in Calendar topical queries on the catalog."
+#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:43
+#: CMFCalendar/skins/zpt_calendar/event_view_template.pt:29
+msgid "Event type"
 msgstr ""
 
-#: CMFCalendar/setuphandlers.py:42
-msgid "Appointment"
+#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:5
+msgid "Edit: ${obj_title}"
 msgstr ""
 
-#: CMFCalendar/setuphandlers.py:43
-msgid "Convention"
+#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:64
+#: CMFCalendar/skins/zpt_calendar/event_view_template.pt:37
+msgid "Event URL"
 msgstr ""
 
-#: CMFCalendar/setuphandlers.py:44
-msgid "Meeting"
+#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:72
+#: CMFCalendar/skins/zpt_calendar/event_view_template.pt:46
+msgid "Start Date"
 msgstr ""
 
-#: CMFCalendar/setuphandlers.py:45
-msgid "Social Event"
+#: CMFCalendar/skins/zpt_calendar/event_edit_template.pt:98
+#: CMFCalendar/skins/zpt_calendar/event_view_template.pt:48
+msgid "Stop Date"
 msgstr ""
 
-#: CMFCalendar/setuphandlers.py:46
-msgid "Work"
-msgstr ""
-
 msgid "Su"
 msgstr ""
 



More information about the CMF-checkins mailing list