Difference between revisions of "MediaWiki:Common.js"

From FreewarWiki
Jump to: navigation, search
(reinsert partial)
(reinsert partial)
Line 115: Line 115:
 
   
 
   
 
  /* END Dynamic Navigation Bars
 
  /* END Dynamic Navigation Bars
 +
// ============================================================
 +
 +
== Vertical Tabbing ==
 +
*/
 +
 +
var shownTab = Array();
 +
var disabledLink = Array();
 +
 +
// switches between tabs
 +
function showVTab(area, tab) {
 +
  var div = document.getElementById('VTabContent_' + String(area) + '_' + String(tab));
 +
  var a = document.getElementById('VTabLink_' + String(area) + '_' + String(tab));
 +
  if (!div || !a) return;
 +
 +
  div.style.height = 'auto';
 +
  if (shownTab[area]) shownTab[area].style.height = '0';
 +
  shownTab[area] = div;
 +
 +
  var strong = document.getElementById('VTabStrong_' + String(area));
 +
  if (!strong) {
 +
    strong = document.createElement('strong');
 +
    strong.id = 'VTabStrong_' + String(area);
 +
    strong.className = 'selflink';
 +
  }
 +
 +
  if (disabledLink[area]) {
 +
    disabledLink[area].appendChild(strong.firstChild);
 +
    strong.parentNode.appendChild(disabledLink[area]);
 +
  }
 +
 
 +
  strong.appendChild(a.firstChild);
 +
  a.parentNode.appendChild(strong);
 +
  a.parentNode.removeChild(a);
 +
  disabledLink[area] = a;
 +
}
 +
 +
// initiates vertically tabbed areas
 +
function initVTabs() {
 +
  var indexVTabs = 0;
 +
  // iterate over all tables
 +
  for (var i = 0; table = document.getElementsByTagName('table')[i]; i++) {
 +
    if (table.className != 'VTabs') continue;
 +
 +
    table.id = 'VTabs_' + String(++indexVTabs);
 +
    shownTab[indexVTabs] = disabledLink[indexVTabs] = 0;
 +
 +
    var numTabs = 0;
 +
    var contents;
 +
    for (var j = 0; tr = table.getElementsByTagName('tr')[j]; j++) {
 +
      var caption = tr.getElementsByTagName('td')[0];
 +
      caption.className = 'VTabCaption';
 +
      caption.id = 'VTabCaption_' + String(indexVTabs) + '_' + String(++numTabs);
 +
 +
      var a = document.createElement('a');
 +
      a.id = 'VTabLink_' + String(indexVTabs) + '_' + String(++numTabs);
 +
      a.href = 'javascript:showVTab(' + String(indexVTabs) + ', ' + String(numTabs) + ');';
 +
      a.appendChild(caption.firstChild);
 +
      caption.appendChild(a);
 +
 +
      var content = tr.getElementsByTagName('td')[1];
 +
      var div = document.createElement('div');
 +
      div.className = 'VTabContent';
 +
      div.id = 'VTabContent_' + String(indexVTabs) + '_' + String(numTabs);
 +
 +
      while (content.childNodes.length) {
 +
        div.appendChild(content.childNodes[0]);
 +
      }
 +
 +
      if (contents) {
 +
        tr.removeChild(content);
 +
      } else {
 +
        contents = content
 +
      }
 +
      contents.rowSpan = numTabs;
 +
      contents.appendChild(div);
 +
    }
 +
  }
 +
}
 +
 +
jQuery( document ).ready( function( $ ) {
 +
initVTabs();
 +
} );
 +
 +
// addOnloadHook(initVTabs);
 +
 +
