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- | 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 | 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. | Array.isArray(data.query.categorymembers) | ||
? data.query. | ? 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 | 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..."); | ||
loadCategoryMembers( | |||
{ | { | ||
action: "query", | action: "query", | ||
list: "categorymembers", | |||
cmtitle: "Category:People", | |||
cmnamespace: 0, | |||
cmtype: "page", | |||
cmlimit: "max", | |||
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); | ||