srd/public/candy.js

84 lines
2.4 KiB
JavaScript

// SRDCandy is a browser module that adds non-critical functionality to browsing the SRD site.
var SRDCandy = (function() {
var Menu = (function() {
var div_menu = null;
function setup() {
div_menu = document.getElementById('menu');
var uls = div_menu.getElementsByTagName('ul');
for (var i = 0; i < uls.length; i++) {
if (uls[i].parentNode == div_menu) continue;
var btn = document.createElement('span');
btn.className = 'menu-toggle closed';
btn.innerHTML = '&#9658;';
uls[i].style.display = 'none';
btn.addEventListener('click', function(e) {
e.preventDefault();
var ul = btn.parentNode.getElementsByTagName('ul')[0];
if (btn.className == 'menu-toggle closed') {
btn.className = 'menu-toggle open';
btn.innerHTML = '&#9660;';
ul.style.display = null;
} else {
btn.className = 'menu-toggle closed';
btn.innerHTML = '&#9658;';
ul.style.display = 'none';
}
});
uls[i].parentNode.insertBefore(btn, uls[i].parentNode.firstChild);
}
}
return {
setup: setup
}
})();
var TOC = (function() {
var div_toc = null;
var div_content = null;
function setup() {
div_toc = document.getElementById('table-of-contents');
div_content = document.getElementById('page');
}
function sync() {
if (!div_toc || !div_content) return;
div_toc.innerHTML = '';
for (var i = 0; i < div_content.children.length; i++) {
var el = div_content.children[i];
if (el.tagName.charAt(0) != 'H') continue;
var l = Number(el.tagName.charAt(1));
var div = document.createElement('div');
div.className = 'indent' + l;
var a = document.createElement('a');
a.href = '#'+el.id;
var content = ''
for (var j = 0; j < el.childNodes.length; j++) {
if (el.childNodes[j].className != "header-anchor") {
content += el.childNodes[j].textContent;
}
}
a.innerHTML = content;
div.appendChild(a);
div_toc.appendChild(div);
}
}
return {
setup: setup,
sync: sync
}
})();
return {
gogogo: function() {
Menu.setup();
TOC.setup();
TOC.sync();
}
}
})();
window.addEventListener('load', SRDCandy.gogogo);