User:Gary King/localize comments.js

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search
Note: After saving, you have to bypass your browser's cache to see the changes. Internet Explorer: press Ctrl-F5, Mozilla: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Opera/Konqueror: press F5, Safari: hold down Shift + Alt while clicking Reload, Chrome: hold down Shift while clicking Reload.
addOnloadHook(function()
{
if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special')
return;

var disabled_urls = new Array('action=history');
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 add_leading_zero(number)
{
if (number < 10)
number = "0" + number;
return number;
}

function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s)
{
var today = new Date();
var yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);

// set the date entered
var time = new Date();
time.setUTCHours(old_hour);
time.setUTCMinutes(old_minute);
// fix for when the date is the 31st of the month
if (old_day == '31')
time.setUTCDate('30');
else
time.setUTCDate(old_day);
time.setUTCMonth(convert_month_to_number(old_month));
time.setUTCFullYear(old_year);

// figure out what the time offset is
var utc_offset = -1 * time.getTimezoneOffset() / 60;
if (utc_offset >= 0)
utc_offset = '+' + utc_offset;

// set the date bits to output
var year = time.getFullYear();
var month = add_leading_zero(time.getMonth() + 1);
// fix for when the date is the 31st of the month
if (old_day == '31')
var day = time.getDate() + 1;
else
var day = time.getDate();
var hour = add_leading_zero(parseInt(time.getHours()));
var minute = add_leading_zero(time.getMinutes());

// output am or pm depending on the date
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
if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate())
var date = 'Today';
else if (year == yesterday.getFullYear() && month == add_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 = '';

// The difference between today and the timestamp
var difference, difference_word = '';
if (today.valueOf() >= time.valueOf())
{
difference = new Date(today.valueOf() - time.valueOf());
difference_word = 'ago';
}
else
{
difference = new Date(time.valueOf() - today.valueOf());
difference_word = 'from now';
}
var descriptive_difference = [];

if (difference.getYear() - 70 > 0)
{
var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years');
descriptive_difference.push(years_ago);
}
if (difference.getMonth() > 0)
{
var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months');
descriptive_difference.push(months_ago);
}
if (difference.getDate() > 0)
{
var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days');
descriptive_difference.push(days_ago);
}

var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')';
}

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 convert_month_to_number(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)
}