LLWiki正在建设中,欢迎加入我们!
MediaWiki:Gadget-patrolRevisions.js
跳转到导航
跳转到搜索
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5。
// 引自[[metawikimedia:mediawiki:gadget-patrolRevisions.js]]
"use strict";
/*global mw, $, OO, wgULS*/
const page = mw.config.get( 'wgCanonicalSpecialPageName' ),
action = mw.config.get('wgAction');
if (action == 'history' || ['History', 'Contributions', 'Recentchanges', 'Watchlist'].includes(page)) {
mw.util.addCSS( '.row-unpatrolled { background-color: #fff0c2 !important; }' );
var data = [];
const api = new mw.Api(),
text = {confirm: wgULS("您确定要将所有修订标记为为已巡查吗?", "您確定要將所有修訂標示為已巡查嗎?"),
fail: wgULS('次修订标记失败!请刷新页面后重试。', '次修訂標示失敗!請刷新頁面後重試。'),
success: wgULS('标记成功!', '標示成功!'), btn: wgULS('标记所有修订为已巡查', '標示所有修訂為已巡查'),
apiFailure: wgULS('无法获得页面ID!错误原因:', '无法获得页面ID!错误原因:')
},
isDesktop = mw.config.get('skin') == 'vector',
markAsPatrolled = function(revid) { return api.postWithToken('patrol', {action: 'patrol', revid: revid}); },
process = function() {
return Promise.allSettled( data.map(function(revid) { return markAsPatrolled( revid ); }) );
},
clickBtn = function(e) {
e.preventDefault();
OO.ui.confirm( text.confirm ).then(function(res) {
if (!res) { return; }
process().then(function(results) {
const failure = results.filter(function(ele) { return ele.status == 'rejected'; });
if (failure.length) {
mw.notify('有' + failure.length + text.fail, {type: 'error'});
return;
}
button.detach();
$( '.patrolLink, abbr.unpatrolled' ).remove();
$( '.row-unpatrolled' ).removeClass( 'row-unpatrolled' );
mw.notify( text.success );
});
});
},
getRevid = function(ele) {
const $ele = $(ele);
return $ele.data( 'mw-revid' ) ||
(isDesktop ? 0 : parseInt( ($ele.find('a').attr( 'href' ) || '').match(/\d+$/) ));
},
highlightUnpatrolled = function(obj, list) {
const target = obj.filter(function() { return list.includes( getRevid(this) ); }).addClass('row-unpatrolled');
return target.map(function() { return getRevid(this); }).toArray();
},
main = function(selector, param) {
if ($(selector).length === 0) {
data = [];
return Promise.resolve();
}
console.log('API request: 开始查询未巡查的页面ID');
const now = mw.now();
return api.get( (param || {}).list ? param : $.extend({action: 'query', list: 'recentchanges', rclimit: 'max',
rcprop: 'ids', rcshow: 'unpatrolled', rctype: ['edit', 'new'], formatversion: 2}, param) )
.then(function(res) {
console.log('End API request: 已获得未巡查的页面ID,用时 ' + (mw.now() - now) + ' ms');
const list = (res.query.recentchanges || res.query.watchlist).map(function(info) { return info.revid; });
if (list.length === 0) { return; }
data = highlightUnpatrolled( $(selector), list );
}, function(reason) { throw reason; });
},
main_alt = function(selector) {
const obj = $('abbr.unpatrolled').parents( selector );
data = highlightUnpatrolled(obj, obj.map(function() { return getRevid(this); }).toArray());
},
apiFailure = function(reason) { mw.notify( text.apiFailure + reason, {type: 'error'} ); },
button = $('<div>', {html: [ '[', $('<a>', {href: '#', text: text.btn}).click( clickBtn ), ']' ]});
$(function() {
if (action == 'history') {
main('#pagehistory > li', {rctitle: mw.config.get( 'wgPageName' )}).then(function() {
if (data.length) { button.css('float', "right").appendTo( '.mw-checkbox-toggle-controls' ); }
}, apiFailure);
}
else if (page == 'History') {
main('li.page-summary', {rctitle: mw.config.get( 'wgRelevantPageName' )}).then(function() {
if (data.length) { button.prependTo( '.content-unstyled' ); }
}, apiFailure);
}
else if (page == 'Contributions') {
const username = mw.config.get( 'wgRelevantUserName' ) || $('a.mw-mf-user span').text();
main(isDesktop ? '.mw-contributions-list > li' : 'li.page-summary', {rcuser: username}).then(function() {
if (data.length === 0) { return; }
if (isDesktop) { button.css('text-align', 'right').insertAfter( '.mw-pager-navigation-bar' ); }
else { button.prependTo( '.content-unstyled' ); }
}, apiFailure);
}
else if (['Recentchanges', 'Watchlist'].includes( page )) {
mw.hook( 'wikipage.content' ).add(function() {
main_alt('.mw-changeslist table, .mw-changeslist tr, li.mw-changeslist-edit');
if (data.length) { button.insertBefore( '.mw-changeslist' ); }
else { button.detach(); }
});
}
});
}