From 9bdeea60b879ea7c799afbbd33434de910b006db Mon Sep 17 00:00:00 2001
From: netpro2k <netpro2k@gmail.com>
Date: Mon, 2 Oct 2017 18:25:27 -0700
Subject: [PATCH] Add back mute-mic component. Edited to work without
 rig-selector

---
 public/index.html          |  2 +-
 src/components/mute-mic.js | 72 ++++++++++++++++++++++++--------------
 2 files changed, 46 insertions(+), 28 deletions(-)

diff --git a/public/index.html b/public/index.html
index 1bed1fd36..87e8d902c 100644
--- a/public/index.html
+++ b/public/index.html
@@ -9,7 +9,7 @@
 </head>
 
 <body>
-  <a-scene networked-scene="adapter: easyrtc; audio: true; debug: true;">
+  <a-scene networked-scene="adapter: easyrtc; audio: true; debug: true;" mute-mic="eventSrc: #right-hand; toggleEvents: menudown, xbuttondown">
     <a-assets>
       <img id="grid" src="assets/grid.png" crossorigin="anonymous">
       <img id="sky" src="https://cdn.aframe.io/360-image-gallery-boilerplate/img/sechelt.jpg" crossorigin="anonymous" />
diff --git a/src/components/mute-mic.js b/src/components/mute-mic.js
index 6469c50cc..12c1ad397 100644
--- a/src/components/mute-mic.js
+++ b/src/components/mute-mic.js
@@ -1,53 +1,71 @@
+const bindAllEvents = function(elements, events, f) {
+  if (!elements || !elements.length) return;
+  for (var el of elements) {
+    events.length &&
+      events.forEach(e => {
+        el.addEventListener(e, f);
+      });
+  }
+};
+const unbindAllEvents = function(elements, events, f) {
+  if (!elements || !elements.length) return;
+  for (var el of elements) {
+    events.length &&
+      events.forEach(e => {
+        el.removeEventListener(e, f);
+      });
+  }
+};
+
 AFRAME.registerComponent("mute-mic", {
   schema: {
     eventSrc: { type: "selectorAll" },
-    toggleEvent: { type: "string" },
-    muteEvent: { type: "string" },
-    unmuteEvent: { type: "string" }
+    toggleEvents: { type: "array" },
+    muteEvents: { type: "array" },
+    unmuteEvents: { type: "array" }
   },
   init: function() {
-    var eventSrcElements = this.data.eventSrc || [this.el];
-
     this.onToggle = this.onToggle.bind(this);
     this.onMute = this.onMute.bind(this);
     this.onUnmute = this.onUnmute.bind(this);
+  },
 
-    for (var el of eventSrcElements) {
-      if (this.data.toggleEvent !== "") {
-        el.addEventListener(this.data.toggleEvent, this.onToggle, false);
-      }
-
-      if (this.data.muteEvent !== "") {
-        el.addEventListener(this.data.muteEvent, this.onMute, false);
-      }
+  play: function() {
+    const { eventSrc, toggleEvents, muteEvents, unmuteEvents } = this.data;
+    console.log(eventSrc);
+    bindAllEvents(eventSrc, toggleEvents, this.onToggle);
+    bindAllEvents(eventSrc, muteEvents, this.onMute);
+    bindAllEvents(eventSrc, unmuteEvents, this.onUnmute);
+  },
 
-      if (this.data.unmuteEvent !== "") {
-        el.addEventListener(this.data.unmuteEvent, this.onUnmute, false);
-      }
-    }
+  pause: function() {
+    const { eventSrc, toggleEvents, muteEvents, unmuteEvents } = this.data;
+    unbindAllEvents(eventSrc, toggleEvents, this.onToggle);
+    unbindAllEvents(eventSrc, muteEvents, this.onMute);
+    unbindAllEvents(eventSrc, unmuteEvents, this.onUnmute);
   },
 
-  onToggle: function () {
-    if (this.el.is('muted')) {
+  onToggle: function() {
+    if (this.el.is("muted")) {
       NAF.connection.adapter.enableMicrophone(true);
-      this.el.removeState('muted');
+      this.el.removeState("muted");
     } else {
       NAF.connection.adapter.enableMicrophone(false);
-      this.el.addState('muted');
+      this.el.addState("muted");
     }
   },
 
-  onMute: function () {
-    if (!this.el.is('muted')) {
+  onMute: function() {
+    if (!this.el.is("muted")) {
       NAF.connection.adapter.enableMicrophone(false);
-      this.el.addState('muted');
+      this.el.addState("muted");
     }
   },
 
-  onUnmute: function () {
-    if (this.el.is('muted')) {
+  onUnmute: function() {
+    if (this.el.is("muted")) {
       NAF.connection.adapter.enableMicrophone(true);
-      this.el.removeState('muted');
+      this.el.removeState("muted");
     }
   }
 });
-- 
GitLab