MediaWiki:Gadget-proofread-history.js
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.
window.proofreadHistoryGadget = {
version: 5,
tabCaption: "Historia korekty",
tabTooltip: "Kliknij, żeby zobaczyć historię (bez opuszczania strony).",
errorMessage: "Nie udało się pobrać historii",
hiddenUserMsg: "Ukryty użytkownik",
noUserMsg: "Nieznany użytkownik",
statuses: [
'bez tekstu',
'przepisana',
'problemy',
'skorygowana',
'uwierzytelniona',
],
history: [],
lastLevel: -1,
state: 'hidden',
init: function() {
if (mw.config.get("wgNamespaceNumber") != 100)
return;
if (!mw.config.get('wgArticleId'))
return;
this.addTab();
},
addTab: function() {
var name = this.tabCaption;
var id = 'ca-proofread-history';
var historyLink = document.getElementById("ca-history");
if (!historyLink) {
return;
}
// ( portletId, href, text, [id], [tooltip], [accesskey], [nextnode] ) : HTMLElement|null
var link = mw.util.addPortletLink(
'p-views', '#', name,
id, this.tabTooltip,
'', historyLink
);
link.href = '#';
var that = this;
link.onclick = function() {
if (that.state == 'visible' && (that.history.length) ) {
that.showHistory();
} else if (that.state == 'hidden' || that.state == 'visible') {
that.fetchHistory();
}
};
},
fetchHistory: function() {
this.lastLevel = -1;
this.history = [];
this.state = 'fetching';
this.sendRequest();
},
sendRequest: function(rvstartid) {
var request = {
action: 'query',
titles: mw.config.get( 'wgPageName' ),
prop: 'revisions',
rvprop: 'timestamp|user|content',
rvdir: 'newer',
format: 'json',
rvlimit: 'max',
requestid: new Date().getTime()
};
if (rvstartid) {
request['rvstartid'] = rvstartid;
}
var that = this;
jQuery.getJSON( mw.util.wikiScript( 'api' ), request, function(result) {
that.processResponse(result);
});
},
processResponse: function(data) {
if (! data.query)
return;
var page;
for (var pageid in data.query.pages) {
page = data.query.pages[pageid];
break;
}
for (var revisionid in page.revisions) {
var revision = page.revisions[revisionid];
if (revision['*'] === null) {
console.log("Missing revision text");
console.log(revision);
continue;
}
var matches = revision['*'].match(/^<noinclude><pagequality level="(\d+)"/);
if (matches) {
var level = matches[1];
if (level != this.lastLevel) {
this.lastLevel = level;
var historyentry = {
level: level,
timestamp: revision.timestamp
};
if (revision.hasOwnProperty('user')) {
historyentry.user = revision.user;
}
if (revision.hasOwnProperty('userhidden')) {
historyentry.userhidden = revision.userhidden;
}
this.history.unshift(historyentry);
}
}
else {
console.log("Unable to parse page content");
}
}
if (data['query-continue'] && data['query-continue']['revisions']) {
this.sendRequest(data['query-continue']['revisions']['rvstartid'])
}
else {
this.showHistory();
}
},
formatDate: function(date) {
function formatNumber(value, length) {
var str = new String(value);
while (str.length < length) {
str = "0" + str;
}
return str;
}
var result = formatNumber(date.getFullYear(), 4) + '-' + formatNumber(date.getMonth() + 1, 2) + '-' + formatNumber(date.getDate(), 2);
result += ' ' + formatNumber(date.getHours(), 2) + ':' + formatNumber(date.getMinutes(), 2) + ':' + formatNumber(date.getSeconds(), 2);
return result;
},
showHistory: function() {
this.state = 'visible';
if (!this.history.length) {
mw.notify( this.errorMessage, { tag: 'ph_gadget' } );
} else {
var message = document.createElement('div');
message.className = 'plainlinks';
for (var index in this.history) {
var entry = this.history[index];
var line = document.createElement('div');
line.style.paddingLeft = '3px';
line.className = "quality" + entry.level;
var date = new Date(entry.timestamp);
line.appendChild(document.createTextNode(this.formatDate(date) + ' '));
var user;
if (entry.user) {
user = document.createElement('a');
user.href = mw.util.getUrl("User:" + entry.user);
user.appendChild(document.createTextNode(entry.user));
} else if (entry.hasOwnProperty('userhidden')) {
user = document.createTextNode(this.hiddenUserMsg);
} else {
user = document.createTextNode(this.noUserMsg);
}
line.appendChild(user);
line.appendChild(document.createTextNode(' zmienia status strony na '));
var status = document.createElement('span');
status.style.fontStyle = 'italic';
status.appendChild(document.createTextNode(this.statuses[entry.level]));
line.appendChild(status);
message.appendChild(line);
}
mw.notify( message, { tag: 'ph_gadget' } );
}
}
};
jQuery(document).ready(function() {
proofreadHistoryGadget.init();
});