// ==UserScript== // @name Cara.app Persistent Fast Reload // @namespace https://cara.app/ // @version 1.2 // @description Fast repeating reload with GUI (persists across reloads) // @match https://cara.app/* // @grant none // @run-at document-end // ==/UserScript== (function () { 'use strict'; const STATE_KEY = 'cara_fast_reload_enabled'; const DELAY_KEY = 'cara_fast_reload_delay'; function waitForBody(cb) { if (document.body) cb(); else setTimeout(() => waitForBody(cb), 50); } waitForBody(() => { let reloadTimeout = null; const enabled = localStorage.getItem(STATE_KEY) === 'true'; const savedDelay = Number(localStorage.getItem(DELAY_KEY)) || 500; // ---- GUI ---- const panel = document.createElement('div'); panel.style.cssText = ` position: fixed; bottom: 20px; right: 20px; z-index: 999999; background: #111; color: white; padding: 12px; border-radius: 8px; font-family: sans-serif; font-size: 14px; box-shadow: 0 0 10px rgba(0,0,0,0.5); `; panel.innerHTML = ` <div style="font-weight:bold;margin-bottom:6px;">⚡ Fast Reload</div> <div style="margin-bottom:6px;"> Delay (ms): <input id="delay" type="number" min="100" value="${savedDelay}" style="width:70px;"> </div> <button id="start">Start</button> <button id="stop">Stop</button> <div style="margin-top:6px;font-size:12px;opacity:.7"> Status: <span id="status">OFF</span> </div> `; document.body.appendChild(panel); const startBtn = panel.querySelector('#start'); const stopBtn = panel.querySelector('#stop'); const delayInput = panel.querySelector('#delay'); const status = panel.querySelector('#status'); function scheduleReload() { if (localStorage.getItem(STATE_KEY) !== 'true') return; const delay = Math.max(100, Number(delayInput.value)); localStorage.setItem(DELAY_KEY, delay); reloadTimeout = setTimeout(() => { location.reload(); }, delay); } function start() { localStorage.setItem(STATE_KEY, 'true'); status.textContent = 'ON'; scheduleReload(); } function stop() { localStorage.setItem(STATE_KEY, 'false'); clearTimeout(reloadTimeout); status.textContent = 'OFF'; } startBtn.onclick = start; stopBtn.onclick = stop; // ---- Auto-resume after reload ---- if (enabled) { status.textContent = 'ON'; scheduleReload(); } else { status.textContent = 'OFF'; } console.log('[Fast Reload] ready, enabled:', enabled); }); })();