84 lines
2.4 KiB
JavaScript
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 = '►';
|
|
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 = '▼';
|
|
ul.style.display = null;
|
|
} else {
|
|
btn.className = 'menu-toggle closed';
|
|
btn.innerHTML = '►';
|
|
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);
|