You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2011/04/21 16:28:24 UTC
svn commit: r1095730 -
/wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/wicket-date.js
Author: mgrigorov
Date: Thu Apr 21 14:28:23 2011
New Revision: 1095730
URL: http://svn.apache.org/viewvc?rev=1095730&view=rev
Log:
WICKET-3598 DatePicker issues with locale medium date format
Improved parsing and formatting.
patches-by: akiraly
Modified:
wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/wicket-date.js
Modified: wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/wicket-date.js
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/wicket-date.js?rev=1095730&r1=1095729&r2=1095730&view=diff
==============================================================================
--- wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/wicket-date.js (original)
+++ wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/wicket-date.js Thu Apr 21 14:28:23 2011
@@ -27,24 +27,51 @@ if (typeof(Wicket) == "undefined")
Wicket.DateTime = { }
/**
- * Parses date from simple date pattern. Only parses dates with yy, MM and dd like patterns, though
- * it is safe to have time as long as it comes after the pattern (which should be the case
- * anyway 99.9% of the time).
+ * Parses date from simple date pattern.
+ *
+ * Supports patterns built up from the following elements:
+ * yy OR yyyy for year
+ * M OR MM OR MMM OR MMMM for month
+ * d OR dd for day
+ * EEEE for weekday (optional)
*/
-Wicket.DateTime.parseDate = function(pattern, value) {
- numbers = value.match(/(\d+)/g);
+Wicket.DateTime.parseDate = function(cfg, value) {
+ var numbers = value.match(/(\d+)/g);
+ var pattern = cfg.datePattern;
if (numbers == null) return Number.NaN;
var day, month, year;
- arrayPos = 0;
- for (i = 0; i < pattern.length; i++) {
- c = pattern.charAt(i);
+ var arrayPos = 0;
+ for (var i = 0; i < pattern.length; i++) {
+ var c = pattern.charAt(i);
+ var len = 0;
while ((pattern.charAt(i) == c) && (i < pattern.length)) {
i++;
+ len++;
}
if (c == 'y') {
year = numbers[arrayPos++];
} else if (c == 'M') {
- month = numbers[arrayPos++];
+ var nameArray;
+ switch (len) {
+ case 3:
+ nameArray = cfg.calendarInit.MONTHS_SHORT;
+ break;
+ case 4:
+ nameArray = cfg.calendarInit.MONTHS_LONG;
+ break;
+ default:
+ nameArray = null;
+ }
+ if (nameArray != null) {
+ for (var j = 0; j < nameArray.length; j++) {
+ if (value.indexOf(nameArray[j]) >= 0) {
+ month = j + 1;
+ break;
+ }
+ }
+ } else {
+ month = numbers[arrayPos++];
+ }
} else if (c == 'd') {
day = numbers[arrayPos++];
}
@@ -59,7 +86,12 @@ Wicket.DateTime.parseDate = function(pat
}
}
var date = new Date();
+ date.setHours(0);
+ date.setMinutes(0);
+ date.setSeconds(0);
+ date.setMilliseconds(0);
date.setFullYear(year, (month - 1), day);
+
return date;
}
@@ -124,32 +156,62 @@ Wicket.DateTime.positionRelativeTo = fun
/**
* Return the result of interpolating the value (date) argument with the date pattern.
- * The dateValue has to be an array, where year is in the first, month in the second
+ * The date has to be an array, where year is in the first, month in the second
* and date (day of month) in the third slot.
*/
-Wicket.DateTime.substituteDate = function(datePattern, date) {
- day = date[2];
- month = date[1];
- year = date[0];
+Wicket.DateTime.substituteDate = function(cfg, date) {
+ var day = date[2];
+ var month = date[1];
+ var year = date[0];
+
+ var date = new Date();
+ date.setHours(0);
+ date.setMinutes(0);
+ date.setSeconds(0);
+ date.setMilliseconds(0);
+ date.setFullYear(year, (month - 1), day);
+
+ var dayName = null;
+ var datePattern = cfg.datePattern;
+
// optionally do some padding to match the pattern
if(datePattern.match(/dd+/)) day = Wicket.DateTime.padDateFragment(day);
- if(datePattern.match(/MM+/)) month = Wicket.DateTime.padDateFragment(month);
- if(datePattern.match(/yyy+/)) {
- year = Wicket.DateTime.padDateFragment(year);
- } else if(datePattern.match(/yy+/)) {
- year = Wicket.DateTime.padDateFragment(year % 100);
- }
+ if (datePattern.match(/MMMM/)) month = cfg.calendarInit.MONTHS_LONG[month - 1];
+ else if (datePattern.match(/MMM/)) month = cfg.calendarInit.MONTHS_SHORT[month - 1];
+ else if(datePattern.match(/MM+/)) month = Wicket.DateTime.padDateFragment(month);
+ if(datePattern.match(/yyy+/)) {
+ year = Wicket.DateTime.padDateFragment(year);
+ } else if(datePattern.match(/yy+/)) {
+ year = Wicket.DateTime.padDateFragment(year % 100);
+ }
+ if (datePattern.match(/EEEE/)) {
+ // figure out which weekday it is...
+ var engDayName = date.toString().match(/(\S*)/)[0];
+ var engDayNames = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
+ for (var i = 0; i < engDayNames.length; i++) {
+ if (engDayName === engDayNames[i]) {
+ dayName = cfg.calendarInit.WEEKDAYS_LONG[i];
+ break;
+ }
+ }
+ }
// replace pattern with real values
- return datePattern.replace(/d+/, day).replace(/M+/, month).replace(/y+/, year);
+ var result = datePattern.replace(/d+/, day).replace(/y+/, year).replace(/M+/, month);
+
+ if (dayName != null) {
+ result = result.replace(/EEEE/, dayName);
+ }
+
+ return result;
}
/**
* Display the YUI calendar widget. If the date is not null (should be a string) then it is parsed
* using the provided date pattern, and set as the current date on the widget.
*/
-Wicket.DateTime.showCalendar = function(widget, date, datePattern) {
+Wicket.DateTime.showCalendar = function(widget, date, cfg) {
if (date) {
- date = Wicket.DateTime.parseDate(datePattern, date);
+ date = Wicket.DateTime.parseDate(cfg, date);
if (!isNaN(date)) {
widget.select(date);
firstDate = widget.getSelectedDates()[0];
@@ -177,7 +239,7 @@ Wicket.DateTime.init = function(cfg) {
YAHOO.wicket[cfg.dpJs].isVisible = function() { return YAHOO.wicket[cfg.dpJs].oDomContainer.style.display == 'block'; }
function showCalendar() {
- Wicket.DateTime.showCalendar(YAHOO.wicket[cfg.dpJs], YAHOO.util.Dom.get(cfg.componentId).value, cfg.datePattern);
+ Wicket.DateTime.showCalendar(YAHOO.wicket[cfg.dpJs], YAHOO.util.Dom.get(cfg.componentId).value, cfg);
if (cfg.alignWithIcon) Wicket.DateTime.positionRelativeTo(YAHOO.wicket[cfg.dpJs].oDomContainer, cfg.icon);
}
@@ -188,7 +250,7 @@ Wicket.DateTime.init = function(cfg) {
}
function selectHandler(type, args, cal) {
- YAHOO.util.Dom.get(cfg.componentId).value = Wicket.DateTime.substituteDate(cfg.datePattern, args[0][0]);
+ YAHOO.util.Dom.get(cfg.componentId).value = Wicket.DateTime.substituteDate(cfg, args[0][0]);
if (cal.isVisible()) {
if (cfg.hideOnSelect) cal.hide();
if (cfg.fireChangeEvent) {
@@ -226,4 +288,4 @@ Wicket.DateTime.init2 = function(widgetI
});
}
-YAHOO.register("wicket-date", Wicket.DateTime, {version: "1.3.0", build: "rc1"});
+YAHOO.register("wicket-date", Wicket.DateTime, {version: "1.5", build: "rc3"});