<html> 
 | 
    <head> 
 | 
            <meta charset="UTF-8"> 
 | 
            <style> 
 | 
            #map { 
 | 
                width: 100%; 
 | 
                height: 90%; 
 | 
                margin: 0 auto; 
 | 
            } 
 | 
            #focus { 
 | 
                width: 100%; 
 | 
                height: 100%; 
 | 
                position: absolute; 
 | 
                margin: 0 auto; 
 | 
                z-index: 1; 
 | 
            } 
 | 
            </style> 
 | 
            <script src="./webrtcconfig.js"></script> 
 | 
            <script type="module" src="./webrtc-streamer-element.js"></script> 
 | 
            <script src="https://maps.googleapis.com/maps/api/js?v=3"></script> 
 | 
            <script src="./htmlmapmarker.js"></script> 
 | 
            <script type="module" src="webrtc-streamer-footer-element.js"></script> 
 | 
    </head> 
 | 
    <body> 
 | 
        
 | 
       <div id="map"></div> 
 | 
       <webrtc-streamer-footer></webrtc-streamer-footer> 
 | 
  
 | 
       <script> 
 | 
      fetch(webrtcConfig.url + "/api/getMediaList").then( r => r.json() ).then((response) => {  
 | 
         let mediaList = {} 
 | 
         response.forEach( (media) => { 
 | 
           if (media.position) { 
 | 
              const position = media.position.split(','); 
 | 
              mediaList[media.video] = new google.maps.LatLng(position[0], position[1]); 
 | 
           } 
 | 
         }); 
 | 
  
 | 
         const width = 64; 
 | 
         const height = 48; 
 | 
         const webrtcoptions = 'rtptransport=tcp&timeout=60'; 
 | 
         const mapOptions = { 
 | 
           zoom: 2, 
 | 
           center: new google.maps.LatLng(0,0) 
 | 
         }; 
 | 
         const map = new google.maps.Map(document.getElementById("map"), mapOptions); 
 | 
  
 | 
         let markerList = {}; 
 | 
         for (let [key, latlng] of Object.entries(mediaList))  { 
 | 
              let marker = new HTMLMapMarker({ 
 | 
                latlng, 
 | 
                map, 
 | 
                html: `<webrtc-streamer id="${key}" url='{"video":"${key}"}' options='width=64&height=48&${webrtcoptions}' notitle width='100%' height='100%'></webrtc-streamer>`, 
 | 
                width, 
 | 
                height 
 | 
              });       
 | 
              google.maps.event.addListener(marker, 'click', function() { 
 | 
                const mapdiv = map.getDiv(); 
 | 
  
 | 
                let div = document.createElement("div"); 
 | 
                div.id = "focus"; 
 | 
                div.innerHTML = `<webrtc-streamer id="${key}-focus" url='{"video":"${key}"}' options='${webrtcoptions}' notitle width='100%' height='100%'></webrtc-streamer>`; 
 | 
                div.onclick = function() { 
 | 
                  mapdiv.removeChild(div); 
 | 
                } 
 | 
                mapdiv.appendChild(div); 
 | 
              }); 
 | 
              markerList[key] = marker;      
 | 
         } 
 | 
          
 | 
        map.addListener('zoom_changed', function() { 
 | 
          let zoom = map.getZoom(); 
 | 
          for (let [key, marker] of Object.entries(markerList))  { 
 | 
              const webrtc = document.getElementById(key); 
 | 
              marker.setSize(`${width*zoom/4}`, `${height*zoom/4}`);     
 | 
            } 
 | 
        }); 
 | 
  
 | 
        map.addListener('idle', function() { 
 | 
            var bounds = map.getBounds(); 
 | 
            let zoom = map.getZoom(); 
 | 
  
 | 
            for (let [key, marker] of Object.entries(markerList))  { 
 | 
              if(bounds.contains(marker.getPosition())===true) { 
 | 
                marker.attach(); 
 | 
                marker.setSize(`${width*zoom/4}`, `${height*zoom/4}`);               
 | 
              } else { 
 | 
                marker.detach(); 
 | 
              } 
 | 
            } 
 | 
        }); 
 | 
  
 | 
      });    
 | 
       </script>        
 | 
    </body> 
 | 
</html> 
 |