Wikiskryba:Saper/Gadget-proofread-history.js: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
kopia |
(Brak różnic)
|
Wersja z 17:01, 27 maj 2015
window.proofreadHistoryGadget = {
version: 4,
tabCaption: "Historia korekty",
errorMessage: "Nie udało się pobrać historii",
statuses: [
'bez tekstu',
'nieskorygowana',
'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 link = document.createElement("a");
link.appendChild(document.createTextNode(this.tabCaption));
var span = document.createElement("span");
span.appendChild(link);
var li = document.createElement("li");
li.appendChild(span);
li.setAttribute('id', 'ca-proofread-history');
var historyLink = document.getElementById("ca-history");
historyLink.parentNode.insertBefore(li, historyLink);
link.href = '#';
var that = this;
link.onclick = function() {
// FIXME
if (that.state == 'hidden' || that.state == 'visible') {
that.fetchHistory();
} /* else if (that.state == 'visible') {
that.hideHistory();
} */
};
},
fetchHistory: function() {
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;
this.history.unshift({
level: level,
user: revision.user,
timestamp: revision.timestamp
});
}
}
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) {
jsMsg(this.errorMessage);
} 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 = document.createElement('a');
user.href = mw.util.wikiGetlink("User:" + entry.user);
user.appendChild(document.createTextNode(entry.user));
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);
}
jsMsg(message);
}
},
hideHistory: function() {
this.state = 'hidden';
jsMsg('');
}
};
jQuery(document).ready(function() {
proofreadHistoryGadget.init();
});