mirror of
https://github.com/eliasstepanik/vdo.ninja.git
synced 2026-01-19 17:48:26 +00:00
language updates; bug fixes
This commit is contained in:
parent
e1c2ad1748
commit
8e023705f1
36
index.html
36
index.html
@ -55,7 +55,7 @@
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" href="./lineawesome/css/line-awesome.min.css" />
|
||||
<link rel="stylesheet" href="./main.css?ver=64" />
|
||||
<link rel="stylesheet" href="./main.css?ver=65" />
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/adapter.min.js"></script>
|
||||
<style id="lightbox-animations" type="text/css"></style>
|
||||
</head>
|
||||
@ -108,6 +108,7 @@
|
||||
<span data-translate="joining-room">You are in room</span>:
|
||||
<div id="roomid" style="display: inline-block;"></div>
|
||||
</div>
|
||||
<div id="head6" class="advanced" data-translate="only-director-can-hear-you">Only the director can hear you currently</div>
|
||||
|
||||
</div>
|
||||
<div id="controlButtons" >
|
||||
@ -726,7 +727,7 @@
|
||||
👋 👀 Welcome to our new domain! We've started to rebrand to VDO.Ninja. 📼 Nothing else is changing and we're staying 100% free.
|
||||
</h4>
|
||||
<br />
|
||||
🌻 Site Updated on June 9th. The <a href="https://docs.vdo.ninja/release-notes/v18">v18 release notes are here</a>. If new issues occur, the previous version can also be <a href="https://obs.ninja/v17/">found here</a>.
|
||||
🌻 Site Updated on June 29th. The <a href="https://docs.vdo.ninja/release-notes/v18">v18 release notes are here</a>. If new issues occur, the previous version can also be <a href="https://obs.ninja/v17/">found here</a>.
|
||||
|
||||
<br />
|
||||
<br />
|
||||
@ -926,7 +927,7 @@
|
||||
<input type="checkbox" data-param="&animate" onchange="updateLink(1,this);">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
<span data-translate="fade-videos-in">Animate mixing</span>
|
||||
<span data-translate="animate-mixing">Animate mixing</span>
|
||||
|
||||
</div>
|
||||
<div style="display:inline-block;margin-top: 12px; position: relative; margin-right:10px;">
|
||||
@ -960,12 +961,17 @@
|
||||
</label>
|
||||
<span data-translate="enable-equalizer">Enable equalizer as option</span>
|
||||
<br />
|
||||
<label class="switch">
|
||||
<label class="switch" title="Show some prep suggestions to the guests on connect">
|
||||
<input type="checkbox" data-param="&tips" onchange="updateLink(1,this);">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
<span data-translate="show-guest-tips" title="Show some prep suggestions to the guests on connect">Show guest setup tips</span>
|
||||
|
||||
<span data-translate="show-guest-tips">Show guest setup tips</span>
|
||||
<br />
|
||||
<label class="switch" title="Have screen-shares stream ID's use a predictable prefixed value instead of a random one.">
|
||||
<input type="checkbox" data-param="&ssid" onchange="updateLink(1,this);">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
<span data-translate="prefix-screenshare">Prefix screenshare IDs</span>
|
||||
</div>
|
||||
<div style="display:inline-block;margin-top: 12px; position: relative; height: 20px;">
|
||||
<label class="switch" title="This low-fi video codec uses very little CPU, even with dozens of active viewers.">
|
||||
@ -1063,7 +1069,7 @@
|
||||
<input type="checkbox" data-param="&animate" onchange="updateLink(3,this);">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
<span data-translate="fade-videos-in">Animate mixing</span>
|
||||
<span data-translate="animate-mixing">Animate mixing</span>
|
||||
|
||||
|
||||
</div>
|
||||
@ -1144,10 +1150,10 @@
|
||||
<span data-translate="disconnect-guest" >Hangup</span>
|
||||
</button>
|
||||
|
||||
<button data-action-type="solo-chat" title="Toggle Solo Voice Chat" onclick="session.toggleSoloChat(this.dataset.UUID);">
|
||||
<button data-action-type="solo-chat" title="Toggle solo voice chat or hold CTRL/CMD when selecting to make it two-way private." onclick="session.toggleSoloChat(this.dataset.UUID, event);">
|
||||
<span data-translate="voice-chat"><i class="las la-microphone" style="color:#090"></i> Solo Talk</span>
|
||||
</button>
|
||||
|
||||
|
||||
<button data-action-type="addToScene" data-scene="1" title="Add this Video to any remote '&scene=1'" onclick="directEnable(this, event, 1);">
|
||||
<i class="las la-plus-square" style="color:#060"></i>
|
||||
<span data-translate="add-to-scene">add to scene 1</span>
|
||||
@ -1514,8 +1520,9 @@
|
||||
<span class='modalClose' onclick="toggleRoomSettings();">×</span>
|
||||
<span></span>
|
||||
<h3>Change room settings</h3><br />
|
||||
<label title="Increase this at your peril. Changes the total inbound video bitrate per guest; mobile devices excluded. Webp-mode also excluded." for="trbSettingInput">Change room video quality:</label><span style="margin-left: 6px;" id="trbSettingInputFeedback"></span>-kbps
|
||||
<input id="trbSettingInput" type="range" min="0" max="2000" value="500" onchange="changeTRB(this);" oninput="getById('trbSettingInputFeedback').innerHTML = this.value;" style="width:400px;display:block;" />
|
||||
<label title="Increase this at your peril. Changes the total inbound video bitrate per guest; mobile devices excluded. Webp-mode also excluded." for="trbSettingInput">Change room video quality:</label>
|
||||
<span style="margin-left: 6px;" id="trbSettingInputFeedback"></span>-kbps
|
||||
<input id="trbSettingInput" type="range" min="0" max="4000" value="500" onchange="changeTRB(this);" oninput="getById('trbSettingInputFeedback').innerHTML = this.value;" style="width:100%;display:block;" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -1630,7 +1637,8 @@
|
||||
<li><a onclick="changeLg('nl');toggle(document.getElementById('languages'));" style="cursor: pointer;" data-tz="Europe/Amsterdam">Dutch</a></li>
|
||||
<li><a onclick="changeLg('tr');toggle(document.getElementById('languages'));" style="cursor: pointer;" data-tz="Europe/Istanbul">Turkish</a></li>
|
||||
<li><a onclick="changeLg('ja');toggle(document.getElementById('languages'));" style="cursor: pointer;" data-tz="Asia/Tokyo">Japanese</a></li>
|
||||
<li><a onclick="changeLg('cs');toggle(document.getElementById('languages'));" style="cursor: pointer;" data-tz="Europe/Prague">Czech </a></li>
|
||||
<li><a onclick="changeLg('cs');toggle(document.getElementById('languages'));" style="cursor: pointer;" data-tz="Europe/Prague">Czech</a></li>
|
||||
<li><a onclick="changeLg('uk');toggle(document.getElementById('languages'));" style="cursor: pointer;" data-tz="Europe/Ukraine">Ukrainian</a></li>
|
||||
<li><a onclick="changeLg('pig');toggle(document.getElementById('languages'));" style="cursor: pointer;">Pig Latin</a></li>
|
||||
</ul>
|
||||
<br />
|
||||
@ -1737,11 +1745,11 @@
|
||||
// session.title // "zzzz"
|
||||
</script>
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/aes.js"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="lib-js" src="./lib.js?ver=2"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="lib-js" src="./lib.js?ver=6"></script>
|
||||
<!--
|
||||
// If you wish to change branding, blank offers a good clean start.
|
||||
<script type="text/javascript" id="main-js" src="./main.js" data-translation="blank"></script>
|
||||
-->
|
||||
<script type="text/javascript" crossorigin="anonymous" id="main-js" src="./main.js?ver=232"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="main-js" src="./main.js?ver=237"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
187
lib.js
187
lib.js
@ -337,7 +337,7 @@ async function delay(ms) {
|
||||
}
|
||||
|
||||
var Prompts = {};
|
||||
async function promptAlt(inputText){
|
||||
async function promptAlt(inputText, block=false){
|
||||
var result = null;
|
||||
if (session.beepToNotify){
|
||||
playtone();
|
||||
@ -347,45 +347,64 @@ async function promptAlt(inputText){
|
||||
Prompts[promptID] = {};
|
||||
Prompts[promptID].resolve = resolve;
|
||||
Prompts[promptID].reject = reject;
|
||||
|
||||
var zindex = 30 + document.querySelectorAll('.promptModal').length;
|
||||
|
||||
if (block){
|
||||
var backdropClass = "opaqueBackdrop";
|
||||
} else {
|
||||
var backdropClass = "modalBackdrop";
|
||||
}
|
||||
|
||||
inputText = "<font>"+inputText.replace("\n","</font><br /><font style='font-size:0.8em'>");
|
||||
inputText = "<font style='font-size:1.2em'>"+inputText.replace("\n","</font><br /><font>")+"</font>";
|
||||
inputText = inputText.replace(/\n/g,"<br />");
|
||||
zindex = 30 + document.querySelectorAll('#promptModal').length;
|
||||
|
||||
modalTemplate =
|
||||
`<div id="modal_${promptID}" class="promptModal" style="z-index:${zindex + 2}">
|
||||
<div class="promptModalInner">
|
||||
<span id="close_${promptID}" class='modalClose' data-pid="${promptID}">×</span>
|
||||
<span class='promptModalMessage'>${inputText}</span>
|
||||
<input id="input_${promptID}" type="text" class="largeTextEntry" />
|
||||
<input id="input_${promptID}" data-pid="${promptID}" type="text" class="largeTextEntry" />
|
||||
<button id="submit_${promptID}" data-pid="${promptID}" style="width:120px; background-color: #fff; position: relative;border: 1px solid #999; margin: 0 0 0 55px;" data-translate='ok'>✔ OK</button>
|
||||
<button id="cancel_${promptID}" data-pid="${promptID}" style="width:120px; background-color: #fff; position: relative;border: 1px solid #999; margin: 0;" data-translate='cancel'>❌ Cancel</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="modalBackdrop_${promptID}" style="z-index:${zindex + 1}"></div>`;
|
||||
<div id="modalBackdrop_${promptID}" class="${backdropClass}" style="z-index:${zindex + 1}"></div>`;
|
||||
|
||||
|
||||
document.body.insertAdjacentHTML("beforeend", modalTemplate); // Insert modal at body end
|
||||
|
||||
document.getElementById("input_"+promptID).focus();
|
||||
|
||||
document.getElementById("input_"+promptID).addEventListener("keyup", function(event) {
|
||||
if (event.key === "Enter") {
|
||||
var pid = event.target.dataset.pid;
|
||||
result = document.getElementById("input_"+pid).value;
|
||||
document.getElementById("modal_"+pid).remove();
|
||||
document.getElementById("modalBackdrop_"+pid).remove();
|
||||
Prompts[pid].resolve();
|
||||
}
|
||||
});
|
||||
|
||||
document.getElementById("submit_"+promptID).addEventListener("click", function(event){
|
||||
var pid = event.target.dataset.pid;
|
||||
result = document.getElementById("input_"+pid).value;
|
||||
document.getElementById("modal_"+pid).innerHTML = ''; // Delete modal
|
||||
document.getElementById("modal_"+pid).remove();
|
||||
document.getElementById("modalBackdrop_"+pid).remove();
|
||||
Prompts[pid].resolve();
|
||||
});
|
||||
|
||||
document.getElementById("cancel_"+promptID).addEventListener("click", function(event){
|
||||
var pid = event.target.dataset.pid;
|
||||
document.getElementById("modal_"+pid).innerHTML = ''; // Delete modal
|
||||
document.getElementById("modal_"+pid).remove();
|
||||
document.getElementById("modalBackdrop_"+pid).remove();
|
||||
Prompts[pid].resolve();
|
||||
});
|
||||
|
||||
document.getElementById("close_"+promptID).addEventListener("click", function(event){
|
||||
var pid = event.target.dataset.pid;
|
||||
document.getElementById("modal_"+pid).innerHTML = ''; // Delete modal
|
||||
document.getElementById("modal_"+pid).remove();
|
||||
document.getElementById("modalBackdrop_"+pid).remove();
|
||||
Prompts[pid].resolve();
|
||||
});
|
||||
|
||||
@ -398,7 +417,7 @@ async function promptAlt(inputText){
|
||||
return result;
|
||||
}
|
||||
|
||||
async function confirmAlt(inputText){
|
||||
async function confirmAlt(inputText, block=false){
|
||||
var result = null;
|
||||
if (session.beepToNotify){
|
||||
playtone();
|
||||
@ -409,9 +428,16 @@ async function confirmAlt(inputText){
|
||||
Prompts[promptID].resolve = resolve;
|
||||
Prompts[promptID].reject = reject;
|
||||
|
||||
inputText = "<font>"+inputText.replace("\n","</font><br /><font style='font-size:0.8em'>");
|
||||
var zindex = 30 + document.querySelectorAll('.promptModal').length;
|
||||
|
||||
if (block){
|
||||
var backdropClass = "opaqueBackdrop";
|
||||
} else {
|
||||
var backdropClass = "modalBackdrop";
|
||||
}
|
||||
|
||||
inputText = "<font style='font-size:1.2em'>"+inputText.replace("\n","</font><br /><font>")+"</font>";
|
||||
inputText = inputText.replace(/\n/g,"<br />");
|
||||
zindex = 30 + document.querySelectorAll('#promptModal').length;
|
||||
|
||||
modalTemplate =
|
||||
`<div id="modal_${promptID}" class="promptModal" style="z-index:${zindex + 2}">
|
||||
@ -422,29 +448,31 @@ async function confirmAlt(inputText){
|
||||
<button id="cancel_${promptID}" data-pid="${promptID}" style="width:120px; background-color: #fff; position: relative;border: 1px solid #999; margin: 0;" data-translate='cancel'>❌ Cancel</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="modalBackdrop_${promptID}" style="z-index:${zindex + 1}"></div>`;
|
||||
<div id="modalBackdrop_${promptID}" class="${backdropClass}" style="z-index:${zindex + 1}"></div>`;
|
||||
|
||||
|
||||
document.body.insertAdjacentHTML("beforeend", modalTemplate); // Insert modal at body end
|
||||
|
||||
document.getElementById("submit_"+promptID).focus();
|
||||
|
||||
document.getElementById("submit_"+promptID).addEventListener("click", function(event){
|
||||
var pid = event.target.dataset.pid;
|
||||
result = true;
|
||||
document.getElementById("modal_"+pid).innerHTML = ''; // Delete modal
|
||||
document.getElementById("modalBackdrop_"+pid).remove();
|
||||
document.getElementById("modal_"+pid).remove();
|
||||
Prompts[pid].resolve();
|
||||
});
|
||||
|
||||
document.getElementById("cancel_"+promptID).addEventListener("click", function(event){
|
||||
var pid = event.target.dataset.pid;
|
||||
document.getElementById("modal_"+pid).innerHTML = ''; // Delete modal
|
||||
document.getElementById("modalBackdrop_"+pid).remove();
|
||||
document.getElementById("modal_"+pid).remove();
|
||||
Prompts[pid].resolve();
|
||||
});
|
||||
|
||||
document.getElementById("close_"+promptID).addEventListener("click", function(event){
|
||||
var pid = event.target.dataset.pid;
|
||||
document.getElementById("modal_"+pid).innerHTML = ''; // Delete modal
|
||||
document.getElementById("modalBackdrop_"+pid).remove();
|
||||
document.getElementById("modal_"+pid).remove();
|
||||
Prompts[pid].resolve();
|
||||
});
|
||||
@ -1685,6 +1713,20 @@ function updateMixerRun(e=false){ // this is the main auto-mixing code. It's a
|
||||
if (session.videoElement.srcObject.getVideoTracks().length){
|
||||
if (mpl===0 && session.minipreview===2){
|
||||
mediaPool.push(session.videoElement);
|
||||
} else if (session.minipreview===3){
|
||||
var container = document.createElement("div");
|
||||
container.style.top="-500px";
|
||||
container.style.left="-500px";
|
||||
container.style.width="1px";
|
||||
container.style.height="1px";
|
||||
container.style.display = "flex";
|
||||
container.style.zIndex = "0";
|
||||
container.style.margin="0";
|
||||
container.style.position="absolute";
|
||||
container.style.cursor = "pointer";
|
||||
container.style.border = "0";
|
||||
container.appendChild(session.videoElement);
|
||||
playarea.appendChild(container);
|
||||
} else {
|
||||
var container = document.createElement("div");
|
||||
container.style.top=hi;
|
||||
@ -2049,9 +2091,13 @@ function updateMixerRun(e=false){ // this is the main auto-mixing code. It's a
|
||||
|
||||
if (!session.cleanOutput && !session.nocursor){
|
||||
if ((session.roomid!==false) && (session.scene===false)){
|
||||
var button = document.createElement("div");
|
||||
button.id = "button_"+vid.id;
|
||||
|
||||
var button = container.querySelector('[data-button]');
|
||||
if (!button){
|
||||
button = document.createElement("div");
|
||||
}
|
||||
button.id = "button_"+vid.id;
|
||||
button.dataset.button = true;
|
||||
if (session.infocus){
|
||||
button.innerHTML = "<img src='./media/sd.svg' style='background-color:#0007;width:4vh' aria-hidden='true' />";
|
||||
button.title = "Show all active videos togethers";
|
||||
@ -4819,16 +4865,30 @@ session.publishIFrame = function(iframeURL){
|
||||
log(iframeURL);
|
||||
}
|
||||
} else if (domain=="www.twitch.tv"){
|
||||
var vidid = iframeURL.split('/').pop().split('#')[0].split('?')[0];
|
||||
if (vidid){
|
||||
iframeURL = "https://player.twitch.tv/?channel="+vidid+"&parent="+location.hostname;
|
||||
log(iframeURL);
|
||||
if (iframeURL.includes("twitch.tv/popout/")){
|
||||
// this is a twitch live chat window
|
||||
iframeURL = iframeURL.replace("/popout/","/embed/");
|
||||
iframeURL = iframeURL.replace("?popout=","?parent="+location.hostname);
|
||||
iframeURL = iframeURL.replace("?popout","?parent="+location.hostname);
|
||||
} else {
|
||||
var vidid = iframeURL.split('/').pop().split('#')[0].split('?')[0];
|
||||
if (vidid){
|
||||
iframeURL = "https://player.twitch.tv/?channel="+vidid+"&parent="+location.hostname;
|
||||
log(iframeURL);
|
||||
}
|
||||
}
|
||||
} else if (domain=="twitch.tv"){
|
||||
var vidid = iframeURL.split('/').pop().split('#')[0].split('?')[0];
|
||||
if (vidid){
|
||||
iframeURL = "https://player.twitch.tv/?channel="+vidid+"&parent="+location.hostname;
|
||||
log(iframeURL);
|
||||
if (iframeURL.includes("twitch.tv/popout/")){
|
||||
// this is a twitch live chat window
|
||||
iframeURL = iframeURL.replace("/popout/","/embed/");
|
||||
iframeURL = iframeURL.replace("?popout=","?parent="+location.hostname);
|
||||
iframeURL = iframeURL.replace("?popout","?parent="+location.hostname);
|
||||
} else {
|
||||
var vidid = iframeURL.split('/').pop().split('#')[0].split('?')[0];
|
||||
if (vidid){
|
||||
iframeURL = "https://player.twitch.tv/?channel="+vidid+"&parent="+location.hostname;
|
||||
log(iframeURL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -6097,6 +6157,8 @@ function createDirectorCam(vid) {
|
||||
getById("press2talk").dataset.value = 1;
|
||||
session.muted = false;
|
||||
toggleMute(true);
|
||||
|
||||
getById("mutebutton").classList.remove("advanced");
|
||||
getById("screensharebutton").classList.remove("advanced");
|
||||
getById("hangupbutton2").classList.remove("advanced");
|
||||
setTimeout(function() {
|
||||
@ -8462,6 +8524,10 @@ async function grabScreen(quality = 0, audio = true, videoOnEnd = false) {
|
||||
screenShareAudioTrack = track;
|
||||
}
|
||||
});
|
||||
|
||||
session.applySoloChat(); // mute streams that should be muted if a director
|
||||
session.applyIsolatedChat();
|
||||
|
||||
applyMirror(true, eleName);
|
||||
return true;
|
||||
}).catch(function(err) {
|
||||
@ -9110,7 +9176,6 @@ async function grabAudio(eleName = "previewWebcam", selector = "#audioSource", t
|
||||
|
||||
toggleMute(true);
|
||||
if (session.videoElement.srcObject.getAudioTracks()) {
|
||||
|
||||
for (UUID in session.pcs) {
|
||||
if (session.pcs[UUID].allowAudio == true) {
|
||||
var tracks = session.videoElement.srcObject.getAudioTracks();
|
||||
@ -9173,9 +9238,10 @@ async function grabAudio(eleName = "previewWebcam", selector = "#audioSource", t
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
session.applySoloChat(); // mute streams that should be muted if a director
|
||||
session.applyIsolatedChat();
|
||||
}
|
||||
} catch (e) {
|
||||
errorlog(e);
|
||||
@ -10269,6 +10335,10 @@ session.publishFile = function(ele, event, title="Video File Sharing Session"){
|
||||
});
|
||||
session.refreshScale();
|
||||
}
|
||||
|
||||
session.applySoloChat(); // mute streams that should be muted if a director
|
||||
session.applyIsolatedChat();
|
||||
|
||||
vid.load();
|
||||
log(session.streamSrc);
|
||||
vid.play().then(_ => {
|
||||
@ -10630,16 +10700,30 @@ function previewIframe(iframesrc) { // this is pretty important if you want to a
|
||||
log(iframesrc);
|
||||
}
|
||||
} else if (domain=="www.twitch.tv"){
|
||||
var vidid = iframesrc.split('/').pop().split('#')[0].split('?')[0];
|
||||
if (vidid){
|
||||
iframesrc = "https://player.twitch.tv/?channel="+vidid+"&parent="+location.hostname;
|
||||
log(iframesrc);
|
||||
if (iframeURL.includes("twitch.tv/popout/")){
|
||||
// this is a twitch live chat window
|
||||
iframeURL = iframeURL.replace("/popout/","/embed/");
|
||||
iframeURL = iframeURL.replace("?popout=","?parent="+location.hostname);
|
||||
iframeURL = iframeURL.replace("?popout","?parent="+location.hostname);
|
||||
} else {
|
||||
var vidid = iframesrc.split('/').pop().split('#')[0].split('?')[0];
|
||||
if (vidid){
|
||||
iframesrc = "https://player.twitch.tv/?channel="+vidid+"&parent="+location.hostname;
|
||||
log(iframesrc);
|
||||
}
|
||||
}
|
||||
} else if (domain=="twitch.tv"){
|
||||
var vidid = iframesrc.split('/').pop().split('#')[0].split('?')[0];
|
||||
if (vidid){
|
||||
iframesrc = "https://player.twitch.tv/?channel="+vidid+"&parent="+location.hostname;
|
||||
log(iframesrc);
|
||||
if (iframeURL.includes("twitch.tv/popout/")){
|
||||
// this is a twitch live chat window
|
||||
iframeURL = iframeURL.replace("/popout/","/embed/");
|
||||
iframeURL = iframeURL.replace("?popout=","?parent="+location.hostname);
|
||||
iframeURL = iframeURL.replace("?popout","?parent="+location.hostname);
|
||||
} else {
|
||||
var vidid = iframesrc.split('/').pop().split('#')[0].split('?')[0];
|
||||
if (vidid){
|
||||
iframesrc = "https://player.twitch.tv/?channel="+vidid+"&parent="+location.hostname;
|
||||
log(iframesrc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -12420,16 +12504,33 @@ function shareWebsite(autostart=false){
|
||||
log(iframeURL);
|
||||
}
|
||||
} else if (domain=="www.twitch.tv"){
|
||||
var vidid = iframeURL.split('/').pop().split('#')[0].split('?')[0];
|
||||
if (vidid){
|
||||
iframeURL = "https://player.twitch.tv/?channel="+vidid+"&parent="+location.hostname;
|
||||
log(iframeURL);
|
||||
if (iframeURL.includes("twitch.tv/popout/")){
|
||||
// this is a twitch live chat window
|
||||
//https://www.twitch.tv/embed/complex/chat?parent=vdo.ninja
|
||||
//https://www.twitch.tv/popout/complex/chat?popout=
|
||||
|
||||
iframeURL = iframeURL.replace("/popout/","/embed/");
|
||||
iframeURL = iframeURL.replace("?popout=","?parent="+location.hostname);
|
||||
iframeURL = iframeURL.replace("?popout","?parent="+location.hostname);
|
||||
} else {
|
||||
var vidid = iframeURL.split('/').pop().split('#')[0].split('?')[0];
|
||||
if (vidid){
|
||||
iframeURL = "https://player.twitch.tv/?channel="+vidid+"&parent="+location.hostname;
|
||||
log(iframeURL);
|
||||
}
|
||||
}
|
||||
} else if (domain=="twitch.tv"){
|
||||
var vidid = iframeURL.split('/').pop().split('#')[0].split('?')[0];
|
||||
if (vidid){
|
||||
iframeURL = "https://player.twitch.tv/?channel="+vidid+"&parent="+location.hostname;
|
||||
log(iframeURL);
|
||||
if (iframeURL.includes("twitch.tv/popout/")){
|
||||
// this is a twitch live chat window
|
||||
iframeURL = iframeURL.replace("/popout/","/embed/");
|
||||
iframeURL = iframeURL.replace("?popout=","?parent="+location.hostname);
|
||||
iframeURL = iframeURL.replace("?popout","?parent="+location.hostname);
|
||||
} else {
|
||||
var vidid = iframeURL.split('/').pop().split('#')[0].split('?')[0];
|
||||
if (vidid){
|
||||
iframeURL = "https://player.twitch.tv/?channel="+vidid+"&parent="+location.hostname;
|
||||
log(iframeURL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
47
main.css
47
main.css
@ -159,6 +159,10 @@ button.grey {
|
||||
background-color: #840000 !important;
|
||||
}
|
||||
|
||||
.orange {
|
||||
background-color: #673100 !important;
|
||||
}
|
||||
|
||||
button.red {
|
||||
-webkit-app-region: no-drag;
|
||||
padding: 10px;
|
||||
@ -217,6 +221,15 @@ button.white:active {
|
||||
pointer-events: none;
|
||||
float: right;
|
||||
}
|
||||
#head6 {
|
||||
display: inline-block;
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
text-align: left;
|
||||
margin-left: 10px;
|
||||
pointer-events: none;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
#overlayMsgs{
|
||||
margin:0 auto;
|
||||
@ -314,6 +327,15 @@ button.white:active {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.altpress {
|
||||
background: #673100 !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;
|
||||
}
|
||||
|
||||
.row {
|
||||
align-content: center;
|
||||
text-align: center;
|
||||
@ -1401,7 +1423,7 @@ img {
|
||||
}
|
||||
.float2 {
|
||||
opacity: 0.8;
|
||||
width: 45px;
|
||||
min-width: 45px;
|
||||
height: 45px;
|
||||
background-color: #8888;
|
||||
color: #FFF;
|
||||
@ -2901,6 +2923,29 @@ input:checked + .slider:before {
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.modalBackdrop {
|
||||
background: var(--background-color);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
z-index: 0;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.opaqueBackdrop{
|
||||
background: var(--background-color);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
z-index: 0;
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
|
||||
@media only screen and (max-width: 390px) {
|
||||
.alertModal {
|
||||
width: 90%;
|
||||
|
||||
66
main.js
66
main.js
@ -189,27 +189,6 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
getById("mutespeakerbutton").style.setProperty("display", "none", "important");
|
||||
}
|
||||
|
||||
if (urlParams.has('screenshareid') || urlParams.has('ssid')) {
|
||||
if (urlParams.get('screenshareid') || urlParams.get('ssid')) {
|
||||
session.screenshareid = urlParams.get('screenshareid') || urlParams.get('ssid');
|
||||
session.screenshareid = sanitizeStreamID(session.screenshareid);
|
||||
}
|
||||
}
|
||||
|
||||
if (urlParams.has('screensharefps') || urlParams.has('ssfps')) {
|
||||
if (urlParams.get('screensharefps') || urlParams.get('ssfps')) {
|
||||
session.screensharefps = urlParams.get('screensharefps') || urlParams.get('ssfps');
|
||||
session.screensharefps = parseInt(session.screensharefps) || 2;
|
||||
}
|
||||
}
|
||||
|
||||
if (urlParams.has('screensharequality') || urlParams.has('ssq')) {
|
||||
if (urlParams.get('screensharequality') || urlParams.get('ssq')) {
|
||||
session.screensharequality = urlParams.get('screensharequality') || urlParams.get('ssq');
|
||||
session.screensharequality = parseInt(session.screensharequality) || 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
|
||||
//session.webcamonly = true;
|
||||
session.mobile = true;
|
||||
@ -520,10 +499,12 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
|
||||
if (urlParams.has('bigbutton')) {
|
||||
session.bigmutebutton = true;
|
||||
getById("mutebutton").style.width = "min(40vh,40vw)";
|
||||
getById("mutebutton").style.height = "min(40vh,40vw)";
|
||||
getById("mutetoggle").style.width = "min(40vh,40vw)";
|
||||
getById("mutetoggle").style.height = "min(40vh,40vw)";
|
||||
getById("mutebutton").style.bottom = "100px";
|
||||
getById("mutebutton").style.padding = "100px";
|
||||
getById("mutebutton").style.position = "fixed";
|
||||
getById("mutetoggle").style.bottom = "20px";
|
||||
getById("mutetoggle").style.right = "0";
|
||||
getById("mutetoggle").style.top = "unset";
|
||||
|
||||
}
|
||||
|
||||
@ -597,7 +578,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
session.password = urlParams.get('password') || urlParams.get('pass') || urlParams.get('pw') || urlParams.get('p');
|
||||
if (!session.password) {
|
||||
window.focus();
|
||||
session.password = await promptAlt(miscTranslations["enter-password"]);
|
||||
session.password = await promptAlt(miscTranslations["enter-password"], true);
|
||||
} else if (session.password === "false") {
|
||||
session.password = false;
|
||||
session.defaultPassword = false;
|
||||
@ -623,7 +604,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
var hash_input = urlParams.get('hash') || urlParams.get('crc') || urlParams.get('check');
|
||||
if (session.password === false) {
|
||||
window.focus();
|
||||
session.password = await promptAlt(miscTranslations["enter-password-2"]);
|
||||
session.password = await promptAlt(miscTranslations["enter-password-2"], true);
|
||||
session.password = sanitizePassword(session.password);
|
||||
getById("passwordRoom").value = session.password;
|
||||
session.defaultPassword = false;
|
||||
@ -679,7 +660,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
var updateURLAsNeed = true;
|
||||
if (session.label == null || session.label.length == 0) {
|
||||
window.focus();
|
||||
session.label = await promptAlt(miscTranslations["enter-display-name"]);
|
||||
session.label = await promptAlt(miscTranslations["enter-display-name"], true);
|
||||
} else {
|
||||
var updateURLAsNeed = false;
|
||||
session.label = decodeURIComponent(session.label);
|
||||
@ -933,11 +914,15 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
if (urlParams.has('nopreview') || urlParams.has('np')) {
|
||||
log("preview OFF");
|
||||
session.nopreview = true;
|
||||
if ((iOS) || (iPad)) {
|
||||
session.nopreview = false;
|
||||
session.minipreview = 3; //
|
||||
}
|
||||
} else if ((urlParams.has('preview')) || (urlParams.has('showpreview'))) {
|
||||
log("preview ON");
|
||||
session.nopreview = false;
|
||||
} else if ((urlParams.has('minipreview')) || (urlParams.has('mini'))) {
|
||||
var mini = urlParams.has('minipreview') || urlParams.has('mini') || true; // 2 is a valid option.
|
||||
var mini = urlParams.has('minipreview') || urlParams.has('mini') || true; // 2 is a valid option. (3 is for iPhone with a hidden preview)
|
||||
log("preview ON");
|
||||
session.nopreview = false;
|
||||
session.minipreview = mini;
|
||||
@ -2005,6 +1990,29 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (urlParams.has('screenshareid') || urlParams.has('ssid')) {
|
||||
if (urlParams.get('screenshareid') || urlParams.get('ssid')) {
|
||||
session.screenshareid = urlParams.get('screenshareid') || urlParams.get('ssid');
|
||||
session.screenshareid = sanitizeStreamID(session.screenshareid);
|
||||
} else {
|
||||
session.screenshareid = session.streamID + "_screenshare";
|
||||
}
|
||||
}
|
||||
|
||||
if (urlParams.has('screensharefps') || urlParams.has('ssfps')) {
|
||||
if (urlParams.get('screensharefps') || urlParams.get('ssfps')) {
|
||||
session.screensharefps = urlParams.get('screensharefps') || urlParams.get('ssfps');
|
||||
session.screensharefps = parseInt(session.screensharefps) || 2;
|
||||
}
|
||||
}
|
||||
|
||||
if (urlParams.has('screensharequality') || urlParams.has('ssq')) {
|
||||
if (urlParams.get('screensharequality') || urlParams.get('ssq')) {
|
||||
session.screensharequality = urlParams.get('screensharequality') || urlParams.get('ssq');
|
||||
session.screensharequality = parseInt(session.screensharequality) || 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ((session.roomid) || (urlParams.has('roomid')) || (urlParams.has('r')) || (urlParams.has('room')) || (filename) || (session.permaid !== false)) {
|
||||
|
||||
|
||||
@ -143,7 +143,7 @@
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"fade-videos-in": "Animate mixing",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
|
||||
@ -312,7 +312,7 @@
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Animate mixing",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
|
||||
@ -312,7 +312,7 @@
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Animate mixing",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
|
||||
@ -143,7 +143,7 @@
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"fade-videos-in": "Animate mixing",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
|
||||
@ -283,7 +283,7 @@
|
||||
"add-to-yahoo-calendar": "Añadir a Calendario Yahoo",
|
||||
"push-to-talk-enable": " enable director`s microphone or video<br>(only guests can see this feed)",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Animate mixing",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
|
||||
@ -312,7 +312,7 @@
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Animate mixing",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
|
||||
@ -312,7 +312,7 @@
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Animate mixing",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
|
||||
@ -312,7 +312,7 @@
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Animate mixing",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
|
||||
@ -312,7 +312,7 @@
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Animate mixing",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
|
||||
@ -312,7 +312,7 @@
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Animate mixing",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
|
||||
@ -312,7 +312,7 @@
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Animate mixing",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
|
||||
@ -312,7 +312,7 @@
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Animate mixing",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
|
||||
@ -312,7 +312,7 @@
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Animate mixing",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
|
||||
@ -251,7 +251,7 @@
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"fade-videos-in": "Animate mixing",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user