User:CrafterNova/common.js: Difference between revisions

Content deleted Content added
Normalizing script installs
No edit summary
 
(46 intermediate revisions by the same user not shown)
Line 20:
importScript('User:EnterpriseyBot/delsort.js'); // Backlink: [[User:EnterpriseyBot/delsort.js]]
importScript('User:Enterprisey/delsort.js'); // Backlink: [[User:Enterprisey/delsort.js]]
importScript('User:Evad37/XFDcloser/v3.js'); // Backlink: [[User:Evad37/XFDcloser/v3.js]]
importScript('User:GeneralNotability/spihelper.js'); // Backlink: [[User:GeneralNotability/spihelper.js]]
importScript('User:Kephir/gadgets/rater.js'); // Backlink: [[User:Kephir/gadgets/rater.js]]
importScript('User:Lourdes/PageCuration.js'); // Backlink: [[User:Lourdes/PageCuration.js]]
mw.loader.load('/w/index.php?title=User:Lupin/recent2.js&action=raw&ctype=text/javascript');
importScript('User:Mr. Stradivarius/gadgets/ConfirmRollback.js'); // Backlink: [[User:Mr. Stradivarius/gadgets/ConfirmRollback.js]]
importScript('User:MusikAnimal/customWatchlists.js'); // Backlink: [[User:MusikAnimal/customWatchlists.js]]
Line 36 ⟶ 34:
importScript('User:Technical_13/Scripts/OneClickArchiver.js'); // Backlink: [[User:Technical_13/Scripts/OneClickArchiver.js]]
importScript('User:Trappist the monk/common.js'); // Backlink: [[User:Trappist the monk/common.js]]
importScript('User:Uziel302Andy M. Wang/typopageswap.js'); // Backlink: [[User:Uziel302Andy M. Wang/typopageswap.js]]
//importScript('Wikipedia:AutoEd/complete.js'); // Backlink: [[Wikipedia:AutoEd/complete.js]]
mw.loader.load('//en.wikipedia.org/w/index.php?title=User%3AJoeytje50%2FJWB.js%2Fload.js&action=raw&ctype=text/javascript');
 
mw.loader.load('/w/index.php?title=User:RedWarnLupin/recent2.js&action=raw&ctype=text/javascript');
importScript('User:Galobtter/Shortdesc helper.js'); // Backlink: [[User:Galobtter/Shortdesc helper.js]]
 
importScript('User:Galobtter/Shortdesc helper.js'); // Backlink: [[User:Galobtter/Shortdesc helper.js]]
importScript('User:GhostInTheMachine/SDlinkBuilder.js'); // Backlink: [[User:GhostInTheMachine/SDlinkBuilder.js]]
 
Line 59 ⟶ 55:
$(document).ready(mobile_revert) ;
});
 
importScript('User:Anomie/pagestats.js'); // Backlink: [[User:Anomie/pagestats.js]]
importScript('User:Anomie/diffcur.js'); // Backlink: [[User:Anomie/diffcur.js]]
importScript('User:Anomie/hidespoilers.js'); // Backlink: [[User:Anomie/hidespoilers.js]]
importScript('User:Enterprisey/StatusChanger.js'); // Backlink: [[User:Enterprisey/StatusChanger.js]]
importScript('User:Awesome Aasim/noeditredlinks.js'); // Backlink: [[User:Awesome Aasim/noeditredlinks.js]]
//importScript('User:Volker E. (WMF)/dark-mode.js'); // Backlink: [[User:Volker E. (WMF)/dark-mode.js]]
window.wpDarkModeAutoToggle = true;
importScript('User:Volker E. (WMF)/dark-mode.js'); // Backlink: [[User:Volker E. (WMF)/dark-mode.js]]
 
mw.loader.load('//en.wikipedia.org/w/index.php?title=User%3AUziel302%2Ftypo.js&action=raw&ctype=text/javascript');
 
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User%3AZhaofeng_Li%2FReflinks.js&action=raw&ctype=text/javascript');
//mw.loader.load('//meta.wikimedia.org/wiki/User:CrafterNova/global.js&action=raw&ctype=text/javascript');
 
