Widget:Autorenbox: Unterschied zwischen den Versionen
Aus ZUM-Unterrichten
KKeine Bearbeitungszusammenfassung Markierung: 2017-Quelltext-Bearbeitung |
KKeine Bearbeitungszusammenfassung Markierung: 2017-Quelltext-Bearbeitung |
||
Zeile 26: | Zeile 26: | ||
const query = paramKategorie ? { | const query = paramKategorie ? { | ||
action:'query', | action:'query', | ||
prop:['contributors', 'info'], | |||
prop:[ | |||
generator: 'categorymembers', | generator: 'categorymembers', | ||
gcmtitle: `Kategorie:${paramKategorie}`, | gcmtitle: `Kategorie:${paramKategorie}`, | ||
gcmnamespace:0, | gcmnamespace:0, | ||
gcmtype: 'page', | gcmtype: 'page', | ||
gcmlimit: | gcmlimit: 'max' | ||
} : { | } : { | ||
action:'query', | action:'query', | ||
prop:['revisions', 'contributors', 'info'], | prop:['revisions', 'contributors', 'info'], | ||
titles: paramArtikel || getCurrentTitle(), | titles: paramArtikel || getCurrentTitle(), | ||
rvlimit: | rvprop:['userid', 'user', 'flags', 'timestamp'], | ||
rvlimit:150 | |||
}; | }; | ||
const response = jQuery.Deferred(); | |||
function continueQueryOrResolve(pages, query, lastContinue){ | |||
const response = api.get(query) | api.get({...query, ...lastContinue}) | ||
.then((response) => { | |||
const newResult = response.query.pages.reduce((pages, page) => { | |||
pages[page.pageid] = {...pages[page.pageid], ...page}; | |||
return acc; | |||
}, pages); | |||
if (response.continue !== undefined) { | |||
continueOrResolve(newResult, query, response.continue); | |||
const userCounts = | } else if (response.batchcomplete !== undefined) { | ||
response.resolve(newResult); | |||
} | |||
}); | |||
} | |||
acc. | response.then((pages) => { | ||
const userCounts = pages.reduce((acc, pageData) => { | |||
acc = pageData | acc.touched = Math.max(acc.touched||-1, Date.parse(pageData.touched)); | ||
acc.userChanges = (pageData.contributors||[]) | |||
.reduce((userChanges, c)=> { | |||
.reduce(( | userChanges[c.userid] = userChanges[c.userid] || {count:0, last:-1, userid: c.userid, username: c.name}; | ||
acc = pageData.revisions.reduce(( | userChanges[c.userid].count += 1; | ||
return userChanges; | |||
}, acc.userChanges||{}); | |||
acc.userChanges = (pageData.revisions||[]) | |||
.reduce((userChanges, r) => { | |||
}, acc); | userChanges[r.userid] = userChanges[r.userid] || {count:0, last:-1, userid: r.userid, username: r.user}; | ||
userChanges[r.userid].count += r.minor !== undefined ? 0.1 : 1; | |||
userChanges[r.userid].last = Math.max(userChanges[r.userid].last, r.revid); | |||
return userChanges; | |||
}, acc.userChanges||{}); | |||
return acc; | return acc; | ||
}, | }, {}); | ||
const usernames = Object. | const usernames = Object.values(userCounts.userChanges).sort((a,b) => { | ||
let diff = | let diff = b.count - a.count; | ||
if(diff !== 0){ | if(diff !== 0){ | ||
return diff; | return diff; | ||
} | } | ||
return | return b.last - a.last; | ||
}) | }).map((user) => user.username); | ||
$(lastModifiedEl).append(new Date(userCounts. | $(lastModifiedEl).append(new Date(userCounts.touched).toLocaleDateString()); | ||
const userdatas = usernames.map((user) => api | const userdatas = usernames.map((user) => api | ||
.parse(`{{#avatar:${user}|l}}`) | .parse(`{{#avatar:${user}|l}}`) |