Revision as of 23:00, 18 December 2012 view sourceKrinkle (talk | contribs)Extended confirmed users, Pending changes reviewers, Rollbackers5,481 edits This script uses jquery.client, ensure it is listed in the dependencies← Previous edit |
Revision as of 23:30, 18 December 2012 view source Krinkle (talk | contribs)Extended confirmed users, Pending changes reviewers, Rollbackers5,481 edits Clean up: Fix implied global variable "i", fix missing semi colons, use event handlers (instead of href="javascript:func()" or new Function("")), use canonical special page instead of hardcoding English page names, declare globals and pass lintNext edit → |
Line 5: |
Line 5: |
|
* optimized ResourceLoader modules with possibility to add dependencies etc.) |
|
* optimized ResourceLoader modules with possibility to add dependencies etc.) |
|
* |
|
* |
|
* Since common.js isn't a gadget, there is no place to declare its |
|
* Since Common.js isn't a gadget, there is no place to declare its |
|
* dependencies, so we have to lazy load them with mw.loader.using on demand and |
|
* dependencies, so we have to lazy load them with mw.loader.using on demand and |
|
* then execute the rest in the callback. In most cases these dependencies will |
|
* then execute the rest in the callback. In most cases these dependencies will |
Line 11: |
Line 11: |
|
* dependency hasn't arrived yet it'll make sure those are loaded before this. |
|
* dependency hasn't arrived yet it'll make sure those are loaded before this. |
|
*/ |
|
*/ |
|
|
/*global mw, $, importStylesheet, importScript */ |
|
|
|
|
|
/*jshint curly:false eqnull:true, strict:false, browser:true, */ |
|
mw.loader.using( , function () { |
|
mw.loader.using( , function () { |
|
/* Begin of mw.loader.using callback */ |
|
/* Begin of mw.loader.using callback */ |
Line 21: |
Line 22: |
|
* Maintainers: ], ], ] |
|
* Maintainers: ], ], ] |
|
*/ |
|
*/ |
|
if ( mw.config.get( 'wgPageName' ) == 'Main_Page' || mw.config.get( 'wgPageName' ) == 'Talk:Main_Page' ) { |
|
if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) { |
|
$( document ).ready( function () { |
|
$( document ).ready( function () { |
|
mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/List_of_Wikipedias', |
|
mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/List_of_Wikipedias', |
Line 34: |
Line 35: |
|
* @rev: 2 |
|
* @rev: 2 |
|
*/ |
|
*/ |
|
if ( mw.config.get( 'wgArticleId' ) === 0 && mw.config.get( 'wgNamespaceNumber' ) == 2 ) { |
|
if ( mw.config.get( 'wgArticleId' ) === 0 && mw.config.get( 'wgNamespaceNumber' ) === 2 ) { |
|
var titleParts = mw.config.get( 'wgPageName' ).split( '/' ); |
|
var titleParts = mw.config.get( 'wgPageName' ).split( '/' ); |
|
/* Make sure there was a part before and after the slash |
|
/* Make sure there was a part before and after the slash |
|
And that the latter is 'skin.js' or 'skin.css' */ |
|
And that the latter is 'skin.js' or 'skin.css' */ |
|
if ( titleParts.length == 2 ) { |
|
if ( titleParts.length === 2 ) { |
|
var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' ); |
|
var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' ); |
|
if ( titleParts.slice( -1 ) == 'skin.js' ) { |
|
if ( titleParts.slice( -1 ) === 'skin.js' ) { |
|
window.location.href = mw.util.wikiGetlink( userSkinPage + '.js' ); |
|
window.location.href = mw.util.wikiGetlink( userSkinPage + '.js' ); |
|
} else if ( titleParts.slice( -1 ) == 'skin.css' ) { |
|
} else if ( titleParts.slice( -1 ) === 'skin.css' ) { |
|
window.location.href = mw.util.wikiGetlink( userSkinPage + '.css' ); |
|
window.location.href = mw.util.wikiGetlink( userSkinPage + '.css' ); |
|
} |
|
} |
Line 55: |
Line 56: |
|
window.addPortletLink = function () { |
|
window.addPortletLink = function () { |
|
return mw.util.addPortletLink.apply( mw.util, arguments ); |
|
return mw.util.addPortletLink.apply( mw.util, arguments ); |
|
} |
|
}; |
|
|
|
|
|
/** |
|
/** |
Line 64: |
Line 65: |
|
window.getURLParamValue = function () { |
|
window.getURLParamValue = function () { |
|
return mw.util.getParamValue.apply( mw.util, arguments ); |
|
return mw.util.getParamValue.apply( mw.util, arguments ); |
|
} |
|
}; |
|
|
|
|
|
/** |
|
/** |
Line 73: |
Line 74: |
|
window.hasClass = function ( element, className ) { |
|
window.hasClass = function ( element, className ) { |
|
return $( element ).hasClass( className ); |
|
return $( element ).hasClass( className ); |
|
} |
|
}; |
|
|
|
|
|
/** |
|
/** |
Line 102: |
Line 103: |
|
* Import more specific scripts if necessary |
|
* Import more specific scripts if necessary |
|
*/ |
|
*/ |
|
if ( mw.config.get( 'wgAction' ) == 'edit' || mw.config.get( 'wgAction' ) == 'submit' || mw.config.get( 'wgPageName' ) == 'Special:Upload' ) { |
|
if ( mw.config.get( 'wgAction' ) === 'edit' || mw.config.get( 'wgAction' ) === 'submit' || mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Upload' ) { |
|
/* scripts specific to editing pages */ |
|
/* scripts specific to editing pages */ |
|
importScript( 'MediaWiki:Common.js/edit.js' ); |
|
importScript( 'MediaWiki:Common.js/edit.js' ); |
|
} else if ( mw.config.get( 'wgPageName' ) == 'Special:Watchlist' ) { |
|
} else if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Watchlist' ) { |
|
/* watchlist scripts */ |
|
/* watchlist scripts */ |
|
importScript( 'MediaWiki:Common.js/watchlist.js' ); |
|
importScript( 'MediaWiki:Common.js/watchlist.js' ); |
|
} |
|
} |
|
if ( mw.config.get( 'wgNamespaceNumber' ) == 6 ) { |
|
if ( mw.config.get( 'wgNamespaceNumber' ) === 6 ) { |
|
/* file description page scripts */ |
|
/* file description page scripts */ |
|
importScript( 'MediaWiki:Common.js/file.js' ); |
|
importScript( 'MediaWiki:Common.js/file.js' ); |
Line 117: |
Line 118: |
|
* Load scripts specific to Internet Explorer |
|
* Load scripts specific to Internet Explorer |
|
*/ |
|
*/ |
|
if ( $.client.profile().name == 'msie' ) { |
|
if ( $.client.profile().name === 'msie' ) { |
|
importScript( 'MediaWiki:Common.js/IEFixes.js' ); |
|
importScript( 'MediaWiki:Common.js/IEFixes.js' ); |
|
} |
|
} |
Line 124: |
Line 125: |
|
* Fix for Windows XP Unicode font rendering |
|
* Fix for Windows XP Unicode font rendering |
|
*/ |
|
*/ |
|
if ( navigator.appVersion.search(/windows nt 5/i) != -1 ) { |
|
if ( navigator.appVersion.search(/windows nt 5/i) !== -1 ) { |
|
mw.util.addCSS( '.IPA { font-family: "Lucida Sans Unicode", "Arial Unicode MS"; } ' + |
|
mw.util.addCSS( '.IPA { font-family: "Lucida Sans Unicode", "Arial Unicode MS"; } ' + |
|
'.Unicode { font-family: "Arial Unicode MS", "Lucida Sans Unicode"; } ' ); |
|
'.Unicode { font-family: "Arial Unicode MS", "Lucida Sans Unicode"; } ' ); |
Line 138: |
Line 139: |
|
* Maintainers: ] |
|
* Maintainers: ] |
|
*/ |
|
*/ |
|
( function ( $, mw ) { |
|
( function () { |
|
var require_wikiminiatlas = false; |
|
var require_wikiminiatlas = false; |
|
var coord_filter = /geohack/; |
|
var coord_filter = /geohack/; |
Line 156: |
Line 157: |
|
} |
|
} |
|
} ); |
|
} ); |
|
} )( jQuery, mediaWiki ); |
|
} )(); |
|
|
|
|
|
/** |
|
/** |
Line 205: |
Line 206: |
|
|
|
|
|
var Rows = Table.rows; |
|
var Rows = Table.rows; |
|
|
var i; |
|
|
|
|
|
if ( Button.firstChild.data == collapseCaption ) { |
|
if ( Button.firstChild.data === collapseCaption ) { |
|
for ( var i = 1; i < Rows.length; i++ ) { |
|
for ( i = 1; i < Rows.length; i++ ) { |
|
Rows.style.display = 'none'; |
|
Rows.style.display = 'none'; |
|
} |
|
} |
|
Button.firstChild.data = expandCaption; |
|
Button.firstChild.data = expandCaption; |
|
} else { |
|
} else { |
|
for ( var i = 1; i < Rows.length; i++ ) { |
|
for ( i = 1; i < Rows.length; i++ ) { |
|
Rows.style.display = Rows.style.display; |
|
Rows.style.display = Rows.style.display; |
|
} |
|
} |
|
Button.firstChild.data = collapseCaption; |
|
Button.firstChild.data = collapseCaption; |
|
} |
|
} |
|
} |
|
}; |
|
|
|
|
|
function createCollapseButtons() { |
|
function createCollapseButtons() { |
|
var tableIndex = 0; |
|
var tableIndex = 0; |
|
var NavigationBoxes = new Object(); |
|
var NavigationBoxes = {}; |
|
var Tables = document.getElementsByTagName( 'table' ); |
|
var Tables = document.getElementsByTagName( 'table' ); |
|
|
var i; |
|
|
|
|
|
function handleButtonLink( index, e ) { |
|
|
window.collapseTable( index ); |
|
|
e.preventDefault(); |
|
|
} |
|
|
|
|
|
for ( var i = 0; i < Tables.length; i++ ) { |
|
for ( i = 0; i < Tables.length; i++ ) { |
|
if ( $( Tables ).hasClass( 'collapsible' ) ) { |
|
if ( $( Tables ).hasClass( 'collapsible' ) ) { |
|
|
|
|
Line 245: |
Line 253: |
|
ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex ); |
|
ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex ); |
|
ButtonLink.setAttribute( 'href', '#' ); |
|
ButtonLink.setAttribute( 'href', '#' ); |
|
addHandler( ButtonLink, 'click', new Function( 'evt', 'collapseTable(' + tableIndex + '); return killEvt( evt );' ) ); |
|
$( ButtonLink ).on( 'click', $.proxy( handleButtonLink, ButtonLink, tableIndex ) ); |
|
ButtonLink.appendChild( ButtonText ); |
|
ButtonLink.appendChild( ButtonText ); |
|
|
|
|
Line 257: |
Line 265: |
|
} |
|
} |
|
|
|
|
|
for ( var i = 0; i < tableIndex; i++ ) { |
|
for ( i = 0; i < tableIndex; i++ ) { |
|
if ( $( NavigationBoxes ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes ).hasClass( 'autocollapse' ) ) ) { |
|
if ( $( NavigationBoxes ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes ).hasClass( 'autocollapse' ) ) ) { |
|
collapseTable( i ); |
|
window.collapseTable( i ); |
|
} |
|
} |
|
else if ( $( NavigationBoxes ).hasClass ( 'innercollapse' ) ) { |
|
else if ( $( NavigationBoxes ).hasClass ( 'innercollapse' ) ) { |
|
var element = NavigationBoxes; |
|
var element = NavigationBoxes; |
|
while (element = element.parentNode) { |
|
while ((element = element.parentNode)) { |
|
if ( $( element ).hasClass( 'outercollapse' ) ) { |
|
if ( $( element ).hasClass( 'outercollapse' ) ) { |
|
collapseTable ( i ); |
|
window.collapseTable ( i ); |
|
break; |
|
break; |
|
} |
|
} |
Line 294: |
Line 302: |
|
var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar ); |
|
var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar ); |
|
var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar ); |
|
var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar ); |
|
|
var NavChild; |
|
|
|
|
|
if ( !NavFrame || !NavToggle ) { |
|
if ( !NavFrame || !NavToggle ) { |
Line 300: |
Line 309: |
|
|
|
|
|
/* if shown now */ |
|
/* if shown now */ |
|
if ( NavToggle.firstChild.data == NavigationBarHide ) { |
|
if ( NavToggle.firstChild.data === NavigationBarHide ) { |
|
for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) { |
|
for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) { |
|
if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) { |
|
if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) { |
|
NavChild.style.display = 'none'; |
|
NavChild.style.display = 'none'; |
Line 309: |
Line 318: |
|
|
|
|
|
/* if hidden now */ |
|
/* if hidden now */ |
|
} else if ( NavToggle.firstChild.data == NavigationBarShow ) { |
|
} else if ( NavToggle.firstChild.data === NavigationBarShow ) { |
|
for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) { |
|
for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) { |
|
if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) { |
|
if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) { |
|
NavChild.style.display = 'block'; |
|
NavChild.style.display = 'block'; |
Line 317: |
Line 326: |
|
NavToggle.firstChild.data = NavigationBarHide; |
|
NavToggle.firstChild.data = NavigationBarHide; |
|
} |
|
} |
|
} |
|
}; |
|
|
|
|
|
/* adds show/hide-button to navigation bars */ |
|
/* adds show/hide-button to navigation bars */ |
|
function createNavigationBarToggleButton() { |
|
function createNavigationBarToggleButton() { |
|
var indexNavigationBar = 0; |
|
var indexNavigationBar = 0; |
|
|
var NavFrame; |
|
|
var NavChild; |
|
/* iterate over all < div >-elements */ |
|
/* iterate over all < div >-elements */ |
|
var divs = document.getElementsByTagName( 'div' ); |
|
var divs = document.getElementsByTagName( 'div' ); |
|
for ( var i = 0; NavFrame = divs; i++ ) { |
|
for ( var i = 0; (NavFrame = divs); i++ ) { |
|
/* if found a navigation bar */ |
|
/* if found a navigation bar */ |
|
if ( $( NavFrame ).hasClass( 'NavFrame' ) ) { |
|
if ( $( NavFrame ).hasClass( 'NavFrame' ) ) { |
Line 332: |
Line 343: |
|
NavToggle.className = 'NavToggle'; |
|
NavToggle.className = 'NavToggle'; |
|
NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar ); |
|
NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar ); |
|
NavToggle.setAttribute( 'href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');' ); |
|
$( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) ); |
|
|
|
|
|
var isCollapsed = $( NavFrame ).hasClass( 'collapsed' ); |
|
var isCollapsed = $( NavFrame ).hasClass( 'collapsed' ); |
Line 342: |
Line 353: |
|
* "collapsed" to the NavFrame itself, just like with collapsible tables. |
|
* "collapsed" to the NavFrame itself, just like with collapsible tables. |
|
*/ |
|
*/ |
|
for ( var NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling ) { |
|
for ( NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling ) { |
|
if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) { |
|
if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) { |
|
if ( NavChild.style.display == 'none' ) { |
|
if ( NavChild.style.display === 'none' ) { |
|
isCollapsed = true; |
|
isCollapsed = true; |
|
} |
|
} |
Line 350: |
Line 361: |
|
} |
|
} |
|
if ( isCollapsed ) { |
|
if ( isCollapsed ) { |
|
for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) { |
|
for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) { |
|
if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) { |
|
if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) { |
|
NavChild.style.display = 'none'; |
|
NavChild.style.display = 'none'; |
Line 380: |
Line 391: |
|
*/ |
|
*/ |
|
function uploadwizard_newusers() { |
|
function uploadwizard_newusers() { |
|
if ( mw.config.get( 'wgNamespaceNumber' ) == 4 && mw.config.get( 'wgTitle' ) == 'Upload' && mw.config.get( 'wgAction' ) == 'view' ) { |
|
if ( mw.config.get( 'wgNamespaceNumber' ) === 4 && mw.config.get( 'wgTitle' ) === 'Upload' && mw.config.get( 'wgAction' ) === 'view' ) { |
|
var oldDiv = document.getElementById( 'autoconfirmedusers' ), |
|
var oldDiv = document.getElementById( 'autoconfirmedusers' ), |
|
newDiv = document.getElementById( 'newusers' ); |
|
newDiv = document.getElementById( 'newusers' ); |
Line 386: |
Line 397: |
|
var userGroups = mw.config.get( 'wgUserGroups' ); |
|
var userGroups = mw.config.get( 'wgUserGroups' ); |
|
if ( userGroups ) { |
|
if ( userGroups ) { |
|
for ( i = 0; i < userGroups.length; i++ ) { |
|
for ( var i = 0; i < userGroups.length; i++ ) { |
|
if ( userGroups == 'autoconfirmed' ) { |
|
if ( userGroups === 'autoconfirmed' ) { |
|
oldDiv.style.display = 'block'; |
|
oldDiv.style.display = 'block'; |
|
newDiv.style.display = 'none'; |
|
newDiv.style.display = 'none'; |
Line 429: |
Line 440: |
|
cats = cats.getElementsByTagName( 'a' ); |
|
cats = cats.getElementsByTagName( 'a' ); |
|
for ( var i = 0; i < cats.length; i++ ) { |
|
for ( var i = 0; i < cats.length; i++ ) { |
|
if ( cats.title == 'Category:Living people' || cats.title == 'Category:Possibly living people' ) { |
|
if ( cats.title === 'Category:Living people' || cats.title === 'Category:Possibly living people' ) { |
|
addEditIntro( 'Template:BLP_editintro' ); |
|
addEditIntro( 'Template:BLP_editintro' ); |
|
break; |
|
break; |
Line 441: |
Line 452: |
|
* Maintainers: ] |
|
* Maintainers: ] |
|
*/ |
|
*/ |
|
if ( document.location && document.location.protocol && document.location.protocol == 'https:' ) { |
|
if ( document.location && document.location.protocol && document.location.protocol === 'https:' ) { |
|
/* New secure servers */ |
|
/* New secure servers */ |
|
importScript( 'MediaWiki:Common.js/secure new.js' ); |
|
importScript( 'MediaWiki:Common.js/secure new.js' ); |