User:Zppix/Test/MediaWiki:Gadget-CentralAuthInterlinkFixer.js: Difference between revisions

Content deleted Content added
don't limit script-fix to <a> with class="new". Most links (like the "user@wikiname" links on Special:Log/rights) can't even have class="new"
No edit summary
Line 1:
/**
// Fix links like User:Example@somewiki. Author: VasilievVV, with modifications by Kalan and attempted rewrite by Splarka
* Fix links like User:Example@somewiki on Special:Log and Special:Recentchanges
function fixCrosswikiLinks() {
* @author VasilievVV, 2008-2010
function host(id) {
* @author Kalan, 2008
if(id == 'mediawikiwiki') {
* @author Splarka, 2008
return 'mediawiki.org';
* @author Krinkle, 2012
} else if(id == 'foundationwiki') {
*/
return 'wikimediafoundation.org';
/*global mw, $ */
}
function host(id) {
var wikimedia = /^(advisory|auditcom|board|chair|chapcom|collab|comcom|commons|exec|grants|incubator|internal|meta|office|otrs wiki|quality|spcom|species|wikimaniateam|wikimania20\d\d)wiki$/;
if(wikimedia.test (id) === 'mediawikiwiki') {
return var r = id'mediawiki.org';
} else if r(id = r.replace(/ /,== '-foundationwiki'); {
return 'mediawikiwikimediafoundation.org';
r = r.replace(/wiki$/, ".wikimedia.org");
return r;
}
var idNoSpaces = (id.match(/(arbcom enwiki|labswikimedia|pa uswikimedia|wg enwiki)$/)) ? id.replace(/ /, '.') : id.replace(/ /g, '-');
idNoSpaces = idNoSpaces.replace(/(wiki([mp]edia|quote|source|books|news|versity)|wiktionary)/, '.$1.org');
idNoSpaces = idNoSpaces.replace(/wiki$/, '.wikipedia.org');
if(idNoSpaces.indexOf('.org') != -1) return idNoSpaces
return false;
}
var wikimedia = /^(advisory|auditcom|board|chair|chapcom|collab|comcom|commons|exec|grants|incubator|internal|meta|office|otrs wiki|quality|spcom|species|wikimaniateam|wikimania20\d\d)wiki$/;
if (wikimedia.test(id)) {
var docobj = document.getElementById('bodyContent') || document.getElementById('content') || document.getElementById('mw_content') || document.body
return id.replace(/ /g, '-').replace(/_/g, '-').replace(/wiki$/, '.wikimedia.org');
var li = docobj.getElementsByTagName('li');
}
for(var i = 0; i < li.length; i++) {
var idNoSpaces = (id.match(/(arbcom enwiki|labswikimedia|pa uswikimedia|wg enwiki)$/)) ? id.replace(/ /g, '.') : id.replace(/ /g, '-');
var a = li[i].getElementsByTagName('a');
idNoSpaces = idNoSpaces
for(var j=0;j<a.length;j++) {
idNoSpaces = idNoSpaces.replace(/(wiki([mp]edia|quote|source|books|news|versity)|wiktionary)/, '.$1.org');
var atxt = getText(a[j]);
r = r.replace(/wiki$/, "'.wikimediawikipedia.org"');
if (atxt.indexOf('@') != -1 && atxt.indexOf('/') == -1 && /^User\:/i.test(atxt)) {
if if(idNoSpaces.indexOf('.org') !== -1) return idNoSpaces{
var bits = atxt.split('@',2);
return falseidNoSpaces;
var user = encodeURIComponent(bits[0].replace(/^\s*User:(.+)\s*$/g, '$1'));
}
var wiki = bits[1];
return rfalse;
if (wiki == 'global') {
}
a[j].setAttribute('href', mw.config.get( 'wgScript' ) + '?title=Special:CentralAuth&target=' + user);
 
function fixCrosswikiLinks() {
$('body li a').each(function (i, el) {
var bits, wiki, user,
$el = $(el),
var txt = []$el.text();
if (atxttxt.indexOf('@') !== -1 && atxttxt.indexOf('/') === -1 && /^User\:/i.test(atxttxt)) {
var bits = atxttxt.split('@',2);
var user = encodeURIComponent(bits[0].shift().replace(/^\s*User:(.+)\s*$/g, '$1'));
var wiki = bits[1].join('@');
if (idwiki === 'mediawikiwikiglobal') {
a[j]$el.setAttributeattr('href', mw.config.get( 'wgScript' ) + '?title=Special:CentralAuth&target=' + encodeURIComponent(user));
} else {
var hostName = host(wiki);
if (!hostName) continue;{
a[j] $el.setAttributeattr('href', '//' + hostName + '/wiki/User:' + encodeURIComponent(user));
}
}
a[j].className =if (wiki !== 'metawiki') ? '' : 'extiw'{
a[j] $el.setAttributeremoveClass('titlenew').addClass('extiw',atxt);
i++; }
$el.attr('title', txt);
}
});
}
}
if(wgCanonicalSpecialPageName == 'Log' || wgCanonicalSpecialPageName == 'Recentchanges') addOnloadHook(fixCrosswikiLinks)
 
if (mw.config.get('wgCanonicalSpecialPageName') === 'Log' || mw.config.get('wgCanonicalSpecialPageName') === 'Recentchanges') addOnloadHook(fixCrosswikiLinks){
function getText(object) {
$(document).ready(fixCrosswikiLinks);
if (object.nodeType == 3) return object.nodeValue;
var txt = [];
var i=0;
while(object.childNodes[i]) {
txt[txt.length] = getText(object.childNodes[i]);
i++;
}
return txt.join('');
}