Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e74e460480
|
||
|
|
0cb10203c7
|
||
|
|
a8c0aefbd6
|
||
|
|
9c18cc19b7
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
dist/index.html
vendored
2
dist/index.html
vendored
@@ -7,7 +7,7 @@
|
|||||||
<title>Road2Bitcoin Live Map</title>
|
<title>Road2Bitcoin Live Map</title>
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css">
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css">
|
||||||
<script defer data-domain="r2b22.kip.pe" src="https://plausible.io/js/plausible.js"></script>
|
<script defer data-domain="r2b22.kip.pe" src="https://plausible.io/js/plausible.js"></script>
|
||||||
<script type="module" crossorigin src="/assets/index.2d0ee7b9.js"></script>
|
<script type="module" crossorigin src="/assets/index.b6f9bc24.js"></script>
|
||||||
<link rel="stylesheet" href="/assets/index.eed9f443.css">
|
<link rel="stylesheet" href="/assets/index.eed9f443.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
40
main.js
40
main.js
@@ -104,8 +104,7 @@ async function main() {
|
|||||||
|
|
||||||
const vanFeature= new Feature({
|
const vanFeature= new Feature({
|
||||||
geometry: new Point([8.918618, 44.407408]),
|
geometry: new Point([8.918618, 44.407408]),
|
||||||
name: 'Support Van',
|
name: 'Support Van'
|
||||||
trackable: true
|
|
||||||
});
|
});
|
||||||
|
|
||||||
vectorSourceTrackedPoints.addFeature(vanFeature);
|
vectorSourceTrackedPoints.addFeature(vanFeature);
|
||||||
@@ -191,15 +190,6 @@ async function main() {
|
|||||||
title.textContent = feature.get('name');
|
title.textContent = feature.get('name');
|
||||||
container.append(title);
|
container.append(title);
|
||||||
return container.innerHTML;
|
return container.innerHTML;
|
||||||
// if (feature.get('trackable')) {
|
|
||||||
// const linkParent = document.createElement('div');
|
|
||||||
// const followLink = document.createElement('a');
|
|
||||||
// followLink.textContent = 'Follow';
|
|
||||||
// followLink.href = '#';
|
|
||||||
// followLink.addEventListener('click', startFollowing(feature, followLink));
|
|
||||||
// linkParent.append(followLink);
|
|
||||||
// container.append(linkParent);
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// display popup on click
|
// display popup on click
|
||||||
@@ -208,9 +198,7 @@ async function main() {
|
|||||||
return feature;
|
return feature;
|
||||||
});
|
});
|
||||||
disposePopover();
|
disposePopover();
|
||||||
if (!feature) {
|
if (!feature) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
popup.setPosition(evt.coordinate);
|
popup.setPosition(evt.coordinate);
|
||||||
popover = new bootstrap.Popover(popupEl, {
|
popover = new bootstrap.Popover(popupEl, {
|
||||||
placement: 'top',
|
placement: 'top',
|
||||||
@@ -242,7 +230,7 @@ async function main() {
|
|||||||
const el = document.createElement('img');
|
const el = document.createElement('img');
|
||||||
el.src = `https://r2b22.kip.pe/avatars/${name}.png`;
|
el.src = `https://r2b22.kip.pe/avatars/${name}.png`;
|
||||||
el.id = `user-${name}`;
|
el.id = `user-${name}`;
|
||||||
el.style = 'width: 40px; height: 40px; border-radius: 20px;';
|
el.style = 'width: 40px; height: 40px; border-radius: 20px; cursor: pointer';
|
||||||
document.getElementById('people').append(el);
|
document.getElementById('people').append(el);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -257,21 +245,41 @@ async function main() {
|
|||||||
map.addOverlay(overlayElement);
|
map.addOverlay(overlayElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isRecentTimestamp (tst) {
|
||||||
|
// newer than 2 hours ago?
|
||||||
|
return (tst * 1000) > (Date.now() - 2*60*60*1000);
|
||||||
|
}
|
||||||
|
|
||||||
function updateData(startInterval=false) {
|
function updateData(startInterval=false) {
|
||||||
fetch('https://r2b22.kip.pe/last.json')
|
fetch('https://r2b22.kip.pe/last.json')
|
||||||
.then(response => response.json())
|
.then(response => response.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
// console.debug(data);
|
|
||||||
const vanData = data.find(i => i.name == 'satoshithevan');
|
const vanData = data.find(i => i.name == 'satoshithevan');
|
||||||
const vanCoords = [vanData.lon, vanData.lat];
|
const vanCoords = [vanData.lon, vanData.lat];
|
||||||
vanFeature.getGeometry().setCoordinates(vanCoords);
|
vanFeature.getGeometry().setCoordinates(vanCoords);
|
||||||
|
|
||||||
for (const item of data) {
|
for (const item of data) {
|
||||||
if (!tourStatus.participants.includes(item.name)) continue;
|
if (!tourStatus.participants.includes(item.name)) continue;
|
||||||
|
if (!isRecentTimestamp(item.tst)) continue;
|
||||||
createParticipantHTML(item.name);
|
createParticipantHTML(item.name);
|
||||||
createParticipantOverlay(item.name);
|
createParticipantOverlay(item.name);
|
||||||
const overlay = peopleOverlays[item.name];
|
const overlay = peopleOverlays[item.name];
|
||||||
overlay.setPosition([item.lon, item.lat]);
|
overlay.setPosition([item.lon, item.lat]);
|
||||||
|
|
||||||
|
function clickHandler () {
|
||||||
|
disposePopover();
|
||||||
|
popup.setPosition([item.lon, item.lat]);
|
||||||
|
popover = new bootstrap.Popover(popupEl, {
|
||||||
|
placement: 'top',
|
||||||
|
html: true,
|
||||||
|
content: `Rider: ${item.name}`
|
||||||
|
});
|
||||||
|
popover.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
const avatarEl = document.getElementById(`user-${item.name}`);
|
||||||
|
avatarEl.removeEventListener('click', clickHandler);
|
||||||
|
avatarEl.addEventListener('click', clickHandler);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "ol-vite",
|
"name": "ol-vite",
|
||||||
"version": "1.7.0",
|
"version": "1.9.0",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "ol-vite",
|
"name": "ol-vite",
|
||||||
"version": "1.7.0",
|
"version": "1.9.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ol": "latest"
|
"ol": "latest"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "map",
|
"name": "map",
|
||||||
"version": "1.7.0",
|
"version": "1.9.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "vite",
|
"start": "vite",
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
|
|||||||
Reference in New Issue
Block a user