diff --git a/Customizations/AllKnownLayouts.ts b/Customizations/AllKnownLayouts.ts
index 678edea..ba69d30 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 6589399..951f0e4 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 597c6fd..077fbe5 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 52618f6..2cadb07 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 78c0c7a..a03d4b9 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 f30c397..faaea76 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 1876150..49043bd 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 77a72ea..2a46723 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 3949ed9..24749f6 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 ab8ac3a..3b1146c 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 5a6753c..4ba8e04 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 59c50de..b7fe283 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 9a08bd4..254a1b0 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 88f6871..bb6e08d 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 048b32a..4906333 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 6427a61..7e0db2a 100644
--- a/UI/Input/DropDown.ts
+++ b/UI/Input/DropDown.ts
@@ -67,7 +67,7 @@ export class DropDown extends InputElement {
}
return "