From eb4dda1ba2cf0ccc88bd21abc2c86306c4a53d5c Mon Sep 17 00:00:00 2001
From: Pieter Vander Vennet
Date: Sat, 25 Jul 2020 18:00:08 +0200
Subject: [PATCH] More css tweaks and bug fixes
---
Customizations/AllKnownLayouts.ts | 6 +-
Customizations/Layers/Widths.ts | 4 +-
Customizations/Layout.ts | 11 +-
Customizations/Layouts/Cyclofix.ts | 1 +
Customizations/Layouts/Natuurpunt.ts | 3 +-
Customizations/Layouts/StreetWidth.ts | 54 +
Helpers.ts | 2 -
Logic/Imgur.ts | 5 +-
Logic/LayerUpdater.ts | 2 +-
Logic/LocalStorageSource.ts | 2 +
Logic/QueryParameters.ts | 3 +
Logic/StrayClickHandler.ts | 9 +-
UI/Base/Button.ts | 5 +-
UI/FullScreenMessageBoxHandler.ts | 15 +-
UI/ImageUploadFlow.ts | 2 +-
UI/Input/DropDown.ts | 2 +-
UI/UIElement.ts | 3 +
UI/i18n/Locale.ts | 13 +
UI/i18n/Translations.ts | 6 +-
assets/streetwidths.geojson | 12951 ----
assets/test.json | 94255 ------------------------
createLayouts.ts | 12 +
deploy.sh | 2 +
index.css | 139 +-
index.html | 30 +-
index.ts | 23 +-
manifest.webmanifest | 1 +
package-lock.json | 25 +-
package.json | 11 +-
29 files changed, 294 insertions(+), 107303 deletions(-)
delete mode 100644 assets/streetwidths.geojson
delete mode 100644 assets/test.json
create mode 100644 createLayouts.ts
diff --git a/Customizations/AllKnownLayouts.ts b/Customizations/AllKnownLayouts.ts
index 678edea4c..ba69d3068 100644
--- a/Customizations/AllKnownLayouts.ts
+++ b/Customizations/AllKnownLayouts.ts
@@ -33,11 +33,15 @@ export class AllKnownLayouts {
const all = new All();
+ const knownKeys = []
for (const layout of layouts) {
for (const layer of layout.layers) {
- if (all.layers.indexOf(layer) >= 0) {
+ const key = layer.overpassFilter.asOverpass().join("");
+ if (knownKeys.indexOf(key) >= 0) {
continue;
}
+ console.log(key)
+ knownKeys.push(key);
all.layers.push(layer);
}
}
diff --git a/Customizations/Layers/Widths.ts b/Customizations/Layers/Widths.ts
index 6589399a0..951f0e4c8 100644
--- a/Customizations/Layers/Widths.ts
+++ b/Customizations/Layers/Widths.ts
@@ -37,7 +37,9 @@ export class Widths extends LayerDefinition {
private readonly _oneSideParking = new Or([this._leftSideParking, this._rightSideParking]);
- private readonly _carfree = new Or([new Tag("highway", "pedestrian"), new Tag("highway", "living_street")])
+ private readonly _carfree = new Or(
+ [new Tag("highway", "pedestrian"), new Tag("highway", "living_street"),
+ new Tag("access","destination"), new Tag("motor_vehicle", "destination")])
private readonly _notCarFree = new Not(this._carfree);
private calcProps(properties) {
diff --git a/Customizations/Layout.ts b/Customizations/Layout.ts
index 597c6fda9..077fbe5e4 100644
--- a/Customizations/Layout.ts
+++ b/Customizations/Layout.ts
@@ -14,6 +14,7 @@ import {UIEventSource} from "../UI/UIEventSource";
export class Layout {
public name: string;
+ public icon: string = "./assets/add.svg";
public title: UIElement;
public layers: LayerDefinition[];
public welcomeMessage: UIElement;
@@ -55,7 +56,7 @@ export class Layout {
welcomeTail: UIElement | string = ""
) {
this.supportedLanguages = supportedLanguages;
- this.title = typeof (title) === 'string' ? new FixedUiElement(title) : title;
+ this.title = Translations.W(title)
this.startLon = startLon;
this.startLat = startLat;
this.startzoom = startzoom;
@@ -73,6 +74,7 @@ export class Layout {
export class WelcomeMessage extends UIElement {
private readonly layout: Layout;
private readonly userDetails: UIEventSource;
+ private languagePicker: UIElement;
private osmConnection: OsmConnection;
private readonly description: UIElement;
@@ -81,8 +83,11 @@ export class WelcomeMessage extends UIElement {
private readonly tail: UIElement;
- constructor(layout: Layout, osmConnection: OsmConnection) {
+ constructor(layout: Layout,
+ languagePicker: UIElement,
+ osmConnection: OsmConnection) {
super(osmConnection.userDetails);
+ this.languagePicker = languagePicker;
this.ListenTo(Locale.language);
this.osmConnection = osmConnection;
this.layout = layout;
@@ -99,6 +104,8 @@ export class WelcomeMessage extends UIElement {
this.description.Render() +
(this.userDetails.data.loggedIn ? this.welcomeBack : this.plzLogIn).Render() +
this.tail.Render() +
+ "
" +
+ this.languagePicker.Render() +
""
;
diff --git a/Customizations/Layouts/Cyclofix.ts b/Customizations/Layouts/Cyclofix.ts
index 52618f61a..2cadb077a 100644
--- a/Customizations/Layouts/Cyclofix.ts
+++ b/Customizations/Layouts/Cyclofix.ts
@@ -25,5 +25,6 @@ export default class Cyclofix extends Layout {
"
"
])
);
+ this.icon = "./assets/bike/pump.svg"
}
}
diff --git a/Customizations/Layouts/Natuurpunt.ts b/Customizations/Layouts/Natuurpunt.ts
index 78c0c7a0c..a03d4b910 100644
--- a/Customizations/Layouts/Natuurpunt.ts
+++ b/Customizations/Layouts/Natuurpunt.ts
@@ -2,6 +2,7 @@ import {Layout} from "../Layout";
import {Birdhide} from "../Layers/Birdhide";
import {InformationBoard} from "../Layers/InformationBoard";
import {NatureReserves} from "../Layers/NatureReserves";
+import {DrinkingWater} from "../Layers/DrinkingWater";
export class Natuurpunt extends Layout{
constructor() {
@@ -9,7 +10,7 @@ export class Natuurpunt extends Layout{
"natuurpunt",
["nl"],
"De natuur in",
- [new Birdhide(), new InformationBoard(), new NatureReserves(true)],
+ [new Birdhide(), new InformationBoard(), new NatureReserves(true), new DrinkingWater()],
12,
51.20875,
3.22435,
diff --git a/Customizations/Layouts/StreetWidth.ts b/Customizations/Layouts/StreetWidth.ts
index f30c39779..faaea76e1 100644
--- a/Customizations/Layouts/StreetWidth.ts
+++ b/Customizations/Layouts/StreetWidth.ts
@@ -5,6 +5,60 @@ import {UIEventSource} from "../../UI/UIEventSource";
export class StreetWidth extends Layout{
+ private static meetMethode = `
+
+
+ We meten de ruimte die gedeeld wordt door auto's, fietsers en -in sommige gevallen- voetgangers.
+ We meten dus van _verhoogde_ stoeprand tot stoeprand omdat dit de ruimte is die wordt gedeeld door auto's en fietsers.
+ Daarnaast zoeken we ook een smaller stuk van de weg waar dat smallere stuk toch minstens 2m zo smal blijft.
+ Een obstakel (zoals een trap, elektriciteitkast) negeren we omdat dit de meting te fel beinvloed.
+
+ In een aantal straten is er geen verhoogde stoep. In dit geval meten we van muur tot muur, omdat dit de gedeelde ruimte is.
+ We geven ook altijd een aanduiding of er al dan niet een voetpad aanwezig (en aan welke kant indien er maar één is), want indien er geen is heeft de voetganger ook ruimte nodig.
+
+ (In sommige straten zijn er wel 'voetpadsuggesties' door een meter in andere kasseien te leggen, bv. met een kleurtje. Dit rekenen we niet als voetpad.
+
+ Ook het parkeren van auto's wordt opgemeten.
+ Als er een parallele parkeerstrook is, dan duiden we dit aan en nemen we de parkeerstrook mee in de straatbreedte.
+ Als er een witte lijn is, dan negeren we dit. Deze witte lijnen duiden immers vaak een té smalle parkeerplaats aan - bv. 1.6m.
+ Een auto is tegenwoordig al snel 1.8m tot zelfs 2.0m, dus dan springt die auto gemakkelijk 20 tot 30cm uit op de baan.
+
+ Staan de auto's schuin geparkeerd of dwarsgeparkeerd?
+ Ook hier kan men het argument maken dat auto's er soms overspringen, maar dat is hier te variabel om in kaart te brengen.
+ Daarnaast gebeurt het minder dat auto's overspringen én zijn deze gevallen relatief zeldzaam in de binnenstad.
+
+ Concreet:
+ - Sla de 'parkeren'-vraag over
+ - Maak een foto en stuur die door naar Pieter (+ vermelding straatnaam of dergelijke)
+ - Meet de breedte vanaf de afbakening van de parkeerstrook.
+
+ Ook bij andere lastige gevallen: maak een foto en vraag Pieter
+
+
+
+ Instellen van de lasermeter
+ ===========================
+
+ 1) Zet de lasermeter aan met de rode knop
+ 2) Het icoontje linksboven indiceert vanaf waar de laser meet - de voorkant of de achterkant van het apparaatje.
+ Dit kan aangepast worden met het knopje links-onderaan.
+ Kies wat je het liefste hebt
+ 3) Het icoontje bovenaan-midden indiceert de stand van de laser: directe afstand, of afstand over de grond.
+ Dit MOET een driehoekje tonen.
+ Indien niet: duw op het knopje links-bovenaan totdat dit een rechte driehoek toont
+ 4) Duw op de rode knop. Het lasertje gaat branden
+ 5) Hou het meetbakje boven de stoeprand (met de juiste rand), richt de laser op de andere stoep
+ 6) Duw opnieuw op de rode knop om te meten (de laser flikkert en gaat uit)
+ 7) Lees de afstand af op het scherm. Let op: in 'hoekstand' is dit niet de onderste waarde, maar die er net boven.
+
+ `
+
+
+
+
+
+
+
constructor() {
super( "width",
["nl"],
diff --git a/Helpers.ts b/Helpers.ts
index 1876150ab..49043bdae 100644
--- a/Helpers.ts
+++ b/Helpers.ts
@@ -4,7 +4,6 @@ import {UIEventSource} from "./UI/UIEventSource";
export class Helpers {
-
static DoEvery(millis: number, f: (() => void)) {
window.setTimeout(
function () {
@@ -56,7 +55,6 @@ export class Helpers {
* -> WHen uploading is done, the window is closed anyway
*/
static LastEffortSave(changes: Changes) {
-
window.addEventListener("beforeunload", function (e) {
// Quickly save everyting!
if (changes.pendingChangesES.data == 0) {
diff --git a/Logic/Imgur.ts b/Logic/Imgur.ts
index 77a72ea1b..2a46723e9 100644
--- a/Logic/Imgur.ts
+++ b/Logic/Imgur.ts
@@ -9,8 +9,11 @@ export class Imgur {
handleSuccessfullUpload: ((imageURL: string) => void),
allDone: (() => void),
onFail: ((reason: string) => void),
- offset:number = 0) {
+ offset:number) {
+ if(offset === undefined){
+ throw "Offset undefined - not uploading to prevent to much uploads!"
+ }
if (blobs.length == offset) {
allDone();
return;
diff --git a/Logic/LayerUpdater.ts b/Logic/LayerUpdater.ts
index 3949ed9a1..24749f67b 100644
--- a/Logic/LayerUpdater.ts
+++ b/Logic/LayerUpdater.ts
@@ -63,7 +63,7 @@ export class LayerUpdater {
this.previousBounds = undefined;
const self = this;
this._failCount++;
- window.setTimeout(
+ window?.setTimeout(
function(){self.update()}, this._failCount * 1000
)
}
diff --git a/Logic/LocalStorageSource.ts b/Logic/LocalStorageSource.ts
index ab8ac3a9b..3b1146c03 100644
--- a/Logic/LocalStorageSource.ts
+++ b/Logic/LocalStorageSource.ts
@@ -3,9 +3,11 @@ import {UIEventSource} from "../UI/UIEventSource";
export class LocalStorageSource {
static Get(key: string, defaultValue: string = undefined): UIEventSource {
+
const saved = localStorage.getItem(key);
const source = new UIEventSource(saved ?? defaultValue);
+ // ignore when running from the console
source.addCallback((data) => {
localStorage.setItem(key, data);
console.log("Wriging ", key, data)
diff --git a/Logic/QueryParameters.ts b/Logic/QueryParameters.ts
index 5a6753c39..4ba8e0431 100644
--- a/Logic/QueryParameters.ts
+++ b/Logic/QueryParameters.ts
@@ -17,6 +17,9 @@ export class QueryParameters {
private static init() {
const knownSources = {}
+ if(window === undefined){
+ return;
+ }
if (window.location.search) {
const params = window.location.search.substr(1).split("&");
for (const param of params) {
diff --git a/Logic/StrayClickHandler.ts b/Logic/StrayClickHandler.ts
index 59c50de96..b7fe2830f 100644
--- a/Logic/StrayClickHandler.ts
+++ b/Logic/StrayClickHandler.ts
@@ -29,7 +29,14 @@ export class StrayClickHandler {
if (self._lastMarker !== undefined) {
map.removeLayer(self._lastMarker);
}
- self._lastMarker = L.marker([lastClick.lat, lastClick.lon]);
+ self._lastMarker = L.marker([lastClick.lat, lastClick.lon], {
+ icon: L.icon({
+ iconUrl: "./assets/add.svg",
+ iconSize: [50,50],
+ iconAnchor: [25,50],
+ popupAnchor: [0,-45]
+ })
+ });
const uiElement = uiToShow();
const popup = L.popup().setContent(uiElement.Render());
uiElement.Update();
diff --git a/UI/Base/Button.ts b/UI/Base/Button.ts
index 9a08bd44b..254a1b042 100644
--- a/UI/Base/Button.ts
+++ b/UI/Base/Button.ts
@@ -1,14 +1,15 @@
import {UIElement} from "../UIElement";
import Locale from "../i18n/Locale";
+import Translations from "../i18n/Translations";
export class Button extends UIElement {
private _text: UIElement;
private _onclick: () => void;
private _clss: string;
- constructor(text: UIElement, onclick: (() => void), clss: string = "") {
+ constructor(text: string | UIElement, onclick: (() => void), clss: string = "") {
super(Locale.language);
- this._text = text;
+ this._text = Translations.W(text);
this._onclick = onclick;
if (clss !== "") {
diff --git a/UI/FullScreenMessageBoxHandler.ts b/UI/FullScreenMessageBoxHandler.ts
index 88f687144..bb6e08dd2 100644
--- a/UI/FullScreenMessageBoxHandler.ts
+++ b/UI/FullScreenMessageBoxHandler.ts
@@ -16,21 +16,22 @@ export class FullScreenMessageBoxHandler {
this.listenTo(uielement);
this.update();
- window.onhashchange = function () {
- if (location.hash === "") {
- // No more element: back to the map!
- uielement.setData(undefined);
- onClear();
+ if (window !== undefined) {
+ window.onhashchange = function () {
+ if (location.hash === "") {
+ // No more element: back to the map!
+ uielement.setData(undefined);
+ onClear();
+ }
}
}
Translations.t.general.returnToTheMap
.onClick(() => {
- console.log("Clicked 'return to the map'")
uielement.setData(undefined);
onClear();
})
- .AttachTo("to-the-map-h2");
+ .AttachTo("to-the-map");
}
diff --git a/UI/ImageUploadFlow.ts b/UI/ImageUploadFlow.ts
index 048b32ac7..4906333b4 100644
--- a/UI/ImageUploadFlow.ts
+++ b/UI/ImageUploadFlow.ts
@@ -125,7 +125,7 @@ export class ImageUploadFlow extends UIElement {
},
function(failReason) {
- }
+ },0
)
}
}
diff --git a/UI/Input/DropDown.ts b/UI/Input/DropDown.ts
index 6427a61fb..7e0db2aa6 100644
--- a/UI/Input/DropDown.ts
+++ b/UI/Input/DropDown.ts
@@ -67,7 +67,7 @@ export class DropDown extends InputElement {
}
return "