Difference between revisions of "MediaWiki:Common.js"

From translatewiki.net
Jump to navigation Jump to search
(IE does not have array indexOf method)
(addOnloadHook is deprecated.)
Line 90: Line 90:
 
}
 
}
 
   
 
   
addOnloadHook( createNavigationBarToggleButton );
+
$j( document ).ready( createNavigationBarToggleButton );
  
 
$j( document ).ready( function() {
 
$j( document ).ready( function() {
Line 106: Line 106:
 
// removes the "First Steps" link from the sidebar,
 
// removes the "First Steps" link from the sidebar,
 
// for users already with the translator right
 
// for users already with the translator right
$( document ).ready( function() {
+
$j( document ).ready( function() {
 
   if ( wgUserGroups.join(' ').indexOf('translator') !== -1 ) $j( '#n-bw-sidebar-intro' ).hide();
 
   if ( wgUserGroups.join(' ').indexOf('translator') !== -1 ) $j( '#n-bw-sidebar-intro' ).hide();
 
});
 
});

Revision as of 12:54, 24 December 2010

Information about message (contribute)

Note This is an optional message. Do not translate it, if it would remain unchanged in your language.

JS for all users.

Message definition (MediaWiki core)
/* Any JavaScript here will be loaded for all users on every page load. */
Translation/* Test if an element has a certain class ***************************************/
 
var hasClass = (function () {
   var reCache = {};
   return function (element, className) {
       return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
   };
})();

/** Dynamic Navigation Bars (experimental) **************************************/
 
// set up the words in your language
var NavigationBarHide = '[hide ▲]';
var NavigationBarShow = '[show ▼]';
 
// 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 ( hasClass( NavChild, 'NavPic' ) ) {
               NavChild.style.display = 'none';
           }
           if ( hasClass( NavChild, 'NavContent') ) {
               NavChild.style.display = 'none';
           }
       }
   NavToggle.firstChild.data = NavigationBarShow;
 
   // if hidden now
   } else if (NavToggle.firstChild.data == NavigationBarShow) {
       for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
           if (hasClass(NavChild, 'NavPic')) {
               NavChild.style.display = 'block';
           }
           if (hasClass(NavChild, 'NavContent')) {
               NavChild.style.display = 'block';
           }
       }
       NavToggle.firstChild.data = NavigationBarHide;
   }
}
 
// adds show/hide-button to navigation bars
function createNavigationBarToggleButton()
{
   var indexNavigationBar = 0;
   // iterate over all < div >-elements 
   var divs = document.getElementsByTagName("div");
   for (var i = 0; NavFrame = divs[i]; i++) {
       // if found a navigation bar
       if (hasClass(NavFrame, "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);
           for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
               if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
                   if (NavChild.style.display == 'none') {
                       NavToggleText = document.createTextNode(NavigationBarShow);
                       break;
                   }
               }
           }
 
           NavToggle.appendChild(NavToggleText);
           // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
           for(var j=0; j < NavFrame.childNodes.length; j++) {
               if (hasClass(NavFrame.childNodes[j], "NavHead")) {
                   NavFrame.childNodes[j].appendChild(NavToggle);
               }
           }
           NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
       }
   }
}
 
$j( document ).ready( createNavigationBarToggleButton );

$j( document ).ready( function() {
$j( ".mw-usertoollinks" ).each( function() {
var tools = $j(this);
var expander = $j( "<a/>" ).text( "+" ).attr( "href", "#" );
tools.hide();
expander.click( function() {
tools.show();
$j(this).hide();
});
tools.before( expander );
});
});
// removes the "First Steps" link from the sidebar,
// for users already with the translator right
$j( document ).ready( function() {
  if ( wgUserGroups.join(' ').indexOf('translator') !== -1 ) $j( '#n-bw-sidebar-intro' ).hide();
});
/* Test if an element has a certain class ***************************************/
 
var hasClass = (function () {
    var reCache = {};
    return function (element, className) {
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
    };
})();

/** Dynamic Navigation Bars (experimental) **************************************/
 
// set up the words in your language
var NavigationBarHide = '[hide ▲]';
var NavigationBarShow = '[show ▼]';
 
// 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 ( hasClass( NavChild, 'NavPic' ) ) {
                NavChild.style.display = 'none';
            }
            if ( hasClass( NavChild, 'NavContent') ) {
                NavChild.style.display = 'none';
            }
        }
    NavToggle.firstChild.data = NavigationBarShow;
 
    // if hidden now
    } else if (NavToggle.firstChild.data == NavigationBarShow) {
        for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
            if (hasClass(NavChild, 'NavPic')) {
                NavChild.style.display = 'block';
            }
            if (hasClass(NavChild, 'NavContent')) {
                NavChild.style.display = 'block';
            }
        }
        NavToggle.firstChild.data = NavigationBarHide;
    }
}
 
// adds show/hide-button to navigation bars
function createNavigationBarToggleButton()
{
    var indexNavigationBar = 0;
    // iterate over all < div >-elements 
    var divs = document.getElementsByTagName("div");
    for (var i = 0; NavFrame = divs[i]; i++) {
        // if found a navigation bar
        if (hasClass(NavFrame, "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);
            for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
                if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
                    if (NavChild.style.display == 'none') {
                        NavToggleText = document.createTextNode(NavigationBarShow);
                        break;
                    }
                }
            }
 
            NavToggle.appendChild(NavToggleText);
            // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
            for(var j=0; j < NavFrame.childNodes.length; j++) {
                if (hasClass(NavFrame.childNodes[j], "NavHead")) {
                    NavFrame.childNodes[j].appendChild(NavToggle);
                }
            }
            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
        }
    }
}
 
$j( document ).ready( createNavigationBarToggleButton );

$j( document ).ready( function() {
	$j( ".mw-usertoollinks" ).each( function() {
		var tools = $j(this);
		var expander = $j( "<a/>" ).text( "+" ).attr( "href", "#" );
		tools.hide();
		expander.click( function() {
			tools.show();
			$j(this).hide();
		});
		tools.before( expander );		
	});
});
// removes the "First Steps" link from the sidebar,
// for users already with the translator right
$j( document ).ready( function() {
  if ( wgUserGroups.join(' ').indexOf('translator') !== -1 ) $j( '#n-bw-sidebar-intro' ).hide();
});