MediaWiki:Common.js: Difference between revisions

From EQOA Sandstorm Wiki
Jump to navigationJump to search
No edit summary
No edit summary
Line 65: Line 65:


mw.hook('wikipage.content').add(function () {
mw.hook('wikipage.content').add(function () {
   const table = document.getElementById('items-found-here-table');
   var table = document.getElementById('items-found-here-table');
   if (!table) return;
   if (!table) return;


   const filters = {
   if (document.getElementById('items-filter-box')) return;
 
  var box = document.createElement('div');
  box.id = 'items-filter-box';
  box.className = 'items-filter-box';
 
  box.innerHTML =
    '<b>Item Filters</b><br>' +
    'Item: <input type="text" id="filter-item"> ' +
    'Dropped By: <input type="text" id="filter-mob"> ' +
    'Class: <input type="text" id="filter-class"> ' +
    'Lvl ΓëÑ <input type="number" id="filter-lvl-min"> ' +
    'DMG ΓëÑ <input type="number" id="filter-dmg-min"> ' +
    'AC ΓëÑ <input type="number" id="filter-ac-min"> ' +
    'HP ΓëÑ <input type="number" id="filter-hp-min"> ' +
    'POW ΓëÑ <input type="number" id="filter-pow-min"> ' +
    '<button id="clear-item-filters">Clear</button>';
 
  table.parentNode.insertBefore(box, table);
 
  var filters = {
     item: document.getElementById('filter-item'),
     item: document.getElementById('filter-item'),
     mob: document.getElementById('filter-mob'),
     mob: document.getElementById('filter-mob'),
     className: document.getElementById('filter-class'),
     className: document.getElementById('filter-class'),
     lvlMin: document.getElementById('filter-lvl-min'),
     lvlMin: document.getElementById('filter-lvl-min'),
    dmgMin: document.getElementById('filter-dmg-min'),
    acMin: document.getElementById('filter-ac-min'),
     hpMin: document.getElementById('filter-hp-min'),
     hpMin: document.getElementById('filter-hp-min'),
     powMin: document.getElementById('filter-pow-min'),
     powMin: document.getElementById('filter-pow-min')
    acMin: document.getElementById('filter-ac-min'),
    dmgMin: document.getElementById('filter-dmg-min')
   };
   };


   const clearButton = document.getElementById('clear-item-filters');
   var clearButton = document.getElementById('clear-item-filters');
 
  function getCellText(row, index) {
    return (row.cells[index] ? row.cells[index].textContent : '').toLowerCase();
  }


   function getCellNumber(row, index) {
   function getCellNumber(row, index) {
     const text = row.cells[index]?.textContent.trim() || '';
     var text = row.cells[index] ? row.cells[index].textContent.trim() : '';
     const num = parseFloat(text.replace(/[^\d.-]/g, ''));
     var num = parseFloat(text.replace(/[^\d.-]/g, ''));
     return isNaN(num) ? 0 : num;
     return isNaN(num) ? 0 : num;
   }
   }


   function getCellText(row, index) {
   function getInputNumber(input) {
     return (row.cells[index]?.textContent || '').toLowerCase();
     if (!input || input.value === '') return null;
    var num = parseFloat(input.value);
    return isNaN(num) ? null : num;
   }
   }


   function filterTable() {
   function filterTable() {
     const itemText = filters.item.value.toLowerCase();
     var itemText = filters.item.value.toLowerCase();
     const mobText = filters.mob.value.toLowerCase();
     var mobText = filters.mob.value.toLowerCase();
     const classText = filters.className.value.toLowerCase();
     var classText = filters.className.value.toLowerCase();
 
    const lvlMin = parseFloat(filters.lvlMin.value) || null;
    const hpMin = parseFloat(filters.hpMin.value) || null;
    const powMin = parseFloat(filters.powMin.value) || null;
    const acMin = parseFloat(filters.acMin.value) || null;
    const dmgMin = parseFloat(filters.dmgMin.value) || null;


     for (let i = 1; i < table.rows.length; i++) {
     var lvlMin = getInputNumber(filters.lvlMin);
      const row = table.rows[i];
    var dmgMin = getInputNumber(filters.dmgMin);
    var acMin = getInputNumber(filters.acMin);
    var hpMin = getInputNumber(filters.hpMin);
    var powMin = getInputNumber(filters.powMin);


       let show = true;
    for (var i = 1; i < table.rows.length; i++) {
       var row = table.rows[i];
      var show = true;


       if (itemText && !getCellText(row, 0).includes(itemText)) show = false;
       if (itemText && getCellText(row, 0).indexOf(itemText) === -1) show = false;
       if (mobText && !getCellText(row, 1).includes(mobText)) show = false;
       if (mobText && getCellText(row, 1).indexOf(mobText) === -1) show = false;
       if (classText && !getCellText(row, 2).includes(classText)) show = false;
       if (classText && getCellText(row, 2).indexOf(classText) === -1) show = false;


       if (lvlMin !== null && getCellNumber(row, 3) < lvlMin) show = false;
       if (lvlMin !== null && getCellNumber(row, 3) < lvlMin) show = false;
Line 121: Line 146:
   }
   }


   Object.values(filters).forEach(function (input) {
   Object.keys(filters).forEach(function (key) {
     if (input) input.addEventListener('input', filterTable);
     filters[key].addEventListener('input', filterTable);
   });
   });


   if (clearButton) {
   clearButton.addEventListener('click', function () {
    clearButton.addEventListener('click', function () {
    Object.keys(filters).forEach(function (key) {
      Object.values(filters).forEach(function (input) {
      filters[key].value = '';
        if (input) input.value = '';
      });
      filterTable();
     });
     });
   }
    filterTable();
   });
});
});

Revision as of 01:13, 14 May 2026

/* Any JavaScript here will be loaded for all users on every page load. */
( function () {
  // only run when DOM ready
  function initRaidChecks() {
    // find containers
    var containers = document.querySelectorAll('.raid-checkboxify');
    if (!containers.length) return;

    containers.forEach(function (container, idx) {
      var links = Array.from(container.querySelectorAll('a'));
      links.forEach(function (a, i) {
        // skip if it's already processed
        if (a.classList.contains('raid-processed')) return;

        // create checkbox input
        var cb = document.createElement('input');
        cb.type = 'checkbox';
        cb.className = 'raid-checkbox-input';
        cb.style.marginRight = '8px';
        cb.style.verticalAlign = 'middle';

        // wrap the link & checkbox in a label so clicking text toggles checkbox
        var label = document.createElement('label');
        label.style.display = 'block';
        label.style.cursor = 'pointer';

        // move link inside label
        a.parentNode.insertBefore(label, a);
        label.appendChild(cb);
        label.appendChild(a);

        a.classList.add('raid-processed');

        // restore state from localStorage
        var key = 'raidcheck:' + (document.title || location.pathname) + ':' + a.getAttribute('href');
        try {
          var stored = localStorage.getItem(key);
          if (stored === '1') cb.checked = true;
        } catch (e) {}

        cb.addEventListener('change', function () {
          try {
            if (cb.checked) localStorage.setItem(key, '1');
            else localStorage.removeItem(key);
          } catch (e) {}
        });
      });
    });
  }

  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', initRaidChecks);
  } else {
    initRaidChecks();
  }
})();









mw.hook('wikipage.content').add(function () {
  var table = document.getElementById('items-found-here-table');
  if (!table) return;

  if (document.getElementById('items-filter-box')) return;

  var box = document.createElement('div');
  box.id = 'items-filter-box';
  box.className = 'items-filter-box';

  box.innerHTML =
    '<b>Item Filters</b><br>' +
    'Item: <input type="text" id="filter-item"> ' +
    'Dropped By: <input type="text" id="filter-mob"> ' +
    'Class: <input type="text" id="filter-class"> ' +
    'Lvl ≥ <input type="number" id="filter-lvl-min"> ' +
    'DMG ≥ <input type="number" id="filter-dmg-min"> ' +
    'AC ≥ <input type="number" id="filter-ac-min"> ' +
    'HP ≥ <input type="number" id="filter-hp-min"> ' +
    'POW ≥ <input type="number" id="filter-pow-min"> ' +
    '<button id="clear-item-filters">Clear</button>';

  table.parentNode.insertBefore(box, table);

  var filters = {
    item: document.getElementById('filter-item'),
    mob: document.getElementById('filter-mob'),
    className: document.getElementById('filter-class'),
    lvlMin: document.getElementById('filter-lvl-min'),
    dmgMin: document.getElementById('filter-dmg-min'),
    acMin: document.getElementById('filter-ac-min'),
    hpMin: document.getElementById('filter-hp-min'),
    powMin: document.getElementById('filter-pow-min')
  };

  var clearButton = document.getElementById('clear-item-filters');

  function getCellText(row, index) {
    return (row.cells[index] ? row.cells[index].textContent : '').toLowerCase();
  }

  function getCellNumber(row, index) {
    var text = row.cells[index] ? row.cells[index].textContent.trim() : '';
    var num = parseFloat(text.replace(/[^\d.-]/g, ''));
    return isNaN(num) ? 0 : num;
  }

  function getInputNumber(input) {
    if (!input || input.value === '') return null;
    var num = parseFloat(input.value);
    return isNaN(num) ? null : num;
  }

  function filterTable() {
    var itemText = filters.item.value.toLowerCase();
    var mobText = filters.mob.value.toLowerCase();
    var classText = filters.className.value.toLowerCase();

    var lvlMin = getInputNumber(filters.lvlMin);
    var dmgMin = getInputNumber(filters.dmgMin);
    var acMin = getInputNumber(filters.acMin);
    var hpMin = getInputNumber(filters.hpMin);
    var powMin = getInputNumber(filters.powMin);

    for (var i = 1; i < table.rows.length; i++) {
      var row = table.rows[i];
      var show = true;

      if (itemText && getCellText(row, 0).indexOf(itemText) === -1) show = false;
      if (mobText && getCellText(row, 1).indexOf(mobText) === -1) show = false;
      if (classText && getCellText(row, 2).indexOf(classText) === -1) show = false;

      if (lvlMin !== null && getCellNumber(row, 3) < lvlMin) show = false;
      if (dmgMin !== null && getCellNumber(row, 4) < dmgMin) show = false;
      if (acMin !== null && getCellNumber(row, 5) < acMin) show = false;
      if (hpMin !== null && getCellNumber(row, 13) < hpMin) show = false;
      if (powMin !== null && getCellNumber(row, 15) < powMin) show = false;

      row.style.display = show ? '' : 'none';
    }
  }

  Object.keys(filters).forEach(function (key) {
    filters[key].addEventListener('input', filterTable);
  });

  clearButton.addEventListener('click', function () {
    Object.keys(filters).forEach(function (key) {
      filters[key].value = '';
    });
    filterTable();
  });
});