1 Commits

Author SHA1 Message Date
Joel Calado
77005f5c2d director UI update 2021-02-22 19:46:11 +00:00
7 changed files with 779 additions and 1080 deletions

View File

@@ -55,7 +55,7 @@
}
</style>
<link rel="stylesheet" href="./lineawesome/css/line-awesome.min.css" />
<link rel="stylesheet" href="./main.css?ver=46" />
<link rel="stylesheet" href="./main.css?ver=43" />
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/adapter.min.js"></script>
</head>
<body id="main" class="hidden">
@@ -67,7 +67,7 @@
<link itemprop="url" href="./media/obsNinja_logo_full.png" />
</span>
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/CodecsHandler.js?ver=26"></script>
<script type="text/javascript" crossorigin="anonymous" src="./webrtc.js?ver=177"></script>
<script type="text/javascript" crossorigin="anonymous" src="./webrtc.js?ver=174"></script>
<input id="zoomSlider" type="range" style="display: none;" />
<div id="header">
<a id="logoname" href="./" style="text-decoration: none; color: white; margin: 2px;">
@@ -76,7 +76,7 @@
</span>
</a>
<div id="head1" style="display: inline-block; padding:1px; position: relative;">
<input type="text" autocorrect="off" autocapitalize="none" id="joinroomID" name="joinroomID" size="22" placeholder="Join by Room Name here" alt="Enter a room name to join" title="Enter a room name to quick join" onkeyup="jumptoroom(event)"/>
<input type="text" autocorrect="off" autocapitalize="none" id="joinroomID" autofocus name="joinroomID" size="22" placeholder="Join by Room Name here" alt="Enter a room name to join" title="Enter a room name to quick join" onkeyup="jumptoroom(event)"/>
<button onclick="jumptoroom();" role="button" aria-pressed="false" alt="Join room" title="Join room" >GO</button>
</div>
<div id="head3" style="display: inline-block;" class="advanced">
@@ -651,7 +651,8 @@
The VP9 codec on Chromium-based browsers seems to lag when screen-sharing at the moment. Use the OBS Virtual Camera as a capture source instead.
</li>
<br />
🥳 Site Updated: <a href="https://github.com/steveseguin/obsninja/wiki/v16-release-notes">Fed 3rd, 2021</a>. The previous version can be found at
🥳 Site Updated: Jan 30th, 2021. The previous version can be found at
<a href="https://obs.ninja/v15/">https://obs.ninja/v15/</a> if you are having new issues.
<br />
@@ -908,105 +909,104 @@
</div>
</a>
</div>
<div></div>
<div id='guestFeeds' style="display:none"><div id='deleteme'>
<div class='vidcon' style='margin: 15px 20px 0 0; min-height: 300px;text-align: center;'><h2>Guest 1</h2><i class='las la-user-circle' style='font-size:8em; margin: 20px 0px;' aria-hidden='true'></i></div>
<div class='vidcon' style='margin: 15px 20px 0 0; min-height: 300px;text-align: center;'><h2>Guest 2</h2><i class='las la-user-circle' style='font-size:8em; margin: 20px 0px;' aria-hidden='true'></i></div>
<div class='vidcon' style='margin: 15px 20px 0 0; min-height: 300px;text-align: center;'><h2>Guest 3</h2><i class='las la-user-circle' style='font-size:8em; margin: 20px 0px;' aria-hidden='true'></i></div>
<div class='vidcon' style='margin: 15px 20px 0 0; min-height: 300px;text-align: center;'><h2>Guest 4</h2><i class='las la-user-circle' style='font-size:8em; margin: 20px 0px;' aria-hidden='true'></i></div>
<h4 style='color:#CCC;margin:20px 20px 0 20px;' data-translate='more-than-four-can-join' >These four guest slots are just for demonstration. More than four guests can actually join a room.</h4>
</div></div>
<div id='guestFeeds' class='placeholders' style="display:none">
<div class='vidcon'><h2>Guest 1</h2><i class='las la-user-circle' style='font-size:8em; margin: 20px 0px;' aria-hidden='true'></i></div>
<div class='vidcon'><h2>Guest 2</h2><i class='las la-user-circle' style='font-size:8em; margin: 20px 0px;' aria-hidden='true'></i></div>
<div class='vidcon'><h2>Guest 3</h2><i class='las la-user-circle' style='font-size:8em; margin: 20px 0px;' aria-hidden='true'></i></div>
<div class='vidcon'><h2>Guest 4</h2><i class='las la-user-circle' style='font-size:8em; margin: 20px 0px;' aria-hidden='true'></i></div>
</div>
</div>
<div id="overlayMsgs" onclick="function(e){e.target.innerHTML = '';}" style="display:none"></div>
<div id="bigPlayButton" onclick="function(e){e.target.innerHTML = '';}" style="display:none"></div>
<div id="controls_blank" style="display: none;">
<div class="controlsGrid">
<button data-action-type="forward" data-value="0" 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" title="Send a Direct Message to this user." onclick="directorSendMessage(this);">
<span data-translate="send-direct-chat"><i class="las la-envelope"></i> Message</span>
</button>
<button data-action-type="addToScene" style="grid-column: 1;" data-value="0" title="Add this Video to any remote '&scene=1'" onclick="directEnable(this, event);">
<i class="las la-plus-square"></i>
<span data-translate="add-to-scene">Add to Scene</span>
</button>
<button data-action-type="mute-scene" style="grid-column: 2;" 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>
<font class="tooltip" style="height: 0; border: 0;">
<input data-action-type="volume" type="range" min="0" max="200" value="100" title="Remotely change the volume of this guest" oninput="remoteVolumeUI(this)" onclick="remoteVolume(this);" style="grid-column: 1; margin:5px; width: 93%; position: relative;top: 0.6em; background-color:#fff0;"/><span class="tooltiptext" style='float: right; overflow: auto; left: 40px; width: 2.5em; top: -13px; margin: 0; position:relative;font-family:"Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus,Code2000, Code2001, Code2002, Musica, serif, LastResort;' >100</span></font>
<button data-action-type="mute-guest" style="grid-column: 2;" title="Mute this guest everywhere" onclick="remoteMute(this, event);">
<i class="las la-microphone-slash"></i>
<span data-translate="mute-guest" >mute guest</span>
</button>
<span>
<button style="width: 35.2px" data-action-type="change-quality1" title="Disable Video Preview" onclick="toggleQualityDirector(0, this.dataset.UUID, this);">
<span data-translate="change-to-low-quality">&nbsp;&nbsp;<i class="las la-video-slash"></i></span>
</button>
<button class="pressed" style="width:35.2px;" data-action-type="change-quality2" title="Low-Quality Preview" onclick="toggleQualityDirector(50, this.dataset.UUID, this);">
<span data-translate="change-to-medium-quality">&nbsp;&nbsp;<i class="las la-video"></i></span>
</button>
<button style="width: 35.2px" data-action-type="change-quality3" title="High-Quality Preview" onclick="toggleQualityDirector(1200, this.dataset.UUID, this);">
<span data-translate="change-to-high-quality">&nbsp;&nbsp;<i class="las la-binoculars"></i></span>
</button>
<div class="control_panel">
<h2 onclick="expandPanel(this)"><i class="las la-caret-right"></i>Guest</h2>
<span class="info">
<i class="las la-info-circle"></i>
</span>
<button data-action-type="hangup" data-value="0" title="Force the user to Disconnect. They can always reconnect." onclick="directHangup(this, event);">
<i class="las la-sign-out-alt"></i>
<span data-translate="disconnect-guest" >Hangup</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" data-value="0" 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="" data-action-type="solo-chat" title="Toggle Solo Voice Chat" onclick="session.toggleSoloChat(this.dataset.UUID);">
<span data-translate="voice-chat"><i class="las la-microphone"></i> Solo Talk</span>
</button>
<span>
<button style="width:34px;" 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>
<div class="controlsGrid">
<button data-action-type="forward" data-value="0" 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 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
<button data-action-type="direct-chat" title="Send a Direct Message to this user." onclick="directorSendMessage(this);">
<span data-translate="send-direct-chat"><i class="las la-envelope"></i> Message</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" data-value="0" 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 data-action-type="hangup" data-value="0" title="Force the user to Disconnect. They can always reconnect." onclick="directHangup(this, event);">
<i class="las la-sign-out-alt"></i>
<span data-translate="disconnect-guest" >Hangup</span>
</button>
</div>
</div>
<div class="control_panel">
<h2 onclick="expandPanel(this)"><i class="las la-caret-right"></i>Every other setting</h2>
<span class="info">
<i class="las la-info-circle"></i>
</span>
<div class="controlsGrid">
<button data-action-type="addToScene" style="grid-column: 1;" data-value="0" title="Add this Video to any remote '&scene=1'" onclick="directEnable(this, event);">
<i class="las la-plus-square"></i>
<span data-translate="add-to-scene">Add to Scene</span>
</button>
<button data-action-type="mute-scene" style="grid-column: 2;" 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>
<font class="tooltip" style="height: 0; border: 0;">
<input data-action-type="volume" type="range" min="0" max="200" value="100" title="Remotely change the volume of this guest" oninput="remoteVolumeUI(this)" onclick="remoteVolume(this);" style="grid-column: 1; margin:5px; width: 93%; position: relative;top: 0.6em; background-color:#fff0;"/><span class="tooltiptext" style='float: right; overflow: auto; left: 40px; width: 2.5em; top: -13px; margin: 0; position:relative;font-family:"Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus,Code2000, Code2001, Code2002, Musica, serif, LastResort;' >100</span></font>
<button data-action-type="mute-guest" style="grid-column: 2;" title="Mute this guest everywhere" onclick="remoteMute(this, event);">
<i class="las la-microphone-slash"></i>
<span data-translate="mute-guest" >mute guest</span>
</button>
<button class="" data-action-type="solo-chat" title="Toggle Solo Voice Chat" onclick="session.toggleSoloChat(this.dataset.UUID);">
<span data-translate="voice-chat"><i class="las la-microphone"></i> Solo Talk</span>
</button>
<span>
<button style="width:34px;" 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">
<div style="text-align: center;font-size: 150%;" data-action-type="order-value" 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="changeOrder(1,this.dataset.UUID);">
<span data-translate="order-up"><i class="las la-plus"></i></span>
</button>
</span>
<button style="width:34px;margin-left:0;" data-action-type="order-up" title="Shift this Video Up in Order" onclick="changeOrder(1,this.dataset.UUID);">
<span data-translate="order-up"><i class="las la-plus"></i></span>
<button data-action-type="toggle-remote-speaker" style="grid-column: 1;" 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>
</span>
<button data-action-type="toggle-remote-display" style="grid-column: 2;" 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="" data-action-type="advanced-audio-settings" data-active="false" style="grid-column: 1;" title="Remote Audio Settings" onclick="requestAudioSettings(this);">
<span data-translate="advanced-audio-settings"><i class="las la-sliders-h"></i> Audio Settings</span>
</button>
<button class="" data-action-type="advanced-camera-settings" data-active="false" style="grid-column: 2;" title="Advanced Video Settings" onclick="requestVideoSettings(this);">
<span data-translate="advanced-camera-settings"><i class="las la-sliders-h"></i> Video Settings</span>
</button>
<div id='advanced_audio_director_' class='advanced'></div>
<div id='advanced_video_director_' class='advanced'></div>
</div>
</div>
<button data-action-type="toggle-remote-speaker" style="grid-column: 1;" 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 data-action-type="toggle-remote-display" style="grid-column: 2;" 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="" data-action-type="advanced-audio-settings" data-active="false" style="grid-column: 1;" title="Remote Audio Settings" onclick="requestAudioSettings(this);">
<span data-translate="advanced-audio-settings"><i class="las la-sliders-h"></i> Audio Settings</span>
</button>
<button class="" data-action-type="advanced-camera-settings" data-active="false" style="grid-column: 2;" title="Advanced Video Settings" onclick="requestVideoSettings(this);">
<span data-translate="advanced-camera-settings"><i class="las la-sliders-h"></i> Video Settings</span>
</button>
</div>
</div>
<div id="popupSelector" style="display:none;">
@@ -1157,7 +1157,7 @@
}
var session = WebRTC.Media; // session is a required global variable if configuring manually. Run before loading main.js but after webrtc.js.
session.version = "16.2";
session.version = "16.0";
session.streamID = session.generateStreamID(); // randomly generates a streamID for this session. You can set your own programmatically if needed
session.defaultPassword = "someEncryptionKey123"; // Disabling improves compatibility and is helpful for debugging.
@@ -1222,7 +1222,7 @@
<script type="text/javascript" id="main-js" src="./main.js" data-translation="blank"></script>
<script type="text/javascript" crossorigin="anonymous" id="mixer-js" src="./mixer.js?ver=2"></script>
-->
<script type="text/javascript" crossorigin="anonymous" id="main-js" src="./main.js?ver=163"></script>
<script type="text/javascript" crossorigin="anonymous" id="main-js" src="./main.js?ver=160"></script>
<script type="text/javascript">
setTimeout(function(){ // lazy load
var script = document.createElement('script');

308
main.css
View File

@@ -6,7 +6,14 @@
--red-accent: #553737;
--green-accent: #3f4f50;
--olive-accent: #535D32;
--regular-margin: 10px;
--regular-margin: 10px;
--director-tile-grid-width: 70fr;
--director-tile-backdrop-color: #626262;
--director-tile-content-background-color: #494949;
--director-tile-content-label-color: #ffffff;
--director-button-background-color: #242524;
--director-button-label-color: #ffffff;
--director-button-active-background-color: #868686;
}
* {
@@ -114,7 +121,7 @@ a:active {
color: #D9E4EB;
}
input {
input:not(input[type="range"]) {
border-radius: 4px;
padding: 2px;
-webkit-app-region: no-drag;
@@ -326,19 +333,6 @@ hr {
clear: both;
}
.vidcon {
max-width: 100%;
border: 0;
}
.vidcon:nth-of-type(3n) {
grid-column: 2;
}
.vidcon:nth-of-type(3n) {
grid-row: span;
}
.tile {
object-fit: contain;
background-color: black;
@@ -388,19 +382,18 @@ hr {
overflow-y: auto !important;
}
.directorsgrid .vidcon video {
max-width: 100%;
padding: 0 5px;
width: 100%;
height: 148px;
.directorsgrid .vidcon {
background: var(--director-tile-backdrop-color);
color: #FCFCFC;
vertical-align: top;
text-align: center;
}
.directorsgrid .vidcon {
display: inline-block !important;
width: 269.7px !important;
background: #7E7E7E;
color: #FCFCFC;
vertical-align: top;
.directorsgrid .vidcon video {
max-width: 100%;
width: 100%;
height: auto;
}
.directorsgrid .vidcon>.las {
@@ -409,6 +402,63 @@ hr {
width: 90%;
}
.control_panel {
background: #494949;
margin: 7px;
padding: 10px;
border-radius: 6px;
position: relative;
}
.control_panel h2 {
font-size: 0.8em;
text-transform: uppercase;
font-weight: bold;
text-align: left;
cursor: pointer;
}
.control_panel h2 i {
margin-right: 5px;
}
.control_panel .info {
margin-right: 10px;
position: absolute;
top: 10px;
right: -5px;
}
.control_panel_sub {
grid-column: span 2;
margin-left: 10%;
}
.control_panel_quality_toggles {
justify-content: flex-end;
display: flex;
gap: 4px;
}
.control_panel_quality_toggles button {
background-color: var(--director-button-background-color);
color: var(--director-button-label-color);
text-transform: uppercase !important;
border-radius: 6px;
font-weight: bold;
padding: 5px 8px;
}
.control_panel_quality_toggles button.pressed {
box-shadow: none;
background: var(--director-button-active-background-color);
}
.active .controlsGrid {
margin-top: 1em;
}
.puslate {
border-radius: 50%;
box-shadow: 0 0 0 0 rgba(14, 19, 26, 1);
@@ -483,17 +533,24 @@ button.glyphicon-button.active.focus {
position: absolute;
pointer-events: auto;
}
#container.vidcon {
height:100%;
}
@media only screen and (max-width: 700px){
#subControlButtons {
padding: 2px 4px;
transform: scale(0.9);
}
#controlButtons {
transform: scale(0.8) translateY(20%);
height: 54px;
}
}
@media only screen and (max-width: 400px){
#subControlButtons {
padding: 1px 2px;
zoom: .9;
transform: scale(0.8);
}
#controlButtons {
transform: scale(0.8) translateY(20%);
height: 48px;
}
}
@media only screen and (max-width: 300px){
@@ -502,80 +559,40 @@ button.glyphicon-button.active.focus {
}
}
@media only screen and (max-height: 700px){
#subControlButtons {
padding: 0;
bottom: 0em;
transform: scale(0.9);
}
#controlButtons {
height: 54px;
}
}
@media only screen and (max-height: 540px){
#subControlButtons {
transform: scale(0.90);
padding: 0;
bottom: 0em;
transform: scale(0.85);
}
#gridlayout>#container.vidcon {
height:90%
}
#controlButtons {
height:54px;
}
height: 51px;
}
}
@media only screen and (max-height: 400px){
#subControlButtons {
transform: scale(0.85);
padding: 0;
bottom: 0em;
transform: scale(0.8);
}
#controlButtons {
height: 48px;
}
#header{
display:none;
}
#gridlayout>#container.vidcon {
height:85%
}
#controlButtons {
height:50px;
}
}
@media only screen and (max-height: 240px){
#gridlayout>#container.vidcon {
height:78%
}
#subControlButtons {
transform: scale(0.77);
}
#controlButtons {
height:46.2px;
}
}
@media only screen and (max-height: 190px){
#gridlayout>#container.vidcon {
height:75%
}
#subControlButtons {
transform: scale(0.73);
}
#controlButtons {
height:42px
}
}
@media only screen and (max-height: 160px){
#gridlayout>#container.vidcon {
height:70%
}
#subControlButtons {
transform: scale(0.65);
}
#controlButtons {
height:38px
}
}
@media only screen and (max-height: 120px){
#gridlayout>#container.vidcon {
height:70%
}
#subControlButtons {
transform: scale(0.52);
}
#controlButtons {
height:30px
}
}
@keyframes pulse {
0% {
@@ -744,33 +761,30 @@ input[type=range]:focus {
}
input[type=range]::-webkit-slider-runnable-track {
width: 100%;
height: 8.4px;
height: 3px;
cursor: pointer;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
background: #3071a9;
background: #C3C3C3;
border-radius: 1.3px;
border: 0.2px solid #010101;
}
input[type=range]::-webkit-slider-thumb {
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
border: 1px solid #000000;
height: 30px;
width: 16px;
border-radius: 3px;
background: #ffffff;
box-shadow: 1px 1px 1px #5e5e5e;
height: 15px;
width: 15px;
border-radius: 7px;
background: #C3C3C3;
cursor: pointer;
-webkit-appearance: none;
margin-top: -11px;
margin-top: -6px;
}
input[type=range]:focus::-webkit-slider-runnable-track {
background: #367ebd;
background: #a7a7a7;
}
input[type=range]::-moz-range-track {
width: 100%;
height: 8.4px;
cursor: pointer;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
background: #3071a9;
background: #C3C3C3;
border-radius: 1.3px;
border: 0.2px solid #010101;
}
@@ -780,7 +794,7 @@ input[type=range]::-moz-range-thumb {
height: 36px;
width: 16px;
border-radius: 3px;
background: #ffffff;
background: #C3C3C3;
cursor: pointer;
}
input[type=range]::-ms-track {
@@ -1225,6 +1239,7 @@ img {
.myVideo {
box-shadow: rgb(88, 88, 88) 0px 0px 5px 1px;
max-width: 800px !important;
width: 100% !important;
max-height: 100% !important;
height: auto !important;
display: block !important;
@@ -1242,7 +1257,6 @@ img {
}
.popup .menu { margin: 2px; }
.my-float {
margin-top: 7px;
opacity: 0.9;
@@ -1251,7 +1265,42 @@ img {
font-size: 32px;
color: white;
}
@media only screen and (max-height: 650px) {
.my-float {
margin-top: 4px;
margin-left: 1px;
}
.toggleSize {
font-size: 24px;
color: white;
}
.float {
opacity: 0.8;
width: 30px;
height: 30px;
background-color: #6666;
color: #FFF;
border-radius: 38px;
text-align: center;
margin: 5px;
pointer-events: auto;
}
.float2 {
opacity: 0.8;
width: 30px;
height: 30px;
background-color: #8888;
color: #FFF;
border-radius: 38px;
text-align: center;
z-index: 10;
margin: 5px;
pointer-events: auto;
}
}
img {
max-width: 100%;
}
@@ -2009,12 +2058,28 @@ div#roomnotes2 {
}
.controlsGrid {
grid-template-columns: 1fr 1fr;
display: grid;
display: grid;
grid-gap:10px;
max-height: 0;
transition: all 0.3s linear;
overflow: hidden;
}
.controlsGrid button {
margin: 5px;
text-align: right;
margin: 0;
text-align: right;
background-color: var(--director-button-background-color);
color: var(--director-button-label-color);
border-radius: 6px;
padding: 8px;
font-size:15px;
}
.controlsGrid button.pressed {
background-color: #868686;
outline:none;
box-shadow: none;
-webkit-box-shadow: none;
}
.controlsGrid span button {
margin-right: 0;
padding-left: 3px;
@@ -2024,6 +2089,10 @@ div#roomnotes2 {
margin: 5px var(--regular-margin);
}
.controlsGrid button i.las.la-circle {
font-size: 12px;
}
.pull-right {
float: right;
right: 0;
@@ -2033,12 +2102,17 @@ div#roomnotes2 {
left: 0;
}
i.las.la-circle {
color: red;
color: #DC1115;
background: #DC1115;
border-radius: 50%;
}
i.las.la-copy {
cursor: pointer;
}
.streamID {
text-align: right;
margin: 5px;
font-size: 0.7em;
font-size: 1em;
text-overflow: ellipsis;
overflow: hidden;
}
@@ -2063,10 +2137,10 @@ i.las.la-circle {
margin-top: 20px;
}
div#guestFeeds {
background: var(--container-color);
padding: 5px 0 15px 20px;
display: inline-block;
margin: 0px var(--regular-margin);
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
margin: 0px var(--regular-margin);
grid-gap: 10px;
}
div#guestFeeds:empty {

1125
main.js

File diff suppressed because it is too large Load Diff

View File

@@ -97,7 +97,6 @@ canvas {
padding: 20px 0px;
border: 1px solid #383838;
cursor: pointer;
max-height:300px;
}
#log ul {

View File

@@ -66,8 +66,11 @@
iframe.allowfullscreen ="true";
//iframe.allow = "autoplay";
var srcString = "./?push=" + streamID + "&cleanoutput&privacy&speedtest&webcam&audiodevice=0&fullscreen&transparent";
var srcString =
"./?push=" +
streamID +
"&cleanoutput&privacy&webcam&audiodevice=0&fullscreen&transparent";
if (urlParams.has("turn")) {
srcString = srcString + "&turn=" + urlParams.get("turn");
}
@@ -106,7 +109,7 @@
var iframeContainer = document.createElement("span");
iframe.allow = "autoplay";
var srcString = "./?view=" + streamID + "&cleanoutput&privacy&noaudio&scale=0";
var srcString = "./?view=" + streamID + "&cleanoutput&privacy&noaudio";
if (urlParams.has("turn")) {
srcString = srcString + "&turn=" + urlParams.get("turn");

View File

@@ -1,99 +1,90 @@
{
"titles": {
"toggle-the-chat": "Chat aan/uit",
"mute-the-speaker": "Demp de sSreker",
"mute-the-mic": "Demp de Mic",
"disable-the-camera": "Camera uitzetten",
"settings": "Instellingen",
"hangup-the-call": "Gesprek ophangen",
"show-help-info": "Geef Help weer",
"language-options": "Taal opties",
"tip-hold-ctrl-command-to-select-multiple": "tip: Houd CTRL (command) vast om meerdere te selecteren",
"ideal-for-1080p60-gaming-if-your-computer-and-upload-are-up-for-it": "Ideaal voor 1080p60 game streaming, als de pc krachtig genoeg is",
"better-video-compression-and-quality-at-the-cost-of-increased-cpu-encoding-load": "Betere videocompressie en kwaliteit ten koste van verhoogde CPU encodering belasting",
"disable-digital-audio-effects-and-increase-audio-bitrate": "Schakel digitale audio effecten uit en verhoogt audio bitrate",
"the-guest-will-not-have-a-choice-over-audio-options": "Gasten kunnen audio opties niet wijzigen",
"the-guest-will-only-be-able-to-select-their-webcam-as-an-option": "Gast kan alleen een webcam selecteren",
"hold-ctrl-and-the-mouse-wheel-to-zoom-in-and-out-remotely-of-compatible-video-streams": "Scroll in en uit door CTRL vast te houden en te scrollen met d emuis (wanneer mogelijk)",
"add-a-password-to-make-the-stream-inaccessible-to-those-without-the-password": "Voeg een wachtwoord toe en eis deze voor toegang",
"add-the-guest-to-a-group-chat-room-it-will-be-created-automatically-if-needed-": "Gast toevoegen aan groepschat.(Word automatisch gemaakt)",
"customize-the-room-settings-for-this-guest": "Geef (kamer) instellingen op voor deze gast",
"hold-ctrl-or-cmd-to-select-multiple-files": "Meerdere selecteren? CTRL vasthouden tijdens selecteren",
"enter-an-https-url": "Voer een HTTPS URL in",
"toggle-the-chat": "Toggle the Chat",
"mute-the-speaker": "Mute the Speaker",
"mute-the-mic": "Mute the Mic",
"disable-the-camera": "Disable the Camera",
"settings": "Settings",
"hangup-the-call": "Hangup the Call",
"show-help-info": "Show Help Info",
"language-options": "Language Options",
"tip-hold-ctrl-command-to-select-multiple": "tip: Hold CTRL (command) to select Multiple",
"ideal-for-1080p60-gaming-if-your-computer-and-upload-are-up-for-it": "Ideal for 1080p60 gaming, if your computer and upload are up for it",
"better-video-compression-and-quality-at-the-cost-of-increased-cpu-encoding-load": "Better video compression and quality at the cost of increased CPU encoding load",
"disable-digital-audio-effects-and-increase-audio-bitrate": "Disable digital audio-effects and increase audio bitrate",
"the-guest-will-not-have-a-choice-over-audio-options": "The guest will not have a choice over audio-options",
"the-guest-will-only-be-able-to-select-their-webcam-as-an-option": "The guest will only be able to select their webcam as an option",
"hold-ctrl-and-the-mouse-wheel-to-zoom-in-and-out-remotely-of-compatible-video-streams": "Hold CTRL and the mouse wheel to zoom in and out remotely of compatible video streams",
"add-a-password-to-make-the-stream-inaccessible-to-those-without-the-password": "Add a password to make the stream inaccessible to those without the password",
"add-the-guest-to-a-group-chat-room-it-will-be-created-automatically-if-needed-": "Add the guest to a group-chat room; it will be created automatically if needed.",
"customize-the-room-settings-for-this-guest": "Customize the room settings for this guest",
"hold-ctrl-or-cmd-to-select-multiple-files": "Hold CTRL (or CMD) to select multiple files",
"enter-an-https-url": "Enter an HTTPS URL",
"lucy-g": "Lucy G",
"flaticon": "Flaticon",
"creative-commons-by-3-0": "Creative Commons BY 3.0",
"gregor-cresnar": "Gregor Cresnar",
"add-this-video-to-any-remote-scene-1-": "Add this Video to any remote '&scene=1'",
"forward-user-to-another-room-they-can-always-return-": "Stuur gast door naar andere room, kan terugkeren.",
"start-recording-this-stream-experimental-views": "Stream opnemen starten. *experimenteel*' views",
"force-the-user-to-disconnect-they-can-always-reconnect-": "Forceer einde verbinding, kan wel opnieuw verbinden.",
"forward-user-to-another-room-they-can-always-return-": "Forward user to another room. They can always return.",
"start-recording-this-stream-experimental-views": "Start Recording this stream. *experimental*' views",
"force-the-user-to-disconnect-they-can-always-reconnect-": "Force the user to Disconnect. They can always reconnect.",
"change-this-audio-s-volume-in-all-remote-scene-views": "Change this Audio's volume in all remote '&scene' views",
"remotely-mute-this-audio-in-all-remote-scene-views": "Remotely Mute this Audio in all remote '&scene' views",
"disable-video-preview": "Schakel Video Preview uit",
"low-quality-preview": "Lage kwaliteit Preview",
"high-quality-preview": "Hoge kwaliteit Preview",
"send-direct-message": "Stuur een Direct Message",
"advanced-settings-and-remote-control": "Geavanceerde instellingen en Remote Conntrol",
"toggle-voice-chat-with-this-guest": "Schakel Voice chat aan/uit met deze gast",
"join-by-room-name-here": "Voer een naam in voor snelle toegang",
"join-room": "Ga de kamer in",
"share-a-screen-with-others": "Deel je scherm met anderen",
"alert-the-host-you-want-to-speak": "Geef de director een seintje",
"record-your-stream-to-disk": "Streamopname naar lokale opslag",
"cancel-the-director-s-video-audio": "Annuleer de Director zijn Video/Audio",
"submit-any-error-logs": "Verzend foutmeldingslog",
"add-group-chat-to-obs": "Voeg een groepschat toe aan OBS",
"for-large-group-rooms-this-option-can-reduce-the-load-on-remote-guests-substantially": "Bij grotere groepen kan deze optie voor een lagere belasting aan gast zijde zorgen",
"which-video-codec-would-you-want-used-by-default-": "Welke video codec wil je standaard gebruiken?",
"you-ll-enter-as-the-room-s-director": "Je gaat de kamer binnen als Director",
"add-your-camera-to-obs": "Voeg je camera aan OBS toe",
"remote-screenshare-into-obs": "Schermdelen naar OBS",
"create-reusable-invite": "creëer herbruikbaare link",
"disable-video-preview": "Disable Video Preview",
"low-quality-preview": "Low-Quality Preview",
"high-quality-preview": "High-Quality Preview",
"send-direct-message": "Send Direct Message",
"advanced-settings-and-remote-control": "Advanced Settings and Remote Control",
"toggle-voice-chat-with-this-guest": "Toggle Voice Chat with this Guest",
"join-by-room-name-here": "Enter a room name to quick join",
"join-room": "Join room",
"share-a-screen-with-others": "Share a Screen with others",
"alert-the-host-you-want-to-speak": "Alert the host you want to speak",
"record-your-stream-to-disk": "Record your stream to disk",
"cancel-the-director-s-video-audio": "Cancel the Director's Video/Audio",
"submit-any-error-logs": "Submit any error logs",
"add-group-chat-to-obs": "Add Group Chat to OBS",
"for-large-group-rooms-this-option-can-reduce-the-load-on-remote-guests-substantially": "For large group rooms, this option can reduce the load on remote guests substantially",
"which-video-codec-would-you-want-used-by-default-": "Which video codec would you want used by default?",
"you-ll-enter-as-the-room-s-director": "You'll enter as the room's director",
"add-your-camera-to-obs": "Add your Camera to OBS",
"remote-screenshare-into-obs": "Remote Screenshare into OBS",
"create-reusable-invite": "Create Reusable Invite",
"encode-the-url-so-that-it-s-harder-for-a-guest-to-modify-the-settings-": "Encode the URL so that it's harder for a guest to modify the settings.",
"more-options": "Meer opties",
"youtube-video-demoing-how-to-do-this": "Youtube video voorbeelden, hoe dit te doen!",
"invite-a-guest-or-camera-source-to-publish-into-the-group-room": "Vraag een gast zijn beeld te publiceren in de kamer",
"if-enabled-the-invited-guest-will-not-be-able-to-see-or-hear-anyone-in-the-room-": "Wanneer deze optie aan staat kan de gast niemand zien of horen",
"use-this-link-in-the-obs-browser-source-to-capture-the-video-or-audio": "Gebruik deze link als OBS Browser source om video/audio binnen te halen",
"if-enabled-you-must-manually-add-a-video-to-a-scene-for-it-to-appear-": "Wanneer deze optie aanstaat moet je video handmatig toevoegen aan een scene om hem te zien.",
"disables-echo-cancellation-and-improves-audio-quality": "Schakelt Echo Cancellation uit en verbetert audio kwaliteit",
"audio-only-sources-are-visually-hidden-from-scenes": "Bronnen met alleen audio niet laten zien in de scene",
"guest-will-be-prompted-to-enter-a-display-name": "Vraag gasten om een naam om weer te geven",
"display-names-will-be-shown-in-the-bottom-left-corner-of-videos": "Namen van gasten komen links onder in de hoek van de video",
"request-1080p60-from-the-guest-instead-of-720p60-if-possible": "Vraag om 1080p60 i.p.v. 720p60, wanneer mogelijk",
"the-default-microphone-will-be-pre-selected-for-the-guest": "Voor deze gast standaard microfoon selecteren vooraf",
"the-default-camera-device-will-selected-automatically": "Standaard camera word automatisch geselecteerd",
"the-guest-won-t-have-access-to-changing-camera-settings-or-screenshare": "De gast kan hierdoor niet wisselen tussen camera en scherm delen",
"the-guest-will-not-see-their-own-self-preview-after-joining": "Hierdoor zit de gast zichzelf niet nadat deze het gesprek is binnengekomen",
"guests-will-have-an-option-to-poke-the-director-by-pressing-a-button": "Gasten krijgen een optie de director een verzoek tot aandacht te sturen",
"add-an-audio-compressor-to-the-guest-s-microphone": "Voeg een audio compressor toe aan de gast zijn microfoon",
"add-an-equalizer-to-the-guest-s-microphone-that-the-director-can-control": "Voeg een audio equalizer toe aan gast, onder controle van director",
"the-guest-can-only-see-the-director-s-video-if-provided": "Gat kan alleen de director zien,wanneer deze aanwezig is",
"the-guest-s-microphone-will-be-muted-on-joining-they-can-unmute-themselves-": "Microfoon van gast standaard uit, kunnen zichzelf wel aanzetten",
"have-the-guest-join-muted-so-only-the-director-can-unmute-the-guest-": "Microfoon van gast standaard uit, alleen director kan deze aanzetten",
"make-the-invite-url-encoded-so-parameters-are-harder-to-tinker-with-by-guests": "Encodeer de invitatie URL. Om aanpassingen door gast moeilijker te maken",
"move-the-user-to-another-room-controlled-by-another-director": "Verplaats gast naar andere room. Beheerd door een andere director",
"send-a-direct-message-to-this-user-": "Stuur een Direct Message naar deze gast",
"remotely-change-the-volume-of-this-guest": "Op afstand veranderen volume gast",
"mute-this-guest-everywhere": "Deze gast niet meer hoorbaar maken overal",
"start-recording-this-remote-stream-to-this-local-drive-experimental-": "Start opname van de remote audio/video stream op de lokale drive *experimental*'",
"the-remote-guest-will-record-their-local-stream-to-their-local-drive-experimental-": "Zet opname aan bij gasten zelf op lokale schijf van gast *experimental*",
"shift-this-video-down-in-order": "Schuif deze video lager in orde",
"current-index-order-of-this-video": "Huidige index plek van deze video",
"shift-this-video-up-in-order": "Schuif deze video hoger in orde",
"remote-audio-settings": "Audio instellingen op afstand",
"advanced-video-settings": "Geavanceerde instellingen van video",
"activate-or-reload-this-video-device-": "Activeer of herlaadt deze video bron.",
"create-a-seconary-stream": "Create a Seconary Stream",
"the-director-will-be-visible-in-scenes-as-if-a-performer-themselves-": "The director will be visible in scenes, as if a performer themselves.",
"useful-if-you-want-to-perform-and-direct-at-the-same-time": "Useful if you want to perform and direct at the same time",
"start-streaming": "start streaming",
"if-disabled-the-invited-guest-will-not-be-able-to-see-or-hear-anyone-in-the-room-": "If disabled, the invited guest will not be able to see or hear anyone in the room.",
"if-disabled-you-must-manually-add-a-video-to-a-scene-for-it-to-appear-": "If disabled, you must manually add a video to a scene for it to appear.",
"toggle-solo-voice-chat": "Toggle Solo Voice Chat",
"toggle-the-remote-guest-s-speaker-output": "Toggle the remote guest's speaker output",
"toggle-the-remote-guest-s-display-output": "Toggle the remote guest's display output"
"more-options": "More Options",
"youtube-video-demoing-how-to-do-this": "Youtube Video demoing how to do this",
"invite-a-guest-or-camera-source-to-publish-into-the-group-room": "Invite a guest or camera source to publish into the group room",
"if-enabled-the-invited-guest-will-not-be-able-to-see-or-hear-anyone-in-the-room-": "If enabled, the invited guest will not be able to see or hear anyone in the room.",
"use-this-link-in-the-obs-browser-source-to-capture-the-video-or-audio": "Use this link in the OBS Browser Source to capture the video or audio",
"if-enabled-you-must-manually-add-a-video-to-a-scene-for-it-to-appear-": "If enabled, you must manually add a video to a scene for it to appear.",
"disables-echo-cancellation-and-improves-audio-quality": "Disables Echo Cancellation and improves audio quality",
"audio-only-sources-are-visually-hidden-from-scenes": "Audio-only sources are visually hidden from scenes",
"guest-will-be-prompted-to-enter-a-display-name": "Guest will be prompted to enter a Display Name",
"display-names-will-be-shown-in-the-bottom-left-corner-of-videos": "Display Names will be shown in the bottom-left corner of videos",
"request-1080p60-from-the-guest-instead-of-720p60-if-possible": "Request 1080p60 from the Guest instead of 720p60, if possible",
"the-default-microphone-will-be-pre-selected-for-the-guest": "The default microphone will be pre-selected for the guest",
"the-default-camera-device-will-selected-automatically": "The default camera device will selected automatically",
"the-guest-won-t-have-access-to-changing-camera-settings-or-screenshare": "The guest won't have access to changing camera settings or screenshare",
"the-guest-will-not-see-their-own-self-preview-after-joining": "The guest will not see their own self-preview after joining",
"guests-will-have-an-option-to-poke-the-director-by-pressing-a-button": "Guests will have an option to poke the Director by pressing a button",
"add-an-audio-compressor-to-the-guest-s-microphone": "Add an audio compressor to the guest's microphone",
"add-an-equalizer-to-the-guest-s-microphone-that-the-director-can-control": "Add an Equalizer to the guest's microphone that the director can control",
"the-guest-can-only-see-the-director-s-video-if-provided": "The guest can only see the Director's video, if provided",
"the-guest-s-microphone-will-be-muted-on-joining-they-can-unmute-themselves-": "The guest's microphone will be muted on joining. They can unmute themselves.",
"have-the-guest-join-muted-so-only-the-director-can-unmute-the-guest-": "Have the guest join muted, so only the director can Unmute the guest.",
"make-the-invite-url-encoded-so-parameters-are-harder-to-tinker-with-by-guests": "Make the invite URL encoded, so parameters are harder to tinker with by guests",
"move-the-user-to-another-room-controlled-by-another-director": "Move the user to another room, controlled by another director",
"send-a-direct-message-to-this-user-": "Send a Direct Message to this user.",
"remotely-change-the-volume-of-this-guest": "Remotely change the volume of this guest",
"mute-this-guest-everywhere": "Mute this guest everywhere",
"start-recording-this-remote-stream-to-this-local-drive-experimental-": "Start Recording this remote stream to this local drive. *experimental*'",
"the-remote-guest-will-record-their-local-stream-to-their-local-drive-experimental-": "The Remote Guest will record their local stream to their local drive. *experimental*",
"shift-this-video-down-in-order": "Shift this Video Down in Order",
"current-index-order-of-this-video": "Current Index Order of this Video",
"shift-this-video-up-in-order": "Shift this Video Up in Order",
"remote-audio-settings": "Remote Audio Settings",
"advanced-video-settings": "Advanced Video Settings",
"activate-or-reload-this-video-device-": "Activate or Reload this video device."
},
"innerHTML": {
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS Ninja",
@@ -101,7 +92,7 @@
"you-are-in-the-control-center": "U bent in het kamer beheers centrum",
"joining-room": "U neemt deel aan de kamer",
"add-group-chat": "Voeg Groepsgesprek toe",
"rooms-allow-for": "Kamers maken eenvoudige groepsgespreken en geavanceerd beheer van meerdere streams tegelijkertijd mogelijk.",
"rooms-allow-for": "Kamers maken eenvoudige groepsgespreken en geavanceerd beheer van meerdere streams tegelijk mogelijk.",
"room-name": "Kamer Naam",
"password-input-field": "Password",
"enter-the-rooms-control": "Ga de Kamer's Controle Centrum in",
@@ -109,7 +100,7 @@
"added-notes": "\n\t\t\t\t<u><i>Notities:</i></u>\n\t\t\t\t<li>Iedereen kan de kamer binnenkomen als ze de naam kennen, dus hou hem uniek</li>\n\t\t\t\t<li>Meer dan vier (4) mensen in een kamer is niet aan te raden vanwege prestatie redenen, maar is afhankelijk van uw hardware.</li>\n\t\t\t\t<li>Bij iOS apparaten is de video alleen zichtbaar voor de regiseur. Dit is een hardware beperking.</li>\n\t\t\t\t<li>De \"Opname\" optie is nieuw en is experimenteel.</li>\n\t\t\t\t<li>U moet een video stroom \"Toevoegen\" aan de \"Groeps Scene\" om het hier te tonen.</li>\n\t\t\t\t<li>Er is een nieuwe \"uitgebreid volledig scherm\" knop toegevoegd aan het Gasten scherm.</li>\n\t\t\t\t",
"back": "Terug",
"add-your-camera": "Voeg je Camera toe",
"ask-for-permissions": "Geef toestemming voor gebruik Camera/Microfoon",
"ask-for-permissions": "Allow Access to Camera/Microphone",
"waiting-for-camera": "Wachten op het Laden van de Camera",
"video-source": "Video bron",
"max-resolution": "Max Resolutie",
@@ -163,42 +154,39 @@
"more-than-four-can-join": "These four guest slots are just for demonstration. More than four guests can actually join a room.",
"welcome-to-obs-ninja-chat": "\n\t\t\t\t\tWelcome to OBS.Ninja! You can send text messages directly to connected peers from here.\n\t\t\t\t",
"names-and-labels-coming-soon": "\n\t\t\t\t\tNames identifying connected peers will be a feature in an upcoming release.\n\t\t\t\t",
"send-chat": "Verstuur",
"available-languages": "Beschikbare talen:",
"add-more-here": "Voer hier meer toe!",
"waiting-for-camera-to-load": "Wachten tot camera geladen is",
"send-chat": "Send",
"available-languages": "Available Languages:",
"add-more-here": "Add More Here!",
"waiting-for-camera-to-load": "waiting-for-camera-to-load",
"start": "START",
"share-your-mic": "Deel je microfoon",
"share-your-camera": "Deel je camera",
"share-your-screen": "Deel je scherm",
"join-room-with-mic": "Ga de kamer binnen met microfoon",
"share-screen-with-room": "Deel je scherm met de kamer",
"join-room-with-camera": "Ga de kamer binnen met camera",
"click-start-to-join": "Druk op start om erin te gaan",
"guests-only-see-director": "Gasten kunnen alleen de directors video zien",
"default-codec-select": "Geprefereerde Video Codec: ",
"obfuscate_url": "Verhul originele uitnodigingslink",
"share-your-mic": "Share your microphone",
"share-your-camera": "Share your Camera",
"share-your-screen": "Share your Screen",
"join-room-with-mic": "Join room with Microphone",
"share-screen-with-room": "Share-screen with Room",
"join-room-with-camera": "Join room with Camera",
"click-start-to-join": "Click Start to Join",
"guests-only-see-director": "Guests can only see the Director's Video",
"default-codec-select": "Preferred Video Codec: ",
"obfuscate_url": "Obfuscate the Invite URL",
"hide-the-links": " LINKS (GUEST INVITES &amp; SCENES)",
"invite-users-to-join": "Gasten kunnen de link gebruiken om de kamer binnen te gaan",
"this-is-obs-browser-source-link": "Gebruik deze link om de video mix te gebruiken in OBS of andere studio software",
"invite-users-to-join": "Guests can use the link to join the group room",
"this-is-obs-browser-source-link": "Use in OBS or other studio software to capture the group video mix",
"mute-scene": "mute in scene",
"mute-guest": "mute guest",
"record-local": " Lokale opname",
"record-remote": " Opname remote",
"record-local": " Record Local",
"record-remote": " Record Remote",
"order-down": "<i class=\"las la-minus\"></i>",
"order-up": "<i class=\"las la-plus\"></i>",
"advanced-audio-settings": "<i class=\"las la-sliders-h\"></i> Audio instellingen",
"scenes-can-see-director": "Director will also be a performer",
"toggle-remote-speaker": "Deafen Guest",
"toggle-remote-display": "Blind Guest"
"advanced-audio-settings": "<i class=\"las la-sliders-h\"></i> Audio Settings"
},
"placeholders": {
"join-by-room-name-here": "Ga binnen met een kamer naam",
"enter-a-room-name-here": "Geef hier een kamer naam op",
"optional-room-password-here": "Optionele wachtwoord voor kamer",
"give-this-media-source-a-name-optional-": "Geef de media bron een naam(optioneel)",
"add-an-optional-password": "Voeg optioneel wachtwoord toe",
"enter-room-name-here": "Geef hier de kamer naam op",
"enter-chat-message-to-send-here": "Type hier om te chatten"
"join-by-room-name-here": "Join by Room Name here",
"enter-a-room-name-here": "Enter a Room Name here",
"optional-room-password-here": "Optional room password here",
"give-this-media-source-a-name-optional-": "Give this media source a name (optional)",
"add-an-optional-password": "Add an optional password",
"enter-room-name-here": "Enter Room name here",
"enter-chat-message-to-send-here": "Enter chat message to send here"
}
}
}

File diff suppressed because one or more lines are too long