persistant storage popup
This commit is contained in:
parent
cb6a64d8c3
commit
f2b5a8d257
26
index.html
26
index.html
@ -138,6 +138,32 @@ lib.startGameLoop(loop);
|
|||||||
Copyright © 2025 S. J. Fakobsen (do whatever idc)
|
Copyright © 2025 S. J. Fakobsen (do whatever idc)
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
|
<dialog id="AssetStore-popup">
|
||||||
|
<h1>Karlkoder would like persistant storage permission</h1>
|
||||||
|
<p>
|
||||||
|
Your code is saved only in your browser, not on our servers. To provide an optimal
|
||||||
|
experience, we would permission to use <a
|
||||||
|
href="https://developer.mozilla.org/en-US/docs/Web/API/StorageManager/persist"
|
||||||
|
>persistent storage</a>, otherwise, your browser may clear your Karlkoder data at
|
||||||
|
any point it wants to.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
If you deny permission, you can still save and load your code manually with the
|
||||||
|
"save" and "load" buttons, you will just have to vigilant to save and load yourself,
|
||||||
|
as otherwise your data might get randomly cleared between sessions.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Even if you enable persistent storage, your browser can still choose to clear your
|
||||||
|
data, i.e. if you clear your browser history, so we would still recommend to save it
|
||||||
|
to your hard drive every now and then.
|
||||||
|
</p>
|
||||||
|
<p><b id="AssetStore-popup-error"></b></p>
|
||||||
|
<button id="AssetStore-popup-allow">
|
||||||
|
Allow persistant storage (Will create a popup from browser)
|
||||||
|
</button>
|
||||||
|
<button id="AssetStore-popup-deny">Don't allow persistent storage</button>
|
||||||
|
</dialog>
|
||||||
|
|
||||||
<!-- fix flash bug in furry browser -->
|
<!-- fix flash bug in furry browser -->
|
||||||
<script>
|
<script>
|
||||||
0;
|
0;
|
||||||
|
@ -90,4 +90,44 @@ export class AssetStore {
|
|||||||
this.#isInternalConstructing = true;
|
this.#isInternalConstructing = true;
|
||||||
return new AssetStore(db);
|
return new AssetStore(db);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static async requestPersistance() {
|
||||||
|
const storage = globalThis.navigator.storage;
|
||||||
|
let isAlreadyPersisted;
|
||||||
|
try {
|
||||||
|
isAlreadyPersisted = await storage.persisted();
|
||||||
|
} catch {
|
||||||
|
console.log("[AssetStore] User has storage disabled, cannot persist!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (isAlreadyPersisted) {
|
||||||
|
console.log("[AssetStore] already got persistant storage!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (globalThis.localStorage.getItem("persistance-denied")) {
|
||||||
|
console.log("[AssetStore] already denied persistant storage!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const dialog = document.querySelector("#AssetStore-popup");
|
||||||
|
const error = dialog.querySelector("#AssetStore-popup-error");
|
||||||
|
const allow = dialog.querySelector("#AssetStore-popup-allow");
|
||||||
|
const deny = dialog.querySelector("#AssetStore-popup-deny");
|
||||||
|
allow.addEventListener("click", async () => {
|
||||||
|
try {
|
||||||
|
const didPersist = await storage.persist();
|
||||||
|
if (!didPersist) {
|
||||||
|
error.textContent = "could not persist: permission denied";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
dialog.close();
|
||||||
|
} catch (err) {
|
||||||
|
error.textContent = `could not persist: ${err}`;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
deny.addEventListener("click", () => {
|
||||||
|
globalThis.localStorage.setItem("persistance-denied", true);
|
||||||
|
dialog.close();
|
||||||
|
});
|
||||||
|
dialog.showModal();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import { AssetProvider } from "./asset_provider.js";
|
|||||||
import { Gamelib } from "./gamelib.js";
|
import { Gamelib } from "./gamelib.js";
|
||||||
import { ConsoleInput } from "./console_input.js";
|
import { ConsoleInput } from "./console_input.js";
|
||||||
import { ProjectSaveHandler } from "./project_save_handler.js";
|
import { ProjectSaveHandler } from "./project_save_handler.js";
|
||||||
|
import { AssetStore } from "./asset_store.js";
|
||||||
|
|
||||||
const editor = ace.edit("editor");
|
const editor = ace.edit("editor");
|
||||||
editor.setTheme("ace/theme/gruvbox");
|
editor.setTheme("ace/theme/gruvbox");
|
||||||
@ -161,3 +162,5 @@ dropZone.ondrop = async (ev) => {
|
|||||||
|
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
AssetStore.requestPersistance();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user