diff options
| author | Ben Harris <bjh21@bjh21.me.uk> | 2023-08-21 22:45:48 +0100 |
|---|---|---|
| committer | Ben Harris <bjh21@bjh21.me.uk> | 2023-08-21 23:06:32 +0100 |
| commit | b5367ed18ac96f54595fbe6c17fe8a4a897020aa (patch) | |
| tree | 4b81bea5e6c1c1aecd67810a693c59fe642aba86 | |
| parent | 85b00e56a034713a8e34f9e10423ae14dbc810e0 (diff) | |
| download | puzzles-b5367ed18ac96f54595fbe6c17fe8a4a897020aa.zip puzzles-b5367ed18ac96f54595fbe6c17fe8a4a897020aa.tar.gz puzzles-b5367ed18ac96f54595fbe6c17fe8a4a897020aa.tar.bz2 puzzles-b5367ed18ac96f54595fbe6c17fe8a4a897020aa.tar.xz | |
js: load preferences from HTML elements
It will be useful on KaiOS to be able to specify default user
preferences that aren't the standard ones, in the same way that we
specify some environment variables. As with environment variables, we
can now do this be embedding a <script> element in the HTML like this:
<script class="preferences" type="text/plain">
show-labels=true
</script>
These are loaded before the preferences from localStorage, so they just
set defaults and can be overridden by the user (but not on KaiOS yet,
because we still don't have dialogue boxes there).
| -rw-r--r-- | emcclib.js | 13 |
1 files changed, 10 insertions, 3 deletions
@@ -821,9 +821,7 @@ mergeInto(LibraryManager.library, { * pass it back in as a string, via prefs_load_callback. */ js_load_prefs: function(me) { - try { - var prefsdata = - localStorage.getItem(location.pathname + " preferences"); + function load_prefs_from_string(prefsdata) { if (prefsdata !== undefined && prefsdata !== null) { var lenbytes = lengthBytesUTF8(prefsdata) + 1; var dest = _malloc(lenbytes); @@ -833,6 +831,15 @@ mergeInto(LibraryManager.library, { _free(dest); } } + } + // Load any default preferences embedded in HTML. + for (var prefsscript of + document.querySelectorAll("script.preferences")) + load_prefs_from_string(prefsscript.textContent); + // Load saved preferences if they exist. + try { + load_prefs_from_string( + localStorage.getItem(location.pathname + " preferences")); } catch (error) { // Log the error but otherwise pretend the settings were // absent. |