All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.resources.org.richfaces.calendar-utils.js Maven / Gradle / Ivy

There is a newer version: 4.3.7.Final
Show newest version
(function ($, rf) {
	
	rf.calendarUtils = rf.calendarUtils || {};
	
	var 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']);
	};
	
	$.extend(rf.calendarUtils, {
		// TODO: rewrite this function or use the same function if exists
		/*clonePosition: function (elements, source)
		{
				if (!elements.length) elements = [elements];
				var offset = Position.cumulativeOffset(source);
				offset = {left:offset[0], top:offset[1]};
				var offsetTemp;
				if (source.style.position!='absolute')
				{
					offsetTemp = Position.realOffset(source);
					offset.left -= offsetTemp.left;
					offset.top -= offsetTemp.top;
					offsetTemp = Richfaces.Calendar.getWindowScrollOffset();
					offset.left += offsetTemp.left;
					offset.top += offsetTemp.top;
				}
	
				for (var i=0;i=!:${}()\[\]\/\\])/g;
			var monthNamesStr
			var monthNamesShortStr;
			if (!monthNames) {
				monthNames = getDefaultMonthNames();
				monthNamesStr = monthNames.join('|');
			} else {
				monthNamesStr = monthNames.join('|').replace(re, '\\$1');
			}

			if (!monthNamesShort) {
				monthNamesShort = getDefaultMonthNames(true);
				monthNamesShortStr = monthNamesShort.join('|');
			} else {
				monthNamesShortStr = monthNamesShort.join('|').replace(re, '\\$1');
			}
			
			var counter=1;
			var y,m,d;
			var a,h,min,s;
			var shortLabel=false;
			
			pattern = pattern.replace(/([.*+?^<>=!:${}()|\[\]\/\\])/g, '\\$1');
			pattern = pattern.replace(/(y+|M+|d+|a|H{1,2}|h{1,2}|m{2}|s{2})/g,
				function($1) {
					switch ($1) {
			            case 'y'  :
			            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++; shortLabel=true; return '('+monthNamesShortStr+')';
			            case 'a'  : a=counter; counter++; return '(AM|am|PM|pm)?';
			            case 'HH' :
			            case 'hh' : h=counter; counter++; return '(\\d{2})?';
			            case 'H'  :
			            case 'h'  : h=counter; counter++; return '(\\d{1,2})?';
			            case 'mm' : min=counter; counter++; return '(\\d{2})?';
			            case 'ss' : s=counter; counter++; return '(\\d{2})?';

					}
			        // y+,M+,d+
					var ch = $1.charAt(0);
					if (ch=='y') {y=counter; counter++; return '(\\d{3,4})'};
					if (ch=='M') {m=counter; counter++; return '('+monthNamesStr+')'};
					if (ch=='d') {d=counter; counter++; return '(\\d{2})'};
				}
			);

			var re = new RegExp(pattern,'i');
			var match = dateString.match(re);
			if (match!=null && y != undefined && m != undefined && d != undefined)
			{
				// set default century start
				var correctYear = false;
				var defaultCenturyStart = new Date();
				defaultCenturyStart.setFullYear(defaultCenturyStart.getFullYear()-80);
				
				var yy = parseInt(match[y],10);
				if (isNaN(yy)) return null;
				else if (yy<100){
					// calculate full year if year has only two digits
					var defaultCenturyStartYear = defaultCenturyStart.getFullYear();
					var ambiguousTwoDigitYear = defaultCenturyStartYear % 100;
					correctYear = yy == ambiguousTwoDigitYear;
					yy += Math.floor(defaultCenturyStartYear/100)*100 + (yy < ambiguousTwoDigitYear ? 100 : 0);
				}
				
				var mm = parseInt(match[m],10); if (isNaN(mm)) mm = this.getMonthByLabel(match[m], shortLabel ? monthNamesShort : monthNames); else if (--mm<0 || mm>11) return null;
				var addDay = correctYear ? 1 : 0;
				var dd = parseInt(match[d],10); if (isNaN(dd) || dd<1 || dd>this.daysInMonth(yy, mm) + addDay) return null;
				
				var date;

				// time parsing
				if (min!=undefined && h!=undefined)
				{			
					var hh,mmin,aa;
					mmin = parseInt(match[min],10); if (isNaN(mmin) || mmin<0 || mmin>59) return null;
					hh = parseInt(match[h],10); if (isNaN(hh)) return null;
					if (a!=undefined)
					{
						aa = match[a];
						if (!aa) return null;
						aa = aa.toLowerCase();
						if ((aa!='am' && aa!='pm') || hh<1 || hh>12) return null;
						if (aa=='pm')
						{
							if (hh!=12) hh+=12;
						} else if (hh==12) hh = 0;
					}
					else if (hh<0 || hh>23) return null;
					
					date = this.createDate(yy, mm, dd, hh, mmin);
					if (s!=undefined)
					{
						sec = parseInt(match[s], 10); if (isNaN(sec) || sec<0 || sec>59) return null;
						date.setSeconds(sec);
					}
				} else {
					date = this.createDate(yy, mm, dd);
				}
				
				if (correctYear) {
					if (date.getTime() < defaultCenturyStart.getTime()) {
							date.setFullYear(yy + 100);
					}
					if (date.getMonth() != mm) return null;
				}
				
				return date;
			}
			return null;
		},

		formatDate: function(date, pattern, monthNames, monthNamesShort) {
			if (!monthNames) monthNames = getDefaultMonthNames();
			if (!monthNamesShort) monthNamesShort = getDefaultMonthNames(true);
			var mm,dd,hh,min,sec;
		    var result = pattern.replace(/(\\\\|\\[yMdaHhms])|(y+|M+|d+|a|H{1,2}|h{1,2}|m{2}|s{2})/g,
		        function($1,$2,$3) {
		        	if ($2) return $2.charAt(1);
					switch ($3) {
			            case 'y':
			            case 'yy':  return date.getYear().toString().slice(-2);
			            case 'M':   return (date.getMonth()+1);
			            case 'MM':  return ((mm = date.getMonth()+1)<10 ? '0'+mm : mm);
			            case 'MMM': return monthNamesShort[date.getMonth()];
				        case 'd':   return date.getDate();
			            case 'a'  : return (date.getHours()<12 ? 'AM' : 'PM');
			            case 'HH' : return ((hh = date.getHours())<10 ? '0'+hh : hh);
			            case 'H'  : return date.getHours();
			            case 'hh' : return ((hh = date.getHours())==0 ? '12' : (hh<10 ? '0'+hh : (hh>21 ? hh-12 : (hh>12) ? '0'+(hh-12) : hh)));
			            case 'h'  : return ((hh = date.getHours())==0 ? '12' : (hh>12 ? hh-12 : hh));
			            case 'mm' : return ((min = date.getMinutes())<10 ? '0'+min : min);
						case 'ss' : return ((sec = date.getSeconds())<10 ? '0'+sec : sec);
					}
			        // y+,M+,d+
					var ch = $3.charAt(0);
					if (ch=='y') return date.getFullYear();
					if (ch=='M') return monthNames[date.getMonth()];
					if (ch=='d') return ((dd = date.getDate())<10 ? '0'+dd : dd);
				}
			);
			return result;
		},

		isLeapYear: function(year) {
			return new Date(year, 1, 29).getDate()==29;
		},

		daysInMonth: function(year,month) {
			return 32 - new Date(year, month, 32).getDate();
		},

		daysInMonthByDate: function(date) {
			return 32 - new Date(date.getFullYear(), date.getMonth(), 32).getDate();
		},

		getDay: function(date, firstWeekDay ) {
			var value = date.getDay() - firstWeekDay;
			if (value < 0) value = 7 + value;
			return value;
		},

		getFirstWeek: function(year, mdifw, fdow) {
			var date = new Date(year,0,1);
			var firstday = this.getDay(date, fdow);
			
			var weeknumber = (7-firstday




© 2015 - 2025 Weber Informatics LLC | Privacy Policy