Move some assets to the 'tagRenderings'-directory as they are only needed there, add 'smoking' question, add 'nightclubs' to 'pub_cafe'-layer

This commit is contained in:
pietervdvn 2022-06-20 01:42:30 +02:00
parent 2a6a09da76
commit e13c7ae677
18 changed files with 472 additions and 132 deletions

View file

@ -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,8 +124,8 @@ 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.`,
@ -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,16 +410,24 @@ 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`)
}
}
@ -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"]))))
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(", "))
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) {

View file

@ -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"

View file

@ -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",

View 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

View file

@ -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",

View file

@ -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",

View file

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

View file

@ -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>"
}

View 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"
]
}
]

View file

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View 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

View file

Before

Width:  |  Height:  |  Size: 670 B

After

Width:  |  Height:  |  Size: 670 B

View file

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View file

@ -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>."
}
}
]
}
}

View file

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

Before

Width:  |  Height:  |  Size: 702 B

After

Width:  |  Height:  |  Size: 702 B

View 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

View file

@ -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",