gDate2Cal 0.1

By Willem Spruijt Last update Aug 2, 2007 — Installed 1,942 times.
// ==UserScript==
// @name          gDate2Cal 0.1
// @namespace     http://ajaxorized.com/gdate2cal
// @description   UserScript to replace dates in gmail with links to google calendar
// @include       http://mail.google.com/*
// @include		  https://mail.google.com/*
// @author		  Willem Spruijt
// ==/UserScript==

var curDate = new Date();
var messageCount = 0;

var aRegExpMonthsEn = 'January|February|March|April|May|June|July|August|September|October|November|December';
var aRegExpMonthsNl = 'Januari|Februari|Maart|April|Mei|Juni|Juli|Augustus|September|Oktober|November|December'

var getMonthByStr = function(strMonth) {	
	if(strMonth == 'January' || strMonth == 'Januari' || strMonth == 'january' || strMonth == 'januari')		return '1';
	if(strMonth == 'February' || strMonth == 'Februari' || strMonth == 'february' || strMonth == 'februari')	return '2';	
	if(strMonth == 'March' || strMonth == 'Maart' || strMonth == 'march' || strMonth == 'maart') 				return '3';
	if(strMonth == 'April' || strMonth == 'april') 																return '4';	
	if(strMonth == 'May' || strMonth == 'Mei' || strMonth == 'may' || strMonth == 'mei')						return '5';
	if(strMonth == 'June' || strMonth == 'Juni' || strMonth == 'june' || strMonth == 'juni')					return '6';
	if(strMonth == 'July'  || strMonth == 'Juli' || strMonth == 'july'  || strMonth == 'juli')					return '7';	
	if(strMonth == 'August' || strMonth == 'Augustus' || strMonth == 'august' || strMonth == 'augustus')		return '8';	
	if(strMonth == 'September' || strMonth == 'september')							 							return '9';
	if(strMonth == 'October' || strMonth == 'Oktober' || strMonth == 'october' || strMonth == 'oktober')		return '10';
	if(strMonth == 'November' || strMonth == 'november')														return '11';
	if(strMonth == 'December' || strMonth == 'dedember')							 							return '12';
}		

var buildGCalLink = function(sYear, iMonth, iDay) {
	var sDate = sYear;
	
	if(iMonth.length == 1) sDate += '0';
	sDate += iMonth;
	
	if(iDay.length == 1) sDate += '0';
	sDate += iDay;
	
	var sLink = 'https://www.google.com/calendar/render?mode=day&date='+sDate;
	sLink = '<a href = "'+sLink+'" target = "_blank">'+aMatch[0]+'</a>';
	
	return sLink;
}

var getYearByMonth = function(sMonth, sYear) {
	if(sYear) {
		var sYear = sYear;
	} else {
		var iMonth = parseInt(sMonth);
		var iCurMonth = curDate.getMonth() + 1;
		if(iMonth >= iCurMonth) {
			iYear = curDate.getFullYear();
		} else {
			iYear = curDate.getFullYear() + 1;
		}
		sYear = iYear.toString();
	}
	return sYear;	
}

var replaceDates = function() {
	
	var messageCount = 0;
	
	// if(document.getElementById('msgs')) {		
	while(document.getElementById('mb_'+messageCount)) {
		var msgHtml = document.getElementById('mb_'+messageCount).innerHTML; // Prototype, we miss you :(
		
		var sNewMsgHtml = msgHtml;	
		// Try to match the patterns	
		var sRegExp1 = new RegExp("("+aRegExpMonthsEn+")\\s*([0-9]+)(st|nd|rd|th)?\\s*(20([0-9]{2}))?", "gi"); 
		var sRegExp2 = new RegExp("20([0-9]{2})-([0-9]+)-([0-9]+)", "g");
		var sRegExp3 = new RegExp("20([0-9]{2})\/([0-9]+)\/([0-9]+)", "g");
		var sRegExp4 = new RegExp("([0-9]+)\\s*("+aRegExpMonthsNl+")\\s*(20([0-9]{2}))?", "gi");
	
		while(aMatch = sRegExp1.exec(msgHtml)) {
			var sMonth = getMonthByStr(aMatch[1]);
			var sDay = aMatch[2];	
			var sYear = getYearByMonth(sMonth, aMatch[4]);			
			var sLink = buildGCalLink(sYear, sMonth, sDay);					
			var replaceRegexp = new RegExp(aMatch[0], "g");
			sNewMsgHtml = sNewMsgHtml.replace(replaceRegexp, sLink);	
		}
				
		while(aMatch = sRegExp2.exec(msgHtml)) {
			var sMonth = aMatch[2];
			var sDay = aMatch[3];
			var sYear = '20'+aMatch[1];
			var sLink = buildGCalLink(sYear, sMonth, sDay);				
			sNewMsgHtml = sNewMsgHtml.replace(aMatch[0], sLink);
		}
	
		while(aMatch = sRegExp3.exec(msgHtml)) {
			var sMonth = aMatch[2];
			var sDay = aMatch[3];
			var sYear = '20'+aMatch[1];
			var sLink = buildGCalLink(sYear, sMonth, sDay);				
			sNewMsgHtml = sNewMsgHtml.replace(aMatch[0], sLink);
		}
		
		while(aMatch = sRegExp4.exec(msgHtml)) {
			var sMonth = getMonthByStr(aMatch[2]);
			var sDay = aMatch[1];	
			var sYear = getYearByMonth(sMonth, aMatch[3]);			
			var sLink = buildGCalLink(sYear, sMonth, sDay);					
			var replaceRegexp = new RegExp(aMatch[0], "g");
			sNewMsgHtml = sNewMsgHtml.replace(replaceRegexp, sLink);	
		}		
		
		document.getElementById('mb_'+messageCount).innerHTML = sNewMsgHtml;	
		messageCount++;
	}
}

replaceDates();