MediaWiki:Common.js

Pagina dell'interfaccia di MediaWiki

Nota: dopo aver pubblicato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti.

  • Firefox / Safari: tieni premuto il tasto delle maiuscole Shift e fai clic su Ricarica, oppure premi Ctrl-F5 o Ctrl-R (⌘-R su Mac)
  • Google Chrome: premi Ctrl-Shift-R (⌘-Shift-R su un Mac)
  • Edge: tieni premuto il tasto Ctrl e fai clic su Aggiorna, oppure premi Ctrl-F5.
/* Il codice JavaScript inserito qui viene caricato da ciascuna pagina, per tutti gli utenti. */

/*CAPITALIZE SEARCH*/
document.addEventListener("DOMContentLoaded", function () {
  const input = document.querySelector("#searchInput");

  input.addEventListener("input", function () {
    const words = input.value.split(" ").map(word => {
      return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
    });
    const capitalized = words.join(" ");
    
    // Only update value if it's changed to avoid cursor jump
    if (input.value !== capitalized) {
      const cursorPos = input.selectionStart;
      input.value = capitalized;
      input.setSelectionRange(cursorPos, cursorPos);
    }
  });
});

/*FILTRO LISA NPC*/
(function($) {
  // debug rapido
  console.log("🔍 filtro NPC attivato – righe trovate:", $('#characterTable tr:has(td)').length);
  if ($('#characterTable tr:has(td)').length === 0) {
    console.warn("❗ characterTable tr:has(td) restituisce 0: controlla id/tabella");
    return;
  }

  // 1) Raccogli i valori unici
  var razze = {}, luoghi = {}, sessioni = {}, statuses = {};
  $('#characterTable tr:has(td)').each(function(){
    var $c = $(this).children('td'),
        r  = $.trim($c.eq(1).text()),
        l  = $.trim($c.eq(3).text()),
        se = $.trim($c.eq(6).text()),
        file = ($c.eq(7).find('img').attr('src')||'').split('/').pop();
    if(r)  razze[r]        = true;
    if(l)  luoghi[l]       = true;
    if(se) sessioni[se]    = true;
    if(file) statuses[file]= true;
  });

  // 2) Popola le select
  function popola(items, selId) {
    var $sel = $('#'+selId);
    Object.keys(items).sort().forEach(function(v){
      $sel.append($('<option>').val(v).text(v));
    });
  }
  popola(razze,    'filter-razza');
  popola(luoghi,   'filter-luogo');
  popola(sessioni, 'filter-sessione');
  popola(statuses, 'filter-status');

  // 3) Filtro al change
  $('#filter-razza, #filter-luogo, #filter-sessione, #filter-status')
    .on('change', function(){
      var fR = $('#filter-razza').val(),
          fL = $('#filter-luogo').val(),
          fS = $('#filter-sessione').val(),
          fSt= $('#filter-status').val();
      $('#characterTable tr:has(td)').each(function(){
        var $c    = $(this).children('td'),
            r     = $.trim($c.eq(1).text()),
            l     = $.trim($c.eq(3).text()),
            se    = $.trim($c.eq(6).text()),
            file  = ($c.eq(7).find('img').attr('src')||'').split('/').pop(),
            match = (!fR  || r===fR)
                  && (!fL  || l===fL)
                  && (!fS  || se===fS)
                  && (!fSt || file===fSt);
        $(this).toggle(match);
      });
    });

  // 4) Reset button
  $('#filter-reset').on('click', function(){
    var btn = $(this);
    btn.addClass('rotating');
    // svuota tutte le select e riapplica il filtro
    $('#filter-razza, #filter-luogo, #filter-sessione, #filter-status')
      .val('').trigger('change');
    // togli classe dopo l'animazione
    setTimeout(function(){ btn.removeClass('rotating'); }, 500);
  });

})(jQuery);