[jboss-cvs] jboss-seam/src/ui/org/jboss/seam/ui ...
Norman Richards
norman.richards at jboss.com
Sat Jan 27 21:55:26 EST 2007
User: nrichards
Date: 07/01/27 21:55:26
Modified: src/ui/org/jboss/seam/ui SelectDate.java selectDate.js
Log:
JBSEAM-623: add date patern to javascript
Revision Changes Path
1.6 +12 -5 jboss-seam/src/ui/org/jboss/seam/ui/SelectDate.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: SelectDate.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/ui/org/jboss/seam/ui/SelectDate.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- SelectDate.java 28 Jan 2007 02:19:26 -0000 1.5
+++ SelectDate.java 28 Jan 2007 02:55:26 -0000 1.6
@@ -25,14 +25,19 @@
private String forField;
+ private String dateFormat = "MM/dd/yyyy";
- public String getFor()
- {
- return forField;
+ public String getDateFormat(){
+ return dateFormat;
+ }
+ public void setDateFormat(String dateFormat){
+ this.dateFormat = dateFormat;
}
- public void setFor(String forField)
- {
+ public String getFor(){
+ return forField;
+ }
+ public void setFor(String forField) {
this.forField = forField;
}
@@ -153,6 +158,8 @@
response.write("var monthArrayLong = " + getArray(symbols.getMonths(), 0) + ";\r");
response.write("var firstDayInWeek = " + (cal.getFirstDayOfWeek() - 1) + ";\r");
+ response.write("var dateFormat = '" + getDateFormat() + "';\r");
+
response.write("var thisMonthButton = '" + messageForKey(COMPONENT_TYPE + ".thisMonth", "this month") + "';\r");
response.write("var closeButton = '" + messageForKey(COMPONENT_TYPE + ".close", "close") + "';\r");
1.5 +252 -136 jboss-seam/src/ui/org/jboss/seam/ui/selectDate.js
(In the diff below, changes in quantity of whitespace are not shown.)
Index: selectDate.js
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/ui/org/jboss/seam/ui/selectDate.js,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- selectDate.js 28 Jan 2007 02:19:26 -0000 1.4
+++ selectDate.js 28 Jan 2007 02:55:26 -0000 1.5
@@ -1,22 +1,11 @@
/**
-Datepicker, based on the work of Julian Robichaux -- http://www.nsftools.com
-history deleted for file size
-*/
+ * Datepicker, based on the work of Julian Robichaux -- http://www.nsftools.com
+ * history deleted for file size
+ */
var datePickerDivID = "datepicker";
var iFrameDivID = "datepickeriframe";
-// text label variables generate by selectDate component
-
-// these variables define the date formatting we're expecting and outputting.
-// If you want to use a different format by default, change the defaultDateSeparator
-// and defaultDateFormat variables either here or on your HTML page.
-var defaultDateSeparator = "/"; // common values would be "/" or "."
-var defaultDateFormat = "mdy" // valid values are "mdy", "dmy", and "ymd"
-var dateSeparator = defaultDateSeparator;
-var dateFormat = defaultDateFormat;
-
-
function displayDatePicker(dateFieldName, displayBelowThisObject, dtFormat, dtSep)
{
var targetDateField = document.getElementsByName (dateFieldName).item(0);
@@ -26,18 +15,6 @@
if (!displayBelowThisObject)
displayBelowThisObject = targetDateField;
- // if a date separator character was given, update the dateSeparator variable
- if (dtSep)
- dateSeparator = dtSep;
- else
- dateSeparator = defaultDateSeparator;
-
- // if a date format was given, update the dateFormat variable
- if (dtFormat)
- dateFormat = dtFormat;
- else
- dateFormat = defaultDateFormat;
-
var x = displayBelowThisObject.offsetLeft;
var y = displayBelowThisObject.offsetTop + displayBelowThisObject.offsetHeight ;
@@ -54,12 +31,12 @@
/**
-Draw the datepicker object (which is just a table with calendar elements) at the
-specified x and y coordinates, using the targetDateField object as the input tag
-that will ultimately be populated with a date.
-
-This function will normally be called by the displayDatePicker function.
-*/
+ * Draw the datepicker object (which is just a table with calendar elements) at the
+ * specified x and y coordinates, using the targetDateField object as the input tag
+ * that will ultimately be populated with a date.
+ *
+ * This function will normally be called by the displayDatePicker function.
+ */
function drawDatePicker(targetDateField, x, y)
{
var dt = getFieldDate(targetDateField.value );
@@ -93,8 +70,8 @@
/**
-This is the function that actually draws the datepicker calendar.
-*/
+ * This is the function that actually draws the datepicker calendar.
+ */
function refreshDatePicker(dateFieldName, year, month, day)
{
// if no arguments are passed, use today's date; otherwise, month and year
@@ -226,9 +203,9 @@
}
/**
-Convenience function for writing the code for the buttons that bring us back or forward
-a month.
-*/
+ * Convenience function for writing the code for the buttons that bring us back or forward
+ * a month.
+ */
function getButtonCode(dateFieldName, dateVal, adjust, label)
{
var newMonth = (dateVal.getMonth () + adjust) % 12;
@@ -243,112 +220,251 @@
/**
-Convert a JavaScript Date object to a string, based on the dateFormat and dateSeparator
-variables at the beginning of this script library.
-*/
+ * Convert a JavaScript Date object to a string, based on the dateFormat and dateSeparator
+ * variables at the beginning of this script library.
+ */
function getDateString(dateVal)
{
- var dayString = "00" + dateVal.getDate();
- var monthString = "00" + (dateVal.getMonth()+1);
- dayString = dayString.substring(dayString.length - 2);
- monthString = monthString.substring(monthString.length - 2);
-
- switch (dateFormat) {
- case "dmy" :
- return dayString + dateSeparator + monthString + dateSeparator + dateVal.getFullYear();
- case "ymd" :
- return dateVal.getFullYear() + dateSeparator + monthString + dateSeparator + dayString;
- case "mdy" :
- default :
- return monthString + dateSeparator + dayString + dateSeparator + dateVal.getFullYear();
+ return formatDate(dateVal, dateFormat);
+}
+
+/**
+ * formatDate (date_object, format)
+ * Returns a date in the output format specified.
+ * The format string uses the same abbreviations as in getDateFromFormat()
+ */
+function formatDate(date,format)
+{
+ format=format+"";
+ var result="";
+ var i_format=0;
+ var c="";
+ var token="";
+ var y=date.getYear()+"";
+ var M=date.getMonth()+1;
+ var d=date.getDate();
+ var E=date.getDay();
+ var H=date.getHours();
+ var m=date.getMinutes();
+ var s=date.getSeconds();
+ var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
+ // Convert real date parts into formatted versions
+ var value=new Object();
+ if (y.length < 4) {y=""+(y-0+1900);}
+ value["y"]=""+y;
+ value["yyyy"]=y;
+ value["yy"]=y.substring(2,4);
+ value["M"]=M;
+ value["MM"]=LZ(M);
+ value["MMM"]=monthArrayLong[M-1];
+ value["NNN"]=monthArrayShort[M-1];
+ value["d"]=d;
+ value["dd"]=LZ(d);
+ value["E"]=dayArrayShort[E];
+ value["EE"]=dayArrayLong[E];
+ value["H"]=H;
+ value["HH"]=LZ(H);
+ if (H==0){value["h"]=12;}
+ else if (H>12){value["h"]=H-12;}
+ else {value["h"]=H;}
+ value["hh"]=LZ(value["h"]);
+ if (H>11){value["K"]=H-12;} else {value["K"]=H;}
+ value["k"]=H+1;
+ value["KK"]=LZ(value["K"]);
+ value["kk"]=LZ(value["k"]);
+ if (H > 11) { value["a"]="PM"; }
+ else { value["a"]="AM"; }
+ value["m"]=m;
+ value["mm"]=LZ(m);
+ value["s"]=s;
+ value["ss"]=LZ(s);
+ while (i_format < format.length) {
+ c=format.charAt(i_format);
+ token="";
+ while ((format.charAt(i_format)==c) && (i_format < format.length)) {
+ token += format.charAt(i_format++);
+ }
+ if (value[token] != null) { result=result + value[token]; }
+ else { result=result + token; }
}
+ return result;
}
/**
-Convert a string to a JavaScript Date object.
-*/
+ * Convert a string to a JavaScript Date object.
+ */
function getFieldDate(dateString)
{
- var dateVal;
- var dArray;
- var d, m, y;
-
- var limit, twoDigitYear;
- var now = new Date();
-
- try {
- dArray = splitDateString(dateString);
- if (dArray) {
- switch (dateFormat) {
- case "dmy" :
- d = parseInt(dArray[0], 10);
- m = parseInt(dArray[1], 10) - 1;
- y = parseInt(dArray[2], 10);
- break;
- case "ymd" :
- d = parseInt(dArray[2], 10);
- m = parseInt(dArray[1], 10) - 1;
- y = parseInt(dArray[0], 10);
- break;
- case "mdy" :
- default :
- d = parseInt(dArray[1], 10);
- m = parseInt(dArray[0], 10) - 1;
- y = parseInt(dArray[2], 10);
+ var dateObj = getDateFromFormat(dateString,dateFormat);
+ if (!dateObj) {
+ dateObj = new Date();
+ }
+ return dateObj;
+}
+
+
+// ------------------------------------------------------------------
+// Utility functions for parsing in getDateFromFormat()
+// ------------------------------------------------------------------
+function _isInteger(val) {
+ var digits="1234567890";
+ for (var i=0; i < val.length; i++) {
+ if (digits.indexOf(val.charAt(i))==-1) { return false; }
+ }
+ return true;
+}
+
+function _getInt(str,i,minlength,maxlength) {
+ for (var x=maxlength; x>=minlength; x--) {
+ var token=str.substring(i,i+x);
+ if (token.length < minlength) { return null; }
+ if (_isInteger(token)) { return token; }
+ }
+ return null;
+}
+
+// ------------------------------------------------------------------
+// getDateFromFormat( date_string , format_string )
+//
+// This function takes a date string and a format string. It matches
+// If the date string matches the format string, it returns the
+// getTime() of the date. If it does not match, it returns 0.
+// ------------------------------------------------------------------
+function getDateFromFormat(val,format) {
+ val=val+"";
+ format=format+"";
+ var i_val=0;
+ var i_format=0;
+ var c="";
+ var token="";
+ var token2="";
+ var x,y;
+ var now=new Date();
+ var year=now.getYear();
+ var month=now.getMonth()+1;
+ var date=1;
+ var hh=now.getHours();
+ var mm=now.getMinutes();
+ var ss=now.getSeconds();
+ var ampm="";
+
+ while (i_format < format.length) {
+ // Get next token from format string
+ c=format.charAt(i_format);
+ token="";
+ while ((format.charAt(i_format)==c) && (i_format < format.length)) {
+ token += format.charAt(i_format++);
+ }
+ // Extract contents of value based on format token
+ if (token=="yyyy" || token=="yy" || token=="y") {
+ if (token=="yyyy") { x=4;y=4; }
+ if (token=="yy") { x=2;y=2; }
+ if (token=="y") { x=2;y=4; }
+ year=_getInt(val,i_val,x,y);
+ if (year==null) { return 0; }
+ i_val += year.length;
+ if (year.length==2) {
+ if (year > 70) { year=1900+(year-0); }
+ else { year=2000+(year-0); }
+ }
+ }
+ else if (token=="MMM"||token=="NNN"){
+ month=0;
+ for (var i=0; i<monthArrayLong.length; i++) {
+ var month_name=monthArrayLong[i];
+ if (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()) {
+ if (token=="MMM"||(token=="NNN"&&i>11)) {
+ month=i+1;
+ if (month>12) { month -= 12; }
+ i_val += month_name.length;
break;
}
-
- // The logic for years with two digits is documented in
- // http://java.sun.com/j2se/1.5.0/docs/api/java/text/SimpleDateFormat.html
-
- twoDigitYear = y < 100;
- if (twoDigitYear) {
- limit = new Date(now.getFullYear() + 20, now.getMonth(), now.getDate());
- y += limit.getFullYear() - (limit.getFullYear() % 100);
}
-
- dateVal = new Date(y, m, d);
-
- if (twoDigitYear) {
- if (dateVal > limit) {
- dateVal.setFullYear(dateVal.getFullYear() - 100);
}
+ if ((month < 1)||(month>12)){return 0;}
}
-
- } else if (dateString) {
- dateVal = new Date(dateString);
- } else {
- dateVal = now;
+ else if (token=="EE"||token=="E"){
+ for (var i=0; i<dayArrayLong.length; i++) {
+ var day_name=dayArrayLong[i];
+ if (val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()) {
+ i_val += day_name.length;
+ break;
}
- } catch(e) {
- dateVal = now;
}
+ }
+ else if (token=="MM"||token=="M") {
+ month=_getInt(val,i_val,token.length,2);
+ if(month==null||(month<1)||(month>12)){return 0;}
+ i_val+=month.length;}
+ else if (token=="dd"||token=="d") {
+ date=_getInt(val,i_val,token.length,2);
+ if(date==null||(date<1)||(date>31)){return 0;}
+ i_val+=date.length;}
+ else if (token=="hh"||token=="h") {
+ hh=_getInt(val,i_val,token.length,2);
+ if(hh==null||(hh<1)||(hh>12)){return 0;}
+ i_val+=hh.length;}
+ else if (token=="HH"||token=="H") {
+ hh=_getInt(val,i_val,token.length,2);
+ if(hh==null||(hh<0)||(hh>23)){return 0;}
+ i_val+=hh.length;}
+ else if (token=="KK"||token=="K") {
+ hh=_getInt(val,i_val,token.length,2);
+ if(hh==null||(hh<0)||(hh>11)){return 0;}
+ i_val+=hh.length;}
+ else if (token=="kk"||token=="k") {
+ hh=_getInt(val,i_val,token.length,2);
+ if(hh==null||(hh<1)||(hh>24)){return 0;}
+ i_val+=hh.length;hh--;}
+ else if (token=="mm"||token=="m") {
+ mm=_getInt(val,i_val,token.length,2);
+ if(mm==null||(mm<0)||(mm>59)){return 0;}
+ i_val+=mm.length;}
+ else if (token=="ss"||token=="s") {
+ ss=_getInt(val,i_val,token.length,2);
+ if(ss==null||(ss<0)||(ss>59)){return 0;}
+ i_val+=ss.length;}
+ else if (token=="a") {
+ if (val.substring(i_val,i_val+2).toLowerCase()=="am") {ampm="AM";}
+ else if (val.substring(i_val,i_val+2).toLowerCase()=="pm") {ampm="PM";}
+ else {return 0;}
+ i_val+=2;}
+ else {
+ if (val.substring(i_val,i_val+token.length)!=token) {return 0;}
+ else {i_val+=token.length;}
+ }
+ }
+ // If there are any trailing characters left in the value, it doesn't match
+ if (i_val != val.length) { return 0; }
+ // Is date valid for month?
+ if (month==2) {
+ // Check for leap year
+ if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year
+ if (date > 29){ return 0; }
+ }
+ else { if (date > 28) { return 0; } }
+ }
+ if ((month==4)||(month==6)||(month==9)||(month==11)) {
+ if (date > 30) { return 0; }
+ }
+ // Correct hours value
+ if (hh<12 && ampm=="PM") {
+ hh=hh-0+12;
+ } else if (hh>11 && ampm=="AM") {
+ hh-=12;
+ }
+ var newdate = new Date(year,month-1,date,hh,mm,ss);
- return dateVal;
+ return newdate;
+}
+
+function LZ(x) {
+ return(x<0||x>9?"":"0")+x
}
-/**
-Try to split a date string into an array of elements, using common date separators.
-If the date is split, an array is returned; otherwise, we just return false.
-*/
-function splitDateString(dateString)
-{
- var dArray;
- if (dateString.indexOf("/") >= 0)
- dArray = dateString.split("/");
- else if (dateString.indexOf(".") >= 0)
- dArray = dateString.split(".");
- else if (dateString.indexOf("-") >= 0)
- dArray = dateString.split("-");
- else if (dateString.indexOf("\\") >= 0)
- dArray = dateString.split("\\");
- else
- dArray = false;
- return dArray;
-}
/**
Update the field with the given dateFieldName with the dateString that has been passed,
More information about the jboss-cvs-commits
mailing list