跳转到内容

MediaWiki:Gadget-purgetab.js

勤求古训,博采众方
WikiBot留言 | 贡献2026年6月13日 (六) 15:24的版本 (移植 Wiktionary purgetab gadget:提供 Purge / Hard purge / Null edit 三个缓存刷新标签)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
( function () {
	"use strict";

	if ( !mw.config.get( 'wgArticleId' ) ) {
		return;
	}

	var portletIdToAdd = document.getElementById( 'p-cactions' ) ? 'p-cactions' : 'p-views';
	var isVector = mw.config.get( 'skin' ) === 'vector' || mw.config.get( 'skin' ) === 'vector-2022';

	// Purge tab
	mw.util.addPortletLink(
		portletIdToAdd,
		mw.util.getUrl( mw.config.get( 'wgPageName' ), { action: 'purge' } ),
		isVector ? 'Purge' : '*',
		'ca-purge',
		'Purge cache for this page',
		'*'
	);

	// Hard purge tab
	var hardPurgeId = 'ca-purge-forcelinkupdate';
	mw.util.addPortletLink(
		portletIdToAdd,
		'#',
		isVector ? 'Hard purge' : '**',
		hardPurgeId,
		'Purge with forced link table update',
		','
	);

	// Null edit tab
	var nullEditId = 'ca-nulledit';
	mw.util.addPortletLink(
		portletIdToAdd,
		'#',
		isVector ? 'Null edit' : '***',
		nullEditId,
		'Null edit (re-parse page without changing it)',
		'0'
	);

	// Bind AJAX handlers
	mw.loader.using( 'mediawiki.api' ).then( function () {
		var api = new mw.Api();

		var hardEl = document.getElementById( hardPurgeId );
		if ( hardEl ) {
			hardEl.querySelector( 'a' ).addEventListener( 'click', function ( e ) {
				e.preventDefault();
				api.post( {
					action: 'purge',
					pageids: mw.config.get( 'wgArticleId' ),
					forcelinkupdate: 1
				} ).then( function () {
					location.reload();
				}, function ( code, details ) {
					var msg = 'Unknown error';
					if ( code === 'http' ) {
						msg = 'HTTP error: ' + details.xhr.statusText;
					} else if ( code === 'ok-but-empty' ) {
						msg = 'Received empty response.';
					} else if ( details.error && details.error.info ) {
						msg = details.error.info;
					}
					mw.notify( 'Hard purge failed: ' + msg, { type: 'error' } );
				} );
			} );
		}

		var nullEl = document.getElementById( nullEditId );
		if ( nullEl ) {
			nullEl.querySelector( 'a' ).addEventListener( 'click', function ( e ) {
				e.preventDefault();
				api.post( {
					action: 'edit',
					pageid: mw.config.get( 'wgArticleId' ),
					appendtext: '',
					watchlist: 'nochange',
					nocreate: '1',
					token: mw.user.tokens.get( 'csrfToken' )
				} ).then( function () {
					location.reload();
				}, function ( code, details ) {
					var msg = 'Unknown error';
					if ( code === 'http' ) {
						msg = 'HTTP error: ' + details.xhr.statusText;
					} else if ( code === 'ok-but-empty' ) {
						msg = 'Received empty response.';
					} else if ( details.error && details.error.info ) {
						msg = details.error.info;
					}
					mw.notify( 'Null edit failed: ' + msg, { type: 'error' } );
				} );
			} );
		}
	} );

}() );