From e77c866d7e3ddbf36b2c59012f4cdf159e02fc8f Mon Sep 17 00:00:00 2001
From: Jayd-Rubies <155784127+Jayd-Rubies@users.noreply.github.com>
Date: Mon, 1 Apr 2024 14:01:28 -0400
Subject: [PATCH] extrasaveslots.js adds 100 save slots
---
mods/extrasaveslots.js | 158 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 158 insertions(+)
create mode 100644 mods/extrasaveslots.js
diff --git a/mods/extrasaveslots.js b/mods/extrasaveslots.js
new file mode 100644
index 00000000..5321bd03
--- /dev/null
+++ b/mods/extrasaveslots.js
@@ -0,0 +1,158 @@
+//extrasaveslots
+ function showSaves() {
+ var savesParent = document.getElementById("savesParent");
+ var saveSlotList = document.getElementById("saveSlotList");
+ saveSlotList.innerHTML = "";
+ // loop 12 times, checking if local storage SandboxelsSaves/x exists
+ // Slot 1 Clear Load Save
+ // Unnamed Clear Load Save
+ for (var i = 1; i < 101; i++) {
+ var save = localStorage.getItem("SandboxelsSaves/"+i);
+ var name = "Slot "+i;
+ if (save) {
+ name = JSON.parse(save).meta.name || "Unnamed";
+ name = name.replace(/&/g, "&").replace(/ 16) { name = name.substring(0,16)+"..."; }
+ saveSlotList.innerHTML += ""+name+" Clear Load Save";
+ }
+ else {
+ saveSlotList.innerHTML += ""+name+" Clear Load Save";
+ }
+ }
+ savesParent.style.display = "block";
+ showingMenu = "saves";
+ }
+ function saveSlot(i) {
+ savingState = {slot:i};
+ document.getElementById("saveName").value = document.getElementById("saveSlot"+i).getAttribute("data-name") || "Slot "+i;
+ showSavePrompt();
+ }
+ function loadSlot(i) {
+ var save = localStorage.getItem("SandboxelsSaves/"+i);
+ if (save) {
+ loadSave(JSON.parse(save));
+ closeMenu();
+ }
+ }
+ function clearSlot(i) {
+ if (!confirm("Are you sure you want to erase this save slot?")) { return }
+ localStorage.removeItem("SandboxelsSaves/"+i);
+ showSaves();
+ }
+ function confirmSave() {
+ if (!savingState) { return }
+ var saveName = document.getElementById("saveName").value || "Unnamed";
+ var saveTemp = document.getElementById("saveTemp").getAttribute("state") === "1";
+ var saveColors = document.getElementById("saveColors").getAttribute("state") === "1";
+ var saveMods = document.getElementById("saveMods").getAttribute("state") === "1";
+ var saveSettings = document.getElementById("saveSettings").getAttribute("state") === "1";
+ var saveRaw = document.getElementById("saveRaw").getAttribute("state") === "1";
+ var saveAuthor = document.getElementById("saveAuthor").value || "";
+ if (saveAuthor && !currentSaveData) {
+ setSetting("authorName",saveAuthor)
+ }
+ var saveDesc = document.getElementById("saveDesc").value || "";
+ var config = {name:saveName,temp:saveTemp,mods:saveMods,settings:saveSettings,raw:saveRaw,keep:[],author:saveAuthor,desc:saveDesc};
+ if (saveTemp) { config.keep.push("temp") }
+ if (saveColors) { config.keep.push("color") }
+ if (savingState.slot) {
+ // save stringified generateSave() to localStorage SandboxelsSaves/i
+ localStorage.setItem("SandboxelsSaves/"+savingState.slot, JSON.stringify(generateSave(undefined,config)));
+ closeMenu();
+ showSaves();
+ }
+ else {
+ // save to .sbxls
+ var save = generateSave(undefined,config);
+ var blob = new Blob([JSON.stringify(save)], {type: "application/json"});
+ var url = URL.createObjectURL(blob);
+ var a = document.createElement("a");
+ a.href = url;
+ a.download = saveName+".sbxls";
+ document.body.appendChild(a);
+ a.click();
+ setTimeout(function() {
+ document.body.removeChild(a);
+ window.URL.revokeObjectURL(url);
+ }, 0);
+ closeMenu();
+ }
+ }
+ function saveToFile() {
+ savingState = {slot:null};
+ document.getElementById("saveName").value = "";
+ document.getElementById("saveAuthor").value = "";
+ document.getElementById("saveDesc").value = "";
+ showSavePrompt();
+ }
+ function loadFromFile() {
+ var input = document.createElement("input");
+ input.type = "file";
+ // input.accept = ".sbxls,.json,.txt,text/*,application/json";
+ input.addEventListener("change", function(e) {
+ var file = e.target.files[0];
+ var reader = new FileReader();
+ reader.readAsText(file,"UTF-8");
+ reader.onload = readerEvent => {
+ var content = readerEvent.target.result;
+ loadSave(JSON.parse(content));
+ }
+ closeMenu();
+ });
+ input.click();
+ }
+ function showSavePrompt() {
+ closeMenu();
+ var savePromptParent = document.getElementById("savePromptParent");
+ var saveWarning = document.getElementById("saveWarning");
+ if (currentSaveData) {
+ document.getElementById("saveName").value = currentSaveData.name || "";
+ document.getElementById("saveAuthor").value = currentSaveData.author || "";
+ document.getElementById("saveDesc").value = currentSaveData.desc || "";
+ }
+ else if (settings.authorName) {
+ document.getElementById("saveAuthor").value = settings.authorName;
+ }
+ saveWarning.innerHTML = "
"
+ var menuTitle = document.querySelector("#savePromptMenu .menuTitle");
+ if (savingState.slot === null) {
+ menuTitle.innerHTML = "Save to File";
+ }
+ else {
+ menuTitle.innerHTML = "Save to Slot";
+ if (localStorage["SandboxelsSaves/"+savingState.slot]) {
+ saveWarning.innerHTML += "
This will overwrite the save in slot "+savingState.slot+"!";
+ }
+ }
+ var saveMods = document.getElementById("saveMods");
+ if (enabledMods.length !== 0) {
+ saveMods.style.display = "inline-block";
+ saveWarning.innerHTML += "
Mods might not be necessary to include, and may annoy the user!";
+ }
+ else { saveMods.style.display = "none"; }
+ savePromptParent.style.display = "block";
+ showingMenu = "savePrompt";
+ document.getElementById("saveName").focus();
+ }
+ function showSettings() {
+ var settingsParent = document.getElementById("settingsParent");
+ settingsParent.style.display = "block";
+ showingMenu = "settings";
+ }
+ function setSetting(setting,value) {
+ settings[setting] = value;
+ saveSettings();
+ }
+ function toggleInput(input,setting,updateText) {
+ if (input.getAttribute("state") === "0") {
+ input.setAttribute("state","1");
+ if (updateText !== false) { input.value = "ON"; }
+ if (setting) { setSetting(setting,1); }
+ }
+ else {
+ input.setAttribute("state","0");
+ if (updateText !== false) { input.value = "OFF"; }
+ if (setting) { setSetting(setting,0); }
+ }
+ }
\ No newline at end of file