// <nowiki>
/*
var _addText="{{工具警告|QuickPurge}}";
var _addText="{{Notice|<big>'''文檔請見:[[User:Addonian1123/QuickPurge]]'''</big>}}";
-----
在右側欄選單加入清除快取按鈕,含攔截action=purge網址功能。
*/
(function () {
'use strict';
const urlParams = new URLSearchParams(window.location.search);
const isPurgePage = urlParams.get('action') === 'purge' || mw.config.get('wgAction') === 'purge';
let cleanUrl = window.location.href;
if (isPurgePage) {
try {
urlParams.delete('action');
const newSearch = urlParams.toString();
cleanUrl = window.location.pathname + (newSearch ? '?' + newSearch : '') + window.location.hash;
window.history.replaceState(null, '', cleanUrl);
const style = document.createElement('style');
style.textContent = '#mw-content-text { display: none !important; }';
(document.head || document.documentElement).appendChild(style);
} catch (e) {}
}
$(() => {
mw.loader.using(['mediawiki.util']).then(() => {
const userLang = mw.config.get('wgUserLanguage') || mw.config.get('wgUserVariant') || 'zh-hant';
const isHans = ['zh-hans', 'zh-cn', 'zh-my', 'zh-sg'].some(l => userLang.toLowerCase().startsWith(l));
const msg = {
btn: isHans ? '清除缓存' : '清除快取',
tooltip: isHans ? '更新服务器缓存' : '更新伺服器快取',
confirm: isHans ? '您要清除此页面的缓存吗?' : '您要清除此頁面的快取嗎?',
doing: isHans ? '正在清除缓存...' : '正在清除快取...',
success: isHans ? '缓存清除成功。' : '快取清除成功。',
fail: isHans ? '缓存清除失败:' : '快取清除失敗:'
};
const loadDeps = () => mw.loader.using(['mediawiki.api', 'mediawiki.notification', 'oojs-ui-core', 'oojs-ui-widgets']);
const doPurge = (targetTitle) => {
const pageName = targetTitle || mw.config.get('wgPageName');
mw.notify(msg.doing, { type: 'info', autoHideSeconds: 2 });
new mw.Api().post({
action: 'purge',
format: 'json',
formatversion: '2',
titles: pageName
}).done(() => {
mw.notify(msg.success, { type: 'success' });
setTimeout(() => location.replace(cleanUrl), 300);
}).fail((code, err) => {
mw.notify(msg.fail + (code || err), { type: 'error' });
});
};
const askPurge = (targetTitle, isPurgeMode) => {
const pageName = targetTitle || mw.config.get('wgPageName');
loadDeps().then(() => {
const handleCancel = () => {
if (isPurgeMode) location.replace(cleanUrl);
};
if (window.OO && OO.ui && OO.ui.confirm) {
OO.ui.confirm(msg.confirm).done((confirmed) => {
if (confirmed) doPurge(pageName);
else handleCancel();
});
} else if (confirm(msg.confirm)) {
doPurge(pageName);
} else {
handleCancel();
}
});
};
if (isPurgePage) {
askPurge(mw.config.get('wgPageName'), true);
}
const skin = mw.config.get('skin');
let portletId = 'p-cactions';
if (!document.getElementById('p-cactions') || skin === 'minerva') {
portletId = 'p-tb';
}
const purgeNode = mw.util.addPortletLink(
portletId,
'#',
msg.btn,
'ca-quickpurge',
msg.tooltip
);
if (purgeNode) {
$(purgeNode).addClass('mw-list-item').css({ 'display': 'block', 'visibility': 'visible' });
$(purgeNode).one('mouseenter', () => loadDeps());
$(purgeNode).on('click', (e) => {
e.preventDefault();
askPurge(mw.config.get('wgPageName'), false);
});
}
$(document).on('click', 'a[href*="action=purge"]', function (e) {
e.preventDefault();
const href = $(this).attr('href');
let targetTitle = mw.config.get('wgPageName');
try {
const p = new URL(href, window.location.origin).searchParams;
targetTitle = p.get('title') || targetTitle;
} catch (err) {}
askPurge(targetTitle, false);
});
});
});
})();
// </nowiki>