Move some assets to the 'tagRenderings'-directory as they are only needed there, add 'smoking' question, add 'nightclubs' to 'pub_cafe'-layer
|
@ -99,7 +99,7 @@ class ValidateTheme extends DesugaringStep<LayoutConfigJson> {
|
|||
}
|
||||
if (image.match(/[a-z]*/)) {
|
||||
|
||||
if(Svg.All[image + ".svg"] !== undefined){
|
||||
if (Svg.All[image + ".svg"] !== undefined) {
|
||||
// This is a builtin img, e.g. 'checkmark' or 'crosshair'
|
||||
continue;// =>
|
||||
}
|
||||
|
@ -124,12 +124,12 @@ class ValidateTheme extends DesugaringStep<LayoutConfigJson> {
|
|||
|
||||
const w = parseInt(width);
|
||||
const h = parseInt(height)
|
||||
if(w < 370 || h < 370){
|
||||
const e : string = [
|
||||
if (w < 370 || h < 370) {
|
||||
const e: string = [
|
||||
`the icon for theme ${json.id} is too small. Please rescale the icon at ${json.icon}`,
|
||||
`Even though an SVG is 'infinitely scaleable', the icon should be dimensioned bigger. One of the build steps of the theme does convert the image to a PNG (to serve as PWA-icon) and having a small dimension will cause blurry images.`,
|
||||
` Width = ${width} height = ${height}; we recommend a size of at least 500px * 500px and to use a square aspect ratio.`,
|
||||
].join("\n");
|
||||
].join("\n");
|
||||
(json.hideFromOverview ? warnings : errors).push(e)
|
||||
}
|
||||
|
||||
|
@ -186,7 +186,7 @@ export class ValidateThemeAndLayers extends Fuse<LayoutConfigJson> {
|
|||
constructor(knownImagePaths: Set<string>, path: string, isBuiltin: boolean, sharedTagRenderings: Map<string, any>) {
|
||||
super("Validates a theme and the contained layers",
|
||||
new ValidateTheme(knownImagePaths, path, isBuiltin, sharedTagRenderings),
|
||||
new On("layers", new Each(new ValidateLayer(undefined, false)))
|
||||
new On("layers", new Each(new ValidateLayer(undefined, false, knownImagePaths)))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -222,22 +222,22 @@ class OverrideShadowingCheck extends DesugaringStep<LayoutConfigJson> {
|
|||
|
||||
}
|
||||
|
||||
class MiscThemeChecks extends DesugaringStep<LayoutConfigJson>{
|
||||
class MiscThemeChecks extends DesugaringStep<LayoutConfigJson> {
|
||||
constructor() {
|
||||
super("Miscelleanous checks on the theme", [],"MiscThemesChecks");
|
||||
super("Miscelleanous checks on the theme", [], "MiscThemesChecks");
|
||||
}
|
||||
|
||||
convert(json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors?: string[]; warnings?: string[]; information?: string[] } {
|
||||
const warnings = []
|
||||
const errors = []
|
||||
if(json.id !== "personal" && (json.layers === undefined || json.layers.length === 0)){
|
||||
errors.push("The theme "+json.id+" has no 'layers' defined ("+context+")")
|
||||
if (json.id !== "personal" && (json.layers === undefined || json.layers.length === 0)) {
|
||||
errors.push("The theme " + json.id + " has no 'layers' defined (" + context + ")")
|
||||
}
|
||||
if(json.socialImage === ""){
|
||||
warnings.push("Social image for theme "+json.id+" is the emtpy string")
|
||||
if (json.socialImage === "") {
|
||||
warnings.push("Social image for theme " + json.id + " is the emtpy string")
|
||||
}
|
||||
return {
|
||||
result :json,
|
||||
result: json,
|
||||
warnings,
|
||||
errors
|
||||
};
|
||||
|
@ -258,6 +258,7 @@ export class PrevalidateTheme extends Fuse<LayoutConfigJson> {
|
|||
|
||||
export class DetectShadowedMappings extends DesugaringStep<QuestionableTagRenderingConfigJson> {
|
||||
private readonly _calculatedTagNames: string[];
|
||||
|
||||
constructor(layerConfig?: LayerConfigJson) {
|
||||
super("Checks that the mappings don't shadow each other", [], "DetectShadowedMappings");
|
||||
this._calculatedTagNames = DetectShadowedMappings.extractCalculatedTagNames(layerConfig);
|
||||
|
@ -268,9 +269,9 @@ export class DetectShadowedMappings extends DesugaringStep<QuestionableTagRender
|
|||
* DetectShadowedMappings.extractCalculatedTagNames({calculatedTags: ["_abc:=js()"]}) // => ["_abc"]
|
||||
* DetectShadowedMappings.extractCalculatedTagNames({calculatedTags: ["_abc=js()"]}) // => ["_abc"]
|
||||
*/
|
||||
private static extractCalculatedTagNames(layerConfig?: LayerConfigJson | {calculatedTags : string []}){
|
||||
private static extractCalculatedTagNames(layerConfig?: LayerConfigJson | { calculatedTags: string [] }) {
|
||||
return layerConfig?.calculatedTags?.map(ct => {
|
||||
if(ct.indexOf(':=') >= 0){
|
||||
if (ct.indexOf(':=') >= 0) {
|
||||
return ct.split(':=')[0]
|
||||
}
|
||||
return ct.split("=")[0]
|
||||
|
@ -319,20 +320,20 @@ export class DetectShadowedMappings extends DesugaringStep<QuestionableTagRender
|
|||
}
|
||||
const defaultProperties = {}
|
||||
for (const calculatedTagName of this._calculatedTagNames) {
|
||||
defaultProperties[calculatedTagName] = "some_calculated_tag_value_for_"+calculatedTagName
|
||||
defaultProperties[calculatedTagName] = "some_calculated_tag_value_for_" + calculatedTagName
|
||||
}
|
||||
const parsedConditions = json.mappings.map((m,i) => {
|
||||
const parsedConditions = json.mappings.map((m, i) => {
|
||||
const ctx = `${context}.mappings[${i}]`
|
||||
const ifTags = TagUtils.Tag(m.if, ctx);
|
||||
if(m.hideInAnswer !== undefined && m.hideInAnswer !== false && m.hideInAnswer !== true){
|
||||
let conditionTags = TagUtils.Tag( m.hideInAnswer)
|
||||
if (m.hideInAnswer !== undefined && m.hideInAnswer !== false && m.hideInAnswer !== true) {
|
||||
let conditionTags = TagUtils.Tag(m.hideInAnswer)
|
||||
// Merge the condition too!
|
||||
return new And([conditionTags, ifTags])
|
||||
}
|
||||
return ifTags
|
||||
})
|
||||
for (let i = 0; i < json.mappings.length; i++) {
|
||||
if(!parsedConditions[i].isUsableAsAnswer()){
|
||||
if (!parsedConditions[i].isUsableAsAnswer()) {
|
||||
// There is no straightforward way to convert this mapping.if into a properties-object, so we simply skip this one
|
||||
// Yes, it might be shadowed, but running this check is to difficult right now
|
||||
continue
|
||||
|
@ -372,8 +373,10 @@ export class DetectShadowedMappings extends DesugaringStep<QuestionableTagRender
|
|||
}
|
||||
|
||||
export class DetectMappingsWithImages extends DesugaringStep<TagRenderingConfigJson> {
|
||||
constructor() {
|
||||
private knownImagePaths: Set<string>;
|
||||
constructor(knownImagePaths: Set<string>) {
|
||||
super("Checks that 'then'clauses in mappings don't have images, but use 'icon' instead", [], "DetectMappingsWithImages");
|
||||
this.knownImagePaths = knownImagePaths;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -407,21 +410,29 @@ export class DetectMappingsWithImages extends DesugaringStep<TagRenderingConfigJ
|
|||
for (let i = 0; i < json.mappings.length; i++) {
|
||||
|
||||
const mapping = json.mappings[i]
|
||||
const ignore = mapping["#"]?.indexOf(ignoreToken) >=0
|
||||
const ignore = mapping["#"]?.indexOf(ignoreToken) >= 0
|
||||
const images = Utils.Dedup(Translations.T(mapping.then)?.ExtractImages() ?? [])
|
||||
const ctx = `${context}.mappings[${i}]`
|
||||
if (images.length > 0) {
|
||||
if(!ignore){
|
||||
if (!ignore) {
|
||||
errors.push(`${ctx}: A mapping has an image in the 'then'-clause. Remove the image there and use \`"icon": <your-image>\` instead. The images found are ${images.join(", ")}. (This check can be turned of by adding "#": "${ignoreToken}" in the mapping, but this is discouraged`)
|
||||
}else{
|
||||
} else {
|
||||
information.push(`${ctx}: Ignored image ${images.join(", ")} in 'then'-clause of a mapping as this check has been disabled`)
|
||||
|
||||
for (const image of images) {
|
||||
if (this.knownImagePaths !== undefined && !this.knownImagePaths.has(image)) {
|
||||
const ctx = context === undefined ? "" : ` in a layer defined in the theme ${context}`
|
||||
errors.push(`Image with path ${image} not found or not attributed; it is used in ${json.id}${ctx}`)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}else if (ignore){
|
||||
} else if (ignore) {
|
||||
warnings.push(`${ctx}: unused '${ignoreToken}' - please remove this`)
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
return {
|
||||
errors,
|
||||
warnings,
|
||||
information,
|
||||
|
@ -431,10 +442,10 @@ export class DetectMappingsWithImages extends DesugaringStep<TagRenderingConfigJ
|
|||
}
|
||||
|
||||
export class ValidateTagRenderings extends Fuse<TagRenderingConfigJson> {
|
||||
constructor(layerConfig: LayerConfigJson) {
|
||||
constructor(layerConfig?: LayerConfigJson, knownImagePaths?: Set<string>) {
|
||||
super("Various validation on tagRenderingConfigs",
|
||||
new DetectShadowedMappings( layerConfig),
|
||||
new DetectMappingsWithImages()
|
||||
new DetectShadowedMappings(layerConfig),
|
||||
new DetectMappingsWithImages(knownImagePaths)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -446,11 +457,13 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
|
|||
*/
|
||||
private readonly _path?: string;
|
||||
private readonly _isBuiltin: boolean;
|
||||
private knownImagePaths: Set<string>;
|
||||
|
||||
constructor(path: string, isBuiltin: boolean) {
|
||||
constructor(path: string, isBuiltin: boolean, knownImagePaths: Set<string>) {
|
||||
super("Doesn't change anything, but emits warnings and errors", [], "ValidateLayer");
|
||||
this._path = path;
|
||||
this._isBuiltin = isBuiltin;
|
||||
this.knownImagePaths = knownImagePaths
|
||||
}
|
||||
|
||||
convert(json: LayerConfigJson, context: string): { result: LayerConfigJson; errors: string[]; warnings?: string[], information?: string[] } {
|
||||
|
@ -475,10 +488,10 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
|
|||
|
||||
{
|
||||
// duplicate ids in tagrenderings check
|
||||
const duplicates = Utils.Dedup(Utils.Dupiclates( Utils.NoNull((json.tagRenderings ?? []).map(tr => tr["id"]))))
|
||||
.filter(dupl => dupl !== "questions")
|
||||
if(duplicates.length > 0){
|
||||
errors.push("At "+context+": some tagrenderings have a duplicate id: "+duplicates.join(", "))
|
||||
const duplicates = Utils.Dedup(Utils.Dupiclates(Utils.NoNull((json.tagRenderings ?? []).map(tr => tr["id"]))))
|
||||
.filter(dupl => dupl !== "questions")
|
||||
if (duplicates.length > 0) {
|
||||
errors.push("At " + context + ": some tagrenderings have a duplicate id: " + duplicates.join(", "))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -538,10 +551,10 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
|
|||
}
|
||||
}
|
||||
if (json.tagRenderings !== undefined) {
|
||||
const r = new On("tagRenderings", new Each(new ValidateTagRenderings(json))).convert(json, context)
|
||||
warnings.push(...(r.warnings??[]))
|
||||
errors.push(...(r.errors??[]))
|
||||
information.push(...(r.information??[]))
|
||||
const r = new On("tagRenderings", new Each(new ValidateTagRenderings(json, this.knownImagePaths))).convert(json, context)
|
||||
warnings.push(...(r.warnings ?? []))
|
||||
errors.push(...(r.errors ?? []))
|
||||
information.push(...(r.information ?? []))
|
||||
}
|
||||
|
||||
if (json.presets !== undefined) {
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
{
|
||||
"id": "cafe_pub",
|
||||
"name": {
|
||||
"nl": "Cafés",
|
||||
"en": "Cafés and pubs",
|
||||
"nl": "Cafés en nachtclubs",
|
||||
"en": "Cafés, pubs and nightclubs",
|
||||
"de": "Cafés und Kneipen",
|
||||
"fr": "Cafés et pubs",
|
||||
"zh_Hant": "咖啡廳與酒吧",
|
||||
|
@ -16,7 +16,8 @@
|
|||
"amenity=bar",
|
||||
"amenity=pub",
|
||||
"amenity=cafe",
|
||||
"amenity=biergarten"
|
||||
"amenity=biergarten",
|
||||
"amenity=nightclub"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
@ -94,6 +95,22 @@
|
|||
"preciseInput": {
|
||||
"preferredBackground": "map"
|
||||
}
|
||||
},
|
||||
{
|
||||
"tags": [
|
||||
"amenity=nightclub"
|
||||
],
|
||||
"title": {
|
||||
"en": "a nightclub or disco",
|
||||
"nl": "een nachtclub of disco"
|
||||
},
|
||||
"description": {
|
||||
"en": "A <b>nightclub</b> or disco with a focus on dancing, music by a DJ with accompanying light show and a bar to get (alcoholic) drinks",
|
||||
"nl": "Een <b>nachtclub</b> met dansvloer, DJ met bijhorende lichteffecten en bar waar men (alcoholische) dranken kan nuttigen"
|
||||
},
|
||||
"preciseInput": {
|
||||
"preferredBackground": "map"
|
||||
}
|
||||
}
|
||||
],
|
||||
"title": {
|
||||
|
@ -137,8 +154,8 @@
|
|||
"es": "¿Cual es el nombre de este pub?"
|
||||
},
|
||||
"render": {
|
||||
"nl": "De naam van dit café is {name}",
|
||||
"en": "This pub is named {name}",
|
||||
"nl": "De naam van deze zaak is {name}",
|
||||
"en": "This place is named {name}",
|
||||
"de": "Diese Kneipe heißt {name}",
|
||||
"fr": "Ce pub se nomme {name}",
|
||||
"hu": "A kocsma neve: {name}",
|
||||
|
@ -209,6 +226,14 @@
|
|||
"es": "Un espacio abierto donde se sirve cerveza, típico de Alemania"
|
||||
},
|
||||
"hideInAnswer": "_country!=de"
|
||||
},
|
||||
{
|
||||
"if": "amenity=nightclub",
|
||||
"then": {
|
||||
"en": "This is a <b>nightclub</b> or disco with a focus on dancing, music by a DJ with accompanying light show and a bar to get (alcoholic) drinks",
|
||||
"nl": "Dit is een <b>nachtclub</b> met dansvloer, DJ met bijhorende lichteffecten en bar waar men (alcoholische) dranken kan nuttigen"
|
||||
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "Classification"
|
||||
|
@ -219,6 +244,7 @@
|
|||
"phone",
|
||||
"payment-options",
|
||||
"wheelchair-access",
|
||||
"smoking",
|
||||
"service:electricity",
|
||||
"dog-access"
|
||||
],
|
||||
|
@ -271,6 +297,10 @@
|
|||
{
|
||||
"if": "amenity=cafe",
|
||||
"then": "circle:white;./assets/layers/cafe_pub/cafe.svg"
|
||||
},
|
||||
{
|
||||
"if": "amenity=nightclub",
|
||||
"then": "circle:white;./assets/layers/cafe_pub/nightclub.svg"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -295,9 +325,9 @@
|
|||
}
|
||||
],
|
||||
"description": {
|
||||
"en": "A layer showing cafés and pubs where one can gather around a drink. The layer asks for some relevant questions",
|
||||
"en": "A layer showing cafés, pubs, biergartens and nightclubs where one can gather around a drink. The layer asks for some relevant questions",
|
||||
"hu": "Egy olyan réteg, amely kávézókat és kocsmákat jelenít meg, ahol össze lehet gyűlni egy ital köré. A réteg néhány lényeges kérdést tesz fel",
|
||||
"nl": "Een laag die kroegen en koffiehuizen toont waar je iets kunt drinken. De laag zal je enkele vragen stellen",
|
||||
"nl": "Een laag die kroegen, koffiehuizen, biergartens en nachtclubs toont waar je iets kunt drinken. De laag zal je enkele vragen stellen",
|
||||
"de": "Eine Ebene mit Cafés und Kneipen, in denen man sich auf ein Getränk treffen kann. Die Ebene fragt nach einigen relevanten Eigenschaften",
|
||||
"es": "Una capa que muestra cafeterías y bares donde uno se puede reunir con una bebida. La capa hace algunas preguntas relevantes",
|
||||
"da": "Et lag med caféer og pubber, hvor man kan samles omkring en drink. Laget stiller nogle relevante spørgsmål"
|
||||
|
|
|
@ -9,6 +9,16 @@
|
|||
"https://wiki.openstreetmap.org/wiki/File:Cafe-16.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "nightclub.svg",
|
||||
"license": "CC0",
|
||||
"authors": [
|
||||
"Osm Carto"
|
||||
],
|
||||
"sources": [
|
||||
"https://wiki.openstreetmap.org/wiki/File:Nightclub-16.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "pub.svg",
|
||||
"license": "CC0",
|
||||
|
|
27
assets/layers/cafe_pub/nightclub.svg
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?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"
|
||||
version="1.1"
|
||||
width="16"
|
||||
height="16"
|
||||
viewBox="0 0 16 16"
|
||||
id="svg2">
|
||||
<metadata id="metadata8">
|
||||
<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/>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs6"/>
|
||||
<rect width="16" height="16" x="0" y="0" id="canvas" style="fill:none;stroke:none;visibility:hidden"/>
|
||||
<path d="M 13.006803,0.00308957 3.0068028,2.0030896 l 0,8.5624994 c -0.385369,-0.06933 -0.787572,-0.07549 -1.1875,0.03125 -1.15478198,0.308194 -2.01331698,1.387352 -1.78124998,2.25 0.232067,0.862648 1.50146898,1.370694 2.65624998,1.0625 1.154781,-0.308194 1.8125,-1.336236 1.8125,-2.25 l 0,-6.9687494 7.0000002,-1.375 0,5.6249997 c -0.385334,-0.06124 -0.787622,-0.04422 -1.1875,0.0625 -1.1546372,0.308156 -2.0130612,1.3561497 -1.7812502,2.2187497 0.232265,0.862479 1.5016132,1.370655 2.6562502,1.0625 1.154637,-0.308156 1.8125,-1.28125 1.8125,-2.28125 z"
|
||||
id="nightclub"
|
||||
style="fill:#C77400;fill-opacity:1;fill-rule:nonzero;stroke:none" transform="translate(1,1)"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
|
@ -17,6 +17,22 @@
|
|||
],
|
||||
"sources": []
|
||||
},
|
||||
{
|
||||
"path": "SocialImageBanner.png",
|
||||
"license": "CC0",
|
||||
"authors": [
|
||||
"Pieter Vander Vennet"
|
||||
],
|
||||
"sources": []
|
||||
},
|
||||
{
|
||||
"path": "SocialImageBanner.svg",
|
||||
"license": "CC0",
|
||||
"authors": [
|
||||
"Pieter Vander Vennet"
|
||||
],
|
||||
"sources": []
|
||||
},
|
||||
{
|
||||
"path": "SocialImageSmall.png",
|
||||
"license": "CC-BY-SA 4.0",
|
||||
|
|
|
@ -141,16 +141,6 @@
|
|||
"https://commons.wikimedia.org/wiki/File:Camera_font_awesome.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "cash.svg",
|
||||
"license": "CC-BY 3.0",
|
||||
"authors": [
|
||||
"Online Web Fonts"
|
||||
],
|
||||
"sources": [
|
||||
"https://www.onlinewebfonts.com/icon/464494"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "checkbox-empty.svg",
|
||||
"license": "CC0",
|
||||
|
@ -859,16 +849,6 @@
|
|||
],
|
||||
"sources": []
|
||||
},
|
||||
{
|
||||
"path": "nfc_card.svg",
|
||||
"license": "CC0",
|
||||
"authors": [
|
||||
"Stijn Wens"
|
||||
],
|
||||
"sources": [
|
||||
"https://wens.be/free-antwerpenize-bicycle-font"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "no_checkmark.svg",
|
||||
"license": "CC0; trivial",
|
||||
|
@ -951,16 +931,6 @@
|
|||
"https://github.com/twitter/twemoji"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "payment_card.svg",
|
||||
"license": "CC0",
|
||||
"authors": [
|
||||
" \tMaxi Koichi (maxixam)"
|
||||
],
|
||||
"sources": [
|
||||
"https://commons.wikimedia.org/wiki/File:Credit_Card_-_The_Noun_Project.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "pencil.svg",
|
||||
"license": "MIT",
|
||||
|
@ -983,26 +953,6 @@
|
|||
" https://commons.wikimedia.org/wiki/File:Octicons-pencil.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "phone.svg",
|
||||
"license": "CC-BY 3.0",
|
||||
"authors": [
|
||||
"@ tyskrat"
|
||||
],
|
||||
"sources": [
|
||||
"https://www.onlinewebfonts.com/icon/1059"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "phone.svg",
|
||||
"license": "CC-BY 3.0",
|
||||
"authors": [
|
||||
"@ tyskrat"
|
||||
],
|
||||
"sources": [
|
||||
"https://www.onlinewebfonts.com/icon/1059"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "pin.svg",
|
||||
"license": "CC0; trivial",
|
||||
|
@ -1151,18 +1101,6 @@
|
|||
"https://phabricator.wikimedia.org/diffusion/GOJU/browse/master/AUTHORS.txt"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "send_email.svg",
|
||||
"license": "CC0; trivial",
|
||||
"authors": [],
|
||||
"sources": []
|
||||
},
|
||||
{
|
||||
"path": "send_email.svg",
|
||||
"license": "CC0; trivial",
|
||||
"authors": [],
|
||||
"sources": []
|
||||
},
|
||||
{
|
||||
"path": "share.svg",
|
||||
"license": "CC0; trivial",
|
||||
|
@ -1175,16 +1113,6 @@
|
|||
"authors": [],
|
||||
"sources": []
|
||||
},
|
||||
{
|
||||
"path": "smartphone.svg",
|
||||
"license": "CC-BY 3.0",
|
||||
"authors": [
|
||||
"To Uyen"
|
||||
],
|
||||
"sources": [
|
||||
"https://commons.wikimedia.org/wiki/File:Smartphone_icon_-_Noun_Project_283536.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "speech_bubble.svg",
|
||||
"license": "CC-BY 4.0",
|
||||
|
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB |
|
@ -5,6 +5,7 @@
|
|||
"phonelink",
|
||||
"emaillink",
|
||||
"wikipedialink",
|
||||
"smokingicon",
|
||||
"osmlink",
|
||||
"sharelink"
|
||||
],
|
||||
|
@ -20,6 +21,7 @@
|
|||
},
|
||||
"mappings": [
|
||||
{
|
||||
"#": "ignore-image-in-then",
|
||||
"if": "wikipedia=",
|
||||
"then": "<a href='https://www.wikidata.org/wiki/{wikidata}' target='_blank'><img src='./assets/svg/wikidata.svg' alt='WD'/></a>"
|
||||
}
|
||||
|
@ -59,13 +61,27 @@
|
|||
]
|
||||
},
|
||||
"phonelink": {
|
||||
"render": "<a href='tel:{phone}'><img textmode='\uD83D\uDCDE' alt='phone' src='./assets/svg/phone.svg'/></a>",
|
||||
"render": "<a href='tel:{phone}'><img textmode='\uD83D\uDCDE' alt='phone' src='./assets/tagRenderings/phone.svg'/></a>",
|
||||
"condition": "phone~*"
|
||||
},
|
||||
"emaillink": {
|
||||
"render": "<a href='mailto:{email}'><img textmode='✉️' alt='email' src='./assets/svg/send_email.svg'/></a>",
|
||||
"render": "<a href='mailto:{email}'><img textmode='✉️' alt='email' src='./assets/tagRenderings/send_email.svg'/></a>",
|
||||
"condition": "email~*"
|
||||
},
|
||||
"smokingicon": {
|
||||
"mappings": [
|
||||
{
|
||||
"#": "ignore-image-in-then",
|
||||
"if": "smoking=no",
|
||||
"then": "<img textmode='\uD83D\uDEAD️' alt='no-smoking' src='./assets/tagRenderings/no_smoking.svg'/>"
|
||||
},
|
||||
{
|
||||
"#": "ignore-image-in-then",
|
||||
"if": "smoking=yes",
|
||||
"then": "<img textmode='\uD83D\uDEAC️' alt='smoking-allowed' src='./assets/tagRenderings/smoking.svg'/>"
|
||||
}
|
||||
]
|
||||
},
|
||||
"osmlink": {
|
||||
"render": "<a href='https://openstreetmap.org/{id}' target='_blank'><img alt='on osm' textmode='\uD83D\uDDFA️' src='./assets/svg/osm-logo-us.svg'/></a>",
|
||||
"mappings": [
|
||||
|
@ -74,6 +90,7 @@
|
|||
"then": ""
|
||||
},
|
||||
{
|
||||
"#": "ignore-image-in-then",
|
||||
"if": "_backend~*",
|
||||
"then": "<a href='{_backend}/{id}' target='_blank'><img src='./assets/svg/osm-logo-us.svg'/></a>"
|
||||
}
|
||||
|
|
96
assets/tagRenderings/license_info.json
Normal file
|
@ -0,0 +1,96 @@
|
|||
[
|
||||
{
|
||||
"path": "cash.svg",
|
||||
"license": "CC-BY 3.0",
|
||||
"authors": [
|
||||
"Online Web Fonts"
|
||||
],
|
||||
"sources": [
|
||||
"https://www.onlinewebfonts.com/icon/464494"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "nfc_card.svg",
|
||||
"license": "CC0",
|
||||
"authors": [
|
||||
"Stijn Wens"
|
||||
],
|
||||
"sources": [
|
||||
"https://wens.be/free-antwerpenize-bicycle-font"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "no_smoking.svg",
|
||||
"license": "CC0",
|
||||
"authors": [
|
||||
"AIGA"
|
||||
],
|
||||
"sources": [
|
||||
"https://upload.wikimedia.org/wikipedia/commons/6/6b/No_Smoking.svg",
|
||||
"https://www.aiga.org/content.cfm/symbol-signs"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "payment_card.svg",
|
||||
"license": "CC0",
|
||||
"authors": [
|
||||
" \tMaxi Koichi (maxixam)"
|
||||
],
|
||||
"sources": [
|
||||
"https://commons.wikimedia.org/wiki/File:Credit_Card_-_The_Noun_Project.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "phone.svg",
|
||||
"license": "CC-BY 3.0",
|
||||
"authors": [
|
||||
"@ tyskrat"
|
||||
],
|
||||
"sources": [
|
||||
"https://www.onlinewebfonts.com/icon/1059"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "phone.svg",
|
||||
"license": "CC-BY 3.0",
|
||||
"authors": [
|
||||
"@ tyskrat"
|
||||
],
|
||||
"sources": [
|
||||
"https://www.onlinewebfonts.com/icon/1059"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "send_email.svg",
|
||||
"license": "CC0; trivial",
|
||||
"authors": [],
|
||||
"sources": []
|
||||
},
|
||||
{
|
||||
"path": "send_email.svg",
|
||||
"license": "CC0; trivial",
|
||||
"authors": [],
|
||||
"sources": []
|
||||
},
|
||||
{
|
||||
"path": "smartphone.svg",
|
||||
"license": "CC-BY 3.0",
|
||||
"authors": [
|
||||
"To Uyen"
|
||||
],
|
||||
"sources": [
|
||||
"https://commons.wikimedia.org/wiki/File:Smartphone_icon_-_Noun_Project_283536.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "smoking.svg",
|
||||
"license": "CC0",
|
||||
"authors": [
|
||||
"Wiki-User03",
|
||||
"ZooFari"
|
||||
],
|
||||
"sources": [
|
||||
"https://commons.wikimedia.org/wiki/File:Smoking_pictogram_(black).svg"
|
||||
]
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
160
assets/tagRenderings/no_smoking.svg
Normal file
|
@ -0,0 +1,160 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
||||
|
||||
<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"
|
||||
version="1.0"
|
||||
id="Layer_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
width="439.54999"
|
||||
height="439.548"
|
||||
viewBox="0 0 439.54999 439.548"
|
||||
xml:space="preserve"
|
||||
inkscape:version="0.47 r22583"
|
||||
sodipodi:docname="No_Smoking.svg"><metadata
|
||||
id="metadata53"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs51"><inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 250 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="500 : 250 : 1"
|
||||
inkscape:persp3d-origin="250 : 166.66667 : 1"
|
||||
id="perspective55" /></defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="750"
|
||||
id="namedview49"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.472"
|
||||
inkscape:cx="219.747"
|
||||
inkscape:cy="221.158"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Layer_1" />
|
||||
<circle
|
||||
style="fill:#ffffff;stroke:#000000"
|
||||
cx="249.5"
|
||||
cy="249.5"
|
||||
r="205"
|
||||
id="circle3"
|
||||
sodipodi:cx="249.5"
|
||||
sodipodi:cy="249.5"
|
||||
sodipodi:rx="205"
|
||||
sodipodi:ry="205"
|
||||
transform="translate(-30.253,-31.61)" />
|
||||
<g
|
||||
id="g5"
|
||||
transform="translate(-30.253,-31.61)">
|
||||
<g
|
||||
id="g7">
|
||||
<g
|
||||
id="g9">
|
||||
<g
|
||||
id="g11">
|
||||
<rect
|
||||
x="105.403"
|
||||
y="257.423"
|
||||
width="246.02901"
|
||||
height="39.354"
|
||||
id="rect13" />
|
||||
</g>
|
||||
<g
|
||||
id="g15">
|
||||
<g
|
||||
id="g17">
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:13.18700027;stroke-linejoin:round;stroke-miterlimit:10"
|
||||
d="m 274.445,100.269 c -23.356,0 -32.885,18.899 -32.885,33.48 0,16.618 13.668,34.512 39.566,32.992 -8.953,15.205 -1.094,39.916 20.144,39.916 0.06,0 35.414,0 35.414,0 18.898,0 28.707,10.047 28.707,25.579 v 18.056"
|
||||
id="path19" />
|
||||
</g>
|
||||
<g
|
||||
id="g21">
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:13.18700027;stroke-linejoin:round;stroke-miterlimit:10"
|
||||
d="m 285.789,113.105 c 23.736,0 39.488,16.49 39.488,36.692 0,7.809 -2.933,17.27 -8.881,25.473 h 20.938 c 30.438,0 48.593,25.359 48.593,50.775 v 24.247"
|
||||
id="path23" />
|
||||
</g>
|
||||
<g
|
||||
id="g25">
|
||||
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:13.18700027;stroke-linejoin:round;stroke-miterlimit:10"
|
||||
x1="365.39099"
|
||||
y1="256.79901"
|
||||
x2="365.39099"
|
||||
y2="296.621"
|
||||
id="line27" />
|
||||
</g>
|
||||
<g
|
||||
id="g29">
|
||||
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:13.18700027;stroke-linejoin:round;stroke-miterlimit:10"
|
||||
x1="386.005"
|
||||
y1="256.79901"
|
||||
x2="386.005"
|
||||
y2="296.621"
|
||||
id="line31" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g33">
|
||||
<rect
|
||||
x="273.44101"
|
||||
y="89.786003"
|
||||
style="fill:#ffffff"
|
||||
width="13.187"
|
||||
height="32.618999"
|
||||
id="rect35" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g37">
|
||||
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:55;stroke-miterlimit:10"
|
||||
x1="393.35001"
|
||||
y1="392.509"
|
||||
x2="110.112"
|
||||
y2="109.275"
|
||||
id="line39" />
|
||||
<g
|
||||
id="g41">
|
||||
<path
|
||||
style="fill:none;stroke:#ff0000;stroke-width:49;stroke-miterlimit:10"
|
||||
d="m 250.029,446.658 c -107.846,0 -195.276,-87.428 -195.276,-195.271 0,-107.848 87.43,-195.277 195.276,-195.277 107.845,0 195.274,87.429 195.274,195.277 0,107.843 -87.429,195.271 -195.274,195.271 z"
|
||||
id="path43" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:49;stroke-miterlimit:10"
|
||||
d="M 250.029,251.387"
|
||||
id="path45" />
|
||||
</g>
|
||||
|
||||
<line
|
||||
style="fill:none;stroke:#ff0000;stroke-width:51.11999893;stroke-miterlimit:10"
|
||||
x1="392.86801"
|
||||
y1="392.19101"
|
||||
x2="109.63"
|
||||
y2="108.957"
|
||||
id="line47" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 670 B After Width: | Height: | Size: 670 B |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
|
@ -745,7 +745,7 @@
|
|||
{
|
||||
"if": "payment:cash=yes",
|
||||
"ifnot": "payment:cash=no",
|
||||
"icon": "./assets/svg/cash.svg",
|
||||
"icon": "./assets/tagRenderings/cash.svg",
|
||||
"then": {
|
||||
"en": "Cash is accepted here",
|
||||
"nl": "Cash geld wordt hier aanvaard",
|
||||
|
@ -773,7 +773,7 @@
|
|||
{
|
||||
"if": "payment:cards=yes",
|
||||
"ifnot": "payment:cards=no",
|
||||
"icon": "./assets/svg/payment_card.svg",
|
||||
"icon": "./assets/tagRenderings/payment_card.svg",
|
||||
"then": {
|
||||
"en": "Payment cards are accepted here",
|
||||
"nl": "Betalen met bankkaarten kan hier",
|
||||
|
@ -807,7 +807,7 @@
|
|||
{
|
||||
"if": "payment:app=yes",
|
||||
"ifnot": "payment:app=no",
|
||||
"icon": "./assets/svg/smartphone.svg",
|
||||
"icon": "./assets/tagRenderings/smartphone.svg",
|
||||
"then": {
|
||||
"en": "Payment is done using a dedicated app",
|
||||
"nl": "Betalen via een app van het netwerk",
|
||||
|
@ -828,7 +828,7 @@
|
|||
{
|
||||
"if": "payment:membership_card=yes",
|
||||
"ifnot": "payment:membership_card=no",
|
||||
"icon": "./assets/svg/nfc_card.svg",
|
||||
"icon": "./assets/tagRenderings/nfc_card.svg",
|
||||
"then": {
|
||||
"en": "Payment is done using a membership card",
|
||||
"nl": "Betalen via een lidkaart van het netwerk",
|
||||
|
@ -1031,5 +1031,40 @@
|
|||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"smoking": {
|
||||
"question": {
|
||||
"en": "Is smoking allowed at {title()}?"
|
||||
},
|
||||
"#condition": "Based on https://en.wikipedia.org/wiki/List_of_smoking_bans",
|
||||
"condition": "_country!~al|be",
|
||||
"mappings": [
|
||||
{
|
||||
"if": "smoking=yes",
|
||||
"icon": {
|
||||
"path": "./assets/tagRenderings/smoking.svg",
|
||||
"size": "small"
|
||||
},
|
||||
"then": {
|
||||
"en": "Smoking is <b>allowed</b>"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "smoking=no",
|
||||
"icon": {
|
||||
"path": "./assets/tagRenderings/no_smoking.svg",
|
||||
"size": "small"
|
||||
},
|
||||
"then": {
|
||||
"en": "Smoking is <b>not allowed</b>"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "smoking=outside",
|
||||
"then": {
|
||||
"en": "Smoking is <b>allowed outside</b>."
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 702 B After Width: | Height: | Size: 702 B |
8
assets/tagRenderings/smoking.svg
Normal file
|
@ -0,0 +1,8 @@
|
|||
<svg enable-background="new -4.333 -4.333 520.278 520.278" height="520.278px" version="1.1" viewBox="-4.333 -4.333 520.278 520.278" width="520.278px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px">
|
||||
<defs>
|
||||
</defs>
|
||||
<g transform="translate(-607.435, -195.365)">
|
||||
<path d="M955.58,363.71c-16.461,1.609-25.673,17.126-25.969,31.875-0.285,14.252,8.423,26.381,21.25,29.281,5.662,1.28,3.225,1.647,3.5,5.781,2.688,40.218,40.279,17.878,56.094,29.343,8.143,5.903,6.139,10.834,6.781,20.344h8.906c0-13.286,1.794-20.888-11.094-28.5-14.037-8.291-33.764,1.58-46.344-8.156-5.124-3.966-5.494-12.199-2.719-18.812,1.838-4.379-0.617-8.315-5.625-8.219-11.188,0.215-19.953-6.958-21.188-18.125-1.258-11.377,4.419-22.228,16.406-24.531v-10.257zm10.37,10.31v9.844c8.9,1.657,17.617,4.822,21.281,13.844,3.242,7.983,1.651,16.891-2.312,24.406-1.902,3.606-0.29,10.151,8.781,10,16.79-0.279,30.641,6.578,35.625,24.125,2.84,9.996,2.136,14.072,1.938,23.875h9.5c0.024-19.672,0.699-15.814-2.219-25.844-6.508-22.367-17.854-29.955-39.438-31.343-3.1-0.2-3.885,0.312-2.75-3.062,2.551-7.58,3.64-18.591-3.125-29.719-5.78-9.60-16.10-16.28-27.23-16.14zm-286.22,112.07v44.969h318.031v-44.969h-318.03zm324.47,0v44.969h7.656v-44.969h-7.697zm13.2,0v44.969h9v-44.969h-9.041zm14.4,0v44.969h9.219v-44.969h-9.172z"/>
|
||||
<path d="M1101.7,451.17c0,131.69-106.76,238.45-238.45,238.45s-238.46-106.76-238.46-238.45,106.76-238.45,238.45-238.45,238.46,106.76,238.46,238.45z" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="43.3749"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
|
@ -8,7 +8,7 @@
|
|||
"main": "index.js",
|
||||
"scripts": {
|
||||
"start": "npm run generate:layeroverview && npm run strt",
|
||||
"strt": "export NODE_OPTIONS=--max_old_space_size=8364 && parcel serve *.html UI/** Logic/** assets/*.json assets/svg/* assets/generated/* assets/layers/*/*.svg assets/layers/*/*/*/*.svg assets/layers/*/*.jpg assets/layers/*/*.png assets/layers/*/*.css assets/tagRenderings/*.json assets/themes/*/*.svg assets/themes/*/*.ttf assets/themes/*/*/*.ttf assets/themes/*/*.otf assets/themes/*/*/*.otf assets/themes/*/*.css assets/themes/*/*.jpg assets/themes/*/*.woff assets/themes/*/*.png vendor/* vendor/*/*",
|
||||
"strt": "export NODE_OPTIONS=--max_old_space_size=8364 && parcel serve *.html UI/** Logic/** assets/*.json assets/svg/* assets/generated/* assets/layers/*/*.svg assets/layers/*/*/*/*.svg assets/layers/*/*.jpg assets/layers/*/*.png assets/layers/*/*.css assets/tagRenderings/*.json assets/themes/*/*.svg assets/themes/*/*.ttf assets/themes/*/*/*.ttf assets/themes/*/*.otf assets/themes/*/*/*.otf assets/themes/*/*.css assets/themes/*/*.jpg assets/themes/*/*.woff assets/themes/*/*.png vendor/* vendor/*/* assets/tagRenderings/*.svg",
|
||||
"strttest": "export NODE_OPTIONS=--max_old_space_size=8364 && parcel serve test.html",
|
||||
"watch:css": "tailwindcss -i index.css -o css/index-tailwind-output.css --watch",
|
||||
"generate:css": "tailwindcss -i index.css -o css/index-tailwind-output.css",
|
||||
|
|