home · contact · privacy
Use local storage for web client cusotmizations.
[plomrogue2-experiments] / new2 / rogue_chat_nocanvas_monochrome.html
index 0f502ed5d0c5e82465c803e8d3d2b6e691b3075c..54f60c4111e12358a817e1171bee704f0992d7cb 100644 (file)
@@ -18,16 +18,16 @@ square_move_right: <input id="key_square_move_right" type="text" value="d" /> (h
 hex_move_upleft: <input id="key_hex_move_upleft" type="text" value="w" /><br />
 hex_move_upright: <input id="key_hex_move_upright" type="text" value="e" /><br />
 hex_move_right: <input id="key_hex_move_right" type="text" value="d" /><br />
-hex_move_downright: <input id="key_hex_move_downright" type="text" value="c" /><br />
-hex_move_downleft: <input id="key_hex_move_downleft" type="text" value="x" /><br />
-hex_move_left: <input id="key_hex_move_left" type="text" value="s" /><br />
-flatten_: <input id="key_flatten" type="text" value="f" /><br />
-switch_to_chat: <input id="key_switch_to_chat" type="text" value="C" /><br />
-switch_to_play: <input id="key_switch_to_play" type="text" value="P" /><br />
-switch_to_annotate: <input id="key_switch_to_annotate" type="text" value="E" /><br />
-switch_to_portal: <input id="key_switch_to_portal" type="text" value="p" /><br />
+hex_move_downright: <input id="key_hex_move_downright" type="text" value="x" /><br />
+hex_move_downleft: <input id="key_hex_move_downleft" type="text" value="y" /><br />
+hex_move_left: <input id="key_hex_move_left" type="text" value="a" /><br />
+flatten_: <input id="key_flatten" type="text" value="F" /><br />
+switch_to_chat: <input id="key_switch_to_chat" type="text" value="t" /><br />
+switch_to_play: <input id="key_switch_to_play" type="text" value="p" /><br />
+switch_to_annotate: <input id="key_switch_to_annotate" type="text" value="m" /><br />
+switch_to_portal: <input id="key_switch_to_portal" type="text" value="P" /><br />
 switch_to_study: <input id="key_switch_to_study" type="text" value="?" /><br />
-switch_to_edit: <input id="key_switch_to_edit" type="text" value="E" /><br />
+switch_to_edit: <input id="key_switch_to_edit" type="text" value="m" /><br />
 </div>
 <script>
 "use strict";
@@ -35,23 +35,19 @@ let websocket_location = "ws://localhost:8000";
 
 let rows_selector = document.getElementById("n_rows");
 let cols_selector = document.getElementById("n_cols");
-let key_switch_to_chat_selector = document.getElementById("key_switch_to_chat");
-let key_switch_to_play_selector = document.getElementById("key_switch_to_play");
-let key_switch_to_annotate_selector = document.getElementById("key_switch_to_annotate");
-let key_switch_to_portal_selector = document.getElementById("key_switch_to_portal");
-let key_switch_to_study_selector = document.getElementById("key_switch_to_study");
-let key_switch_to_edit_selector = document.getElementById("key_switch_to_edit");
-let key_flatten_selector = document.getElementById("key_flatten");
-let key_hex_move_upleft_selector = document.getElementById("key_hex_move_upleft");
-let key_hex_move_upright_selector = document.getElementById("key_hex_move_upright");
-let key_hex_move_right_selector = document.getElementById("key_hex_move_right");
-let key_hex_move_downright_selector = document.getElementById("key_hex_move_downright");
-let key_hex_move_downleft_selector = document.getElementById("key_hex_move_downleft");
-let key_hex_move_left_selector = document.getElementById("key_hex_move_left");
-let key_square_move_up_selector = document.getElementById("key_square_move_up");
-let key_square_move_left_selector = document.getElementById("key_square_move_left");
-let key_square_move_down_selector = document.getElementById("key_square_move_down");
-let key_square_move_right_selector = document.getElementById("key_square_move_right");
+let key_selectors = document.querySelectorAll('[id^="key_"]');
+
+function restore_selector_value(selector) {
+    let stored_selection = window.localStorage.getItem(selector.id);
+    if (stored_selection) {
+        selector.value = stored_selection;
+    }
+}
+restore_selector_value(rows_selector);
+restore_selector_value(cols_selector);
+for (let key_selector of key_selectors) {
+    restore_selector_value(key_selector);
+}
 
 let terminal = {
   foreground: 'white',
@@ -184,10 +180,10 @@ let server = {
             tui.log_msg("@ server disconnected :(");
             tui.log_msg("@ hint: try the '/reconnect' command");
         };
-       this.websocket.onmessage = this.handle_event;
-    },
+           this.websocket.onmessage = this.handle_event;
+        },
     reconnect: function() {
-       this.reconnect_to(this.url);
+          this.reconnect_to(this.url);
     },
     reconnect_to: function(url) {
         this.websocket.close();
@@ -319,24 +315,9 @@ let tui = {
       this.init_keys();
   },
   init_keys: function() {
-    this.keys = {
-        switch_to_chat: key_switch_to_chat_selector.value,
-        switch_to_play: key_switch_to_play_selector.value,
-        switch_to_annotate: key_switch_to_annotate_selector.value,
-        switch_to_portal: key_switch_to_portal_selector.value,
-        switch_to_study: key_switch_to_study_selector.value,
-        switch_to_edit: key_switch_to_edit_selector.value,
-        flatten: key_flatten_selector.value,
-        hex_move_upleft: key_hex_move_upleft_selector.value,
-        hex_move_upright: key_hex_move_upright_selector.value,
-        hex_move_right: key_hex_move_right_selector.value,
-        hex_move_downright: key_hex_move_downright_selector.value,
-        hex_move_downleft: key_hex_move_downleft_selector.value,
-        hex_move_left: key_hex_move_left_selector.value,
-        square_move_up: key_square_move_up_selector.value,
-        square_move_left: key_square_move_left_selector.value,
-        square_move_down: key_square_move_down_selector.value,
-        square_move_right: key_square_move_right_selector.value,
+    this.keys = {};
+    for (let key_selector of key_selectors) {
+        this.keys[key_selector.id.slice(4)] = key_selector.value;
     }
     if (game.map_geometry == 'Square') {
         this.movement_keys = {
@@ -427,8 +408,8 @@ let tui = {
     this.log_msg("  /nick NAME - re-name yourself to NAME");
     this.log_msg("  /msg USER TEXT - send TEXT to USER");
     this.log_msg("  /help - show this help");
-    this.log_msg("  /P or /play - switch to play mode");
-    this.log_msg("  /? or /study - switch to study mode");
+    this.log_msg("  /" + this.keys.switch_to_play + " or /play - switch to play mode");
+    this.log_msg("  /" + this.keys.switch_to_study + " or /study - switch to study mode");
     this.log_msg("commands common to study and play mode:");
     this.log_msg("  " + movement_keys_desc + " - move");
     this.log_msg("  " + this.keys.switch_to_chat + " - switch to chat mode");
@@ -799,6 +780,7 @@ rows_selector.addEventListener('input', function() {
     if (rows_selector.value % 4 != 0) {
         return;
     }
+    window.localStorage.setItem(rows_selector.id, rows_selector.value);
     terminal.initialize();
     tui.full_refresh();
 }, false);
@@ -806,46 +788,20 @@ cols_selector.addEventListener('input', function() {
     if (cols_selector.value % 4 != 0) {
         return;
     }
+    window.localStorage.setItem(cols_selector.id, cols_selector.value);
     terminal.initialize();
     tui.window_width = terminal.cols / 2,
     tui.full_refresh();
 }, false);
-key_switch_to_chat_selector.addEventListener('input', function() { tui.init_keys(); }, false);
-key_switch_to_play_selector.addEventListener('input', function() { tui.init_keys(); }, false);
-key_switch_to_annotate_selector.addEventListener('input', function() { tui.init_keys(); }, false);
-key_switch_to_portal_selector.addEventListener('input', function() { tui.init_keys(); }, false);
-key_switch_to_study_selector.addEventListener('input', function() { tui.init_keys(); }, false);
-key_switch_to_edit_selector.addEventListener('input', function() { tui.init_keys(); }, false);
-key_flatten_selector.addEventListener('input', function() { tui.init_keys(); }, false);
-key_hex_move_upleft_selector.addEventListener('input', function() { tui.init_keys(); }, false);
-key_hex_move_upright_selector.addEventListener('input', function() { tui.init_keys(); }, false);
-key_hex_move_right_selector.addEventListener('input', function() { tui.init_keys(); }, false);
-key_hex_move_downright_selector.addEventListener('input', function() { tui.init_keys(); }, false);
-key_hex_move_downleft_selector.addEventListener('input', function() { tui.init_keys(); }, false);
-key_hex_move_left_selector.addEventListener('input', function() { tui.init_keys(); }, false);
-key_square_move_up_selector.addEventListener('input', function() { tui.init_keys(); }, false);
-key_square_move_left_selector.addEventListener('input', function() { tui.init_keys(); }, false);
-key_square_move_down_selector.addEventListener('input', function() { tui.init_keys(); }, false);
-key_square_move_right_selector.addEventListener('input', function() { tui.init_keys(); }, false);
+for (let key_selector of key_selectors) {
+    key_selector.addEventListener('input', function() {
+        window.localStorage.setItem(key_selector.id, key_selector.value);
+        tui.init_keys();
+    }, false);
+}
 window.setInterval(function() {
-    if (!(['input', 'n_cols', 'n_rows',
-           'key_switch_to_chat',
-           'key_switch_to_play',
-           'key_switch_to_annotate',
-           'key_switch_to_portal',
-           'key_switch_to_study',
-           'key_switch_to_edit',
-           'key_flatten',
-           'key_hex_move_upleft',
-           'key_hex_move_upright',
-           'key_hex_move_right',
-           'key_hex_move_downright',
-           'key_hex_move_downleft',
-           'key_hex_move_left',
-           'key_square_move_up',
-           'key_square_move_left',
-           'key_square_move_down',
-           'key_square_move_right',].includes(document.activeElement.id))) {
+    if (!(['input', 'n_cols', 'n_rows'].includes(document.activeElement.id)
+          || document.activeElement.id.startsWith('key_'))) {
         tui.inputEl.focus();
     }
 }, 100);