MediaWiki:Gadget-PrettyDiff.js
ナビゲーションに移動
検索に移動
注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。
- Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
- Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
- Internet Explore/Edger: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください
- Opera: Ctrl-F5を押してください
var DMP_JS_URL = 'https://cdnjs.cloudflare.com/ajax/libs/diff_match_patch/20121119/diff_match_patch.js';
function diff_prettyHtml(a) {
var c = /&/g,
d = /</g,
e = />/g,
f = /\n/g;
return a.map(function(b) {
var h = b[0],
j = b[1].replace(c, '&')
.replace(d, '<')
.replace(e, '>')
.replace(f, '¶<br/>');
switch (h) {
case 1:
return '<ins style="background-color:#D8ECFF;">' + j + '</ins>';
case -1:
return '<del style="background-color:#FEEEC8;">' + j + '</del>';
case 0:
return j;
}
}).join('');
}
function prettyDiff() {
var $table = $(this);
if ($table.find('> tbody > tr.pretty-diff').length > 0) return;
var dmp = new diff_match_patch();
var $lineno = $table.find('> tbody > tr:has(.diff-lineno)');
$lineno.each(function() {
var $c = $(this).nextUntil($lineno);
var oldStr = $c.find('> .diff-deletedline, > .diff-context:eq(0)')
.map(function() { return $(this).text(); }).get().join('\n');
var newStr = $c.find('> .diff-addedline, > .diff-context:eq(1)')
.map(function() { return $(this).text(); }).get().join('\n');
$('<tr class="pretty-diff"/>')
.append('<td colspan="4" style="border: 1px solid #e6e6e6;">' +
diff_prettyHtml(dmp.diff_main(oldStr, newStr)) +
'</td>')
.insertAfter(this);
$c.remove();
});
}
if (mw.util.getParamValue('diff') || $.inArray(mw.config.get('wgAction'), ['edit', 'submit']) !== -1) {
mw.hook('wikipage.content').add(function($content) {
$.getScript(DMP_JS_URL, function() {
$content.on('dblclick', 'table.diff', prettyDiff);
});
});
}