MediaWiki:Common.js: Unterschied zwischen den Versionen

Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 664: Zeile 664:


   /* ========== Kategorien rekursiv einsammeln (inkl. Subkats, Namespaces) ========== */
   /* ========== Kategorien rekursiv einsammeln (inkl. Subkats, Namespaces) ========== */
  // NIMMT nsStr (z. B. "*", "0|102|14") – zählt alle Nicht-Kategorie-Seiten
// NIMMT nsStr (z. B. "*", "0|102|14"). Bei "*" wird cmnamespace NICHT gesetzt.
  function fetchCategoryMembersRecursiveSingleResolved(api, catTitle, limit, outSet, pages, nsStr){
function fetchCategoryMembersRecursiveSingleResolved(api, catTitle, limit, outSet, pages, nsStr){
    var visited = {}, queue = [catTitle];
  var visited = {}, queue = [catTitle];
    var cmNS = (nsStr && nsStr.trim()) ? nsStr.trim() : '0|14';
  var cmNS = (nsStr && nsStr.trim()) ? nsStr.trim() : '0|14'; // default: Artikel+Kategorie


    function fetchOne(title, cont){
  function fetchOne(title, cont){
      var params = {
    var params = {
        action:'query', list:'categorymembers', cmtitle:title,
      action: 'query',
        cmnamespace: cmNS, cmtype:'page|subcat', cmlimit: Math.min(200, limit),
      list: 'categorymembers',
        format:'json'
      cmtitle: title,
      };
      // cmnamespace nur setzen, wenn NICHT "*"
       if (cont) params.cmcontinue = cont;
      cmtype: 'page|subcat',
      cmlimit: Math.min(200, limit),
      format: 'json'
    };
    if (cmNS !== '*' && cmNS !== '') {
       params.cmnamespace = cmNS; // z.B. "0|102|14"
    }
    if (cont) params.cmcontinue = cont;


      return api.get(params).then(function(d){
    return api.get(params).then(function(d){
        var cms = (d.query && d.query.categorymembers) || [], i, it;
      var cms = (d.query && d.query.categorymembers) || [], i, it;
        for (i=0;i<cms.length;i++){
      for (i = 0; i < cms.length; i++) {
          it = cms[i];
        it = cms[i];
          if (it.ns !== 14) { // alles außer Kategorien ist eine Seite für uns
        if (it.ns !== 14) { // alles außer Kategorien zählt als Seite
            var pid = String(it.pageid);
          var pid = String(it.pageid);
            if (!outSet[pid] && pages.length < limit) { outSet[pid]=1; pages.push({ pageid:pid, title:it.title }); }
          if (!outSet[pid] && pages.length < limit) {
          } else {
            outSet[pid] = 1;
            var sub = it.title;
            pages.push({ pageid: pid, title: it.title });
            if (!visited[sub]) { visited[sub]=1; queue.push(sub); }
           }
           }
        } else {
          var sub = it.title;
          if (!visited[sub]) { visited[sub] = 1; queue.push(sub); }
         }
         }
        var next = d.continue && d.continue.cmcontinue;
      }
        if (next && pages.length < limit) return fetchOne(title, next);
      var next = d.continue && d.continue.cmcontinue;
      });
      if (next && pages.length < limit) return fetchOne(title, next);
    }
    });
  }


    function loop(){
  function loop(){
      if (pages.length >= limit || !queue.length) return Promise.resolve();
    if (pages.length >= limit || !queue.length) return Promise.resolve();
      var next = queue.shift();
    var next = queue.shift();
      if (visited[next]) return loop();
    if (visited[next]) return loop();
      visited[next] = 1;
    visited[next] = 1;
      return fetchOne(next).then(loop);
    return fetchOne(next).then(loop);
    }
  }


    return loop();
  return loop();
  }
}


   function fetchCategoryMembersRecursiveMulti(rootCats, limit, status, nsStr){
   function fetchCategoryMembersRecursiveMulti(rootCats, limit, status, nsStr){