[Top][All Lists]
[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
# =============================================================================
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r9362 - trunk/gnue-forms/src/input/displayHandlers,
johannes <=