User:Rillke/logo 2013 voy review.js
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
var txts = [],
revChache = [],
imgs,
processImage,
nextImage;
function firstItem(o) { for (var i in o) { if (o.hasOwnProperty(i)) { return o[i]; } } }
var query = function(qc) {
// First, load the whole revision history into the chache
$.get('//meta.wikimedia.org/w/api.php', {
format: 'json',
action: 'query',
rawcontinue: '',
prop: 'revisions',
rvdir: 'newer',
rvprop: 'content|user|ids',
rvcontinue: qc,
titles: 'Wikivoyage/Logo 2013/Submissions',
rvlimit: 20
}, function(r) {
revChache = revChache.concat(firstItem(r.query.pages).revisions);
if (r['query-continue']) {
// This is not the clean way but here I do not have libAPI from Commons, which has auto-query :-(
query(r['query-continue'].revisions.rvcontinue);
} else {
nextImage();
}
});
};
query();
processImage = function(f, i) {
console.log('Doing' + f, i);
var host = 'commons';
var onDone = function(r) {
console.log(r);
if (!firstItem(r.query.pages).revisions) {
if (host === 'meta') {
console.log('Skipping ' + f)
nextImage();
}
host = 'meta';
doAJAX();
}
var pg = firstItem(r.query.pages),
rv = pg.revisions[0],
ii = pg.imageinfo,
am = rv['*'].match(/\\s*|\s*[Aa]uthor\s*\=\s*(.+?)\s*\n/),
author = (am ? am[1] : '') || "''unknown''",
uploaders = [];
$.each(ii, function(c, iii) {
if ($.inArray(iii.user,uploaders) < 0) uploaders.push(iii.user);
});
var re = new RegExp($.escapeRE(f).replace(/ /g, '[_ ]'), '');
var added;
var addItem = function(diff, rvuser) {
added = true;
txts.push('\n| ' + i + '\n| ' + '[[File:' + f + '|120x120px|' + f + ']]' + '<br /><code>File:' + f + '</code>' +
'\n| ' + '{{user|' + uploaders.join('}}, {{user|') + '}}' + '\n| ' + author + '\n| ' +
(diff ? '[//meta.wikimedia.org/w/index.php?diff=' + diff + ' ' + rvuser + ']' : '' )+ '\n| ');
};
// Now, digg through the history
$.each(revChache, function(r, rv) {
if ( re.test( rv['*'] )) {
addItem(rv.revid, rv.user);
return false;
}
});
if (!added) addItem();
nextImage();
};
var doAJAX = function() {
$.ajax({
url: '//' + host + '.wikimedia.org/w/api.php',
dataType: 'jsonp',
data: {
'format': 'json',
'action': 'query',
'prop': 'info|imageinfo|revisions',
'rvprop': 'content',
'iilimit': 100,
'titles': 'File:' + f
}
}).done(onDone);
};
doAJAX();
};
imgs = $('li.gallerybox').map(function(i, el) {
var $el = $(el),
$img = $el.find('img'),
src = $img.attr('src'),
m = src.match(/(?:thumb\/[0-9a-f]\/[0-9a-f]{2}\/(.+)\/|\/[0-9a-f]\/[0-9a-f]{2}\/(.+))/);
return decodeURI(( m[1] || m[2] ).replace(/_/g, ' '));
});
imgs = $.makeArray(imgs);
var origLen = imgs.length;
nextImage = function() {
if (imgs.length) {
processImage(imgs.shift(), origLen - imgs.length);
} else {
finish();
}
};
var finish=function() {
$('<pre>').appendTo('body').text(txts.join('\n|-\n'));
}