Merge pull request #1013 from Andrew-Gallimore/develop

Fixed & Updated Guest Control-Button UI
This commit is contained in:
Steve Seguin 2023-03-02 10:48:12 -05:00 committed by GitHub
commit 03471cc5e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 506 additions and 402 deletions

View File

@ -1337,114 +1337,123 @@
<div id="overlayMsgs" onclick="this.innerHTML = '';" style="display:none"></div>
<div id="stickyMsgs" class="hidden"></div>
<div id="bigPlayButton" onclick="this.innerHTML = '';" style="display:none"></div>
<!-- Guest & Director Control-Buttons Box -->
<div id="controls_blank" class="hidden controlCenterBox">
<div class="controlsGrid">
<button data-action-type="forward" class="mainonly advanced" title="Move the user to another room, controlled by another director" onclick="directMigrate(this, event);">
<i class="las la-paper-plane"></i>
<span data-translate="forward-to-room">Transfer</span>
</button>
<button data-action-type="direct-chat" class="mainonly" title="Send a Direct Message to this user." onclick="directorSendMessage(this);">
<i class="las la-envelope"></i>
<span data-translate="send-direct-chat">Message</span>
</button>
<span class="director-message-box hidden" data-action-type="messaging-box">
<textarea data-action-type="messaging-box-text" placeholder="Enter your message here"></textarea>
<button data-action-type="messaging-box-close" class="">
<i class="las la-times"></i>
<span data-translate="close">close</span>
<!-- General Controls -->
<div class="row two">
<button data-action-type="forward" class="mainonly advanced" title="Move the user to another room, controlled by another director" onclick="directMigrate(this, event);">
<i class="las la-paper-plane"></i>
<span data-translate="forward-to-room">Transfer</span>
</button>
<span data-action-type="messaging-box-toggle" title="Toggle between the message appearing as a large overlay and as normal chat" >
<i class="las la-bell" style="font-size:170%; color:#FFF; cursor:pointer;"></i>
<button data-action-type="direct-chat" class="mainonly" title="Send a Direct Message to this user." onclick="directorSendMessage(this);">
<i class="las la-envelope"></i>
<span data-translate="send-direct-chat">Message</span>
</button>
<!-- Messaging integrated menu -->
<span class="director-message-box hidden" data-action-type="messaging-box">
<textarea data-action-type="messaging-box-text" placeholder="Enter your message here"></textarea>
<span data-action-type="messaging-box-toggle" title="Toggle between the message appearing as a large overlay and as normal chat">
<i class="las la-bell" style="font-size:170%; color:#FFF; cursor:pointer;"></i>
</span>
<button class="message-close" data-action-type="messaging-box-close">
<i class="las la-times"></i>
<span data-translate="close">close</span>
</button>
<button class="message-send" data-action-type="messaging-box-send">
<i class="las la-reply"></i>
<span data-translate="send-message">send message</span>
</button>
</span>
<button data-action-type="hangup" class="mainonly" title="Force the user to Disconnect. They can always reconnect." onclick="directHangup(this, event);">
<i class="las la-sign-out-alt" style="color:#900"></i>
<span data-translate="disconnect-guest">Hangup</span>
</button>
<button data-action-type="solo-chat" class="mainonly advanced" title="Toggle solo voice chat or hold CTRL/CMD when selecting to make it two-way private." onclick="session.toggleSoloChat(this.dataset.UUID, event);">
<i class="las la-microphone" style="color:#090"></i>
<span data-translate="voice-chat">Solo Talk</span>
</button>
<button data-action-type="solo-video" class="btn-HL-yellow advanced" title="Solo this video everywhere" onclick="requestInfocus(this);">
<i class="las la-user"></i>
<span data-translate="solo-video">Highlight guest</span>
</button>
<button data-action-type="addToScene" class="btn-HL-peach advanced" title="Add this Video to any remote '&scene=1'" onclick="directEnable(this, event);">
<i class="las la-plus-square" style="color:#060"></i>
<span data-translate="add-to-scene">add to scene 1</span>
</button>
</div>
<!-- Volume & Mute Controls -->
<div class="row fourth">
<span class="tooltip" style="border: 0;">
<input data-action-type="volume" type="range" min="0" max="200" value="100" title="Remotely change the volume of this guest; updates on release. Dbl-click to reset." oninput="remoteVolumeUI(this)" onchange="remoteVolume(this);" ondblclick="this.value=100;remoteVolume(this);remoteVolumeUI(this);" />
<span class="tooltiptext" style='overflow: auto;left: 35%;width: 3em;top: -15px;margin: 0;position: absolute;font-family:"Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus,Code2000, Code2001, Code2002, Musica, serif, LastResort;' >100</span>
</span>
<button data-action-type="messaging-box-send">
<i class="las la-reply"></i>
<span data-translate="send-message">send message</span>
<button data-action-type="mute-guest" class="center" value="0" title="Mute this guest everywhere" onclick="remoteMute(this, event);">
<i class="las la-microphone-slash" style="color:#900"></i>
</button>
</span>
<button data-action-type="hangup" class="mainonly" title="Force the user to Disconnect. They can always reconnect." onclick="directHangup(this, event);">
<i class="las la-sign-out-alt" style="color:#900"></i>
<span data-translate="disconnect-guest" >Hangup</span>
</button>
</div>
<button data-action-type="solo-chat" class="mainonly advanced" title="Toggle solo voice chat or hold CTRL/CMD when selecting to make it two-way private." onclick="session.toggleSoloChat(this.dataset.UUID, event);">
<i class="las la-microphone" style="color:#090"></i>
<span data-translate="voice-chat">Solo Talk</span>
</button>
<button data-action-type="addToScene" class="advanced" data-scene="1" title="Add this Video to any remote '&scene=1'" onclick="directEnable(this, event);">
<i class="las la-plus-square" style="color:#060"></i>
<span data-translate="add-to-scene">add to scene 1</span>
</button>
<button data-action-type="solo-video" class="advanced" style="text-shadow: 0px 0px yellow;" title="Solo this video everywhere. Using CTRL (cmd) will limit area to 75%." onclick="requestInfocus(this, event);">
<i class="las la-user"></i>
<span data-translate="solo-video">Highlight guest</span>
</button>
<span class="tooltip" style="border: 0;">
<input data-action-type="volume" type="range" min="0" max="200" value="100" title="Remotely change the volume of this guest; updates on release. Dbl-click to reset." oninput="remoteVolumeUI(this)" onchange="remoteVolume(this);" ondblclick="this.value=100;remoteVolume(this);remoteVolumeUI(this);" />
<span class="tooltiptext" style='overflow: auto;left: 35%;width: 3em;top: -15px;margin: 0;position: absolute;font-family:"Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus,Code2000, Code2001, Code2002, Musica, serif, LastResort;' >100</span>
</span>
<button data-action-type="mute-guest" value="0" title="Mute this guest everywhere" onclick="remoteMute(this, event);">
<i class="las la-microphone-slash" style="color:#900"></i>
<span data-translate="mute-guest" >mute guest</span>
</button>
<!---- /////// BREAK //////// -->
<!---- /////// DROPDOWN BREAK //////// -->
<span class="hideDropMenu" onclick="toggleByDataset('1');getById('chevarrow3').classList.toggle('bottom');getById('chevarrow3').classList.toggle('right');">
<i id="chevarrow3" style="padding:0px 7px 0 3px;" class="chevron right" aria-hidden="true"></i>
<span data-translate="More-scene-options">More scene options</span>
</span>
<span class="hideDropMenu" style="grid-column: 2;"></span>
<button data-action-type="addToScene" class="hidden advanced" data-cluster="1" data-scene="2" title="Add this Video to any remote '&scene=2'" onclick="directEnable(this, event);">
<i class="las la-plus-square" style="color:#060"></i>
<span data-translate="add-to-scene2">add to scene 2</span>
</button>
<button data-action-type="mute-scene" class="hidden" data-cluster="1" title="Remotely Mute this Audio in all remote '&scene' views" onclick="directMute(this, event);">
<i class="las la-microphone-slash" style="color:#900"></i>
<span data-translate="mute-scene" >mute in scene</span>
</button>
<span class="hidden advanced" data-cluster="1" data-action-type="sceneCluster1">
<button data-action-type="addToScene" data-scene="3" title="Add to Scene 3" onclick="directEnable(this, event);">
<span >S3</span>
</button>
<button data-action-type="addToScene" data-scene="4" title="Add to Scene 4" onclick="directEnable(this, event);">
<span >S4</span>
</button>
<button data-action-type="addToScene" data-scene="5" title="Add to Scene 5" onclick="directEnable(this, event);">
<span >S5</span>
</button>
</span>
<span class="hidden advanced" data-cluster="1" data-action-type="sceneCluster2">
<button data-action-type="addToScene" data-scene="6" title="Add to Scene 6" onclick="directEnable(this, event);">
<span >S6</span>
</button>
<button data-action-type="addToScene" data-scene="7" title="Add to Scene 7" onclick="directEnable(this, event);">
<span >S7</span>
</button>
<button data-action-type="addToScene" data-scene="8" title="Add to Scene 8" onclick="directEnable(this, event);">
<span >S8</span>
</button>
</span>
<button class="hidden advanced" data-cluster="1" data-action-type="force-keyframe" style=" background-image: linear-gradient(90deg, #C9F0FF 0%, #FFDFB9 39%, #FFDFDF 70%, #D9FFEC 100%);" title="Force the remote sender to issue a keyframe to all scenes, fixing Pixel Smearing issues." onclick="requestKeyframeScene(this);">
<span data-translate="force-keyframe">Rainbow Puke Fix</span>
</button>
<button class="hidden" data-cluster="1" data-action-type="stats-remote" title="Request the statistics of this video in any active scene" onclick="toggleSceneStats(this);">
<i class="las la-info-circle"></i>
<span data-translate="stats-remote"> Scene Stats</span>
</button>
<div class="group hidden" data-cluster="1">
<!-- General Controls -->
<div class="row two">
<button data-action-type="stats-remote" title="Request the statistics of this video in any active scene" onclick="toggleSceneStats(this);">
<i class="las la-info-circle"></i>
<span data-translate="stats-remote">Scene Stats</span>
</button>
<button data-action-type="mute-scene" title="Remotely Mute this Audio in all remote '&scene' views" onclick="directMute(this, event);">
<i class="las la-microphone-slash" style="color:#900"></i>
<span data-translate="mute-scene">mute in scenes</span>
</button>
</div>
<!-- Row of Scenes -->
<div class="row four advanced">
<button class="btn-HL-peach center" data-action-type="addToScene" data-scene="2" title="Add to Scene 2" onclick="directEnable(this, event);">
<span>S2</span>
</button>
<button class="btn-HL-peach center" data-action-type="addToScene" data-scene="3" title="Add to Scene 3" onclick="directEnable(this, event);">
<span>S3</span>
</button>
<button class="btn-HL-peach center" data-action-type="addToScene" data-scene="4" title="Add to Scene 4" onclick="directEnable(this, event);">
<span>S4</span>
</button>
<button class="btn-HL-peach center" data-action-type="addToScene" data-scene="5" title="Add to Scene 5" onclick="directEnable(this, event);">
<span>S5</span>
</button>
<button class="btn-HL-peach center" data-action-type="addToScene" data-scene="6" title="Add to Scene 6" onclick="directEnable(this, event);">
<span>S6</span>
</button>
<button class="btn-HL-peach center" data-action-type="addToScene" data-scene="7" title="Add to Scene 7" onclick="directEnable(this, event);">
<span>S7</span>
</button>
<button class="btn-HL-peach center" data-action-type="addToScene" data-scene="8" title="Add to Scene 8" onclick="directEnable(this, event);">
<span>S8</span>
</button>
<button class="btn-HL-peach center" data-action-type="addToScene" data-scene="9" title="Add to Scene 9" onclick="directEnable(this, event);">
<span>S9</span>
</button>
</div>
<span class="spacer"></span>
</div>
<!-- Graph Section for Scenes -->
<span class="graphSection hidden" data-action-type="stats-graphs-bitrate" >
<span class="hidden" data-message="true" data-no-scenes="true">No scenes active</span>
</span>
@ -1458,234 +1467,239 @@
</span>
</span>
<!---- /////// BREAK //////// -->
<!---- /////// DROPDOWN BREAK //////// -->
<span class="hideDropMenu" onclick="toggleByDataset('2');getById('chevarrow4').classList.toggle('bottom');getById('chevarrow4').classList.toggle('right');">
<i id="chevarrow4" class="chevron right" aria-hidden="true" style="padding:0px 7px 0 3px;" ></i>
<span data-translate="additional-controls">Additional controls</span>
</span>
<span class="hideDropMenu" style="grid-column: 2;" ></span>
<button class="hidden" data-cluster="2" data-action-type="hide-guest" title="Hide this guest everywhere" onclick="remoteMuteVideo(this, event);">
<i class="las la-video-slash"></i>
<span data-translate="hide-guest" >hide guest</span>
</button>
<div class="group hidden" data-cluster="2">
<!-- General Controls -->
<div class="row two">
<button data-action-type="hide-guest" title="Hide this guest everywhere" onclick="remoteMuteVideo(this, event);">
<i class="las la-video-slash"></i>
<span data-translate="hide-guest">hide guest</span>
</button>
<button class="mainonly" data-action-type="toggle-remote-speaker" title="Toggle the remote guest's speaker output" onclick="remoteSpeakerMute(this, event);">
<i class="las la-volume-off"></i> <span data-translate="toggle-remote-speaker">Deafen Guest</span>
</button>
<button class="mainonly" data-action-type="toggle-remote-display" title="Toggle the remote guest's display output" onclick="remoteDisplayMute(this, event);">
<i class="las la-eye-slash"></i> <span data-translate="toggle-remote-display">Blind Guest</span>
</button>
<button class="mainonly" data-action-type="change-url" title="Remotely reload the guest's page with a new URL" onclick="directPageReload(this, event);">
<i class="las la-sync"></i>
<span data-translate="change-url">Change URL</span>
</button>
<button data-action-type="recorder-local" title="Start Recording this remote stream to this local drive. *experimental*'" onclick="recordVideo(this, event)">
<i class="las la-circle"></i>
<span data-translate="record-local"> Record Local</span>
</button>
<button data-action-type="recorder-remote" title="The Remote Guest will record their local stream to their local drive. *experimental*" onclick="requestVideoRecord(this)">
<i class="las la-circle"></i>
<span data-translate="record-remote"> Record Remote</span>
</button>
<button class="mainonly" data-action-type="change-params" style="display:none" title="Change user parameters" onclick="promptUser('transferSettingsTemplate', this.dataset.UUID);">
<i class="las la-cog"></i>
<span data-translate="change-params">URL Params</span>
</button>
<button class="mainonly" data-action-type="open-file-share" title="Allow the guest to select a file to upload to the director. Once shared, it will show in the chat as a download link." onclick="requestFileUpload(this)">
<i class="las la-file-upload"></i>
<span data-translate="request-upload"> Request File</span>
</button>
<button class="mainonly" data-action-type="create-timer" title="Set a countdown timer that this guest sees. CTRL (cmd) + click to pause." onclick="directTimer(this, event);">
<i class="las la-clock"></i>
<span data-translate="create-timer">Create Timer</span>
</button>
</div>
<!-- Row of Channels -->
<div class="row six advanced">
<button class="btn-HL-blue center" data-action-type="add-channel" title="Set to Audio Channel 1" onclick="changeChannelOffset(this.dataset.UUID, 0);">
<span>C1</span>
</button>
<button class="btn-HL-blue center" data-action-type="add-channel" title="Set to Audio Channel 2" onclick="changeChannelOffset(this.dataset.UUID, 1);">
<span>C2</span>
</button>
<button class="btn-HL-blue center" data-action-type="add-channel" title="Set to Audio Channel 3" onclick="changeChannelOffset(this.dataset.UUID, 2);">
<span>C3</span>
</button>
<button class="btn-HL-blue center" data-action-type="add-channel" title="Set to Audio Channel 4" onclick="changeChannelOffset(this.dataset.UUID,3);">
<span>C4</span>
</button>
<button class="btn-HL-blue center" data-action-type="add-channel" title="Set to Audio Channel 5" onclick="changeChannelOffset(this.dataset.UUID, 4);">
<span>C5</span>
</button>
<button class="btn-HL-blue center" data-action-type="add-channel" title="Set to Audio Channel 6" onclick="changeChannelOffset(this.dataset.UUID, 5);">
<span>C6</span>
</button>
</div>
<!-- Row of Groups -->
<div class="row six advanced">
<button class="btn-HL-green center" data-action-type="toggle-group" data-group="1" title="Add/remove from group 1" onclick="changeGroup(this);">
<span>G1</span>
</button>
<button class="btn-HL-green center" data-action-type="toggle-group" data-group="2" title="Add/remove from group 2" onclick="changeGroup(this);">
<span>G2</span>
</button>
<button class="btn-HL-green center" data-action-type="toggle-group" data-group="3" title="Add/remove from group 3" onclick="changeGroup(this);">
<span>G3</span>
</button>
<button class="btn-HL-green center" data-action-type="toggle-group" data-group="4" title="Add/remove from group 4" onclick="changeGroup(this);">
<span>G4</span>
</button>
<button class="btn-HL-green center" data-action-type="toggle-group" data-group="5" title="Add/remove from group 5" onclick="changeGroup(this);">
<span>G5</span>
</button>
<button class="btn-HL-green center" data-action-type="toggle-group" data-group="6" title="Add/remove from group 6" onclick="changeGroup(this);">
<span>G6</span>
</button>
</div>
<span class="spacer"></span>
<!-- General Controls -->
<div class="row two">
<!-- Mix Order Control -->
<span class="row three advanced" data-action-type="ordering">
<button class="center" data-action-type="order-down" title="Shift this Video Down in Order" onclick="changeOrder(-1,this.dataset.UUID);">
<span data-translate="order-down"><i class="las la-minus"></i></span>
</button>
<span class="orderspan">
<p style="text-align: center;font-size: 150%;" data-action-type="order-value" title="Current Index Order of this Video">0</p>
<p class="order-label">Mix Order</p>
</span>
<button class="center" data-action-type="order-up" title="Shift this Video Up in Order" onclick="changeOrder(1,this.dataset.UUID);">
<i class="las la-plus"></i>
</button>
</span>
<!-- Video Feed Quality -->
<div class="row three">
<button class="center" data-action-type="change-quality1" title="Disable Video Preview" onclick="toggleQualityDirector(0, this.dataset.UUID, this);">
<i class="las la-video-slash"></i>
</button>
<button class="pressed center" data-action-type="change-quality2" title="Low-Quality Preview" onclick="toggleQualityDirector(50, this.dataset.UUID, this);">
<i class="las la-video"></i>
</button>
<button class="center" data-action-type="change-quality3" title="High-Quality Preview" onclick="toggleQualityDirector(1200, this.dataset.UUID, this);">
<i class="las la-binoculars"></i>
</button>
</div>
</div>
<span class="spacer big"></span>
<!-- Further Audio/Video Settings -->
<div class="row two" data-cluster="3">
<button data-action-type="advanced-audio-settings" data-active="false" title="Remote Audio Settings" onclick="requestAudioSettings(this);">
<i class="las la-sliders-h"></i>
<span data-translate="advanced-audio-settings">Audio Settings</span>
</button>
<button class="mainonly" data-action-type="advanced-camera-settings" data-active="false" title="Advanced Video Settings" onclick="requestVideoSettings(this);">
<i class="las la-sliders-h"></i>
<span data-translate="advanced-camera-settings">Video Settings</span>
</button>
</div>
</div>
<button class="hidden mainonly" data-cluster="2" data-action-type="toggle-remote-speaker" title="Toggle the remote guest's speaker output" onclick="remoteSpeakerMute(this, event);">
<i class="las la-volume-off"></i> <span data-translate="toggle-remote-speaker">Deafen Guest</span>
</button>
<button class="hidden mainonly" data-cluster="2" data-action-type="toggle-remote-display" title="Toggle the remote guest's display output" onclick="remoteDisplayMute(this, event);">
<i class="las la-eye-slash"></i> <span data-translate="toggle-remote-display">Blind Guest</span>
</button>
<span class="hidden" data-cluster="2" data-action-type="change-quality">
<button data-action-type="change-quality1" title="Disable Video Preview" onclick="toggleQualityDirector(0, this.dataset.UUID, this);">
<i class="las la-video-slash"></i>
<span class="spacer"></span>
</div>
</div>
<!-- &ShowDirector Control-Buttons Box -->
<div id="controls_directors_blank" class="hidden controlCenterBox">
<div class="controlsGrid">
<!-- General Controls -->
<div class="row two">
<button data-action-type="recorder-local" title="Start Recording this remote stream to this local drive. *experimental*'" onclick="recordLocalVideoToggle();">
<i class="las la-circle"></i>
<span data-translate="record-director-local"> Record</span>
</button>
<button data-action-type="mute-scene" title="Remotely Mute this Audio in all remote '&scene' views" onclick="directMute(this, event);">
<i class="las la-microphone-slash"></i>
<span data-translate="mute-scene">mute in scene</span>
</button>
<button class="pressed" data-action-type="change-quality2" title="Low-Quality Preview" onclick="toggleQualityDirector(50, this.dataset.UUID, this);">
<i class="las la-video"></i>
<button data-action-type="solo-video" class="btn-HL-yellow" title="Solo this video everywhere" onclick="requestInfocus(this);">
<i class="las la-user"></i>
<span data-translate="solo-video-director">Highlight</span>
</button>
<button data-action-type="change-quality3" title="High-Quality Preview" onclick="toggleQualityDirector(1200, this.dataset.UUID, this);">
<i class="las la-binoculars"></i>
<button data-action-type="addToScene" data-scene="1" class="btn-HL-peach" title="Add this Video to any remote '&scene=1'" onclick="directEnable(this, event, true);">
<i class="las la-plus-square"></i>
<span data-translate="add-to-scene">add to scene 1</span>
</button>
</span>
</div>
<span class="hidden advanced" data-cluster="2" data-action-type="ordering">
<button style="width:34px;" data-action-type="order-down" title="Shift this Video Down in Order" onclick="changeOrder(-1,this.dataset.UUID);">
<!-- Row of Scenes -->
<div class="row six advanced">
<button class="btn-HL-peach center" data-action-type="addToScene" data-scene="2" title="Add to Scene 2" onclick="directEnable(this, event);">
<span>S2</span>
</button>
<button class="btn-HL-peach center" data-action-type="addToScene" data-scene="3" title="Add to Scene 3" onclick="directEnable(this, event);">
<span>S3</span>
</button>
<button class="btn-HL-peach center" data-action-type="addToScene" data-scene="4" title="Add to Scene 4" onclick="directEnable(this, event);">
<span>S4</span>
</button>
<button class="btn-HL-peach center" data-action-type="addToScene" data-scene="5" title="Add to Scene 5" onclick="directEnable(this, event);">
<span>S5</span>
</button>
<button class="btn-HL-peach center" data-action-type="addToScene" data-scene="6" title="Add to Scene 6" onclick="directEnable(this, event);">
<span>S6</span>
</button>
<button class="btn-HL-peach center" data-action-type="addToScene" data-scene="7" title="Add to Scene 7" onclick="directEnable(this, event);">
<span>S7</span>
</button>
</div>
<!-- Row of Groups -->
<div class="row six advanced">
<button class="btn-HL-green center" data-action-type="toggle-group" data-group="1" title="Add/remove from group 1" onclick="changeGroupDirector(this);">
<span>G1</span>
</button>
<button class="btn-HL-green center" data-action-type="toggle-group" data-group="2" title="Add/remove from group 2" onclick="changeGroupDirector(this);">
<span>G2</span>
</button>
<button class="btn-HL-green center" data-action-type="toggle-group" data-group="3" title="Add/remove from group 3" onclick="changeGroupDirector(this);">
<span>G3</span>
</button>
<button class="btn-HL-green center" data-action-type="toggle-group" data-group="4" title="Add/remove from group 4" onclick="changeGroupDirector(this);">
<span>G4</span>
</button>
<button class="btn-HL-green center" data-action-type="toggle-group" data-group="5" title="Add/remove from group 5" onclick="changeGroupDirector(this);">
<span>G5</span>
</button>
<button class="btn-HL-green center" data-action-type="toggle-group" data-group="6" title="Add/remove from group 6" onclick="changeGroupDirector(this);">
<span>G6</span>
</button>
</div>
<span class="spacer"></span>
<!-- Mix Order Control -->
<span class="row three advanced" data-action-type="ordering">
<button class="center" data-action-type="order-down" title="Shift this Video Down in Order" onclick="changeOrderDirector(-1);">
<span data-translate="order-down"><i class="las la-minus"></i></span>
</button>
<span class="orderspan">
<div style="text-align: center;font-size: 150%;" data-action-type="order-value" title="Current Index Order of this Video" >0</div>
Mix Order
<p style="text-align: center;font-size: 150%;" data-action-type="order-value-director" title="Current Index Order of this Video">0</p>
<p class="order-label">Mix Order</p>
</span>
<button style="width:34px;margin-left:0;height: 29px;" data-action-type="order-up" title="Shift this Video Up in Order" onclick="changeOrder(1,this.dataset.UUID);">
<button class="center" data-action-type="order-up" title="Shift this Video Up in Order" onclick="changeOrderDirector(1);">
<i class="las la-plus"></i>
</button>
</span>
<button class="hidden mainonly advanced" data-cluster="2" data-action-type="change-url" title="Remotely reload the guest's page with a new URL" onclick="directPageReload(this, event);">
<i class="las la-sync"></i>
<span data-translate="change-url">Change URL</span>
</button>
<button class="hidden mainonly advanced" data-cluster="2" data-action-type="change-params" style="display:none" title="Change user parameters" onclick="promptUser('transferSettingsTemplate', this.dataset.UUID);">
<i class="las la-cog"></i>
<span data-translate="change-params">URL Params</span>
</button>
<button class="hidden" data-cluster="2" data-action-type="recorder-local" title="Start Recording this remote stream to this local drive. *experimental*'" onclick="recordVideo(this, event)">
<i class="las la-circle"></i>
<span data-translate="record-local"> Record Local</span>
</button>
<button class="hidden" data-cluster="2" data-action-type="recorder-remote" title="The Remote Guest will record their local stream to their local drive. *experimental*" onclick="requestVideoRecord(this)">
<i class="las la-circle"></i>
<span data-translate="record-remote"> Record Remote</span>
</button>
<button class="hidden mainonly advanced" data-cluster="2" data-action-type="open-file-share" title="Allow the guest to select a file to upload to the director. Once shared, it will show in the chat as a download link." onclick="requestFileUpload(this)">
<i class="las la-file-upload"></i>
<span data-translate="request-upload"> Request File</span>
</button>
<button class="hidden mainonly" data-cluster="2" data-action-type="create-timer" title="Set a countdown timer that this guest sees. CTRL (cmd) + click to pause." onclick="directTimer(this, event);">
<i class="las la-clock"></i>
<span data-translate="create-timer">Create Timer</span>
</button>
<span class="hidden advanced audiocluster1" data-cluster="2">
<button data-action-type="add-channel" title="Set to Audio Channel 1" onclick="changeChannelOffset(this.dataset.UUID, 0);">
<span >C1</span>
</button>
<button data-action-type="add-channel" title="Set to Audio Channel 2" onclick="changeChannelOffset(this.dataset.UUID, 1);">
<span >C2</span>
</button>
<button data-action-type="add-channel" title="Set to Audio Channel 3" onclick="changeChannelOffset(this.dataset.UUID, 2);">
<span >C3</span>
</button>
</span>
<span class="hidden advanced audiocluster2" data-cluster="2">
<button data-action-type="add-channel" title="Set to Audio Channel 4" onclick="changeChannelOffset(this.dataset.UUID,3);">
<span >C4</span>
</button>
<button data-action-type="add-channel" title="Set to Audio Channel 5" onclick="changeChannelOffset(this.dataset.UUID, 4);">
<span >C5</span>
</button>
<button data-action-type="add-channel" title="Set to Audio Channel 6" onclick="changeChannelOffset(this.dataset.UUID, 5);">
<span >C6</span>
</button>
</span>
<span class="hidden advanced groupcluster1" data-cluster="2">
<button data-action-type="toggle-group" data-group="1" title="Add/remove from group 1" onclick="changeGroup(this);">
<span >G1</span>
</button>
<button data-action-type="toggle-group" data-group="2" title="Add/remove from group 2" onclick="changeGroup(this);">
<span >G2</span>
</button>
<button data-action-type="toggle-group" data-group="3" title="Add/remove from group 3" onclick="changeGroup(this);">
<span >G3</span>
</button>
</span>
<span class="hidden advanced groupcluster2" data-cluster="2">
<button data-action-type="toggle-group" data-group="4" title="Add/remove from group 4" onclick="changeGroup(this);">
<span >G4</span>
</button>
<button data-action-type="toggle-group" data-group="5" title="Add/remove from group 5" onclick="changeGroup(this);">
<span >G5</span>
</button>
<button data-action-type="toggle-group" data-group="6" title="Add/remove from group 6" onclick="changeGroup(this);">
<span >G6</span>
</button>
</span>
<div data-cluster="3">
<button class="hidden" data-cluster="2" data-action-type="advanced-audio-settings" data-active="false" title="Remote Audio Settings" onclick="requestAudioSettings(this);">
<i class="las la-sliders-h"></i>
<span data-translate="advanced-audio-settings">Audio Settings</span>
</button>
<button class="hidden mainonly" data-cluster="2" data-action-type="advanced-camera-settings" data-active="false" title="Advanced Video Settings" onclick="requestVideoSettings(this);">
<i class="las la-sliders-h"></i>
<span data-translate="advanced-camera-settings">Video Settings</span>
</button>
</div>
</div>
</div>
<div id="controls_directors_blank" class="hidden controlCenterBox">
<div class="controlsGrid">
<button data-action-type="addToScene" data-scene="1" title="Add this Video to any remote '&scene=1'" onclick="directEnable(this, event, true);">
<i class="las la-plus-square"></i>
<span data-translate="add-to-scene">add to scene 1</span>
</button>
<button data-action-type="mute-scene" title="Remotely Mute this Audio in all remote '&scene' views" onclick="directMute(this, event);">
<i class="las la-microphone-slash"></i>
<span data-translate="mute-scene" >mute in scene</span>
</button>
<span class="advanced">
<button data-scene="2" data-action-type="addToScene" title="Add to Scene 2" onclick="directEnable(this, event, true);">
<span >S2</span>
</button>
<button data-scene="3" data-action-type="addToScene" title="Add to Scene 3" onclick="directEnable(this, event, true);">
<span >S3</span>
</button>
<button data-scene="4" data-action-type="addToScene" title="Add to Scene 4" onclick="directEnable(this, event, true);">
<span >S4</span>
</button>
</span>
<span class="advanced">
<button data-scene="5" data-action-type="addToScene" title="Add to Scene 5" onclick="directEnable(this, event, true);">
<span >S5</span>
</button>
<button data-scene="6" data-action-type="addToScene" title="Add to Scene 6" onclick="directEnable(this, event, true);">
<span >S6</span>
</button>
<button data-scene="7" data-action-type="addToScene" title="Add to Scene 7" onclick="directEnable(this, event, true);">
<span >S7</span>
</button>
</span>
<span class="advanced">
<button data-action-type="toggle-group" data-group="1" title="Add/remove from group 1" onclick="changeGroupDirector(this);">
<span >G1</span>
</button>
<button data-action-type="toggle-group" data-group="2" title="Add/remove from group 2" onclick="changeGroupDirector(this);">
<span >G2</span>
</button>
<button data-action-type="toggle-group" data-group="3" title="Add/remove from group 3" onclick="changeGroupDirector(this);">
<span >G3</span>
</button>
</span>
<span class="advanced">
<button data-action-type="toggle-group" data-group="4" title="Add/remove from group 4" onclick="changeGroupDirector(this);">
<span >G4</span>
</button>
<button data-action-type="toggle-group" data-group="5" title="Add/remove from group 5" onclick="changeGroupDirector(this);">
<span >G5</span>
</button>
<button data-action-type="toggle-group" data-group="6" title="Add/remove from group 6" onclick="changeGroupDirector(this);">
<span >G6</span>
</button>
</span>
<button data-action-type="force-keyframe" class="advanced" title="Force the remote sender to issue a keyframe to all scenes, fixing Pixel Smearing issues." onclick="session.sendKeyFrameScenes();">
<span data-translate="force-keyframe">Rainbow Puke Fix</span>
</button>
<button data-action-type="solo-video" title="Solo this video everywhere. Using CTRL (cmd) will limit area to 75%." onclick="requestInfocus(this, event);">
<i class="las la-user"></i>
<span data-translate="solo-video-director">Highlight</span>
</button>
<button data-action-type="recorder-local" title="Start Recording this remote stream to this local drive. *experimental*'" onclick="recordLocalVideoToggle();">
<i class="las la-circle"></i>
<span data-translate="record-director-local"> Record</span>
</button>
<span class="advanced">
<button style="width:34px;" data-action-type="order-down" title="Shift this Video Down in Order" onclick="changeOrderDirector(-1);">
<i class="las la-minus"></i>
</button>
<span class="orderspan">
<div style="text-align: center;font-size: 150%;" data-action-type="order-value-director" title="Current Index Order of this Video" >0</div>
Mix Order
</span>
<button style="width:34px;margin-left:0;" data-action-type="order-up" title="Shift this Video Up in Order" onclick="changeOrderDirector(1);">
<span data-translate="order-up"><i class="las la-plus"></i></span>
</button>
</span>
<span class="spacer"></span>
</div>
</div>

