StorageAvailable() function from MDN checks
This commit is contained in:
parent
12ca7da27a
commit
7b333ba47b
2 changed files with 45 additions and 36 deletions
File diff suppressed because one or more lines are too long
|
|
@ -1276,18 +1276,11 @@ function InitialHTMLPopulate(divIdObj) {
|
||||||
AppendHTML(divIdObj.achievements, FLEUR_DIVIDE);
|
AppendHTML(divIdObj.achievements, FLEUR_DIVIDE);
|
||||||
|
|
||||||
// Check local storage first to set proper checkbox state before the below functions start (default is always unchecked)
|
// Check local storage first to set proper checkbox state before the below functions start (default is always unchecked)
|
||||||
try {
|
if (StorageAvailable('localStorage')) {
|
||||||
if (localStorage.getItem("hkCheckboxHints") === "checked") document.getElementById("checkbox-hints").checked = true;
|
if (localStorage.getItem("hkCheckboxHints") === "checked") document.getElementById("checkbox-hints").checked = true;
|
||||||
}
|
|
||||||
catch (error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
if (localStorage.getItem("hkCheckboxSpoilers") === "checked") document.getElementById("checkbox-spoilers").checked = true;
|
if (localStorage.getItem("hkCheckboxSpoilers") === "checked") document.getElementById("checkbox-spoilers").checked = true;
|
||||||
}
|
}
|
||||||
catch (error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
// if (localStorage.getItem("hkCheckboxHints") === "checked") document.getElementById("checkbox-hints").checked = true;
|
// if (localStorage.getItem("hkCheckboxHints") === "checked") document.getElementById("checkbox-hints").checked = true;
|
||||||
// if (localStorage.getItem("hkCheckboxSpoilers") === "checked") document.getElementById("checkbox-spoilers").checked = true;
|
// if (localStorage.getItem("hkCheckboxSpoilers") === "checked") document.getElementById("checkbox-spoilers").checked = true;
|
||||||
|
|
||||||
|
|
@ -1310,7 +1303,9 @@ function CheckboxHintsToggle(param = "none") {
|
||||||
checkboxId.checked = false;
|
checkboxId.checked = false;
|
||||||
|
|
||||||
// remember this choice for subsequent page visits and browser restarts
|
// remember this choice for subsequent page visits and browser restarts
|
||||||
localStorage.setItem("hkCheckboxHints", "unchecked");
|
if (StorageAvailable('localStorage')) {
|
||||||
|
localStorage.setItem("hkCheckboxHints", "unchecked");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case "show":
|
case "show":
|
||||||
document.getElementById("hk-hints").classList.remove("hidden");
|
document.getElementById("hk-hints").classList.remove("hidden");
|
||||||
|
|
@ -1318,7 +1313,9 @@ function CheckboxHintsToggle(param = "none") {
|
||||||
checkboxId.checked = true;
|
checkboxId.checked = true;
|
||||||
|
|
||||||
// remember this choice for subsequent page visits and browser restarts
|
// remember this choice for subsequent page visits and browser restarts
|
||||||
localStorage.setItem("hkCheckboxHints", "checked");
|
if (StorageAvailable('localStorage')) {
|
||||||
|
localStorage.setItem("hkCheckboxHints", "checked");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// This runs when the checkbox is not checked
|
// This runs when the checkbox is not checked
|
||||||
|
|
@ -1327,12 +1324,9 @@ function CheckboxHintsToggle(param = "none") {
|
||||||
checkboxId.value = "hints-off";
|
checkboxId.value = "hints-off";
|
||||||
|
|
||||||
// remember this choice for subsequent page visits and browser restarts
|
// remember this choice for subsequent page visits and browser restarts
|
||||||
try {
|
if (StorageAvailable('localStorage')) {
|
||||||
localStorage.setItem("hkCheckboxHints", "unchecked");
|
localStorage.setItem("hkCheckboxHints", "unchecked");
|
||||||
}
|
}
|
||||||
catch (error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// This runs when the checkbox is checked
|
// This runs when the checkbox is checked
|
||||||
else {
|
else {
|
||||||
|
|
@ -1340,12 +1334,9 @@ function CheckboxHintsToggle(param = "none") {
|
||||||
checkboxId.value = "hints-on";
|
checkboxId.value = "hints-on";
|
||||||
|
|
||||||
// remember this choice for subsequent page visits and browser restarts
|
// remember this choice for subsequent page visits and browser restarts
|
||||||
try {
|
if (StorageAvailable('localStorage')) {
|
||||||
localStorage.setItem("hkCheckboxHints", "checked");
|
localStorage.setItem("hkCheckboxHints", "checked");
|
||||||
}
|
}
|
||||||
catch (error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1368,12 +1359,9 @@ function CheckboxSpoilersToggle(param = "none") {
|
||||||
checkboxId.checked = false;
|
checkboxId.checked = false;
|
||||||
|
|
||||||
// remember this choice for subsequent page visits and browser restarts
|
// remember this choice for subsequent page visits and browser restarts
|
||||||
try {
|
if (StorageAvailable('localStorage')) {
|
||||||
localStorage.setItem("hkCheckboxSpoilers", "unchecked");
|
localStorage.setItem("hkCheckboxSpoilers", "unchecked");
|
||||||
}
|
}
|
||||||
catch (error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case "show":
|
case "show":
|
||||||
for (let i = 0; i < length; i++) {
|
for (let i = 0; i < length; i++) {
|
||||||
|
|
@ -1383,12 +1371,9 @@ function CheckboxSpoilersToggle(param = "none") {
|
||||||
checkboxId.checked = true;
|
checkboxId.checked = true;
|
||||||
|
|
||||||
// remember this choice for subsequent page visits and browser restarts
|
// remember this choice for subsequent page visits and browser restarts
|
||||||
try {
|
if (StorageAvailable('localStorage')) {
|
||||||
localStorage.setItem("hkCheckboxSpoilers", "checked");
|
localStorage.setItem("hkCheckboxSpoilers", "checked");
|
||||||
}
|
}
|
||||||
catch (error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// This runs when the checkbox is not checked
|
// This runs when the checkbox is not checked
|
||||||
|
|
@ -1399,12 +1384,9 @@ function CheckboxSpoilersToggle(param = "none") {
|
||||||
checkboxId.value = "spoilers-off";
|
checkboxId.value = "spoilers-off";
|
||||||
|
|
||||||
// remember this choice for subsequent page visits and browser restarts
|
// remember this choice for subsequent page visits and browser restarts
|
||||||
try {
|
if (StorageAvailable('localStorage')) {
|
||||||
localStorage.setItem("hkCheckboxSpoilers", "unchecked");
|
localStorage.setItem("hkCheckboxSpoilers", "unchecked");
|
||||||
}
|
}
|
||||||
catch (error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// This runs when the checkbox is checked
|
// This runs when the checkbox is checked
|
||||||
|
|
@ -1415,12 +1397,9 @@ function CheckboxSpoilersToggle(param = "none") {
|
||||||
checkboxId.value = "spoilers-on";
|
checkboxId.value = "spoilers-on";
|
||||||
|
|
||||||
// remember this choice for subsequent page visits and browser restarts
|
// remember this choice for subsequent page visits and browser restarts
|
||||||
try {
|
if (StorageAvailable('localStorage')) {
|
||||||
localStorage.setItem("hkCheckboxSpoilers", "checked");
|
localStorage.setItem("hkCheckboxSpoilers", "checked");
|
||||||
}
|
}
|
||||||
catch (error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1486,6 +1465,36 @@ function TranslateMapName(mapCode, dictionary = MAP) {
|
||||||
return translation;
|
return translation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detects whether Storage is both supported and available.
|
||||||
|
* MDN WebDocs https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#feature-detecting_localstorage
|
||||||
|
* @param {Storage} type type of storage. Ex. "localStorage" or "sessionStorage"
|
||||||
|
* @returns {Boolean}
|
||||||
|
*/
|
||||||
|
function StorageAvailable(type) {
|
||||||
|
var storage;
|
||||||
|
try {
|
||||||
|
storage = window[type];
|
||||||
|
var x = '__storage_test__';
|
||||||
|
storage.setItem(x, x);
|
||||||
|
storage.removeItem(x);
|
||||||
|
return true;
|
||||||
|
} catch (e) {
|
||||||
|
return e instanceof DOMException && (
|
||||||
|
// everything except Firefox
|
||||||
|
e.code === 22 ||
|
||||||
|
// Firefox
|
||||||
|
e.code === 1014 ||
|
||||||
|
// test name field too, because code might not be present
|
||||||
|
// everything except Firefox
|
||||||
|
e.name === 'QuotaExceededError' ||
|
||||||
|
// Firefox
|
||||||
|
e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&
|
||||||
|
// acknowledge QuotaExceededError only if there's something already stored
|
||||||
|
(storage && storage.length !== 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Make functions global so they can be used on click and change events (for Webpack)
|
// Make functions global so they can be used on click and change events (for Webpack)
|
||||||
// window.InitialHTMLPopulate = InitialHTMLPopulate;
|
// window.InitialHTMLPopulate = InitialHTMLPopulate;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue