Потребител:V111P/js/QuickDiffCommands.js: Разлика между версии
< Потребител:V111P | js
Изтрито е съдържание Добавено е съдържание
мРедакция без резюме |
Меню; Използване на оригиналния Бързолик скрипт МедияУики:Gadget-Quick_diff.js |
||
Ред 1: | Ред 1: | ||
/** |
/** |
||
* For [[МедияУики:Gadget-Quick diff.js]] |
|||
* Enhance recent changes diff links. |
|||
* |
|||
* Author: Borislav Manolov |
|||
* License: Public domain |
|||
* Documentation: [[МедияУики:Gadget-Quick diff.js/doc]] |
|||
*/ |
|||
var KEY_ESC = 27; |
|||
Задайте клавишите, които искате във вашия .js файл: |
|||
//$(document).off(); |
|||
//$('a[href*="diff="]').off(); |
|||
//$('#quickdiff').remove(); |
|||
window.quickDiffConfig = { |
|||
var QuickDiff = { |
|||
keys: { |
|||
close: '4', |
|||
patrol: '3', |
|||
rollback: '5', |
|||
up: 'r', |
|||
down: 'f', |
|||
upUnpatrolled: 'e', |
|||
downUnpatrolled: 'd' |
|||
} |
|||
}; |
|||
*/ |
|||
enable: function() |
|||
{ |
|||
jQuery('body').on('click', 'a[href*="diff="]', function (event) { |
|||
var $link = jQuery(this); |
|||
var isInside = $link.closest('#quickdiff').length > 0; |
|||
if (isInside) |
|||
$link = QuickDiff.$currentDiffLink; |
|||
else |
|||
QuickDiff.$currentDiffLink = $link.addClass("working"); |
|||
var href = this.href + "&action=render" |
|||
+ ( event.ctrlKey ? "" : "&diffonly=1" ); |
|||
jQuery.get(href, function(data){ |
|||
QuickDiff.viewDiff(data, $link); |
|||
if (!isInside) |
|||
$link.removeClass("working").addClass("done"); |
|||
}); |
|||
return false; |
|||
}); |
|||
}, |
|||
//$(document).off(); $('a[href*="diff="]').off(); |
|||
viewDiff: function(content, $link) |
|||
//$('#quickdiff').remove(); window.QuickDiff = null; |
|||
{ |
|||
//if (QuickDiffCmds) QuickDiffCmds.turnOff(); |
|||
var $viewWin = this.getViewWindow().css("top", $link.position().top + 30) |
|||
.find("#quickdiff-content").html(content) |
|||
.end().show(); |
|||
if (mw.ext && mw.ext.Patroller) { |
|||
new mw.ext.Patroller.bulk(new mw.ext.Patroller.quick()).enable($link[0].href); |
|||
var patrolLink = $viewWin.find('.patrollink a'); |
|||
new mw.ext.Patroller.quick().enable(patrolLink, $link[0].href); |
|||
} |
|||
if (mw.ext && mw.ext.QuickRollback) { |
|||
var $rollbackLinkSpan = $('#quickdiff .mw-rollback-link'); |
|||
$rollbackLinkSpan.before('<br/>'); |
|||
mw.ext.QuickRollback.enable($rollbackLinkSpan.find('a')); |
|||
} |
|||
}, |
|||
var QuickDiffCmds = { |
|||
viewWindow: null, |
|||
$menu: null, |
|||
getViewWindow: function() |
|||
{ |
|||
if ( null === this.viewWindow ) { |
|||
this.prepareViewWindow(); |
|||
} |
|||
closeWin: function () { |
|||
return this.viewWindow; |
|||
$('#quickdiff').hide(); |
|||
}, |
}, |
||
turnOff: function () { |
|||
QuickDiffCmds.quickDiffPatch(true); |
|||
if (QuickDiffCmds.qdcCss) QuickDiffCmds.qdcCss.disabled = true; |
|||
if (QuickDiffCmds.$menu) QuickDiffCmds.$menu.remove(); |
|||
}, |
|||
buildMenu: function() |
|||
{ |
{ |
||
var $menuDiv = $('<div id="quickdiff-menu"></div>'); |
|||
this.viewWindow = this.buildViewWindow(); |
|||
var clk = function (fn) { return function (e) { e.preventDefault(); fn(); } } |
|||
mw.loader.load("mediawiki.diff.styles", "text/css"); |
|||
var spEl = document.createTextNode(' '); |
|||
this.addCss(); |
|||
var sp = ' '; |
|||
}, |
|||
$menuDiv.prepend(sp, $('<a href="#">>></a>').click(clk(QuickDiffCmds.nextUnpatrolled))); |
|||
$menuDiv.prepend(sp, $('<a href="#">></a>').click(clk(QuickDiffCmds.next))); |
|||
$menuDiv.prepend(sp, $('<a href="#" title="' + QuickDiffCmds.helpMsg() + '">?</span>') |
|||
.click(clk(function () { |
|||
alert(QuickDiffCmds.helpMsg()); |
|||
}))); |
|||
$menuDiv.prepend(sp, $('<a href="#"><</a>').click(clk(QuickDiffCmds.up))); |
|||
$menuDiv.prepend(sp, $('<a href="#"><<</a>').click(clk(QuickDiffCmds.upUnpatrolled))); |
|||
closeWin: function() { |
|||
$('#quickdiff').hide(); |
|||
}, |
|||
buildViewWindow: function() |
|||
{ |
|||
var $win = jQuery('<div id="quickdiff"><div id="quickdiff-close"></div><div id="quickdiff-content"></div></div>'); |
|||
var closeWin = function(){ |
|||
if ($win) { |
|||
$win.hide(); |
|||
} |
|||
}; |
|||
$win.on('dblclick', closeWin).appendTo("#bodyContent").find("#quickdiff-close").click(closeWin); |
|||
$(document).keyup(function(e) { |
$(document).keyup(function(e) { |
||
var keys = QuickDiffCmds.keys; |
|||
if (e.keyCode == KEY_ESC) { closeWin(); } |
|||
if (e.keyCode == KEY_ESC) { QuickDiff.closeWin(); return; } |
|||
if ( !$('#quickdiff').is(':visible') || e.target.nodeName == 'INPUT' ) { return; } |
if ( !$('#quickdiff').is(':visible') || e.target.nodeName == 'INPUT' ) { return; } |
||
var key = String.fromCharCode(e.keyCode).toLowerCase(); |
var key = String.fromCharCode(e.keyCode).toLowerCase(); |
||
if ( |
if (QuickDiffCmds.userIsPatroller && key == keys.patrol) { QuickDiffCmds.patrolMulti(); } |
||
else if (key == keys.close) { closeWin(); } |
else if (key == keys.close) { QuickDiffCmds.closeWin(); } |
||
else if (key == keys.rollback) { |
else if (key == keys.rollback) { |
||
var rollbkLink = $('#quickdiff .mw-rollback-link a').attr('target', '_blank')[0]; |
var rollbkLink = $('#quickdiff .mw-rollback-link a').attr('target', '_blank')[0]; |
||
Ред 104: | Ред 72: | ||
else if (key == keys.rollbackComment) { |
else if (key == keys.rollbackComment) { |
||
var rollbkCLink = $('#quickdiff a.quickRollback_comm')[0]; |
var rollbkCLink = $('#quickdiff a.quickRollback_comm')[0]; |
||
if (rollbkCLink) rollbkCLink.click(); |
|||
} |
} |
||
else if (key == keys.up || key == keys.down) { |
else if (key == keys.up || key == keys.down) { |
||
QuickDiffCmds.next( key == keys.up ); |
|||
} |
} |
||
else if ( |
else if ( QuickDiffCmds.userIsPatroller && ( key == keys.upUnpatrolled || key == keys.downUnpatrolled ) ) { |
||
QuickDiffCmds.nextUnpatrolled( key == keys.upUnpatrolled ); |
|||
} |
} |
||
}); |
}); |
||
return $menuDiv; |
|||
$(document.body).on("click", function(event) { |
|||
if ($(event.target).parents('#quickdiff').length === 0) { |
|||
closeWin(); |
|||
} |
|||
}); |
|||
return $win; |
|||
}, |
}, |
||
addCss: function() |
addCss: function() |
||
{ |
{ |
||
mw.util.addCSS( |
QuickDiffCmds.qdcCss = mw.util.addCSS( |
||
'#quickdiff {\ |
'#quickdiff-menu {\ |
||
z-index: 1;\ |
|||
width: 100%;\ |
|||
border: thin outset silver;\ |
|||
box-shadow: 0 0 30px #888888;\ |
|||
background-color: white;\ |
|||
}\ |
|||
#quickdiff-close {\ |
|||
position: absolute;\ |
position: absolute;\ |
||
top: 0;\ |
top: 0;\ |
||
right: |
right: 40px;\ |
||
font-family: sans-serif;\ |
|||
height: 20px;\ |
|||
background: url(//upload.wikimedia.org/wikipedia/commons/thumb/0/0c/Fileclose.png/16px-Fileclose.png) no-repeat center center;\ |
|||
cursor: pointer;\ |
|||
z-index: 1;\ |
|||
}' |
}' |
||
); |
); |
||
Ред 158: | Ред 111: | ||
}, |
}, |
||
up: function() {QuickDiffCmds.next(true);}, |
|||
next: function(up) { |
next: function(up) { |
||
function scrollTo(el) { |
function scrollTo(el) { |
||
Ред 165: | Ред 119: | ||
} |
} |
||
var $lastDiffLink = QuickDiff.$currentDiffLink; |
var $lastDiffLink = QuickDiff.$currentDiffLink; |
||
var $all, index, closeWin = |
var $all, index, closeWin = QuickDiffCmds.closeWin; |
||
if (mw.config.get('wgAction') === "history") { |
if (mw.config.get('wgAction') === "history") { |
||
Ред 190: | Ред 144: | ||
} |
} |
||
else { // Recent changes, Watchlist, Contributions |
else { // Recent changes, Watchlist, Contributions |
||
var $all; |
|||
if (mw.config.get('wgCanonicalSpecialPageName') == 'Contributions') { |
if (mw.config.get('wgCanonicalSpecialPageName') == 'Contributions') { |
||
$all = $('.mw-changeslist-date + a[href*="&diff=prev"]'); |
$all = $('.mw-changeslist-date + a[href*="&diff=prev"]'); |
||
} |
} |
||
else if ($('.mw-enhanced-rc').length > 0) { |
|||
$all = $('.mw-title + a[href*="&diff="]'); // excludes the subdiffs |
|||
} |
|||
} |
|||
else $all = $('a[href*="&diff="]'); |
|||
if (up) { $all = $($all.get().reverse()); } |
if (up) { $all = $($all.get().reverse()); } |
||
Ред 221: | Ред 175: | ||
}, |
}, |
||
upUnpatrolled: function() {QuickDiffCmds.nextUnpatrolled(true);}, |
|||
nextUnpatrolled: function(up) { |
nextUnpatrolled: function(up) { |
||
var namespaceNames = mw.config.get('wgFormattedNamespaces'); |
var namespaceNames = mw.config.get('wgFormattedNamespaces'); |
||
Ред 245: | Ред 200: | ||
}); |
}); |
||
if (!$nextUnpatrolled) |
if (!$nextUnpatrolled) QuickDiffCmds.closeWin(); |
||
else { |
else { |
||
var $scrollToEl = ($above && $above[0] ? $above : $nextUnpatrolled); |
var $scrollToEl = ($above && $above[0] ? $above : $nextUnpatrolled); |
||
Ред 251: | Ред 206: | ||
$lnk.click(); |
$lnk.click(); |
||
} |
} |
||
}, |
|||
helpMsg: function() { |
|||
var hlpStr = '<< – Нагоре непатрул.\n< – Нагоре\n> – Надолу\n>> – Надолу непатрул.\n\nКлавиши\n'; |
|||
$.each(QuickDiffCmds.keys, function(idx,val) { |
|||
switch (idx) { |
|||
case 'rollbackGood': // fallthrough |
|||
case 'rollbackComment': if (!mw.ext.QuickRollback) return; // fallthrough |
|||
case 'rollback': // fallthrough |
|||
case 'patrol': if (!QuickDiffCmds.userIsPatroller) return; break; |
|||
} |
|||
var str = idx + ": " + val + '\n'; |
|||
hlpStr += str; |
|||
}); |
|||
return hlpStr + ''; |
|||
}, |
|||
quickDiffPatch: function (undo) { |
|||
if (undo) { |
|||
if (QuickDiffCmds.originalGVW) |
|||
QuickDiff.getViewWindow = QuickDiffCmds.originalGVW; |
|||
return; |
|||
} |
|||
QuickDiffCmds.originalGVW = QuickDiff.getViewWindow; |
|||
QuickDiff.getViewWindow = function () { |
|||
var $menu = QuickDiffCmds.$menu; |
|||
if ( null === $menu ) { |
|||
$menu = QuickDiffCmds.$menu = QuickDiffCmds.buildMenu(); |
|||
} |
|||
var win = QuickDiffCmds.originalGVW.call(QuickDiff); |
|||
win && win.prepend && win.prepend($menu); |
|||
return win; |
|||
}; |
|||
} |
} |
||
Ред 265: | Ред 254: | ||
patrol: '3', |
patrol: '3', |
||
rollback: '5', |
rollback: '5', |
||
rollbackGood: '6', // изисква джаджата „Бързо отменяне“ |
rollbackGood: '6', // изисква джаджата „Бързо отменяне“ |
||
rollbackComment: '7', // изисква джаджата „Бързо отменяне“ |
rollbackComment: '7', // изисква джаджата „Бързо отменяне“ |
||
up: 'r', |
up: 'r', |
||
Ред 273: | Ред 262: | ||
}; |
}; |
||
var customKeys = window.quickDiffConfig && window.quickDiffConfig.keys; |
var customKeys = window.quickDiffConfig && window.quickDiffConfig.keys; |
||
QuickDiffCmds.keys = $.extend(keys, customKeys); |
|||
var userGroups = mw.config.get('wgUserGroups'); |
var userGroups = mw.config.get('wgUserGroups'); |
||
QuickDiffCmds.userIsAdmin = $.inArray("sysop", userGroups) > -1; |
|||
QuickDiffCmds.userIsPatroller = $.inArray("patroller", userGroups) > -1 || QuickDiffCmds.userIsAdmin; |
|||
QuickDiffCmds.addCss(); |
|||
|| $.inArray("autopatrolled", userGroups) > -1 || QuickDiff.userIsAdmin; |
|||
QuickDiff. |
if (!window.QuickDiff) $.ajax({ |
||
url: '//bg.wikipedia.org/w/index.php?title=МедияУики:Gadget-Quick_diff.js' |
|||
+ '&action=raw&ctype=text/javascript', |
|||
dataType: 'script', |
|||
cache: true, |
|||
success: function () { |
|||
setTimeout(function () { |
|||
if (window.QuickDiff) |
|||
QuickDiffCmds.quickDiffPatch(); |
|||
}, 500); // sometimes a script needs time to execute |
|||
} |
|||
}); |
|||
} |
} |
||
}); |
}); |
Версия от 10:55, 27 април 2018
/**
* For [[МедияУики:Gadget-Quick diff.js]]
*
Задайте клавишите, които искате във вашия .js файл:
window.quickDiffConfig = {
keys: {
close: '4',
patrol: '3',
rollback: '5',
up: 'r',
down: 'f',
upUnpatrolled: 'e',
downUnpatrolled: 'd'
}
};
*/
//$(document).off(); $('a[href*="diff="]').off();
//$('#quickdiff').remove(); window.QuickDiff = null;
//if (QuickDiffCmds) QuickDiffCmds.turnOff();
var QuickDiffCmds = {
$menu: null,
closeWin: function () {
$('#quickdiff').hide();
},
turnOff: function () {
QuickDiffCmds.quickDiffPatch(true);
if (QuickDiffCmds.qdcCss) QuickDiffCmds.qdcCss.disabled = true;
if (QuickDiffCmds.$menu) QuickDiffCmds.$menu.remove();
},
buildMenu: function()
{
var $menuDiv = $('<div id="quickdiff-menu"></div>');
var clk = function (fn) { return function (e) { e.preventDefault(); fn(); } }
var spEl = document.createTextNode(' ');
var sp = ' ';
$menuDiv.prepend(sp, $('<a href="#">>></a>').click(clk(QuickDiffCmds.nextUnpatrolled)));
$menuDiv.prepend(sp, $('<a href="#">></a>').click(clk(QuickDiffCmds.next)));
$menuDiv.prepend(sp, $('<a href="#" title="' + QuickDiffCmds.helpMsg() + '">?</span>')
.click(clk(function () {
alert(QuickDiffCmds.helpMsg());
})));
$menuDiv.prepend(sp, $('<a href="#"><</a>').click(clk(QuickDiffCmds.up)));
$menuDiv.prepend(sp, $('<a href="#"><<</a>').click(clk(QuickDiffCmds.upUnpatrolled)));
$(document).keyup(function(e) {
var keys = QuickDiffCmds.keys;
if ( !$('#quickdiff').is(':visible') || e.target.nodeName == 'INPUT' ) { return; }
var key = String.fromCharCode(e.keyCode).toLowerCase();
if (QuickDiffCmds.userIsPatroller && key == keys.patrol) { QuickDiffCmds.patrolMulti(); }
else if (key == keys.close) { QuickDiffCmds.closeWin(); }
else if (key == keys.rollback) {
var rollbkLink = $('#quickdiff .mw-rollback-link a').attr('target', '_blank')[0];
if (rollbkLink) rollbkLink.click();
}
else if (key == keys.rollbackGood) {
var rollbkGLink = $('#quickdiff a.quickRollback_good')[0];
if (rollbkGLink) rollbkGLink.click();
}
else if (key == keys.rollbackComment) {
var rollbkCLink = $('#quickdiff a.quickRollback_comm')[0];
if (rollbkCLink) rollbkCLink.click();
}
else if (key == keys.up || key == keys.down) {
QuickDiffCmds.next( key == keys.up );
}
else if ( QuickDiffCmds.userIsPatroller && ( key == keys.upUnpatrolled || key == keys.downUnpatrolled ) ) {
QuickDiffCmds.nextUnpatrolled( key == keys.upUnpatrolled );
}
});
return $menuDiv;
},
addCss: function()
{
QuickDiffCmds.qdcCss = mw.util.addCSS(
'#quickdiff-menu {\
z-index: 1;\
position: absolute;\
top: 0;\
right: 40px;\
font-family: sans-serif;\
}'
);
},
patrolMulti: function() { // "click" the Patrol-multiple link if exists, otherwise "click" the Patrol link
var $quickPatrolMultipleLink = $('#quickdiff [href="#executePatrol"]');
var $standardPatrolLink = $('#quickdiff .patrollink a');
if ($quickPatrolMultipleLink[0]) $quickPatrolMultipleLink.click();
else {
if (mw.ext && mw.ext.Patroller)
$standardPatrolLink.click();
else
$standardPatrolLink[0].click();
}
// remove the exclamation point from the line
QuickDiff.$currentDiffLink.closest('tr').find('abbr.unpatrolled').after(' ').remove();
},
up: function() {QuickDiffCmds.next(true);},
next: function(up) {
function scrollTo(el) {
el = (el && el instanceof jQuery ? el[0] : el);
if (el) el.scrollIntoView();
return $(el);
}
var $lastDiffLink = QuickDiff.$currentDiffLink;
var $all, index, closeWin = QuickDiffCmds.closeWin;
if (mw.config.get('wgAction') === "history") {
$all = $('ul#pagehistory li');
index = $all.index($lastDiffLink.closest('li'));
if ( (up && index === 0) || (!up && index == $all.length - 1) ) closeWin();
else {
var $diffLinks = $all.eq( index + (up ? -1 : 1) ).find('.mw-history-histlinks a');
if (up) {
// if at top and there is no more recent edit, the "prev" link is the first link
var $lnk = $( $diffLinks[1] || $diffLinks[0] );
scrollTo( $all[index - 2] || $lnk );
$lnk.click();
}
else { // down
if ($diffLinks.length == 1) { closeWin(); } // no prev link (no earlier edits)
else {
scrollTo($lastDiffLink); // scroll to the link above
$diffLinks[1].click();
}
}
}
}
else { // Recent changes, Watchlist, Contributions
var $all;
if (mw.config.get('wgCanonicalSpecialPageName') == 'Contributions') {
$all = $('.mw-changeslist-date + a[href*="&diff=prev"]');
}
else if ($('.mw-enhanced-rc').length > 0) {
$all = $('.mw-title + a[href*="&diff="]'); // excludes the subdiffs
}
else $all = $('a[href*="&diff="]');
if (up) { $all = $($all.get().reverse()); }
index = $all.index($lastDiffLink);
if (index > -1) {
if ( index == $all.length - 1 ) closeWin();
else {
var $el = $all.eq(index + 1);
// scroll to the element above $el, unless $el is the top element
scrollTo( $(!up ? $lastDiffLink : $( $all.eq(index + 2)[0] || $el[0] ) ) );
$el.click();
}
}
else { // Enhanced Recent Changes/Watchlist sublist diff link
var $sublist = $lastDiffLink.closest('.mw-enhanced-rc').find('.mw-enhanced-rc-time + a + a');
index = $sublist.index($lastDiffLink);
if ( (!up && index + 1 == $sublist.length) || (up && index < 1) ) closeWin();
else if (index > -1) scrollTo( $sublist.eq( index + (up ? -1 : 1) ) ).click();
}
}
},
upUnpatrolled: function() {QuickDiffCmds.nextUnpatrolled(true);},
nextUnpatrolled: function(up) {
var namespaceNames = mw.config.get('wgFormattedNamespaces');
var talkNS = namespaceNames[1], wpNS = namespaceNames[4];
var excludeNSRegEx = new RegExp('[' + talkNS[0] + talkNS[0].toLowerCase() + ']'
+ talkNS.slice(1) + ':|' + wpNS + ':');
var grouped = $('table.mw-enhanced-rc').length > 0;
var $all = $( grouped ? 'table.mw-enhanced-rc' : '.mw-changeslist li' );
if (up) { $all = $($all.get().reverse()); }
var index = $all.index(QuickDiff.$currentDiffLink.closest( (grouped ? 'table.mw-enhanced-rc' : 'li' ) ));
var $nextUnpatrolled, $above, $lnk;
$all.each(function (i, el) {
if (i <= index) return true; // continue
var $el = $(el);
$lnk = $el.find( ( grouped ? '.mw-title + ' : '' ) + 'a[href*="&diff="]' );
if ( $lnk[0] && $el.has('.unpatrolled')[0] && !$el.text().match(excludeNSRegEx) ) {
$nextUnpatrolled = $el;
$above = (up ? $($all[i + 1]) : $($all[i - 1]));
return false; // break
}
return true; // continue
});
if (!$nextUnpatrolled) QuickDiffCmds.closeWin();
else {
var $scrollToEl = ($above && $above[0] ? $above : $nextUnpatrolled);
$scrollToEl[0].scrollIntoView();
$lnk.click();
}
},
helpMsg: function() {
var hlpStr = '<< – Нагоре непатрул.\n< – Нагоре\n> – Надолу\n>> – Надолу непатрул.\n\nКлавиши\n';
$.each(QuickDiffCmds.keys, function(idx,val) {
switch (idx) {
case 'rollbackGood': // fallthrough
case 'rollbackComment': if (!mw.ext.QuickRollback) return; // fallthrough
case 'rollback': // fallthrough
case 'patrol': if (!QuickDiffCmds.userIsPatroller) return; break;
}
var str = idx + ": " + val + '\n';
hlpStr += str;
});
return hlpStr + '';
},
quickDiffPatch: function (undo) {
if (undo) {
if (QuickDiffCmds.originalGVW)
QuickDiff.getViewWindow = QuickDiffCmds.originalGVW;
return;
}
QuickDiffCmds.originalGVW = QuickDiff.getViewWindow;
QuickDiff.getViewWindow = function () {
var $menu = QuickDiffCmds.$menu;
if ( null === $menu ) {
$menu = QuickDiffCmds.$menu = QuickDiffCmds.buildMenu();
}
var win = QuickDiffCmds.originalGVW.call(QuickDiff);
win && win.prepend && win.prepend($menu);
return win;
};
}
};
// prepare for fight
$(function(){
if ( /^(Recentchanges|Watchlist|Contributions)/.test(mw.config.get('wgCanonicalSpecialPageName'))
|| mw.config.get('wgAction') === "history"
|| mw.config.get('wgPageName') === "Уикипедия:Активни_беседи"
) {
var keys = {
close: '4',
patrol: '3',
rollback: '5',
rollbackGood: '6', // изисква джаджата „Бързо отменяне“
rollbackComment: '7', // изисква джаджата „Бързо отменяне“
up: 'r',
down: 'f',
upUnpatrolled: 'e',
downUnpatrolled: 'd'
};
var customKeys = window.quickDiffConfig && window.quickDiffConfig.keys;
QuickDiffCmds.keys = $.extend(keys, customKeys);
var userGroups = mw.config.get('wgUserGroups');
QuickDiffCmds.userIsAdmin = $.inArray("sysop", userGroups) > -1;
QuickDiffCmds.userIsPatroller = $.inArray("patroller", userGroups) > -1 || QuickDiffCmds.userIsAdmin;
QuickDiffCmds.addCss();
if (!window.QuickDiff) $.ajax({
url: '//bg.wikipedia.org/w/index.php?title=МедияУики:Gadget-Quick_diff.js'
+ '&action=raw&ctype=text/javascript',
dataType: 'script',
cache: true,
success: function () {
setTimeout(function () {
if (window.QuickDiff)
QuickDiffCmds.quickDiffPatch();
}, 500); // sometimes a script needs time to execute
}
});
}
});