User:Gary King/localize comments.js

From Wikipedia, the free encyclopedia

If a message on your talk page led you here, please be wary of who left it. Code that you insert on this page could contain malicious content capable of compromising your account. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. If this is a .js page, the code will be executed when previewing the page.
Note: After saving, you have to bypass your browser's cache to see the changes. In Internet Explorer and Firefox, hold down the Ctrl key and click the Refresh or Reload button. Opera users have to clear their caches through Tools→Preferences, see the instructions for Opera. Konqueror and Safari users can just click the Reload button.
addOnloadHook(function()
{
	var disabled_urls = new Array('action=history', '/Special:', 'title=Special:');
	for (var i = 0; i < disabled_urls.length; i++)
	{
		if (document.location.href.indexOf(disabled_urls[i]) != -1)
			return;
	}
 
	var unique_url = false;
 
	var wikiPreview = new Array('action=edit', 'action=submit');
	for (var i = 0; i < wikiPreview.length; i++)
	{
		if (document.location.href.indexOf(wikiPreview[i]) != -1)
			unique_url = 'wikiPreview';
	}
 
	var element_id = unique_url ? unique_url : 'bodyContent';
	document.getElementById(element_id).innerHTML = 
		document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime);
});
 
function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s)
{
	var time = new Date();
	time.setUTCHours(old_hour);
	time.setUTCMinutes(old_minute);
	time.setUTCDate(old_day);
	time.setUTCMonth(monthToNum(old_month));
	time.setUTCFullYear(old_year);
 
	var utc_offset = -1 * time.getTimezoneOffset() / 60;
	if (utc_offset >= 0)
		utc_offset = '+' + utc_offset;
 
	var year = time.getFullYear();
	if (old_day == '31')
	{
		time.setMonth(monthToNum(old_month));
		var month = leading_zero(monthToNum(old_month) + 1);
		time.setDate('30');
		var day = '30';
	}
	else
	{
		var month = leading_zero(time.getMonth() + 1);
		var day = time.getDate();
	}
	var hour = leading_zero(parseInt(time.getHours()));
	var minute = leading_zero(time.getMinutes());
 
	var ampm = 'am';
 
	if (hour > 11)
		ampm = 'pm';
	if (hour > 12)
		hour -= 12;
	if (hour == '00')
		hour = 12;
 
	// Return 'today' or 'yesterday' if that is the case
	var today = new Date();
	// yesterday
	var yesterday = new Date();
	yesterday.setDate(yesterday.getDate() - 1);
 
	if (year == today.getFullYear() && month == leading_zero(today.getMonth() + 1) && day == today.getDate())
		var date = 'Today';
	else if (year == yesterday.getFullYear() && month == leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate())
		var date = 'Yesterday';
	else
	{
		// Calculate day of week
		var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
		var day_of_the_week = day_names[time.getDay()];
 
		// The distance in days from today and last Monday?
		today = new Date(today.getYear(), today.getMonth(), today.getDate());
		time = new Date(time.getYear(), time.getMonth(), time.getDate());
 
		// Calculate time difference
		var milliseconds_ago = today.getTime() - time.getTime();
		var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24;
		days_ago = Math.round(days_ago);
 
		if (days_ago <= 7)
			var last = 'last ';
		else
			var last = '';
 
		// Calculate as accurately as possible, difference in days and weeks
		var difference = new Date(today.valueOf() - time.valueOf());
		var descriptive_difference = [];
 
		if (difference.getYear() - 70 > 0)
		{
			var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years') + ' ago';
			descriptive_difference.push(years_ago);
		}
		if (difference.getMonth() > 0)
		{
			var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months') + ' ago';
			descriptive_difference.push(months_ago);
		}
		if (difference.getDate() > 0)
		{
			var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days') + ' ago';
			descriptive_difference.push(days_ago);
		}
 
		var date = year + '-' + month + '-' + leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ')';
	}
 
	var time = hour + ':' + minute + ' ' + ampm;
	var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')';
	return "<span style='font-size: 90%;' title='" + str + "'>" + return_date.replace(/ /g, '&nbsp;') + '</span>';
}
 
function leading_zero(number)
{
	if (number < 10)
		number = "0" + number
	return number
}
 
function monthToNum(month)
{
   var tmp = new Date(month + " 1, 2006");
   return tmp.getMonth();
}
 
String.prototype.pluralize = function(count, plural)
{
  if (plural == null)
    plural = this + 's';
 
  return (count == 1 ? this : plural)
}