/* END Vertical Tabbing
 
  // ============================================================
 
  // ============================================================

Revision as of 15:26, 8 February 2017

/* Any JavaScript here will be loaded for all users on every page load. */
/* Hinweis: Die Wiki-Überschriften sind JavaScript-technisch auskommentiert
== Dynamic Navigation Bars ==
 */
 
 // set up the words in your language
 var NavigationBarHide = 'Hide';
 var NavigationBarShow = 'Show';
 
 // set up max count of Navigation Bars on page,
 // if there are more, all will be hidden
 // NavigationBarShowDefault = 0; // all bars will be hidden
 // NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden
 var NavigationBarShowDefault = 1;
 
 
 // shows and hides content and picture (if available) of navigation bars
 // Parameters:
 //     indexNavigationBar: the index of navigation bar to be toggled
 function toggleNavigationBar(indexNavigationBar)
 {
    var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
    var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
 
    if (!NavFrame || !NavToggle) {
        return false;
    }
 
    // if shown now
    if (NavToggle.firstChild.data == NavigationBarHide) {
        for (
                var NavChild = NavFrame.firstChild;
                NavChild != null;
                NavChild = NavChild.nextSibling
            ) {
            if (NavChild.className == 'NavPic') {
                NavChild.style.display = 'none';
            }
            if (NavChild.className == 'NavContent') {
                NavChild.style.display = 'none';
            }
            if (NavChild.className == 'NavToggle') {
                NavChild.firstChild.data = NavigationBarShow;
            }
        }
 
    // if hidden now
    } else if (NavToggle.firstChild.data == NavigationBarShow) {
        for (
                var NavChild = NavFrame.firstChild;
                NavChild != null;
                NavChild = NavChild.nextSibling
            ) {
            if (NavChild.className == 'NavPic') {
                NavChild.style.display = 'block';
            }
            if (NavChild.className == 'NavContent') {
                NavChild.style.display = 'block';
            }
            if (NavChild.className == 'NavToggle') {
                NavChild.firstChild.data = NavigationBarHide;
            }
        }
    }
 }
 
 // adds show/hide-button to navigation bars
 function createNavigationBarToggleButton()
 {
    var indexNavigationBar = 0;
    // iterate over all < div >-elements
    for(
            var i=0; 
            NavFrame = document.getElementsByTagName("div")[i]; 
            i++
        ) {
        // if found a navigation bar
        if (NavFrame.className == "NavFrame") {
 
            indexNavigationBar++;
            var NavToggle = document.createElement("a");
            NavToggle.className = 'NavToggle';
            NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
            NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
 
            var NavToggleText = document.createTextNode(NavigationBarHide);
            NavToggle.appendChild(NavToggleText);
 
            // add NavToggle-Button as first div-element 
            // in < div class="NavFrame" >
            NavFrame.insertBefore(
                NavToggle,
                NavFrame.firstChild
            );
            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
        }
    }
    // if more Navigation Bars found than Default: hide all
    if (NavigationBarShowDefault < indexNavigationBar) {
        for(
                var i=1; 
                i<=indexNavigationBar; 
                i++
        ) {
            toggleNavigationBar(i);
        }
    }
 
 }

 jQuery( document ).ready( function( $ ) {
	createNavigationBarToggleButton();
} );
// addOnloadHook(createNavigationBarToggleButton);
 
 /* END Dynamic Navigation Bars
 // ============================================================

== Vertical Tabbing ==
 */

 var shownTab = Array();
 var disabledLink = Array();

 // switches between tabs
 function showVTab(area, tab) {
   var div = document.getElementById('VTabContent_' + String(area) + '_' + String(tab));
   var a = document.getElementById('VTabLink_' + String(area) + '_' + String(tab));
   if (!div || !a) return;
 
   div.style.height = 'auto';
   if (shownTab[area]) shownTab[area].style.height = '0';
   shownTab[area] = div;

   var strong = document.getElementById('VTabStrong_' + String(area));
   if (!strong) {
     strong = document.createElement('strong');
     strong.id = 'VTabStrong_' + String(area);
     strong.className = 'selflink';
   }

   if (disabledLink[area]) {
     disabledLink[area].appendChild(strong.firstChild);
     strong.parentNode.appendChild(disabledLink[area]);
   }
   
   strong.appendChild(a.firstChild);
   a.parentNode.appendChild(strong);
   a.parentNode.removeChild(a);
   disabledLink[area] = a;
 }
 
 // initiates vertically tabbed areas
 function initVTabs() {
   var indexVTabs = 0;
   // iterate over all tables
   for (var i = 0; table = document.getElementsByTagName('table')[i]; i++) {
     if (table.className != 'VTabs') continue;

     table.id = 'VTabs_' + String(++indexVTabs);
     shownTab[indexVTabs] = disabledLink[indexVTabs] = 0;

     var numTabs = 0;
     var contents;
     for (var j = 0; tr = table.getElementsByTagName('tr')[j]; j++) {
       var caption = tr.getElementsByTagName('td')[0];
       caption.className = 'VTabCaption';
       caption.id = 'VTabCaption_' + String(indexVTabs) + '_' + String(++numTabs);

       var a = document.createElement('a');
       a.id = 'VTabLink_' + String(indexVTabs) + '_' + String(++numTabs);
       a.href = 'javascript:showVTab(' + String(indexVTabs) + ', ' + String(numTabs) + ');';
       a.appendChild(caption.firstChild);
       caption.appendChild(a);

       var content = tr.getElementsByTagName('td')[1];
       var div = document.createElement('div');
       div.className = 'VTabContent';
       div.id = 'VTabContent_' + String(indexVTabs) + '_' + String(numTabs);

       while (content.childNodes.length) {
         div.appendChild(content.childNodes[0]);
       }

       if (contents) {
         tr.removeChild(content);
       } else {
         contents = content
       }
       contents.rowSpan = numTabs;
       contents.appendChild(div);
     }
   }
 }
 
 jQuery( document ).ready( function( $ ) {
	initVTabs();
} );

// addOnloadHook(initVTabs);
 
 /* END Vertical Tabbing
 // ============================================================