Revision: 2998
          http://vexi.svn.sourceforge.net/vexi/?rev=2998&view=rev
Author:   clrg
Date:     2008-07-30 13:06:15 +0000 (Wed, 30 Jul 2008)

Log Message:
-----------
Fix datefield behaviour bugs

Modified Paths:
--------------
    trunk/widgets/org.vexi.widgets/src/org/vexi/theme/classic/datefield.t
    trunk/widgets/org.vexi.widgets/src/org/vexi/theme/classic/datepicker.t
    trunk/widgets/org.vexi.widgets/src/vexi/util/date.t

Modified: trunk/widgets/org.vexi.widgets/src/org/vexi/theme/classic/datefield.t
===================================================================
--- trunk/widgets/org.vexi.widgets/src/org/vexi/theme/classic/datefield.t       
2008-07-24 23:37:23 UTC (rev 2997)
+++ trunk/widgets/org.vexi.widgets/src/org/vexi/theme/classic/datefield.t       
2008-07-30 13:06:15 UTC (rev 2998)
@@ -38,10 +38,10 @@
             <datepicker id="datepicker" minwidth="200" minheight="160" 
shrink="true" />
         </lay:border>
         
-        thisbox.textformat = "YYYYMMDD";
-        thisbox.textseparator = "-";
-        thisbox.viewformat = "DDMMYYYY";
-        thisbox.viewseparator = "/";
+        thisbox.valueformat = "YYYYMMDD";
+        thisbox.valueseparator = "-";
+        thisbox.textformat = "DDMMYYYY";
+        thisbox.textseparator = "/";
         
         thisbox.datepick  = $datepicker;
         thisbox.dateview  = $dateview;
@@ -64,8 +64,8 @@
         thisbox.value ++= static.valueWrite;
         
         thisbox.viewsep ++= static.viewsepWrite;
-        thisbox.viewformat ++= static.viewformatWrite;
         thisbox.textformat ++= static.textformatWrite;
+        thisbox.valueformat ++= static.valueformatWrite;
         
         ////////
         // button actions
@@ -214,10 +214,13 @@
     </bevel>
     
     /** write trap to apply to monthview day/month/year */
-    static.basicWrite = function(v) { cascade = v; 
trapee[trapname+"view"].text = trapee[trapname]; }
+    static.basicWrite = function(v) {
+        cascade = v;
+        trapee[trapname+"view"].text = trapee[trapname];
+    }
     
     /** sets the display format */
