188 lines
8.8 KiB
JavaScript
188 lines
8.8 KiB
JavaScript
|
"use strict";
|
||
|
var _a;
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
var OsmConnection_1 = require("./Logic/OsmConnection");
|
||
|
var Changes_1 = require("./Logic/Changes");
|
||
|
var ElementStorage_1 = require("./Logic/ElementStorage");
|
||
|
var UIEventSource_1 = require("./UI/UIEventSource");
|
||
|
var UserBadge_1 = require("./UI/UserBadge");
|
||
|
var Basemap_1 = require("./Logic/Basemap");
|
||
|
var PendingChanges_1 = require("./UI/PendingChanges");
|
||
|
var CenterMessageBox_1 = require("./UI/CenterMessageBox");
|
||
|
var Helpers_1 = require("./Helpers");
|
||
|
var TagsFilter_1 = require("./Logic/TagsFilter");
|
||
|
var LayerUpdater_1 = require("./Logic/LayerUpdater");
|
||
|
var MessageBoxHandler_1 = require("./UI/MessageBoxHandler");
|
||
|
var FeatureInfoBox_1 = require("./UI/FeatureInfoBox");
|
||
|
var GeoLocationHandler_1 = require("./Logic/GeoLocationHandler");
|
||
|
var StrayClickHandler_1 = require("./Logic/StrayClickHandler");
|
||
|
var SimpleAddUI_1 = require("./UI/SimpleAddUI");
|
||
|
var VariableUIElement_1 = require("./UI/Base/VariableUIElement");
|
||
|
var SearchAndGo_1 = require("./UI/SearchAndGo");
|
||
|
var CollapseButton_1 = require("./UI/Base/CollapseButton");
|
||
|
var AllKnownLayouts_1 = require("./Customizations/AllKnownLayouts");
|
||
|
// --------------------- Read the URL parameters -----------------
|
||
|
// @ts-ignore
|
||
|
if (location.href.startsWith("http://buurtnatuur.be")) {
|
||
|
// Reload the https version. This is important for the 'locate me' button
|
||
|
window.location.replace("https://buurtnatuur.be");
|
||
|
}
|
||
|
var dryRun = false;
|
||
|
if (location.hostname === "localhost" || location.hostname === "127.0.0.1") {
|
||
|
// Set to true if testing and changes should NOT be saved
|
||
|
dryRun = true;
|
||
|
// If you have a testfile somewhere, enable this to spoof overpass
|
||
|
// This should be hosted independantly, e.g. with `cd assets; webfsd -p 8080` + a CORS plugin to disable cors rules
|
||
|
//Overpass.testUrl = "http://127.0.0.1:8080/streetwidths.geojson";
|
||
|
}
|
||
|
// ----------------- SELECT THE RIGHT QUESTSET -----------------
|
||
|
var defaultLayout = "buurtnatuur";
|
||
|
// Run over all questsets. If a part of the URL matches a searched-for part in the layout, it'll take that as the default
|
||
|
for (var k in AllKnownLayouts_1.AllKnownLayouts.allSets) {
|
||
|
var layout = AllKnownLayouts_1.AllKnownLayouts.allSets[k];
|
||
|
var possibleParts = (_a = layout.locationContains) !== null && _a !== void 0 ? _a : [];
|
||
|
for (var _i = 0, possibleParts_1 = possibleParts; _i < possibleParts_1.length; _i++) {
|
||
|
var locationMatch = possibleParts_1[_i];
|
||
|
if (locationMatch === "") {
|
||
|
continue;
|
||
|
}
|
||
|
if (window.location.href.toLowerCase().indexOf(locationMatch.toLowerCase()) >= 0) {
|
||
|
defaultLayout = layout.name;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// Read the query string to grap settings
|
||
|
var paramDict = {};
|
||
|
if (window.location.search) {
|
||
|
var params = window.location.search.substr(1).split("&");
|
||
|
for (var _b = 0, params_1 = params; _b < params_1.length; _b++) {
|
||
|
var param = params_1[_b];
|
||
|
var kv = param.split("=");
|
||
|
paramDict[kv[0]] = kv[1];
|
||
|
}
|
||
|
}
|
||
|
if (paramDict.layout) {
|
||
|
defaultLayout = paramDict.layout;
|
||
|
}
|
||
|
if (paramDict.test) {
|
||
|
dryRun = paramDict.test === "true";
|
||
|
}
|
||
|
var layoutToUse = AllKnownLayouts_1.AllKnownLayouts.allSets[defaultLayout];
|
||
|
console.log("Using layout: ", layoutToUse.name);
|
||
|
document.title = layoutToUse.title;
|
||
|
// ----------------- Setup a few event sources -------------
|
||
|
// The message that should be shown at the center of the screen
|
||
|
var centerMessage = new UIEventSource_1.UIEventSource("");
|
||
|
// The countdown: if set to e.g. ten, it'll start counting down. When reaching zero, changes will be saved. NB: this is implemented later, not in the eventSource
|
||
|
var secondsTillChangesAreSaved = new UIEventSource_1.UIEventSource(0);
|
||
|
var leftMessage = new UIEventSource_1.UIEventSource(undefined);
|
||
|
var selectedElement = new UIEventSource_1.UIEventSource(undefined);
|
||
|
var locationControl = new UIEventSource_1.UIEventSource({
|
||
|
zoom: layoutToUse.startzoom,
|
||
|
lat: layoutToUse.startLat,
|
||
|
lon: layoutToUse.startLon
|
||
|
});
|
||
|
// ----------------- Prepare the important objects -----------------
|
||
|
var saveTimeout = 30000; // After this many milliseconds without changes, saves are sent of to OSM
|
||
|
var allElements = new ElementStorage_1.ElementStorage();
|
||
|
var osmConnection = new OsmConnection_1.OsmConnection(dryRun);
|
||
|
var changes = new Changes_1.Changes("Beantwoorden van vragen met #MapComplete voor vragenset #" + layoutToUse.name, osmConnection, allElements);
|
||
|
var bm = new Basemap_1.Basemap("leafletDiv", locationControl, new VariableUIElement_1.VariableUiElement(locationControl.map(function (location) {
|
||
|
var mapComplete = "<a href='https://github.com/pietervdvn/MapComplete' target='_blank'>Mapcomple</a> " +
|
||
|
" " +
|
||
|
"<a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'><img src='./assets/bug.svg' alt='Report bug' class='small-userbadge-icon'></a>";
|
||
|
var editHere = "";
|
||
|
if (location !== undefined) {
|
||
|
editHere = " | " +
|
||
|
"<a href='https://www.openstreetmap.org/edit?editor=id#map=" + location.zoom + "/" + location.lat + "/" + location.lon + "' target='_blank'>" +
|
||
|
"<img src='./assets/pencil.svg' alt='edit here' class='small-userbadge-icon'>" +
|
||
|
"</a>";
|
||
|
}
|
||
|
return mapComplete + editHere;
|
||
|
})));
|
||
|
// ------------- Setup the layers -------------------------------
|
||
|
var controls = {};
|
||
|
var addButtons = [];
|
||
|
var flayers = [];
|
||
|
var minZoom = 0;
|
||
|
var _loop_1 = function (layer) {
|
||
|
var generateInfo = function (tagsES) {
|
||
|
return new FeatureInfoBox_1.FeatureInfoBox(tagsES, layer.title, layer.elementsToShow, changes, osmConnection.userDetails);
|
||
|
};
|
||
|
minZoom = Math.max(minZoom, layer.minzoom);
|
||
|
var flayer = layer.asLayer(bm, allElements, changes, osmConnection.userDetails, selectedElement, generateInfo);
|
||
|
controls[layer.name] = flayer.isDisplayed;
|
||
|
var addButton = {
|
||
|
name: layer.name,
|
||
|
icon: layer.icon,
|
||
|
tags: layer.newElementTags,
|
||
|
layerToAddTo: flayer
|
||
|
};
|
||
|
addButtons.push(addButton);
|
||
|
flayers.push(flayer);
|
||
|
};
|
||
|
for (var _c = 0, _d = layoutToUse.layers; _c < _d.length; _c++) {
|
||
|
var layer = _d[_c];
|
||
|
_loop_1(layer);
|
||
|
}
|
||
|
var layerUpdater = new LayerUpdater_1.LayerUpdater(bm, minZoom, flayers);
|
||
|
// ------------------ Setup various UI elements ------------
|
||
|
new StrayClickHandler_1.StrayClickHandler(bm, selectedElement, leftMessage, function () {
|
||
|
return new SimpleAddUI_1.SimpleAddUI(bm.Location, bm.LastClickLocation, changes, selectedElement, layerUpdater.runningQuery, osmConnection.userDetails, addButtons);
|
||
|
});
|
||
|
/**
|
||
|
* Show the questions and information for the selected element on the leftMessage
|
||
|
*/
|
||
|
selectedElement.addCallback(function (data) {
|
||
|
var _loop_2 = function (layer) {
|
||
|
var applicable = layer.overpassFilter.matches(TagsFilter_1.TagUtils.proprtiesToKV(data));
|
||
|
if (applicable) {
|
||
|
// This layer is the layer that gives the questions
|
||
|
leftMessage.setData(function () {
|
||
|
return new FeatureInfoBox_1.FeatureInfoBox(allElements.getElement(data.id), layer.title, layer.elementsToShow, changes, osmConnection.userDetails);
|
||
|
});
|
||
|
return "break";
|
||
|
}
|
||
|
};
|
||
|
// Which is the applicable set?
|
||
|
for (var _i = 0, _a = layoutToUse.layers; _i < _a.length; _i++) {
|
||
|
var layer = _a[_i];
|
||
|
var state_1 = _loop_2(layer);
|
||
|
if (state_1 === "break")
|
||
|
break;
|
||
|
}
|
||
|
});
|
||
|
var pendingChanges = new PendingChanges_1.PendingChanges(changes, secondsTillChangesAreSaved);
|
||
|
new UserBadge_1.UserBadge(osmConnection.userDetails, pendingChanges, bm)
|
||
|
.AttachTo('userbadge');
|
||
|
new SearchAndGo_1.SearchAndGo(bm).AttachTo("searchbox");
|
||
|
new CollapseButton_1.CollapseButton("messagesbox")
|
||
|
.AttachTo("collapseButton");
|
||
|
var welcomeMessage = function () {
|
||
|
return new VariableUIElement_1.VariableUiElement(osmConnection.userDetails.map(function (userdetails) {
|
||
|
var login = layoutToUse.gettingStartedPlzLogin;
|
||
|
if (userdetails.loggedIn) {
|
||
|
login = layoutToUse.welcomeBackMessage;
|
||
|
}
|
||
|
return "<div id='welcomeMessage'>" +
|
||
|
layoutToUse.welcomeMessage + login + layoutToUse.welcomeTail +
|
||
|
"</div>";
|
||
|
}), function () {
|
||
|
osmConnection.registerActivateOsmAUthenticationClass();
|
||
|
});
|
||
|
};
|
||
|
leftMessage.setData(welcomeMessage);
|
||
|
welcomeMessage().AttachTo("messagesbox");
|
||
|
var messageBox = new MessageBoxHandler_1.MessageBoxHandler(leftMessage, function () {
|
||
|
selectedElement.setData(undefined);
|
||
|
});
|
||
|
new CenterMessageBox_1.CenterMessageBox(minZoom, centerMessage, osmConnection, locationControl, layerUpdater.runningQuery)
|
||
|
.AttachTo("centermessage");
|
||
|
Helpers_1.Helpers.SetupAutoSave(changes, secondsTillChangesAreSaved, saveTimeout);
|
||
|
Helpers_1.Helpers.LastEffortSave(changes);
|
||
|
osmConnection.registerActivateOsmAUthenticationClass();
|
||
|
new GeoLocationHandler_1.GeoLocationHandler(bm).AttachTo("geolocate-button");
|
||
|
// --------------- Send a ping to start various action --------
|
||
|
locationControl.ping();
|
||
|
messageBox.update();
|