MediaWiki:Test.js: различия между версиями

Страница интерфейса MediaWiki
Нет описания правки
Метка: отменено
Нет описания правки
Метка: отменено
Строка 15: Строка 15:
     qa(root,'.ss-section').forEach(function(section){
     qa(root,'.ss-section').forEach(function(section){
       var cards=qa(section,'.ss-card');
       var cards=qa(section,'.ss-card');
      var emptyMsg=q(section,'.ss-empty');
       var visibleCount=0;
       var visibleCount=0;
       cards.forEach(function(card){
       cards.forEach(function(card){
Строка 22: Строка 23:
         if(show)visibleCount++;
         if(show)visibleCount++;
       });
       });
       // секция остаётся видимой всегда, только её карточки скрываются
       if(!emptyMsg){
       section.style.display='';
        emptyMsg=document.createElement('div');
        emptyMsg.className='ss-empty';
        emptyMsg.innerHTML='Нет артов у этого автора';
        section.appendChild(emptyMsg);
       }
      emptyMsg.style.display=visibleCount===0?'block':'none';
     });
     });
   }
   }

Версия от 17:16, 24 августа 2025

(function(){
  var root=document.getElementById('ss-art-gallery');
  if(!root)return;
  function q(a,b){return a.querySelector(b)}
  function qa(a,b){return Array.prototype.slice.call(a.querySelectorAll(b))}
  var chips=qa(root,'.ss-chip');

  function setFilter(val){
    chips.forEach(function(c){
      c.classList.toggle('ss-chip-active',
        c.getAttribute('data-filter')===val || (val==='all'&&c.getAttribute('data-filter')==='all')
      );
    });

    qa(root,'.ss-section').forEach(function(section){
      var cards=qa(section,'.ss-card');
      var emptyMsg=q(section,'.ss-empty');
      var visibleCount=0;
      cards.forEach(function(card){
        var who=card.getAttribute('data-artist');
        var show=(val==='all'||val===who);
        card.classList.toggle('ss-hidden',!show);
        if(show)visibleCount++;
      });
      if(!emptyMsg){
        emptyMsg=document.createElement('div');
        emptyMsg.className='ss-empty';
        emptyMsg.innerHTML='Нет артов у этого автора';
        section.appendChild(emptyMsg);
      }
      emptyMsg.style.display=visibleCount===0?'block':'none';
    });
  }

  chips.forEach(function(ch){
    ch.addEventListener('click',function(){
      setFilter(ch.getAttribute('data-filter'))
    })
  });
  setFilter('all');

  var modal=document.createElement('div');
  modal.className='ss-modal';
  modal.innerHTML='<div class="ss-modal-inner"><img class="ss-modal-img" alt=""/></div><div class="ss-modal-close" role="button">✖ Закрыть</div>';
  root.appendChild(modal);
  var modalImg=q(modal,'.ss-modal-img');
  function originalFromThumb(u){
    if(!u)return u;
    if(u.indexOf('/thumb/')>-1){
      var s=u.replace('/thumb/','/');
      s=s.replace(/\/[^\/]*$/,'');
      return s
    }
    return u
  }
  qa(root,'.ss-card img').forEach(function(img){
    img.style.cursor='zoom-in';
    img.addEventListener('click',function(){
      var src=originalFromThumb(img.getAttribute('src'));
      modalImg.setAttribute('src',src||img.getAttribute('src'));
      modal.classList.add('open')
    })
  });
  function closeModal(){modal.classList.remove('open')}
  modal.addEventListener('click',function(e){
    if(e.target===modal||e.target.classList.contains('ss-modal-close')){closeModal()}
  });
  document.addEventListener('keydown',function(e){if(e.key==='Escape'){closeModal()}})
})();