MediaWiki:Common.js:修订间差异
LocalAdmin(留言 | 贡献) Add AllPages exclusion filter + sysop hide-from-homepage button |
LocalAdmin(留言 | 贡献) Fix: check exclusion list on load so button reflects correct state after refresh |
||
| 第34行: | 第34行: | ||
var pageTitle = mw.config.get( 'wgPageName' ).replace( /_/g, ' ' ); | var pageTitle = mw.config.get( 'wgPageName' ).replace( /_/g, ' ' ); | ||
if ( pageTitle === '首页' ) { return; } | |||
if ( pageTitle === | |||
var btn = document.createElement( 'button' ); | var btn = document.createElement( 'button' ); | ||
btn.id | btn.id = 'hp-hide-btn'; | ||
btn. | btn.disabled = true; // disabled until state is known | ||
btn. | btn.innerHTML = '…'; | ||
document.body.appendChild( btn ); | document.body.appendChild( btn ); | ||
var api = new mw.Api(); | |||
/* ── Read exclusion list; set initial button state ────────────── */ | |||
function loadExclusionList( cb ) { | |||
api.get( { | api.get( { | ||
action: 'query', prop: 'revisions', rvprop: 'content', | action: 'query', prop: 'revisions', rvprop: 'content', | ||
| 第58行: | 第56行: | ||
.split( '\n' ).map( function ( s ) { return s.trim(); } ).filter( Boolean ); | .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 ) { | if ( lines.indexOf( pageTitle ) !== -1 ) { | ||
setHidden(); | |||
return; | return; | ||
} | } | ||
| 第70行: | 第98行: | ||
summary: 'Hide "' + pageTitle + '" from homepage list' | summary: 'Hide "' + pageTitle + '" from homepage list' | ||
} ).done( function () { | } ).done( function () { | ||
mw.notify( '"' + pageTitle + '" hidden from homepage | mw.notify( '"' + pageTitle + '" hidden from homepage.', { type: 'success' } ); | ||
setHidden(); | |||
} ).fail( function () { | } ).fail( function () { | ||
mw.notify( 'Failed — check | mw.notify( 'Failed — check interface-admin rights.', { type: 'error' } ); | ||
setVisible(); | |||
} ); | } ); | ||
} ); | } ); | ||
} ); | } ); | ||
} ); | } ); | ||