-    static.viewformatWrite = function(v) {
+    static.textformatWrite = function(v) {
         switch (v) {
         case "DDMMYYYY":
             trapee.dateview[0] = trapee.dayview;
@@ -253,7 +256,7 @@
     }
     
     /** sets the display format */
-    static.textformatWrite = function(v) {
+    static.valueformatWrite = function(v) {
         switch (v) {
         case "DDMMYYYY":
         case "MMDDYYYY":
@@ -266,8 +269,8 @@
     }
     
     static.textRead = function() {
-        var s = trapee.textseparator ? trapee.textseparator : 
trapee.viewseparator;
-        var f = trapee.textformat ? trapee.textformat : trapee.viewformat;
+        var s = trapee.valueseparator ? trapee.valueseparator : 
trapee.textseparator;
+        var f = trapee.valueformat ? trapee.valueformat : trapee.textformat;
         var y = trapee.year;
         var m = trapee.month;
         var d = trapee.day;
@@ -282,69 +285,9 @@
         }
     }
     
-    /** allow input of 00xx years */
-    var expandYear = function(ystr) {
-        if (2>=ystr.length) {
-            var d = vexi.date().getFullYear();
-            // auto-fill year to this year
-            if (ystr=="") return d;
-            else {
-                // auto-expand 2-digit years
-                ystr = vexi.string.parseInt(ystr, 10);
-                return (d+10>=ystr ? 2000 : 1900) + ystr;
-            }
-        } else return vexi.string.parseInt(ystr, 10);
-    }
-    
     static.textWrite = function(v) {
         if (v == "") { trapee.value = null; return; }
-        // establish how many characters for each part
-        var tf = trapee.textformat;
-        var m, m1, m2;
-        var m3 = tf.length;
-        for (var i=0; m3>i; i++) {
-            if (m!=tf.charAt(i)) {
-                if (m) {
-                    if (!m1) m1 = i;
-                    else if (!m2) m2 = i;
-                    else break;
-                }
-                m = tf.charAt(i);
-            }
-        }
-        // parse string into 3 number parts
-        var s0 = "";
-        var s1 = "";
-        var s2 = "";
-        var i = 0;
-        var j = 0;
-        try {
-            for (var c = v.charCodeAt(i); c>57 or 48>c; c = v.charCodeAt(++i)) 
{ /* skip non-numbers */ }
-            for (var c = v.charCodeAt(i); m1>j and c>47 and 58>c; c = 
v.charCodeAt(++i)) { s0 = s0 + v.charAt(i); j++; }
-            for (var c = v.charCodeAt(i); c>57 or 48>c; c = v.charCodeAt(++i)) 
{ /* skip non-numbers */ }
-            for (var c = v.charCodeAt(i); m2>j and c>47 and 58>c; c = 
v.charCodeAt(++i)) { s1 = s1 + v.charAt(i); j++; }
-            for (var c = v.charCodeAt(i); c>57 or 48>c; c = v.charCodeAt(++i)) 
{ /* skip non-numbers */ }
-            for (var c = v.charCodeAt(i); m3>j and c>47 and 58>c; c = 
v.charCodeAt(++i)) s2 = s2 + v.charAt(i);
-        } catch (e) { throw "unsupported text value for datefield: '"+v+"'"; }
-        // assign values to widget
-        switch (tf) {
-            case "DDMMYYYY":
-                s0 = vexi.string.parseInt(s0, 10);
-                s1 = vexi.string.parseInt(s1, 10);
-                s2 = expandYear(s2);
-                trapee.day = s0; trapee.month = s1; trapee.year = s2; break;
-            case "MMDDYYYY":
-                s0 = vexi.string.parseInt(s0, 10);
-                s1 = vexi.string.parseInt(s1, 10);
-                s2 = expandYear(s2);
-                trapee.day = s1; trapee.month = s0; trapee.year = s2; break;
-            case "YYYYMMDD":
-                s0 = expandYear(s0);
-                s1 = vexi.string.parseInt(s1, 10);
-                s2 = vexi.string.parseInt(s2, 10);
-                trapee.day = s2; trapee.month = s1; trapee.year = s0; break;
-        }
-        return;
+        trapee.parseDate(v, trapee.textformat, trapee);
     }
     
     static.valueRead = function() { var t = trapee.text; return t ? t : null; }
@@ -365,7 +308,7 @@
         case "string":
             if (v.toLowerCase() == "today")
                 trapee.date = vexi.date();
-            else trapee.text = v;
+            else trapee.parseDate(v, trapee.valueformat, trapee);
             break;
         default:
             throw "unsupported value type for datefield: '"+typeof(v)+"'";

Modified: trunk/widgets/org.vexi.widgets/src/org/vexi/theme/classic/datepicker.t
===================================================================
--- trunk/widgets/org.vexi.widgets/src/org/vexi/theme/classic/datepicker.t      
2008-07-24 23:37:23 UTC (rev 2997)
+++ trunk/widgets/org.vexi.widgets/src/org/vexi/theme/classic/datepicker.t      
2008-07-30 13:06:15 UTC (rev 2998)
@@ -164,7 +164,7 @@
                 if (year == null) {
                     var d = vexi.date();
                     showyear = d.getFullYear();
-                    showmonth = d.getMonth()-1;
+                    showmonth = d.getMonth()+1;
                 } else {
                     showyear = year;
                     showmonth = month;

Modified: trunk/widgets/org.vexi.widgets/src/vexi/util/date.t
===================================================================
--- trunk/widgets/org.vexi.widgets/src/vexi/util/date.t 2008-07-24 23:37:23 UTC 
(rev 2997)
+++ trunk/widgets/org.vexi.widgets/src/vexi/util/date.t 2008-07-30 13:06:15 UTC 
(rev 2998)
@@ -59,6 +59,7 @@
         thisbox.getDaysInMonth = static.getDaysInMonth;
         thisbox.getMonthName = static.getMonthName;
         thisbox.getWeekday = static.getWeekday;
+        thisbox.parseDate = static.parseDate;
         
         thisbox.date  ++= static.dateRead;
         thisbox.date  ++= static.dateWrite;
@@ -154,4 +155,73 @@
     /** read the weekday of a date */
     static.weekdayRead = function() { return static.getWeekday(trapee.year, 
trapee.month, trapee.day); }
     
+    /** allow input of 00xx years */
+    var expandYear = function(ystr) {
+        if (2>=ystr.length) {
+            var d = vexi.date().getFullYear();
+            // auto-fill year to this year
+            if (ystr=="") return d;
+            else {
+                // auto-expand 2-digit years
+                ystr = vexi.string.parseInt(ystr, 10);
+                return (d+10>=ystr ? 2000 : 1900) + ystr;
+            }
+        } else return vexi.string.parseInt(ystr, 10);
+    }
+    
+    /** takes a string 'v' and parses it as a date for 'o' */
+    static.parseDate = function(v, format, o) {
+        if (!o) o = {};
+        // establish how many characters for each part
+        var m, m1, m2;
+        var m3 = format.length;
+        for (var i=0; m3>i; i++) {
+            if (m!=format.charAt(i)) {
+                if (m) {
+                    if (!m1) m1 = i;
+                    else if (!m2) m2 = i;
+                    else break;
+                }
+                m = format.charAt(i);
+            }
+        }
+        // parse string into 3 number parts
+        var s0 = "";
+        var s1 = "";
+        var s2 = "";
+        var i = 0;
+        var j = 0;
+        try {
+            for (var c = v.charCodeAt(i); c>57 or 48>c; c = v.charCodeAt(++i)) 
{ /* skip non-numbers */ }
+            for (var c = v.charCodeAt(i); m1>j and c>47 and 58>c; c = 
v.charCodeAt(++i)) { s0 = s0 + v.charAt(i); j++; }
+            for (var c = v.charCodeAt(i); c>57 or 48>c; c = v.charCodeAt(++i)) 
{ /* skip non-numbers */ }
+            for (var c = v.charCodeAt(i); m2>j and c>47 and 58>c; c = 
v.charCodeAt(++i)) { s1 = s1 + v.charAt(i); j++; }
+            for (var c = v.charCodeAt(i); c>57 or 48>c; c = v.charCodeAt(++i)) 
{ /* skip non-numbers */ }
+            for (var c = v.charCodeAt(i); m3>j and c>47 and 58>c; c = 
v.charCodeAt(++i)) s2 = s2 + v.charAt(i);
+        } catch (e) { throw "unsupported text value for datefield: '"+v+"'"; }
+        // assign values to widget
+        switch (format) {
+        case "MMDDYYYY":
+            s0 = vexi.string.parseInt(s0, 10);
+            s1 = vexi.string.parseInt(s1, 10);
+            s2 = expandYear(s2);
+            o.day = s1; o.month = s0; o.year = s2;
+            break;
+        case "YYYYMMDD":
+            s0 = expandYear(s0);
+            s1 = vexi.string.parseInt(s1, 10);
+            s2 = vexi.string.parseInt(s2, 10);
+            o.day = s2; o.month = s1; o.year = s0;
+            break;
+        case "DDMMYYYY":
+        default:
+            s0 = vexi.string.parseInt(s0, 10);
+            s1 = vexi.string.parseInt(s1, 10);
+            s2 = expandYear(s2);
+            o.day = s0; o.month = s1; o.year = s2;
+            break;
+        }
+        return o;
+    }
+    
 </vexi>


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Vexi-svn mailing list
Vexi-svn@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/vexi-svn

Reply via email to