|
|
(function (window, document) { "use strict";
var tabs = {};
function changeElementClass(element, classValue) { if (element.getAttribute("className")) { element.setAttribute("className", classValue); } else { element.setAttribute("class", classValue); } }
function getClassAttribute(element) { if (element.getAttribute("className")) { return element.getAttribute("className"); } else { return element.getAttribute("class"); } }
function addClass(element, classValue) { changeElementClass(element, getClassAttribute(element) + " " + classValue); }
function removeClass(element, classValue) { changeElementClass(element, getClassAttribute(element).replace(classValue, "")); }
function initTabs() { var container = document.getElementById("tabs");
tabs.tabs = findTabs(container); tabs.titles = findTitles(tabs.tabs); tabs.headers = findHeaders(container); tabs.select = select; tabs.deselectAll = deselectAll; tabs.select(0);
return true; }
function getCheckBox() { return document.getElementById("line-wrapping-toggle"); }
function getLabelForCheckBox() { return document.getElementById("label-for-line-wrapping-toggle"); }
function findCodeBlocks() { var spans = document.getElementById("tabs").getElementsByTagName("span"); var codeBlocks = []; for (var i = 0; i < spans.length; ++i) { if (spans[i].className.indexOf("code") >= 0) { codeBlocks.push(spans[i]); } } return codeBlocks; }
function forAllCodeBlocks(operation) { var codeBlocks = findCodeBlocks();
for (var i = 0; i < codeBlocks.length; ++i) { operation(codeBlocks[i], "wrapped"); } }
function toggleLineWrapping() { var checkBox = getCheckBox();
if (checkBox.checked) { forAllCodeBlocks(addClass); } else { forAllCodeBlocks(removeClass); } }
function initControls() { if (findCodeBlocks().length > 0) { var checkBox = getCheckBox(); var label = getLabelForCheckBox();
checkBox.onclick = toggleLineWrapping; checkBox.checked = false;
removeClass(label, "hidden"); } }
function switchTab() { var id = this.id.substr(1);
for (var i = 0; i < tabs.tabs.length; i++) { if (tabs.tabs[i].id === id) { tabs.select(i); break; } }
return false; }
function select(i) { this.deselectAll();
changeElementClass(this.tabs[i], "tab selected"); changeElementClass(this.headers[i], "selected");
while (this.headers[i].firstChild) { this.headers[i].removeChild(this.headers[i].firstChild); }
var h2 = document.createElement("H2");
h2.appendChild(document.createTextNode(this.titles[i])); this.headers[i].appendChild(h2); }
function deselectAll() { for (var i = 0; i < this.tabs.length; i++) { changeElementClass(this.tabs[i], "tab deselected"); changeElementClass(this.headers[i], "deselected");
while (this.headers[i].firstChild) { this.headers[i].removeChild(this.headers[i].firstChild); }
var a = document.createElement("A");
a.setAttribute("id", "ltab" + i); a.setAttribute("href", "#tab" + i); a.onclick = switchTab; a.appendChild(document.createTextNode(this.titles[i]));
this.headers[i].appendChild(a); } }
function findTabs(container) { return findChildElements(container, "DIV", "tab"); }
function findHeaders(container) { var owner = findChildElements(container, "UL", "tabLinks"); return findChildElements(owner[0], "LI", null); }
function findTitles(tabs) { var titles = [];
for (var i = 0; i < tabs.length; i++) { var tab = tabs[i]; var header = findChildElements(tab, "H2", null)[0];
header.parentNode.removeChild(header);
if (header.innerText) { titles.push(header.innerText); } else { titles.push(header.textContent); } }
return titles; }
function findChildElements(container, name, targetClass) { var elements = []; var children = container.childNodes;
for (var i = 0; i < children.length; i++) { var child = children.item(i);
if (child.nodeType === 1 && child.nodeName === name) { if (targetClass && child.className.indexOf(targetClass) < 0) { continue; }
elements.push(child); } }
return elements; }
// Entry point.
window.onload = function() { initTabs(); initControls(); };} (window, window.document));
|