You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.9 KiB
57 lines
1.9 KiB
// Kludge in HTML5 tag recognition in IE8 |
|
document.createElement("section"); |
|
document.createElement("article"); |
|
|
|
(function() { |
|
if (!window.addEventListener) return; |
|
var pending = false, prevVal = null; |
|
|
|
function updateSoon() { |
|
if (!pending) { |
|
pending = true; |
|
setTimeout(update, 250); |
|
} |
|
} |
|
|
|
function update() { |
|
pending = false; |
|
var marks = document.getElementById("nav").getElementsByTagName("a"), found; |
|
for (var i = 0; i < marks.length; ++i) { |
|
var mark = marks[i], m; |
|
if (mark.getAttribute("data-default")) { |
|
if (found == null) found = i; |
|
} else if (m = mark.href.match(/#(.*)/)) { |
|
var ref = document.getElementById(m[1]); |
|
if (ref && ref.getBoundingClientRect().top < 50) |
|
found = i; |
|
} |
|
} |
|
if (found != null && found != prevVal) { |
|
prevVal = found; |
|
var lis = document.getElementById("nav").getElementsByTagName("li"); |
|
for (var i = 0; i < lis.length; ++i) lis[i].className = ""; |
|
for (var i = 0; i < marks.length; ++i) { |
|
if (found == i) { |
|
marks[i].className = "active"; |
|
for (var n = marks[i]; n; n = n.parentNode) |
|
if (n.nodeName == "LI") n.className = "active"; |
|
} else { |
|
marks[i].className = ""; |
|
} |
|
} |
|
} |
|
} |
|
|
|
window.addEventListener("scroll", updateSoon); |
|
window.addEventListener("load", updateSoon); |
|
window.addEventListener("hashchange", function() { |
|
setTimeout(function() { |
|
var hash = document.location.hash, found = null, m; |
|
var marks = document.getElementById("nav").getElementsByTagName("a"); |
|
for (var i = 0; i < marks.length; i++) |
|
if ((m = marks[i].href.match(/(#.*)/)) && m[1] == hash) { found = i; break; } |
|
if (found != null) for (var i = 0; i < marks.length; i++) |
|
marks[i].className = i == found ? "active" : ""; |
|
}, 300); |
|
}); |
|
})();
|
|
|