mirror of
https://github.com/eliasstepanik/vdo.ninja.git
synced 2026-01-13 22:58:35 +00:00
raise hand fix; highlight+ctrl
This commit is contained in:
parent
217ad59c44
commit
2020366406
58
index.html
58
index.html
@ -56,7 +56,7 @@
|
||||
<meta property="twitter:image" content="./media/vdoNinja_logo_full.png" />
|
||||
<meta name="msapplication-TileColor" content="#da532c" />
|
||||
<meta name="theme-color" content="#ffffff" />
|
||||
<link rel="stylesheet" href="./main.css?ver=265" />
|
||||
<link rel="stylesheet" href="./main.css?ver=269" />
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/adapter.js"></script>
|
||||
<style id="lightbox-animations" type="text/css"></style>
|
||||
<!-- <link rel="manifest" href="manifest.json" /> -->
|
||||
@ -83,7 +83,7 @@
|
||||
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/CodecsHandler.js?ver=45"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/aes.js"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./webrtc.js?ver=579"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./webrtc.js?ver=580"></script>
|
||||
<input id="zoomSlider" type="range" style="display: none;" />
|
||||
<span id="electronDragZone" style="pointer-events: none; z-index:-10; position:absolute;top:0;left:0;width:100%;height:2%;-webkit-app-region: drag;min-height:20px;"></span>
|
||||
<div id="header">
|
||||
@ -1380,7 +1380,7 @@
|
||||
<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" onclick="requestInfocus(this);">
|
||||
<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>
|
||||
@ -1663,7 +1663,7 @@
|
||||
<span data-translate="force-keyframe">Rainbow Puke Fix</span>
|
||||
</button>
|
||||
|
||||
<button data-action-type="solo-video" title="Solo this video everywhere" onclick="requestInfocus(this);">
|
||||
<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>
|
||||
@ -2026,6 +2026,7 @@
|
||||
<div id="roomSettings" class="customModelPopup" style="display:none; user-select: none;">
|
||||
<div class="promptModalInner">
|
||||
<span class='modalClose' onclick="toggleRoomSettings();">×</span>
|
||||
<span class='modalClose' style="right:25px;" onclick="this.parentNode.parentNode.classList.toggle('pinToSide');getById('main').classList.toggle('makeSmallerDirectorRoom');">📌</span>
|
||||
<span></span>
|
||||
<h3 data-translate="change-room-settings">Change room settings</h3><br />
|
||||
|
||||
@ -2035,7 +2036,7 @@
|
||||
<input id="trbSettingInputManual" min="0" value="500" onchange="getById('trbSettingInput').value=this.value;changeTRB(this);" oninput="getById('trbSettingInputFeedback').innerHTML = this.value;" style="width:42px;display:inline-block;text-align: center;" />
|
||||
|
||||
<span style="margin: 20px 0 0 0;display:block" id='highlightDirectorSpan' title="Only the director's video will be visible to guests and within group scenes">
|
||||
<input id="highlightDirector" style="width: 15px; height: 15px; margin:10px;" name="highlightDirector" data-action-type="solo-video" type="checkbox" onchange="requestInfocus(this);" />
|
||||
<input id="highlightDirector" style="width: 15px; height: 15px; margin:10px;" name="highlightDirector" data-action-type="solo-video" type="checkbox" onchange="requestInfocus(this, event);" />
|
||||
<label for="highlightDirector" data-translate="highlight-director-only-video-guests-will-see">Highlight Director (only video guests will see)</label>
|
||||
</span>
|
||||
|
||||
@ -2078,6 +2079,49 @@
|
||||
<input id="widgetURL" onmousedown="toggleWidgetURL(this);event.preventDefault" onclick="toggleWidgetURL(this);event.preventDefault" class="hidden" style="cursor:pointer; display:inline-block; margin: 3px 0; margin-left: 10px; min-width: 230px; padding: 4px 5px 3px 5px; border: 1px solid black;" name="widgetURL" placeholder="Enter a URL for the sidebar page" type="text" />
|
||||
</span>
|
||||
|
||||
|
||||
<span style="margin: 5px 0 0 0;display:block">
|
||||
<button data-action-type="local-global-record" title="Record all the guests" onclick="
|
||||
document.querySelectorAll('[data-action-type=\'recorder-local\']').forEach(target=>{
|
||||
recordVideo(target);
|
||||
});">
|
||||
<i class="las la-circle"></i>
|
||||
<span data-translate="local-global-record">Local record - start all</span>
|
||||
</button>
|
||||
<button data-action-type="local-global-record" title="Record all the guests" onclick="
|
||||
document.querySelectorAll('[data-action-type=\'recorder-local\']').forEach(target=>{
|
||||
recordVideo(target);
|
||||
});">
|
||||
<i class="las la-square"></i>
|
||||
<span data-translate="local-global-record">Local record - stop all</span>
|
||||
</button>
|
||||
</span>
|
||||
<span style="margin: 5px 0 0 0;display:block">
|
||||
<button data-action-type="remote-global-record" title="Record all the guests" onclick="
|
||||
window.focus();
|
||||
async function jjj(){
|
||||
var bitrate = await promptAlt(miscTranslations['what-bitrate'], false, false, 6000);
|
||||
document.querySelectorAll('[data-action-type=\'recorder-remote\']').forEach(target=>{
|
||||
requestVideoRecord(target, true, bitrate);
|
||||
});
|
||||
}
|
||||
jjj();
|
||||
">
|
||||
<i class="las la-circle"></i>
|
||||
<span data-translate="remote-global-record">Remote record - start all</span>
|
||||
</button>
|
||||
<button data-action-type="remote-global-record" title="Record all the guests" onclick="
|
||||
document.querySelectorAll('[data-action-type=\'recorder-remote\']').forEach(target=>{
|
||||
if (target.classList.contains('pressed')){
|
||||
requestVideoRecord(target, false);
|
||||
}
|
||||
});">
|
||||
<i class="las la-square"></i>
|
||||
<span data-translate="remote-global-record">Remote record - stop all</span>
|
||||
</button>
|
||||
</span>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -2407,11 +2451,11 @@
|
||||
// session.hidehome = true; // If used, 'hide home' will make the landing page inaccessible, along with hiding a few go-home elements.
|
||||
// session.record = false; // uncomment to block users from being able to record via vdo.ninja's built in recording function
|
||||
</script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="lib-js" src="./lib.js?ver=666"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="lib-js" src="./lib.js?ver=671"></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=549"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="main-js" src="./main.js?ver=551"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
188
lib.js
188
lib.js
@ -3487,11 +3487,12 @@ function updateMixerRun(e=false){ // this is the main auto-mixing code. It's a
|
||||
if (session.groupView.length){
|
||||
groups.push(...session.groupView)
|
||||
}
|
||||
|
||||
var sssid = false;
|
||||
var soloVideo = false;
|
||||
|
||||
if (session.infocus===true){
|
||||
soloVideo = true;
|
||||
} else if (session.infocus && (session.infocus!==true) && (session.infocus in session.rpcs)){ // if the infocus stream is connected
|
||||
} else if (session.infocus && (session.infocus in session.rpcs)){ // if the infocus stream is connected
|
||||
if (groups.length || session.allowNoGroup){
|
||||
try {
|
||||
if (groups.some(item => session.rpcs[session.infocus].group.includes(item))){
|
||||
@ -3501,6 +3502,19 @@ function updateMixerRun(e=false){ // this is the main auto-mixing code. It's a
|
||||
} else {
|
||||
soloVideo = session.infocus;
|
||||
}
|
||||
} else if (session.infocus2===true){
|
||||
sssid = session.streamID;
|
||||
console.log("2.");
|
||||
} else if (session.infocus2 && (session.infocus2 in session.rpcs)){ // if the infocus2 stream is connected
|
||||
if (groups.length || session.allowNoGroup){
|
||||
try {
|
||||
if (groups.some(item => session.rpcs[session.infocus2].group.includes(item))){
|
||||
sssid = session.rpcs[session.infocus2].streamID;
|
||||
}
|
||||
} catch(e){errorlog(e);}
|
||||
} else {
|
||||
sssid = session.rpcs[session.infocus2].streamID;
|
||||
}
|
||||
}
|
||||
|
||||
var ww = w/arW;
|
||||
@ -3571,7 +3585,7 @@ function updateMixerRun(e=false){ // this is the main auto-mixing code. It's a
|
||||
}
|
||||
}
|
||||
|
||||
if (session.screenShareElement){ // I, myself, exist
|
||||
if (session.screenShareState && session.screenShareElement){ // I, myself, exist
|
||||
if (!session.screenShareElementHidden){
|
||||
if (session.order!==false){
|
||||
session.screenShareElement.order=session.order;
|
||||
@ -4165,8 +4179,6 @@ function updateMixerRun(e=false){ // this is the main auto-mixing code. It's a
|
||||
}
|
||||
|
||||
|
||||
|
||||
var sssid = false;
|
||||
var sscount = 0;
|
||||
|
||||
var skip = false;
|
||||
@ -4193,57 +4205,65 @@ function updateMixerRun(e=false){ // this is the main auto-mixing code. It's a
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var mpl = session.slots || mediaPool.length;
|
||||
|
||||
if (mpl>1){
|
||||
var BB = 0;
|
||||
var rw = 1;
|
||||
var rh = 1;
|
||||
var NW;
|
||||
var NH;
|
||||
var current;
|
||||
for (NW=1; NW <= mpl; NW++){
|
||||
NH = Math.ceil(mpl/NW);
|
||||
var www = ww/NW;
|
||||
var hhh = hh/NH;
|
||||
if (www>hhh){
|
||||
current = hhh * hhh * (mpl/(NW*NH));
|
||||
} else {
|
||||
current = www * www * (mpl/(NW*NH));
|
||||
}
|
||||
|
||||
if (current>=BB){
|
||||
BB = current;
|
||||
rw = NW;
|
||||
rh = NH;
|
||||
}
|
||||
|
||||
if (mediaPool[NW-1]){
|
||||
//if (mediaPool[NW-1].tagName == "VIDEO"){
|
||||
if (mediaPool[NW-1].dataset.UUID){
|
||||
if (mediaPool[NW-1].dataset.UUID in session.rpcs){
|
||||
if (session.rpcs[mediaPool[NW-1].dataset.UUID].screenShareState){
|
||||
sscount+=1;
|
||||
sssid = mediaPool[NW-1].dataset.sid;
|
||||
if (!sssid){
|
||||
if (mpl>1){
|
||||
var BB = 0;
|
||||
var rw = 1;
|
||||
var rh = 1;
|
||||
var NW;
|
||||
var NH;
|
||||
var current;
|
||||
for (NW=1; NW <= mpl; NW++){
|
||||
NH = Math.ceil(mpl/NW);
|
||||
var www = ww/NW;
|
||||
var hhh = hh/NH;
|
||||
if (www>hhh){
|
||||
current = hhh * hhh * (mpl/(NW*NH));
|
||||
} else {
|
||||
current = www * www * (mpl/(NW*NH));
|
||||
}
|
||||
|
||||
if (current>=BB){
|
||||
BB = current;
|
||||
rw = NW;
|
||||
rh = NH;
|
||||
}
|
||||
|
||||
if (mediaPool[NW-1]){
|
||||
//if (mediaPool[NW-1].tagName == "VIDEO"){
|
||||
if (mediaPool[NW-1].dataset.UUID){
|
||||
if (mediaPool[NW-1].dataset.UUID in session.rpcs){
|
||||
if (session.rpcs[mediaPool[NW-1].dataset.UUID].screenShareState){
|
||||
sscount+=1;
|
||||
sssid = mediaPool[NW-1].dataset.sid;
|
||||
}
|
||||
}
|
||||
} else if (("id" in mediaPool[NW-1]) && (mediaPool[NW-1].id == "screensharesource") && session.notifyScreenShare){
|
||||
sscount+=1;
|
||||
sssid = mediaPool[NW-1].dataset.sid;
|
||||
}
|
||||
} else if (("id" in mediaPool[NW-1]) && (mediaPool[NW-1].id == "screensharesource") && session.notifyScreenShare){
|
||||
sscount+=1;
|
||||
sssid = mediaPool[NW-1].dataset.sid;
|
||||
}
|
||||
}
|
||||
} else { var rw=1; var rh=1;}
|
||||
|
||||
if (sscount>1){
|
||||
sssid = false; // lets not maximize if more than one screen share.
|
||||
}
|
||||
} else { var rw=1; var rh=1;}
|
||||
if (sscount>1){
|
||||
sssid = false; // lets not maximize if more than one screen share.
|
||||
}
|
||||
|
||||
} catch(e){
|
||||
errorlog(e);
|
||||
sssid = false
|
||||
}
|
||||
|
||||
console.log(soloVideo);
|
||||
console.log(sssid);
|
||||
console.log(mediaPool);
|
||||
|
||||
var customLayout=false;
|
||||
var customLayout=false;
|
||||
|
||||
if (!session.notifyScreenShare && (session.scene!==false)){
|
||||
// this is a scene, so lets assume &smallshare will disable larger screen shares since there is no one to screen share.
|
||||
@ -10691,7 +10711,7 @@ function reloadRequested() {
|
||||
location.reload(); // the main reload function call
|
||||
}
|
||||
function confirmUnload(event){
|
||||
if (!session.noExitPrompt && !session.cleanOutput && (session.permaid!==false || session.director)){
|
||||
if (!session.noExitPrompt && !session.cleanOutput && (session.scene === false) && (session.seeding || (session.roomid!==false) || (session.permaid!==false) || session.director)){
|
||||
(event || window.event).returnValue = "Are you sure you want to exit?"; //Gecko + IE
|
||||
return "Are you sure you want to exit?";
|
||||
} else {
|
||||
@ -15190,7 +15210,7 @@ function getDirectorSettings(scene=false){
|
||||
return settings;
|
||||
}
|
||||
|
||||
function requestInfocus(ele) {
|
||||
function requestInfocus(ele, evt=null, value=null) {
|
||||
try{
|
||||
var sid = ele.dataset.sid;
|
||||
} catch(e){
|
||||
@ -15203,6 +15223,22 @@ function requestInfocus(ele) {
|
||||
}
|
||||
}
|
||||
|
||||
if (value!==null){
|
||||
if (value){
|
||||
ele.value == 0; // we will toggle it in a second anyways.
|
||||
} else {
|
||||
ele.value == 1;
|
||||
}
|
||||
}
|
||||
|
||||
var special = false;
|
||||
if (evt){
|
||||
special = evt.ctrlKey || evt.metaKey || false;
|
||||
if (special){
|
||||
special = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (ele.value == 1) {
|
||||
ele.value = 0;
|
||||
ele.classList.remove("pressed");
|
||||
@ -15211,7 +15247,11 @@ function requestInfocus(ele) {
|
||||
session.sendMessage(actionMsg);
|
||||
} else {
|
||||
var actionMsg = {};
|
||||
actionMsg.infocus = sid;
|
||||
if (special){
|
||||
actionMsg.infocus2 = sid;
|
||||
} else {
|
||||
actionMsg.infocus = sid;
|
||||
}
|
||||
session.sendMessage(actionMsg);
|
||||
|
||||
var eles = document.querySelectorAll('[data-action-type="solo-video"]');
|
||||
@ -15328,6 +15368,7 @@ async function createDirectorOnlyBox() {
|
||||
buttons += "<div title='Does not impact scene order.' class='shift'><i class='las la-angle-left' onclick='shiftPC(this,-1, true);'></i><i class='las la-angle-right' onclick='shiftPC(this,1, true)';></i></div>\
|
||||
<div class='streamID' style='user-select: none;'>ID: <span style='user-select: text;'>" + session.streamID + "</span>\
|
||||
<i class='las la-copy' data-sid='" + session.streamID + "' onclick='copyFunction(this.dataset.sid,event)' title='Copy this Stream ID to the clipboard' style='cursor:pointer'></i>\
|
||||
<i class='las la-window-minimize' onclick='minimizeMe(this, \'container_director\')' title='Minimize this control box' style='cursor:pointer'></i>\
|
||||
<span id='label_director' class='addALabel' title='Click here to edit the label for this stream. Changes will propagate to all viewers of this stream' data-translate='add-a-label'>"+miscTranslations["add-a-label"]+"</span>\
|
||||
</div>\
|
||||
<div id='videoContainer_director'></div>";
|
||||
@ -15490,6 +15531,7 @@ async function createDirectorScreenshareOnlyBox() { // sstype=3
|
||||
buttons += "<div title='Does not impact scene order.' class='shift'><i class='las la-angle-left' onclick='shiftPC(this,-1, true);'></i><i class='las la-angle-right' onclick='shiftPC(this,1, true)';></i></div>\
|
||||
<div class='streamID' style='user-select: none;'>ID: <span style='user-select: text;'>" + session.streamID+":s</span>\
|
||||
<i class='las la-copy' data-sid='" + session.streamID+":s' onclick='copyFunction(this.dataset.sid,event)' title='Copy this Stream ID to the clipboard' style='cursor:pointer'></i>\
|
||||
<i class='las la-window-minimize' onclick='minimizeMe(this, \'container_screen_director\')' title='Minimize this control box'></i>\
|
||||
<span id='label_director' class='addALabel' title='Click here to edit the label for this stream. Changes will propagate to all viewers of this stream' data-translate='add-a-label'>"+miscTranslations["add-a-label"]+"</span>\
|
||||
</div>\
|
||||
<div id='videoScreenContainer_director'></div>";
|
||||
@ -15999,7 +16041,7 @@ function createControlBox(UUID, soloLink, streamID) {
|
||||
</div>";
|
||||
}
|
||||
|
||||
controls.innerHTML += "<button data-action-type=\"hand-raised\" id='" + handsID + "' class='lowerRaisedHand' title=\"This guest raised their hand. Click this to clear notification.\" onclick=\"remoteLowerhands('" + UUID + "');\">\
|
||||
controls.innerHTML += "<button data-action-type=\"hand-raised\" id='" + handsID + "' class='hidden lowerRaisedHand' title=\"This guest raised their hand. Click this to clear notification.\" onclick=\"remoteLowerhands('" + UUID + "');\">\
|
||||
<i class=\"las la-hand-paper\"></i>\
|
||||
<span data-translate=\"user-raised-hand\">Lower Raised Hand</span>\
|
||||
</button>\
|
||||
@ -16045,6 +16087,7 @@ function createControlBox(UUID, soloLink, streamID) {
|
||||
}
|
||||
buttons += "<div title='Does not impact scene order.' class='shift'><i class='las la-angle-left' data--u-u-i-d='"+UUID+"' onclick='shiftPC(this,-1);'></i><span onclick='lockPosition(this);' style='cursor:pointer;' data-locked='0' data--u-u-i-d='"+UUID+"' id='position_"+UUID+"'><i class='las la-lock-open'></i></span><i class='las la-angle-right' data--u-u-i-d='"+UUID+"' onclick='shiftPC(this,1);'></i></div><div class='streamID' style='user-select: none;'>ID: <span style='user-select: text;'>" + streamID + "</span>\
|
||||
<i class='las la-copy' data-sid='" + streamID + "' onclick='copyFunction(this.dataset.sid,event)' title='Copy this Stream ID to the clipboard' style='cursor:pointer'></i>\
|
||||
<i class='las la-window-minimize' data--u-u-i-d='"+UUID+"' onclick='minimizeMe(this)' title='Minimize this control box' style='cursor:pointer'></i>\
|
||||
<span id='label_" + UUID + "' class='addALabel' title='Click here to edit the label for this stream. Changes will propagate to all viewers of this stream'></span>\
|
||||
</div>";
|
||||
|
||||
@ -16174,6 +16217,14 @@ function createControlBox(UUID, soloLink, streamID) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function minimizeMe(button, director=false){
|
||||
if (!director){
|
||||
getById("container_"+button.dataset.UUID).classList.toggle("minimized");
|
||||
} else {
|
||||
getById(director).classList.toggle("minimized");
|
||||
}
|
||||
}
|
||||
function cycleCameras(){
|
||||
if (session.screenShareState) {
|
||||
warnUser("Stop the screen-share first.");
|
||||
@ -19506,16 +19557,16 @@ function toggleBufferSettings(UUID){
|
||||
function toggleRoomSettings(){
|
||||
toggle(getById('roomSettings'));
|
||||
if (getById('roomSettings').style.display=="none"){
|
||||
getById("modalBackdrop").innerHTML = ''; // Delete modal
|
||||
getById("modalBackdrop").remove();
|
||||
//getById("modalBackdrop").innerHTML = ''; // Delete modal
|
||||
//getById("modalBackdrop").remove();
|
||||
} else {
|
||||
getById("modalBackdrop").innerHTML = ''; // Delete modal
|
||||
getById("modalBackdrop").remove();
|
||||
//getById("modalBackdrop").innerHTML = ''; // Delete modal
|
||||
//getById("modalBackdrop").remove();
|
||||
zindex = 25;
|
||||
getById('roomSettings').style.zIndex = 25;
|
||||
var modalTemplate = `<div id="modalBackdrop" style="z-index:24"></div>`;
|
||||
document.body.insertAdjacentHTML("beforeend", modalTemplate); // Insert modal at body end
|
||||
document.getElementById("modalBackdrop").addEventListener("click", toggleRoomSettings);
|
||||
// document.body.insertAdjacentHTML("beforeend", modalTemplate); // Insert modal at body end
|
||||
// document.getElementById("modalBackdrop").addEventListener("click", toggleRoomSettings);
|
||||
document.getElementById('trbSettingInput').value = session.totalRoomBitrate;
|
||||
document.getElementById('trbSettingInputManual').value = session.totalRoomBitrate;
|
||||
document.getElementById('trbSettingInputFeedback').innerHTML = session.totalRoomBitrate;
|
||||
@ -23492,20 +23543,22 @@ function setupClosedCaptions() {
|
||||
}
|
||||
|
||||
|
||||
async function requestVideoRecord(ele) {
|
||||
var UUID = ele.dataset.UUID
|
||||
if (ele.classList.contains("pressed")) {
|
||||
async function requestVideoRecord(ele, state=null, bitrate=null) {
|
||||
var UUID = ele.dataset.UUID;
|
||||
if (!state && ele.classList.contains("pressed")) {
|
||||
var msg = {};
|
||||
msg.requestVideoRecord = false;
|
||||
msg.UUID = UUID;
|
||||
session.sendRequest(msg, msg.UUID);
|
||||
ele.classList.remove("pressed");
|
||||
} else {
|
||||
} else if (state==null || state){
|
||||
var msg = {};
|
||||
msg.requestVideoRecord = true;
|
||||
msg.UUID = UUID;
|
||||
window.focus();
|
||||
var bitrate = await promptAlt(miscTranslations["what-bitrate"], false, false, 6000);
|
||||
if (bitrate===null){
|
||||
window.focus();
|
||||
bitrate = await promptAlt(miscTranslations["what-bitrate"], false, false, 6000);
|
||||
}
|
||||
if (bitrate) {
|
||||
msg.value = bitrate;
|
||||
session.sendRequest(msg, msg.UUID);
|
||||
@ -32269,6 +32322,22 @@ function setupCommands(){
|
||||
return true;
|
||||
};
|
||||
|
||||
commands.soloVideo = function(value=null,value2=null){
|
||||
var element = getById("highlightDirector");
|
||||
if (value && (value == "toggle")){
|
||||
return requestInfocus(element);
|
||||
} else if (value && (value !== "null")){
|
||||
return requestInfocus(element, null, true);
|
||||
} else if (value && (value === "null")){
|
||||
return requestInfocus(element);
|
||||
} else {
|
||||
return requestInfocus(element, null, false);
|
||||
}
|
||||
return false;
|
||||
};
|
||||
commands.highlight = function(value=null,value2=null){
|
||||
return commands.soloVideo(value, value2);
|
||||
};
|
||||
|
||||
commands.layout = function(value=null,value2=null){
|
||||
try {
|
||||
@ -33721,7 +33790,7 @@ function createControlBoxScreenshare(UUID, soloLink, streamID) {
|
||||
</div>";
|
||||
}
|
||||
|
||||
controls.innerHTML += "<button data-action-type=\"hand-raised\" id='" + handsID + "' class='lowerRaisedHand' title=\"This guest raised their hand. Click this to clear notification.\" onclick=\"remoteLowerhands('" + UUID + "');\">\
|
||||
controls.innerHTML += "<button data-action-type=\"hand-raised\" id='" + handsID + "' class='hidden lowerRaisedHand' title=\"This guest raised their hand. Click this to clear notification.\" onclick=\"remoteLowerhands('" + UUID + "');\">\
|
||||
<i class=\"las la-hand-paper\"></i>\
|
||||
<span data-translate=\"user-raised-hand\">Lower Raised Hand</span>\
|
||||
</button>\
|
||||
@ -33768,6 +33837,7 @@ function createControlBoxScreenshare(UUID, soloLink, streamID) {
|
||||
|
||||
buttons += "<div title='Does not impact scene order.' class='shift'><i class='las la-angle-left' data--u-u-i-d='"+UUID+"' onclick='shiftPC(this,-1);'></i><span onclick='lockPosition(this);' style='cursor:pointer;' data-locked='0' data--u-u-i-d='"+UUID+"' id='position_"+UUID+"'><i class='las la-lock-open'></i></span><i class='las la-angle-right' data--u-u-i-d='"+UUID+"' onclick='shiftPC(this,1);'></i></div><div class='streamID' style='user-select: none;'>ID: <span style='user-select: text;'>" + streamID + "</span>\
|
||||
<i class='las la-copy' data-sid='" + streamID + "' onclick='copyFunction(this.dataset.sid,event)' title='Copy this Stream ID to the clipboard' style='cursor:pointer'></i>\
|
||||
<i class='las la-window-minimize' data--u-u-i-d='"+UUID+"' onclick='minimizeMe(this)' title='Minimize this control box' style='cursor:pointer'></i>\
|
||||
<span id='label_" + UUID + "' class='addALabel' title='Click here to edit the label for this stream. Changes will propagate to all viewers of this stream'></span>\
|
||||
</div>";
|
||||
|
||||
|
||||
98
main.css
98
main.css
@ -762,8 +762,59 @@ hr {
|
||||
animation: pulse 2s infinite;
|
||||
}
|
||||
|
||||
.minimized {
|
||||
float: left;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
height: 24px;
|
||||
overflow:hidden;
|
||||
box-shadow: inset -1px 1px white
|
||||
}
|
||||
|
||||
|
||||
.minimized:nth-child(1) {
|
||||
left:0px;
|
||||
z-index:10;
|
||||
}
|
||||
.minimized:nth-child(2) {
|
||||
left:max(100px, calc(10% - 260px));
|
||||
z-index:9;
|
||||
}
|
||||
.minimized:nth-child(3) {
|
||||
left:max(200px, calc(20% - 260px));
|
||||
z-index:8;
|
||||
}
|
||||
.minimized:nth-child(4) {
|
||||
left:max(250px, calc(30% - 260px));
|
||||
z-index:7;
|
||||
}
|
||||
.minimized:nth-child(5) {
|
||||
left:max(300px, calc(40% - 260px));
|
||||
z-index:6;
|
||||
}
|
||||
.minimized:nth-child(6) {
|
||||
left:max(450px, calc(50% - 260px));
|
||||
z-index:5;
|
||||
}
|
||||
.minimized:nth-child(7) {
|
||||
left:max(500px, calc(60% - 260px));
|
||||
z-index:4;
|
||||
}
|
||||
.minimized:nth-child(8) {
|
||||
left:max(650px, calc(70% - 260px));
|
||||
z-index:3;
|
||||
}
|
||||
.minimized:nth-child(9) {
|
||||
left:max(700px, calc(80% - 260px));
|
||||
z-index:2;
|
||||
}
|
||||
.minimized:nth-child(10) {
|
||||
left:max(850px, calc(90% - 260px));
|
||||
z-index:1;
|
||||
}
|
||||
.minimized:nth-child(11) {
|
||||
left:max(900px, calc(100% - 260px));
|
||||
z-index:0;
|
||||
}
|
||||
.battery {
|
||||
border: 3px solid #4192c5;
|
||||
width: 11px;
|
||||
@ -2149,10 +2200,19 @@ span[data-action-type="stats-graphs-details-container"]>span{
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
.soloButton{
|
||||
padding:5px;word-wrap: break-word; overflow:hidden; white-space: nowrap; overflow: hidden; font-size:0.7em; text-overflow: ellipsis;
|
||||
padding:5px;
|
||||
word-wrap: break-word;
|
||||
overflow:hidden;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
font-size:0.7em;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.lowerRaisedHand{
|
||||
margin: auto;margin-bottom:10px;display:none;background-color:yellow;
|
||||
margin: auto;
|
||||
margin-bottom:10px;
|
||||
background-color:yellow;
|
||||
}
|
||||
.float {
|
||||
opacity: 0.8;
|
||||
@ -3302,6 +3362,7 @@ div#chatBody a {
|
||||
width:1191px;
|
||||
padding: 10px;
|
||||
margin: 5px 10px 10px 10px;
|
||||
max-width:100%;
|
||||
}
|
||||
.directorContainer {
|
||||
background-color: var(--container-color);
|
||||
@ -3309,7 +3370,8 @@ div#chatBody a {
|
||||
grid-template-columns: 1fr ;
|
||||
margin: 10px 0px 10px 10px;
|
||||
padding: 10px;
|
||||
max-width: 1191px
|
||||
max-width: min(100%, 1191px);
|
||||
|
||||
}
|
||||
|
||||
#directorLinksButton{
|
||||
@ -3320,7 +3382,7 @@ div#chatBody a {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
padding: 10px 10px;
|
||||
width: 591px;
|
||||
width: min(100%, 591px);
|
||||
}
|
||||
.directorBlock {
|
||||
padding: 10px 10px 5px 10px;
|
||||
@ -3519,7 +3581,7 @@ i.las.la-circle {
|
||||
display: inline-block;
|
||||
}
|
||||
.streamID i {
|
||||
margin-left: 5px;
|
||||
margin-left: 1px;
|
||||
font-size: 1.3em;
|
||||
position: relative;
|
||||
top: 1px;
|
||||
@ -4300,8 +4362,26 @@ input:checked + .slider:before {
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
|
||||
.makeSmallerDirectorRoom{
|
||||
max-width: calc(100% - 415px);
|
||||
min-width: min(calc(100% - 395px), 75%);
|
||||
}
|
||||
.pinToSide{
|
||||
top: unset;
|
||||
left: unset;
|
||||
right: 0;
|
||||
transform: unset;
|
||||
border-radius: unset;
|
||||
height: 100%;
|
||||
max-width: min(25%, 415px);
|
||||
min-width: 395px;
|
||||
overflow-y: auto;
|
||||
position: fixed;
|
||||
}
|
||||
#roomSettings{
|
||||
max-height: 100%;
|
||||
overflow: auto;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Line Awesome Free';
|
||||
font-style: normal;
|
||||
@ -4462,6 +4542,8 @@ input:checked + .slider:before {
|
||||
content: "\f068"; }
|
||||
.la-minus-circle:before {
|
||||
content: "\f056"; }
|
||||
.la-window-minimize:before {
|
||||
content: "\f2d1"; }
|
||||
.la-hat-wizard:before {
|
||||
content: "\f6e8"; }
|
||||
.la-plus:before {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user