diff --git a/Logic/Osm/Changes.ts b/Logic/Osm/Changes.ts index 806af3ba74..6c2acd0f9c 100644 --- a/Logic/Osm/Changes.ts +++ b/Logic/Osm/Changes.ts @@ -27,7 +27,9 @@ export class Changes { private readonly previouslyCreated : OsmObject[] = [] constructor() { - + this.isUploading.addCallbackAndRun(uploading => { + console.trace("Is uploading changed:", uploading) + }) } private static createChangesetFor(csId: string, @@ -255,6 +257,9 @@ export class Changes { console.log("Needed ids", neededIds) OsmObject.DownloadAll(neededIds, true).addCallbackAndRunD(osmObjects => { console.log("Got the fresh objects!", osmObjects, "pending: ", pending) + try{ + + const changes: { newObjects: OsmObject[], modifiedObjects: OsmObject[] @@ -283,6 +288,11 @@ export class Changes { return self.isUploading.setData(false); } // Failed - mark to try again ) + }catch(e){ + console.error("Could not handle changes - probably an old, pending changeset in localstorage with an invalid format; erasing those", e) + self.pendingChanges.setData([]) + self.isUploading.setData(false) + } return true; }); diff --git a/Logic/Osm/OsmObject.ts b/Logic/Osm/OsmObject.ts index fcc3da8886..51e19a3ab9 100644 --- a/Logic/Osm/OsmObject.ts +++ b/Logic/Osm/OsmObject.ts @@ -437,6 +437,9 @@ export class OsmWay extends OsmObject { for (const nodeId of element.nodes) { const node = nodeDict.get(nodeId) + if(node === undefined){ + console.error("Error: node ", nodeId, "not found in ", nodeDict) + } const cp = node.centerpoint(); this.coordinates.push(cp); latSum = cp[0] diff --git a/Logic/SimpleMetaTagger.ts b/Logic/SimpleMetaTagger.ts index 2337c97f3f..569e4645ef 100644 --- a/Logic/SimpleMetaTagger.ts +++ b/Logic/SimpleMetaTagger.ts @@ -305,7 +305,7 @@ export default class SimpleMetaTagger { } else if (_otherParkingMode.matchesProperties(properties)) { parallelParkingCount = 0; } else { - console.log("No parking data for ", properties.name, properties.id, properties) + console.log("No parking data for ", properties.name, properties.id) } diff --git a/UI/ExportPDF.ts b/UI/ExportPDF.ts index 6fc475bd80..a2aecec619 100644 --- a/UI/ExportPDF.ts +++ b/UI/ExportPDF.ts @@ -29,6 +29,7 @@ export default class ExportPDF { private readonly scaling = 2 private readonly freeDivId: string; private readonly _layout: UIEventSource; + private _screenhotTaken = false; constructor( options: { @@ -48,21 +49,24 @@ export default class ExportPDF { const l = options.location.data; const loc = { - lat : l.lat, + lat: l.lat, lon: l.lon, zoom: l.zoom + 1 } - + const minimap = new Minimap({ location: new UIEventSource(loc), // We remove the link between the old and the new UI-event source as moving the map while the export is running fucks up the screenshot background: options.background, allowMoving: false, onFullyLoaded: leaflet => window.setTimeout(() => { - try{ - self.CreatePdf(leaflet) - .then(() => self.cleanup()) - .catch(() => self.cleanup()) - }catch(e){ + if (self._screenhotTaken) { + return; + } + try { + self.CreatePdf(leaflet) + .then(() => self.cleanup()) + .catch(() => self.cleanup()) + } catch (e) { console.error(e) self.cleanup() } @@ -94,9 +98,10 @@ export default class ExportPDF { ) } - - private cleanup(){ + + private cleanup() { new FixedUiElement("Screenshot taken!").AttachTo(this.freeDivId) + this._screenhotTaken = true; } private async CreatePdf(leaflet: L.Map) { @@ -122,7 +127,8 @@ export default class ExportPDF { doc.roundedRect(12, 5, 125, 30, 5, 5, 'FD') doc.setFontSize(20) - doc.text(layout.title.txt, 40, 20, { maxWidth: 100 + doc.text(layout.title.txt, 40, 20, { + maxWidth: 100 }) doc.setFontSize(10) doc.text(t.attr.txt, 40, 25, { @@ -141,6 +147,6 @@ export default class ExportPDF { doc.save("MapComplete_export.pdf"); - + } } diff --git a/UI/Popup/FeatureInfoBox.ts b/UI/Popup/FeatureInfoBox.ts index 1bd09cb143..3f663a4b9f 100644 --- a/UI/Popup/FeatureInfoBox.ts +++ b/UI/Popup/FeatureInfoBox.ts @@ -63,13 +63,15 @@ export default class FeatureInfoBox extends ScrollableFullScreen { } return new EditableTagRendering(tags, tr, layerConfig.units); }); + + let editElements : BaseUIElement[] = [] if (!questionBoxIsUsed) { - renderings.push(questionBox); + editElements.push(questionBox); } if (layerConfig.deletion) { - renderings.push( + editElements.push( new VariableUiElement(tags.map(tags => tags.id).map(id => new DeleteWizard( id, @@ -79,7 +81,7 @@ export default class FeatureInfoBox extends ScrollableFullScreen { } if (layerConfig.allowSplit) { - renderings.push( + editElements.push( new VariableUiElement(tags.map(tags => tags.id).map(id => new SplitRoadWizard(id)) )) @@ -91,7 +93,7 @@ export default class FeatureInfoBox extends ScrollableFullScreen { renderings.push(new TagRenderingAnswer(tags, SharedTagRenderings.SharedTagRendering.get("minimap"))) } - renderings.push( + editElements.push( new VariableUiElement( State.state.osmConnection.userDetails .map(ud => ud.csCount) @@ -109,7 +111,7 @@ export default class FeatureInfoBox extends ScrollableFullScreen { ) - renderings.push( + editElements.push( new VariableUiElement( State.state.featureSwitchIsDebugging.map(isDebugging => { if (isDebugging) { @@ -119,6 +121,16 @@ export default class FeatureInfoBox extends ScrollableFullScreen { }) ) ) + + const editors = new VariableUiElement(State.state.featureSwitchUserbadge.map( + userbadge => { + if(!userbadge){ + return undefined + } + return new Combine(editElements) + } + )) + renderings.push(editors) return new Combine(renderings).SetClass("block") diff --git a/assets/themes/cycle_infra/cycle_infra.json b/assets/themes/cycle_infra/cycle_infra.json index 3193f27b18..e7e395b706 100644 --- a/assets/themes/cycle_infra/cycle_infra.json +++ b/assets/themes/cycle_infra/cycle_infra.json @@ -23,7 +23,7 @@ "startLat": 51, "startLon": 3.75, "startZoom": 11, - "widenFactor": 0.05, + "widenFactor": 0.0, "socialImage": "./assets/themes/cycle_infra/cycle-infra.svg", "enableDownload": true, "layers": [ @@ -33,7 +33,7 @@ "en": "Cycleways", "nl": "Fietspaden" }, - "minzoom": 14, + "minzoom": 16, "source": { "osmTags": { "or": [ @@ -1151,7 +1151,7 @@ "calculatedTags": [ "_comfort_score=feat.score('https://raw.githubusercontent.com/pietervdvn/AspectedRouting/master/Examples/bicycle/aspects/bicycle.comfort.json')" ], - "minzoom": 14, + "minzoom": 16, "wayHandling": 0, "title": { "render": {