Jump to content

MediaWiki:Scramble.js: Difference between revisions

From RetroMUX
Created page with "// https://stackoverflow.com/a/27872144/383904 const randomString = (n, r='') => { while (n--) r += String.fromCharCode((r=Math.random()*62|0, r+=r>9?(r<36?55:61):48)); return r; }; const unscramble = (el) => { const chars = [...el.dataset.scramble]; const tot = chars.length; let iteration = 0; let ch = 0; let solved = ""; el._itv = setInterval(() => { if (iteration > 10) { iteration = 0; solved += chars[ch]; ch += 1; }..."
(No difference)

Revision as of 17:21, 24 August 2025

// https://stackoverflow.com/a/27872144/383904
const randomString = (n, r='') => {
  while (n--) r += String.fromCharCode((r=Math.random()*62|0, r+=r>9?(r<36?55:61):48));
  return r;
};

const unscramble = (el) => {
  const chars = [...el.dataset.scramble];
  const tot = chars.length;
  
  let iteration = 0;
  let ch = 0;
  let solved = "";
  
  el._itv = setInterval(() => {

    if (iteration > 10) {
      iteration = 0;
      solved += chars[ch];
      ch += 1;
    }
    
    el.textContent = randomString(tot - ch, solved);
    
    if (ch === tot) {
      clearInterval(el._itv);
    }
    iteration += 1;
  }, 30);
};

const scramble = (el) => {
  clearInterval(el._itv);
  el.textContent = randomString([...el.dataset.scramble].length)
};

const scrambler = (el) => {
  el.addEventListener("mouseenter", () => unscramble(el));
  el.addEventListener("mouseleave", () => scramble(el));
  scramble(el);
};

document.querySelectorAll("[data-scramble]").forEach(scrambler);