MediaWiki:Common.js: Unterschied zwischen den Versionen

Aus ISMS-Ratgeber WiKi
Zur Navigation springenZur Suche springen
KKeine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung
Markierung: Zurückgesetzt
Zeile 7: Zeile 7:
   if (!$target.length) return;
   if (!$target.length) return;


   // 1. Neue Seiten holen
   // 1. Neue Seiten holen und Dubletten filtern
   new mw.Api().get({
   new mw.Api().get({
     action: 'query',
     action: 'query',
Zeile 14: Zeile 14:
     rcshow: 'new',
     rcshow: 'new',
     rcnamespace: 0,
     rcnamespace: 0,
     rclimit: 10,
     rclimit: 50, // Höheres Limit für Dublettenfilterung
     format: 'json'
     format: 'json'
   }).done(function(data) {
   }).done(function(data) {
     var pages = data.query && data.query.recentchanges ? data.query.recentchanges : [];
     var pages = data.query?.recentchanges || [];
     if (!pages.length) {
    var uniquePages = {}; // Dublettenfilter
    var filteredPages = [];
 
    // 2. Einzigartige Seiten filtern
    pages.forEach(function(p) {
      if (!uniquePages[p.title] && !p.title.includes(':')) {
        uniquePages[p.title] = true;
        filteredPages.push(p);
        if (filteredPages.length >= 10) return; // Auf 10 begrenzen
      }
    });
 
     if (!filteredPages.length) {
       $target.html('Keine neuen Seiten gefunden.');
       $target.html('Keine neuen Seiten gefunden.');
       return;
       return;
     }
     }


     // 2. Für jede Seite SEO-Title holen (pageprops)
     // 3. SEO-Daten für gefilterte Seiten holen
     var titles = pages.map(function(p) { return p.title; }).join('|');
     var titles = filteredPages.map(p => p.title).join('|');
     new mw.Api().get({
     new mw.Api().get({
       action: 'query',
       action: 'query',
Zeile 32: Zeile 44:
     }).done(function(seoData) {
     }).done(function(seoData) {
       var seoProps = {};
       var seoProps = {};
       if (seoData.query && seoData.query.pages) {
       Object.values(seoData.query?.pages || {}).forEach(function(page) {
        Object.values(seoData.query.pages).forEach(function(page) {
        seoProps[page.title] = page.pageprops?.wikiseo_title || page.pageprops?.seo_title;
          if (page.pageprops && (page.pageprops.wikiseo_title || page.pageprops.seo_title)) {
      });
            seoProps[page.title] = page.pageprops.wikiseo_title || page.pageprops.seo_title;
          }
        });
      }


       // 3. Tabelle bauen
       // 4. Tabelle generieren
       var table = '<table class="wikitable"><tr><th>Seitenname</th><th>Erstellungsdatum</th><th>SEO-Titel</th></tr>';
       var table = '<table class="wikitable"><tr><th>Seitenname</th><th>Erstellt am</th><th>SEO-Titel</th></tr>';
       pages.forEach(function(p) {
       filteredPages.forEach(function(p) {
         var link = '<a href="' + mw.util.getUrl(p.title) + '">' + mw.html.escape(p.title) + '</a>';
         var link = '<a href="' + mw.util.getUrl(p.title) + '">' + mw.html.escape(p.title) + '</a>';
         var date = new Date(p.timestamp).toLocaleDateString('de-DE');
         var date = new Date(p.timestamp).toLocaleDateString('de-DE', {day: '2-digit', month: '2-digit', year: 'numeric'});
         var seo = seoProps[p.title] ? mw.html.escape(seoProps[p.title]) : '–';
         var seo = seoProps[p.title] ? mw.html.escape(seoProps[p.title]) : '–';
         table += '<tr><td>' + link + '</td><td>' + date + '</td><td>' + seo + '</td></tr>';
         table += `<tr><td>${link}</td><td>${date}</td><td>${seo}</td></tr>`;
       });
       });
       table += '</table>';
       $target.html(table + '</table>');
      $target.html(table);
     }).fail(() => $target.html('Fehler bei SEO-Daten'));
     }).fail(function() {
   }).fail(() => $target.html('Fehler beim Laden'));
      $target.html('Fehler beim Laden der SEO-Daten.');
    });
   }).fail(function() {
    $target.html('Fehler beim Laden der neuen Seiten.');
  });
});
});

Version vom 13. Mai 2025, 07:03 Uhr

/* Das folgende JavaScript wird für alle Benutzer geladen. */

// Top 10 zuletzt geänderte Seiten:

$(function() {
  var $target = $('#seo-pages-table');
  if (!$target.length) return;

  // 1. Neue Seiten holen und Dubletten filtern
  new mw.Api().get({
    action: 'query',
    list: 'recentchanges',
    rcprop: 'title|timestamp',
    rcshow: 'new',
    rcnamespace: 0,
    rclimit: 50, // Höheres Limit für Dublettenfilterung
    format: 'json'
  }).done(function(data) {
    var pages = data.query?.recentchanges || [];
    var uniquePages = {}; // Dublettenfilter
    var filteredPages = [];

    // 2. Einzigartige Seiten filtern
    pages.forEach(function(p) {
      if (!uniquePages[p.title] && !p.title.includes(':')) {
        uniquePages[p.title] = true;
        filteredPages.push(p);
        if (filteredPages.length >= 10) return; // Auf 10 begrenzen
      }
    });

    if (!filteredPages.length) {
      $target.html('Keine neuen Seiten gefunden.');
      return;
    }

    // 3. SEO-Daten für gefilterte Seiten holen
    var titles = filteredPages.map(p => p.title).join('|');
    new mw.Api().get({
      action: 'query',
      prop: 'pageprops',
      titles: titles,
      format: 'json'
    }).done(function(seoData) {
      var seoProps = {};
      Object.values(seoData.query?.pages || {}).forEach(function(page) {
        seoProps[page.title] = page.pageprops?.wikiseo_title || page.pageprops?.seo_title;
      });

      // 4. Tabelle generieren
      var table = '<table class="wikitable"><tr><th>Seitenname</th><th>Erstellt am</th><th>SEO-Titel</th></tr>';
      filteredPages.forEach(function(p) {
        var link = '<a href="' + mw.util.getUrl(p.title) + '">' + mw.html.escape(p.title) + '</a>';
        var date = new Date(p.timestamp).toLocaleDateString('de-DE', {day: '2-digit', month: '2-digit', year: 'numeric'});
        var seo = seoProps[p.title] ? mw.html.escape(seoProps[p.title]) : '–';
        table += `<tr><td>${link}</td><td>${date}</td><td>${seo}</td></tr>`;
      });
      $target.html(table + '</table>');
    }).fail(() => $target.html('Fehler bei SEO-Daten'));
  }).fail(() => $target.html('Fehler beim Laden'));
});