Moved disable microphone into the menu you get when clicking on your own name.
This commit is contained in:
@@ -37,11 +37,13 @@ controls expose the user list, chat, and settings.
|
||||
|
||||
### Buttons
|
||||
|
||||
There are up to three buttons at the top. The most important is the
|
||||
*Enable*/*Disable* button, which switches the microphone on or off.
|
||||
There are up to two buttons at the top. *Enable* starts the microphone
|
||||
when no local microphone stream is active.
|
||||
|
||||
The *Mute* button mutes or unmutes the microphone; the microphone can be
|
||||
muted remotely by the hall moderator, but it cannot be unmuted remotely.
|
||||
To stop and release the local microphone stream, use *Turn microphone off*
|
||||
from the menu opened from your own name.
|
||||
|
||||
### Side menu
|
||||
|
||||
|
||||
+2
-2
@@ -705,7 +705,7 @@ h1 {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#presentbutton, #unpresentbutton {
|
||||
#presentbutton {
|
||||
white-space: nowrap;
|
||||
margin-right: 0.4em;
|
||||
margin-top: .1em;
|
||||
@@ -1112,7 +1112,7 @@ header .collapse:hover {
|
||||
|
||||
|
||||
@media only screen and (max-width: 1024px) {
|
||||
#presentbutton, #unpresentbutton {
|
||||
#presentbutton {
|
||||
width: auto;
|
||||
}
|
||||
.nav-link {
|
||||
|
||||
@@ -40,11 +40,6 @@
|
||||
<i class="fas fa-play" aria-hidden="true"></i><span class="nav-text"> Enable</span>
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button id="unpresentbutton" class="invisible btn btn-cancel" aria-label="Disable microphone">
|
||||
<i class="fas fa-stop" aria-hidden="true"></i><span class="nav-text"> Disable</span>
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button id="mutebutton" class="nav-link nav-button" aria-pressed="false" aria-label="Mute microphone">
|
||||
<span><i class="fas fa-microphone-slash" aria-hidden="true"></i></span>
|
||||
|
||||
+6
-8
@@ -651,11 +651,6 @@ getButtonElement('presentbutton').onclick = async function(e) {
|
||||
}
|
||||
};
|
||||
|
||||
getButtonElement('unpresentbutton').onclick = function(e) {
|
||||
e.preventDefault();
|
||||
closeUpMedia('audio');
|
||||
};
|
||||
|
||||
/**
|
||||
* @param {string} id
|
||||
* @param {boolean} visible
|
||||
@@ -693,7 +688,6 @@ function setButtonsVisibility() {
|
||||
|
||||
// don't allow multiple presentations
|
||||
setVisibility('presentbutton', canPresent && !local);
|
||||
setVisibility('unpresentbutton', local);
|
||||
|
||||
setVisibility('mutebutton', !connected || canPresent);
|
||||
|
||||
@@ -1785,7 +1779,11 @@ function userMenu(elt) {
|
||||
inviteMenu();
|
||||
}});
|
||||
}
|
||||
items.push({label: 'Restart media', onClick: renegotiateStreams});
|
||||
if(findUpMedia('audio'))
|
||||
items.push({label: 'Turn microphone off', onClick: () => {
|
||||
closeUpMedia('audio');
|
||||
}});
|
||||
items.push({label: 'Restart audio connection', onClick: renegotiateStreams});
|
||||
} else {
|
||||
items.push({label: 'Send file', onClick: () => {
|
||||
sendFile(id);
|
||||
@@ -3420,7 +3418,7 @@ function renegotiateStreams() {
|
||||
}
|
||||
|
||||
commands.renegotiate = {
|
||||
description: 'renegotiate media streams',
|
||||
description: 'restart audio connections',
|
||||
f: (c, r) => {
|
||||
renegotiateStreams();
|
||||
}
|
||||
|
||||
@@ -23,6 +23,13 @@ func requireContains(t *testing.T, text, want, context string) {
|
||||
}
|
||||
}
|
||||
|
||||
func requireNotContains(t *testing.T, text, unwanted, context string) {
|
||||
t.Helper()
|
||||
if strings.Contains(text, unwanted) {
|
||||
t.Fatalf("%s unexpectedly contains %q", context, unwanted)
|
||||
}
|
||||
}
|
||||
|
||||
func requireFunctionContains(t *testing.T, source, functionName, want string) {
|
||||
t.Helper()
|
||||
start := strings.Index(source, "function "+functionName+"(")
|
||||
@@ -86,3 +93,16 @@ func TestGlobalShortcutAliasesStayDocumented(t *testing.T) {
|
||||
requireContains(t, js, "if(isGlobalShortcut(e, 'c'))", "chat shortcut")
|
||||
requireContains(t, js, "if(isGlobalShortcut(e, 't'))", "microphone shortcut")
|
||||
}
|
||||
|
||||
func TestMicrophoneHardStopLivesInSelfMenu(t *testing.T) {
|
||||
html := readStaticFile(t, "skald.html")
|
||||
js := readStaticFile(t, "skald.js")
|
||||
|
||||
requireNotContains(t, html, `id="unpresentbutton"`, "toolbar")
|
||||
requireNotContains(t, html, `aria-label="Disable microphone"`, "toolbar")
|
||||
requireNotContains(t, js, "getButtonElement('unpresentbutton')", "toolbar handler")
|
||||
requireNotContains(t, js, "setVisibility('unpresentbutton'", "toolbar visibility")
|
||||
requireFunctionContains(t, js, "userMenu", "Turn microphone off")
|
||||
requireFunctionContains(t, js, "userMenu", "closeUpMedia('audio')")
|
||||
requireFunctionContains(t, js, "userMenu", "Restart audio connection")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user