Main Page: Difference between revisions

Make main page people slider load reliably
Fix people slider count
Line 1,270: Line 1,270:


var fallbackImage = "/wiki/Special:Redirect/file/Vu-logo.png";
var fallbackImage = "/wiki/Special:Redirect/file/Vu-logo.png";
var cacheKey = "vu-main-people-slides-v7";
var cacheKey = "vu-main-people-slides-v8";
var cacheLifetime = 6 * 60 * 60 * 1000;
var cacheLifetime = 6 * 60 * 60 * 1000;
var slideInterval = 9000;
var slideInterval = 9000;
Line 1,589: Line 1,589:
}
}


function loadPeoplePages(params, collectedPages) {
function loadCategoryMembers(params, collectedPages) {
return requestJson(params).then(function (data) {
return requestJson(params).then(function (data) {
var nextPages =
var nextPages =
data &&
data &&
data.query &&
data.query &&
Array.isArray(data.query.pages)
Array.isArray(data.query.categorymembers)
? data.query.pages
? data.query.categorymembers
: [];
: [];
var allPages = collectedPages.concat(nextPages);
var allPages = collectedPages.concat(nextPages);
Line 1,607: Line 1,607:


showStatus("Loading people... " + String(allPages.length));
showStatus("Loading people... " + String(allPages.length));
return loadPeoplePages(nextParams, allPages);
return loadCategoryMembers(nextParams, allPages);
}
}


return allPages;
return allPages;
});
});
}
function uniqueTitles(items) {
var seen = {};
var titles = [];
items.forEach(function (item) {
if (!item || !item.title || seen[item.title]) {
return;
}
seen[item.title] = true;
titles.push(item.title);
});
return titles;
}
function loadPageDetails(titles) {
var groups = [];
for (var index = 0; index < titles.length; index += 50) {
groups.push(titles.slice(index, index + 50));
}
return groups
.reduce(function (chain, group) {
return chain.then(function (pages) {
return requestJson({
action: "query",
titles: group.join("|"),
prop: "extracts|pageimages|info",
exintro: 1,
explaintext: 1,
exchars: 700,
piprop: "thumbnail|original",
pithumbsize: 1000,
inprop: "url",
redirects: 1,
formatversion: 2,
format: "json"
}).then(function (data) {
var nextPages =
data &&
data.query &&
Array.isArray(data.query.pages)
? data.query.pages
: [];
showStatus(
"Loading details... " +
String(pages.length + nextPages.length) +
" / " +
String(titles.length)
);
return pages.concat(nextPages);
});
});
}, Promise.resolve([]));
}
}


Line 1,626: Line 1,685:


showStatus("Loading people...");
showStatus("Loading people...");
loadPeoplePages(
loadCategoryMembers(
{
{
action: "query",
action: "query",
generator: "categorymembers",
list: "categorymembers",
gcmtitle: "Category:People",
cmtitle: "Category:People",
gcmnamespace: 0,
cmnamespace: 0,
gcmtype: "page",
cmtype: "page",
gcmlimit: "max",
cmlimit: "max",
prop: "extracts|pageimages|info",
exintro: 1,
explaintext: 1,
exchars: 700,
piprop: "thumbnail|original",
pithumbsize: 1000,
inprop: "url",
redirects: 1,
formatversion: 2,
formatversion: 2,
format: "json"
format: "json"
Line 1,647: Line 1,698:
[]
[]
)
)
.then(function (members) {
var titles = uniqueTitles(members);
showStatus("Loading details... 0 / " + String(titles.length));
return loadPageDetails(titles);
})
.then(function (pages) {
.then(function (pages) {
var loadedPeople = normalizePages(pages);
var loadedPeople = normalizePages(pages);