importScript('User:Naypta/ScriptInstaller.js'); // Backlink: [[User:Naypta/ScriptInstaller.js]]
Line 96 ⟶ 91:
importScript('User:Bradv/Scripts/Superlinks.js'); // Backlink: [[User:Bradv/Scripts/Superlinks.js]]
importScript('User:Evad37/MoveToDraft.js'); // Backlink: [[User:Evad37/MoveToDraft.js]]
importScript('User:Wugapodes/Capricorn.js'); // Backlink: [[User:Wugapodes/Capricorn.js]]
importScript('User:CrafterNova/vector-2022.js'); // Backlink: [[User:CrafterNova/vector-2022.js]]
//importScript('Wikipedia:AutoEd/complete.js'); // Backlink: [[Wikipedia:AutoEd/complete.js]]
mw.loader.load('//en.wikipedia.org/w/index.php?title=User%3AFrietjes%2Ffindargdups.js&action=raw&ctype=text/javascript');
importScript('User:BrownHairedGirl/linkrot.js'); // Backlink: [[User:BrownHairedGirl/linkrot.js]]
mw.loader.load('//en.wikipedia.org/w/index.php?title=User%3AJoeytje50%2FJWB.js%2Fload.js&action=raw&ctype=text/javascript');
importScript('User:Joeytje50/JWB.js/worker.js'); // Backlink: [[User:Joeytje50/JWB.js/worker.js]]
importScript('User:Joeytje50/JWB.js/i18n.js'); // Backlink: [[User:Joeytje50/JWB.js/i18n.js]]
mw.loader.load('//en.wikipedia.org/w/index.php?title=User%3APerfektesChaos%2Fjs%2FlintHint%2Fr.js&action=raw&ctype=text/javascript');
importScript('User:Smith609/toolbox.js'); // Backlink: [[User:Smith609/toolbox.js]]
 
importScript('User:Dr pda/persondata.js'); // Backlink: [[User:Dr pda/persondata.js]]
 
importScript('User:Dr_pda/prosesize.js'); // Backlink: [[User:Dr_pda/prosesize.js]]
 
mw.loader.load('https://pedia.sztaki.hu/SztakipediaToolbar/SztakipediaToolbarBase.js');
 
mw.loader.load('https://pedia.sztaki.hu/SztakipediaToolbar/SztakipediaToolbar.js');
 
importScript('User:Yair rand/ReferenceTooltips.js'); // Backlink: [[User:Yair rand/ReferenceTooltips.js]]
 
importScript('User:Ilmari Karonen/rollbacksummary.js'); // Backlink: [[User:Ilmari Karonen/rollbacksummary.js]]
importScript('User:Anomie/linkclassifier.js'); // Backlink: [[User:Anomie/linkclassifier.js]]
importScript('User:SD0001/StubSorter.js'); // Backlink: [[User:SD0001/StubSorter.js]]
importScript('User:Dr pda/prosesize.js'); // Backlink: [[User:Dr pda/prosesize.js]]
 
