Small fixes
This commit is contained in:
parent
f548ddea84
commit
e3e6566c12
9 changed files with 91 additions and 42 deletions
|
@ -14,9 +14,10 @@ export class AllKnownLayouts {
|
|||
new Groen(),
|
||||
new GRB(),
|
||||
new BikePumpsLayout(),
|
||||
new Bookcases()
|
||||
/*new Toilets(),
|
||||
new Statues(),
|
||||
new Bookcases()*/
|
||||
*/
|
||||
];
|
||||
const allSets = {};
|
||||
for (const layout of layouts) {
|
||||
|
|
|
@ -3,6 +3,7 @@ import L from "leaflet";
|
|||
import {Tag} from "../../Logic/TagsFilter";
|
||||
import {QuestionDefinition} from "../../Logic/Question";
|
||||
import {TagRenderingOptions} from "../TagRendering";
|
||||
import {NameInline} from "../Questions/NameInline";
|
||||
|
||||
export class Bookcases extends LayerDefinition {
|
||||
|
||||
|
@ -15,16 +16,33 @@ export class Bookcases extends LayerDefinition {
|
|||
this.overpassFilter = new Tag("amenity", "public_bookcase");
|
||||
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.textQuestion("Hoeveel boeken kunnen er in?", "capacity", 15),
|
||||
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),
|
||||
|
||||
|
||||
]
|
||||
;
|
||||
*/
|
||||
|
||||
this.style = function (tags) {
|
||||
return {
|
||||
|
@ -36,6 +54,7 @@ export class Bookcases extends LayerDefinition {
|
|||
};
|
||||
}
|
||||
|
||||
/*
|
||||
this.elementsToShow = [
|
||||
|
||||
|
||||
|
@ -58,7 +77,7 @@ export class Bookcases extends LayerDefinition {
|
|||
|
||||
new TagMappingOptions({key: "description", template: "Extra beschrijving: <br /> <p>{description}</p>"}),
|
||||
]
|
||||
;
|
||||
;*/
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -22,7 +22,29 @@ export class Park extends LayerDefinition {
|
|||
this.minzoom = 13;
|
||||
this.style = this.generateStyleFunction();
|
||||
this.title = new NameInline("park");
|
||||
this.elementsToShow = [new NameQuestion()];
|
||||
this.elementsToShow = [new NameQuestion(),
|
||||
new TagRenderingOptions({
|
||||
question: "Is dit park publiek toegankelijk?",
|
||||
mappings: [
|
||||
{k: new Tag("access", "yes"), txt: "Publiek toegankelijk"},
|
||||
{k: new Tag("access", ""), txt: "Publiek toegankelijk"},
|
||||
{k: new Tag("access", "no"), txt: "Niet publiek toegankelijk"},
|
||||
{k: new Tag("access", "guided"), txt: "Enkel met een gids of tijdens activiteiten"},
|
||||
]
|
||||
}),
|
||||
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"
|
||||
}]
|
||||
})
|
||||
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ import {Layout} from "../Layout";
|
|||
export class Groen extends Layout {
|
||||
|
||||
constructor() {
|
||||
super("groen",
|
||||
super("buurtnatuur",
|
||||
"Buurtnatuur",
|
||||
[new NatureReserves(), new Park(), new Bos()],
|
||||
10,
|
||||
|
|
|
@ -73,7 +73,7 @@ export class TagRenderingOptions {
|
|||
const tagsKV = TagUtils.proprtiesToKV(tags);
|
||||
|
||||
for (const oneOnOneElement of this.options.mappings) {
|
||||
if (oneOnOneElement.k.matches(tagsKV)) {
|
||||
if (oneOnOneElement.k === null || oneOnOneElement.k.matches(tagsKV)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -148,9 +148,10 @@ export class TagRendering extends UIElement {
|
|||
this.elementPriority = options.priority ?? 0;
|
||||
|
||||
// Prepare the choices for the Radio buttons
|
||||
let i = 0;
|
||||
const choices: UIElement[] = [];
|
||||
|
||||
const usedChoices: string [] = [];
|
||||
|
||||
for (const choice of options.mappings ?? []) {
|
||||
if (choice.k === null) {
|
||||
this._mapping.push(choice);
|
||||
|
@ -168,9 +169,15 @@ export class TagRendering extends UIElement {
|
|||
}
|
||||
|
||||
|
||||
choices.push(new FixedUiElement(choiceSubbed.txt));
|
||||
const txt = choiceSubbed.txt
|
||||
// Choices is what is shown in the radio buttons
|
||||
if (usedChoices.indexOf(txt) < 0) {
|
||||
|
||||
choices.push(new FixedUiElement(txt));
|
||||
usedChoices.push(txt);
|
||||
// This is used to convert the radio button index into tags needed to add
|
||||
this._mapping.push(choiceSubbed);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
// Map radiobutton choice and textfield answer onto tagfilter. That tagfilter will be pushed into the changes later on
|
||||
|
@ -200,6 +207,7 @@ export class TagRendering extends UIElement {
|
|||
// Prepare the actual input element -> pick an appropriate implementation
|
||||
let inputElement: UIInputElement<TagsFilter>;
|
||||
|
||||
|
||||
if (this._freeform !== undefined && this._mapping !== undefined) {
|
||||
// Radio buttons with 'other'
|
||||
inputElement = new UIRadioButtonWithOther(
|
||||
|
@ -210,14 +218,15 @@ export class TagRendering extends UIElement {
|
|||
pickString
|
||||
);
|
||||
this._questionElement = inputElement;
|
||||
} else if (this._mapping !== undefined) {
|
||||
} else if (this._mapping !== [] && this._mapping.length > 0) {
|
||||
// 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;
|
||||
} else if (this._freeform !== undefined) {
|
||||
this._textField = new TextField(new UIEventSource<string>(this._freeform.placeholder), pickString);
|
||||
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 {
|
||||
throw "Invalid questionRendering, expected at least choices or a freeform"
|
||||
}
|
||||
|
@ -234,6 +243,7 @@ export class TagRendering extends UIElement {
|
|||
const cancel = () => {
|
||||
self._questionSkipped.setData(true);
|
||||
self._editMode.setData(false);
|
||||
self._source.ping(); // Send a ping upstream to render the next question
|
||||
}
|
||||
|
||||
// Setup the save button and it's action
|
||||
|
@ -352,7 +362,7 @@ export class TagRendering extends UIElement {
|
|||
|
||||
|
||||
return "<div class='question'>" +
|
||||
this._question +
|
||||
"<span class='question-text'>" + this._question + "</span>" +
|
||||
(this._question !== "" ? "<br/>" : "") +
|
||||
this._questionElement.Render() +
|
||||
this._skipButton.Render() +
|
||||
|
|
|
@ -74,10 +74,12 @@ export class UIRadioButton<T> extends UIInputElement<T> {
|
|||
if (this.SelectedElementIndex.data == null) {
|
||||
if (this._selectFirstAsDefault) {
|
||||
const el = document.getElementById(this.IdFor(0));
|
||||
if (el) {
|
||||
// @ts-ignore
|
||||
el.checked = true;
|
||||
checkButtons();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
// We check that what is selected matches the previous rendering
|
||||
|
|
|
@ -8,6 +8,10 @@ body {
|
|||
font-family: 'Helvetica Neue', Arial, sans-serif;
|
||||
}
|
||||
|
||||
form {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
#leafletDiv {
|
||||
height: 100%;
|
||||
}
|
||||
|
@ -670,6 +674,11 @@ body {
|
|||
|
||||
}
|
||||
|
||||
.question-text{
|
||||
font-size: larger;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.answer {
|
||||
display: inline-block;
|
||||
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 -----------------
|
||||
|
||||
|
||||
let defaultQuest = "groen"
|
||||
let defaultQuest = "buurtnatuur"
|
||||
if (window.location.search) {
|
||||
const params = window.location.search.substr(1).split("&");
|
||||
const paramDict: any = {};
|
||||
|
@ -88,7 +88,7 @@ const saveTimeout = 30000; // After this many milliseconds without changes, save
|
|||
const allElements = new ElementStorage();
|
||||
const osmConnection = new OsmConnection(dryRun);
|
||||
const changes = new Changes(
|
||||
"Beantwoorden van vragen met MapComplete voor vragenset #" + questSetToRender.name,
|
||||
"Beantwoorden van vragen met #MapComplete voor vragenset #" + questSetToRender.name,
|
||||
osmConnection, allElements);
|
||||
const bm = new Basemap("leafletDiv", locationControl, new VariableUiElement(
|
||||
locationControl.map((location) => {
|
||||
|
|
14
test.ts
14
test.ts
|
@ -5,17 +5,3 @@ import {ElementStorage} from "./Logic/ElementStorage";
|
|||
import {WikipediaLink} from "./Customizations/Questions/WikipediaLink";
|
||||
import {OsmLink} from "./Customizations/Questions/OsmLink";
|
||||
|
||||
const tags = {name: "Test",
|
||||
wikipedia: "nl:Pieter",
|
||||
id: "node/-1"};
|
||||
const tagsES = new UIEventSource(tags);
|
||||
|
||||
const login = new OsmConnection(true);
|
||||
|
||||
const allElements = new ElementStorage();
|
||||
allElements.addElementById(tags.id, tagsES);
|
||||
|
||||
const changes = new Changes("Test", login, allElements)
|
||||
|
||||
|
||||
new OsmLink(tagsES, changes).AttachTo("maindiv");
|
Loading…
Reference in a new issue