プロジェクト:ウィキ技術部/スクリプト開発/trunk/WhatLinksHereOnDeletion.js

/************************************************************************/
// ja> = 削除画面でリンク元 =
//   > 削除画面に、リンク元件数を表示する機能
//   > ;作者: 青子守歌
//   > ;URL: https://ja.wikipedia.org/wiki/User:aokomoriuta
//   > 
//   > 注意:この機能には、[[mw:mwEmbed]]が必要です。
//   >
//   > == ライセンス ==
//   > このスクリプトは、複数ライセンスで利用可能です。
//   > 選択可能なライセンスは次の通り:
//   > * クリエイティブ・コモンズ 表示-継承 3.0 非移植
//   > * クリエイティブ・コモンズ 表示-非営利 3.0 非移植
//   > * GNU一般公衆利用許諾書 バージョン3.0以降
/************************************************************************/
// en> = What Links Here on Deletion =
//   > Shows the page counts what links this page on deletion form
//   > ;author: 青子守歌
//   > ;URL: https://ja.wikipedia.org/wiki/User:aokomoriuta
//   >
//   > Note:[[mw:mwEmbed]] is required.
//   >
//   > == License ==
//   > This script is multi-licensed.
//   > You can select the license of your choice from as following:
//   > * Creative Commons Attribution-ShareAlike 3.0 Unported
//   > * Creative Commons Attribution-Noncommercial 3.0 Unported
//   > * GNU General Public License v3.0 or later
/************************************************************************/
addOnloadHook(function(){mw.ready(function()
{
	// メッセージを追加
	mw.addMessages({
		"whatlinkshereondeletion-all": "警告:削除しようとしているページには、$1件のリンク元があります。:",
		"whatlinkshereondeletion-all-more": "警告:削除しようとしているページには、$1件以上のリンク元があります。:",
		"whatlinkshereondeletion-namespace": "$1名前空間:$2件",
		"whatlinkshereondeletion-ns0name": "標準"
	});
 
	// 削除テーブルを取得
	var $deletetable = $j("#mw-delete-table");
 
	// 履歴の警告文があれば(=削除画面なら)
	if($deletetable)
	{
		// 今のページのリンク元を取得(最大20件)
		mw.getJSON({
			action: "query",
			list: "backlinks",
			bltitle: wgPageName,
			bllimit: 20
		},function(result)
		{
			// リンク元があれば
			if(result.query && result.query.backlinks.length != 0)
			{
				// 名前空間ごとの件数配列を初期化
				var countNamespace = {};
 
				// 全名前空間の番号を取得して
				for(var index in wgFormattedNamespaces)
				{
					// 0で初期化
	                                countNamespace[index] = 0;
				};
 
				// 各リンク元について
				$j.each(result.query.backlinks, function()
				{
					// その名前空間の件数を1増やす
					countNamespace[this.ns]++;
				});
 
				// 名前空間別のリンク元件数一覧の要素を生成
				var $countNamespaceElement = $j(document.createElement("ul"));
 
				// 各名前空間のリンク元件数について
				for(var index in countNamespace)
				{
					// リンク元があれば
					if(countNamespace[index] != 0)
					{
						// リンク元件数の要素を生成
						var $itemElement = $j(document.createElement("li"))
						.append(mw.getMsg("whatlinkshereondeletion-namespace",[
							// $1 = 名前空間名
							(index == 0) ? mw.getMsg("whatlinkshereondeletion-ns0name") : wgFormattedNamespaces[index],
							// $2 = リンク元件数
							countNamespace[index]
						]));
 
						// 標準名前空間なら
						if(index == 0)
						{	// 赤色で表示
							$itemElement.css({color: "red"});
						}
 
						// 件数を表示
						$countNamespaceElement.append($itemElement);
					}
				}
 
				// リンク元の表示要素を生成
				var $linkwarning = $j(document.createElement("div")).attr({
					id: "delete-warning-whatlinkshere"
				}).css({
					"font-weight": "bold"
				}).append(mw.getMsg("whatlinkshereondeletion-" + ((!result["query-continue"])? "all" : "all-more"),[
					// $1 = リンク件数
					result.query.backlinks.length
				])).append($countNamespaceElement);
 
				// 10件以上だったら、
				if(result.query.backlinks.length >= 10)
				{
					// 全体を赤色で表示
					$linkwarning.css({color: "red"});
				}
 
				// リンク元表示を追加
				$deletetable.before($linkwarning);
			}
		});
	}
})});