MediaWiki:Common.js

/** * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally * loaded for all users on every wiki page. If possible create a gadget that is * enabled by default instead of adding it here (since gadgets are fully * optimized ResourceLoader modules with possibility to add dependencies etc.) **/

/** extract a URL parameter from the current URL ********** * From en:User:Lupin/autoedit.js * * paramName : the name of the parameter to extract * url       : optional URL to extract the parameter from, document.location.href if not given. * * Local Maintainer: User:Dschwen, User:Lupo */ function getParamValue( paramName, url) { if (typeof (url) == 'undefined' || url === null) url = document.location.href; var cmdRe=RegExp( '[&?]' + paramName + '=([^&#]*)' ); // Stop at hash var m=cmdRe.exec(url); if (m && m.length > 1) return decodeURIComponent(m[1]); return null; }

/** * Collapsible tables * * @version 2.0.2 (2014-03-14) * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js * @author User:R. Koot * @author User:Krinkle * @deprecated Since MediaWiki 1.20: Use class="mw-collapsible" instead which * is supported in MediaWiki core. */ /*global $, mw */ var autoCollapse = 2; var collapseCaption = '▲'; var expandCaption = '▼'; function collapseTable( tableIndex ) { var Button = document.getElementById( 'collapseButton' + tableIndex ); var Table = document.getElementById( 'collapsibleTable' + tableIndex ); if ( !Table || !Button ) { return false; }	var Rows = Table.rows; var i;	if ( Button.firstChild.data === collapseCaption ) { for ( i = 1; i < Rows.length; i++ ) { Rows[i].style.display = 'none'; }		Button.firstChild.data = expandCaption; } else { for ( i = 1; i < Rows.length; i++ ) { Rows[i].style.display = Rows[0].style.display; }		Button.firstChild.data = collapseCaption; } } function createClickHandler( tableIndex ) { return function ( e ) { e.preventDefault; collapseTable( tableIndex ); }; } function createCollapseButtons { var tableIndex = 0; var NavigationBoxes = {}; var Tables = document.getElementsByTagName( 'table' ); var i;	for ( i = 0; i < Tables.length; i++ ) { if ( $( Tables[i] ).hasClass( 'collapsible' ) ) { /* only add button and increment count if there is a header row to work with */ var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0]; if ( !HeaderRow ) { continue; }			var Header = HeaderRow.getElementsByTagName( 'th' )[0]; if ( !Header ) { continue; }			NavigationBoxes[tableIndex] = Tables[i]; Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex ); var Button = document.createElement( 'span' ); var ButtonLink = document.createElement( 'a' ); var ButtonText = document.createTextNode( collapseCaption ); // TODO: Declare styles in MediaWiki:Gadget-collapsibleTables.css // Button.className = 'collapseButton'; Button.style.styleFloat = 'right'; Button.style.cssFloat = 'right'; Button.style.fontWeight = 'normal'; Button.style.textAlign = 'right'; Button.style.width = '6em'; ButtonLink.style.color = Header.style.color; ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex ); ButtonLink.setAttribute( 'href', '#' ); $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) ); ButtonLink.appendChild( ButtonText ); Button.appendChild( document.createTextNode( '[' ) ); Button.appendChild( ButtonLink ); Button.appendChild( document.createTextNode( ']' ) ); Header.insertBefore( Button, Header.firstChild ); tableIndex++; }	}	for ( i = 0; i < tableIndex; i++ ) { if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||			( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )		) { collapseTable( i ); }	} } mw.hook( 'wikipage.content' ).add( createCollapseButtons );

function WEAddStyles(a) { var ss = document.createElement('style'); ss.type = 'text/css'; ss.media = 'screen'; ss.title = 'WE'; if (ss.stylesheet) ss.stylesheet.cssText = a; //IE else ss.appendChild(document.createTextNode(a)); document.getElementsByTagName('head')[0].appendChild(ss); }

$(function { var g;  /* hide some navigation and other unnecessary elements if displayed in an iFrame */  if (window.self != window.top) {    var content = document.getElementById('content');    if (content) {      content.style.margin = 0;      content.style.borderStyle = 'none';    }    var reva = /(\d+:\d+, \d+ \w+ \d+)/.exec($('#mw-revision-info').text);    var revinfo = reva ? reva[0] : ;    reva = /oldid=(\d+)/.exec($('#mw-revision-nav').find('a').attr('href'));    var oldid = reva ? reva[1] : ;    var removals = ['mw-page-base', 'mw-head-base', 'mw-navigation', 'mw-head', 'mw-panel', 'column-one', 'siteNotice', 'contentSub', 'siteSub', 'catlinks', 'page-base', 'head-base', 'head', 'panel', 'firstHeading', 'footer-info-lastmod', 'footer-info-viewcount', 'footer-places', 'footer-icon-poweredby', 'f-poweredbyico', 'lastmod', 'viewcount', 'privacy', 'about', 'disclaimer', 'notiframe']; for (var i=0; i<removals.length; i++) { g = document.getElementById(removals[i]); if (g) { g.style.display = 'none'; }   }    $('.editsection,.mw-editsection').css('visibility', 'hidden'); $('#content, #footer').css('background-image', 'none'); document.body.style.background='none'; $('.iframeonly').removeClass('iframeonly'); var q = {}; var qs = document.location.search; qs = qs.substring(1).toLowerCase.split('&'); for (i=0; i<qs.length; i++) { g = qs[i].split('='); q[g[0]] = (g.length === 1) ? true : g[1]; }   if (q.nonav) { var divs = document.getElementsByTagName('div'); for (i=0; i<divs.length; i++) { if (divs[i].className.match(/navigation/i)) { divs[i].style.display = 'none'; }     }    }    g = document.getElementById('footer'); if (g) { g.style.marginLeft = 0; /* g.style.position = 'absolute'; g.style.bottom = 0; g.style.width = "98%"; */ }   var foot = document.getElementById('f-list') || document.getElementById('footer-info'); if (foot) { var li = document.createElement('li'); var wgServer = window.self.location.origin + '/'; g = wgServer + wgPageName; var footerfrom; if (revinfo) { footerfrom = 'Revision of ' + revinfo + ' retrieved from ' + g + '';     li.style.display = 'block';      foot.insertBefore(li, document.getElementById('copyright') || document.getElementById('footer-info-copyright'));    }    if ((wgCanonicalNamespace == 'Special') && (wgCanonicalSpecialPageName == 'Userlogin')) {      $('#footer-icon-copyright').hide;    }    if (q.links) {      var largs = q.links.split('|');      for (var j=0; j<largs.length; j++) {        q[largs[j]] = true;      }      var hilight = q.highlight ? ' background: yellow;' : ;      var hover = q.hover ? ' background: yellow;' : ;      if (q.none || q.highlight || q.hover) {        WEAddStyles('a.link {text-decoration: none; padding: 0px; background: none; ' + hilight + '} a.visited {text-decoration: none;' + hilight +'} a:active {text-decoration: none;' + hilight + '} a:hover {text-decoration: none;' + hilight + hover + '}');      } var as = document.getElementsByTagName('a'); for (j=0; j<as.length; j++) { var href = as[j].getAttribute('href'); if (href) { if (q.none || q.show || q.hover || q.highlight) { as[j].setAttribute('onclick', 'return false;'); }         if (q.window) { as[j].setAttribute('target', '_WE'); }       }      }    }    if (q.editable) { $('.editsection,.mw-editsection').css('visibility', 'visible'); }   if (q.noheading) { $('#firstHeading').css('display', 'none'); }   // if postMessage is supported, try to let the parent know our size if (parent.postMessage) { var ht = content.offsetHeight; var ftr = document.getElementById('footer'); if (ftr) { ht = ht + ftr.offsetHeight; } var loc = document.location.href; parent.postMessage('height^' + ht + '^' + loc, "*"); } } });

// BEGIN Dynamic Navigation Bars // NEEDS Enable multiple onload functions // set up the words in your language var NavigationBarHide = 'Collapse'; var NavigationBarShow = 'Expand'; // 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.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 -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            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);

// if logged in, and visiting an existing File: page with no description if (wgAction === 'edit' && wgUserName && (wgNamespaceNumber === 6) && wgArticleId) { $.getScript('/skins/common/we/file_information.js'); }