diff --git a/frontend/index.html b/frontend/index.html index 0c589ec..86fa92c 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -2,7 +2,6 @@ - Vite + React diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 342c51f..66920f7 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -14,6 +14,7 @@ "postcss": "^8.5.3", "react": "^19.0.0-rc.1", "react-dom": "^19.0.0-rc.1", + "react-helmet": "^6.1.0", "react-leaflet": "^5.0.0-rc.2", "tailwindcss": "^4.0.9" }, @@ -3292,7 +3293,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -3630,7 +3630,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -3713,7 +3712,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -3988,7 +3986,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", @@ -4027,11 +4024,40 @@ "react": "^19.0.0" } }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", + "license": "MIT" + }, + "node_modules/react-helmet": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", + "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.1.1", + "react-side-effect": "^2.1.0" + }, + "peerDependencies": { + "react": ">=16.3.0" + } + }, + "node_modules/react-helmet/node_modules/react-side-effect": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz", + "integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==", + "license": "MIT", + "peerDependencies": { + "react": "^16.3.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, "license": "MIT" }, "node_modules/react-leaflet": { diff --git a/frontend/package.json b/frontend/package.json index 246850d..8872d22 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -16,6 +16,7 @@ "postcss": "^8.5.3", "react": "^19.0.0-rc.1", "react-dom": "^19.0.0-rc.1", + "react-helmet": "^6.1.0", "react-leaflet": "^5.0.0-rc.2", "tailwindcss": "^4.0.9" }, diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index c728924..4855e3c 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -5,6 +5,9 @@ import "leaflet/dist/leaflet.css"; import L from "leaflet"; import { Icon } from "leaflet"; +import trainStationURL from "../src/assets/icons/train-station.png" +import TabTitle from "./components/TabTitle.jsx"; + // Fix marker icon issue with Leaflet delete L.Icon.Default.prototype._getIconUrl; L.Icon.Default.mergeOptions({ @@ -16,39 +19,63 @@ L.Icon.Default.mergeOptions({ "https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-shadow.png", }); -const mapCenter = [53.4494762, -7.5029786]; +let mapCenter = [53.4494762, -7.5029786]; -const trainIcon = new Icon({ - iconUrl: "https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Ftse1.mm.bing.net%2Fth%3Fid%3DOIP.Y1zUQhXp7cOSgg6Hl-C7yAHaHa%26pid%3DApi&f=1&ipt=b8b24d390654184e739b4c462f210b4b18e2f6876f90024ba8ce6ccf8fc761fb&ipo=images", - iconSize: [38,38] -}) +if ("geolocation" in navigator) { + navigator.geolocation.getCurrentPosition( + (position) => { + mapCenter = [position.coords.latitude, position.coords.longitude]; + }, + (error) => { + } + ); +} + +const icons = new Map(); +icons.set( + "train-station", + new Icon({ + iconUrl: trainStationURL, + iconSize: [38,38] + }) +) const markers = [ { coords: [53.4494762, -7.5029786], - popup: "Popup lol" + popup: "Popup lol", + icon: "train-station" } ] function App() { return ( -
- - + <> + +
- {markers.map(marker => ( - - -

Train 2

+ + -
-
- ))} - -
+ {markers.map(marker => ( + + +

Train 2

+

Train 2

+

Train 2

+

Train 2

+

Train 2

+

Train 2

+ +
+
+ ))} +
+
+ ); } diff --git a/frontend/src/assets/icons/bus-station.png b/frontend/src/assets/icons/bus-station.png new file mode 100644 index 0000000..b0c0086 Binary files /dev/null and b/frontend/src/assets/icons/bus-station.png differ diff --git a/frontend/src/assets/icons/bus.png b/frontend/src/assets/icons/bus.png new file mode 100644 index 0000000..ac0fc1e Binary files /dev/null and b/frontend/src/assets/icons/bus.png differ diff --git a/frontend/src/assets/icons/train-station.png b/frontend/src/assets/icons/train-station.png new file mode 100644 index 0000000..77de384 Binary files /dev/null and b/frontend/src/assets/icons/train-station.png differ diff --git a/frontend/src/assets/icons/train.png b/frontend/src/assets/icons/train.png new file mode 100644 index 0000000..8fad16b Binary files /dev/null and b/frontend/src/assets/icons/train.png differ diff --git a/frontend/src/assets/icons/train_late.png b/frontend/src/assets/icons/train_late.png new file mode 100644 index 0000000..788e963 Binary files /dev/null and b/frontend/src/assets/icons/train_late.png differ diff --git a/frontend/src/assets/icons/train_notrunning.png b/frontend/src/assets/icons/train_notrunning.png new file mode 100644 index 0000000..5dc5ba1 Binary files /dev/null and b/frontend/src/assets/icons/train_notrunning.png differ diff --git a/frontend/src/assets/icons/train_ontime.png b/frontend/src/assets/icons/train_ontime.png new file mode 100644 index 0000000..0166f7a Binary files /dev/null and b/frontend/src/assets/icons/train_ontime.png differ diff --git a/frontend/src/assets/icons/tram-station.png b/frontend/src/assets/icons/tram-station.png new file mode 100644 index 0000000..18f1387 Binary files /dev/null and b/frontend/src/assets/icons/tram-station.png differ diff --git a/frontend/src/components/TabTitle.jsx b/frontend/src/components/TabTitle.jsx new file mode 100644 index 0000000..82a3910 --- /dev/null +++ b/frontend/src/components/TabTitle.jsx @@ -0,0 +1,14 @@ +import React from "react"; +import { Helmet } from "react-helmet"; +import favicon from "../../src/assets/icons/train-station.png" + +const TabTitle = () => { + return ( + + Iompar + + + ); +}; + +export default TabTitle; \ No newline at end of file