MediaWiki:Common.js: Difference between revisions

No edit summary
Tag: Reverted
No edit summary
Tag: Reverted
Line 172: Line 172:


   loadRandom();
   loadRandom();
});
mw.loader.using(['mediawiki.api','mediawiki.util']).then(function () {
  var box = document.getElementById('random-teaser');
  if (!box) return;
  var api = new mw.Api();
  var THUMB = 280;
  function esc(s){ return mw.html.escape(String(s||'')); }
  function excerptFromHTML(html, maxChars){
    var d=document.createElement('div'); d.innerHTML=html;
    var p=d.querySelector('p'); var t=(p?p.innerText:d.innerText||'').replace(/\s+/g,' ').trim();
    if(t.length>maxChars) t=t.slice(0,maxChars).replace(/\s+\S*$/,'')+'…';
    return t||'No description available.';
  }
  function firstRaster(list){
    if(!Array.isArray(list)||!list.length) return null;
    return list.find(function(t){return /\.(jpe?g|png|gif|webp)$/i.test(t||'');}) || list[0];
  }
  function thumbUrl(fileTitle){
    if(!fileTitle) return Promise.resolve(null);
    return api.get({
      action:'query',formatversion:2,titles:fileTitle,
      prop:'imageinfo',iiprop:'url',iiurlwidth:THUMB
    }).then(function(r){
      var p=r.query&&r.query.pages&&r.query.pages[0];
      var ii=p&&p.imageinfo&&p.imageinfo[0];
      return (ii&&(ii.thumburl||ii.url))||null;
    }).catch(function(){return null;});
  }
  function render(title,text,img){
    var url=mw.util.getUrl(title);
    box.innerHTML=
      '<div class="thumb">'+(img?'<img src="'+esc(img)+'" alt="">':'<span>🡲</span>')+'</div>'+
      '<div class="content">'+
        '<h3><a href="'+url+'">'+esc(title)+'</a></h3>'+
        '<p>'+esc(text)+'</p>'+
        '<div class="actions">'+
          '<a class="btn" href="'+url+'">Open</a>'+
          '<button type="button" class="btn" id="rand-refresh">Another</button>'+
          '<a class="btn" href="'+mw.util.getUrl("Special:Random")+'">Special:Random</a>'+
        '</div>'+
      '</div>';
    box.classList.remove('loading');
    var btn=document.getElementById('rand-refresh');
    if(btn) btn.addEventListener('click',function(){ box.classList.add('loading'); load(); });
  }
  function load(){
    // 1) vezmi náhodnú stránku (id + title)
    api.get({ action:'query', formatversion:2, list:'random', rnnamespace:0, rnlimit:1 })
      .then(function(r){
        var it=r && r.query && r.query.random && r.query.random[0];
        if(!it) throw new Error('no random page');
        var pageid=it.id;          // <— použijeme pageid, nie title
        var title=it.title;
        // 2) parse cez pageid (vyhne sa missingtitle)
        return api.get({
          action:'parse', pageid:pageid, prop:'text|images', redirects:1
        }).then(function(p){
          var html=p.parse && p.parse.text && p.parse.text['*'] || '';
          var images=p.parse && p.parse.images || [];
          var text=excerptFromHTML(html, 420);
          var file=firstRaster(images);
          return thumbUrl(file).then(function(url){ render(title, text, url); });
        });
      })
      .catch(function(e){
        console.error('[teaser] failed:', e);
        box.classList.remove('loading');
        box.innerHTML='<div class="content"><h3>Random page</h3><p>Could not load a preview.</p></div>';
      });
  }
  load();
});
});