Spaces:
Running
Running
File size: 6,950 Bytes
7dfb20b 83db369 7dfb20b f0d739b c666fe4 da03cdb 7dfb20b 0520341 7dfb20b e04f6b7 7dfb20b f44f27e 7dfb20b f44f27e 7dfb20b 6319fe5 7dfb20b 83db369 4290743 83db369 e781f72 b51cdf6 83db369 a491bdb 4340f17 83db369 c4766dd 11fcec1 ea6b765 8503381 be3c2aa cfa4ad6 ec5825a be3c2aa dcc1609 d57d8c9 f2ad75e 98cf34f d57d8c9 be3c2aa 83db369 c47440a 12354f8 01ca5b7 e04f6b7 0da4ce6 1bce8d2 b51cdf6 1bce8d2 e29920a d0455e9 c4766dd 1bce8d2 e29920a 5f833b5 1bce8d2 860c411 7dfb20b f20166c 83db369 7e57aa3 98cf34f 15acfc8 e8c3ce8 335ffd7 a005b07 335ffd7 83db369 335ffd7 83db369 247198f 8690d89 247198f 335ffd7 247198f 335ffd7 15acfc8 ef9369f f4f97f3 ef9369f 15acfc8 da03cdb 15acfc8 106cf6d 9cf5dbb 106cf6d 15acfc8 98cf34f 7dfb20b 83db369 7dfb20b 3c8edf7 410d5af 3c8edf7 410d5af 3c8edf7 7dfb20b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
<!DOCTYPE html>
<html>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<head>
<link rel="preload" href="{{ url_for('static', filename='map_populated.png') }}" as="image">
<link rel="preload" href="{{ url_for('static', filename='loading.gif') }}" as="image">
<link rel="icon" type="image/png" href="https://images.squarespace-cdn.com/content/v1/64790f5777b5d772678cce83/6d71eaee-f825-4324-be9b-2def32469eac/Untitled+drawing+%2811%29.png?format=100w">
<title>a random unsecured camera</title>
<style>
body {
justify-content: left;
background-color: black;
padding-top: 3%;
margin-left: 5vw;
}
.pulse {
width: 40px;
height: 40px;
border-radius: 50%;
position: absolute;
background-color: yellow;
opacity: 0.5;
animation: pulse-animation 5s infinite;
margin-left: -20px;
margin-top: -20px;
}
.dot {
border-style: solid;
border-width: 2px;
border-color: black;
width: 5px;
height: 5px;
border-radius: 50%;
position: absolute;
background-color: yellow;
margin-left: -4.5px;
margin-top: -4.5px;
}
@keyframes pulse-animation {
0% { transform: scale(0.1); opacity: 0.4; }
100% { transform: scale(3); opacity: 0; }
}
.flex-container {
display: flex;
justify-content: left;
align-items: top;
}
.outer-container {
margin-left: 2%;
justify-content: left;
align-items: left;
max-width: 70vw;
}
.feed {
padding: 1%;
border-style: solid;
border-width: 1px;
border-color: yellow;
margin-right: 3%;
margin-bottom: 3%;
min-width: 50%;
height: 65vh;
}
.map {
width: 100%;
height: 100%;
object-fit: cover;
margin: auto;
}
.map-div {
padding: 1%;
position: relative;
width: 100%;
height: 50%;
margin-top: 3%;
margin-bottom: 3%;
box-sizing: border-box;
}
.info {
min-width: 30vw;
display: flex;
flex-direction: column;
align-items: flex-start;
}
a:hover {
background-color: yellow;
color: black;
transition: 0.5s ease-in-out;
}
a {
color:rgb(83, 83, 83);
}
@media only screen and (orientation: portrait) {
body {
margin-left: auto;
}
.h1 {
margin-bottom: 2%;
}
.flex-container {
flex-direction: column;
align-items: left;
}
.feed {
width: 90vw;
max-height: 45vh;
margin-right: 0;
}
.info {
width: 90vw;
height: 65vh;
}
}
</style>
</head>
<body style="background-color: black;">
<div class="outer-container">
<p style="color:rgb(83, 83, 83); font-family: 'Helvetica'; font-weight: 50;"> a random unsecured camera in</p>
<h1 style="color:rgb(83, 83, 83); font-family: 'Helvetica'; font-weight: 50; margin-bottom: 3%;"> {{ country }}</h1>
<div class="flex-container">
<img id="feed" class="feed" src="" />
<div class="info">
<h3 style="border-bottom: 1px solid yellow; color:rgb(83, 83, 83); font-family: 'Helvetica'; font-weight: 50;">{{ name }}</h3>
<div style="display: flex; margin-top: 3%; margin-bottom: 3%;">
<a href="?new=true" style="margin-right: 10px; display: inline-block;">
<button class="hoverButton" style="border: 1px solid yellow; background-color: transparent; color: rgb(83, 83, 83); padding: 10px;">
another
</button>
</a>
<a href="?new=false" id="refreshSameFeedButton" style="display: inline-block;">
<button class="hoverButton" style="border: 1px solid rgb(83, 83, 83); background-color: transparent; color: rgb(83, 83, 83); padding: 10px;">
refresh
</button>
</a>
</div>
<p style="color:rgb(83, 83, 83); font-family: 'Helvetica'; font-weight: 50;">
<a href="{{ ip_link }}" target="_blank">raw data: {{ ip }}</a> <br>
lat, lon: {{ loc }}<br>
owner: {{ org }}<br>
time: {{ time }}
</p>
<div class="map-div">
<img id="map" src="{{ url_for('static', filename='map_populated.png') }}" style="width: 100%; height: 100%;" />
<div class="dot" style="left: {{ X }}%; top: {{ Y }}%;"></div>
<div class="pulse" style="left: {{ X }}%; top: {{ Y }}%;"></div>
</div>
<p style="color:rgb(83, 83, 83); font-family: 'Helvetica'; font-weight: 50; margin-top: 3%;">
a brayden moore website
</p>
</div>
</div>
</div>
<script>
document.addEventListener("DOMContentLoaded", function() {
const feed = document.getElementById("feed");
feed.src = "{{ url_for('static', filename='loading.gif') }}";
function setImageSource(url, isImage = false) {
const img = new Image();
img.onload = function() {
feed.src = this.src;
if (isImage) {
setTimeout(() => setImageSource(url.replace("COUNTER", Math.random()), true), 500);
}
};
img.onerror = function() {
feed.src = "{{ url_for('static', filename='error.png') }}";
};
img.src = url;
}
const newUrl = "{{ url }}";
fetch(newUrl, { method: 'HEAD' })
.then(response => {
const isImage = response.headers.get('Content-Type').startsWith('image/');
setImageSource(newUrl.replace("COUNTER", Math.random()), isImage);
});
});
</script>
</body>
</html> |