Fix
authorBenjamin Auder <benjamin.auder@somewhere>
Mon, 30 Mar 2020 19:52:09 +0000 (21:52 +0200)
committerBenjamin Auder <benjamin.auder@somewhere>
Mon, 30 Mar 2020 19:52:09 +0000 (21:52 +0200)
client/src/utils/modalClick.js
client/src/views/Hall.vue
server/models/Game.js

index f4687fd..8709fd1 100644 (file)
@@ -2,5 +2,5 @@ export function processModalClick(e, cb) {
   // Close a modal when click on it but outside focused element
   const data = e.target.dataset;
   if (!!data.checkbox) document.getElementById(data.checkbox).checked = false;
-  if (!!cb) cb();
+  if (!!cb && ["chatWrap","peopleWrap"].includes(e.target.id)) cb();
 }
index d0012fc..fd4bd2d 100644 (file)
@@ -99,7 +99,7 @@ main
       button(@click="issueNewChallenge()") {{ st.tr["Send challenge"] }}
   input#modalPeople.modal(
     type="checkbox"
-    @click="resetSocialColor()"
+    @click="toggleSocialColor()"
   )
   div#peopleWrap(
     role="dialog"
@@ -135,7 +135,7 @@ main
   .row
     .col-sm-12.col-md-10.col-md-offset-1.col-lg-8.col-lg-offset-2
       .button-group
-        button#peopleBtn(@click="openModalPeople()")
+        button#peopleBtn(onClick="window.doClick('modalPeople')")
           | {{ st.tr["Who's there?"] }}
         button(@click="showNewchallengeForm()")
           | {{ st.tr["New game"] }}
@@ -322,7 +322,13 @@ export default {
     );
   },
   mounted: function() {
-    ["peopleWrap", "infoDiv", "newgameDiv"].forEach(eltName => {
+    document.getElementById("peopleWrap")
+      .addEventListener("click", (e) => {
+        processModalClick(e, () => {
+          this.toggleSocialColor("close")
+        });
+      });
+    ["infoDiv", "newgameDiv"].forEach(eltName => {
       document.getElementById(eltName)
         .addEventListener("click", processModalClick);
     });
@@ -423,10 +429,6 @@ export default {
         ["random-" + pc.randomness]: true
       };
     },
-    openModalPeople: function() {
-      window.doClick("modalPeople");
-      document.getElementById("inputChat").focus();
-    },
     anonymousCount: function() {
       let count = 0;
       Object.values(this.people).forEach(p => {
@@ -577,9 +579,11 @@ export default {
       // ==> Moves sent by connected remote player(s) if live game
       this.$router.push("/game/" + g.id);
     },
-    resetSocialColor: function() {
-      // TODO: this is called twice, once on opening an once on closing
-      document.getElementById("peopleBtn").classList.remove("somethingnew");
+    toggleSocialColor: function(action) {
+      if (!action && document.getElementById("modalPeople").checked)
+        document.getElementById("inputChat").focus();
+      else
+        document.getElementById("peopleBtn").classList.remove("somethingnew");
     },
     processChat: function(chat) {
       this.send("newchat", { data: chat });
index ee381d4..ed3fb43 100644 (file)
@@ -313,7 +313,7 @@ const GameModel =
       ) && (
         !obj.score || !!(obj.score.match(/^[012?*\/-]+$/))
       ) && (
-        !obj.chatRead || !(['w','b'].includes(obj.chatRead))
+        !obj.chatRead || ['w','b'].includes(obj.chatRead)
       ) && (
         !obj.scoreMsg || !!(obj.scoreMsg.match(/^[a-zA-Z ]+$/))
       ) && (