MediaWiki:Common.js: Difference between revisions

No edit summary
No edit summary
Line 511: Line 511:
         if(i>=ids.length) return Promise.resolve();
         if(i>=ids.length) return Promise.resolve();
         var chunk=ids.slice(i,i+8).join('|');
         var chunk=ids.slice(i,i+8).join('|');
         return apiFetch('/api.php?action=query&pageids='+chunk+'&prop=extracts|linkshere&exchars=8000&explaintext=1&exsectionformat=plain&lhnamespace=0&lhlimit=max&format=json').then(function(d){
         return apiFetch('/api.php?action=query&pageids='+chunk+'&prop=revisions|linkshere&rvprop=content&rvslots=main&lhnamespace=0&lhlimit=max&format=json').then(function(d){
           if(!d||!d.query||!d.query.pages){return fetchContentChunk(i+8);}
           if(!d||!d.query||!d.query.pages){return fetchContentChunk(i+8);}
           Object.keys(d.query.pages).forEach(function(pid){
           Object.keys(d.query.pages).forEach(function(pid){
Line 517: Line 517:
             map[pid].links=(pg.linkshere||[]).length;
             map[pid].links=(pg.linkshere||[]).length;
             if(!pg.revisions||!pg.revisions[0])return;
             if(!pg.revisions||!pg.revisions[0])return;
             var c=pg.extract||'';
            if(!pg.revisions||!pg.revisions[0])return;
            var slot=pg.revisions[0].slots?pg.revisions[0].slots.main:pg.revisions[0];
            var raw=slot['*']||slot.content||'';
            // Remove template names but keep parameter text
             var c=raw.replace(/\{\{[A-Za-z][^|\}]*\|?/g,'').replace(/\}\}/g,' ');
            c=c.replace(/\[\[File:[^\]]+\]\]/gi,' ');
            c=c.replace(/\[\[(?:[^\]|]+\|)?([^\]]+)\]\]/g,'$1');
            c=c.replace(/<[^>]+>/g,' ').replace(/<!--[^>]*-->/g,' ');
            c=c.replace(/={2,}[^=]+=={2,}/g,' ');
            c=c.replace(/[|!=*#;:{}\/\[\]]/g,' ');
             c=c.replace(/\s+/g,' ').trim();
             c=c.replace(/\s+/g,' ').trim();
             map[pid].words=c?c.split(/\s+/).filter(function(w){return w.length>1;}).length:0;
             map[pid].words=c?c.split(/\s+/).filter(function(w){return w.length>2;}).length:0;
           });
           });
           return fetchContentChunk(i+8);
           return fetchContentChunk(i+8);