[richfaces-svn-commits] JBoss Rich Faces SVN: r1272 - trunk/sandbox/calendar/design/calendar-js.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Fri Jun 22 09:22:34 EDT 2007


Author: pyaschenko
Date: 2007-06-22 09:22:34 -0400 (Fri, 22 Jun 2007)
New Revision: 1272

Modified:
   trunk/sandbox/calendar/design/calendar-js/calendar-prototype.js
   trunk/sandbox/calendar/design/calendar-js/calendar-xhtml.html
Log:
right weeknumber calculation added

Modified: trunk/sandbox/calendar/design/calendar-js/calendar-prototype.js
===================================================================
--- trunk/sandbox/calendar/design/calendar-js/calendar-prototype.js	2007-06-22 13:10:44 UTC (rev 1271)
+++ trunk/sandbox/calendar/design/calendar-js/calendar-prototype.js	2007-06-22 13:22:34 UTC (rev 1272)
@@ -50,21 +50,44 @@
 	return value;
 }
 
+function getFirstWeek(year, mdifw, fdow) {
+	var date = new Date(year,0,1);
+	var firstday = getDay(date, fdow);
+	
+	var weeknumber = (7-firstday<mdifw) ? 0 : 1;
+	
+	return {date:date, firstDay:firstday, weekNumber:weeknumber, mdifw:mdifw, fdow:fdow};
+}
+
+function getLastWeekOfPrevYear(o) {
+	var year = o.date.getFullYear()-1;
+	var days = (isLeapYear(year) ? 366 : 365);
+	var obj = getFirstWeek(year, o.mdifw, o.fdow);
+	days = (days - 7 + o.firstDay);
+	var weeks = Math.floor(days/7)+1;
+	  
+	return  weeks+obj.weekNumber;
+}
+
 function weekNumber(year, month, mdifw, fdow) {
-	var tfdow = fdow;
-	var firstDay = new Date(year,0,1);
-	var fDay = firstDay.getDay();
-	var daynum = ((Date.UTC(year,month,1,0,0,0) - Date.UTC(year,0,1,0,0,0)) /86400000)+1 ;
-	var weeknum = Math.round((daynum+7)/7);
-	if(fDay == 0) fDay = 7;
-	if(tfdow == 0) tfdow = 7;
-	var delta = Math.abs(fDay-tfdow);
-	if(delta == 0)return weeknum;
-	if(tfdow < fDay) delta = 7 - delta;
-	if(delta < mdifw) weeknum--;
-	return weeknum;
+	
+	var o = getFirstWeek(year, mdifw, fdow);
+	
+	if (month==0) 
+	{
+		if (o.weekNumber==1) return 1;
+		return getLastWeekOfPrevYear(o);
+	}
+	var	oneweek =  604800000;
+	var d = new Date(year, month,1);
+		d.setDate( 1+o.firstDay + (getDay(d,fdow)==0?1:0));
+		
+	weeknumber = o.weekNumber + Math.floor((d.getTime() - o.date.getTime()) / oneweek);
+	
+	return weeknumber;
 }
 
+
 Calendar = Class.create();
 Object.extend(Calendar.prototype, {
     initialize: function(id,parameters) {
@@ -316,18 +339,26 @@
 		for (var k=1;k<7;k++)
 		{
 			//
+			dataobj = this.days[p];
+			
 			var obj = $(this.params.weekNumberBarId+k).parentNode;
-
+			
+			if (k!=1 && currentMonth==11 && dataobj && dataobj.day>27)
+			{
+				if (getFirstWeek(currentYear+1, this.params.minDaysInFirstWeek, this.params.firstWeekDay).weekNumber==1) wn=1;
+			}
+			
 			element = obj.firstChild;
-		    element.innerHTML = (this.days[p]) ? this.params.weekNumberMarkup( {weekNumber: wn++} ) : "";
-
+		    element.innerHTML = (dataobj) ? this.params.weekNumberMarkup( {weekNumber: wn++} ) : "";
+		    
+		    if (k==1&&wn>52) wn=1;
+		   		    
 			while (element=element.nextSibling)
 			{
 				// TODO fix start/stop event's calls
 				this.stopCellEvents(element);
 				
-				if (this.days[p]) {
-					dataobj = this.days[p];
+				if (dataobj) {
 					element.data=dataobj.day;
 					element.innerHTML = this.params.dayListMarkupArray[p]( dataobj );
 					element.className = dataobj._className + (todayflag /*&& dataobj._month==0 */&& dataobj.day==todaydate ? " Todayclass" : "");
@@ -338,6 +369,7 @@
 					//element.data="";
 					element.innerHTML = "";
 				}
+				dataobj = this.days[p];
 			}
 		}	
 	},

Modified: trunk/sandbox/calendar/design/calendar-js/calendar-xhtml.html
===================================================================
--- trunk/sandbox/calendar/design/calendar-js/calendar-xhtml.html	2007-06-22 13:10:44 UTC (rev 1271)
+++ trunk/sandbox/calendar/design/calendar-js/calendar-xhtml.html	2007-06-22 13:22:34 UTC (rev 1272)
@@ -71,7 +71,7 @@
 	};
 	
 	
-	window.testCalendar = new Calendar('calendar',{dayListTableId:'aaa',weekNumberBarId:'bbb',weekDayBarId:'ccc',dayListMarkupArray: m, weekDayMarkup: weekDayMarkup, weekNumberMarkup: weekNumberMarkup, currentDate: new Date(2007,6,1), selectedDate: new Date(2007,4,5), weekDayLabels:['Sun','Mon','Tue','Wen','Thu','Fri','Sat'], firstWeekDay: 1, minDaysInFirstWeek:4});
+	window.testCalendar = new Calendar('calendar',{dayListTableId:'aaa',weekNumberBarId:'bbb',weekDayBarId:'ccc',dayListMarkupArray: m, weekDayMarkup: weekDayMarkup, weekNumberMarkup: weekNumberMarkup, currentDate: new Date(2007,6,1), selectedDate: new Date(2007,4,5), weekDayLabels:['Sun','Mon','Tue','Wen','Thu','Fri','Sat'], firstWeekDay: 0, minDaysInFirstWeek:4});
 
     loadDataSet1();
 }
@@ -167,6 +167,7 @@
 <input type="radio" name="dataSet" value="3" id="set3" onchange="selectDataSet(event)" onclick="selectDataSet(event)" /><label for="set3">Set 3</label><br />
 -->
 <button onclick="changeMonth(false)">prev month</button><button onclick="changeMonth(true)">next month</button><button onclick="today()">Today</button><br />
+<div id="x"></div>
 <div id="calendar">Hello</div>
 </body>
 </html>




More information about the richfaces-svn-commits mailing list