| <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> |