Bureaucrats, ninja, Administrators
67,566
edits
(What am i missing?.. :-\) |
m (Undo, and not js related either) |
||
Line 1: | Line 1: | ||
/ | // <pre><nowiki> | ||
//<source lang="javascript"> | |||
/* Import more specific scripts if necessary */ | |||
if (wgAction == "edit" || wgAction == "submit" || wgPageName == "Special:Upload") //scripts specific to editing pages | |||
{ | |||
importScript("MediaWiki:Common.js/edit.js") | |||
} | |||
else if (wgPageName == "Special:Watchlist") //watchlist scripts | |||
{ | |||
importScript("MediaWiki:Common.js/watchlist.js") | |||
} | |||
else if (wgPageName == "Special:Search") //scripts specific to Special:Search | |||
{ | |||
importScript("MediaWiki:Common.js/search.js") | |||
/ | |||
if ( | |||
} | } | ||
/** | |||
/** Sysop Javascript ******************************************************* | |||
* | |||
* Description: Allows for sysop-specific Javascript at [[MediaWiki:Sysop.js]]. | |||
*/ | |||
function sysopFunctions() { | |||
if ( wgUserGroups && !window.disableSysopJS ) { | |||
for ( var g = 0; g < wgUserGroups.length; ++g ) { | |||
if ( wgUserGroups[g] == "sysop" ) { | |||
importScript( "MediaWiki:Sysop.js" ); | |||
if ( | break; | ||
var | } | ||
} | } | ||
} | } | ||
} | } | ||
/** | addOnloadHook( sysopFunctions ); | ||
/** WikiMiniAtlas ******************************************************* | |||
* | |||
* Description: WikiMiniAtlas is a popup click and drag world map. | |||
* This script causes all of our coordinate links to display the WikiMiniAtlas popup button. | |||
* The script itself is located on meta because it is used by many projects. | |||
* See [[Meta:WikiMiniAtlas]] for more information. | |||
* Maintainers: [[User:Dschwen]] | |||
*/ | |||
if (wgServer == "https://secure.wikimedia.org") { | |||
var metaBase = "https://secure.wikimedia.org/wikipedia/meta"; | |||
} else { | |||
var metaBase = "http://meta.wikimedia.org"; | |||
// | |||
} | } | ||
importScriptURI(metaBase+"/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400") | |||
// | |||
var | |||
/* Scripts specific to Internet Explorer */ | |||
if (navigator.appName == "Microsoft Internet Explorer") | |||
{ | |||
/** Internet Explorer bug fix ************************************************** | |||
* | |||
* Description: Fixes IE horizontal scrollbar bug | |||
* Maintainers: [[User:Tom-]]? | |||
*/ | |||
var oldWidth; | |||
var docEl = document.documentElement; | |||
function fixIEScroll() | |||
{ | |||
if (!oldWidth || docEl.clientWidth > oldWidth) | |||
doFixIEScroll(); | |||
else | |||
setTimeout(doFixIEScroll, 1); | |||
oldWidth = docEl.clientWidth; | |||
} | |||
function doFixIEScroll() { | |||
docEl.style.overflowX = (docEl.scrollWidth - docEl.clientWidth < 4) ? "hidden" : ""; | |||
} | |||
document.attachEvent("onreadystatechange", fixIEScroll); | |||
document.attachEvent("onresize", fixIEScroll); | |||
/** | |||
* Remove need for CSS hacks regarding MSIE and IPA. | |||
*/ | |||
if (document.createStyleSheet) { | |||
document.createStyleSheet().addRule('.IPA', 'font-family: "Doulos SIL", "Charis SIL", Gentium, "DejaVu Sans", Code2000, "TITUS Cyberbit Basic", "Arial Unicode MS", "Lucida Sans Unicode", "Chrysanthi Unicode";'); | |||
} | |||
//Import scripts specific to Internet Explorer 6 | |||
if (navigator.appVersion.substr(22, 1) == "6") | |||
{ | |||
importScript("MediaWiki:Common.js/IE60Fixes.js") | |||
} | |||
} | } | ||
/** | |||
* | /* 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); | |||
}; | |||
} | })(); | ||
/** Interwiki links to featured articles *************************************** | |||
/** | |||
* | * | ||
* Description: | * Description: Highlights interwiki links to featured articles (or | ||
* equivalents) by changing the bullet before the interwiki link | |||
* | * into a star. | ||
* | * Maintainers: [[User:R. Koot]] | ||
* Maintainers: [[User: | |||
*/ | */ | ||
function LinkFA() | |||
{ | |||
if ( document.getElementById( "p-lang" ) ) { | |||
var InterwikiLinks = document.getElementById( "p-lang" ).getElementsByTagName( "li" ); | |||
if ( | |||
for ( var i = 0; i < InterwikiLinks.length; i++ ) { | |||
if ( document.getElementById( InterwikiLinks[i].className + "-fa" ) ) { | |||
InterwikiLinks[i].className += " FA" | |||
InterwikiLinks[i].title = "This is a featured article in another language."; | |||
} | } | ||
} | } | ||
} | |||
} | |||
addOnloadHook( LinkFA ); | |||
/* | /** Collapsible tables ********************************************************* | ||
* | * | ||
* | * Description: Allows tables to be collapsed, showing only the header. See | ||
* [[Wikipedia:NavFrame]]. | |||
* | * Maintainers: [[User:R. Koot]] | ||
* | |||
*/ | */ | ||
var autoCollapse = 2; | var autoCollapse = 2; | ||
var collapseCaption = | var collapseCaption = "hide"; | ||
var expandCaption = | var expandCaption = "show"; | ||
function collapseTable( tableIndex ) { | function collapseTable( tableIndex ) | ||
var Button = document.getElementById( | { | ||
var Table = document.getElementById( | var Button = document.getElementById( "collapseButton" + tableIndex ); | ||
var Table = document.getElementById( "collapsibleTable" + tableIndex ); | |||
if ( !Table || !Button ) { | if ( !Table || !Button ) { | ||
return false; | return false; | ||
} | } | ||
var Rows = Table.rows; | var Rows = Table.rows; | ||
if ( Button.firstChild.data == collapseCaption ) { | |||
if ( Button.firstChild.data | for ( var i = 1; i < Rows.length; i++ ) { | ||
for ( i = 1; i < Rows.length; i++ ) { | Rows[i].style.display = "none"; | ||
Rows[i].style.display = | |||
} | } | ||
Button.firstChild.data = expandCaption; | Button.firstChild.data = expandCaption; | ||
} else { | } else { | ||
for ( i = 1; i < Rows.length; i++ ) { | for ( var i = 1; i < Rows.length; i++ ) { | ||
Rows[i].style.display = Rows[0].style.display; | Rows[i].style.display = Rows[0].style.display; | ||
} | } | ||
Line 199: | Line 175: | ||
} | } | ||
function | function createCollapseButtons() | ||
{ | |||
var tableIndex = 0; | var tableIndex = 0; | ||
var NavigationBoxes = | var NavigationBoxes = new Object(); | ||
var Tables = document.getElementsByTagName( | var Tables = document.getElementsByTagName( "table" ); | ||
for ( var i = 0; i < Tables.length; i++ ) { | |||
for ( i = 0; i < Tables.length; i++ ) { | if ( hasClass( Tables[i], "collapsible" ) ) { | ||
if ( | |||
/* only add button and increment count if there is a header row to work with */ | /* only add button and increment count if there is a header row to work with */ | ||
var HeaderRow = Tables[i].getElementsByTagName( | var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0]; | ||
if ( !HeaderRow ) | if (!HeaderRow) continue; | ||
var Header = HeaderRow.getElementsByTagName( "th" )[0]; | |||
if (!Header) continue; | |||
var Header = HeaderRow.getElementsByTagName( | |||
if ( !Header ) | |||
NavigationBoxes[ tableIndex ] = Tables[i]; | NavigationBoxes[ tableIndex ] = Tables[i]; | ||
Tables[i].setAttribute( | Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex ); | ||
var Button = document.createElement( | var Button = document.createElement( "span" ); | ||
var ButtonLink = document.createElement( | var ButtonLink = document.createElement( "a" ); | ||
var ButtonText = document.createTextNode( collapseCaption ); | var ButtonText = document.createTextNode( collapseCaption ); | ||
// | |||
Button.className = | Button.style.styleFloat = "right"; // | ||
Button.style.cssFloat = "right"; // REMOVE THESE LINES | |||
Button.style.fontWeight = "normal"; // ON 10 FEBRUARY 2009 | |||
Button.style.textAlign = "right"; // | |||
Button.style.width = "6em"; // | |||
Button.className = "collapseButton"; //Styles are declared in Common.css | |||
ButtonLink.style.color = Header.style.color; | ButtonLink.style.color = Header.style.color; | ||
ButtonLink.setAttribute( | ButtonLink.setAttribute( "id", "collapseButton" + tableIndex ); | ||
ButtonLink.setAttribute( | ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" ); | ||
ButtonLink.appendChild( ButtonText ); | ButtonLink.appendChild( ButtonText ); | ||
Button.appendChild( document.createTextNode( | Button.appendChild( document.createTextNode( "[" ) ); | ||
Button.appendChild( ButtonLink ); | Button.appendChild( ButtonLink ); | ||
Button.appendChild( document.createTextNode( | Button.appendChild( document.createTextNode( "]" ) ); | ||
Header.insertBefore( Button, Header. | Header.insertBefore( Button, Header.childNodes[0] ); | ||
tableIndex++; | tableIndex++; | ||
} | } | ||
} | } | ||
for ( i = 0; i < tableIndex; i++ ) { | for ( var i = 0; i < tableIndex; i++ ) { | ||
if ( | if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) { | ||
collapseTable( i ); | collapseTable( i ); | ||
} | } | ||
else if ( | else if ( hasClass( NavigationBoxes[i], "innercollapse" ) ) { | ||
var element = NavigationBoxes[i]; | var element = NavigationBoxes[i]; | ||
while | while (element = element.parentNode) { | ||
if ( | if ( hasClass( element, "outercollapse" ) ) { | ||
collapseTable ( i ); | collapseTable ( i ); | ||
break; | break; | ||
Line 266: | Line 234: | ||
} | } | ||
} | } | ||
addOnloadHook( createCollapseButtons ); | |||
/* | |||
/** Dynamic Navigation Bars (experimental) ************************************* | |||
* | * | ||
* Description: See [[Wikipedia:NavFrame]]. | * Description: See [[Wikipedia:NavFrame]]. | ||
* Maintainers: UNMAINTAINED | * Maintainers: UNMAINTAINED | ||
*/ | */ | ||
/ | // set up the words in your language | ||
var NavigationBarHide = '[' + collapseCaption + ']'; | var NavigationBarHide = '[' + collapseCaption + ']'; | ||
var NavigationBarShow = '[' + expandCaption + ']'; | var NavigationBarShow = '[' + expandCaption + ']'; | ||
/ | // 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 NavToggle = document.getElementById( | var NavFrame = document.getElementById("NavFrame" + indexNavigationBar); | ||
var NavFrame = document.getElementById( | |||
if (!NavFrame || !NavToggle) { | |||
if ( !NavFrame || !NavToggle ) { | |||
return false; | return false; | ||
} | } | ||
/ | // if shown now | ||
if ( NavToggle.firstChild.data | if (NavToggle.firstChild.data == NavigationBarHide) { | ||
for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) { | for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { | ||
if ( | if ( hasClass( NavChild, 'NavPic' ) ) { | ||
NavChild.style.display = 'none'; | |||
} | |||
if ( hasClass( NavChild, 'NavContent') ) { | |||
NavChild.style.display = 'none'; | NavChild.style.display = 'none'; | ||
} | } | ||
} | } | ||
NavToggle.firstChild.data = NavigationBarShow; | NavToggle.firstChild.data = NavigationBarShow; | ||
/ | // if hidden now | ||
} else if ( NavToggle.firstChild.data | } else if (NavToggle.firstChild.data == NavigationBarShow) { | ||
for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) { | for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { | ||
if ( | if (hasClass(NavChild, 'NavPic')) { | ||
NavChild.style.display = 'block'; | |||
} | |||
if (hasClass(NavChild, 'NavContent')) { | |||
NavChild.style.display = 'block'; | NavChild.style.display = 'block'; | ||
} | } | ||
Line 312: | Line 284: | ||
NavToggle.firstChild.data = NavigationBarHide; | NavToggle.firstChild.data = NavigationBarHide; | ||
} | } | ||
} | |||
} | // adds show/hide-button to navigation bars | ||
function createNavigationBarToggleButton() | |||
/ | { | ||
function createNavigationBarToggleButton() { | |||
var indexNavigationBar = 0; | var indexNavigationBar = 0; | ||
// iterate over all < div >-elements | |||
var divs = document.getElementsByTagName("div"); | |||
for (var i = 0; NavFrame = divs[i]; i++) { | |||
var divs = document.getElementsByTagName( | // if found a navigation bar | ||
for ( var i = 0; | if (hasClass(NavFrame, "NavFrame")) { | ||
/ | |||
if ( | |||
indexNavigationBar++; | indexNavigationBar++; | ||
var NavToggle = document.createElement( | var NavToggle = document.createElement("a"); | ||
NavToggle.className = 'NavToggle'; | NavToggle.className = 'NavToggle'; | ||
NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar ); | NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar); | ||
NavToggle.setAttribute( 'href', ' | NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');'); | ||
var isCollapsed = hasClass( NavFrame, "collapsed" ); | |||
var isCollapsed = | /* | ||
/ | |||
* Check if any children are already hidden. This loop is here for backwards compatibility: | * Check if any children are already hidden. This loop is here for backwards compatibility: | ||
* the old way of making NavFrames start out collapsed was to manually add style="display:none" | * the old way of making NavFrames start out collapsed was to manually add style="display:none" | ||
Line 342: | Line 310: | ||
* "collapsed" to the NavFrame itself, just like with collapsible tables. | * "collapsed" to the NavFrame itself, just like with collapsible tables. | ||
*/ | */ | ||
for ( NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling ) { | for (var NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling) { | ||
if ( | if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) { | ||
if ( NavChild.style.display | if ( NavChild.style.display == 'none' ) { | ||
isCollapsed = true; | isCollapsed = true; | ||
} | } | ||
} | } | ||
} | } | ||
if ( isCollapsed ) { | if (isCollapsed) { | ||
for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) { | for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { | ||
if ( | if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) { | ||
NavChild.style.display = 'none'; | NavChild.style.display = 'none'; | ||
} | } | ||
} | } | ||
} | } | ||
var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide ); | var NavToggleText = document.createTextNode(isCollapsed ? NavigationBarShow : NavigationBarHide); | ||
NavToggle.appendChild( NavToggleText ); | 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++ ) { | for(var j=0; j < NavFrame.childNodes.length; j++) { | ||
if ( | if (hasClass(NavFrame.childNodes[j], "NavHead")) { | ||
NavFrame.childNodes[j].appendChild(NavToggle); | |||
NavFrame.childNodes[j].appendChild( NavToggle ); | |||
} | } | ||
} | } | ||
NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar ); | NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar); | ||
} | } | ||
} | } | ||
} | } | ||
addOnloadHook( createNavigationBarToggleButton ); | |||
/** | |||
* | /** Main Page layout fixes ********************************************************* | ||
* | * | ||
* Description: Adds an additional link to the complete list of languages available. | |||
* Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]] | |||
*/ | |||
if (wgPageName == 'Main_Page' || wgPageName == 'Talk:Main_Page') | |||
addOnloadHook(function () { | |||
addPortletLink('p-lang', 'http://meta.wikimedia.org/wiki/List_of_Wikipedias', | |||
'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias') | |||
var nstab = document.getElementById('ca-nstab-main') | |||
if (nstab && wgUserLanguage=='en') | |||
nstab.firstChild.firstChild.nodeValue = 'Main Page' | |||
} | |||
) | |||
/** "Technical restrictions" title fix ***************************************** | |||
* | |||
* Description: For pages that have something like Template:Wrongtitle, replace | |||
* the title, but only if it is cut-and-pasteable as a valid | |||
* wikilink. For instance, "NZR WB class" can be changed to | |||
* "NZR W<sup>B</sup> class", but [[C#]] is not an equivalent wikilink, | |||
* so [[C Sharp]] doesn't have its main title changed. | |||
* | * | ||
* Maintainers: | * The function looks for a banner like this: | ||
* <div id="RealTitleBanner"> ... <span id="RealTitle">title</span> ... </div> | |||
* An element with id=DisableRealTitle disables the function. | |||
* Maintainers: Remember_the_dot | |||
*/ | */ | ||
function | |||
if (wgIsArticle) //prevents the "Editing " prefix from disappearing during preview | |||
{ | |||
addOnloadHook(function() | |||
{ | |||
var realTitle = document.getElementById("RealTitle") | |||
if (realTitle) | |||
{ | |||
//normalizes a title or a namespace name (but not both) | |||
//trims leading and trailing underscores and converts (possibly multiple) spaces and underscores to single underscores | |||
function normalizeTitle(title) | |||
{ | |||
return title.replace(/^_+/, "").replace(/_+$/, "").replace(/[\s_]+/g, "_") | |||
} | |||
if (realTitle.textContent) //everyone but IE | |||
{ | |||
var realTitleText = realTitle.textContent | |||
} | |||
else //IE | |||
{ | |||
var realTitleText = realTitle.innerText | |||
} | |||
var normalizedRealTitle | |||
var normalizedPageTitle | |||
var indexOfColon = realTitleText.indexOf(":") | |||
var normalizedNamespaceName = normalizeTitle(realTitleText.substring(0, indexOfColon)).toLowerCase() | |||
//make namespace prefix lowercase and uppercase the first letter of the title | |||
if (indexOfColon == -1 || wgCanonicalNamespace.toLowerCase() != normalizedNamespaceName) //no namespace prefix - either no colon or a nonsensical namespace prefix (for example, "Foo" in "Foo: The Story of My Life") | |||
{ | |||
normalizedRealTitle = normalizeTitle(realTitleText) | |||
normalizedRealTitle = normalizedRealTitle.charAt(0).toUpperCase() + normalizedRealTitle.substring(1) | |||
normalizedPageTitle = wgPageName.charAt(0).toUpperCase() + wgPageName.substring(1) | |||
} | |||
else //using a namespace prefix | |||
{ | |||
var normalizedRealPageTitle = normalizeTitle(realTitleText.substring(indexOfColon + 1)) | |||
normalizedRealTitle = normalizedNamespaceName | |||
if (normalizedNamespaceName != "") //namespace 0 is a special case where the leading colon should never be shown | |||
{ | |||
normalizedRealTitle += ":" | |||
} | |||
normalizedRealTitle += normalizedRealPageTitle.charAt(0).toUpperCase() + normalizedRealPageTitle.substring(1) | |||
normalizedPageTitle = wgPageName.substring(0, wgPageName.indexOf(":") + 1).toLowerCase() + wgPageName.substring(wgPageName.indexOf(":") + 1) | |||
} | |||
if (normalizedRealTitle == normalizedPageTitle) //normalized titles match, so we can do full replacement | |||
{ | |||
var h1 = document.getElementsByTagName("h1")[0] | |||
//remove all child nodes, including text | |||
while (h1.firstChild) | |||
{ | |||
h1.removeChild(h1.firstChild) | |||
} | |||
//populate with nodes of real title | |||
while (realTitle.firstChild) //the children are moved to a new parent element | |||
{ | |||
h1.appendChild(realTitle.firstChild) | |||
} | } | ||
//delete the real title banner since the problem is solved | |||
var realTitleBanner = document.getElementById("RealTitleBanner") | |||
realTitleBanner.parentNode.removeChild(realTitleBanner) | |||
} | } | ||
oldDiv.style.display = | |||
newDiv.style.display = | //no matter what, correct the page title | ||
document.title = realTitleText + " - Wikipedia, the free encyclopedia" | |||
} | |||
}) | |||
} | |||
/** Table sorting fixes ************************************************ | |||
* | |||
* Description: Disables code in table sorting routine to set classes on even/odd rows | |||
* Maintainers: [[User:Random832]] | |||
*/ | |||
ts_alternate_row_colors = false; | |||
/***** uploadwizard_newusers ******** | |||
* Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]] | |||
* | |||
* Maintainers: [[User:Krimpet]] | |||
****/ | |||
function uploadwizard_newusers() { | |||
if (wgNamespaceNumber == 4 && wgTitle == "Upload" && wgAction == "view") { | |||
var oldDiv = document.getElementById("autoconfirmedusers"), | |||
newDiv = document.getElementById("newusers"); | |||
if (oldDiv && newDiv) { | |||
if (typeof wgUserGroups == "object" && wgUserGroups) { | |||
for (i = 0; i < wgUserGroups.length; i++) { | |||
if (wgUserGroups[i] == "autoconfirmed") { | |||
oldDiv.style.display = "block"; | |||
newDiv.style.display = "none"; | |||
return; | return; | ||
} | |||
} | } | ||
} | |||
oldDiv.style.display = "none"; | |||
newDiv.style.display = "block"; | |||
return; | |||
} | } | ||
} | |||
} | } | ||
addOnloadHook(uploadwizard_newusers); | |||
/** | /** IPv6 AAAA connectivity testing ******************************************************* | ||
* | |||
* | * Description: Uses hidden images to measure the possible negative impact of IPv6 | ||
* | * enabling the Wikimedia sites. | ||
* This works by adding a hidden div to the footer with several image tags. | |||
* The source addresses of the image tags are set to domainnames which have v4, v6 and | |||
* both address types set. The script times how long objects take to load. | |||
* Results are sent back to the server. http://ipv6and4.labs.wikimedia.org/stats.html | |||
* Based on http://www.braintrust.co.nz/ipv6wwwtest/ | |||
* Contact: [[User:Gmaxwell]], [[User:Mark Bergsma]], [[User:Mindspillage]] | |||
} | */ | ||
var __ipv6wwwtest_factor = 100; | |||
var __ipv6wwwtest_done = 0; | |||
if ((wgServer != "https://secure.wikimedia.org") && (Math.floor(Math.random()*__ipv6wwwtest_factor)==42)) { | |||
var __ipv6wwwtest_timeoutMsec = 10000; // Timeout for 'final' result message in milliseconds | |||
var __ipv6wwwtest_hostSuffix = ".labs.wikimedia.org"; // Suffix to go on the IMG hostnames | |||
var __ipv6wwwtest_stopAtTimeout = true; // Whether to stop when the timeout is reached or not | |||
var __ipv6wwwtest_pageLoadTime; | |||
var __ipv6wwwtest_timeout = false; | |||
var __ipv6wwwtest_ipv4LoadTime = false; | |||
var __ipv6wwwtest_ipv4relLoadTime = false; | |||
var __ipv6wwwtest_ipv6LoadTime = false; | |||
var __ipv6wwwtest_ipv6bigLoadTime = false; | |||
var __ipv6wwwtest_ipv6and4LoadTime = false; | |||
var __ipv6wwwtest_id = Math.floor(Math.random()*Math.pow(2,31)); | |||
function __ipv6wwwtest_startTest() { | |||
__ipv6wwwtest_pageLoadTime = new Date(); | |||
document.getElementById("__ipv6wwwtest_ipv4Img").src = "http://ipv4" + __ipv6wwwtest_hostSuffix +"/ipv4.gif?id=" + __ipv6wwwtest_id; | |||
document.getElementById("__ipv6wwwtest_ipv4relImg").src = "//ipv4" + __ipv6wwwtest_hostSuffix +"/ipv4.gif?rel=1&id=" + __ipv6wwwtest_id; | |||
document.getElementById("__ipv6wwwtest_ipv6Img").src = "http://ipv6" + __ipv6wwwtest_hostSuffix +"/ipv6.gif?id=" + __ipv6wwwtest_id; | |||
document.getElementById("__ipv6wwwtest_ipv6and4Img").src = "http://ipv6and4" + __ipv6wwwtest_hostSuffix +"/ipv6and4.gif?id=" + __ipv6wwwtest_id; | |||
document.getElementById("__ipv6wwwtest_ipv6bigImg").src = "http://ipv6" + __ipv6wwwtest_hostSuffix +"/ipv6big.gif?id=" + __ipv6wwwtest_id; | |||
} | |||
function __ipv6wwwtest_sendResults(stage) { | |||
document.getElementById("__ipv6wwwtest_resultsImg").src = "http://results" + __ipv6wwwtest_hostSuffix +"/results.gif?id=" + __ipv6wwwtest_id + "&stage=" + stage + "&timeout=" + __ipv6wwwtest_timeoutMsec + "&stop_at_timeout=" + __ipv6wwwtest_stopAtTimeout + "&ipv4=" + __ipv6wwwtest_getLoadTime(__ipv6wwwtest_ipv4LoadTime) + "&ipv6=" + __ipv6wwwtest_getLoadTime(__ipv6wwwtest_ipv6LoadTime) + "&ipv6and4=" + __ipv6wwwtest_getLoadTime(__ipv6wwwtest_ipv6and4LoadTime) + "&ipv6big=" + __ipv6wwwtest_getLoadTime(__ipv6wwwtest_ipv6bigLoadTime) +"&ipv4rel="+ __ipv6wwwtest_getLoadTime(__ipv6wwwtest_ipv4relLoadTime) + "&rate=" + __ipv6wwwtest_factor; | |||
}; | |||
function __ipv6wwwtest_getLoadTime(item) { | |||
if (item == false) { | |||
return "NaN"; | |||
} else { | |||
return (item.getTime() - __ipv6wwwtest_pageLoadTime.getTime()); | |||
} | |||
} | } | ||
function __ipv6wwwtest_checkFinished() { | |||
if ( (! __ipv6wwwtest_ipv6LoadTime) || (! __ipv6wwwtest_ipv4LoadTime) || (! __ipv6wwwtest_ipv6and4LoadTime) || (! __ipv6wwwtest_ipv6bigLoadTime) || (! __ipv6wwwtest_getLoadTime)) { | |||
if (!__ipv6wwwtest_timeout) { | |||
__ipv6wwwtest_timeout = window.setTimeout('__ipv6wwwtest_sendFinalResults()',__ipv6wwwtest_timeoutMsec); | |||
} | |||
__ipv6wwwtest_sendResults('partial'); | |||
} else { | |||
__ipv6wwwtest_sendFinalResults(); | |||
} | |||
} | } | ||
if ( | |||
function __ipv6wwwtest_sendFinalResults() { | |||
if (__ipv6wwwtest_done==0) { | |||
if (__ipv6wwwtest_timeout) { | |||
window.clearTimeout(__ipv6wwwtest_timeout); | |||
} | |||
__ipv6wwwtest_sendResults('final'); | |||
if (__ipv6wwwtest_stopAtTimeout) { | |||
document.getElementById("__ipv6wwwtest_ipv4Img").src = ""; | |||
document.getElementById("__ipv6wwwtest_ipv4relImg").src = ""; | |||
document.getElementById("__ipv6wwwtest_ipv6Img").src = ""; | |||
document.getElementById("__ipv6wwwtest_ipv6and4Img").src = ""; | |||
document.getElementById("__ipv6wwwtest_ipv6bigImg").src = ""; | |||
} | |||
} | |||
__ipv6wwwtest_done=1; | |||
} | } | ||
addOnloadHook(function() { | |||
v6sub=document.getElementById("footer"); | |||
v6sub.innerHTML=v6sub.innerHTML+'<div style="visibility: hidden;"> <img height="1" width="1" src="" id="__ipv6wwwtest_ipv4Img" onload="__ipv6wwwtest_ipv4LoadTime = new Date(); __ipv6wwwtest_checkFinished();" /> <img height="1" width="1" src="" id="__ipv6wwwtest_ipv4relImg" onload="__ipv6wwwtest_ipv4relLoadTime = new Date(); __ipv6wwwtest_checkFinished();" /> <img height="1" width="1" src="" id="__ipv6wwwtest_ipv6and4Img" onload="__ipv6wwwtest_ipv6and4LoadTime = new Date(); __ipv6wwwtest_checkFinished();" /> <img height="1" width="1" src="" id="__ipv6wwwtest_ipv6Img" onload="__ipv6wwwtest_ipv6LoadTime = new Date(); __ipv6wwwtest_checkFinished();" /> <img height="1" width="1" src="" id="__ipv6wwwtest_ipv6bigImg" onload="__ipv6wwwtest_ipv6bigLoadTime = new Date(); __ipv6wwwtest_checkFinished();" /> <img height="1" width="1" src="" id="__ipv6wwwtest_resultsImg" /> </div>'; | |||
if (document.getElementById("__ipv6wwwtest_ipv4Img") && document.getElementById("__ipv6wwwtest_ipv6Img") && document.getElementById("__ipv6wwwtest_ipv6and4Img") && document.getElementById("__ipv6wwwtest_ipv6bigImg")) { | |||
__ipv6wwwtest_startTest(); | |||
} | |||
}); | |||
} | } | ||
/** | /** Disambig editintro ******************************************************** | ||
* Description: | * | ||
* Maintainers: [[User: | * Description: Adds an editintro on disambiguation pages. Original code | ||
* located at [[User:RockMFR/disambigeditintro.js]]. | |||
* | |||
* Maintainers: [[User:RockMFR]], [[User:Quiddity]] | |||
*/ | */ | ||
if ( document. | |||
if (wgNamespaceNumber == 0) addOnloadHook(function(){ | |||
if (!document.getElementById('disambig')) return | |||
} | var el = document.getElementById('ca-edit') | ||
if (el) el = el.getElementsByTagName('a')[0] | |||
/ | if (el) el.href += '&editintro=Template:Disambig_editintro' | ||
}) | |||
/ | |||
//</source> | |||
// </nowiki></pre> |