コンテンツにスキップ

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

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

多くの WindowsLinux のブラウザ

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

Mac における Safari

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

Mac における ChromeFirefox

  • Cmd Shift を押しながら R を押す。

詳細についてはWikipedia:キャッシュを消すをご覧ください。

/**
 * [[:Category:操り人形だと疑われるユーザー]]の子カテゴリページ表示時、カテゴリ内の利用者情報を取得。
 * ページ最下部に以下のような利用者情報テーブル作成用のウィキテキストを挿入する。
 * 
 *  {| class="wikitable sortable"
 *  ! アカウント登録日 !! ブロック日 !! アカウント名 !! 備考
 *  |-
 *  || 2011-04-22 || 2011-04-22 || {{User2|ある利用者}} || 
 *  |}
 * 
 * [[Wikipedia:進行中の荒らし行為/長期]]ページ新規作成時などの支援目的。
 * APIの件数リミットの関係で、カテゴリメンバーの利用者ページが50件を超えている場合は全件表示不可。
 */

$.when( mw.loader.using( ['mediawiki.util'] ), $.ready ).then(function() {
	// [[:Category:操り人形だと疑われるユーザー]]の子カテゴリでなければ処理終了
	if( mw.config.get( 'wgNamespaceNumber' ) !== 14 || mw.config.get( 'wgCategories' ).indexOf( '操り人形だと疑われるユーザー' ) === -1 ) {
		return;
	}
	
	// APIからカテゴリメンバーのページタイトルを取る
	var categoryApi = new mw.Api();
	categoryApi.get(
		{
			"action": "query",
			"format": "json",
			"list": "categorymembers",
			"cmtitle": mw.config.get( 'wgPageName' ),
			"cmprop": "title",
			"cmnamespace": "2",
			"cmlimit": "50"
		}
	).done( function( categoryMembers ){
		// ページタイトルから利用者名リストを作成
		var userNames = [];
		categoryMembers.query.categorymembers.forEach( function(member) {
			userNames.push(member.title);
		} );

		// 利用者情報API叩く
		var userApi = new mw.Api();
		userApi.get(
			{
				"action": "query",
				"format": "json",
				"list": "users",
				"usprop": "blockinfo|registration",
				"ususers": userNames.join( '|' )
			}
		).done( function( users ){
			// アカウント作成日時昇順でソート
			users.query.users.sort( function( user1, user2 ) {
				return user1.registration > user2.registration ? 1 : -1;
			} );
		
			// テーブル用ウィキテキストの生成
			var tableWikiText = '{| class="wikitable sortable"\n! アカウント登録日 !! ブロック日 !! アカウント名 !! 備考';
			users.query.users.forEach( function(user) {
				tableWikiText += '\n|-\n|| ' + user.registration.split( 'T' )[0];
				tableWikiText += ' || ' + user.blockedtimestamp.split( 'T' )[0];
				tableWikiText += ' || {{User2|' + user.name + '}}';
				tableWikiText += ' || ';
			} );
			tableWikiText += "\n|}";
		
			// コンテンツ領域最下に挿入
			$( '#mw-content-text' ).append( '<pre>' + tableWikiText + '</pre>' );
		} );
	} );
});