[Checkins] SVN: zc.datetimewidget/branches/gintas-dateranges/src/zc/datetimewidget/ Preserve multiselections after calendar is closed.

Gintautas Miliauskas gintas at pov.lt
Fri Sep 1 09:18:39 EDT 2006


Log message for revision 69914:
  Preserve multiselections after calendar is closed.
  

Changed:
  U   zc.datetimewidget/branches/gintas-dateranges/src/zc/datetimewidget/datetimewidget.py
  U   zc.datetimewidget/branches/gintas-dateranges/src/zc/datetimewidget/datetimewidget.txt
  U   zc.datetimewidget/branches/gintas-dateranges/src/zc/datetimewidget/resources/datetimewidget.js

-=-
Modified: zc.datetimewidget/branches/gintas-dateranges/src/zc/datetimewidget/datetimewidget.py
===================================================================
--- zc.datetimewidget/branches/gintas-dateranges/src/zc/datetimewidget/datetimewidget.py	2006-09-01 13:14:58 UTC (rev 69913)
+++ zc.datetimewidget/branches/gintas-dateranges/src/zc/datetimewidget/datetimewidget.py	2006-09-01 13:18:39 UTC (rev 69914)
@@ -167,7 +167,8 @@
 class CalendarWidgetConfiguration(object):
     implements(ICalendarWidgetConfiguration)
 
-    def __init__(self, **kw):
+    def __init__(self, name, **kw):
+        self.name = name.replace('.', '_')
         self.multiple = False
         self.enabled_weekdays = None
         for name, field in getFieldsInOrder(ICalendarWidgetConfiguration):
@@ -206,9 +207,9 @@
                 row = '  %s: %s,' % (name, value_repr)
                 rows.append(row)
         if self.multiple:
-            rows.append('  multiple: [],') # TODO: add current values
-            rows.append('  onClose: getMultipleDateClosedHandler("%s"),'
-                        % self.inputField)
+            rows.append('  multiple: multi_%s,' % self.name) # TODO: add current values
+            rows.append('  onClose: getMultipleDateClosedHandler('
+                        '"%s", multi_%s),' % (self.inputField, self.name))
         if self.enabled_weekdays is not None:
             rows.append('  dateStatusFunc: enabledWeekdays([%s]),'
                         % ', '.join(str(weekday)
@@ -223,6 +224,7 @@
 <input type="button" value="..." id="%(trigger_name)s">
 <script type="text/javascript">
   %(langDef)s
+  %(multiple_init)s
   %(calendarSetup)s
 </script>
 """
@@ -247,14 +249,21 @@
         widget_html = super(DatetimeBase, self).__call__()
         conf = self._configuration()
         trigger_name = '%s_trigger' % self.name
+
+        multiple_init = ''
+        if conf.multiple:
+            multiple_init = 'var multi_%s = [];' % self.name.replace('.', '_')
+
         return template % dict(widget_html=widget_html,
                                trigger_name=trigger_name,
                                langDef=langDef,
+                               multiple_init=multiple_init,
                                calendarSetup=conf.dumpJS())
 
     def _configuration(self):
         trigger_name = '%s_trigger' % self.name
-        conf = CalendarWidgetConfiguration(showsTime=self._showsTime,
+        conf = CalendarWidgetConfiguration(self.name,
+                                           showsTime=self._showsTime,
                                            ifFormat=self._format,
                                            button=trigger_name,
                                            inputField=self.name)

Modified: zc.datetimewidget/branches/gintas-dateranges/src/zc/datetimewidget/datetimewidget.txt
===================================================================
--- zc.datetimewidget/branches/gintas-dateranges/src/zc/datetimewidget/datetimewidget.txt	2006-09-01 13:14:58 UTC (rev 69913)
+++ zc.datetimewidget/branches/gintas-dateranges/src/zc/datetimewidget/datetimewidget.txt	2006-09-01 13:18:39 UTC (rev 69914)
@@ -12,7 +12,7 @@
 
 Let's create a standard configuration object:
 
-    >>> conf = CalendarWidgetConfiguration()
+    >>> conf = CalendarWidgetConfiguration('field.x')
     >>> verifyObject(ICalendarWidgetConfiguration, conf)
     True
 
@@ -28,7 +28,7 @@
 We can customize some attributes during instantiation:
 
     >>> import datetime
-    >>> conf = CalendarWidgetConfiguration(date=datetime.date(2006, 8, 25))
+    >>> conf = CalendarWidgetConfiguration('x', date=datetime.date(2006, 8, 25))
     >>> conf.date
     datetime.date(2006, 8, 25)
 
@@ -38,15 +38,15 @@
 
 Configuration can be dumped as JavaScript.  First an empty configuration:
 
-    >>> print CalendarWidgetConfiguration().dumpJS()
+    >>> print CalendarWidgetConfiguration('field.x').dumpJS()
     Calendar.setup({
     <BLANKLINE>
     });
 
 Now let's add a few customizations:
 
-    >>> conf = CalendarWidgetConfiguration(daFormat=u'%m-%d', inputField='inp',
-    ...                                    eventName=None, date=conf.date)
+    >>> conf = CalendarWidgetConfiguration('x', daFormat=u'%m-%d',
+    ...     inputField='inp', eventName=None, date=conf.date)
     >>> print conf.dumpJS()
     Calendar.setup({
       inputField: 'inp',
@@ -57,7 +57,7 @@
 
 Invalid arguments are not accepted:
 
-    >>> conf = CalendarWidgetConfiguration(foo='bar')
+    >>> conf = CalendarWidgetConfiguration('x', foo='bar')
     Traceback (most recent call last):
         ...
     ValueError: unknown arguments: foo
@@ -75,18 +75,19 @@
     >>> field.context = set()
     >>> widget = DateSetWidget(field, object(), request)
 
-    >>> print widget()
+    >>> print widget() # doctest: +REPORT_NDIFF
     <BLANKLINE>
     <input class="textType" id="field." name="field." size="30" type="text" value=""  />
     <input type="button" value="..." id="field._trigger">
     <script type="text/javascript">
     <BLANKLINE>
+      var multi_field_ = [];
       Calendar.setup({
       inputField: 'field.',
       button: 'field._trigger',
       ifFormat: '%Y-%m-%d',
-      multiple: [],
-      onClose: getMultipleDateClosedHandler("field.")
+      multiple: multi_field_,
+      onClose: getMultipleDateClosedHandler("field.", multi_field_)
     });
     <BLANKLINE>
     </script>

Modified: zc.datetimewidget/branches/gintas-dateranges/src/zc/datetimewidget/resources/datetimewidget.js
===================================================================
--- zc.datetimewidget/branches/gintas-dateranges/src/zc/datetimewidget/resources/datetimewidget.js	2006-09-01 13:14:58 UTC (rev 69913)
+++ zc.datetimewidget/branches/gintas-dateranges/src/zc/datetimewidget/resources/datetimewidget.js	2006-09-01 13:18:39 UTC (rev 69914)
@@ -25,10 +25,9 @@
 }
 
 
-function getMultipleDateClosedHandler(input_id) {
+function getMultipleDateClosedHandler(input_id, MA) {
   return function(cal) {
     var el = document.getElementById(input_id);
-    var MA = cal.multiple;
 
     // reset initial content.
     el.value = "";



More information about the Checkins mailing list