利用者:Dokomonta/vector.js
表示
お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。
多くの Windows や Linux のブラウザ
- Ctrl を押しながら F5 を押す。
Mac における Safari
Mac における Chrome や Firefox
- ⌘ 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();
});
});
});
});
});