Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MediaWiki:Common.js: Difference between revisions

MediaWiki interface page
No edit summary
No edit summary
Line 91: Line 91:
   }
   }
})();
})();


/* ===========================
/* ===========================
Line 101: Line 102:
   if (!table) return;
   if (!table) return;


   const rows = Array.from(table.querySelectorAll("tr"));
   const container = document.getElementById("filterContainer");
   if (rows.length <= 1) return;
  if (!container) return;
 
  /* ---------- CREATE FILTER UI ---------- */
 
  const wrapper = document.createElement("div");
  wrapper.style.marginBottom = "15px";
 
  const dungeonLabel = document.createElement("strong");
   dungeonLabel.innerText = "Dungeon: ";
  wrapper.appendChild(dungeonLabel);
 
  const dungeonSelect = document.createElement("select");
  dungeonSelect.style.marginRight = "20px";
 
  const dungeons = [
    "All",
    "Wolf's Den",
    "Wolf's Den II",
    "Wolf's Den III",
    "The Red Nest",
    "For The Eggs",
    "Scarlet Revenge",
    "Scarlet Revenge II",
    "Promised One",
    "Promised One II",
    "Promised One III",
    "Lost and Found",
    "The Hostage",
    "Cactus On Fire",
    "Deep Echoes",
    "Deep Echoes II",
    "Deep Echoes III"
  ];
 
  dungeons.forEach(name => {
    const option = document.createElement("option");
    option.value = name;
    option.textContent = name;
    dungeonSelect.appendChild(option);
  });


   const header = rows[0];
   wrapper.appendChild(dungeonSelect);
  const dataRows = rows.slice(1);


   function parseTime(timeString) {
  const playerLabel = document.createElement("strong");
     if (!timeString || !timeString.includes(":")) return 999999;
  playerLabel.innerText = "Player: ";
     const parts = timeString.trim().split(":");
  wrapper.appendChild(playerLabel);
     const minutes = parseInt(parts[0], 10);
 
    const seconds = parseInt(parts[1], 10);
  const playerInput = document.createElement("input");
    return (minutes * 60) + seconds;
  playerInput.type = "text";
  playerInput.placeholder = "Search player name...";
  playerInput.style.padding = "4px";
  wrapper.appendChild(playerInput);
 
  container.appendChild(wrapper);
 
  /* ---------- UTILITIES ---------- */
 
   function parseTime(t) {
     if (!t || !t.includes(":")) return 999999;
     const parts = t.trim().split(":");
     return parseInt(parts[0], 10) * 60 + parseInt(parts[1], 10);
   }
   }


   // Time column is now index 4
   function sortAndRank() {
  dataRows.sort((a, b) => {
    const rows = Array.from(table.querySelectorAll("tr")).slice(1);
    const timeA = parseTime(a.cells[4].innerText);
 
    const timeB = parseTime(b.cells[4].innerText);
    rows.sort((a, b) => {
     return timeA - timeB;
      return parseTime(a.cells[4].innerText) -
   });
            parseTime(b.cells[4].innerText);
     });
 
    rows.forEach(row => table.appendChild(row));
 
    let visibleIndex = 0;
 
    rows.forEach(row => {
      if (row.style.display === "none") return;
 
      const rankCell = row.cells[0];
 
      if (visibleIndex === 0) rankCell.innerHTML = "🥇 1";
      else if (visibleIndex === 1) rankCell.innerHTML = "🥈 2";
      else if (visibleIndex === 2) rankCell.innerHTML = "🥉 3";
      else rankCell.innerText = visibleIndex + 1;
 
      visibleIndex++;
    });
  }
 
   function filterTable() {
    const selectedDungeon = dungeonSelect.value;
    const playerSearch = playerInput.value.toLowerCase();
 
    const rows = Array.from(table.querySelectorAll("tr")).slice(1);
 
    rows.forEach(row => {
      const dungeon = row.cells[1].innerText.trim();
      const player = row.cells[2].innerText.toLowerCase();
 
      const dungeonMatch =
        selectedDungeon === "All" || dungeon === selectedDungeon;
 
      const playerMatch =
        player.includes(playerSearch);
 
      row.style.display =
        (dungeonMatch && playerMatch) ? "" : "none";
    });


  dataRows.forEach(row => table.appendChild(row));
    sortAndRank();
  }


   dataRows.forEach((row, index) => {
   dungeonSelect.addEventListener("change", filterTable);
    const rankCell = row.cells[0];
  playerInput.addEventListener("input", filterTable);


    if (index === 0) rankCell.innerHTML = "🥇 1";
  sortAndRank();
    else if (index === 1) rankCell.innerHTML = "🥈 2";
    else if (index === 2) rankCell.innerHTML = "🥉 3";
    else rankCell.innerText = index + 1;
  });


});
});