Source for "Google Calendar Show Week"

By bananaphone
Has 1 other script.


// ==UserScript==
// @name           Google Calendar Show Week
// @namespace      Made by Anders Dahlgren @ adahlgren.com
// @description    Show week numbering in Google Calendar
// @include        http://calendar.google.tld/*
// @include        https://calendar.google.tld/*
// @include        http://www.google.tld/calendar*
// @include        https://www.google.tld/calendar*
// @include        http://google.tld/calendar*
// @include        https://google.tld/calendar*
// ==/UserScript==

function drawWeeks() {	
	
	var dowOffset = 1; //set this to the day of week the week "starts" on for your locale. 
		          //0 = sunday, 1 = monday, etc. Default is 1 = ISO 8601 week number.  				 
	var weekprefix = "w"; //week prefix, eg. w.23
 
	var divs = document.evaluate("//div[starts-with(@id, 'rg_rowy_h')] | //td[@id='dp_0_mhc']/span | //td[@id='mode_link3'] | //img[@class='navbutton'] | //span[@id='todrawfav']",
	                             document,
	                             null,
	                             XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
	                             null);
	                             
	if (!divs.snapshotLength) return;
	showdate = divs.snapshotItem(0).getAttribute('onmousedown');  //Get current date that are showed.
	showdate = showdate.match(/\('(.*?)'\)/)[1]; 
	showmonth = showdate.substring(4,6)-1; 
	showyear = showdate.substring(0,4); 
 		
 	for(var i = 1; i <= 5; i++){
	divs.snapshotItem(i).addEventListener('click',drawWeeks,false);  //addListeners to various events that updates the page.
	}

	var div, firstWeekDay=[];
	for (var i = 5; i < divs.snapshotLength; i++) {
		div = divs.snapshotItem(i);
		firstWeekDay[i] = div.getElementsByTagName('span')[0].textContent;
		if (i == 5 && firstWeekDay[i] != 1 ){
			var thisMonth = new Date(showyear,showmonth-1,firstWeekDay[i]);
		}else {
			var thisMonth = new Date(showyear,showmonth,firstWeekDay[i]);
		}
		var span = div.insertBefore(document.createElement("span"),div.firstChild);
		span.style.position = "absolute";
		span.style.left = "1px";			
		span.style.color = "#f00";  //Edit to change color
		span.appendChild(document.createTextNode(weekprefix+thisMonth.getWeek(dowOffset)))
		}
}

function loader() {	
	setTimeout(drawWeeks,1500);
}
function loader2() {	
	setTimeout(drawWeeks,500);
}

window.addEventListener('load',loader,false); //add timout to initial load to prevent overloading
window.addEventListener('resize',loader2,false);  //faster timeout on resize


Date.prototype.getWeek = function (dowOffset) {
/*getWeek() function from http://www.meanfreepath.com */
	dowOffset = typeof(dowOffset) == 'number' ? dowOffset : 1; //default dowOffset to one
	var newYear = new Date(this.getFullYear(),0,1);
	var day = newYear.getDay() - dowOffset; //the day of week the year begins on
	day = (day >= 0 ? day : day + 7);
	var daynum = Math.floor((this.getTime() - newYear.getTime() -
	(this.getTimezoneOffset()-newYear.getTimezoneOffset())*60000)/86400000) + 1;
	var weeknum;
	//if the year starts before the middle of a week
	if(day < 4) {
		weeknum = Math.floor((daynum+day-1)/7) + 1;
		if(weeknum > 52) {
			nYear = new Date(this.getFullYear() + 1,0,1);
			nday = nYear.getDay() - dowOffset;
			nday = nday >= 0 ? nday : nday + 7;
			/*if the next year starts before the middle of the week, it is week #1 of that year*/
			weeknum = nday < 4 ? 1 : 53;
		}
	}else {
	weeknum = Math.floor((daynum+day-1)/7);
	}
	return weeknum;
};