// Causes html elements in the 'relativedate' class to be displayed
// as relative dates. The date is parsed from the title attribute, or from
// the element content.
var dateElements;
hook("onload", getDates);
function getDates() {
dateElements = getElementsByClass('relativedate');
for (var i = 0; i < dateElements.length; i++) {
var elt = dateElements[i];
var title = elt.attributes.title;
var d = new Date(title ? title.value : elt.innerHTML);
if (! isNaN(d)) {
dateElements[i].date=d;
elt.title=elt.innerHTML;
}
}
showDates();
}
function showDates() {
for (var i = 0; i < dateElements.length; i++) {
var elt = dateElements[i];
var d = elt.date;
if (! isNaN(d)) {
elt.innerHTML=relativeDate(d);
}
}
setTimeout(showDates,30000); // keep updating every 30s
}
var timeUnits = [
{ unit: 'år', units: 'år', seconds: 60 * 60 * 24 * 364 },
{ unit: 'måned', units: 'måneder', seconds: 60 * 60 * 24 * 30 },
{ unit: 'dag', units: 'dage', seconds: 60 * 60 * 24 },
{ unit: 'time', units: 'timer', seconds: 60 * 60 },
{ unit: 'minut', units: 'minutter', seconds: 60 },
];
function relativeDate(date) {
var now = new Date();
var offset = date.getTime() - now.getTime();
var seconds = Math.round(Math.abs(offset) / 1000);
// hack to avoid reading just in the future if there is a minor
// amount of clock slip
if (offset >= 0 && seconds < 30 * 60 * 60) {
return "lige før";
}
var ret = "";
var shown = 0;
for (i = 0; i < timeUnits.length; i++) {
if (seconds >= timeUnits[i].seconds) {
var num = Math.floor(seconds / timeUnits[i].seconds);
seconds -= num * timeUnits[i].seconds;
if (ret)
ret += "og ";
ret += num + " " + (num > 1 ? timeUnits[i].unit : timeUnits[i].units) + " ";
if (++shown == 2)
break;
}
else if (shown)
break;
}
if (! ret)
ret = "for mindre end et minut "
return ret + (offset < 0 ? "siden" : "fra nu");
}