123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- (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));
|