MediaWiki:NavigationBars.js

Da Wikivoyage.

Nota: dopo aver salvato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti.

  • Firefox / Safari: tenere premuto il tasto delle maiuscole e fare clic su Ricarica, oppure premere Ctrl-F5 o Ctrl-R (⌘-R su Mac)
  • Google Chrome: premere Ctrl-Shift-R (⌘-Shift-R su un Mac)
  • Internet Explorer: tenere premuto il tasto Ctrl mentre si fa clic su Refresh, oppure premere Ctrl-F5
  • Opera: svuotare completamente la cache dal menu Strumenti → Preferenze
/* Test if an element has a certain class
 * Description: Uses regular expressions and caching for better performance.
 * Maintainers: User:Mike Dillon, User:R. Koot, User:SG */

var hasClass = (function () {
	var reCache = {};
	return function (element, className) {
		return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
	};
})();

// set up the words in your language
var NavigationBarHide = '« Nascondi';
var NavigationBarShow = '» Espandi';

// 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 = 0;

// 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).hasClass('NavPic')) {
				NavChild.style.display = 'none';
			}
			if ($(NavChild).hasClass('NavContent')) {
				NavChild.style.display = 'none';
			}
			if ($(NavChild).hasClass('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).hasClass('NavPic')) {
				NavChild.style.display = 'block';
			}
			if ($(NavChild).hasClass('NavContent')) {
				NavChild.style.display = 'block';
			}
			if ($(NavChild).hasClass('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).hasClass('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);
		}
	}
}

$(createNavigationBarToggleButton);