/*
Adds developer tools which are usable via the console
See detailed documentation in Dev/mediawiki
deferrable:YES -- This is an augmentation
*/
(function() {
// mwDev.tools is globally available
// ---------------------------------------------------------
// 1. Replace all references to files in the wiki with links
mwDev.tools.fileRefsToLinks = function( selector = $("#mw-content-text *"), linkAttr = { target: '_blank' }, query = { action: 'edit' } ) {
selector.contents().each( function() {
// If not Textnode, return
if( this.nodeType != 3 ) return;
// If parent is already return
if( $(this).parent().prop('tagName') == 'A' ) return;
// If not matching return
let ref = this.textContent.match( /Media(W|w)iki:[^\.]+.(js|css)/ );
if( ! ref ) return;
let queryString = '';
for( let key in query ) {
if( ! queryString ) queryString +=`?${key}=${query[key]}`;
else queryString +=`&${key}=${query[key]}`;
}
let linkAttrString = '';
for( let key in linkAttr ) linkAttrString +=` ${key}="${linkAttr[key]}"`;
let parts = this.textContent.split(ref[0]);
let newNodes = [];
if( parts[0] ) newNodes.push( $( document.createTextNode( parts[0] ) ) );
newNodes.push( $(`${ref[0]}`) );
if( parts[1] ) newNodes.push( $( document.createTextNode( parts[1] ) ) );
// Replace old TextNode with newNode
$(this).replaceWith( newNodes );
});
};
// Execute always if on Build.json (if not in edit mode)
if( mw.config.get('wgPageName') == 'MediaWiki:Build.json'
&& (new URLSearchParams( window.location.href )).get('action') != 'edit'
) mwDev.tools.fileRefsToLinks ();
})();
/*
[[Category: MultiWiki]]
*/