mirror of
https://github.com/StarCitizenTools/mediawiki-skins-Citizen.git
synced 2024-12-04 02:39:17 +00:00
44 lines
1.1 KiB
JavaScript
44 lines
1.1 KiB
JavaScript
/* eslint-disable camelcase */
|
|
/**
|
|
* Initializes the Speculation Rules API for Citizen
|
|
*
|
|
* @return {void}
|
|
*/
|
|
function init() {
|
|
if (
|
|
!HTMLScriptElement.supports ||
|
|
!HTMLScriptElement.supports( 'speculationrules' )
|
|
) {
|
|
return;
|
|
}
|
|
const articlePath = mw.config.get( 'wgArticlePath' ).replace( /\$(1)/, '' );
|
|
const namespaces = mw.config.get( 'wgFormattedNamespaces' );
|
|
if ( !articlePath || !namespaces ) {
|
|
return;
|
|
}
|
|
|
|
const specRules = {
|
|
prerender: [ {
|
|
where: {
|
|
and: [
|
|
{ href_matches: `${ articlePath }*` }, // Under article path
|
|
{ href_matches: `${ articlePath }${ namespaces[ -1 ] }` }, // No special namespace
|
|
{ not: { href_matches: '/.*.php' } }, // Not PHP file
|
|
{ not: { href_matches: '/*\\?*(^|&)*=*' } }, // No query strings
|
|
{ not: { selector_matches: '[rel~=nofollow]' } } // No nofollow link
|
|
]
|
|
},
|
|
eagerness: 'moderate'
|
|
} ]
|
|
};
|
|
|
|
const specScript = document.createElement( 'script' );
|
|
specScript.type = 'speculationrules';
|
|
specScript.textContent = JSON.stringify( specRules );
|
|
document.body.append( specScript );
|
|
}
|
|
|
|
module.exports = {
|
|
init: init
|
|
};
|