sc: refer to ventral sacs overlord by its common name
[sheet.git] / keys.js
diff --git a/keys.js b/keys.js
index dba04a1426b05ee980b7f08262501064a5d1beac..cebd0eee376efc5243de9435d44f0eb49ed3fc3f 100644 (file)
--- a/keys.js
+++ b/keys.js
@@ -1,24 +1,34 @@
-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;