Użytkownik:Expert3222/patrolModule.js
Z Nondanych
Uwaga: aby zobaczyć zmiany po opublikowaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.
- Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5, lub Ctrl+R (⌘-R na komputerze Mac)
- Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
- Internet Explorer / Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5
- Opera: Naciśnij klawisze Ctrl+F5.
/*
* gadżet do szybkiego oznaczania wersji jako sprawdzonych na OZ, nowych stronach i widoku diffów
* autor: Expert3222
* drobne modyfikacje: Ostrzyciel
*/
// TODO: $(this) na $this (do zmiennej), lepsza wydajność będzie
var QuickPatrolLastClick = 0; //https://stackoverflow.com/questions/28609994/javascript-prevent-function-from-executing-multiple-times
var QuickPatrolDelay = 20; //syfiło w logach, rejestrując patrolowanie po kilka razy
var QuickPatrolToken = null;
var QuickPatrolDiffPageRevids = [];
var spinnerCode = "<div class='mw-spinner mw-spinner-small mw-spinner-inline' title='...'></div>";
//fix dla
//https://nonsa.pl/wiki/Plik:Patrolowe_czworaczki.jpg
var makePatrolLinksIsExecuting = false;
var makeDiffViewRevidsListIsExecuting = false;
var makeFilePatrolLinkCallCount = 0;
$(document).ready(function()
{
if (mw.config.get("wgCanonicalSpecialPageName") === "Recentchanges")
{
makePatrolLinks();
if (!!$('.mw-rcfilters-enabled').length) //wzięte od Polskacafe z gadżetu RollWithReason
{
setInterval(makePatrolLinks, 2000);
}
}
else if (mw.config.get("wgCanonicalSpecialPageName") == "Newpages")
{
makeNewpagesPatrolLinks();
}
else if (mw.util.getParamValue("diff") !== null)
{
var parse = function()
{
var oldid = mw.util.getParamValue("oldid", $("#mw-diff-otitle1 > strong > a").attr("href"));
//alert("oldid = " + oldid);
var curid = mw.util.getParamValue("oldid", $("#mw-diff-ntitle1 > strong > a").attr("href"));
//alert("curid = " + curid);
var title = mw.config.get("wgPageName").replace("_", " ");
//console.log(oldid, curid, title);
makeDiffViewRevidsList(oldid, curid, title);
};
parse();
setInterval(parse, 2000); //"przeglądaj historię interaktywnie" na górze
}
else if (mw.config.get("wgCanonicalSpecialPageName") == "MobileDiff")
{
//TODO
/*var oldid = mw.util.getParamValue("oldid", $("#mw-mf-diff-info a").attr("href"));
alert("oldid = " + oldid);
var urlArray = window.location.href.split("/");
var curid = urlArray[urlArray.length - 1];
alert("curid = " + curid);
var title = $("#mw-mf-diff-info a").text();
makeDiffViewRevidsList(oldid, curid, title);*/
}
});
//użycie: patrolChange(diff).done(callback).fail(callback2);
function patrolChange(diff, tokenAlreadyReset)
{
if (QuickPatrolLastClick >= (Date.now() - QuickPatrolDelay))
$.when();
QuickPatrolLastClick = Date.now();
if (diff === null || diff === "" || typeof diff == "undefined")
{
return $.when(); //resolved promise
}
var api = new mw.Api(),
deferred = $.Deferred();
api.post(
{
action: 'fmod-patrol',
format: 'json',
revid: diff,
token: mw.user.tokens.get("patrolToken")
}).done(function(data)
{
deferred.resolve();
}).fail(function(error)
{
if (!tokenAlreadyReset)
{
console.log("TOKEN PATROLOWANIA NIEPRAWIDŁOWY - DRUGA PRÓBA");
api.post
({
format: "json",
formatversion: "2",
action: "query",
meta: "tokens",
type: "patrol"
}).done(function(data)
{
mw.user.tokens.set("patrolToken", data.query.tokens.patroltoken);
patrolChange(diff, true)
.done(function()
{
deferred.resolve();
console.log("NOWY TOKEN PRAWIDŁOWY");
}).fail(function()
{
deferred.reject();
console.log("NOWY TOKEN NIEPRAWIDŁOWY");
});
});
}
else // w przypadku pierwszego faila to zostanie wykonane przez funkcję wywołaną rekursywnie
{
console.log(error);
deferred.reject();
}
});
return deferred.promise();
}
//użycie: patrolRangeOfChanges(to, from).done(callback).fail(callback2);
function patrolRangeOfChanges(to, from, tokenAlreadyReset)
{
if (QuickPatrolLastClick >= (Date.now() - QuickPatrolDelay))
return $.when();
QuickPatrolLastClick = Date.now();
if (diff === null || diff === "" || typeof diff == "undefined")
{
return $.when(); //resolved promise
}
var api = new mw.Api(),
deferred = $.Deferred();
var request =
{
action: 'patrol',
format: 'json',
maxrevid: to,
token: mw.user.tokens.get("patrolToken")
};
if (from !== null && from <= to && from >= 0)
{
$.extend(request, {
minrevid: from
});
}
api.post(request).done(function(data)
{
deferred.resolve();
}).fail(function(error)
{
if (!tokenAlreadyReset)
{
console.log("TOKEN PATROLOWANIA NIEPRAWIDŁOWY - DRUGA PRÓBA");
api.post
({
format: "json",
formatversion: "2",
action: "query",
meta: "tokens",
type: "patrol"
}).done(function(data)
{
mw.user.tokens.set("patrolToken", data.query.tokens.patroltoken);
patrolRangeOfChanges(to, from, true)
.done(function()
{
deferred.resolve();
console.log("NOWY TOKEN PRAWIDŁOWY");
}).fail(function()
{
deferred.reject();
console.log("NOWY TOKEN NIEPRAWIDŁOWY");
});
});
}
else // w przypadku pierwszego faila to zostanie wykonane przez funkcję wywołaną rekursywnie
{
console.log(error);
deferred.reject();
}
});
return deferred.promise();
}
//użycie: patrolPage(pageid).done(callback).fail(callback2);
function patrolPage(id, tokenAlreadyReset)
{
if (QuickPatrolLastClick >= (Date.now() - QuickPatrolDelay))
return $.when();
QuickPatrolLastClick = Date.now();
if (diff === null || diff === "" || typeof diff == "undefined")
{
return $.when(); //resolved promise
}
var api = new mw.Api(),
deferred = $.Deferred();
api.post(
{
action: 'patrol',
format: 'json',
pageid: id,
token: mw.user.tokens.get("patrolToken")
}).done(function(data)
{
deferred.resolve();
}).fail(function(error)
{
if (!tokenAlreadyReset)
{
console.log("TOKEN PATROLOWANIA NIEPRAWIDŁOWY - DRUGA PRÓBA");
api.post
({
format: "json",
formatversion: "2",
action: "query",
meta: "tokens",
type: "patrol"
}).done(function(data)
{
mw.user.tokens.set("patrolToken", data.query.tokens.patroltoken);
patrolPage(id, true)
.done(function()
{
deferred.resolve();
console.log("NOWY TOKEN PRAWIDŁOWY");
}).fail(function()
{
deferred.reject();
console.log("NOWY TOKEN NIEPRAWIDŁOWY");
});
});
}
else // w przypadku pierwszego faila to zostanie wykonane przez funkcję wywołaną rekursywnie
{
console.log(error);
deferred.reject();
}
});
return deferred.promise();
}