Add Open Toilet Map, fix #34
This commit is contained in:
parent
2df565dc50
commit
a55767c1e9
11 changed files with 188 additions and 188 deletions
|
@ -15,6 +15,7 @@ import {GhostBikes} from "./Layouts/GhostBikes";
|
|||
import {CustomLayoutFromJSON} from "./JSON/CustomLayoutFromJSON";
|
||||
import * as bookcases from "../assets/themes/bookcases/Bookcases.json";
|
||||
import * as aed from "../assets/themes/aed/aed.json";
|
||||
import * as toilets from "../assets/themes/toilets/toilets.json";
|
||||
|
||||
export class AllKnownLayouts {
|
||||
|
||||
|
@ -28,6 +29,7 @@ export class AllKnownLayouts {
|
|||
new GhostBikes(),
|
||||
CustomLayoutFromJSON.LayoutFromJSON(bookcases),
|
||||
CustomLayoutFromJSON.LayoutFromJSON(aed),
|
||||
CustomLayoutFromJSON.LayoutFromJSON(toilets),
|
||||
|
||||
new MetaMap(),
|
||||
new StreetWidth(),
|
||||
|
|
|
@ -1,84 +0,0 @@
|
|||
import {LayerDefinition} from "../LayerDefinition";
|
||||
import {FixedUiElement} from "../../UI/Base/FixedUiElement";
|
||||
import L from "leaflet";
|
||||
import {Tag} from "../../Logic/TagsFilter";
|
||||
|
||||
export class Toilets extends LayerDefinition{
|
||||
|
||||
constructor() {
|
||||
super("toilets");
|
||||
|
||||
this.name="toilet";
|
||||
this.newElementTags = [new Tag( "amenity", "toilets")];
|
||||
this.icon = "./assets/toilets.svg";
|
||||
this.overpassFilter = new Tag("amenity","toilets");
|
||||
this.minzoom = 13;
|
||||
this.questions = [Quests.hasFee,
|
||||
Quests.toiletsWheelChairs,
|
||||
Quests.toiletsChangingTable,
|
||||
Quests.toiletsChangingTableLocation,
|
||||
Quests.toiletsPosition];
|
||||
|
||||
this.style = function(tags){
|
||||
if(tags.wheelchair == "yes"){
|
||||
|
||||
return {icon : new L.icon({
|
||||
iconUrl: "assets/wheelchair.svg",
|
||||
iconSize: [40, 40]
|
||||
})};
|
||||
}
|
||||
return {icon : new L.icon({
|
||||
iconUrl: "assets/toilets.svg",
|
||||
iconSize: [40, 40]
|
||||
})};
|
||||
}
|
||||
|
||||
this.elementsToShow = [
|
||||
new FixedUiElement("Toiletten"),
|
||||
|
||||
new TagMappingOptions({
|
||||
key: "access",
|
||||
mapping: {
|
||||
yes: "Toegankelijk",
|
||||
no: "Niet toegankelijk",
|
||||
private: "Niet toegankelijk",
|
||||
customers: "Enkel voor klanten",
|
||||
}
|
||||
}),
|
||||
|
||||
new TagMappingOptions({
|
||||
key: "fee",
|
||||
mapping: {
|
||||
yes: "Betalend",
|
||||
no: "Gratis",
|
||||
["0"]: "Gratis"
|
||||
},
|
||||
template: "Betalend, men vraagt {fee}"
|
||||
}),
|
||||
|
||||
new TagMappingOptions({
|
||||
key: "toilets:position",
|
||||
mapping: {
|
||||
seated: 'Gewone zittoiletten',
|
||||
urinal: 'Een enkele urinoir',
|
||||
urinals: 'Urinoirs',
|
||||
['urinals;seated']: "Urinoirs en gewone toiletten",
|
||||
['seated;urinals']: "Urinoirs en gewone toiletten",
|
||||
|
||||
}
|
||||
}),
|
||||
|
||||
new TagMappingOptions({
|
||||
key: "wheelchair",
|
||||
mapping: {
|
||||
yes: "Rolstoeltoegankelijk",
|
||||
no: "Niet Rolstoeltoegankelijk",
|
||||
limited: "Beperkt rolstoeltoegankelijk",
|
||||
|
||||
}
|
||||
}),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
import {Layout} from "../Layout";
|
||||
import * as Layer from "../Layers/Toilets";
|
||||
|
||||
export class Toilets extends Layout{
|
||||
constructor() {
|
||||
super( "toilets",
|
||||
["en"],
|
||||
"Open Toilet Map",
|
||||
[new Layer.Toilets()],
|
||||
12,
|
||||
51.2,
|
||||
3.2,
|
||||
|
||||
|
||||
" <h3>Open Toilet Map</h3>\n" +
|
||||
"\n" +
|
||||
"<p>Help us to create the most complete map about <i>all</i> the toilets in the world, based on openStreetMap." +
|
||||
"One can answer questions here, which help users all over the world to find an accessible toilet, close to them.</p>"
|
||||
,
|
||||
" <p>Start by <a href=\"https://www.openstreetmap.org/user/new\" target=\"_blank\">creating an account\n" +
|
||||
" </a> or by " +
|
||||
" <span onclick=\"authOsm()\" class=\"activate-osm-authentication\">logging in</span>.</p>",
|
||||
"Start by clicking a pin and answering the questions");
|
||||
}
|
||||
}
|
4
State.ts
4
State.ts
|
@ -24,7 +24,7 @@ export class State {
|
|||
// The singleton of the global state
|
||||
public static state: State;
|
||||
|
||||
public static vNumber = "0.0.5b";
|
||||
public static vNumber = "0.0.5c";
|
||||
|
||||
public static runningFromConsole: boolean = false;
|
||||
|
||||
|
@ -47,7 +47,7 @@ export class State {
|
|||
*/
|
||||
public bm;
|
||||
/**
|
||||
The user crednetials
|
||||
The user credentials
|
||||
*/
|
||||
public osmConnection: OsmConnection;
|
||||
|
||||
|
|
|
@ -44,14 +44,17 @@ export class MoreScreen extends UIElement {
|
|||
const currentLocation = State.state.locationControl.data;
|
||||
const linkText =
|
||||
`https://pietervdvn.github.io/MapComplete/${layout.name}.html?z=${currentLocation.zoom}&lat=${currentLocation.lat}&lon=${currentLocation.lon}`
|
||||
let description = Translations.W(layout.description);
|
||||
if(description !== undefined){
|
||||
description = new Combine(["<br/>", description]);
|
||||
}
|
||||
const link =
|
||||
new SubtleButton(layout.icon,
|
||||
new Combine([
|
||||
"<b>",
|
||||
Translations.W(layout.title),
|
||||
"</b>",
|
||||
"<br/>",
|
||||
Translations.W(layout.description),
|
||||
description ?? "",
|
||||
]), {url: linkText, newTab: false});
|
||||
|
||||
els.push(link)
|
||||
|
|
|
@ -1,73 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="0 0 64 64"
|
||||
height="64"
|
||||
width="64"
|
||||
id="svg109"
|
||||
version="1.1"
|
||||
sodipodi:docname="Public_bookcase-14.svg"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1001"
|
||||
id="namedview6"
|
||||
showgrid="false"
|
||||
inkscape:zoom="8.4285714"
|
||||
inkscape:cx="21.124627"
|
||||
inkscape:cy="25.918314"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer2" />
|
||||
<metadata
|
||||
id="metadata115">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs113" />
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:label="background">
|
||||
<ellipse
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.49738699;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path819"
|
||||
cx="31.967007"
|
||||
cy="32.109043"
|
||||
rx="32.00938"
|
||||
ry="31.946436" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="icon">
|
||||
<path
|
||||
id="path4176"
|
||||
d="M 32.123859,10.440678 8.6779661,17.139504 v 3.349413 L 32.123859,13.79009 55.569753,20.488917 v -3.349413 z m -11.59865,11.964995 c -0.522431,0.02077 -1.041409,0.124297 -1.556954,0.320538 v 20.835706 c 0,0 8.38755,-0.322013 10.525792,7.817477 V 29.497007 c -1.631616,-3.400613 -5.311804,-7.237191 -8.968838,-7.091334 z m 8.968838,28.973731 C 24.066203,47.228261 16.331902,46.172115 16.331902,46.172115 V 26.376556 l -2.629816,-1.046692 v 23.445893 l 15.791961,5.207293 h 5.259628 L 50.545632,48.775757 V 25.329864 l -2.629812,1.046692 v 20.835709 l -13.162145,4.167139 c -1.754454,-0.663351 -3.795938,-0.545319 -5.259628,0 z M 45.279464,22.726221 C 40.03579,22.448689 33.986193,25.566152 30.808953,28.247518 v 22.045945 c 2.933724,-2.408355 8.190227,-5.573982 14.470511,-6.208191 z"
|
||||
style="fill:#734a08;fill-opacity:1;stroke:none;stroke-width:3.34941339"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.8 KiB |
169
assets/themes/toilets/toilets.json
Normal file
169
assets/themes/toilets/toilets.json
Normal file
|
@ -0,0 +1,169 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"id": "Toilet",
|
||||
"title": {
|
||||
"key": "*",
|
||||
"render": "Toilet"
|
||||
},
|
||||
"icon": {
|
||||
"key": "*",
|
||||
"render": "./assets/themes/toilets/toilets.svg",
|
||||
"mappings": [
|
||||
{
|
||||
"then": "./assets/themes/toilets/wheelchair.svg",
|
||||
"if": "wheelchair=yes"
|
||||
}
|
||||
]
|
||||
},
|
||||
"color": {
|
||||
"key": "*",
|
||||
"render": "#0000ff"
|
||||
},
|
||||
"description": "A toilet",
|
||||
"minzoom": "14",
|
||||
"wayHandling": 2,
|
||||
"presets": [
|
||||
{
|
||||
"title": "Toilet",
|
||||
"tags": "amenity=toilets",
|
||||
"description": "Only add public toilets"
|
||||
}
|
||||
],
|
||||
"tagRenderings": [
|
||||
{
|
||||
"key": "access",
|
||||
"mappings": [
|
||||
{
|
||||
"then": "Public access",
|
||||
"if": "access=yes"
|
||||
},
|
||||
{
|
||||
"then": "Only access to customers",
|
||||
"if": "access=customers"
|
||||
},
|
||||
{
|
||||
"if": "access=no",
|
||||
"then": "Not accessible"
|
||||
},
|
||||
{
|
||||
"then": "Accessible, but one has to ask a key to enter",
|
||||
"if": "access=key"
|
||||
}
|
||||
],
|
||||
"question": "Are these toilets publicly accessible?",
|
||||
"type": "text",
|
||||
"addExtraTags": "fixme=the tag access was filled out by the user and might need refinement",
|
||||
"render": "Access is {access}"
|
||||
},
|
||||
{
|
||||
"mappings": [
|
||||
{
|
||||
"then": "These are paid toilets",
|
||||
"if": "fee=yes"
|
||||
},
|
||||
{
|
||||
"if": "fee=no",
|
||||
"then": "Free to use"
|
||||
}
|
||||
],
|
||||
"type": "text",
|
||||
"question": "Are these toilets free to use?"
|
||||
},
|
||||
{
|
||||
"key": "charge",
|
||||
"mappings": [],
|
||||
"question": "How much does one have to pay for these toilets?",
|
||||
"type": "string",
|
||||
"render": "The fee is {charge}",
|
||||
"condition": "fee=yes"
|
||||
},
|
||||
{
|
||||
"mappings": [
|
||||
{
|
||||
"then": "There is a dedicated toilet for wheelchair users",
|
||||
"if": "wheelchair=yes"
|
||||
},
|
||||
{
|
||||
"if": "wheelchair=no",
|
||||
"then": "No wheelchair access"
|
||||
}
|
||||
],
|
||||
"type": "text",
|
||||
"question": "Is there a dedicated toilet for wheelchair users"
|
||||
},
|
||||
{
|
||||
"mappings": [
|
||||
{
|
||||
"if": "toilets:position=seated",
|
||||
"then": "There are only seated toilets"
|
||||
},
|
||||
{
|
||||
"if": "toilets:position=urinals",
|
||||
"then": "There are only urinals here"
|
||||
},
|
||||
{
|
||||
"if": "toilets:position=squat",
|
||||
"then": "There are only squat toilets here"
|
||||
},
|
||||
{
|
||||
"if": "toilets:position=seated;urinals",
|
||||
"then": "Both seated toilets and urinals are available here"
|
||||
}
|
||||
],
|
||||
"question": "Which kind of toilets are this?",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"mappings": [
|
||||
{
|
||||
"then": "A changing table is available",
|
||||
"if": "changing_table=yes"
|
||||
},
|
||||
{
|
||||
"if": "changing_table=no",
|
||||
"then": "No changing table is available"
|
||||
}
|
||||
],
|
||||
"question": "Is a changing table (to change diapers) available?",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"key": "changing_table:location",
|
||||
"mappings": [
|
||||
{
|
||||
"then": "The changing table is in the toilet for women. ",
|
||||
"if": "changing_table:location=female_toilet"
|
||||
},
|
||||
{
|
||||
"then": "The changing table is in the toilet for men. ",
|
||||
"if": "changing_table:location=male_toilet"
|
||||
},
|
||||
{
|
||||
"if": "changing_table:location=wheelchair_toilet",
|
||||
"then": "The changing table is in the toilet for wheelchair users. "
|
||||
},
|
||||
{
|
||||
"if": "changing_table:location=dedicated_room",
|
||||
"then": "The changing table is in a dedicated room. "
|
||||
}
|
||||
],
|
||||
"type": "text",
|
||||
"question": "Where is the changing table located?",
|
||||
"condition": "changing_table=yes",
|
||||
"render": "The changing table is located at {changing_table:location}"
|
||||
}
|
||||
],
|
||||
"overpassTags": "amenity=toilets"
|
||||
}
|
||||
],
|
||||
"startLat": "51.2095",
|
||||
"startZoom": "12",
|
||||
"maintainer": "Pieter Vander Vennet",
|
||||
"title": "Open Toilet Map",
|
||||
"startLon": "3.2222",
|
||||
"icon": "./assets/themes/toilets/toilets.svg",
|
||||
"description": "A map of public toilets",
|
||||
"language": "en",
|
||||
"name": "toilets"
|
||||
}
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
@ -7,6 +7,8 @@ import {LocalStorageSource} from "./Logic/Web/LocalStorageSource";
|
|||
import {createHash} from "crypto";
|
||||
import Combine from "./UI/Base/Combine";
|
||||
import {Button} from "./UI/Base/Button";
|
||||
import {FixedUiElement} from "./UI/Base/FixedUiElement";
|
||||
import {State} from "./State";
|
||||
|
||||
const connection = new OsmConnection(true, new UIEventSource<string>(undefined), false);
|
||||
connection.AttemptLogin();
|
||||
|
@ -16,7 +18,7 @@ const localStorage = LocalStorageSource.Get("last-custom-save");
|
|||
console.log("hash", hash)
|
||||
console.log("Saved: ", localStorage.data)
|
||||
|
||||
if (hash === undefined || hash === "") {
|
||||
if (hash === undefined || hash === "" && localStorage.data !== undefined) {
|
||||
const previous = localStorage.data.split("#");
|
||||
hash = previous[1];
|
||||
console.log("Using previously saved data ", hash)
|
||||
|
@ -41,4 +43,9 @@ new Combine([
|
|||
themeGenerator.themeObject.data.maintainer = connection.userDetails.data.name;
|
||||
themeGenerator.themeObject.data.layers = [];
|
||||
themeGenerator.themeObject.ping();
|
||||
})]).AttachTo("preview");
|
||||
}),
|
||||
"<br/>",
|
||||
"Version: ",
|
||||
State.vNumber
|
||||
|
||||
]).AttachTo("preview");
|
||||
|
|
|
@ -1193,6 +1193,7 @@ form {
|
|||
border-right:1px solid gray;
|
||||
border-top: 1px solid gray;
|
||||
border-bottom: 1px solid lightgray;
|
||||
min-width: 4em;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue