SpecialVersion.js – MediaWiki
Jump to navigation
Jump to search
Fred Gandt (talk | contribs) (Groan...) |
Fred Gandt (talk | contribs) (Another live test of the script so far. Not done yet.) |
||
Line 10: | Line 10: | ||
*/ | */ | ||
var | // All tables on "Special:Version" | ||
var tbls = document.getElementsByTagName( "table" ); | |||
/***************************************************************************************** | /***************************************************************************************** | ||
Line 18: | Line 19: | ||
function checkExtensionVersions() { | function checkExtensionVersions() { | ||
var | var mwve = tbls[0].getElementsByTagName( "tr" )[1].getElementsByTagName( "td" )[1], | ||
mwcurv = mwve.textContent, | |||
exts = tbls[2].getElementsByTagName( "em" ); | exts = tbls[2].getElementsByTagName( "em" ); | ||
extso = {}; | extso = {}, | ||
fetchData = function( ns, n, fnc ) { | |||
$.ajax( { | |||
url: "https://www.mediawiki.org/w/api.php", | |||
data: { | |||
action: "query", | |||
prop: "revisions", | |||
rvprop: "content", | |||
titles: ns + ":" + n, | |||
format: "json", | |||
redirects: "" | |||
}, | |||
dataType: "jsonp", | |||
success: function( data ) { | |||
var pgs = data.query.pages; | |||
for ( var pg in pgs ) { | |||
if ( pgs[pg].hasOwnProperty( "revisions" ) ) { | |||
fnc( pgs[pg].revisions[0]["*"], pgs[pg].title.replace( " ", "_" ).replace( ns + ":", "" ) ); | |||
break; | |||
} | |||
} | |||
} | |||
} ); | |||
}; | |||
fetchData( | |||
"Template", | |||
"MW_stable_branch_number", | |||
function( txt, ttl ) { | |||
extso[ttl] = [ | |||
mwve, | |||
mwcurv, | |||
txt.substring( 0, txt.indexOf( "<noinclude>" ) ) | |||
]; | |||
console.log( extso[ttl] ); // just testing | |||
} | |||
); | |||
for ( var ext in exts ) { | for ( var ext in exts ) { | ||
if ( typeof exts[ext] == "object" ) { | if ( typeof exts[ext] == "object" ) { | ||
Line 31: | Line 67: | ||
en = en.substring( en.indexOf( "Extension:" ) + 10 ); | en = en.substring( en.indexOf( "Extension:" ) + 10 ); | ||
} else { | } else { | ||
en = exts[ext].textContent; | en = exts[ext].firstChild.textContent.trim(); | ||
} | } | ||
extso[en] = [ | extso[en] = [ | ||
Line 37: | Line 73: | ||
ev[0].textContent.replace( /[^0-9\.\s]/g, "" ).trim() | ev[0].textContent.replace( /[^0-9\.\s]/g, "" ).trim() | ||
]; | ]; | ||
fetchData( | |||
"Extension", | |||
en, | |||
function( txt, ttl ) { | |||
var curv = extso[ttl][1], | |||
lurv = txt.substring( txt.indexOf( "|version" ) + 8 ); | |||
lurv = lurv.substring( 0, lurv.indexOf( "|" ) ).replace( /[^0-9\.\s]/g, "" ).trim(); | |||
var rgx = /\|bundled with MediaWiki ([0-9\.]+)\]\]/g.exec( txt ); | |||
if ( rgx ) { | |||
console.log( "bundled with " + rgx[1] ); | |||
} | |||
var | if ( lurv > curv ) { | ||
extso[ttl][0].innerHTML += "<br><span style='color:red;'>" + lurv + " available</span>"; | |||
} | } | ||
} | } | ||
); | |||
} | } | ||
} | } | ||
} | } | ||
} | |||
function initCheckExtensionVersions() { | |||
var btn = document.createElement( "button" ); | |||
btn.setAttribute( "style", "vertical-align: text-top;" ); | |||
btn.innerHTML = "Check Versions"; | |||
btn.addEventListener( "click", checkExtensionVersions, false ); | |||
tbls[0].setAttribute( "style", "display: inline-table;" ); | |||
tbls[0].parentElement.insertBefore( btn, tbls[0].nextSibling ); | |||
} | } | ||
Line 73: | Line 107: | ||
* Next *** | * Next *** | ||
*/ | */ | ||
// code code code | // code code code | ||
/*****************************************************************************************/ | /*****************************************************************************************/ | ||
Line 81: | Line 115: | ||
* Call the functions above | * Call the functions above | ||
*/ | */ | ||
if ( mw.config.get( "wgUserGroups" ).indexOf( "sysop" ) >= 0 ) { | |||
initCheckExtensionVersions(); | |||
} | |||
}()); // END WRAPPER | }()); // END WRAPPER |
Revision as of 01:11, 18 June 2014
/*****************************************************************************************
* JavaScript here will be loaded by MediaWiki:Common.js when viewing "Special:Version".
*
*****************************************************************************************/
(function() { // BEGIN WRAPPER
/*****************************************************************************************
* Variables required by all functions below
*/
// All tables on "Special:Version"
var tbls = document.getElementsByTagName( "table" );
/*****************************************************************************************
* Check extension versions and indicate available updates.
* Maintainer: BIKI User:Fred Gandt
*/
function checkExtensionVersions() {
var mwve = tbls[0].getElementsByTagName( "tr" )[1].getElementsByTagName( "td" )[1],
mwcurv = mwve.textContent,
exts = tbls[2].getElementsByTagName( "em" );
extso = {},
fetchData = function( ns, n, fnc ) {
$.ajax( {
url: "https://www.mediawiki.org/w/api.php",
data: {
action: "query",
prop: "revisions",
rvprop: "content",
titles: ns + ":" + n,
format: "json",
redirects: ""
},
dataType: "jsonp",
success: function( data ) {
var pgs = data.query.pages;
for ( var pg in pgs ) {
if ( pgs[pg].hasOwnProperty( "revisions" ) ) {
fnc( pgs[pg].revisions[0]["*"], pgs[pg].title.replace( " ", "_" ).replace( ns + ":", "" ) );
break;
}
}
}
} );
};
fetchData(
"Template",
"MW_stable_branch_number",
function( txt, ttl ) {
extso[ttl] = [
mwve,
mwcurv,
txt.substring( 0, txt.indexOf( "<noinclude>" ) )
];
console.log( extso[ttl] ); // just testing
}
);
for ( var ext in exts ) {
if ( typeof exts[ext] == "object" ) {
var ev = exts[ext].getElementsByClassName( "mw-version-ext-version" );
if ( ev[0] ) {
var en;
if ( exts[ext].firstChild.nodeType === Node.ELEMENT_NODE ) {
en = exts[ext].firstChild.getAttribute( "href" );
en = en.substring( en.indexOf( "Extension:" ) + 10 );
} else {
en = exts[ext].firstChild.textContent.trim();
}
extso[en] = [
exts[ext],
ev[0].textContent.replace( /[^0-9\.\s]/g, "" ).trim()
];
fetchData(
"Extension",
en,
function( txt, ttl ) {
var curv = extso[ttl][1],
lurv = txt.substring( txt.indexOf( "|version" ) + 8 );
lurv = lurv.substring( 0, lurv.indexOf( "|" ) ).replace( /[^0-9\.\s]/g, "" ).trim();
var rgx = /\|bundled with MediaWiki ([0-9\.]+)\]\]/g.exec( txt );
if ( rgx ) {
console.log( "bundled with " + rgx[1] );
}
if ( lurv > curv ) {
extso[ttl][0].innerHTML += "<br><span style='color:red;'>" + lurv + " available</span>";
}
}
);
}
}
}
}
function initCheckExtensionVersions() {
var btn = document.createElement( "button" );
btn.setAttribute( "style", "vertical-align: text-top;" );
btn.innerHTML = "Check Versions";
btn.addEventListener( "click", checkExtensionVersions, false );
tbls[0].setAttribute( "style", "display: inline-table;" );
tbls[0].parentElement.insertBefore( btn, tbls[0].nextSibling );
}
/*****************************************************************************************/
/*****************************************************************************************
* Next ***
*/
// code code code
/*****************************************************************************************/
/*****************************************************************************************
* Call the functions above
*/
if ( mw.config.get( "wgUserGroups" ).indexOf( "sysop" ) >= 0 ) {
initCheckExtensionVersions();
}
}()); // END WRAPPER