コンテンツにスキップ

利用者:Y-dash/Scripts/RequestsForUnblockSummary.js

お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。

多くの WindowsLinux のブラウザ

  • Ctrl を押しながら F5 を押す。

Mac における Safari

  • Shift を押しながら、更新ボタン をクリックする。

Mac における ChromeFirefox

  • 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();
		} );
	} );
} );