diff --git a/assets/favicons/README.md b/assets/favicons/README.md new file mode 100644 index 0000000..7a37cb6 --- /dev/null +++ b/assets/favicons/README.md @@ -0,0 +1 @@ +All images in this directory belong to their copyright owners and are only used as small icons. diff --git a/assets/favicons/ggg.at.png b/assets/favicons/ggg.at.png new file mode 100644 index 0000000..a94570b Binary files /dev/null and b/assets/favicons/ggg.at.png differ diff --git a/assets/favicons/ggg.at_redrawn.png b/assets/favicons/ggg.at_redrawn.png new file mode 100644 index 0000000..00a3414 Binary files /dev/null and b/assets/favicons/ggg.at_redrawn.png differ diff --git a/assets/favicons/kurier.at.png b/assets/favicons/kurier.at.png new file mode 100644 index 0000000..28607b9 Binary files /dev/null and b/assets/favicons/kurier.at.png differ diff --git a/assets/favicons/meinbezirk.at.png b/assets/favicons/meinbezirk.at.png new file mode 100644 index 0000000..13f8e27 Binary files /dev/null and b/assets/favicons/meinbezirk.at.png differ diff --git a/assets/favicons/neos.png b/assets/favicons/neos.png new file mode 100644 index 0000000..3da0da8 Binary files /dev/null and b/assets/favicons/neos.png differ diff --git a/assets/favicons/spoe.png b/assets/favicons/spoe.png new file mode 100644 index 0000000..f0ca10e Binary files /dev/null and b/assets/favicons/spoe.png differ diff --git a/assets/favicons/wien.gv.at.png b/assets/favicons/wien.gv.at.png new file mode 100644 index 0000000..6396591 Binary files /dev/null and b/assets/favicons/wien.gv.at.png differ diff --git a/custom.d.ts b/custom.d.ts index 156473a..05642bf 100644 --- a/custom.d.ts +++ b/custom.d.ts @@ -1,4 +1,9 @@ declare module "*.svg" { - const content: any; + const content: string; + export default content; +} + +declare module "*.png" { + const content: string; export default content; } diff --git a/data/schema.json b/data/schema.json index bdaba30..3c1f396 100644 --- a/data/schema.json +++ b/data/schema.json @@ -88,9 +88,6 @@ "type": "object", "additionalProperties": false, "properties": { - "wayID": { - "type": "integer" - }, "coords": { "$ref": "#/definitions/Coordinates" }, diff --git a/interfaces.ts b/interfaces.ts index 38513dc..606f260 100644 --- a/interfaces.ts +++ b/interfaces.ts @@ -18,6 +18,12 @@ export interface OSMNodeSource { nodes: number[] } +export interface Source { + type: "news" | "official" | "proposal" | "streetview" | "in person" + date: string + url?: string +} + export interface GeoData { coords: Coords, length: number // in meter @@ -27,7 +33,10 @@ export interface Crossing { id: number name: string bezirk: number + comment?:string + set?:string type: FlagType + sources: Source[] geosource: OSMWaySource | OSMNodeSource | RawCoordSource, geo?: GeoData } diff --git a/src/main.ts b/src/main.ts index c9f9660..32a1f2a 100644 --- a/src/main.ts +++ b/src/main.ts @@ -19,6 +19,7 @@ import dataURL from "../data/data.json?url" import {Crossing} from "../interfaces"; import prideFlag from "../assets/prideflag.svg" import transFlag from "../assets/transflag.svg" +import {displaySources} from "./text"; function averageCoords(coords: number[][]): number[] { @@ -179,14 +180,20 @@ map.on('singleclick', function (event) { if (id > 10000) { id -= 10000 } - console.info(id) const crossing = metaData[id] content.innerHTML = ""; const p = document.createElement("p") p.innerText = crossing.name content.appendChild(p) - + if (crossing.comment) { + const p = document.createElement("p") + const small = document.createElement("small") + small.innerText = crossing.comment + p.appendChild(small) + content.appendChild(p) + } + displaySources(crossing.sources, content) overlay.setPosition(coordinate); }, {hitTolerance: 5}) @@ -195,4 +202,3 @@ map.on('singleclick', function (event) { closer.blur(); } }); -console.log(dataURL) diff --git a/src/text.ts b/src/text.ts new file mode 100644 index 0000000..ce7876a --- /dev/null +++ b/src/text.ts @@ -0,0 +1,48 @@ +import {Source} from "../interfaces"; +import gggIcon from "../assets/favicons/ggg.at_redrawn.png" +import meinBezirkIcon from "../assets/favicons/meinbezirk.at.png" +import kurierIcon from "../assets/favicons/kurier.at.png" +import spoeIcon from "../assets/favicons/spoe.png" +import neosIcon from "../assets/favicons/neos.png" +import WienIcon from "../assets/favicons/wien.gv.at.png" + +export function displaySources(sources: Source[], content: HTMLElement) { + sources.forEach(s => { + if (!s.url) { + return + } + const img = document.createElement("img") + const a = document.createElement("a") + a.rel = "noopener" + a.target = "_blank" + a.title = s.date + img.src = "" + img.width = img.height = 32 + a.appendChild(img) + a.href = s.url! // TODO: missing url + switch (a.hostname) { + case "www.ggg.at": + img.src = gggIcon + break + case "www.meinbezirk.at": + img.src = meinBezirkIcon + break + case "kurier.at": + img.src = kurierIcon + break + case "www.neos.eu": + img.src = neosIcon + break + case "www.wien.gv.at": + img.src=WienIcon + break + } + if (a.hostname.includes("spoe")) { + img.src = spoeIcon + } + if (img.src === document.URL) { + a.innerText = a.hostname + } + content.appendChild(a) + }) +}