diff --git a/static/css/.base.min.css b/static/css/.base.min.css index 7347b4b..38718d5 100644 --- a/static/css/.base.min.css +++ b/static/css/.base.min.css @@ -1 +1 @@ -.container,.container:after,.container:before,.fa,div,footer{box-sizing:border-box}body,input,textarea{padding:0;margin:0;font-family:'Open Sans',sans-serif;font-size:18px;color:#eee}body{background-color:#080808}::-webkit-scrollbar{width:5vw;min-width:10px;max-width:40px}::-webkit-scrollbar-track{background-color:#080808;background-color:rgba(8,8,8,0)}::-webkit-scrollbar-thumb{border-radius:.2vw;background:#333}::selection{background:#999}::-moz-selection{background:#999}main{top:59px;position:absolute;left:0;right:0;bottom:0;overflow-y:auto}.container{padding-right:5%;padding-left:5%;width:100%;margin:0 auto}.container:after{content:"";display:block;clear:both}section{padding:10vh 0 5vh}h1,h2,h3{margin:0 0 5% 0;position:relative;z-index:6}h1,h2,h3,h4{font-weight:600}h1{font-size:48px;line-height:46px}h2{font-size:40px;line-height:36px}h3{font-size:28px}h4{font-size:20px}main ul,p{margin-top:0;margin-bottom:5vh}hr{width:90%;margin:10% auto}img{max-width:100%}p img{display:block;margin:auto}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}a{color:#fbc93d;text-decoration:none}main a:hover:not(.btn){color:#fbc93d;text-decoration:underline}a.underline{text-decoration:underline}a.underline:hover:not(.btn){text-decoration:none}.hide{display:none!important}.red,.red:hover{color:#fb6e3d!important}.yellow,.yellow:hover{color:#fbc93d!important}.green,.green:hover{color:#8ae137!important}.inline{display:inline}.inline-block{display:inline-block}.shadow{-moz-box-shadow:.18vw .18vw .36vw #000;-webkit-box-shadow:.18vw .18vw .36vw #000;box-shadow:.18vw .18vw .36vw #000}.shadow:active{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.inline{display:inline-block}.flex{width:100%;display:flex;justify-content:space-around}.flex.stretch{justify-content:space-between}.left{float:left}.right{float:right}.btn{font-weight:600;display:inline-block;padding:15px 30px;background:rgba(255,255,255,.1);color:#eee;border-radius:.5vw}.btn:not(:disabled){border:1px solid #666;transition:.1s;cursor:pointer;-moz-box-shadow:inset .11vw .18vw .52vw rgba(255,255,255,.2),inset -.11vw -.18vw .52vw rgba(0,0,0,.4),.1vw .1vw .52vw #000;-webkit-box-shadow:inset .11vw .18vw .52vw rgba(255,255,255,.2),inset -.11vw -.18vw .52vw rgba(0,0,0,.4),.1vw .1vw .36vw #000;box-shadow:inset .11vw .18vw .52vw rgba(255,255,255,.2),inset -.11vw -.18vw .52vw rgba(0,0,0,.4),.1vw .1vw .36vw #000}.btn:disabled{color:#aaa;border:1px solid #444}.btn:hover:not(:disabled){text-decoration:none;background:rgba(255,255,255,.2)}.btn:active:not(:disabled){-moz-box-shadow:inset .11vw .18vw .52vw rgba(0,0,0,.4),inset -.11vw -.18vw .52vw rgba(255,255,255,.2);-webkit-box-shadow:inset .11vw .18vw .52vw rgba(0,0,0,.4),inset -.11vw -.18vw .52vw rgba(255,255,255,.2);box-shadow:inset .11vw .18vw .52vw rgba(0,0,0,.4),inset -.11vw -.18vw .52vw rgba(255,255,255,.2)}.btn:focus:not(:disabled){border:1px solid #fbc93d}.btn.main:not(:disabled){color:#fbc93d}.btn .fa{margin-left:10px}.popup{background:#111;padding:4vh 4vw;border-radius:3vh;z-index:1000;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);-moz-box-shadow:.5vh .4vh 1vh .1vh #000;-webkit-box-shadow:.5vh .4vh 1vh .1vh #000;box-shadow:.5vh .4vh 1vh .1vh #000}.popup .topbar,.popup p{margin:0 0 6vh 0}.popup .topbar{display:flex;justify-content:space-between;margin:0 0 3vh 0}.popup p{margin:0 0 3vh 0}.popup .close{cursor:pointer}.popup .buttons{display:flex;justify-content:space-around}.page-mask{z-index:950;background:rgba(0,0,0,.5);position:fixed;top:0;right:0;bottom:0;left:0} \ No newline at end of file +.container,.container:after,.container:before,.fa,div,footer{box-sizing:border-box}body,input,textarea{padding:0;margin:0;font-family:'Open Sans',sans-serif;font-size:18px;color:#eee}body{background-color:#080808}::-webkit-scrollbar{width:5vw;min-width:10px;max-width:40px}::-webkit-scrollbar-track{background-color:#080808;background-color:rgba(8,8,8,0)}::-webkit-scrollbar-thumb{border-radius:.2vw;background:#333}::selection{background:#999}::-moz-selection{background:#999}main{top:59px;position:absolute;left:0;right:0;bottom:0;overflow-y:auto}.container{padding-right:5%;padding-left:5%;width:100%;margin:0 auto}.container:after{content:"";display:block;clear:both}section{padding:10vh 0 5vh}h1,h2,h3{margin:0 0 5% 0;position:relative;z-index:6}h1,h2,h3,h4{font-weight:600}h1{font-size:48px;line-height:46px}h2{font-size:40px;line-height:36px}h3{font-size:28px}h4{font-size:20px}main ul,p{margin-top:0;margin-bottom:5vh}hr{width:90%;margin:10% auto}img{max-width:100%}p img{display:block;margin:auto}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}a{color:#fbc93d;text-decoration:none}main a:hover:not(.btn){color:#fbc93d;text-decoration:underline}a.underline{text-decoration:underline}a.underline:hover:not(.btn){text-decoration:none}.hide{display:none!important}.red,.red:hover{color:#fb6e3d!important}.yellow,.yellow:hover{color:#fbc93d!important}.green,.green:hover{color:#8ae137!important}.inline{display:inline}.inline-block{display:inline-block}.shadow{-moz-box-shadow:.18vw .18vw .36vw #000;-webkit-box-shadow:.18vw .18vw .36vw #000;box-shadow:.18vw .18vw .36vw #000}.shadow:active{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.inline{display:inline-block}.flex{width:100%;display:flex;justify-content:space-around}.flex.stretch{justify-content:space-between}.left{float:left}.right{float:right}.btn{font-weight:600;display:inline-block;padding:15px 30px;background:rgba(255,255,255,.1);color:#eee;border-radius:.5vw}.btn:not(:disabled){border:1px solid #666;transition:.1s;cursor:pointer;-moz-box-shadow:inset .11vw .18vw .52vw rgba(255,255,255,.2),inset -.11vw -.18vw .52vw rgba(0,0,0,.4),.1vw .1vw .52vw #000;-webkit-box-shadow:inset .11vw .18vw .52vw rgba(255,255,255,.2),inset -.11vw -.18vw .52vw rgba(0,0,0,.4),.1vw .1vw .36vw #000;box-shadow:inset .11vw .18vw .52vw rgba(255,255,255,.2),inset -.11vw -.18vw .52vw rgba(0,0,0,.4),.1vw .1vw .36vw #000}.btn:disabled{color:#aaa;border:1px solid #444}.btn:hover:not(:disabled){text-decoration:none;background:rgba(255,255,255,.2)}.btn:active:not(:disabled){-moz-box-shadow:inset .11vw .18vw .52vw rgba(0,0,0,.4),inset -.11vw -.18vw .52vw rgba(255,255,255,.2);-webkit-box-shadow:inset .11vw .18vw .52vw rgba(0,0,0,.4),inset -.11vw -.18vw .52vw rgba(255,255,255,.2);box-shadow:inset .11vw .18vw .52vw rgba(0,0,0,.4),inset -.11vw -.18vw .52vw rgba(255,255,255,.2)}.btn:focus:not(:disabled){border:1px solid #fbc93d}.btn.main:not(:disabled){color:#fbc93d}.btn .fa{margin-left:10px}.popup{background:#111;padding:4vh 4vw;border-radius:3vh;z-index:1000;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);-moz-box-shadow:.5vh .4vh 1vh .1vh #000;-webkit-box-shadow:.5vh .4vh 1vh .1vh #000;box-shadow:.5vh .4vh 1vh .1vh #000}.popup .topbar,.popup p{margin:0 0 6vh 0}.popup .topbar{display:flex;justify-content:space-between;margin:0 0 3vh 0}.popup p{margin:0 0 3vh 0}.popup .close{cursor:pointer}.popup .buttons{display:flex;justify-content:space-around}.page-mask{display:none;z-index:950;background:rgba(0,0,0,.5);position:fixed;top:0;right:0;bottom:0;left:0} \ No newline at end of file diff --git a/static/css/base.css b/static/css/base.css index 9beeee8..d22a249 100755 --- a/static/css/base.css +++ b/static/css/base.css @@ -221,6 +221,7 @@ a.underline:hover:not(.btn) { justify-content: space-around; } .page-mask { + display: none; z-index: 950; background: rgba(0, 0, 0, 0.5); position: fixed; diff --git a/static/js/.map.min.js b/static/js/.map.min.js index 89c9127..e1248d7 100644 --- a/static/js/.map.min.js +++ b/static/js/.map.min.js @@ -1 +1 @@ -"use strict";let map,marker,elevator,newLoc;const mapElem=document.getElementById("map"),socket=io("//"+window.location.hostname),IDLE_TIMEOUT=300;let _idleSecondsCounter=0;function resetIdleSecondsCounter(){_idleSecondsCounter=0}function metersToFeet(e){return"standard"===mapuser.settings.units?(3.28084*e).toFixed():e.toFixed()}function toggleMaps(e){0===e.lat&&0===e.lon?($("#map").hide(),$("#view").hide(),$("#notset").show()):($("#map").show(),$("#view").show(),$("#notset").hide())}function initMap(){if("1"!==disp){if(map=new google.maps.Map(mapElem,{center:{lat:mapuser.last.lat,lng:mapuser.last.lon},panControl:!1,scrollwheel:!0,scaleControl:!!mapuser.settings.showScale,draggable:!1,zoom:mapuser.settings.defaultZoom,streetViewControl:!1,zoomControlOptions:{position:google.maps.ControlPosition.LEFT_TOP},mapTypeId:"road"===mapuser.settings.defaultMap?google.maps.MapTypeId.ROADMAP:google.maps.MapTypeId.HYBRID}),marker=new google.maps.Marker({position:{lat:mapuser.last.lat,lng:mapuser.last.lon},title:mapuser.name,icon:mapuser.settings.marker?"/static/img/marker/"+mapuser.settings.marker+".png":"/static/img/marker/red.png",map:map,draggable:!1}),map.addListener("zoom_changed",function(){map.setCenter(marker.getPosition())}),"0"!==noHeader&&"demo"!==mapuser._id){const e=document.createElement("div");e.id="map-logo",e.innerHTML='Tracman',map.controls[google.maps.ControlPosition.BOTTOM_LEFT].push(e)}const t=document.createElement("div");if(t.id="timestamp",mapuser.last.time&&(t.innerHTML="location updated "+new Date(mapuser.last.time).toLocaleString()),map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(t),mapuser.settings.showSpeed){const e=document.createElement("div"),t=document.createElement("div"),o=document.createElement("div"),n=document.createElement("div");t.id="spd-label",t.innerHTML="SPEED",o.id="spd",o.innerHTML="standard"===mapuser.settings.units?(2.23694*parseFloat(mapuser.last.spd)).toFixed():mapuser.last.spd.toFixed(),n.id="spd-unit",n.innerHTML="standard"===mapuser.settings.units?"m.p.h.":"k.p.h.",e.id="spd-sign",e.appendChild(t),e.appendChild(o),e.appendChild(n),map.controls[google.maps.ControlPosition.TOP_RIGHT].push(e)}if(mapuser.settings.showAlt){elevator=new google.maps.ElevationService;const t=document.createElement("div"),o=document.createElement("div"),n=document.createElement("div"),a=document.createElement("div");o.id="alt-label",n.id="alt",a.id="alt-unit",t.id="alt-sign",n.innerHTML="",o.innerHTML="ALTITUDE",e(mapuser.last).then(function(e){n.innerHTML=metersToFeet(e)}).catch(function(e){console.error("Could not load altitude from last known location: ",e)}),a.innerHTML="standard"===mapuser.settings.units?"feet":"meters",t.appendChild(o),t.appendChild(n),t.appendChild(a),map.controls[google.maps.ControlPosition.TOP_RIGHT].push(t)}}function e(e){return new Promise(function(t,o){"number"==typeof e.alt?(console.log("Altitude was provided in loc as ",e.alt,"m"),t(e.alt)):(console.log("No altitude was provided in loc"),function(e){return new Promise(function(t,o){return(elevator=elevator||new google.maps.ElevationService).getElevationForLocations({locations:[{lat:e.lat,lng:e.lon}]},function(e,n,a){n===google.maps.ElevationStatus.OK&&e[0]?(console.log("Altitude was retrieved from Google Elevations API as",e[0].elevation,"m"),t(e[0].elevation)):o(Error(a))})})}(e).then(function(e){t(e)}).catch(function(e){o(e)}))})}function t(e){return e.spd="standard"===mapuser.settings.units?2.23694*parseFloat(e.spd):parseFloat(e.spd),e.dir=parseFloat(e.dir),e.lat=parseFloat(e.lat),e.lon=parseFloat(e.lon),e.tim=new Date(e.tim).toLocaleString(),e}function o(e){!function e(t,o,n){if(null==newLoc||t.tim===newLoc.tim){if(!a)var a=new google.maps.StreetViewService;a.getPanorama({location:{lat:t.lat,lng:t.lon},radius:o},function(a,s){switch(s){case google.maps.StreetViewStatus.OK:n(a);break;case google.maps.StreetViewStatus.ZERO_RESULTS:e(t,2*o,n);break;default:console.error(new Error("Street view not available: "+s).message)}})}}(e,2,function(t){var o,n,a;$("#viewImg").attr("src","https://maps.googleapis.com/maps/api/streetview?size="+((a=$("#view")).width()<640&&a.height()<640?a.width().toFixed()+"x"+a.height().toFixed():a.width()>a.height()?"640x"+(640*a.height()/a.width()).toFixed():(640*a.width()/a.height()).toFixed()+"x640")+"&location="+t.location.latLng.lat()+","+t.location.latLng.lng()+"&fov=90&heading="+(e.spd>2?e.dir:String((o=e,n=t.location,90-Math.atan2(o.lat-n.latLng.lat(),o.lon-n.latLng.lng())*(180/Math.PI)%360)))+"&key="+mapKey)})}"0"!==disp&&mapuser.settings.showStreetview&&o(t(mapuser.last)),socket.on("get",function(n){console.log("Got location:",n.lat+", "+n.lon),newLoc=t(n),"1"!==disp&&($("#timestamp").text("location updated "+newLoc.tim),google.maps.event.trigger(map,"resize"),map.setCenter({lat:newLoc.lat,lng:newLoc.lon}),marker.setPosition({lat:newLoc.lat,lng:newLoc.lon}),mapuser.settings.showSpeed&&$("#spd").text(newLoc.spd.toFixed()),mapuser.settings.showAlt&&e(n).then(function(e){$("#alt").text(metersToFeet(e))}).catch(function(e){$("#alt").text("????"),console.error(e.stack)})),"0"!==disp&&mapuser.settings.showStreetview&&o(newLoc)})}document.onclick=resetIdleSecondsCounter,document.onmousemove=resetIdleSecondsCounter,document.onkeypress=resetIdleSecondsCounter,window.setInterval(function(){++_idleSecondsCounter>=300?socket.connected&&(console.log("Disconnecting because idle for more than",300,"seconds."),socket.disconnect()):socket.connected||(console.log("Reconnecting the user because they are no longer idle."),socket.connect())},1e3),socket.on("connect",function(){console.log("Connected!"),socket.emit("can-get",mapuser._id),mapuser._id===userid&&socket.emit("can-set",userid)}).on("disconnect",function(){console.log("Disconnected!")}).on("error",function(e){console.error(e.stack)}),$(function(){let e,t;toggleMaps(mapuser.last),$("#set-loc").click(function(){!userid===mapuser._id?alert("You are not logged in! "):navigator.geolocation?navigator.geolocation.getCurrentPosition(function(e){let t={ts:Date.now(),tok:token,usr:userid,alt:e.coords.altitude,lat:e.coords.latitude,lon:e.coords.longitude,spd:e.coords.speed||0};socket.emit("set",t),toggleMaps(t),console.log("Set location:",t.lat+", "+t.lon)},function(e){alert("Unable to set location."),console.error(e.stack)},{enableHighAccuracy:!0}):alert("Geolocation not enabled. ")}),$("#track-loc").click(function(){!userid===mapuser._id?alert("You are not logged in! "):e?($("#track-loc").html('Track').prop("title","Click here to track your location. "),navigator.geolocation.clearWatch(e),e=void 0):navigator.geolocation?($("#track-loc").html('Stop').prop("title","Click here to stop tracking your location. "),e=navigator.geolocation.watchPosition(function(e){t={ts:Date.now(),tok:token,usr:userid,lat:e.coords.latitude,lon:e.coords.longitude,alt:e.coords.altitude,spd:e.coords.speed||0},socket.emit("set",t),toggleMaps(t),console.log("Set location:",t.lat+", "+t.lon)},function(e){alert("Unable to track location."),console.error(e.stack)},{enableHighAccuracy:!0})):alert("Unable to track location. ")}),$("#clear-loc").click(function(){!userid===mapuser._id?alert("You are not logged in! "):(e&&($("#track-loc").html('Track'),navigator.geolocation.clearWatch(e),e=void 0),t={ts:Date.now(),tok:token,usr:userid,lat:0,lon:0,spd:0},socket.emit("set",t),toggleMaps(t),console.log("Cleared location"))})}); \ No newline at end of file +"use strict";let map,marker,elevator,newLoc;const mapElem=document.getElementById("map"),socket=io("//"+window.location.hostname),IDLE_TIMEOUT=300;let _idleSecondsCounter=0;function resetIdleSecondsCounter(){_idleSecondsCounter=0}function metersToFeet(e){return"standard"===mapuser.settings.units?(3.28084*e).toFixed():e.toFixed()}function toggleMaps(e){0===e.lat&&0===e.lon?($("#map").hide(),$("#view").hide(),$("#notset").show()):($("#map").show(),$("#view").show(),$("#notset").hide())}function initMap(){if("1"!==disp){if(map=new google.maps.Map(mapElem,{center:{lat:mapuser.last.lat,lng:mapuser.last.lon},panControl:!1,scrollwheel:!0,scaleControl:!!mapuser.settings.showScale,draggable:!1,zoom:mapuser.settings.defaultZoom,streetViewControl:!1,zoomControlOptions:{position:google.maps.ControlPosition.LEFT_TOP},mapTypeId:"road"===mapuser.settings.defaultMap?google.maps.MapTypeId.ROADMAP:google.maps.MapTypeId.HYBRID}),marker=new google.maps.Marker({position:{lat:mapuser.last.lat,lng:mapuser.last.lon},title:mapuser.name,icon:mapuser.settings.marker?"/static/img/marker/"+mapuser.settings.marker+".png":"/static/img/marker/red.png",map:map,draggable:!1}),map.addListener("zoom_changed",function(){map.setCenter(marker.getPosition())}),"0"!==noHeader&&"demo"!==mapuser._id){const e=document.createElement("div");e.id="map-logo",e.innerHTML='Tracman',map.controls[google.maps.ControlPosition.BOTTOM_LEFT].push(e)}const t=document.createElement("div");if(t.id="timestamp",mapuser.last.time&&(t.innerHTML="location updated "+new Date(mapuser.last.time).toLocaleString()),map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(t),mapuser.settings.showSpeed){const e=document.createElement("div"),t=document.createElement("div"),o=document.createElement("div"),n=document.createElement("div");t.id="spd-label",t.innerHTML="SPEED",o.id="spd",o.innerHTML="standard"===mapuser.settings.units?(2.23694*parseFloat(mapuser.last.spd)).toFixed():mapuser.last.spd.toFixed(),n.id="spd-unit",n.innerHTML="standard"===mapuser.settings.units?"m.p.h.":"k.p.h.",e.id="spd-sign",e.appendChild(t),e.appendChild(o),e.appendChild(n),map.controls[google.maps.ControlPosition.TOP_RIGHT].push(e)}if(mapuser.settings.showAlt){elevator=new google.maps.ElevationService;const t=document.createElement("div"),o=document.createElement("div"),n=document.createElement("div"),a=document.createElement("div");o.id="alt-label",n.id="alt",a.id="alt-unit",t.id="alt-sign",n.innerHTML="",o.innerHTML="ALTITUDE",e(mapuser.last).then(function(e){n.innerHTML=metersToFeet(e)}).catch(function(e){console.error("Could not load altitude from last known location: ",e)}),a.innerHTML="standard"===mapuser.settings.units?"feet":"meters",t.appendChild(o),t.appendChild(n),t.appendChild(a),map.controls[google.maps.ControlPosition.TOP_RIGHT].push(t)}}function e(e){return new Promise(function(t,o){"number"==typeof e.alt?(console.log("Altitude was provided in loc as ",e.alt,"m"),t(e.alt)):(console.log("No altitude was provided in loc"),function(e){return new Promise(function(t,o){return(elevator=elevator||new google.maps.ElevationService).getElevationForLocations({locations:[{lat:e.lat,lng:e.lon}]},function(e,n,a){n===google.maps.ElevationStatus.OK&&e[0]?(console.log("Altitude was retrieved from Google Elevations API as",e[0].elevation,"m"),t(e[0].elevation)):o(Error(a))})})}(e).then(function(e){t(e)}).catch(function(e){o(e)}))})}function t(e){return e.spd="standard"===mapuser.settings.units?2.23694*parseFloat(e.spd):parseFloat(e.spd),e.dir=parseFloat(e.dir),e.lat=parseFloat(e.lat),e.lon=parseFloat(e.lon),e.tim=new Date(e.tim).toLocaleString(),e}function o(e){!function e(t,o,n){if(null==newLoc||t.tim===newLoc.tim){if(!a)var a=new google.maps.StreetViewService;a.getPanorama({location:{lat:t.lat,lng:t.lon},radius:o},function(a,s){switch(s){case google.maps.StreetViewStatus.OK:n(a);break;case google.maps.StreetViewStatus.ZERO_RESULTS:e(t,2*o,n);break;default:console.error(new Error("Street view not available: "+s).message)}})}}(e,2,function(t){var o,n,a;$("#viewImg").attr("src","https://maps.googleapis.com/maps/api/streetview?size="+((a=$("#view")).width()<640&&a.height()<640?a.width().toFixed()+"x"+a.height().toFixed():a.width()>a.height()?"640x"+(640*a.height()/a.width()).toFixed():(640*a.width()/a.height()).toFixed()+"x640")+"&location="+t.location.latLng.lat()+","+t.location.latLng.lng()+"&fov=90&heading="+(e.spd>2?e.dir:String((o=e,n=t.location,90-Math.atan2(o.lat-n.latLng.lat(),o.lon-n.latLng.lng())*(180/Math.PI)%360)))+"&key="+mapKey)})}"0"!==disp&&mapuser.settings.showStreetview&&o(t(mapuser.last)),socket.on("get",function(n){console.log("Got location:",n.lat+", "+n.lon),newLoc=t(n),"1"!==disp&&($("#timestamp").text("location updated "+newLoc.tim),google.maps.event.trigger(map,"resize"),map.setCenter({lat:newLoc.lat,lng:newLoc.lon}),marker.setPosition({lat:newLoc.lat,lng:newLoc.lon}),mapuser.settings.showSpeed&&$("#spd").text(newLoc.spd.toFixed()),mapuser.settings.showAlt&&e(n).then(function(e){$("#alt").text(metersToFeet(e))}).catch(function(e){$("#alt").text("????"),console.error(e.stack)})),"0"!==disp&&mapuser.settings.showStreetview&&o(newLoc)})}document.onclick=resetIdleSecondsCounter,document.onmousemove=resetIdleSecondsCounter,document.onkeypress=resetIdleSecondsCounter,window.setInterval(function(){++_idleSecondsCounter>=300?socket.connected&&(console.log("Disconnecting because idle for more than",300,"seconds."),$("#inactive-mask").show(),$("#inactive-message").show(),socket.disconnect()):socket.connected||(console.log("Reconnecting the user because they are no longer idle."),$("#inactive-mask").hide(),$("#inactive-message").hide(),socket.connect())},1e3),socket.on("connect",function(){console.log("Connected!"),socket.emit("can-get",mapuser._id),mapuser._id===userid&&socket.emit("can-set",userid)}).on("disconnect",function(){console.log("Disconnected!")}).on("error",function(e){console.error(e.stack)}),$(function(){let e,t;toggleMaps(mapuser.last),$("#set-loc").click(function(){!userid===mapuser._id?alert("You are not logged in! "):navigator.geolocation?navigator.geolocation.getCurrentPosition(function(e){let t={ts:Date.now(),tok:token,usr:userid,alt:e.coords.altitude,lat:e.coords.latitude,lon:e.coords.longitude,spd:e.coords.speed||0};socket.emit("set",t),toggleMaps(t),console.log("Set location:",t.lat+", "+t.lon)},function(e){alert("Unable to set location."),console.error(e.stack)},{enableHighAccuracy:!0}):alert("Geolocation not enabled. ")}),$("#track-loc").click(function(){!userid===mapuser._id?alert("You are not logged in! "):e?($("#track-loc").html('Track').prop("title","Click here to track your location. "),navigator.geolocation.clearWatch(e),e=void 0):navigator.geolocation?($("#track-loc").html('Stop').prop("title","Click here to stop tracking your location. "),e=navigator.geolocation.watchPosition(function(e){t={ts:Date.now(),tok:token,usr:userid,lat:e.coords.latitude,lon:e.coords.longitude,alt:e.coords.altitude,spd:e.coords.speed||0},socket.emit("set",t),toggleMaps(t),console.log("Set location:",t.lat+", "+t.lon)},function(e){alert("Unable to track location."),console.error(e.stack)},{enableHighAccuracy:!0})):alert("Unable to track location. ")}),$("#clear-loc").click(function(){!userid===mapuser._id?alert("You are not logged in! "):(e&&($("#track-loc").html('Track'),navigator.geolocation.clearWatch(e),e=void 0),t={ts:Date.now(),tok:token,usr:userid,lat:0,lon:0,spd:0},socket.emit("set",t),toggleMaps(t),console.log("Cleared location"))})}); \ No newline at end of file diff --git a/static/js/.respond.min.js b/static/js/.respond.min.js index fca4e20..806a70e 100644 --- a/static/js/.respond.min.js +++ b/static/js/.respond.min.js @@ -1 +1 @@ -window.matchMedia=window.matchMedia||function(e){"use strict";var t,n=e.documentElement,a=n.firstElementChild||n.firstChild,s=e.createElement("body"),i=e.createElement("div");return i.id="mq-test-1",i.style.cssText="position:absolute;top:-100em",s.style.background="none",s.appendChild(i),function(e){return i.innerHTML='',n.insertBefore(s,a),t=42===i.offsetWidth,n.removeChild(s),{matches:t,media:e}}}(document),function(e){"use strict";function t(){E(!0)}var n={};if(e.respond=n,n.update=function(){},n.mediaQueriesSupported=e.matchMedia&&e.matchMedia("only all").matches,!n.mediaQueriesSupported){var a,s,i,r=e.document,o=r.documentElement,l=[],d=[],m=[],h={},u=r.getElementsByTagName("head")[0]||o,c=r.getElementsByTagName("base")[0],p=u.getElementsByTagName("link"),f=[],y=function(){for(var t=0;p.length>t;t++){var n=p[t],a=n.href,s=n.media,i=n.rel&&"stylesheet"===n.rel.toLowerCase();a&&i&&!h[a]&&(n.styleSheet&&n.styleSheet.rawCssText?(g(n.styleSheet.rawCssText,a,s),h[a]=!0):(!/^([a-zA-Z:]*\/\/)/.test(a)&&!c||a.replace(RegExp.$1,"").split("/")[0]===e.location.host)&&f.push({href:a,media:s}))}v()},v=function(){if(f.length){var t=f.shift();w(t.href,function(n){g(n,t.href,t.media),h[t.href]=!0,e.setTimeout(function(){v()},0)})}},g=function(e,t,n){var a=e.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),s=a&&a.length||0;t=t.substring(0,t.lastIndexOf("/"));var i=function(e){return e.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+t+"$2$3")},r=!s&&n;t.length&&(t+="/"),r&&(s=1);for(var o=0;s>o;o++){var m,h,u,c;r?(m=n,d.push(i(e))):(m=a[o].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,d.push(RegExp.$2&&i(RegExp.$2))),c=(u=m.split(",")).length;for(var p=0;c>p;p++)h=u[p],l.push({media:h.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:d.length-1,hasquery:h.indexOf("(")>-1,minw:h.match(/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:h.match(/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}E()},x=function(){var e,t=r.createElement("div"),n=r.body,a=!1;return t.style.cssText="position:absolute;font-size:1em;width:1em",n||((n=a=r.createElement("body")).style.background="none"),n.appendChild(t),o.insertBefore(n,o.firstChild),e=t.offsetWidth,a?o.removeChild(n):n.removeChild(t),i=parseFloat(e)},E=function(t){var n="clientWidth",h=o[n],c="CSS1Compat"===r.compatMode&&h||r.body[n]||h,f={},y=p[p.length-1],v=(new Date).getTime();if(t&&a&&30>v-a)return e.clearTimeout(s),void(s=e.setTimeout(E,30));for(var g in a=v,l)if(l.hasOwnProperty(g)){var w=l[g],T=w.minw,C=w.maxw,S=null===T,$=null===C;T&&(T=parseFloat(T)*(T.indexOf("em")>-1?i||x():1)),C&&(C=parseFloat(C)*(C.indexOf("em")>-1?i||x():1)),w.hasquery&&(S&&$||!(S||c>=T)||!($||C>=c))||(f[w.media]||(f[w.media]=[]),f[w.media].push(d[w.rules]))}for(var b in m)m.hasOwnProperty(b)&&m[b]&&m[b].parentNode===u&&u.removeChild(m[b]);for(var R in f)if(f.hasOwnProperty(R)){var M=r.createElement("style"),O=f[R].join("\n");M.type="text/css",M.media=R,u.insertBefore(M,y.nextSibling),M.styleSheet?M.styleSheet.cssText=O:M.appendChild(r.createTextNode(O)),m.push(M)}},w=function(e,t){var n=T();n&&(n.open("GET",e,!0),n.onreadystatechange=function(){4!==n.readyState||200!==n.status&&304!==n.status||t(n.responseText)},4!==n.readyState&&n.send(null))},T=function(){var t=!1;try{t=new e.XMLHttpRequest}catch(n){t=new e.ActiveXObject("Microsoft.XMLHTTP")}return function(){return t}}();y(),n.update=y,e.addEventListener?e.addEventListener("resize",t,!1):e.attachEvent&&e.attachEvent("onresize",t)}}(this); \ No newline at end of file +window.matchMedia=window.matchMedia||function(e){"use strict";var t,n=e.documentElement,a=n.firstElementChild||n.firstChild,s=e.createElement("body"),i=e.createElement("div");return i.id="mq-test-1",i.style.cssText="position:absolute;top:-100em",s.style.background="none",s.appendChild(i),function(e){return i.innerHTML='',n.insertBefore(s,a),t=42===i.offsetWidth,n.removeChild(s),{matches:t,media:e}}}(document),function(e){"use strict";function t(){E(!0)}var n={};if(e.respond=n,n.update=function(){},n.mediaQueriesSupported=e.matchMedia&&e.matchMedia("only all").matches,!n.mediaQueriesSupported){var a,s,i,r=e.document,o=r.documentElement,l=[],d=[],m=[],h={},u=r.getElementsByTagName("head")[0]||o,c=r.getElementsByTagName("base")[0],p=u.getElementsByTagName("link"),f=[],y=function(){for(var t=0;p.length>t;t++){var n=p[t],a=n.href,s=n.media,i=n.rel&&"stylesheet"===n.rel.toLowerCase();a&&i&&!h[a]&&(n.styleSheet&&n.styleSheet.rawCssText?(g(n.styleSheet.rawCssText,a,s),h[a]=!0):(!/^([a-zA-Z:]*\/\/)/.test(a)&&!c||a.replace(RegExp.$1,"").split("/")[0]===e.location.host)&&f.push({href:a,media:s}))}v()},v=function(){if(f.length){var t=f.shift();w(t.href,function(n){g(n,t.href,t.media),h[t.href]=!0,e.setTimeout(function(){v()},0)})}},g=function(e,t,n){var a=e.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),s=a&&a.length||0,i=function(e){return e.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+t+"$2$3")},r=!s&&n;(t=t.substring(0,t.lastIndexOf("/"))).length&&(t+="/"),r&&(s=1);for(var o=0;s>o;o++){var m,h,u,c;r?(m=n,d.push(i(e))):(m=a[o].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,d.push(RegExp.$2&&i(RegExp.$2))),c=(u=m.split(",")).length;for(var p=0;c>p;p++)h=u[p],l.push({media:h.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:d.length-1,hasquery:h.indexOf("(")>-1,minw:h.match(/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:h.match(/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}E()},x=function(){var e,t=r.createElement("div"),n=r.body,a=!1;return t.style.cssText="position:absolute;font-size:1em;width:1em",n||((n=a=r.createElement("body")).style.background="none"),n.appendChild(t),o.insertBefore(n,o.firstChild),e=t.offsetWidth,a?o.removeChild(n):n.removeChild(t),i=parseFloat(e)},E=function(t){var n="clientWidth",h=o[n],c="CSS1Compat"===r.compatMode&&h||r.body[n]||h,f={},y=p[p.length-1],v=(new Date).getTime();if(t&&a&&30>v-a)return e.clearTimeout(s),void(s=e.setTimeout(E,30));for(var g in a=v,l)if(l.hasOwnProperty(g)){var w=l[g],T=w.minw,C=w.maxw,S=null===T,$=null===C;T&&(T=parseFloat(T)*(T.indexOf("em")>-1?i||x():1)),C&&(C=parseFloat(C)*(C.indexOf("em")>-1?i||x():1)),w.hasquery&&(S&&$||!(S||c>=T)||!($||C>=c))||(f[w.media]||(f[w.media]=[]),f[w.media].push(d[w.rules]))}for(var b in m)m.hasOwnProperty(b)&&m[b]&&m[b].parentNode===u&&u.removeChild(m[b]);for(var R in f)if(f.hasOwnProperty(R)){var M=r.createElement("style"),O=f[R].join("\n");M.type="text/css",M.media=R,u.insertBefore(M,y.nextSibling),M.styleSheet?M.styleSheet.cssText=O:M.appendChild(r.createTextNode(O)),m.push(M)}},w=function(e,t){var n=T();n&&(n.open("GET",e,!0),n.onreadystatechange=function(){4!==n.readyState||200!==n.status&&304!==n.status||t(n.responseText)},4!==n.readyState&&n.send(null))},T=function(){var t=!1;try{t=new e.XMLHttpRequest}catch(n){t=new e.ActiveXObject("Microsoft.XMLHTTP")}return function(){return t}}();y(),n.update=y,e.addEventListener?e.addEventListener("resize",t,!1):e.attachEvent&&e.attachEvent("onresize",t)}}(this); \ No newline at end of file diff --git a/static/js/map.js b/static/js/map.js index 90f6635..6a72c33 100755 --- a/static/js/map.js +++ b/static/js/map.js @@ -24,12 +24,16 @@ window.setInterval( function CheckIdleTime () { if (_idleSecondsCounter >= IDLE_TIMEOUT) { if (socket.connected) { console.log('Disconnecting because idle for more than',IDLE_TIMEOUT,'seconds.') + $('#inactive-mask').show() + $('#inactive-message').show() socket.disconnect() } // Connect user if disconnected } else { if (!socket.connected) { console.log('Reconnecting the user because they are no longer idle.') + $('#inactive-mask').hide() + $('#inactive-message').hide() socket.connect() } } @@ -382,6 +386,7 @@ function initMap() { console.error(err.stack) }) } + } // Update street view @@ -421,6 +426,7 @@ function initMap() { // Update streetview function updateStreetView (loc) { + // Calculate bearing between user and position of streetview image // https://stackoverflow.com/a/26609687/3006854 function getBearing (userLoc, imageLoc) { @@ -454,6 +460,7 @@ function initMap() { '&key=' + mapKey ) }) + } // Error loading gmaps API diff --git a/views/map.html b/views/map.html index 1af2df3..c27973c 100755 --- a/views/map.html +++ b/views/map.html @@ -43,20 +43,24 @@ {% endblock %} {% block main %} +
+ {% if user and user.isNewUser %} - +This is your map. It's publicly avaliable at {{newuserurl}}. You can change that URL and other settings in settings. Set your location by clicking set below. Clear it by clicking clear. To track your location, click track or download the android app. For more information, see the help page.