LLWiki正在建设中,欢迎加入我们!
MediaWiki:Gadget-patrolRevisions.js
跳转到导航
跳转到搜索
注意:在保存之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Internet Explorer:按住Ctrl的同时单击刷新,或按Ctrl-F5
- Opera:前往菜单 → 设置(Mac为Opera → Preferences),然后隐私和安全 → 清除浏览数据 → 缓存的图片和文件。
// 引自[[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(); } }); } }); }