-function setmode(classname) {
+var basetitle = document.title;
+
+function setmode(classname, restore) {
+ var tableref = document.getElementById('rows');
+ if (!tableref) return;
// set style for each #rows>li>ul>li to display:none unless it matches classname
var showclass = classname ? '^mode '+classname+'(?!\\w)' : '^(?!mode)';
- var rows = document.getElementById('rows').getElementsByTagName('TR');
+ var rows = tableref.getElementsByTagName('TR');
for (var i = 0; i < rows.length; i++) {
var el = rows[i];
el.style.display = el.className.match(showclass) ? 'block' : 'none';
}
// update H2 to reflect the first part of a currently active (but hidden) row header
- var h3s = document.getElementsByTagName('TH');
+ var h3s = tableref.getElementsByTagName('TH');
for (var i = 0; i < h3s.length; i++) {
if (h3s[i].parentNode.style.display != 'block') continue;
var header = h3s[i].firstChild.data;
document.getElementsByTagName('H2')[0].innerHTML = header;
+ document.title = basetitle + ': ' + header;
+ if (restore) break;
+ history.pushState(null, header, classname ? '#'+classname : '#');
break;
}
}
+window.addEventListener('hashchange', function(e) {
+ setmode(location.hash.slice(1), true);
+});
if (location.hash) {
- setmode(location.hash.slice(1));
+ setmode(location.hash.slice(1), true);
}
var keyfocus = undefined;