Merge and bugfixes
This commit is contained in:
commit
c3664ce82f
9 changed files with 87 additions and 44 deletions
|
@ -14,9 +14,10 @@ export class AllKnownLayouts {
|
||||||
new Groen(),
|
new Groen(),
|
||||||
new GRB(),
|
new GRB(),
|
||||||
new BikePumpsLayout(),
|
new BikePumpsLayout(),
|
||||||
|
new Bookcases()
|
||||||
/*new Toilets(),
|
/*new Toilets(),
|
||||||
new Statues(),
|
new Statues(),
|
||||||
new Bookcases()*/
|
*/
|
||||||
];
|
];
|
||||||
const allSets = {};
|
const allSets = {};
|
||||||
for (const layout of layouts) {
|
for (const layout of layouts) {
|
||||||
|
|
|
@ -3,6 +3,7 @@ import L from "leaflet";
|
||||||
import {Tag} from "../../Logic/TagsFilter";
|
import {Tag} from "../../Logic/TagsFilter";
|
||||||
import {QuestionDefinition} from "../../Logic/Question";
|
import {QuestionDefinition} from "../../Logic/Question";
|
||||||
import {TagRenderingOptions} from "../TagRendering";
|
import {TagRenderingOptions} from "../TagRendering";
|
||||||
|
import {NameInline} from "../Questions/NameInline";
|
||||||
|
|
||||||
export class Bookcases extends LayerDefinition {
|
export class Bookcases extends LayerDefinition {
|
||||||
|
|
||||||
|
@ -10,21 +11,38 @@ export class Bookcases extends LayerDefinition {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
this.name = "boekenkast";
|
this.name = "boekenkast";
|
||||||
this.newElementTags = [new Tag( "amenity", "public_bookcase")];
|
this.newElementTags = [new Tag("amenity", "public_bookcase")];
|
||||||
this.icon = "./assets/bookcase.svg";
|
this.icon = "./assets/bookcase.svg";
|
||||||
this.overpassFilter = new Tag("amenity","public_bookcase");
|
this.overpassFilter = new Tag("amenity", "public_bookcase");
|
||||||
this.minzoom = 13;
|
this.minzoom = 13;
|
||||||
|
|
||||||
|
this.title = new NameInline("ruilboekenkastje");
|
||||||
|
this.elementsToShow = [
|
||||||
|
|
||||||
this.questions = [
|
new TagRenderingOptions(
|
||||||
|
{
|
||||||
|
question: "Hoeveel boeken passen in dit boekenruilkastje?",
|
||||||
|
freeform: {
|
||||||
|
renderTemplate: "Er passen {capacity} boeken in dit boekenruilkastje",
|
||||||
|
template: "Er passen $$$ boeken in dit boekenruilkastje",
|
||||||
|
key: "capacity",
|
||||||
|
placeholder: "aantal"
|
||||||
|
},
|
||||||
|
priority: 15
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
/* this.questions = [
|
||||||
QuestionDefinition.noNameOrNameQuestion("Wat is de naam van dit boekenruilkastje?", "Dit boekenruilkastje heeft niet echt een naam", 20),
|
QuestionDefinition.noNameOrNameQuestion("Wat is de naam van dit boekenruilkastje?", "Dit boekenruilkastje heeft niet echt een naam", 20),
|
||||||
QuestionDefinition.textQuestion("Hoeveel boeken kunnen er in?", "capacity", 15),
|
|
||||||
QuestionDefinition.textQuestion("Heeft dit boekenkastje een peter, meter of voogd?", "operator", 10),
|
QuestionDefinition.textQuestion("Heeft dit boekenkastje een peter, meter of voogd?", "operator", 10),
|
||||||
// QuestionDefinition.textQuestion("Wie kunnen we (per email) contacteren voor dit boekenruilkastje?", "email", 5),
|
// QuestionDefinition.textQuestion("Wie kunnen we (per email) contacteren voor dit boekenruilkastje?", "email", 5),
|
||||||
|
|
||||||
|
|
||||||
]
|
]
|
||||||
;
|
;
|
||||||
|
*/
|
||||||
|
|
||||||
this.style = function (tags) {
|
this.style = function (tags) {
|
||||||
return {
|
return {
|
||||||
|
@ -36,6 +54,7 @@ export class Bookcases extends LayerDefinition {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
this.elementsToShow = [
|
this.elementsToShow = [
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,7 +77,7 @@ export class Bookcases extends LayerDefinition {
|
||||||
|
|
||||||
new TagMappingOptions({key: "description", template: "Extra beschrijving: <br /> <p>{description}</p>"}),
|
new TagMappingOptions({key: "description", template: "Extra beschrijving: <br /> <p>{description}</p>"}),
|
||||||
]
|
]
|
||||||
;
|
;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,13 +13,27 @@ export class Park extends LayerDefinition {
|
||||||
private accessByDefault = new TagRenderingOptions({
|
private accessByDefault = new TagRenderingOptions({
|
||||||
question: "Is dit park publiek toegankelijk?",
|
question: "Is dit park publiek toegankelijk?",
|
||||||
mappings: [
|
mappings: [
|
||||||
{k: new Tag("access","yes"), txt: "Publiek toegankelijk"},
|
{k: new Tag("access", "yes"), txt: "Publiek toegankelijk"},
|
||||||
{k: new Tag("access",""), txt: "Publiek toegankelijk"},
|
{k: new Tag("access", ""), txt: "Publiek toegankelijk"},
|
||||||
{k: new Tag("access","no"), txt: "Niet-publiek toegankelijk park"},
|
{k: new Tag("access", "no"), txt: "Niet publiek toegankelijk"},
|
||||||
{k: new Tag("access","guided"), txt: "Enkel toegankelijk met een gids of op een activiteit"}
|
{k: new Tag("access", "guided"), txt: "Enkel toegankelijk met een gids of op een activiteit"}
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
private operatorByDefault = new
|
||||||
|
|
||||||
|
TagRenderingOptions({
|
||||||
|
question: "Wie beheert dit park?",
|
||||||
|
freeform: {
|
||||||
|
key: "operator",
|
||||||
|
renderTemplate: "Dit park wordt beheerd door {operator}",
|
||||||
|
template: "$$$",
|
||||||
|
},
|
||||||
|
mappings: [{
|
||||||
|
k: null, txt: "De gemeente beheert dit park"
|
||||||
|
}]
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
|
@ -35,7 +49,8 @@ export class Park extends LayerDefinition {
|
||||||
this.style = this.generateStyleFunction();
|
this.style = this.generateStyleFunction();
|
||||||
this.title = new NameInline("park");
|
this.title = new NameInline("park");
|
||||||
this.elementsToShow = [new NameQuestion(),
|
this.elementsToShow = [new NameQuestion(),
|
||||||
this.accessByDefault
|
this.accessByDefault,
|
||||||
|
this.operatorByDefault
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import {Layout} from "../Layout";
|
||||||
export class Groen extends Layout {
|
export class Groen extends Layout {
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super("groen",
|
super("buurtnatuur",
|
||||||
"Buurtnatuur",
|
"Buurtnatuur",
|
||||||
[new NatureReserves(), new Park(), new Bos()],
|
[new NatureReserves(), new Park(), new Bos()],
|
||||||
10,
|
10,
|
||||||
|
|
|
@ -72,7 +72,7 @@ export class TagRenderingOptions {
|
||||||
const tagsKV = TagUtils.proprtiesToKV(tags);
|
const tagsKV = TagUtils.proprtiesToKV(tags);
|
||||||
|
|
||||||
for (const oneOnOneElement of this.options.mappings) {
|
for (const oneOnOneElement of this.options.mappings) {
|
||||||
if (oneOnOneElement.k.matches(tagsKV)) {
|
if (oneOnOneElement.k === null || oneOnOneElement.k.matches(tagsKV)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -147,9 +147,8 @@ export class TagRendering extends UIElement {
|
||||||
this.elementPriority = options.priority ?? 0;
|
this.elementPriority = options.priority ?? 0;
|
||||||
|
|
||||||
// Prepare the choices for the Radio buttons
|
// Prepare the choices for the Radio buttons
|
||||||
let i = 0;
|
|
||||||
const choices: UIElement[] = [];
|
const choices: UIElement[] = [];
|
||||||
const alreadyUsedTexts: string[] = [];
|
const usedChoices: string [] = [];
|
||||||
|
|
||||||
for (const choice of options.mappings ?? []) {
|
for (const choice of options.mappings ?? []) {
|
||||||
if (choice.k === null) {
|
if (choice.k === null) {
|
||||||
|
@ -167,15 +166,16 @@ export class TagRendering extends UIElement {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const txt = choiceSubbed.txt;
|
|
||||||
if (alreadyUsedTexts.indexOf(txt) < 0) {
|
const txt = choiceSubbed.txt
|
||||||
|
// Choices is what is shown in the radio buttons
|
||||||
|
if (usedChoices.indexOf(txt) < 0) {
|
||||||
|
|
||||||
choices.push(new FixedUiElement(txt));
|
choices.push(new FixedUiElement(txt));
|
||||||
alreadyUsedTexts.push(txt);
|
usedChoices.push(txt);
|
||||||
}
|
// This is used to convert the radio button index into tags needed to add
|
||||||
|
|
||||||
|
|
||||||
this._mapping.push(choiceSubbed);
|
this._mapping.push(choiceSubbed);
|
||||||
i++;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Map radiobutton choice and textfield answer onto tagfilter. That tagfilter will be pushed into the changes later on
|
// Map radiobutton choice and textfield answer onto tagfilter. That tagfilter will be pushed into the changes later on
|
||||||
|
@ -205,6 +205,7 @@ export class TagRendering extends UIElement {
|
||||||
// Prepare the actual input element -> pick an appropriate implementation
|
// Prepare the actual input element -> pick an appropriate implementation
|
||||||
let inputElement: UIInputElement<TagsFilter>;
|
let inputElement: UIInputElement<TagsFilter>;
|
||||||
|
|
||||||
|
|
||||||
if (this._freeform !== undefined && this._mapping !== undefined) {
|
if (this._freeform !== undefined && this._mapping !== undefined) {
|
||||||
// Radio buttons with 'other'
|
// Radio buttons with 'other'
|
||||||
inputElement = new UIRadioButtonWithOther(
|
inputElement = new UIRadioButtonWithOther(
|
||||||
|
@ -215,14 +216,15 @@ export class TagRendering extends UIElement {
|
||||||
pickString
|
pickString
|
||||||
);
|
);
|
||||||
this._questionElement = inputElement;
|
this._questionElement = inputElement;
|
||||||
} else if (this._mapping !== undefined) {
|
} else if (this._mapping !== [] && this._mapping.length > 0) {
|
||||||
// This is a classic radio selection element
|
// This is a classic radio selection element
|
||||||
inputElement = new UIRadioButton(new UIEventSource(choices), pickChoice)
|
inputElement = new UIRadioButton(new UIEventSource(choices), pickChoice, false)
|
||||||
this._questionElement = inputElement;
|
this._questionElement = inputElement;
|
||||||
} else if (this._freeform !== undefined) {
|
} else if (this._freeform !== undefined) {
|
||||||
this._textField = new TextField(new UIEventSource<string>(this._freeform.placeholder), pickString);
|
this._textField = new TextField(new UIEventSource<string>(this._freeform.placeholder), pickString);
|
||||||
inputElement = this._textField;
|
inputElement = this._textField;
|
||||||
this._questionElement = new FixedUiElement(this._freeform.template.replace("$$$", inputElement.Render()))
|
this._questionElement = new FixedUiElement(
|
||||||
|
"<div>" + this._freeform.template.replace("$$$", inputElement.Render()) + "</div>")
|
||||||
} else {
|
} else {
|
||||||
throw "Invalid questionRendering, expected at least choices or a freeform"
|
throw "Invalid questionRendering, expected at least choices or a freeform"
|
||||||
}
|
}
|
||||||
|
@ -239,6 +241,7 @@ export class TagRendering extends UIElement {
|
||||||
const cancel = () => {
|
const cancel = () => {
|
||||||
self._questionSkipped.setData(true);
|
self._questionSkipped.setData(true);
|
||||||
self._editMode.setData(false);
|
self._editMode.setData(false);
|
||||||
|
self._source.ping(); // Send a ping upstream to render the next question
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup the save button and it's action
|
// Setup the save button and it's action
|
||||||
|
@ -357,7 +360,7 @@ export class TagRendering extends UIElement {
|
||||||
|
|
||||||
|
|
||||||
return "<div class='question'>" +
|
return "<div class='question'>" +
|
||||||
this._question +
|
"<span class='question-text'>" + this._question + "</span>" +
|
||||||
(this._question !== "" ? "<br/>" : "") +
|
(this._question !== "" ? "<br/>" : "") +
|
||||||
this._questionElement.Render() +
|
this._questionElement.Render() +
|
||||||
this._skipButton.Render() +
|
this._skipButton.Render() +
|
||||||
|
|
|
@ -74,10 +74,12 @@ export class UIRadioButton<T> extends UIInputElement<T> {
|
||||||
if (this.SelectedElementIndex.data == null) {
|
if (this.SelectedElementIndex.data == null) {
|
||||||
if (this._selectFirstAsDefault) {
|
if (this._selectFirstAsDefault) {
|
||||||
const el = document.getElementById(this.IdFor(0));
|
const el = document.getElementById(this.IdFor(0));
|
||||||
|
if (el) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
el.checked = true;
|
el.checked = true;
|
||||||
checkButtons();
|
checkButtons();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// We check that what is selected matches the previous rendering
|
// We check that what is selected matches the previous rendering
|
||||||
|
|
|
@ -8,6 +8,10 @@ body {
|
||||||
font-family: 'Helvetica Neue', Arial, sans-serif;
|
font-family: 'Helvetica Neue', Arial, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
form {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
#leafletDiv {
|
#leafletDiv {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
@ -670,6 +674,11 @@ body {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.question-text{
|
||||||
|
font-size: larger;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
.answer {
|
.answer {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin: 0.1em;
|
margin: 0.1em;
|
||||||
|
|
4
index.ts
4
index.ts
|
@ -38,7 +38,7 @@ if (location.hostname === "localhost" || location.hostname === "127.0.0.1") {
|
||||||
// ----------------- SELECT THE RIGHT QUESTSET -----------------
|
// ----------------- SELECT THE RIGHT QUESTSET -----------------
|
||||||
|
|
||||||
|
|
||||||
let defaultQuest = "groen"
|
let defaultQuest = "buurtnatuur"
|
||||||
if (window.location.search) {
|
if (window.location.search) {
|
||||||
const params = window.location.search.substr(1).split("&");
|
const params = window.location.search.substr(1).split("&");
|
||||||
const paramDict: any = {};
|
const paramDict: any = {};
|
||||||
|
@ -88,7 +88,7 @@ const saveTimeout = 30000; // After this many milliseconds without changes, save
|
||||||
const allElements = new ElementStorage();
|
const allElements = new ElementStorage();
|
||||||
const osmConnection = new OsmConnection(dryRun);
|
const osmConnection = new OsmConnection(dryRun);
|
||||||
const changes = new Changes(
|
const changes = new Changes(
|
||||||
"Beantwoorden van vragen met MapComplete voor vragenset #" + questSetToRender.name,
|
"Beantwoorden van vragen met #MapComplete voor vragenset #" + questSetToRender.name,
|
||||||
osmConnection, allElements);
|
osmConnection, allElements);
|
||||||
const bm = new Basemap("leafletDiv", locationControl, new VariableUiElement(
|
const bm = new Basemap("leafletDiv", locationControl, new VariableUiElement(
|
||||||
locationControl.map((location) => {
|
locationControl.map((location) => {
|
||||||
|
|
6
test.ts
6
test.ts
|
@ -7,9 +7,3 @@ import {OsmLink} from "./Customizations/Questions/OsmLink";
|
||||||
import {ConfirmDialog} from "./UI/ConfirmDialog";
|
import {ConfirmDialog} from "./UI/ConfirmDialog";
|
||||||
import {Imgur} from "./Logic/Imgur";
|
import {Imgur} from "./Logic/Imgur";
|
||||||
|
|
||||||
console.log("Hello world")
|
|
||||||
|
|
||||||
Imgur.getDescriptionOfImage("https://i.imgur.com/pJfQYsj.jpg",
|
|
||||||
(info) => {
|
|
||||||
console.log(info)
|
|
||||||
})
|
|
Loading…
Reference in a new issue