コンテンツにスキップ

利用者:Dokomonta/vector.js

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

多くの WindowsLinux のブラウザ

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

Mac における Safari

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

Mac における ChromeFirefox

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

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

/* 要約欄にリンクがあった場合、リンクを無効化し、拡張する。
 * その時点での版と最新版へのリンクを表示する。
 */
jQuery(function($) {
	var dialogs = {}; // dialog のキャッシュ { pagename:oldid => dialog }
	$('.comment').find('a[href^="/wiki/"]').each(function(index, elem) {
		// リンクの pathname を取り出し /wiki/ より後の部分をデコードし、pagename とする
		var pagename = decodeURI(/^\/wiki\/(.*)$/.exec(elem.pathname)[1]);
		var hash = elem.hash;
		var parents = 'td.diff-otitle, td.diff-ntitle, ' +
			'ul li';
		var link = $(elem).parents(parents)
			.find('#mw-diff-otitle1 a, #mw-diff-ntitle1 a, li > a')
			.get(0);
		if (typeof link === 'undefined') return; // 削除記録など
		var oldid = mw.util.getParamValue('oldid', link.href);
		var diff = mw.util.getParamValue('diff', link.href);
		if (/^\d+$/.test(diff) && oldid < diff) {
			oldid = diff; // 差分の上書き
		}
		/* リンクの拡張 */
		mw.loader.using(['jquery.ui', 'jquery.tipsy'], function(){
			$(elem).tipsy({title: function(){
				return 'クリックした後、しばらくお待ちください。';
			}}).click(function(e){
				e.preventDefault(); // リンクのクリックを無効化
 
				// キャッシュの検索
				$dialog = dialogs[pagename + ':' + oldid];
				if ($dialog && $dialog.dialog) {
					$dialog.dialog();
					return;
				}
				var url = '/w/api.php';
				var param = {
					'format': 'json',
					'action': 'query',
					'prop': 'revisions',
					'rvdir': 'older',
					'rvlimit': 1,
					'rvprop': 'ids|timestamp',
					'redirects': '',
					'rvstartid': oldid,
					'titles': pagename
				};
				$.getJSON(url, param, function(data) {
					var pages = (data && data.query && data.query.pages) || [];
					for (pid in pages) {
						var page = pages[pid];
						var revisions = page.revisions;
						var header = '「' + page.title + '」へのリンク';
						var $msg = $('<p />');
						var $link = $('<a />');
						if (typeof revisions === 'undefined') {
							$msg.text('履歴が見つかりません。' +
							'過去ログ化の際、移動された可能性があります。');
						} else {
							var rev = revisions[0];
							var revid = rev.revid;
							var href = '/w/index.php?oldid=' + revid + hash;
							$msg.append($link.clone()
								.attr('href', href).text(rev.timestamp + ' の版')
							);
						}
						$msg.append($link.clone()
							.attr('href', mw.util.getUrl(page.title) + hash)
							.text('最新版を表示する')
						).wrap('<ul><li>');
					}
 
					var $dialog = $('<div />')
						.attr('title', header).append($msg)
						.find('a').wrap('<li>').end()
						.find('p').wrapInner('<ul>').end();
					dialogs[pagename + ':' + oldid] = $dialog;
					$dialog.dialog();
				});
			});
		});
	});
});