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