MediaWiki:Common.js: Unterschied zwischen den Versionen

Aus ISMS-Ratgeber WiKi
Zur Navigation springenZur Suche springen
KKeine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung
Zeile 4: Zeile 4:


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


   // 1. Neue Seiten über API abrufen
   // 1. Neue Seiten holen
   $.getJSON(mw.util.wikiScript('api'), {
   new mw.Api().get({
     action: 'query',
     action: 'query',
     list: 'recentchanges',
     list: 'recentchanges',
     rcprop: 'title|timestamp|ids',
     rcprop: 'title|timestamp',
     rctype: 'new',
     rcshow: 'new',
     rcnamespace: 0,
     rcnamespace: 0,
     rclimit: 10,
     rclimit: 10,
     format: 'json'
     format: 'json'
   }).done(async function(data) {
   }).done(function(data) {
     const pages = data.query.recentchanges;
     var pages = data.query && data.query.recentchanges ? data.query.recentchanges : [];
     let tableHTML = `
     if (!pages.length) {
      <table class="wikitable">
       $target.html('Keine neuen Seiten gefunden.');
        <tr>
       return;
          <th>Seitenname</th>
          <th>Erstellungsdatum</th>
          <th>SEO-Titel</th>
        </tr>
    `;
 
    // 2. Für jede Seite SEO-Metadaten abrufen
    for (const page of pages) {
       try {
        const seoData = await fetchSEOMetadata(page.title);
        const date = new Date(page.timestamp).toLocaleDateString('de-DE');
       
        tableHTML += `
          <tr>
            <td>${createPageLink(page.title)}</td>
            <td>${date}</td>
            <td>${seoData || '–'}</td>
          </tr>
        `;
       } catch (e) {
        console.error(`Fehler bei ${page.title}:`, e);
      }
     }
     }


     tableHTML += '</table>';
     // 2. Für jede Seite SEO-Title holen (pageprops)
    $target.html(tableHTML);
     var titles = pages.map(function(p) { return p.title; }).join('|');
  }).fail(function(err) {
     new mw.Api().get({
     $target.html(`<div class="error">Fehler: ${err.statusText}</div>`);
  });
 
  // Hilfsfunktionen
  function createPageLink(title) {
    return `<a href="${mw.util.getUrl(title)}">${mw.html.escape(title)}</a>`;
  }
 
  async function fetchSEOMetadata(title) {
     const response = await $.getJSON(mw.util.wikiScript('api'), {
       action: 'query',
       action: 'query',
       prop: 'pageprops',
       prop: 'pageprops',
       titles: title,
       titles: titles,
       format: 'json'
       format: 'json'
    }).done(function(seoData) {
      var seoProps = {};
      if (seoData.query && seoData.query.pages) {
        Object.values(seoData.query.pages).forEach(function(page) {
          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
      var table = '<table class="wikitable"><tr><th>Seitenname</th><th>Erstellungsdatum</th><th>SEO-Titel</th></tr>';
      pages.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');
        var seo = seoProps[p.title] ? mw.html.escape(seoProps[p.title]) : '–';
        table += '<tr><td>' + link + '</td><td>' + date + '</td><td>' + seo + '</td></tr>';
      });
      table += '</table>';
      $target.html(table);
    }).fail(function() {
      $target.html('Fehler beim Laden der SEO-Daten.');
     });
     });
   
  }).fail(function() {
    const page = response.query.pages[Object.keys(response.query.pages)[0]];
     $target.html('Fehler beim Laden der neuen Seiten.');
     return page.pageprops?.wikiseo_title || page.pageprops?.seo_title;
   });
   }
});
});

Version vom 13. Mai 2025, 07:01 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
  new mw.Api().get({
    action: 'query',
    list: 'recentchanges',
    rcprop: 'title|timestamp',
    rcshow: 'new',
    rcnamespace: 0,
    rclimit: 10,
    format: 'json'
  }).done(function(data) {
    var pages = data.query && data.query.recentchanges ? data.query.recentchanges : [];
    if (!pages.length) {
      $target.html('Keine neuen Seiten gefunden.');
      return;
    }

    // 2. Für jede Seite SEO-Title holen (pageprops)
    var titles = pages.map(function(p) { return p.title; }).join('|');
    new mw.Api().get({
      action: 'query',
      prop: 'pageprops',
      titles: titles,
      format: 'json'
    }).done(function(seoData) {
      var seoProps = {};
      if (seoData.query && seoData.query.pages) {
        Object.values(seoData.query.pages).forEach(function(page) {
          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
      var table = '<table class="wikitable"><tr><th>Seitenname</th><th>Erstellungsdatum</th><th>SEO-Titel</th></tr>';
      pages.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');
        var seo = seoProps[p.title] ? mw.html.escape(seoProps[p.title]) : '–';
        table += '<tr><td>' + link + '</td><td>' + date + '</td><td>' + seo + '</td></tr>';
      });
      table += '</table>';
      $target.html(table);
    }).fail(function() {
      $target.html('Fehler beim Laden der SEO-Daten.');
    });
  }).fail(function() {
    $target.html('Fehler beim Laden der neuen Seiten.');
  });
});