プロジェクト:ウィキ技術部/スクリプト開発/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で初期化
	                                countNamespaceindex = 0;
				};

				// 各リンク元について
				$j.each(result.query.backlinks, function()
				{
					// その名前空間の件数を1増やす
					countNamespacethis.ns++;
				});

				// 名前空間別のリンク元件数一覧の要素を生成
				var $countNamespaceElement = $j(document.createElement("ul"));

				// 各名前空間のリンク元件数について
				for(var index in countNamespace)
				{
					// リンク元があれば
					if(countNamespaceindex != 0)
					{
						// リンク元件数の要素を生成
						var $itemElement = $j(document.createElement("li"))
						.append(mw.getMsg("whatlinkshereondeletion-namespace",
							// $1 = 名前空間名
							(index == 0) ? mw.getMsg("whatlinkshereondeletion-ns0name") : wgFormattedNamespacesindex,
							// $2 = リンク元件数
							countNamespaceindex
						));

						// 標準名前空間なら
						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);
			}
		});
	}
})});