8
lib.js
View File

@ -11909,8 +11909,8 @@ function remoteLowerhands(UUID) {
session.sendRequest(msg, UUID);
try{
getById("hands_"+UUID).style.display="none";
session.rpcs[UUID].remoteRaisedHandElement.style.display = "none";
getById("hands_"+UUID).classList.add("hidden");
session.rpcs[UUID].remoteRaisedHandElement.classList.add("hidden");
} catch(e){}
return true;
}
@ -11923,11 +11923,11 @@ function remoteMute(ele, event=false, skipSend=false) {
if (val == 1){
ele.value = 0;
ele.classList.remove("pressed");
ele.innerHTML = '<i class="las la-microphone-slash" style="color:#900"></i> <span data-translate="mute-guest" >mute guest</span>';
ele.innerHTML = '<i class="las la-microphone-slash" style="color:#900"></i>';
} else {
ele.value = 1;
ele.classList.add("pressed");
ele.innerHTML = '<i class="las la-microphone-slash" style="color:#900"></i> <span data-translate="unmute-guest" >un-mute guest</span>';
ele.innerHTML = '<i class="las la-microphone-slash" style="color:#900"></i>';
}
miniTranslate(ele);
}

255
main.css
View File

@ -22,7 +22,6 @@
--myvideo-height:auto;
--myvideo-background: #FFF1;
--video-background-image: url("data:image/svg+xml,%3Csvg viewBox='-42 0 512 512.002' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m210.351562 246.632812c33.882813 0 63.222657-12.152343 87.195313-36.128906 23.972656-23.972656 36.125-53.304687 36.125-87.191406 0-33.875-12.152344-63.210938-36.128906-87.191406-23.976563-23.96875-53.3125-36.121094-87.191407-36.121094-33.886718 0-63.21875 12.152344-87.191406 36.125s-36.128906 53.308594-36.128906 87.1875c0 33.886719 12.15625 63.222656 36.132812 87.195312 23.976563 23.96875 53.3125 36.125 87.1875 36.125zm0 0'/%3E%3Cpath d='m426.128906 393.703125c-.691406-9.976563-2.089844-20.859375-4.148437-32.351563-2.078125-11.578124-4.753907-22.523437-7.957031-32.527343-3.308594-10.339844-7.808594-20.550781-13.371094-30.335938-5.773438-10.15625-12.554688-19-20.164063-26.277343-7.957031-7.613282-17.699219-13.734376-28.964843-18.199219-11.226563-4.441407-23.667969-6.691407-36.976563-6.691407-5.226563 0-10.28125 2.144532-20.042969 8.5-6.007812 3.917969-13.035156 8.449219-20.878906 13.460938-6.707031 4.273438-15.792969 8.277344-27.015625 11.902344-10.949219 3.542968-22.066406 5.339844-33.039063 5.339844-10.972656 0-22.085937-1.796876-33.046874-5.339844-11.210938-3.621094-20.296876-7.625-26.996094-11.898438-7.769532-4.964844-14.800782-9.496094-20.898438-13.46875-9.75-6.355468-14.808594-8.5-20.035156-8.5-13.3125 0-25.75 2.253906-36.972656 6.699219-11.257813 4.457031-21.003906 10.578125-28.96875 18.199219-7.605469 7.28125-14.390625 16.121094-20.15625 26.273437-5.558594 9.785157-10.058594 19.992188-13.371094 30.339844-3.199219 10.003906-5.875 20.945313-7.953125 32.523437-2.058594 11.476563-3.457031 22.363282-4.148437 32.363282-.679688 9.796875-1.023438 19.964844-1.023438 30.234375 0 26.726562 8.496094 48.363281 25.25 64.320312 16.546875 15.746094 38.441406 23.734375 65.066406 23.734375h246.53125c26.625 0 48.511719-7.984375 65.0625-23.734375 16.757813-15.945312 25.253906-37.585937 25.253906-64.324219-.003906-10.316406-.351562-20.492187-1.035156-30.242187zm0 0'/%3E%3C/svg%3E");
--advanced-mode: inline-block;
--background-main-image: unset;
--show-codirectors: inline-block;
--full-screen-button: inherit;
@ -57,15 +56,6 @@ table {
margin:10px;
}
.hideDropMenu{
user-select: none;
grid-column: 1;
width:100%;
margin:5px 0;
font-size:80%;
cursor: pointer;
}
#audioSource3{
background-color: #FFF;
}
@ -607,15 +597,6 @@ body.darktheme .credits>a:visited {
color: #FFF;
}
.pressed {
background: #1e0000;
-webkit-box-shadow: inset 0px 0px 1px #b90000;
-moz-box-shadow: inset 0px 0px 1px #b90000;
box-shadow: inset 0px 0px 1px #b90000;
outline: none;
color: white;
}
.altpress {
background: #673100 !important;
-webkit-box-shadow: inset 0px 0px 1px #b90000;
@ -625,11 +606,16 @@ body.darktheme .credits>a:visited {
color: white;
}
.row {
#mainmenu .row {
align-content: center;
text-align: center;
margin-top: 10px;
}
#mainmenu .row:after {
content: "";
display: table;
clear: both;
}
hr {
height: 2px;
@ -638,23 +624,6 @@ hr {
background-color: gray;
}
.orderspan{
font-size: 50%;
display: inline-block;
margin: auto;
text-align: center;
width: 49px;
height: 22px;
top: 5px;
position: relative;
user-select: none;
}
.row:after {
content: "";
display: table;
clear: both;
}
.vidcon {
max-width: 100%;
@ -2098,14 +2067,20 @@ label {
animation: greyout 3s;
opacity: 0.3!important;
}
.graphSection{
max-width:50%;
}
.graphSection>span {
font-size: 10px;
display: block;
margin: 5.5px;
margin-top: 3px;
min-height: 9px;
display: block;
margin: 5px;
margin-top: 0px;
margin-right: 0px;
height: 50px;
}
.graphSection>span:last-child{
margin-bottom: 0px;
}
span[data-action-type="stats-graphs-details-container"]>span{
padding: 1px;
display:block;
@ -2184,9 +2159,12 @@ span[data-action-type="stats-graphs-details-container"]>span{
}
.canvasStats{
background-color: black;
width: calc(100% - 10px);
width: calc(100%);
height: 50px;
margin: 5px;
margin: 0 5px 5px 0;
}
.canvasStats:last-child{
margin: 0 5px 0 0;
}
.manualInput{
width: 55px;
@ -2211,8 +2189,10 @@ span[data-action-type="stats-graphs-details-container"]>span{
.lowerRaisedHand{
margin: auto;
margin-bottom:10px;
background-color:yellow;
margin-left: 5px;
margin-bottom: 10px;
background-color: yellow;
width: calc(100% - 10px);
}
.float {
opacity: 0.8;
@ -2309,24 +2289,6 @@ iframe {
margin-right: 0;
text-align: right;
}
.director-message-box{
display: flex;
flex: 1 100%;
flex-wrap: wrap;
}
.director-message-box textarea {
margin: 5px;
flex: 1 100%;
padding: 5px;
}
.director-message-box > button {
margin: 5px;
text-align: right;
}
.director-message-box > span {
top: 5px;
position: relative;
}
img {
max-width: 100%;
@ -2929,10 +2891,10 @@ button.toggleSettings{
}
.hidden {
display:none!important;
display: none !important;
visibility: hidden;
width:0px;
height:0px;
width: 0px;
height: 0px;
opacity: 0;
}
.grabLinks a:visited {
@ -3464,40 +3426,148 @@ div#roomnotes2 {
.directorsgrid button {
text-transform: lowercase;
}
/* ---- DIRECTORS PAGE - Guest Controls Box ---- */
.controlsGrid {
display: flex;
flex-wrap: wrap;
}
.controlsGrid button {
margin: 5px;
text-align: right;
flex: 0 1 calc(50% - 10px);
}
.controlsGrid > div {
.controlsGrid .group {
width: 100%;
display: flex;
flex-direction: column;
}
.controlsGrid input {
margin: 5px;
.controlsGrid .row {
width: 100%;
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-top: 5px;
margin-bottom: 5px;
}
.controlsGrid .row > .row {
margin: 0;
}
.controlsGrid .row.two > * {
flex: 1 33%;
}
.controlsGrid .row.three > * {
flex: 1 25%;
}
.controlsGrid .row.four > * {
flex: 1 20%;
}
.controlsGrid .row.six > * {
flex: 1 13%;
}
button[data-action-type="messaging-box-close"] {
flex: 0 1 25%;
.controlsGrid button {
margin: 0;
text-align: right;
}
button[data-action-type="messaging-box-send"] {
flex: 1 0 50%
.controlsGrid button.center {
display: flex;
align-self: center;
justify-content: center;
padding: 0 5px;
padding-top: 7px;
padding-bottom: 6px;
}
.controlsGrid > span.tooltip {
.controlsGrid .spacer {
width: 100%;
height: 5px;
}
.controlsGrid .spacer.big {
height: 15px;
}
/* Specitic CSS for different elements inside the guest control-buttons */
.controlsGrid .director-message-box {
flex: 1 100% !important;
padding: 10px;
background: rgba(0, 0, 0, .15);
display: flex;
flex-wrap: wrap;
gap: 5px;
}
.controlsGrid .director-message-box textarea {
flex: 1 100%;
padding: 5px;
}
.controlsGrid .director-message-box .message-close {
flex: 1;
}
.controlsGrid .director-message-box .message-send {
flex: 1 33%;
}
.controlsGrid .tooltip {
flex: 1 calc(50% - 10px);
display: flex;
flex: 1 calc(50% - 10px);
align-items: center;
}
.advanced {
display: var(--advanced-mode);
.controlsGrid .tooltip input[type=range] {
margin: 0;
}
.controlsGrid .tooltip .tooltiptext {
top: -25px;
}
.controlsGrid .hideDropMenu{
user-select: none;
grid-column: 1;
width: 100%;
margin-top: 10px;
margin-bottom: 5px;
font-size: 80%;
cursor: pointer;
}
.controlsGrid .orderspan {
font-size: 50%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
position: relative;
user-select: none;
}
.controlsGrid .orderspan .order-label {
width: max-content;
}
/* Hightlights for buttons in the guest control-buttons */
.controlsGrid .btn-HL-yellow {
background: rgb(255, 235, 154);
}
.controlsGrid .btn-HL-peach {
background: rgb(243, 197, 242);
}
.controlsGrid .btn-HL-green {
background: rgb(130, 223, 128);
}
.controlsGrid .btn-HL-blue {
background: rgb(170, 204, 248);
}
/* Hides buttons that are supposed to be hidden when &novice is added to URL */
.controlsGrid .advanced.hide {
display: none;
}
#widget {
position: absolute;
@ -3516,11 +3586,9 @@ button[data-action-type="messaging-box-send"] {
top: 8px;
right: 10px;
}
.advanced {
display: var(--advanced-mode);
}
.controlCenterBox{
margin-top:2px;
padding: 0 5px;
}
.contolboxLabel {
@ -4809,4 +4877,17 @@ body.darktheme .startupWarning>.las {
}
body.darktheme .invite_setting_group_links a {
color:#d2e5ff!important;
}
/* ---- BASIC CSS CLASSES ---- */
.pressed {
background: #1e0000 !important;
-webkit-box-shadow: inset 0px 0px 1px #b90000;
-moz-box-shadow: inset 0px 0px 1px #b90000;
box-shadow: inset 0px 0px 1px #b90000;
outline: none;
color: white;
}

15
main.js
View File

@ -242,7 +242,10 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
}
if (urlParams.has('novice') ) {
document.documentElement.style.setProperty('--advanced-mode', "none"); // hide advanced items
// Hiding advanced items
document.querySelectorAll(".advanced").forEach(element => {
element.classList.add("hide");
})
}
if (urlParams.has('avatarimg') || urlParams.has('bgimage') || urlParams.has('bgimg')) { // URL or data:base64 image. Becomes local to this viewer only. This is like &avatar, but slightly different. Just CSS in this case
@ -5032,9 +5035,15 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
if ("advancedMode" in e.data){
if (e.data.advancedMode){
document.documentElement.style.setProperty('--advanced-mode', "inline-block"); // show advanced items
// Un-hiding advanced items
document.querySelectorAll(".advanced").forEach(element => {
element.classList.remove("hide");
})
} else {
document.documentElement.style.setProperty('--advanced-mode', "none"); // hide advanced items
// Hiding advanced items
document.querySelectorAll(".advanced").forEach(element => {
element.classList.add("hide");
})
}
}