keep settings in storage

This commit is contained in:
2022-11-17 22:04:39 +01:00
parent ce551d4a5b
commit 5c5bc50731
6 changed files with 78 additions and 7 deletions

11
package-lock.json generated
View File

@@ -12,6 +12,7 @@
"@codemirror/theme-one-dark": "^6.1.0", "@codemirror/theme-one-dark": "^6.1.0",
"@gkucmierz/utils": "^1.12.1", "@gkucmierz/utils": "^1.12.1",
"codemirror": "^6.0.1", "codemirror": "^6.0.1",
"eventemitter3": "^4.0.7",
"javascript-stringify": "^2.1.0", "javascript-stringify": "^2.1.0",
"meriyah": "^4.3.3", "meriyah": "^4.3.3",
"normalize.css": "^8.0.1", "normalize.css": "^8.0.1",
@@ -3369,6 +3370,11 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/eventemitter3": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
"integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
},
"node_modules/events": { "node_modules/events": {
"version": "3.3.0", "version": "3.3.0",
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
@@ -8738,6 +8744,11 @@
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true "dev": true
}, },
"eventemitter3": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
"integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
},
"events": { "events": {
"version": "3.3.0", "version": "3.3.0",
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",

View File

@@ -13,6 +13,7 @@
"@codemirror/theme-one-dark": "^6.1.0", "@codemirror/theme-one-dark": "^6.1.0",
"@gkucmierz/utils": "^1.12.1", "@gkucmierz/utils": "^1.12.1",
"codemirror": "^6.0.1", "codemirror": "^6.0.1",
"eventemitter3": "^4.0.7",
"javascript-stringify": "^2.1.0", "javascript-stringify": "^2.1.0",
"meriyah": "^4.3.3", "meriyah": "^4.3.3",
"normalize.css": "^8.0.1", "normalize.css": "^8.0.1",

View File

@@ -13,3 +13,7 @@ for (let i = 0; i < 42; ++i) {
} }
`; `;
// storage unique keys:
export const STORAGE_KEY_CODE = 'code';
export const STORAGE_KEY_SETTINGS = 'settings';

View File

@@ -0,0 +1,41 @@
import EventEmitter from 'eventemitter3';
import { STORAGE_KEY_SETTINGS } from '../app.config';
// const ee = new EventEmitter();
let data;
const init = () => {
try {
data = JSON.parse(localStorage.getItem(STORAGE_KEY_SETTINGS) ?? '{}');
} catch(e) {
data = {};
}
};
const save = () => {
const str = JSON.stringify(data);
localStorage.setItem(STORAGE_KEY_SETTINGS, str);
};
const settingsService = {
getItem(item) {
return data[item];
},
setItem(item, value) {
data[item] = value;
save();
},
get() {
return data;
},
set(value) {
data = value;
save();
},
// ee,
};
export default settingsService;
init();

View File

@@ -2,7 +2,7 @@
import Result from '../components/Result.vue'; import Result from '../components/Result.vue';
import Code from '../components/Code.vue'; import Code from '../components/Code.vue';
import { WELCOME_CODE } from '../app.config'; import { WELCOME_CODE, STORAGE_KEY_CODE } from '../app.config';
import Worker from '../file.worker.js?worker'; import Worker from '../file.worker.js?worker';
@@ -13,8 +13,6 @@ import SplitterPanel from 'primevue/splitterpanel';
import { defineComponent, shallowRef } from 'vue'; import { defineComponent, shallowRef } from 'vue';
const STORAGE_KEY_CODE = 'code';
export default defineComponent({ export default defineComponent({
components: { components: {
Splitter, SplitterPanel, Splitter, SplitterPanel,

View File

@@ -2,6 +2,13 @@
import { defineComponent } from 'vue'; import { defineComponent } from 'vue';
import InputSwitch from 'primevue/inputswitch'; import InputSwitch from 'primevue/inputswitch';
import settingsService from '../services/settingsService';
const DEFAULT_SETTINGS = {
autoScroll: false,
autoPrint: true,
};
export default defineComponent({ export default defineComponent({
components: { components: {
InputSwitch, InputSwitch,
@@ -17,10 +24,18 @@ export default defineComponent({
}; };
return { return {
escDown, escDown,
autoScroll: false, so: Object.keys(DEFAULT_SETTINGS).reduce((so, key) => {
autoPrint: true, so[key] = settingsService.getItem(key) ?? DEFAULT_SETTINGS[key];
return so;
}, {}),
}; };
}, },
watch: {
so: {
deep: true,
handler: val => settingsService.set(val),
},
},
mounted() { mounted() {
window.addEventListener('keydown', this.escDown); window.addEventListener('keydown', this.escDown);
}, },
@@ -44,14 +59,15 @@ label {
<h3>App Settings</h3> <h3>App Settings</h3>
<p> <p>
<InputSwitch v-model="autoScroll" inputId="autoScroll" /> <InputSwitch v-model="so.autoScroll" inputId="autoScroll" />
<label for="autoScroll">Auto scroll result</label> <label for="autoScroll">Auto scroll result</label>
</p> </p>
<p> <p>
<InputSwitch v-model="autoPrint" inputId="autoPrint" /> <InputSwitch v-model="so.autoPrint" inputId="autoPrint" />
<label for="autoPrint">Auto print expressions</label> <label for="autoPrint">Auto print expressions</label>
</p> </p>
<pre>{{ so }}</pre>
</div> </div>
</template> </template>