//[[Benutzer:Schnark/js/diff.js/core.js]]
var LinkClassifier = {
mw.loader.load('//de.wikipedia.org/w/index.php?title=Benutzer%3ASchnark%2Fjs%2Fdiff.js%2Fcore.js&action=raw&ctype=text/javascript');
/* This object maps classes to the categories for which to apply them. Values may be an array of strings or a regex. */
//[[Benutzer:Schnark/js/bandersnatch.js]]
cats: {
deletion: [
'Category:All articles proposed for deletion',
'Category:All books proposed for deletion',
'Category:All categories for discussion',
'Category:All disputed non-free Wikipedia files',
'Category:All files proposed for deletion',
'Category:All orphaned non-free use Wikipedia files',
'Category:All redirects for discussion',
'Category:All replaceable non-free use Wikipedia files',
'Category:All Wikipedia files with no non-free use rationale',
'Category:All Wikipedia files with unknown copyright status',
'Category:All Wikipedia files with unknown source',
'Category:Articles for deletion',
'Category:Articles for deletion using wrong syntax',
'Category:Articles on deletion review',
'Category:Articles to be merged after an Articles for deletion discussion',
'Category:Candidates for speedy deletion',
'Category:Candidates for undeletion',
'Category:Categories for conversion',
'Category:Categories for deletion',
'Category:Categories for listifying',
'Category:Categories for merging',
'Category:Categories for renaming',
'Category:Categories for speedy renaming',
'Category:Categories to be listified then deleted',
'Category:Empty categories awaiting deletion',
'Category:Items pending OTRS confirmation of permission for over 30 days',
'Category:Miscellaneous pages for deletion',
'Category:Templates for deletion',
'Category:Templates for merging',
'Category:Wikipedia files for discussion'
].sort(),
disambiguation: [
'Category:All disambiguation pages'
].sort(),
'set-index': [
'Category:All set index articles'
].sort(),
'featured-content': [
'Category:Featured articles',
'Category:Featured lists',
'Category:Featured pictures',
'Category:Featured sounds',
'Category:Featured videos',
'Category:Featured portals'
].sort(),
'good-content': [
'Category:Good articles'
].sort(),
'soft-redirect-cats': [
'Category:Wikipedia soft redirected categories'
].sort(),
'spoken-articles': [
'Category:Spoken articles'
].sort(),
stubcls: /^Category:.* stubs$/,
'nonfree-media': [
'Category:All non-free media'
].sort(),
unprintworthy: [
'Category:Unprintworthy redirects',
'Category:Middle-earth redirects from redundant titles'
].sort(),
'unprintworthy-shortcut': [
'Category:Redirects from shortcuts'
].sort(),
'incorrect-title': [
'Category:Redirects from incorrect disambiguation',
'Category:Redirects from incorrect names',
'Category:Redirects from miscapitalisations',
'Category:Redirects from misspellings'
].sort()
},
 
importScript('User:Wugapodes/Capricorn.js'); // Backlink: [[User:Wugapodes/Capricorn.js]]
/* This object maps page props to CSS classes for which to apply them. Values may be an array of strings or a function returning such. */
importScript('User:Novem Linguae/Scripts/CiteHighlighter.js'); // Backlink: [[User:Novem Linguae/Scripts/CiteHighlighter.js]]
props: {
importScript('User:BrownHairedGirl/BareURLinline.js'); // Backlink: [[User:BrownHairedGirl/BareURLinline.js]]
disambiguation: [
importScript('User:GregU/dashes.js'); // Backlink: [[User:GregU/dashes.js]]
'disambiguation'
importScript('User:Evad37/rater.js'); // Backlink: [[User:Evad37/rater.js]]
]
importScript('User:Gary/nominations viewer.js'); // Backlink: [[User:Gary/nominations viewer.js]]
},
importScript('User:Ebrahames/Advisor.js'); // Backlink: [[User:Ebrahames/Advisor.js]]
 
importScript('User:DannyS712/Draft no cat.js'); // Backlink: [[User:DannyS712/Draft no cat.js]]
/* This regex matches page titles to be marked as intentional links to disambiguation pages */
importScript('User:DannyS712/Draft re cat.js'); // Backlink: [[User:DannyS712/Draft re cat.js]]
intentionaldab: / \(disambiguation\)$/,
importScript('User:Σ/Testing facility/Archiver.js'); // Backlink: [[User:Σ/Testing facility/Archiver.js]]
 
importScript('User:NuclearWarfare/Mark-blocked script.js'); // Backlink: [[User:NuclearWarfare/Mark-blocked script.js]]
/* Was it run already? */
importScript('User:Enterprisey/userinfo.js'); // Backlink: [[User:Enterprisey/userinfo.js]]
wasRun: false,
importScript('User:Ale jrb/Scripts/statusCheck.js'); // Backlink: [[User:Ale jrb/Scripts/statusCheck.js]]
 
importScript('User:Enterprisey/unblock-review.js'); // Backlink: [[User:Enterprisey/unblock-review.js]]
onAjaxError: function ( xhr, textStatus, errorThrown ) {
importScript('User:DannyS712/SectionRemover.js'); // Backlink: [[User:DannyS712/SectionRemover.js]]
mw.log.error( 'AJAX error: ' + textStatus + ' ' + errorThrown );
importScript('User:DannyS712/DiscussionCloser.js'); // Backlink: [[User:DannyS712/DiscussionCloser.js]]
},
importScript('User:MPGuy2824/MoveToDraft.js'); // Backlink: [[User:User:MPGuy2824/MoveToDraft.js]]
 
importScript('User:Amalthea/culoghelper.js'); // Backlink: [[User:Amalthea/culoghelper.js]]
callback: function ( r ) {
// Adds a link to the CU log for the date/time that the check was executed
var i, j, k, k2, v, node, alist, q, prefix, seen, cls,
importScript('User:Writ Keeper/Scripts/sockStaleness.js'); // Backlink: [[User:Writ Keeper/Scripts/sockStaleness.js]]
redir = {},
importScript('User:Writ Keeper/Scripts/cuStaleness.js'); // Backlink: [[User:Writ Keeper/Scripts/cuStaleness.js]]
redirlist = [],
//The two scripts above indicate if a suspected sock is 'stale', or outside of 90 days at SPI or a suspected sock category
cats = {},
importScript('User:ST47/cu-log-links.js'); // Backlink: [[User:ST47/cu-log-links.js]]
missing = {},
//Adds links to Whois, IPCheck, etc to CU results
classes = {};
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User%3ALadsgroup%2FCheckUserHelper.js&action=raw&ctype=text/javascript');
 
//FANTASTIC SCRIPT! Adds a table of CU results to the top of the 'get edits' page.
if ( !r || !r.query ) {
importScript('User:GeneralNotability/spihelper.js'); // Backlink: [[User:GeneralNotability/spihelper.js]]
if ( !window.console || !$.isFunction( window.console.error ) ) {
//Helps file / close / do SPI things. Another FANTASTIC SCRIPT
throw new Error( 'Bad response' );
importScript('User:Firefly/checkuseragenthelper.js'); // Backlink: [[User:Firefly/checkuseragenthelper.js]]
}
//Tooltips explaining user agents
window.console.error( 'Bad response', r );
importScript('User:GeneralNotability/cumarkips.js'); // Backlink: [[User:GeneralNotability/cumarkips.js]]
return;
//Marks important IP's like congress / etc.
}
importScript('User:GeneralNotability/InvestorGoat.js'); // Backlink: [[User:GeneralNotability/InvestorGoat.js]]
if ( r['query-continue'] ) {
//Indicates matching user agents. Might do things with goats.
q = this.rawdata;
importScript('User:GeneralNotability/ip-ext-info.js'); // Backlink: [[User:GeneralNotability/ip-ext-info.js]]
for ( k in r['query-continue'] ) {
//Adds a bullseye link to IP's
for ( k2 in r['query-continue'][k] ) {
importScript('User:Enterprisey/easy-brfa.js'); // Backlink: [[User:Enterprisey/easy-brfa.js]]
q[k2] = r['query-continue'][k][k2];
importScript('User:SQL/acimplnotes.js'); // Backlink: [[User:SQL/acimplnotes.js]]
}
importScript('User:L235/wordcount.js'); // Backlink: [[User:L235/wordcount.js]]
}
//mw.loader.load('//en.wikipedia.org/w/index.php?title=User%3ATimotheus%20Canens%2Facimplnotes.js&action=raw&ctype=text/javascript');
$.ajax( {
importScript('User:L235/wordAndLinkCounter.js'); // Backlink: [[User:L235/wordAndLinkCounter.js]]
url: mw.util.wikiScript( 'api' ),
importScript('User:Enterprisey/more-listing-items.js'); // Backlink: [[User:Enterprisey/more-listing-items.js]]
dataType: 'json',
importScript('User:Eizzen/AutoPurge.js'); // Backlink: [[User:Eizzen/AutoPurge.js]]
type: 'POST',
importScript('User:Salix alba/Citoid.js'); // Backlink: [[User:Salix alba/Citoid.js]]
data: q,
importScript('User:Frietjes/findargdups.js'); // Backlink: [[User:Frietjes/findargdups.js]]
rawdata: this.rawdata,
importScript('User:Bradv/Scripts/Notepad.js'); // Backlink: [[User:Bradv/Scripts/Notepad.js]]
success: LinkClassifier.callback,
importScript('User:Enterprisey/undo-last-edit.js'); // Backlink: [[User:Enterprisey/undo-last-edit.js]]
error: LinkClassifier.onAjaxError
importScript('User:Evad37/rater.js'); // Backlink: [[User:Evad37/rater.js]]
} );
importScript('User:GeneralNotability/mark-locked.js'); // Backlink: [[User:GeneralNotability/mark-locked.js]]
}
importScript('User:Awesome Aasim/infiniscroll.js'); // Backlink: [[User:Awesome Aasim/infiniscroll.js]]
r = r.query;
importScript('User:Novem Linguae/Scripts/VoteCounter.js'); // Backlink: [[User:Novem Linguae/Scripts/VoteCounter.js]]
 
importScript('User:Novem Linguae/Scripts/UserRightsDiff.js'); // Backlink: [[User:Novem Linguae/Scripts/UserRightsDiff.js]]
node = document.getElementById( 'wikiPreview' );
importScript('User:Macy/FastButtons.js'); // Backlink: [[User:Macy/FastButtons.js]]
if ( !node ) {
node = document.getElementById( 'bodyContent' );
}
if ( !node ) {
throw new Error( 'Huh? No body content?' );
}
alist = node.getElementsByTagName( 'A' );
if ( alist.length === 0 ) {
return;
}
 
if ( r.redirects ) {
for ( i = r.redirects.length - 1; i >= 0; i-- ) {
redir[r.redirects[i].from] = r.redirects[i].to;
redirlist.push( r.redirects[i].from );
}
}
if ( redirlist.length > 0 ) {
q = {
format: 'json',
action: 'query',
titles: redirlist.join( '|' ),
prop: 'categories|info',
inprop: 'protection',
cllimit: 'max',
rawcontinue: 1
};
$.ajax( {
url: mw.util.wikiScript( 'api' ),
dataType: 'json',
type: 'POST',
data: q,
rawdata: q,
success: LinkClassifier.callback,
error: LinkClassifier.onAjaxError
} );
}
 
prefix = this.rawdata.redirects ? '' : 'redir-';
if ( r.pages ) {
for ( i in r.pages ) {
classes[r.pages[i].title] = [];
missing[r.pages[i].title] = r.pages[i].missing !== undefined;
if ( r.pages[i].categories ) {
cats[r.pages[i].title] = r.pages[i].categories.map( function ( a ) {
return a.title;
} ).sort();
}
if ( r.pages[i].pageprops ) {
for ( k in r.pages[i].pageprops ) {
if ( !LinkClassifier.props[k] ) {
continue;
}
v = LinkClassifier.props[k];
if ( $.isFunction( v ) ) {
v = v( r.pages[i].pageprops[k], k, r.pages[i].title );
}
classes[r.pages[i].title].push.apply( classes[r.pages[i].title], v );
}
}
if ( r.pages[i].protection ) {
seen = {};
for ( j = r.pages[i].protection.length - 1; j >= 0; j-- ) {
cls = prefix + 'protection-' + r.pages[i].protection[j].type + '-' + r.pages[i].protection[j].level;
if ( !seen[cls] ) {
seen[cls] = 1;
classes[r.pages[i].title].push( cls );
}
if ( r.pages[i].protection[j].expiry === 'infinity' ) {
cls += '-indef';
if ( !seen[cls] ) {
seen[cls] = 1;
classes[r.pages[i].title].push( cls );
}
}
}
}
if ( r.pages[i].flagged ) {
if ( r.pages[i].lastrevid !== r.pages[i].flagged.stable_revid ) {
classes[r.pages[i].title].push( 'needs-review' );
}
}
}
}
Array.prototype.forEach.call( alist, function ( a ) {
var cns, cls, m, i, j, pageCats, matchCats,
$a = $( a );
 
if ( a.wikipage === undefined ) {
return;
}
if ( redir[a.wikipage] ) {
$a.addClass( 'redirect' );
a.wikipage = redir[a.wikipage];
a.title = a.wikipage;
cns = mw.config.get( 'wgCanonicalNamespace' );
if ( a.wikipage === ( cns ? cns + ':' : '' ) + mw.config.get( 'wgTitle' ) ) {
$a.addClass( 'self-redirect' );
}
if ( missing[a.wikipage] ) {
$a.addClass( 'broken-redirect' );
}
}
m = a.href.match( /#.*/ );
if ( m && m[0].substr( 0, 10 ) !== '#cite_note' ) {
a.title = a.title.replace( /#.*/, '' ) +
m[0].replace( /_/g, ' ' ).replace( /\.([0-9A-F][0-9A-F])/gi, function ( x, n ) {
return String.fromCharCode( parseInt( n, 16 ) );
} );
}
if ( LinkClassifier.intentionaldab.test( a.origwikipage ) ) {
$a.addClass( 'intentional-disambiguation' );
}
if ( classes[a.wikipage] ) {
for ( j = classes[a.wikipage].length - 1; j >= 0; j-- ) {
$a.addClass( classes[a.wikipage][j] );
}
}
if ( a.wikipage !== a.origwikipage && classes[a.origwikipage] ) {
for ( j = classes[a.origwikipage].length - 1; j >= 0; j-- ) {
$a.addClass( classes[a.origwikipage][j] );
}
}
 
pageCats = [];
if ( cats[a.wikipage] ) {
pageCats = pageCats.concat( cats[a.wikipage] );
}
if ( a.wikipage !== a.origwikipage && cats[a.origwikipage] ) {
pageCats = pageCats.concat( cats[a.origwikipage] );
}
if ( pageCats.length > 0 ) {
pageCats = pageCats.sort();
for ( cls in LinkClassifier.cats ) {
i = pageCats.length - 1;
matchCats = LinkClassifier.cats[cls];
if ( matchCats instanceof RegExp ) {
while ( i >= 0 ) {
if ( matchCats.test( pageCats[i] ) ) {
$a.addClass( cls );
break;
}
i--;
}
} else {
j = matchCats.length - 1;
while ( i >= 0 && j >= 0 ) {
if ( pageCats[i] === matchCats[j] ) {
$a.addClass( cls );
break;
}
if ( pageCats[i] > matchCats[j] ) {
--i;
} else {
--j;
}
}
}
}
}
} );
},
 
draftsCallback: function ( r ) {
var i, node, alist,
found = {};
 
if ( !r.query ) {
if ( !window.console || !$.isFunction( window.console.error ) ) {
throw new Error( 'Bad response' );
}
window.console.error( 'Bad response', r );
return;
}
r = r.query;
 
node = document.getElementById( 'wikiPreview' );
if ( !node ) {
node = document.getElementById( 'bodyContent' );
}
if ( !node ) {
throw new Error( 'Huh? No body content?' );
}
alist = node.getElementsByTagName( 'A' );
if ( alist.length === 0 ) {
return;
}
 
if ( r.pages ) {
for ( i in r.pages ) {
found[r.pages[i].title] = r.pages[i].missing === undefined;
}
}
Array.prototype.forEach.call( alist, function ( a ) {
if ( a.wikipage !== undefined && found['Draft:' + a.origwikipage] ) {
$( a ).addClass( 'has-draft' );
}
} );
},
 
getPageName: function ( url ) {
var t, m = url.match( /\/wiki\/([^?#]+)/ );
if ( !m ) {
m = url.match( /\/w\/index.php\?(?:.*&)?title=([^&#]+)/ );
}
if ( !m ) {
return '';
}
t = decodeURIComponent( m[1] ).replace( /_/g, ' ' );
if ( t.substr( 0, 6 ) === 'Image:' ) {
t = 'File:' + t.substr( 6 );
}
if ( t.substr( 0, 11 ) === 'Image talk:' ) {
t = 'File talk:' + t.substr( 6 );
}
if ( t.substr( 0, 8 ) === 'Special:' ) {
t = '';
}
return t;
},
 
classifyChildren: function ( node ) {
mw.loader.using( [ 'mediawiki.util', 'mediawiki.user' ], function () {
var alist, titles, draftTitles, re, self, props, i, k;
 
LinkClassifier.wasRun = true;
alist = node.getElementsByTagName( 'A' );
if ( !alist.length ) {
return;
}
self = LinkClassifier.getPageName( ___location.href );
titles = Array.prototype.map.call( alist, function ( a ) {
a.wikipage = '';
if ( /(^|\s)(external|extiw)(\s|$)/.test( a.className ) ) {
return '';
}
if ( !/(^|\s)(image)(\s|$)/.test( a.className ) ) {
a.className += ' nonimage';
}
a.wikipage = LinkClassifier.getPageName( a.href );
if ( a.wikipage === self ) {
a.wikipage = '';
}
a.origwikipage = a.wikipage;
return a.wikipage;
} ).sort().filter( function ( e, i, a ) {
return e !== '' && ( i === 0 || a[i - 1] !== e );
} );
 
re = [];
for ( k in mw.config.get( 'wgNamespaceIds' ) ) {
if ( k !== '' ) {
re.push( k.replace( /_/g, ' ' ) );
}
}
re = new RegExp( '^(' + re.join( '|' ) + '):', 'i' );
draftTitles = [];
for ( i = titles.length - 1; i >= 0; i-- ) {
if ( !re.test( titles[i] ) ) {
draftTitles.push( 'Draft:' + titles[i] )
}
}
 
props = [];
for ( k in LinkClassifier.props ) {
props.push( k );
}
 
function processLinks( limit ) {
var q;
while ( titles.length > 0 ) {
q = {
format: 'json',
action: 'query',
titles: titles.splice( 0, limit ).join( '|' ),
prop: 'categories|pageprops|info|flagged',
redirects: 1,
cllimit: 'max',
inprop: 'protection',
rawcontinue: 1
};
if ( props.length <= limit ) {
q.ppprop = props.join( '|' );
}
$.ajax( {
url: mw.util.wikiScript( 'api' ),
dataType: 'json',
type: 'POST',
data: q,
rawdata: q,
success: LinkClassifier.callback,
error: LinkClassifier.onAjaxError
} );
}
 
while ( draftTitles.length > 0 ) {
q = {
format: 'json',
action: 'query',
titles: draftTitles.splice( 0, limit ).join( '|' ),
rawcontinue: 1
};
$.ajax( {
url: mw.util.wikiScript( 'api' ),
dataType: 'json',
type: 'POST',
data: q,
rawdata: q,
success: LinkClassifier.draftsCallback,
error: LinkClassifier.onAjaxError
} );
}
}
 
if ( titles.length <= 100 ) {
// Not worth querying the API to see if the user has apihighlimits
processLinks( 50 );
} else {
// Note mw.user.getRights queries the API
mw.user.getRights( function ( rights ) {
processLinks( ( rights.indexOf( 'apihighlimits' ) >= 0 ) ? 500 : 50 );
} );
}
} );
},
 
onLoad: function () {
if ( window.LinkClassifierOnDemand ) {
return;
}
if ( window.AJAXPreview ) {
window.AJAXPreview.AddOnLoadHook( LinkClassifier.classifyChildren );
}
LinkClassifier.onDemand();
},
 
onDemand: function () {
mw.hook( 'LinkClassifier' ).fire( this );
var node = document.getElementById( 'wikiPreview' );
if ( !node ) {
node = document.getElementById( 'bodyContent' );
}
if ( node ) {
LinkClassifier.classifyChildren( node );
}
},
 
rerun: function () {
if ( LinkClassifier.wasRun ) {
LinkClassifier.onDemand();
}
}
};
 
if ( !window.LinkClassifierOnDemand ) {
$( document ).ready( LinkClassifier.onLoad );
}
importScript('User:SD0001/StubSorter.js'); // Backlink: [[User:SD0001/StubSorter.js]]
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User%3AZhaofeng_Li%2FReflinks.js&action=raw&ctype=text/javascript');