recentchanges
This commit is contained in:
@@ -1,7 +1,5 @@
|
||||
import { selectAll, select } from 'd3-selection';
|
||||
|
||||
/*
|
||||
|
||||
Uses the Mediawiki API to display a list of recent images and a link to
|
||||
the page where the image has been used/placed.
|
||||
|
||||
@@ -10,9 +8,11 @@ Makes use of the following API calls:
|
||||
* https://www.mediawiki.org/wiki/API:Allimages
|
||||
* https://www.mediawiki.org/wiki/API:Imageinfo
|
||||
* https://www.mediawiki.org/wiki/API:Imageusage
|
||||
|
||||
*/
|
||||
var NUM_FILES = 10; /* how many files to show */
|
||||
var main = select("#content"),
|
||||
baseurl = "/mw/api.php?action=query&list=allimages&ailimit=1&format=json&formatversion=2&aisort=timestamp&aidir=older&aiprop=timestamp|user|url|mime|size",
|
||||
url = baseurl;
|
||||
|
||||
async function get_json (url) {
|
||||
var resp = await fetch(url);
|
||||
@@ -24,44 +24,29 @@ function url_for_title (title) {
|
||||
}
|
||||
|
||||
async function load () {
|
||||
var main = select("#content"),
|
||||
baseurl = "/mw/api.php?action=query&list=allimages&ailimit=1&format=json&formatversion=2&aisort=timestamp&aidir=older&aiprop=timestamp|user|url|mime|size",
|
||||
url = baseurl,
|
||||
count = 0;
|
||||
let debugloopcount = 0;
|
||||
let count = 0;
|
||||
while (count < NUM_FILES) {
|
||||
// console.log("starting loop", debugloopcount, "count", count, "url", url);
|
||||
let resp = await fetch(url),
|
||||
data = await resp.json(),
|
||||
// console.log("starting loop", "count", count, "url", url);
|
||||
let data = await get_json(url),
|
||||
allimages = data.query.allimages,
|
||||
useimages = [];
|
||||
|
||||
// console.log("got data", data.query.allimages.length);
|
||||
// For each image:
|
||||
// Use API:Imageinfo request/get the URL to a thumbnail image
|
||||
//
|
||||
for (var i=0, l=allimages.length; i<l; i++) {
|
||||
let image = allimages[i];
|
||||
// console.log("image", image.name);
|
||||
let iu_data = await get_json(`/mw/api.php?action=query&list=imageusage&iutitle=${image.title}&iunamespace=0&format=json&formatversion=2`);
|
||||
|
||||
image.imageusage = iu_data.query.imageusage;
|
||||
if (image.imageusage.length == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let ii_data = await get_json(`/mw/api.php?action=query&prop=imageinfo&titles=${image.title}&iiprop=url|size&dimensions|mime&iiurlwidth=320&format=json&formatversion=2`);
|
||||
image.imageinfo = ii_data.query.pages[0].imageinfo[0];
|
||||
if (!image.imageinfo.thumburl) {
|
||||
continue;
|
||||
}
|
||||
|
||||
useimages.push(image);
|
||||
// console.log("imageusage", image.name, image.imageusage.length);
|
||||
// console.log("imageinfo", image.name, image.imageinfo);
|
||||
}
|
||||
|
||||
// console.log("allimages", allimages);
|
||||
// allimages = allimages.filter(d=>d.imageinfo.thumburl && (d.imageusage.length > 0));
|
||||
let items = main.selectAll("div.file")
|
||||
.data(useimages, d=>d.title)
|
||||
.enter()
|
||||
@@ -73,15 +58,14 @@ async function load () {
|
||||
.append("img")
|
||||
.attr('src', d=>d.imageinfo.thumburl);
|
||||
|
||||
count += useimages.length;
|
||||
if (data.continue) {
|
||||
url = baseurl+"&aicontinue="+data.continue.aicontinue;
|
||||
}
|
||||
debugloopcount += 1;
|
||||
// if (debugloopcount >= 5) break;
|
||||
count += useimages.length;
|
||||
}
|
||||
|
||||
}
|
||||
document.addEventListener("DOMContentLoaded", load);
|
||||
|
||||
|
||||
document.querySelector("a#more").addEventListener("click", function (e) {
|
||||
e.preventDefault();
|
||||
load();
|
||||
});
|
||||
Reference in New Issue
Block a user