Kategorie:Seiten, die DynamicPageList3 parser function nutzen und Widget:Autorenbox: Unterschied zwischen den Seiten

Aus ZUM-Unterrichten
(Unterschied zwischen Seiten)
(Automatisch von der AutoCreateCategoryPages-Erweiterung erstellt.)
Markierung: 2017-Quelltext-Bearbeitung
 
KKeine Bearbeitungszusammenfassung
Markierung: 2017-Quelltext-Bearbeitung
 
Zeile 1: Zeile 1:
Dies ist eine Kategorieseite.
<includeonly>
Sie listet alle Seiten in der Kategorie „Seiten, die DynamicPageList3 parser function nutzen“ sowie alle Unterkategorien der Kategorie „Seiten, die DynamicPageList3 parser function nutzen“, sofern welche vorhanden sind.
<div class="autorenbox zum-hintergrund-links zum-farbe-xx-heller uk-hidden">
<h2>Autor*innen</h2>
<small class="autorenbox-updated" data-zum-hook="last-modified">aktualisiert am: </small>
<div class="autorenbox-autoren" data-zum-hook="userlist">
 
</div>
</div>
<script type="text/javascript">
(function () {
    const paramArtikel = "<!--{$artikel|escape:'javascript'}-->" || null;
    const paramKategorie = "<!--{$kategorie|escape:'javascript'}-->" || null;
    const paramMitUnterseiten = "<!--{$mit_unterseiten|escape:'javascript'}-->" === "ja";
    const element = document.currentScript && document.currentScript.previousElementSibling;
    if (element) {
        window.RLQ.push(function () {
            mw.loader.enqueue(['mediawiki.api'], function () {
                const getCurrentTitle = () => mw.Title.makeTitle(
                    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 queries = [];
                if (paramKategorie) {
                  queries.push({
                    action: 'query',
                    prop: ['contributors', 'info'],
                    generator: 'categorymembers',
                    gcmtitle: `Kategorie:${paramKategorie}`,
                    gcmnamespace: 0,
                    gcmtype: 'page',
                    gcmlimit: 'max'
                  });
                } else {
                  queries.push({
                    action: 'query',
                    prop: ['revisions', 'info', 'contributors'],
                    titles: paramArtikel || getCurrentTitle(),
                    rvlimit: 150,
                    rvprop: ['userid', 'user', 'flags', 'timestamp'],
                  });
                }
                if (paramMitUnterseiten){
                  queries.push({
                    action: 'query',
                    prop: ['contributors', 'info'],
                    generator: 'allpages',
                    gapprefix: (paramArtikel || getCurrentTitle()) + '/',
                    gaplimit:'max'
                  });
                }
                const response = $.Deferred();
                function continueQueryOrResolve(result, query, pages, lastContinue) {
                  api.get({...query, ...lastContinue})
                    .then((response) => {
                      const newPages = Object.values(response.query.pages).reduce((pages, page) => {
                        pages[page.pageid] = {...pages[page.pageid], ...page};
                        return pages;
                      }, pages);
                      if (response.continue !== undefined) {
                        continueQueryOrResolve(result, query, newPages, response.continue);
                      } else if (response.batchcomplete !== undefined) {
                        result.resolve(Object.values(newPages));
                      }
                    });
                }
                const def = $.Deferred();
                def.resolve([]);
                queries.reduce((result, query) => {
                  const newResult = $.Deferred();
                  continueQueryOrResolve(newResult, query, {}, null);
                  return newResult.then((b) => {
                    return result.then((a) => ([...a, ...b]));
                  });
                }, def.promise())
                .then((data) => { response.resolve(data);});
               
                response
                    .then((pages) => {
                        const userCounts = pages.reduce((acc, pageData) => {
                            acc.touched = Math.max(acc.touched || -1, Date.parse(pageData.touched));
                            acc.userChanges = (pageData.contributors || [])
                                .reduce((userChanges, c) => {
                                    userChanges[c.userid] = userChanges[c.userid] || {
                                        count: 0,
                                        last: -1,
                                        userid: c.userid,
                                        username: c.name
                                    };
                                    userChanges[c.userid].count += 1;
                                    return userChanges;
                                }, acc.userChanges || {});
                            acc.userChanges = (pageData.revisions || [])
                                .reduce((userChanges, r) => {
                                    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;
                        }, {});
                        const usernames = Object.values(userCounts.userChanges)
                          .filter((userChange) => userChange.username !== 'Christian')
                          .sort((a, b) => {
                            let diff = b.count - a.count;
                            if (diff !== 0) {
                                return diff;
                            }
                            return b.last - a.last;
                        }).map((user) => user.username);
                        $(lastModifiedEl).append(new Date(userCounts.touched).toLocaleDateString());
                        const userdatas = usernames.map((user) => api
                            .parse(`{{#avatar:${user}|l}}`)
                            .then((imgTag) => $(imgTag))
                            .then((img$) => img$.find('img').addBack('img').attr('src'))
                            .then((imgSrc) => ({user, imgSrc}))
                            .fail((ignored) => null)
                        );
                        $.when(...userdatas)
                            .then((...userdatas) => userdatas.filter((ud) => ud !== null))
                            .then((userdatas) => {
                                userdatas.map(({user, imgSrc}) => {
                                    const userTitle = mw.Title.makeTitle(mw.config.get('wgNamespaceIds')['benutzer'], user);
                                    if(userTitle === null){
                                      return null;
                                    }
                                    return $('<img>')
                                        .attr('src', imgSrc)
                                        .wrap('<a>')
                                        .parent()
                                        .attr('href', userTitle.getUrl())
                                        .wrap('<div class="autorenbox-avatar" style="overflow:hidden;width:60%;margin:auto;">')
                                        .parent()
                                        .wrap('<div class="autorenbox-container" style="max-width:12ch">')
                                        .parent()
                                        .append(
                                          $('<a>')
                                            .append(user)
                                            .attr('href', userTitle.getUrl())
                                            .wrap('<div class="autorenbox-name">')
                                            .parent()
                                        );
                                })
                                .filter((elem) => elem !== null)
                                .forEach((elem) => elem.appendTo($(userlistEl)));
                            })
                            .then((ignored) => $(element).removeClass('uk-hidden'));
                    });//end response.then
            });//end loader.enqueue
        });//end RLQ.push
    }//end if
})();
</script>
</includeonly>

Version vom 9. Februar 2024, 12:49 Uhr

Seiten in der Kategorie „Seiten, die DynamicPageList3 parser function nutzen“

Folgende 112 Seiten sind in dieser Kategorie, von 112 insgesamt.