<html> 
 | 
<head> 
 | 
<script src="libs/strophe.min.js" ></script> 
 | 
<script src="libs/strophe.muc.min.js" ></script> 
 | 
<script src="libs/strophe.disco.min.js" ></script> 
 | 
<script src="libs/strophe.jingle.sdp.js"></script> 
 | 
<script src="libs/jquery-3.5.1.min.js"></script> 
 | 
<script src="libs/EventEmitter.min.js" ></script> 
 | 
<script src="xmppvideoroom.js" ></script> 
 | 
<script src="xmppconfig.js" ></script> 
 | 
<script src="webrtcconfig.js" ></script> 
 | 
<link rel="icon" type="image/ico" href="jitsi.ico" /> 
 | 
<link rel="stylesheet" type="text/css" href="styles.css"> 
 | 
</head> 
 | 
<body>  
 | 
    XMPP Url:<input id="xmppServer" type="text" size="50" />  
 | 
    Room id:<input id="xmppRoom" type="text" /> 
 | 
    <input type="button" onclick="openroom()" value="OpenRoom" /> 
 | 
    <nav id="menu"></nav> 
 | 
    <iframe src="jitsiroom.html" style="height:100%; width: 100%;"></iframe> 
 | 
</body> 
 | 
<script> 
 | 
    // set default value 
 | 
    document.querySelector('#xmppServer').value  = xmppRoomConfig.url; 
 | 
    document.querySelector('#xmppRoom').value = xmppRoomConfig.roomId; 
 | 
         
 | 
    // ------------------------------------------ 
 | 
    // XMPP connections 
 | 
    // ------------------------------------------     
 | 
    var XMPPServerList = {}; 
 | 
     
 | 
    function getText(url) { 
 | 
        var text; 
 | 
        if (url.video) { 
 | 
            text = url.video + " "; 
 | 
        } 
 | 
        if (url.audio) { 
 | 
            text += url.audio + " "; 
 | 
        } 
 | 
        return text; 
 | 
    }         
 | 
    // ------------------------------------------ 
 | 
    // init device list  
 | 
    // ------------------------------------------     
 | 
    function onGetDeviceList(remoteDeviceList) { 
 | 
        var deviceList = []; 
 | 
        if (remoteDeviceList) { 
 | 
            deviceList.push.apply( deviceList, remoteDeviceList ); 
 | 
        } 
 | 
  
 | 
        // create navigation menu 
 | 
        var urllist = document.getElementById("menu"); 
 | 
        for (var dev in deviceList) { 
 | 
            var url = deviceList[dev]; 
 | 
            var option = document.createElement("a"); 
 | 
            option.url = url; 
 | 
            option.text = getText(url); 
 | 
            option.id   = "nav_" + url.video; 
 | 
            option.onclick = function () {  
 | 
                if (this.className === "active") { 
 | 
                    disconnect(this.url.video);  
 | 
                } else { 
 | 
                    connect(this.url, this.url.video);  
 | 
                } 
 | 
            } 
 | 
            urllist.appendChild(option); 
 | 
        }         
 | 
    }         
 | 
    fetch(webrtcConfig.url + "/api/getMediaList").then(r => r.json()).then( (response) => {  
 | 
        onGetDeviceList(response); 
 | 
    }); 
 | 
         
 | 
    function onPresence (name, status) { 
 | 
        console.log("onPresence name:"+ name + " status:"+ status); 
 | 
        var videoId = name.split('/')[1]; 
 | 
        var navId = "nav_" + videoId; 
 | 
        var navElt = document.querySelector(`#${navId}`); 
 | 
        if (navElt) { 
 | 
            if (status == "out") { 
 | 
                navElt.className = ""; 
 | 
            } else if (status == "in") { 
 | 
                navElt.className = "active"; 
 | 
            } 
 | 
        } 
 | 
    }     
 | 
  
 | 
    var bus = new EventEmitter(); 
 | 
    bus.addListener('presence', onPresence); 
 | 
  
 | 
    function getXMPPServer() { 
 | 
        var serverName = document.querySelector('#xmppServer').value; 
 | 
  
 | 
        if (!XMPPServerList[serverName]) { 
 | 
            XMPPServerList[serverName] = new XMPPVideoRoom(serverName, webrtcConfig.url, bus); 
 | 
        } 
 | 
        var xmpp = XMPPServerList[serverName];     
 | 
        return xmpp; 
 | 
    }     
 | 
     
 | 
    function connect(webrtcStream, xmppuser) {     
 | 
        var roomName = document.querySelector('#xmppRoom').value;     
 | 
        var xmpp = getXMPPServer(); 
 | 
        xmpp.join(roomName, webrtcStream, xmppuser); 
 | 
    } 
 | 
     
 | 
    function disconnect(xmppuser) { 
 | 
        var roomName = document.querySelector('#xmppRoom').value;     
 | 
        var xmpp = getXMPPServer(); 
 | 
        if (xmpp) { 
 | 
            xmpp.leave(roomName, xmppuser); 
 | 
        } 
 | 
    } 
 | 
     
 | 
    function openroom() { 
 | 
        var serverName = document.querySelector('#xmppServer').value; 
 | 
        var roomName = document.querySelector('#xmppRoom').value;         
 | 
        window.open( location.protocol + "//" + serverName + "/" + roomName); 
 | 
    } 
 | 
     
 | 
    var roomName = document.querySelector('#xmppRoom').value;     
 | 
    var xmpp = getXMPPServer(); 
 | 
    xmpp.query(roomName);         
 | 
     
 | 
    window.onbeforeunload = function() {  
 | 
        console.log(Object.entries(XMPPServerList)) 
 | 
        Object.entries(XMPPServerList).forEach( ([serverName, xmpp]) => { 
 | 
            xmpp.leaveAll(); 
 | 
        }); 
 | 
    };         
 | 
</script> 
 | 
</html> 
 |