Spaces:
Runtime error
Runtime error
Update index.html
Browse files- index.html +69 -24
index.html
CHANGED
|
@@ -316,34 +316,79 @@ fetch('/tools').then(r => r.json()).then(tools => {
|
|
| 316 |
}).catch(() => {});
|
| 317 |
|
| 318 |
// ββ AUTO-INIT ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
|
|
|
|
|
|
|
|
| 319 |
(function initFromServer() {
|
| 320 |
const wrap = document.getElementById('progressWrap');
|
| 321 |
const bar = document.getElementById('progressBar');
|
| 322 |
const label = document.getElementById('progressLabel');
|
| 323 |
-
|
| 324 |
-
|
| 325 |
-
|
| 326 |
-
|
| 327 |
-
|
| 328 |
-
|
| 329 |
-
|
| 330 |
-
|
| 331 |
-
|
| 332 |
-
|
| 333 |
-
|
| 334 |
-
|
| 335 |
-
|
| 336 |
-
|
| 337 |
-
|
| 338 |
-
|
| 339 |
-
|
| 340 |
-
|
| 341 |
-
|
| 342 |
-
|
| 343 |
-
|
| 344 |
-
|
| 345 |
-
|
| 346 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 347 |
})();
|
| 348 |
|
| 349 |
// ββ PARSE ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
|
|
| 316 |
}).catch(() => {});
|
| 317 |
|
| 318 |
// ββ AUTO-INIT ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 319 |
+
const LS_TOKEN_KEY = 'supercity_session_token';
|
| 320 |
+
const LS_RAW_KEY = 'supercity_raw';
|
| 321 |
+
|
| 322 |
(function initFromServer() {
|
| 323 |
const wrap = document.getElementById('progressWrap');
|
| 324 |
const bar = document.getElementById('progressBar');
|
| 325 |
const label = document.getElementById('progressLabel');
|
| 326 |
+
|
| 327 |
+
// Try to restore a previous session from localStorage
|
| 328 |
+
const savedToken = localStorage.getItem(LS_TOKEN_KEY);
|
| 329 |
+
const savedRaw = localStorage.getItem(LS_RAW_KEY);
|
| 330 |
+
|
| 331 |
+
if (savedToken && savedRaw) {
|
| 332 |
+
// Verify the session is still alive on the server
|
| 333 |
+
label.textContent = 'Resuming sessionβ¦';
|
| 334 |
+
wrap.style.display = 'block';
|
| 335 |
+
bar.style.width = '50%';
|
| 336 |
+
|
| 337 |
+
fetch('/session/' + savedToken)
|
| 338 |
+
.then(r => r.json())
|
| 339 |
+
.then(data => {
|
| 340 |
+
if (data.alive) {
|
| 341 |
+
bar.style.width = '100%';
|
| 342 |
+
sessionToken = savedToken;
|
| 343 |
+
originalRaw = savedRaw;
|
| 344 |
+
parseCharacters(savedRaw);
|
| 345 |
+
wrap.style.display = 'none';
|
| 346 |
+
document.getElementById('fileInfoBar').style.display = 'flex';
|
| 347 |
+
document.getElementById('fileInfoBar').innerHTML = `
|
| 348 |
+
<div class="file-info">β» <span class="file-info-name">Session restored</span>
|
| 349 |
+
Β· ${characters.length} characters loaded</div>`;
|
| 350 |
+
document.getElementById('editorLayout').style.display = 'grid';
|
| 351 |
+
setStep(2);
|
| 352 |
+
showToast('β Session restored β your edits are safe');
|
| 353 |
+
} else {
|
| 354 |
+
localStorage.removeItem(LS_TOKEN_KEY);
|
| 355 |
+
localStorage.removeItem(LS_RAW_KEY);
|
| 356 |
+
loadFresh(wrap, bar, label);
|
| 357 |
+
}
|
| 358 |
+
})
|
| 359 |
+
.catch(() => loadFresh(wrap, bar, label));
|
| 360 |
+
} else {
|
| 361 |
+
loadFresh(wrap, bar, label);
|
| 362 |
+
}
|
| 363 |
+
|
| 364 |
+
function loadFresh(wrap, bar, label) {
|
| 365 |
+
wrap.style.display = 'block';
|
| 366 |
+
bar.style.width = '30%';
|
| 367 |
+
label.textContent = 'Loading APKβ¦';
|
| 368 |
+
|
| 369 |
+
fetch('/init')
|
| 370 |
+
.then(r => { if (!r.ok) return r.json().then(e => { throw new Error(e.error); }); return r.json(); })
|
| 371 |
+
.then(data => {
|
| 372 |
+
bar.style.width = '100%';
|
| 373 |
+
sessionToken = data.token;
|
| 374 |
+
originalRaw = data.characters;
|
| 375 |
+
localStorage.setItem(LS_TOKEN_KEY, data.token);
|
| 376 |
+
localStorage.setItem(LS_RAW_KEY, data.characters);
|
| 377 |
+
parseCharacters(data.characters);
|
| 378 |
+
wrap.style.display = 'none';
|
| 379 |
+
document.getElementById('fileInfoBar').style.display = 'flex';
|
| 380 |
+
document.getElementById('fileInfoBar').innerHTML = `
|
| 381 |
+
<div class="file-info">π¦ <span class="file-info-name">super-city-2.010.64-mod-t-5play.apk</span>
|
| 382 |
+
Β· ${characters.length} characters loaded</div>`;
|
| 383 |
+
document.getElementById('editorLayout').style.display = 'grid';
|
| 384 |
+
setStep(2);
|
| 385 |
+
showToast(`β Loaded ${characters.length} characters`);
|
| 386 |
+
})
|
| 387 |
+
.catch(err => {
|
| 388 |
+
wrap.style.display = 'none';
|
| 389 |
+
showToast('Failed to load APK: ' + err.message, true);
|
| 390 |
+
});
|
| 391 |
+
}
|
| 392 |
})();
|
| 393 |
|
| 394 |
// ββ PARSE ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|