// tools/mapper_console.js (use from DevTools Console on the live table) (() => { const order = Array.from({length:37}, (_,i)=>i); // 0..36 const overlay = document.createElement('div'); overlay.style.position='fixed'; overlay.style.left=0; overlay.style.top=0; overlay.style.right=0; overlay.style.bottom=0; overlay.style.zIndex=999999; overlay.style.cursor='crosshair'; overlay.style.background='rgba(0,0,0,0.15)'; overlay.innerHTML = `
Mapper
1) Click the board area once (root).
2) Then click numbers in order: 0,1,2,...,36.
Esc = undo last, Enter = finish, Q = quit
`; document.body.appendChild(overlay); let root = null; let rootBox = null; const points = {}; let step = -1; function updateHint(){ const hint = document.getElementById('mm-hint'); if(!root){ hint.innerHTML = hint.innerHTML.replace(/2\).*/,'2) Then click numbers in order: 0,1,2,...,36.
Esc = undo last, Enter = finish, Q = quit'); hint.firstChild.textContent = hint.firstChild.textContent; return; } const next = order[step] ?? order[0]; hint.innerHTML = ` Mapper
Root set. Click number: ${next}
Esc = undo last, Enter = finish, Q = quit`; } function finish(){ const data = { site:"stake", table:"ruleta_es", url: location.href.split('?')[0], mode:"coords", boardSelector: "body", betOpenSelector: "", chipSelectors: {"0.10":"","0.20":""}, numbers: points }; const txt = JSON.stringify(data, null, 2); console.log(txt); navigator.clipboard?.writeText(txt).catch(()=>{}); overlay.remove(); } overlay.addEventListener('click', (e)=>{ if(!root){ root = document.elementFromPoint(e.clientX, e.clientY); rootBox = root.getBoundingClientRect(); step = 0; updateHint(); return; } const n = order[step]; points[n] = { x: e.clientX - rootBox.left, y: e.clientY - rootBox.top }; step++; if(step >= order.length){ finish(); } else { updateHint(); } }); window.addEventListener('keydown', (e)=>{ if(e.key==='Escape'){ // undo if(step>0){ step--; delete points[order[step]]; updateHint(); } e.preventDefault(); } if(e.key==='Enter'){ finish(); e.preventDefault(); } if(e.key.toLowerCase()==='q'){ overlay.remove(); e.preventDefault(); } }); updateHint(); })();