4 Commits

Author SHA1 Message Date
Râu Cao
e74e460480 1.9.0 2022-09-15 10:02:34 +02:00
Râu Cao
0cb10203c7 Only show riders when tracking timestamp is newer than 3 hours ago 2022-09-15 10:02:15 +02:00
Râu Cao
a8c0aefbd6 1.8.0 2022-09-14 19:05:41 +02:00
Râu Cao
9c18cc19b7 Add popover for rider markers 2022-09-14 19:05:15 +02:00
6 changed files with 35 additions and 27 deletions

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

@@ -7,7 +7,7 @@
<title>Road2Bitcoin Live Map</title>
<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 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">
</head>
<body>

40
main.js
View File

@@ -104,8 +104,7 @@ async function main() {
const vanFeature= new Feature({
geometry: new Point([8.918618, 44.407408]),
name: 'Support Van',
trackable: true
name: 'Support Van'
});
vectorSourceTrackedPoints.addFeature(vanFeature);
@@ -191,15 +190,6 @@ async function main() {
title.textContent = feature.get('name');
container.append(title);
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
@@ -208,9 +198,7 @@ async function main() {
return feature;
});
disposePopover();
if (!feature) {
return;
}
if (!feature) return;
popup.setPosition(evt.coordinate);
popover = new bootstrap.Popover(popupEl, {
placement: 'top',
@@ -242,7 +230,7 @@ async function main() {
const el = document.createElement('img');
el.src = `https://r2b22.kip.pe/avatars/${name}.png`;
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);
}
@@ -257,21 +245,41 @@ async function main() {
map.addOverlay(overlayElement);
}
function isRecentTimestamp (tst) {
// newer than 2 hours ago?
return (tst * 1000) > (Date.now() - 2*60*60*1000);
}
function updateData(startInterval=false) {
fetch('https://r2b22.kip.pe/last.json')
.then(response => response.json())
.then(data => {
// console.debug(data);
const vanData = data.find(i => i.name == 'satoshithevan');
const vanCoords = [vanData.lon, vanData.lat];
vanFeature.getGeometry().setCoordinates(vanCoords);
for (const item of data) {
if (!tourStatus.participants.includes(item.name)) continue;
if (!isRecentTimestamp(item.tst)) continue;
createParticipantHTML(item.name);
createParticipantOverlay(item.name);
const overlay = peopleOverlays[item.name];
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
View File

@@ -1,12 +1,12 @@
{
"name": "ol-vite",
"version": "1.7.0",
"version": "1.9.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "ol-vite",
"version": "1.7.0",
"version": "1.9.0",
"dependencies": {
"ol": "latest"
},

View File

@@ -1,6 +1,6 @@
{
"name": "map",
"version": "1.7.0",
"version": "1.9.0",
"scripts": {
"start": "vite",
"build": "vite build",