commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnue] r9362 - trunk/gnue-forms/src/input/displayHandlers


From: johannes
Subject: [gnue] r9362 - trunk/gnue-forms/src/input/displayHandlers
Date: Fri, 9 Feb 2007 04:35:26 -0600 (CST)

Author: johannes
Date: 2007-02-09 04:35:25 -0600 (Fri, 09 Feb 2007)
New Revision: 9362

Modified:
   trunk/gnue-forms/src/input/displayHandlers/datehandler.py
Log:
Better way of handling autocompletion of dates


Modified: trunk/gnue-forms/src/input/displayHandlers/datehandler.py
===================================================================
--- trunk/gnue-forms/src/input/displayHandlers/datehandler.py   2007-02-09 
10:04:23 UTC (rev 9361)
+++ trunk/gnue-forms/src/input/displayHandlers/datehandler.py   2007-02-09 
10:35:25 UTC (rev 9362)
@@ -317,46 +317,81 @@
         if self._order[0] == 'year':
             return new_text, new_cursor
 
-        today = datetime.date.today().strftime(str(self._input_mask))
+        today = datetime.date.today()
 
-        # If the text is a number it must be the first component
-        if new_text.isdigit():
-            if len(new_text) > 2:
-                new_text = new_text[:2] + self._inter[0] + new_text[2:]
-                new_cursor += 1
-                new_text += self._inter[1] + "%s" % datetime.date.today().year
+        parts = self.__split_apart(new_text)
+        result = ''
+        ncursor = None
+        for index, item in enumerate(self._order):
+            if item in parts:
+                value = parts[item]
+                if item in ['day', 'month'] and len(value) > 2:
+                    parts[item] = value[:2]
+                    parts[self._order[index+1]] = value[2:]
 
-            elif self._order[0] != 'month':
-                new_text = new_text + today[today.index(self._inter[0]):]
+                if not value.isdigit():
+                    return new_text, new_cursor
 
-            return new_text, new_cursor
+                if (index > 0):
+                    result += self._inter[index-1]
 
-        else:
-            parts = new_text.split(self._inter[0], 1)
-            if len(parts) <> 2:
-                return new_text, new_cursor
+                result += parts[item]
+            else:
+                if ncursor is None:
+                    ncursor = len(result)
+                    if new_text.endswith(self._inter[index-1]):
+                        ncursor += len(self._inter[index-1])
 
-            lead = parts[0] + self._inter[0]
-            rest = parts[1]
-            # If we have nothing after the first intersection symbol, we have
-            # to complete the rest
-            if not rest:
-                if self._order[0] <> 'month':
-                    new_text = parts[0] + today[today.index(self._inter[0]):]
-                return new_text, new_cursor
+                result += self._inter[index-1]
 
-            parts = rest.split(self._inter[1], 1)
-            # If we have the first and the second component, stick it together
-            if len(parts) == 1:
-                lead += parts[0]
-                new_cursor = len(lead)
-                new_text = lead + today[today.rindex(self._inter[1]):]
+                result += "%s" % getattr(today, item)
 
-                return new_text, new_cursor
+        if ncursor is not None:
+            new_cursor = ncursor
 
-        return new_text, new_cursor
+        return result, new_cursor
 
 
+    # -------------------------------------------------------------------------
+    # Split a given text into the date components
+    # -------------------------------------------------------------------------
+
+    def __split_apart(self, text):
+
+        result = {}
+
+        if text.isdigit():
+            components = []
+            while text:
+                if len(text) > 2:
+                    components.append(text[:2])
+                    text = text[2:]
+                else:
+                    components.append(text)
+                    text = ''
+
+            for index, value in enumerate(components):
+                result[self._order[index]] = value
+        else:
+            for index in range(len(self._order)):
+                if index < len(self._inter):
+                    parts = text.split(self._inter[index], 1)
+                    if len(parts) == 2:
+                        cut = parts[0] + self._inter[index]
+                    else:
+                        cut = parts[0]
+                else:
+                    parts = [text]
+                    cut = text
+
+                result[self._order[index]] = parts[0]
+                text = text[len(cut):]
+                if not text:
+                    break
+
+        return result
+
+
 # =============================================================================
 # Display handler for time fields
 # =============================================================================





reply via email to

[Prev in Thread] Current Thread [Next in Thread]