Widget:Autorenbox: Unterschied zwischen den Versionen
Aus ZUM-Unterrichten
KKeine Bearbeitungszusammenfassung Markierung: 2017-Quelltext-Bearbeitung |
KKeine Bearbeitungszusammenfassung Markierung: 2017-Quelltext-Bearbeitung |
||
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 13: | Zeile 13: | ||
window.RLQ.push(function(){ | window.RLQ.push(function(){ | ||
mw.loader.enqueue(['mediawiki.api'], function(){ | mw.loader.enqueue(['mediawiki.api'], function(){ | ||
const userlistEl = $(element). | const getCurrentTitle = () => mw.Title.makeTitle( | ||
const lastModifiedEl = $(element). | mw.config.get('wgNamespaceNumber'), | ||
mw.config.get('wgTitle') | |||
).getPrefixedText() | |||
; | |||
const userlistEl = $(element).find('[data-zum-hook="userlist"]'); | |||
const lastModifiedEl = $(element).find('[data-zum-hook="last-modified"]'); | |||
const api = new mw.Api(); | const api = new mw.Api(); | ||
const response = api.get({ | const response = api.get({ | ||
Zeile 20: | Zeile 25: | ||
indexpageids: 1, | indexpageids: 1, | ||
prop:['revisions', 'contributors', 'info'], | prop:['revisions', 'contributors', 'info'], | ||
titles: | titles:"<!--{$artikel|escape:'javascript'}-->"||getCurrentTitle(), | ||
rvlimit:1000 | rvlimit:1000 | ||
}); | }); | ||
Zeile 36: | Zeile 41: | ||
let userChanges = pageData | let userChanges = pageData | ||
.contributors | .contributors | ||
.reduce((acc, c)=>acc[c] = {count:0, last:0}, {}); | .reduce((acc, c)=> {acc[c.name] = {count:0, last:0, id:c.id}; return acc;}, {}); | ||
userChanges = pageData.revisions.reduce((acc, r) => { | userChanges = pageData.revisions.reduce((acc, r) => { | ||
acc[r.user] = acc[r.user] || {count:0, last:0}; | acc[r.user] = acc[r.user] || {count:0, last:0}; | ||
Zeile 43: | Zeile 48: | ||
return acc; | return acc; | ||
}, userChanges); | }, userChanges); | ||
const | const usernames = Object.keys(userChanges).sort((a,b) => { | ||
let diff = userChanges[b].count - userChanges[a].count; | let diff = userChanges[b].count - userChanges[a].count; | ||
if(diff !== 0){ | if(diff !== 0){ | ||
Zeile 49: | Zeile 54: | ||
} | } | ||
return userChanges[b].last - userChanges[a].last; | return userChanges[b].last - userChanges[a].last; | ||
}); | }) | ||
const userdatas = usernames.map((user) => api | |||
.parse(`{{#:avatar|${user}|l}}`) | |||
.then((imgTag) => $(imgTag)) | |||
.then((img$) => img$.find('img').andSelf().filter('img').attr('src')) | |||
.then((imgSrc) => {user, imgSrc}) | |||
.fail((ignored)=> null)) | |||
); | |||
}); | $.when(...userdatas) | ||
.then((...userdatas) => userdatas.filter((ud) => ud !== null) | |||
.then((userdatas) => { | |||
userdatas.forEach(({user, imgSrc}) => { | |||
$('<img>') | |||
.attr('src', imgSrc) | |||
.wrap('<a>').attr('href', mw.Title.makeTitle(mw.config.get('wgNamespaceIds')['benutzer'], user).getUrl()) | |||
.wrap('<div class="uk-border-circle uk-text-center" style="overflow:hidden;width:60%;margin:auto;">') | |||
.wrap('<div class="uk-panel uk-panel-border uk-text-small" style="max-width:12h">') | |||
.appendTo($(userlistEl)); | |||
}); | |||
}) | |||
.then((ignored) => $(element).removeClass('uk-hidden')); | |||
});//end response.then | |||
});//end loader.enqueue | |||
});//end RLQ.push | |||
}//end if | |||
})(); | })(); | ||
</script> | </script> | ||
</includeonly> | </includeonly> |