利用者:Y-dash/Scripts/RequestsForUnblockSummary.js
表示
< 利用者:Y-dash | Scripts
お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。
多くの Windows や Linux のブラウザ
- Ctrl を押しながら F5 を押す。
Mac における Safari
Mac における Chrome や Firefox
- ⌘ Cmd と ⇧ Shift を押しながら R を押す。
詳細についてはWikipedia:キャッシュを消すをご覧ください。
/**
* [[:Category:ブロック解除依頼]]表示時に、各解除依頼の状況一覧表を表示する。
* [[:en:Category:Requests for unblock#Summary]]の簡易版をJSでやってみたイメージ。
*/
$.when( mw.loader.using( [ 'mediawiki.api', 'jquery.tablesorter' ] ), $.ready ).then(function() {
// [[:Category:ブロック解除依頼]]でなければ処理終了
if( mw.config.get( 'wgPageName' ) !== 'Category:ブロック解除依頼' ) {
return;
}
// API叩いてカテゴリメンバーの会話ページ情報を取る
var categoryApi = new mw.Api();
categoryApi.get(
{
"action": "query",
"format": "json",
"prop": "revisions",
"generator": "categorymembers",
"rvprop": "timestamp|user",
"gcmtitle": "Category:ブロック解除依頼",
"gcmprop": "title",
"gcmnamespace": "3",
"gcmlimit": "max"
}
).done( function( categoryResponses ) {
// ページ情報の抽出
var pages = categoryResponses.query.pages;
var requestsForUnblock = {};
Object.keys( pages ).forEach( function( key ) {
var userName = pages[ key ].title.replace( /(利用者‐会話:)|(User talk:)/, '' );
requestsForUnblock[ userName ] = {};
requestsForUnblock[ userName ].lastEditor = pages[ key ].revisions[0].user;
requestsForUnblock[ userName ].editTimestamp = pages[ key ].revisions[0].timestamp;
} );
// API叩いて利用者情報を取る
var userApi = new mw.Api();
userApi.post(
{
"action": "query",
"format": "json",
"list": "blocks",
"bkusers": Object.keys( requestsForUnblock ).join( '|' ),
"bklimit": "max",
"bkprop": "user|by|timestamp|expiry|reason"
}
).done( function( userResponses ){
// 一覧表htmlの生成
// * 長すぎて落ちるので mediawiki.api.parse は使えない
var summaryHtml = '<div id="requests-for-unblock-summary"><h2>依頼の状況</h2><table class="wikitable"><thead><tr><th>利用者名</th><th>ブロック日時</th><th>会話ページ最終編集日時</th><th>会話ページ最終編集者</th><th>ブロック対処者</th><th>ブロック期間</th></tr></thead><tbody>';
userResponses.query.blocks.forEach( function( user ) {
summaryHtml += '<tr>';
summaryHtml += '<td><a href="/wiki/User_talk:' + user.user + '">' + user.user + '</a></td>';
summaryHtml += '<td>' + user.timestamp + '</td>';
summaryHtml += '<td>' + requestsForUnblock[ user.user ].editTimestamp + '</td>';
summaryHtml += '<td><a href="/wiki/Special:Contributions/' + requestsForUnblock[ user.user ].lastEditor + '">' + requestsForUnblock[ user.user ].lastEditor + '</a></td>';
summaryHtml += '<td><a href="/wiki/Special:Contributions/' + user.by + '">' + user.by + '</a></td>';
summaryHtml += '<td>' + user.expiry + '</td>';
summaryHtml += '</tr>';
} );
summaryHtml += '</tbody><tfoot></tfoot></table></div>';
// html挿入してソートつける
$( summaryHtml ).insertBefore( '#mw-pages' ).find( 'table' ).tablesorter();
} );
} );
} );