Widget:Autorenbox: Unterschied zwischen den Versionen

Aus ZUM-Unterrichten
KKeine Bearbeitungszusammenfassung
Markierung: 2017-Quelltext-Bearbeitung
KKeine Bearbeitungszusammenfassung
 
(18 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
<includeonly>
<noinclude>Die Autorenbox verwendet Javascript auf der Seite über die MW-API um eine List der Autoren anzuzeigen.
<div class="uk-panel uk-panel-box uk-panel-box-primary zum-hintergrund-links zum-farbe-xx-heller uk-hidden">
 
<strong>Autoren</strong>
Die Autorenbox kann parameterisiert werden um Autoren des Artikels oder einer Kategorie anzuzeigen und ob Unterseiten berücksichtigt werden sollen.
<small class="uk-align-right" data-zum-hook="last-modified">aktualisiert am: </small>
 
<div class="uk-flex uk-flex-wrap uk-width-1-1" data-zum-hook="userlist">
;artikel
: Zeige Autoren des Artikels.
;kategorie
: Zeige Autoren von Artikeln dieser Kategorie.
;mit_unterseiten
: Wenn es auf 'ja' gesetzt ist werden auch Autoren von Unterseiten mit angezeigt.
 
 
Aktuell ist die Autorenbox deaktiviert. Da sie im Moment nicht korrekt angezeigt wird und das Seitenlayout zerstört aber auf vielen Seiten eingebunden ist.
 
</noinclude><includeonly>
<div class="autorenbox zum-hintergrund-links zum-farbe-xx-heller 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>
Zeile 11: Zeile 25:
     const paramArtikel = "<!--{$artikel|escape:'javascript'}-->" || null;
     const paramArtikel = "<!--{$artikel|escape:'javascript'}-->" || null;
     const paramKategorie = "<!--{$kategorie|escape:'javascript'}-->" || null;
     const paramKategorie = "<!--{$kategorie|escape:'javascript'}-->" || null;
    const paramMitUnterseiten = "<!--{$mit_unterseiten|escape:'javascript'}-->" === "ja";
     const element = document.currentScript && document.currentScript.previousElementSibling;
     const element = document.currentScript && document.currentScript.previousElementSibling;
     if (element) {
     if (element) {
Zeile 23: Zeile 38:
                 const lastModifiedEl = $(element).find('[data-zum-hook="last-modified"]');
                 const lastModifiedEl = $(element).find('[data-zum-hook="last-modified"]');
                 const api = new mw.Api();
                 const api = new mw.Api();
                 const query = paramKategorie ? {
                 const queries = [];
                if (paramKategorie) {
                  queries.push({
                     action: 'query',
                     action: 'query',
                     prop: ['contributors', 'info'],
                     prop: ['contributors', 'info'],
Zeile 31: Zeile 48:
                     gcmtype: 'page',
                     gcmtype: 'page',
                     gcmlimit: 'max'
                     gcmlimit: 'max'
                 } : {
                  });
                 } else {
                  queries.push({
                     action: 'query',
                     action: 'query',
                     prop: ['revisions', 'contributors', 'info'],
                     prop: ['revisions', 'info', 'contributors'],
                     titles: paramArtikel || getCurrentTitle(),
                     titles: paramArtikel || getCurrentTitle(),
                    rvlimit: 150,
                     rvprop: ['userid', 'user', 'flags', 'timestamp'],
                     rvprop: ['userid', 'user', 'flags', 'timestamp'],
                     rvlimit: 150
                  });
                 };
                }
                 const response = jQuery.Deferred();
                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) {
                 function continueQueryOrResolve(result, query, pages, lastContinue) {
                    api.get({...query, ...lastContinue})
                  api.get({...query, ...lastContinue})
                        .then((response) => {
                    .then((response) => {
                            const newPages = Object.values(response.query.pages).reduce((pages, page) => {
                      const newPages = Object.values(response.query.pages).reduce((pages, page) => {
                                pages[page.pageid] = {...pages[page.pageid], ...page};
                        pages[page.pageid] = {...pages[page.pageid], ...page};
                                return pages;
                        return pages;
                            }, pages);
                      }, pages);
                            if (response.continue !== undefined) {
                      if (response.continue !== undefined) {
                                continueQueryOrResolve(result, query, newPages, response.continue);
                        continueQueryOrResolve(result, query, newPages, response.continue);
                            } else if (response.batchcomplete !== undefined) {
                      } else if (response.batchcomplete !== undefined) {
                                result.resolve(newPages);
                        result.resolve(Object.values(newPages));
                            }
                      }
                        });
                    });
                 }
                 }
                 continueQueryOrResolve(response, query, {}, null);
                 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
                 response
                    .then((pages) => Object.values(pages))
                     .then((pages) => {
                     .then((pages) => {
                         const userCounts = pages.reduce((acc, pageData) => {
                         const userCounts = pages.reduce((acc, pageData) => {
Zeile 84: Zeile 122:
                             return acc;
                             return acc;
                         }, {});
                         }, {});
                         const usernames = Object.values(userCounts.userChanges).sort((a, b) => {
                         const usernames = Object.values(userCounts.userChanges)
                          .filter((userChange) => userChange.username !== 'Christian')
                          .sort((a, b) => {
                             let diff = b.count - a.count;
                             let diff = b.count - a.count;
                             if (diff !== 0) {
                             if (diff !== 0) {
Zeile 102: Zeile 142:
                             .then((...userdatas) => userdatas.filter((ud) => ud !== null))
                             .then((...userdatas) => userdatas.filter((ud) => ud !== null))
                             .then((userdatas) => {
                             .then((userdatas) => {
                                 userdatas.forEach(({user, imgSrc}) => {
                                 userdatas.map(({user, imgSrc}) => {
                                     $('<img>')
                                     const userTitle = mw.Title.makeTitle(mw.config.get('wgNamespaceIds')['benutzer'], user);
                                    if(userTitle === null){
                                      return null;
                                    }
                                    return $('<img>')
                                         .attr('src', imgSrc)
                                         .attr('src', imgSrc)
                                         .wrap('<a>')
                                         .wrap('<a>')
                                         .parent()
                                         .parent()
                                         .attr('href', mw.Title.makeTitle(mw.config.get('wgNamespaceIds')['benutzer'], user).getUrl())
                                         .attr('href', userTitle.getUrl())
                                         .wrap('<div class="uk-border-circle uk-text-center" style="overflow:hidden;width:60%;margin:auto;">')
                                         .wrap('<div class="autorenbox-avatar" style="overflow:hidden;width:60%;margin:auto;">')
                                         .parent()
                                         .parent()
                                         .wrap('<div class="uk-panel uk-panel-border uk-text-small" style="max-width:12ch">')
                                         .wrap('<div class="autorenbox-container" style="max-width:12ch">')
                                         .parent()
                                         .parent()
                                         .append($('<a>').append(user).attr('href', mw.Title.makeTitle(mw.config.get('wgNamespaceIds')['benutzer'], user).getUrl()).wrap('<div class="uk-text-center uk-text-truncate">').parent()).appendTo($(userlistEl));
                                         .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'));
                             .then((ignored) => $(element).removeClass('hidden'));
                     });//end response.then
                     });//end response.then
             });//end loader.enqueue
             });//end loader.enqueue

Aktuelle Version vom 13. Februar 2024, 15:59 Uhr

Die Autorenbox verwendet Javascript auf der Seite über die MW-API um eine List der Autoren anzuzeigen.

Die Autorenbox kann parameterisiert werden um Autoren des Artikels oder einer Kategorie anzuzeigen und ob Unterseiten berücksichtigt werden sollen.

artikel
Zeige Autoren des Artikels.
kategorie
Zeige Autoren von Artikeln dieser Kategorie.
mit_unterseiten
Wenn es auf 'ja' gesetzt ist werden auch Autoren von Unterseiten mit angezeigt.


Aktuell ist die Autorenbox deaktiviert. Da sie im Moment nicht korrekt angezeigt wird und das Seitenlayout zerstört aber auf vielen Seiten eingebunden ist.