Files
86box.github.io/assets/js/script.js

89 lines
2.2 KiB
JavaScript

/* This script is executed by all browsers, so keep it retro-friendly. */
/* Polyfills. */
function addEvent(elem, evtName, func) {
if (elem.addEventListener)
return elem.addEventListener(evtName, func);
evtName = 'on' + evtName;
if (elem.attachEvent)
return elem.attachEvent(evtName, func);
var prevFunc = elem[evtName];
if (prevFunc) {
elem[evtName] = function(evt) {
if (prevFunc(evt) == false)
return false;
return func(evt);
};
} else {
elem[evtName] = func;
}
}
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(elem, start) {
for (var i = start || 0; i < this.length; i++) {
if (this[i] == elem)
return i;
}
return -1;
};
}
if (!Array.prototype.push) {
Array.prototype.push = function(elem) {
this[this.length] = elem;
};
}
if (!Array.prototype.unshift) {
Array.prototype.unshift = function(elem) {
for (var i = this.length; i; i--)
this[i] = this[i - 1];
this[0] = elem;
};
}
var imgCache = {};
function getNaturalWidth(img) { /* for the auto-sizing expression on the retro CSS */
if (img.naturalWidth)
return img.naturalWidth;
/* Cache images by src to avoid wasting memory. */
var imgObj = imgCache[img.src];
if (!imgObj) {
imgObj = new Image();
imgObj.src = img.src;
imgCache[img.src] = imgObj;
}
return imgObj.width;
}
/* Allow HTML5 elements to be styled on IE6. */
if (navigator.userAgent.indexOf('MSIE') > -1) {
document.createElement('nav');
document.createElement('hero');
document.createElement('main');
document.createElement('footer');
}
/* Merge horizontally-neighboring table cells with identical contents. */
addEvent(window, 'load', function() {
var tr = document.getElementsByTagName('tr');
for (var i = 0; i < tr.length; i++) {
var tdStart = tr[i].firstChild;
while (tdStart && (tdStart.nodeType != 1))
tdStart = tdStart.nextSibling;
if (!tdStart)
continue;
var td = tdStart.nextSibling;
while (td) {
var tdNext = td.nextSibling;
if (td.nodeType != 1) {
/* Ignore non-elements. */
} else if (td.innerHTML == tdStart.innerHTML) {
td.parentNode.removeChild(td);
tdStart.colSpan = (tdStart.colSpan || 1) + 1;
} else {
tdStart = td;
}
td = tdNext;
}
}
});