利用者:Naggy Nagumo/赤リンク.js

出典: フリー多機能辞典『ウィクショナリー日本語版(Wiktionary)』
ナビゲーションに移動 検索に移動

注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。

  • Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
  • Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
  • Internet Explorer / Microsoft Edge: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください
  • Opera: Ctrl-F5を押してください
// <nowiki>

function 緑リンク() {
	var 品詞名と品詞コードの対応表 = {
		"名詞": { コード: "noun", 略記: "noun" },
		"動詞": { コード: "verb", 略記: "verb" },
		"形容詞": { コード: "adjective", 略記: "adj" },
		"副詞": { コード: "adverb", 略記: "adv" },
		"接続詞": { コード: "conjunction", 略記: "con" },
		"数詞": { コード: "num", 略記: "" },
		"感動詞": { コード: "interj", 略記: "interj" },
		"代名詞": { コード: "pronoun", 略記: "" },
		"固有名詞": { コード: "name", 略記: "proper noun" },
		"接頭辞": { コード: "prefix", 略記: "prefix" },
		"接尾辞": { コード: "suffix", 略記: "suffix" }
	};
	
	mw.util.addCSS('a.new.green-link { color: #2c0 }');
	
	function 品詞判別(, リンク) {
		var 品詞名 = $('h3').add($().find('h3'))
			.filter(function () {
				return Boolean(this.compareDocumentPosition(リンク) & Node.DOCUMENT_POSITION_FOLLOWING);
			})
			.last()
			.find('.mw-headline')
			.text()
			.split(/[::・0-9 ]/)[0];
		if (品詞名と品詞コードの対応表[品詞名]) {
			return {
				品詞名: 品詞名,
				コード: 品詞名と品詞コードの対応表[品詞名].コード,
				略記: 品詞名と品詞コードの対応表[品詞名].略記
			};
		}
		else {
			return null;
		}
	}
	
	function URLにパラメーターを追加(プロパティ) {
		if (!プロパティ) {
			return;
		}
	
		var 現ページタイトル = mw.config.get('wgTitle');
		var 要約 = プロパティ.要約;
		var 品詞 = プロパティ.項目.品詞;
		var 品詞略記 = プロパティ.項目.品詞略記;
		var lang = プロパティ.項目.lang;
		var tr = プロパティ.項目.tr;
		var gender = プロパティ.項目.gender;
	
		var テキスト = '';
		テキスト += '=={{' + lang + '}}==\n';
		テキスト += '==={{' + 品詞 + '}}===\n';
		if (品詞略記) {
			テキスト += '{{' + lang + '-' + 品詞略記;
		}
		else {
			テキスト += '{{head|' + lang + '|' + 品詞;
		}
		if (tr) {
			テキスト += '|tr=' + tr;
		}
		if (gender) {
			テキスト += '|g=' + gender;
		}
		テキスト += '}}\n';
		テキスト += '# [[' + 現ページタイトル + ']]。\n';
	
		プロパティ.リンク.href +=
			'&summary=' +
			encodeURIComponent(要約) +
			'&preloadtext=' +
			encodeURIComponent(テキスト);
	}
	
	function リンクを更新(プロパティ) {
		var url = プロパティ.リンク.href;
		if (url.indexOf('?') !== -1) {
			$(プロパティ.リンク).addClass('green-link');
			URLにパラメーターを追加(プロパティ);
		}
	}
	
	function 実行() {
		if (mw.config.get('wgNamespaceNumber') !== 0) {
			return;
		}
		
		var タイトル = mw.config.get('wgTitle');
	
		if (!) {
			 = $('#bodyContent');
		}
	
		.find('span.translation a.new').each(function () {
			var 項目 = $(this)
				.closest('.translation')
				.data();
			var 品詞情報 = 品詞判別(, this);
			if (品詞情報) {
				項目.品詞 = 品詞情報.コード;
				項目.品詞略記 = 品詞情報.略記;
		
				リンクを更新({
					リンク: this,
					要約: '[[' + タイトル + ']]の訳語',
					項目: 項目,
				});
			}
		});
	}

	実行();
}
mw.hook('wikipage.content').add(緑リンク);

// </nowiki>