MediaWiki:Common.js
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5。
/* ── AllPages: filter excluded pages from homepage list ───────────── */
$( function () {
var chunk = document.querySelector( '.mw-allpages-chunk' );
if ( !chunk ) { return; }
// Always hide the main page entry
chunk.querySelectorAll( 'li' ).forEach( function ( li ) {
var a = li.querySelector( 'a' );
if ( a && ( a.title === '首页' || a.title === 'Main Page' ) ) {
li.remove();
}
} );
// Fetch server-side exclusion list and apply
new mw.Api().get( {
action: 'query', prop: 'revisions', rvprop: 'content',
titles: 'MediaWiki:Allpages-exclude', format: 'json'
} ).done( function ( data ) {
var page = Object.values( data.query.pages )[ 0 ];
if ( !page || page.missing !== undefined || !page.revisions ) { return; }
var excluded = page.revisions[ 0 ][ '*' ]
.split( '\n' ).map( function ( s ) { return s.trim(); } ).filter( Boolean );
chunk.querySelectorAll( 'li' ).forEach( function ( li ) {
var a = li.querySelector( 'a' );
if ( a && excluded.indexOf( a.title ) !== -1 ) { li.remove(); }
} );
} );
} );
/* ── "Hide from homepage" button — visible to sysops only ─────────── */
$( function () {
var groups = mw.config.get( 'wgUserGroups' ) || [];
if ( groups.indexOf( 'sysop' ) === -1 ) { return; }
var pageTitle = mw.config.get( 'wgPageName' ).replace( /_/g, ' ' );
if ( pageTitle === '首页' ) { return; }
var btn = document.createElement( 'button' );
btn.id = 'hp-hide-btn';
btn.disabled = true; // disabled until state is known
btn.innerHTML = '…';
document.body.appendChild( btn );
var api = new mw.Api();
/* ── Read exclusion list; set initial button state ────────────── */
function loadExclusionList( cb ) {
api.get( {
action: 'query', prop: 'revisions', rvprop: 'content',
titles: 'MediaWiki:Allpages-exclude', format: 'json'
} ).done( function ( data ) {
var page = Object.values( data.query.pages )[ 0 ];
var lines = [];
if ( page && page.revisions ) {
lines = page.revisions[ 0 ][ '*' ]
.split( '\n' ).map( function ( s ) { return s.trim(); } ).filter( Boolean );
}
cb( lines );
} ).fail( function () { cb( [] ); } );
}
function setHidden() {
btn.innerHTML = '✓ Hidden from homepage';
btn.style.background = '#38a169';
btn.disabled = true;
}
function setVisible() {
btn.innerHTML = '🚫 Hide from homepage';
btn.style.background = '';
btn.disabled = false;
}
/* ── On load: check if already excluded ──────────────────────── */
loadExclusionList( function ( lines ) {
if ( lines.indexOf( pageTitle ) !== -1 ) {
setHidden();
} else {
setVisible();
}
} );
/* ── On click: add to exclusion list ─────────────────────────── */
btn.addEventListener( 'click', function () {
btn.disabled = true;
btn.innerHTML = 'Saving…';
loadExclusionList( function ( lines ) {
if ( lines.indexOf( pageTitle ) !== -1 ) {
setHidden();
return;
}
lines.push( pageTitle );
api.postWithToken( 'csrf', {
action: 'edit',
title: 'MediaWiki:Allpages-exclude',
text: lines.join( '\n' ),
summary: 'Hide "' + pageTitle + '" from homepage list'
} ).done( function () {
mw.notify( '"' + pageTitle + '" hidden from homepage.', { type: 'success' } );
setHidden();
} ).fail( function () {
mw.notify( 'Failed — check interface-admin rights.', { type: 'error' } );
setVisible();
} );
} );
} );
} );