Skip to content

Commit

Permalink
Sorting Algorithms: Save settings to localStorage
Browse files Browse the repository at this point in the history
  • Loading branch information
Marco4413 committed Dec 14, 2024
1 parent 5580aae commit bc8761e
Showing 1 changed file with 23 additions and 9 deletions.
32 changes: 23 additions & 9 deletions examples/007-sorting_algorithms/script.js
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ window.addEventListener("load", () => {

/** @type {HTMLInputElement} */
const $restart = document.getElementById("restart");
const onRestart = () => {
const restart = () => {
player.Stop();
player.Play(SortingAnimation, [ sortOpt ]);
};
Expand All @@ -99,9 +99,17 @@ window.addEventListener("load", () => {
window.location.search = `?${SerializeForm($settings)}`;
});

const onAnySettingChanged = () => {
try {
localStorage.setItem("settings", SerializeForm($settings));
} catch (error) {
console.error(error);
}
};

/** @type {HTMLSelectElement} */
const $algoSelect = document.getElementById("sorting-algorithm");
const onSelectionUpdate = () => {
const onAlgorithmChange = () => {
const $option = $algoSelect.options.item($algoSelect.selectedIndex);
switch ($option.value) {
case "bubble": sortOpt.sorter = Animatable.BubbleSort; break;
Expand All @@ -113,7 +121,8 @@ window.addEventListener("load", () => {
case "bucket": sortOpt.sorter = Animatable.BucketSort; break;
default: break;
}
onRestart();
onAnySettingChanged();
restart();
};

/** @type {HTMLInputElement} */
Expand All @@ -125,25 +134,30 @@ window.addEventListener("load", () => {
sortOpt.updateDelay = $updateDelay.valueAsNumber;
if (!Number.isNaN($stepsPerUpdate.valueAsNumber))
sortOpt.stepsPerUpdate = Math.round($stepsPerUpdate.valueAsNumber);
onAnySettingChanged();
};

/** @type {HTMLInputElement} */
const $itemCount = document.getElementById("item-count");
const onItemCountChange = () => {
if (!Number.isNaN($itemCount.valueAsNumber))
sortOpt.itemCount = Math.max(0, Math.round($itemCount.valueAsNumber));
onRestart();
onAnySettingChanged();
restart();
};

$algoSelect.addEventListener("input", () => onSelectionUpdate());
$updateDelay.addEventListener("input", () => onStepSettingsChange());
$algoSelect.addEventListener("input", () => onAlgorithmChange());
$updateDelay.addEventListener("input", () => onStepSettingsChange());
$stepsPerUpdate.addEventListener("input", () => onStepSettingsChange());
$itemCount.addEventListener("input", () => onItemCountChange());
$restart.addEventListener("click", () => onRestart());
$itemCount.addEventListener("input", () => onItemCountChange());
$restart.addEventListener("click", () => restart());

try {
DeserializeForm($settings, localStorage.getItem("settings") ?? "");
} catch (error) { console.error(error); }
DeserializeForm($settings, window.location.search);

onStepSettingsChange();
onItemCountChange();
onSelectionUpdate();
onAlgorithmChange();
});

0 comments on commit bc8761e

Please sign in to comment.