Author: pyaschenko
Date: 2007-07-27 12:11:00 -0400 (Fri, 27 Jul 2007)
New Revision: 1902
Modified:
trunk/sandbox/ui/calendar/src/main/resources/org/richfaces/renderkit/html/scripts/calendar.js
Log:
Popup mode: positioning improvements
Iframe fixes
Date string parsing using pattern added
Other improvements and fixes
Modified:
trunk/sandbox/ui/calendar/src/main/resources/org/richfaces/renderkit/html/scripts/calendar.js
===================================================================
---
trunk/sandbox/ui/calendar/src/main/resources/org/richfaces/renderkit/html/scripts/calendar.js 2007-07-27
16:05:46 UTC (rev 1901)
+++
trunk/sandbox/ui/calendar/src/main/resources/org/richfaces/renderkit/html/scripts/calendar.js 2007-07-27
16:11:00 UTC (rev 1902)
@@ -24,7 +24,7 @@
var match;
if (typeof jointPoint=='object') {ox = jointPoint.x; oy=jointPoint.y}
- else if ( jointPoint && (match=jointPoint.toLowerCase().match(re)) )
+ else if ( jointPoint && (match=jointPoint.toLowerCase().match(re))!=null )
{
if (match[2]=='right') ox+=baseElementDim.width;
if (match[1]=='bottom') oy+=baseElementDim.height;
@@ -34,7 +34,7 @@
}
// direction
- if (direction && (match=direction.toLowerCase().match(re)) )
+ if (direction && (match=direction.toLowerCase().match(re))!=null )
{
var d = direction.toLowerCase().split('-');
if (match[2]=='left') ox-=elementDim.width;
@@ -161,6 +161,15 @@
return {left:windowOffset.left, top:windowOffset.top, right:
windowDim.width+windowOffset.left, bottom: windowDim.height+windowOffset.top};
}
+Richfaces.Calendar.joinArray = function(array, begin, end, separator)
+{
+ var value = '';
+ if (array.length!=0) value = begin+array.pop()+end;
+ while (array.length)
+ value = begin+array.pop()+end+separator+value;
+ return value;
+}
+
/*Richfaces.Calendar.getPageDimensions = function() {
var x,y;
var test1 = document.body.scrollHeight;
@@ -213,10 +222,19 @@
* Date:
* d - 1-31
* dd+ - 01-31 */
+Object.extend(Date, {
+ getDefaultMonthNames: function(shortNames)
+ {
+ return (shortNames
+ ?
['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
+ :
['January','February','March','April','May','June','July','August','September','October','November','December']);
+ }
+});
Object.extend(Date.prototype, {
+
format : function(pattern, monthNames, monthNamesShort) {
- if (!monthNames) monthNames =
['January','February','March','April','May','June','July','August','September','October','November','December'];
- if (!monthNamesShort) monthNamesShort =
['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
+ if (!monthNames) monthNames = Date.getDefaultMonthNames();
+ if (!monthNamesShort) monthNamesShort = Date.getDefaultMonthNames(true);
var d = this; var mm; var dd;
return pattern.replace(/(yy^y|y+|M^M|MM^M|MMM^M|M+|d^d|d+)/g,
function($1) {
@@ -237,6 +255,48 @@
}
});
+Object.extend(Date, {
+ parseDate: function(dateString, pattern, monthNames, monthNamesShort)
+ {
+ if (!monthNames) monthNames = Date.getDefaultMonthNames();
+ if (!monthNamesShort) monthNamesShort = Date.getDefaultMonthNames(true);
+
+ var counter=1;
+ var y,m,d;
+
+ pattern = pattern.replace(/([.*+?^<>=!:${}()|[\]\/\\])/g, '\\$1');
+ pattern = pattern.replace(/(yy^y|y+|M^M|MM^M|MMM^M|M+|d^d|d+)/g,
+ function($1) {
+ switch ($1) {
+ case 'yy' : y=counter; counter++; return '(\\d{2})';
+ case 'MM' : m=counter; counter++; return '(\\d{2})';
+ case 'M' : m=counter; counter++; return '(\\d{1,2})';
+ case 'd' : d=counter; counter++; return '(\\d{1,2})';
+ case 'MMM': m=counter; counter++; return
'('+monthNamesShort.join('|')+')';
+ }
+ // y+,M+,d+
+ var ch = $1.charAt(0);
+ if (ch=='y') {y=counter; counter++; return '(\\d{4})'};
+ if (ch=='M') {m=counter; counter++; return
'('+monthNames.join('|')+')'};
+ if (ch=='d') {d=counter; counter++; return '(\\d{2})'};
+ }
+ );
+
+ var re = new RegExp(pattern,'i');
+ var match = dateString.match(re);
+ if (match!=null)
+ {
+ var month;
+ var yy = parseInt(match[y]); if (isNaN(yy)) return null; else if (yy<70) yy+=2000;
else if (yy<100) yy+=1900;
+ var mm = parseInt(match[m]); if (isNaN(mm)) mm = match[m]; else if (mm<1 ||
mm>12) return null;
+ var days = 32 - new Date(mm+'/32/'+yy).getDate();
+ var dd = parseInt(match[d]); if (isNaN(dd) || dd<1 || dd>days) return null;
+ return new Date(mm+'/'+dd+'/'+yy);
+ }
+ return null;
+ }
+});
+
function isLeapYear(year) {
return new Date(year, 1, 29).getDate()==29;
}
@@ -451,7 +511,7 @@
doCollapse: function() {
if (/*!this.params.popup || */!this.isVisible) return;
-
+
Element.hide(this.IFRAME_ID);
Element.hide(this.id);
this.isVisible = false;
@@ -460,6 +520,14 @@
doExpand: function() {
if (/*!this.params.popup || */this.isVisible) return;
+ var field = $(this.POPUP_INPUT_ID);
+/* if (field)
+ {
+ var date = Date.parseDate(field.value, this.params.datePattern,
this.params.monthLabels, this.params.monthLabelsShort);
+ this.selectedDate = Date.parseDate(field.value, this.params.datePattern,
this.params.monthLabels, this.params.monthLabelsShort);
+ if (this.selectedDate==null) this.currebn
+ }*/
+
var base = $(this.POPUP_ID);
var e = $(this.id);
var iframe = $(this.IFRAME_ID);
@@ -888,7 +956,7 @@
selectDate: function(date) {
if (date)
{
- date = new Date(date);
+ if (typeof date=='string') date = Date.parseDate(date,this.params.datePattern,
this.params.monthLabels, this.params.monthLabelsShort)
if (this.selectedDate && this.selectedDate == date) return;
this.selectedDate = date;
}