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

Страница интерфейса MediaWiki
Нет описания правки
Метка: отменено
Нет описания правки
 
(не показано 37 промежуточных версий этого же участника)
Строка 1: Строка 1:
(function(){
(function(){
  var root=document.getElementById('ss-art-gallery');
if(typeof mw==='undefined') return;
  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){
var map={
    chips.forEach(function(c){
"Клише":"#ff4d4d",
      c.classList.toggle('ss-chip-active',
"властью":"#4dff4d",
        c.getAttribute('data-filter')===val || (val==='all'&&c.getAttribute('data-filter')==='all')
"ответственность":"#4d4dff",
      );
"Стандартные Рабочие Процедуры":"#ff4dff",
    });
"ядерный":"#ffa500",
"станции":"#4dffff",
"ГСБ":"#b84dff",
"диск":"#4dff88",
"СРП/КЗ":"#ffb6c1",
"банановая кожурка":"#ffff4d"
};


    qa(root,'.ss-section').forEach(function(section){
function esc(s){return s.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');}
      var cards=qa(section,'.ss-card');
      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++;
      });
      // секция видна только если есть арты выбранного автора или выбран "все"
      section.style.display=(val==='all' || visibleCount>0)?'block':'none';
    });
  }


  chips.forEach(function(ch){
function walk(node){
    ch.addEventListener('click',function(){
if(node.nodeType===3){
      setFilter(ch.getAttribute('data-filter'))
var t=node.nodeValue, r=t;
    })
for(var k in map){
  });
r=r.replace(new RegExp(esc(k),'g'),'<span style="color:'+map[k]+'">'+k+'</span>');
  setFilter('all');
}
if(r!==t){
var s=document.createElement('span');
s.innerHTML=r;
node.parentNode.replaceChild(s,node);
}
}
}


  var modal=document.createElement('div');
var nodes=document.querySelectorAll('.mw-parser-output p, .mw-parser-output li');
  modal.className='ss-modal';
for(var i=0;i<nodes.length;i++){
  modal.innerHTML='<div class="ss-modal-inner"><img class="ss-modal-img" alt=""/></div><div class="ss-modal-close" role="button">✖ Закрыть</div>';
var cn=nodes[i].childNodes;
  root.appendChild(modal);
for(var j=0;j<cn.length;j++) walk(cn[j]);
  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(e){
      e.preventDefault();
      var src=originalFromThumb(img.getAttribute('src'));
      modalImg.setAttribute('src',src||img.getAttribute('src'));
      modalImg.style.maxWidth='90vw';
      modalImg.style.maxHeight='90vh';
      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()}})
})();
})();

Текущая версия от 11:16, 17 января 2026

(function(){
if(typeof mw==='undefined') return;

var map={
"Клише":"#ff4d4d",
"властью":"#4dff4d",
"ответственность":"#4d4dff",
"Стандартные Рабочие Процедуры":"#ff4dff",
"ядерный":"#ffa500",
"станции":"#4dffff",
"ГСБ":"#b84dff",
"диск":"#4dff88",
"СРП/КЗ":"#ffb6c1",
"банановая кожурка":"#ffff4d"
};

function esc(s){return s.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');}

function walk(node){
if(node.nodeType===3){
var t=node.nodeValue, r=t;
for(var k in map){
r=r.replace(new RegExp(esc(k),'g'),'<span style="color:'+map[k]+'">'+k+'</span>');
}
if(r!==t){
var s=document.createElement('span');
s.innerHTML=r;
node.parentNode.replaceChild(s,node);
}
}
}

var nodes=document.querySelectorAll('.mw-parser-output p, .mw-parser-output li');
for(var i=0;i<nodes.length;i++){
var cn=nodes[i].childNodes;
for(var j=0;j<cn.length;j++) walk(cn[j]);
}
})();