Merge master
|
@ -39,7 +39,8 @@ export default class AllTranslationAssets {
|
||||||
number: new Translation( {"en":"number","ca":"nombre","es":"número","nl":"getal","fr":"nombre","gl":"número","de":"Zahl"} ),
|
number: new Translation( {"en":"number","ca":"nombre","es":"número","nl":"getal","fr":"nombre","gl":"número","de":"Zahl"} ),
|
||||||
osmLinkTooltip: new Translation( {"en":"See this object on OpenStreetMap for history and more editing options","ca":"Mira aquest objecte a OpenStreetMap per veure historial i altres opcions d'edició","es":"Mira este objeto en OpenStreetMap para ver historial y otras opciones de edición","nl":"Bekijk dit object op OpenStreetMap waar geschiedenis en meer aanpasopties zijn","fr":"Voir l'historique de cet objet sur OpenStreetMap et plus d'options d'édition","gl":"Ollar este obxecto no OpenStreetMap para ollar o historial e outras opcións de edición","de":"Dieses Objekt auf OpenStreetMap anschauen für die Geschichte und weitere Bearbeitungsmöglichkeiten"} ),
|
osmLinkTooltip: new Translation( {"en":"See this object on OpenStreetMap for history and more editing options","ca":"Mira aquest objecte a OpenStreetMap per veure historial i altres opcions d'edició","es":"Mira este objeto en OpenStreetMap para ver historial y otras opciones de edición","nl":"Bekijk dit object op OpenStreetMap waar geschiedenis en meer aanpasopties zijn","fr":"Voir l'historique de cet objet sur OpenStreetMap et plus d'options d'édition","gl":"Ollar este obxecto no OpenStreetMap para ollar o historial e outras opcións de edición","de":"Dieses Objekt auf OpenStreetMap anschauen für die Geschichte und weitere Bearbeitungsmöglichkeiten"} ),
|
||||||
add: { addNew: new Translation( {"en":"Add a new {category} here","ca":"Afegir {category} aquí","es":"Añadir {category} aquí","nl":"Voeg hier een {category} toe","fr":"Ajouter un/une {category} ici","gl":"Engadir {category} aquí","de":"Hier eine neue {category} hinzufügen"} ),
|
add: { addNew: new Translation( {"en":"Add a new {category} here","ca":"Afegir {category} aquí","es":"Añadir {category} aquí","nl":"Voeg hier een {category} toe","fr":"Ajouter un/une {category} ici","gl":"Engadir {category} aquí","de":"Hier eine neue {category} hinzufügen"} ),
|
||||||
header: new Translation( {"en":"<h2>Add a point?</h2>You clicked somewhere where no data is known yet.<br/>","ca":"<h2>Vols afegir un punt?</h2>Has marcat un lloc on no coneixem les dades.<br/>","es":"<h2>Quieres añadir un punto?</h2>Has marcado un lugar del que no conocemos los datos.<br/>","nl":"<h2>Punt toevoegen?</h2>Je klikte ergens waar er nog geen data is. Kies hieronder welk punt je wilt toevoegen<br/>","fr":"<h2>Pas de données</h2>Vous avez cliqué sur un endroit où il n'y a pas encore de données. <br/>","gl":"<h2>Queres engadir un punto?</h2>Marcaches un lugar onde non coñecemos os datos.<br/>","de":"<h2>Punkt hinzufügen?</h2>Sie haben irgendwo geklickt, wo noch keine Daten bekannt sind.<br/>"} ),
|
title: new Translation( {"en":"Add a new point?","ca":"Vols afegir un punt?","es":"Quieres añadir un punto?","nl":"Nieuw punt toevoegen?","fr":"Pas de données","gl":"Queres engadir un punto?","de":"Punkt hinzufügen?"} ),
|
||||||
|
intro: new Translation( {"en":"You clicked somewhere where no data is known yet.<br/>","ca":"Has marcat un lloc on no coneixem les dades.<br/>","es":"Has marcado un lugar del que no conocemos los datos.<br/>","nl":"Je klikte ergens waar er nog geen data is. Kies hieronder welk punt je wilt toevoegen<br/>","fr":"Vous avez cliqué sur un endroit où il n'y a pas encore de données. <br/>","gl":"Marcaches un lugar onde non coñecemos os datos.<br/>","de":"Sie haben irgendwo geklickt, wo noch keine Daten bekannt sind.<br/>"} ),
|
||||||
pleaseLogin: new Translation( {"en":"<a class='activate-osm-authentication'>Please log in to add a new point</a>","ca":"<a class='activate-osm-authentication'>Entra per afegir un nou punt</a>","es":"<a class='activate-osm-authentication'>Entra para añadir un nuevo punto</a>","nl":"<a class='activate-osm-authentication'>Gelieve je aan te melden om een punt to te voegen</a>","fr":"<a class='activate-osm-authentication'>Vous devez vous connecter pour ajouter un point</a>","gl":"<a class='activate-osm-authentication'>Inicia a sesión para engadir un novo punto</a>","de":"<a class='activate-osm-authentication'>Bitte loggen Sie sich ein, um einen neuen Punkt hinzuzufügen</a>"} ),
|
pleaseLogin: new Translation( {"en":"<a class='activate-osm-authentication'>Please log in to add a new point</a>","ca":"<a class='activate-osm-authentication'>Entra per afegir un nou punt</a>","es":"<a class='activate-osm-authentication'>Entra para añadir un nuevo punto</a>","nl":"<a class='activate-osm-authentication'>Gelieve je aan te melden om een punt to te voegen</a>","fr":"<a class='activate-osm-authentication'>Vous devez vous connecter pour ajouter un point</a>","gl":"<a class='activate-osm-authentication'>Inicia a sesión para engadir un novo punto</a>","de":"<a class='activate-osm-authentication'>Bitte loggen Sie sich ein, um einen neuen Punkt hinzuzufügen</a>"} ),
|
||||||
zoomInFurther: new Translation( {"en":"Zoom in further to add a point.","ca":"Apropa per afegir un punt.","es":"Acerca para añadir un punto.","nl":"Gelieve verder in te zoomen om een punt toe te voegen.","fr":"Rapprochez vous pour ajouter un point.","gl":"Achégate para engadir un punto.","de":"Weiter einzoomen, um einen Punkt hinzuzufügen."} ),
|
zoomInFurther: new Translation( {"en":"Zoom in further to add a point.","ca":"Apropa per afegir un punt.","es":"Acerca para añadir un punto.","nl":"Gelieve verder in te zoomen om een punt toe te voegen.","fr":"Rapprochez vous pour ajouter un point.","gl":"Achégate para engadir un punto.","de":"Weiter einzoomen, um einen Punkt hinzuzufügen."} ),
|
||||||
stillLoading: new Translation( {"en":"The data is still loading. Please wait a bit before you add a new point.","ca":"Les dades es segueixen carregant. Espera una mica abans d'afegir cap punt.","es":"Los datos se siguen cargando. Espera un poco antes de añadir ningún punto.","nl":"De data wordt nog geladen. Nog even geduld en dan kan je een punt toevoegen.","fr":"Chargement des données en cours. Patientez un instant avant d'ajouter un nouveau point.","gl":"Os datos seguen a cargarse. Agarda un intre antes de engadir ningún punto.","de":"Die Daten werden noch geladen. Bitte warten Sie etwas, bevor Sie einen neuen Punkt hinzufügen."} ),
|
stillLoading: new Translation( {"en":"The data is still loading. Please wait a bit before you add a new point.","ca":"Les dades es segueixen carregant. Espera una mica abans d'afegir cap punt.","es":"Los datos se siguen cargando. Espera un poco antes de añadir ningún punto.","nl":"De data wordt nog geladen. Nog even geduld en dan kan je een punt toevoegen.","fr":"Chargement des données en cours. Patientez un instant avant d'ajouter un nouveau point.","gl":"Os datos seguen a cargarse. Agarda un intre antes de engadir ningún punto.","de":"Die Daten werden noch geladen. Bitte warten Sie etwas, bevor Sie einen neuen Punkt hinzufügen."} ),
|
||||||
|
@ -92,7 +93,9 @@ export default class AllTranslationAssets {
|
||||||
customThemeIntro: new Translation( {"en":"<h3>Custom themes</h3>These are previously visited user-generated themes.","nl":"<h3>Onofficiële thema's</h3>De onderstaande thema's heb je eerder bezocht en zijn gemaakt door andere OpenStreetMappers.","fr":"<h3>Thèmes personnalisés</h3>Vous avez déjà visité ces thèmes personnalisés.","gl":"<h3>Temas personalizados</h3>Estes son temas xerados por usuarios previamente visitados.","de":"<h3>Kundenspezifische Themen</h3>Dies sind zuvor besuchte benutzergenerierte Themen"} ),
|
customThemeIntro: new Translation( {"en":"<h3>Custom themes</h3>These are previously visited user-generated themes.","nl":"<h3>Onofficiële thema's</h3>De onderstaande thema's heb je eerder bezocht en zijn gemaakt door andere OpenStreetMappers.","fr":"<h3>Thèmes personnalisés</h3>Vous avez déjà visité ces thèmes personnalisés.","gl":"<h3>Temas personalizados</h3>Estes son temas xerados por usuarios previamente visitados.","de":"<h3>Kundenspezifische Themen</h3>Dies sind zuvor besuchte benutzergenerierte Themen"} ),
|
||||||
aboutMapcomplete: new Translation( {"en":"<h3>About MapComplete</h3><p>MapComplete is an OpenStreetMap editor that is meant to help everyone to easily add information on a <b>single theme.</b></p><p>Only features relevant to a single theme are shown with a few predefined questions, in order to keep things <b>simple and extremly user-friendly</b>.The theme maintainer can also choose a language for the interface, choose to disable elements or even to embed it into a different website without any UI-element at all.</p><p>However, another important part of MapComplete is to always <b>offer the next step</b> to learn more about OpenStreetMap:<ul><li>An iframe without UI-elements will link to a full-screen version</li><li>The fullscreen version offers information about OpenStreetMap</li><li>If you're not logged in, you're asked to log in</li><li>If you answered a single question, you are allowed to add points</li><li>At a certain point, the actual added tags appear which later get linked to the wiki...</li></ul></p><p>Do you notice an issue with MapComplete? Do you have a feature request? Do you want to help translating? Head over to <a href='https://github.com/pietervdvn/MapComplete' target='_blank'>the source code</a> or <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>issue tracker.</a> Follow the edit count on <a href='https://osmcha.org/?filters=%7B%22date__gte%22%3A%5B%7B%22label%22%3A%222020-07-05%22%2C%22value%22%3A%222020-07-05%22%7D%5D%2C%22editor%22%3A%5B%7B%22label%22%3A%22mapcomplete%22%2C%22value%22%3A%22mapcomplete%22%7D%5D%7D' target='_blank' >OsmCha</a></p>","nl":"<h3>Over MapComplete</h3><p>MapComplete is een OpenStreetMap-editor om eenvoudig informatie toe te voegen over <b>één enkel onderwerp</b>.</p><p>Om de editor zo <b>simpel en gebruiksvriendelijk mogelijk</b> te houden, worden enkel objecten relevant voor het thema getoond.Voor deze objecten kunnen dan vragen beantwoord worden, of men kan een nieuw punt van dit thema toevoegen.De maker van het thema kan er ook voor opteren om een aantal elementen van de gebruikersinterface uit te schakelen of de taal ervan in te stellen.</p><p>Een ander belangrijk aspect is om bezoekers stap voor stap meer te leren over OpenStreetMap:<ul><li>Een iframe zonder verdere uitleg linkt naar de volledige versie van MapComplete</li><li>De volledige versie heeft uitleg over OpenStreetMap</li><li>Als je niet aangemeld bent, wordt er je gevraagd dit te doen</li><li>Als je minstens één vraag hebt beantwoord, kan je punten gaan toevoegen.</li><li>Heb je genoeg changesets, dan verschijnen de tags die wat later doorlinken naar de wiki</li></ul></p><p>Merk je een bug of wil je een extra feature? Wil je helpen vertalen? Bezoek dan de <a href='https://github.com/pietervdvn/MapComplete' target='_blank'>broncode</a> en <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>issue tracker</a>. Volg de edits <a href='https://osmcha.org/?filters=%7B%22date__gte%22%3A%5B%7B%22label%22%3A%222020-07-05%22%2C%22value%22%3A%222020-07-05%22%7D%5D%2C%22editor%22%3A%5B%7B%22label%22%3A%22mapcomplete%22%2C%22value%22%3A%22mapcomplete%22%7D%5D%7D' target='_blank' >op OsmCha</a></p>","de":"<h3>Über MapComplete</h3><p>MapComplete ist ein OpenStreetMap-Editor, der jedem helfen soll, auf einfache Weise Informationen zu einem <b>Einzelthema hinzuzufügen.</b></p><p>Nur Merkmale, die für ein einzelnes Thema relevant sind, werden mit einigen vordefinierten Fragen gezeigt, um die Dinge <b>einfach und extrem benutzerfreundlich</b> zu halten.Der Themen-Betreuer kann auch eine Sprache für die Schnittstelle wählen, Elemente deaktivieren oder sogar in eine andere Website ohne jegliches UI-Element einbetten.</p><p>Ein weiterer wichtiger Teil von MapComplete ist jedoch, immer <b>den nächsten Schritt anzubieten</b>um mehr über OpenStreetMap zu erfahren:<ul><li>Ein iframe ohne UI-Elemente verlinkt zu einer Vollbildversion</li><li>Die Vollbildversion bietet Informationen über OpenStreetMap</li><li>Wenn Sie nicht eingeloggt sind, werden Sie gebeten, sich einzuloggen</li><li>Wenn Sie eine einzige Frage beantwortet haben, dürfen Sie Punkte hinzufügen</li><li>An einem bestimmten Punkt erscheinen die tatsächlich hinzugefügten Tags, die später mit dem Wiki verlinkt werden...</li></ul></p><p>Fällt Ihnen ein Problem mit MapComplete auf? Haben Sie einen Feature-Wunsch? Wollen Sie beim Übersetzen helfen? Gehen Sie <a href='https://github.com/pietervdvn/MapComplete' target='_blank'>zum Quellcode</a> oder <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>zur Problemverfolgung</a>.</p>"} ),
|
aboutMapcomplete: new Translation( {"en":"<h3>About MapComplete</h3><p>MapComplete is an OpenStreetMap editor that is meant to help everyone to easily add information on a <b>single theme.</b></p><p>Only features relevant to a single theme are shown with a few predefined questions, in order to keep things <b>simple and extremly user-friendly</b>.The theme maintainer can also choose a language for the interface, choose to disable elements or even to embed it into a different website without any UI-element at all.</p><p>However, another important part of MapComplete is to always <b>offer the next step</b> to learn more about OpenStreetMap:<ul><li>An iframe without UI-elements will link to a full-screen version</li><li>The fullscreen version offers information about OpenStreetMap</li><li>If you're not logged in, you're asked to log in</li><li>If you answered a single question, you are allowed to add points</li><li>At a certain point, the actual added tags appear which later get linked to the wiki...</li></ul></p><p>Do you notice an issue with MapComplete? Do you have a feature request? Do you want to help translating? Head over to <a href='https://github.com/pietervdvn/MapComplete' target='_blank'>the source code</a> or <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>issue tracker.</a> Follow the edit count on <a href='https://osmcha.org/?filters=%7B%22date__gte%22%3A%5B%7B%22label%22%3A%222020-07-05%22%2C%22value%22%3A%222020-07-05%22%7D%5D%2C%22editor%22%3A%5B%7B%22label%22%3A%22mapcomplete%22%2C%22value%22%3A%22mapcomplete%22%7D%5D%7D' target='_blank' >OsmCha</a></p>","nl":"<h3>Over MapComplete</h3><p>MapComplete is een OpenStreetMap-editor om eenvoudig informatie toe te voegen over <b>één enkel onderwerp</b>.</p><p>Om de editor zo <b>simpel en gebruiksvriendelijk mogelijk</b> te houden, worden enkel objecten relevant voor het thema getoond.Voor deze objecten kunnen dan vragen beantwoord worden, of men kan een nieuw punt van dit thema toevoegen.De maker van het thema kan er ook voor opteren om een aantal elementen van de gebruikersinterface uit te schakelen of de taal ervan in te stellen.</p><p>Een ander belangrijk aspect is om bezoekers stap voor stap meer te leren over OpenStreetMap:<ul><li>Een iframe zonder verdere uitleg linkt naar de volledige versie van MapComplete</li><li>De volledige versie heeft uitleg over OpenStreetMap</li><li>Als je niet aangemeld bent, wordt er je gevraagd dit te doen</li><li>Als je minstens één vraag hebt beantwoord, kan je punten gaan toevoegen.</li><li>Heb je genoeg changesets, dan verschijnen de tags die wat later doorlinken naar de wiki</li></ul></p><p>Merk je een bug of wil je een extra feature? Wil je helpen vertalen? Bezoek dan de <a href='https://github.com/pietervdvn/MapComplete' target='_blank'>broncode</a> en <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>issue tracker</a>. Volg de edits <a href='https://osmcha.org/?filters=%7B%22date__gte%22%3A%5B%7B%22label%22%3A%222020-07-05%22%2C%22value%22%3A%222020-07-05%22%7D%5D%2C%22editor%22%3A%5B%7B%22label%22%3A%22mapcomplete%22%2C%22value%22%3A%22mapcomplete%22%7D%5D%7D' target='_blank' >op OsmCha</a></p>","de":"<h3>Über MapComplete</h3><p>MapComplete ist ein OpenStreetMap-Editor, der jedem helfen soll, auf einfache Weise Informationen zu einem <b>Einzelthema hinzuzufügen.</b></p><p>Nur Merkmale, die für ein einzelnes Thema relevant sind, werden mit einigen vordefinierten Fragen gezeigt, um die Dinge <b>einfach und extrem benutzerfreundlich</b> zu halten.Der Themen-Betreuer kann auch eine Sprache für die Schnittstelle wählen, Elemente deaktivieren oder sogar in eine andere Website ohne jegliches UI-Element einbetten.</p><p>Ein weiterer wichtiger Teil von MapComplete ist jedoch, immer <b>den nächsten Schritt anzubieten</b>um mehr über OpenStreetMap zu erfahren:<ul><li>Ein iframe ohne UI-Elemente verlinkt zu einer Vollbildversion</li><li>Die Vollbildversion bietet Informationen über OpenStreetMap</li><li>Wenn Sie nicht eingeloggt sind, werden Sie gebeten, sich einzuloggen</li><li>Wenn Sie eine einzige Frage beantwortet haben, dürfen Sie Punkte hinzufügen</li><li>An einem bestimmten Punkt erscheinen die tatsächlich hinzugefügten Tags, die später mit dem Wiki verlinkt werden...</li></ul></p><p>Fällt Ihnen ein Problem mit MapComplete auf? Haben Sie einen Feature-Wunsch? Wollen Sie beim Übersetzen helfen? Gehen Sie <a href='https://github.com/pietervdvn/MapComplete' target='_blank'>zum Quellcode</a> oder <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>zur Problemverfolgung</a>.</p>"} ),
|
||||||
backgroundMap: new Translation( {"en":"Background map","ca":"Mapa de fons","es":"Mapa de fondo","nl":"Achtergrondkaart","fr":"Carte de fonds","de":"Hintergrundkarte"} ),
|
backgroundMap: new Translation( {"en":"Background map","ca":"Mapa de fons","es":"Mapa de fondo","nl":"Achtergrondkaart","fr":"Carte de fonds","de":"Hintergrundkarte"} ),
|
||||||
zoomInToSeeThisLayer: new Translation( {"en":"Zoom in to see this layer","ca":"Amplia per veure aquesta capa","es":"Amplía para ver esta capa","nl":"Vergroot de kaart om deze laag te zien","fr":"Aggrandissez la carte pour voir cette couche","de":"Vergrößern, um diese Ebene zu sehen"} ),
|
layerSelection: { zoomInToSeeThisLayer: new Translation( {"en":"Zoom in to see this layer","ca":"Amplia per veure aquesta capa","es":"Amplía para ver esta capa","nl":"Vergroot de kaart om deze laag te zien","fr":"Aggrandissez la carte pour voir cette couche","de":"Vergrößern, um diese Ebene zu sehen"} ),
|
||||||
|
title: new Translation( {"en":"Select layers","nl":"Selecteer lagen"} ),
|
||||||
|
},
|
||||||
weekdays: { abbreviations: { monday: new Translation( {"en":"Mon","ca":"Dil","es":"Lun","nl":"Maan","fr":"Lun"} ),
|
weekdays: { abbreviations: { monday: new Translation( {"en":"Mon","ca":"Dil","es":"Lun","nl":"Maan","fr":"Lun"} ),
|
||||||
tuesday: new Translation( {"en":"Tue","ca":"Dim","es":"Mar","nl":"Din","fr":"Mar"} ),
|
tuesday: new Translation( {"en":"Tue","ca":"Dim","es":"Mar","nl":"Din","fr":"Mar"} ),
|
||||||
wednesday: new Translation( {"en":"Wed","ca":"Dic","es":"Mie","nl":"Woe","fr":"Mer"} ),
|
wednesday: new Translation( {"en":"Wed","ca":"Dic","es":"Mie","nl":"Woe","fr":"Mer"} ),
|
||||||
|
|
|
@ -20,6 +20,7 @@ import * as surveillance_cameras from "../assets/themes/surveillance_cameras/sur
|
||||||
import * as trees from "../assets/themes/trees/trees.json"
|
import * as trees from "../assets/themes/trees/trees.json"
|
||||||
import * as personal from "../assets/themes/personalLayout/personalLayout.json"
|
import * as personal from "../assets/themes/personalLayout/personalLayout.json"
|
||||||
import * as playgrounds from "../assets/themes/playgrounds/playgrounds.json"
|
import * as playgrounds from "../assets/themes/playgrounds/playgrounds.json"
|
||||||
|
import * as bicycle_lib from "../assets/themes/bicycle_library/bicycle_library.json"
|
||||||
import LayerConfig from "./JSON/LayerConfig";
|
import LayerConfig from "./JSON/LayerConfig";
|
||||||
import LayoutConfig from "./JSON/LayoutConfig";
|
import LayoutConfig from "./JSON/LayoutConfig";
|
||||||
import SharedLayers from "./SharedLayers";
|
import SharedLayers from "./SharedLayers";
|
||||||
|
@ -57,6 +58,7 @@ export class AllKnownLayouts {
|
||||||
new LayoutConfig(drinking_water),
|
new LayoutConfig(drinking_water),
|
||||||
new LayoutConfig(nature),
|
new LayoutConfig(nature),
|
||||||
new LayoutConfig(cyclestreets),
|
new LayoutConfig(cyclestreets),
|
||||||
|
new LayoutConfig(bicycle_lib),
|
||||||
new LayoutConfig(maps),
|
new LayoutConfig(maps),
|
||||||
new LayoutConfig(fritures),
|
new LayoutConfig(fritures),
|
||||||
new LayoutConfig(benches),
|
new LayoutConfig(benches),
|
||||||
|
|
|
@ -11,6 +11,16 @@ export class FromJSON {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Tag(json: AndOrTagConfigJson | string, context: string = ""): TagsFilter {
|
public static Tag(json: AndOrTagConfigJson | string, context: string = ""): TagsFilter {
|
||||||
|
try{
|
||||||
|
return this.TagUnsafe(json, context);
|
||||||
|
}catch(e){
|
||||||
|
console.error("Could not parse tag", json,"in context",context,"due to ", e)
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static TagUnsafe(json: AndOrTagConfigJson | string, context: string = ""): TagsFilter {
|
||||||
|
|
||||||
if (json === undefined) {
|
if (json === undefined) {
|
||||||
throw `Error while parsing a tag: 'json' is undefined in ${context}. Make sure all the tags are defined and at least one tag is present in a complex expression`
|
throw `Error while parsing a tag: 'json' is undefined in ${context}. Make sure all the tags are defined and at least one tag is present in a complex expression`
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,22 +19,18 @@ import {UIElement} from "../../UI/UIElement";
|
||||||
export default class LayerConfig {
|
export default class LayerConfig {
|
||||||
|
|
||||||
|
|
||||||
|
static WAYHANDLING_DEFAULT = 0;
|
||||||
|
static WAYHANDLING_CENTER_ONLY = 1;
|
||||||
|
static WAYHANDLING_CENTER_AND_WAY = 2;
|
||||||
id: string;
|
id: string;
|
||||||
|
|
||||||
name: Translation
|
name: Translation
|
||||||
|
|
||||||
description: Translation;
|
description: Translation;
|
||||||
overpassTags: TagsFilter;
|
overpassTags: TagsFilter;
|
||||||
doNotDownload: boolean;
|
doNotDownload: boolean;
|
||||||
|
|
||||||
passAllFeatures: boolean;
|
passAllFeatures: boolean;
|
||||||
|
|
||||||
minzoom: number;
|
minzoom: number;
|
||||||
|
|
||||||
title?: TagRenderingConfig;
|
title?: TagRenderingConfig;
|
||||||
|
|
||||||
titleIcons: TagRenderingConfig[];
|
titleIcons: TagRenderingConfig[];
|
||||||
|
|
||||||
icon: TagRenderingConfig;
|
icon: TagRenderingConfig;
|
||||||
iconOverlays: { if: TagsFilter, then: TagRenderingConfig, badge: boolean }[]
|
iconOverlays: { if: TagsFilter, then: TagRenderingConfig, badge: boolean }[]
|
||||||
iconSize: TagRenderingConfig;
|
iconSize: TagRenderingConfig;
|
||||||
|
@ -42,14 +38,7 @@ export default class LayerConfig {
|
||||||
color: TagRenderingConfig;
|
color: TagRenderingConfig;
|
||||||
width: TagRenderingConfig;
|
width: TagRenderingConfig;
|
||||||
dashArray: TagRenderingConfig;
|
dashArray: TagRenderingConfig;
|
||||||
|
|
||||||
|
|
||||||
wayHandling: number;
|
wayHandling: number;
|
||||||
|
|
||||||
static WAYHANDLING_DEFAULT = 0;
|
|
||||||
static WAYHANDLING_CENTER_ONLY = 1;
|
|
||||||
static WAYHANDLING_CENTER_AND_WAY = 2;
|
|
||||||
|
|
||||||
hideUnderlayingFeaturesMinPercentage?: number;
|
hideUnderlayingFeaturesMinPercentage?: number;
|
||||||
|
|
||||||
presets: {
|
presets: {
|
||||||
|
@ -60,10 +49,10 @@ export default class LayerConfig {
|
||||||
|
|
||||||
tagRenderings: TagRenderingConfig [];
|
tagRenderings: TagRenderingConfig [];
|
||||||
|
|
||||||
constructor(json: LayerConfigJson, roamingRenderings: TagRenderingConfig[],
|
constructor(json: LayerConfigJson,
|
||||||
context?: string) {
|
context?: string) {
|
||||||
context = context + "." + json.id;
|
context = context + "." + json.id;
|
||||||
|
const self = this;
|
||||||
this.id = json.id;
|
this.id = json.id;
|
||||||
this.name = Translations.T(json.name);
|
this.name = Translations.T(json.name);
|
||||||
this.description = Translations.T(json.description);
|
this.description = Translations.T(json.description);
|
||||||
|
@ -81,6 +70,28 @@ export default class LayerConfig {
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
|
||||||
|
/** Given a key, gets the corresponding property from the json (or the default if not found
|
||||||
|
*
|
||||||
|
* The found value is interpreted as a tagrendering and fetched/parsed
|
||||||
|
* */
|
||||||
|
function tr(key: string, deflt) {
|
||||||
|
const v = json[key];
|
||||||
|
if (v === undefined || v === null) {
|
||||||
|
if (deflt === undefined) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
return new TagRenderingConfig(deflt, self.overpassTags, `${context}.${key}.default value`);
|
||||||
|
}
|
||||||
|
if (typeof v === "string") {
|
||||||
|
const shared = SharedTagRenderings.SharedTagRendering[v];
|
||||||
|
if (shared) {
|
||||||
|
console.log("Got shared TR:", v, "-->", shared)
|
||||||
|
return shared;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new TagRenderingConfig(v, self.overpassTags, `${context}.${key}`);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a list of tagRenderingCOnfigJSON in to TagRenderingConfig
|
* Converts a list of tagRenderingCOnfigJSON in to TagRenderingConfig
|
||||||
* A string is interpreted as a name to call
|
* A string is interpreted as a name to call
|
||||||
|
@ -90,12 +101,13 @@ export default class LayerConfig {
|
||||||
if (tagRenderings === undefined) {
|
if (tagRenderings === undefined) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return tagRenderings.map(
|
return tagRenderings.map(
|
||||||
(renderingJson, i) => {
|
(renderingJson, i) => {
|
||||||
if (typeof renderingJson === "string") {
|
if (typeof renderingJson === "string") {
|
||||||
|
|
||||||
if(renderingJson === "questions"){
|
if (renderingJson === "questions") {
|
||||||
return new TagRenderingConfig("questions")
|
return new TagRenderingConfig("questions", undefined)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -105,11 +117,11 @@ export default class LayerConfig {
|
||||||
}
|
}
|
||||||
throw `Predefined tagRendering ${renderingJson} not found in ${context}`;
|
throw `Predefined tagRendering ${renderingJson} not found in ${context}`;
|
||||||
}
|
}
|
||||||
return new TagRenderingConfig(renderingJson, `${context}.tagrendering[${i}]`);
|
return new TagRenderingConfig(renderingJson, self.overpassTags, `${context}.tagrendering[${i}]`);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
this.tagRenderings = trs(json.tagRenderings).concat(roamingRenderings);
|
this.tagRenderings = trs(json.tagRenderings);
|
||||||
|
|
||||||
|
|
||||||
const titleIcons = [];
|
const titleIcons = [];
|
||||||
|
@ -125,29 +137,10 @@ export default class LayerConfig {
|
||||||
this.titleIcons = trs(titleIcons);
|
this.titleIcons = trs(titleIcons);
|
||||||
|
|
||||||
|
|
||||||
function tr(key, deflt) {
|
|
||||||
const v = json[key];
|
|
||||||
if (v === undefined || v === null) {
|
|
||||||
if (deflt === undefined) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
return new TagRenderingConfig(deflt);
|
|
||||||
}
|
|
||||||
if (typeof v === "string") {
|
|
||||||
const shared = SharedTagRenderings.SharedTagRendering[v];
|
|
||||||
if (shared) {
|
|
||||||
console.log("Got shared TR:", v, "-->", shared)
|
|
||||||
return shared;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return new TagRenderingConfig(v, context + "." + key);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
this.title = tr("title", undefined);
|
this.title = tr("title", undefined);
|
||||||
this.icon = tr("icon", Img.AsData(Svg.pin));
|
this.icon = tr("icon", Img.AsData(Svg.pin));
|
||||||
this.iconOverlays = (json.iconOverlays ?? []).map(overlay => {
|
this.iconOverlays = (json.iconOverlays ?? []).map((overlay, i) => {
|
||||||
let tr = new TagRenderingConfig(overlay.then);
|
let tr = new TagRenderingConfig(overlay.then, self.overpassTags, `iconoverlays.${i}`);
|
||||||
if (typeof overlay.then === "string" && SharedTagRenderings.SharedIcons[overlay.then] !== undefined) {
|
if (typeof overlay.then === "string" && SharedTagRenderings.SharedIcons[overlay.then] !== undefined) {
|
||||||
tr = SharedTagRenderings.SharedIcons[overlay.then];
|
tr = SharedTagRenderings.SharedIcons[overlay.then];
|
||||||
}
|
}
|
||||||
|
@ -175,18 +168,53 @@ export default class LayerConfig {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public AddRoamingRenderings(addAll: {
|
||||||
|
tagRenderings: TagRenderingConfig[],
|
||||||
|
titleIcons: TagRenderingConfig[],
|
||||||
|
iconOverlays: { "if": TagsFilter, then: TagRenderingConfig, badge: boolean }[]
|
||||||
|
|
||||||
|
}): LayerConfig {
|
||||||
|
this.tagRenderings.push(...addAll.tagRenderings);
|
||||||
|
this.iconOverlays.push(...addAll.iconOverlays);
|
||||||
|
for (const icon of addAll.titleIcons) {
|
||||||
|
this.titleIcons.splice(0,0, icon);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GetRoamingRenderings(): {
|
||||||
|
tagRenderings: TagRenderingConfig[],
|
||||||
|
titleIcons: TagRenderingConfig[],
|
||||||
|
iconOverlays: { "if": TagsFilter, then: TagRenderingConfig, badge: boolean }[]
|
||||||
|
|
||||||
|
} {
|
||||||
|
|
||||||
|
const tagRenderings = this.tagRenderings.filter(tr => tr.roaming);
|
||||||
|
const titleIcons = this.titleIcons.filter(tr => tr.roaming);
|
||||||
|
const iconOverlays = this.iconOverlays.filter(io => io.then.roaming)
|
||||||
|
|
||||||
|
return {
|
||||||
|
tagRenderings: tagRenderings,
|
||||||
|
titleIcons: titleIcons,
|
||||||
|
iconOverlays: iconOverlays
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public GenerateLeafletStyle(tags: UIEventSource<any>, clickable: boolean):
|
public GenerateLeafletStyle(tags: UIEventSource<any>, clickable: boolean):
|
||||||
{
|
{
|
||||||
color: string;
|
icon:
|
||||||
icon: {
|
{
|
||||||
|
html: UIElement,
|
||||||
|
iconSize: [number, number],
|
||||||
|
iconAnchor: [number, number],
|
||||||
|
popupAnchor: [number, number],
|
||||||
iconUrl: string,
|
iconUrl: string,
|
||||||
popupAnchor: [number, number];
|
className: string
|
||||||
iconAnchor: [number, number];
|
},
|
||||||
iconSize: [number, number];
|
color: string,
|
||||||
html: UIElement;
|
weight: number,
|
||||||
className?: string;
|
dashArray: number[]
|
||||||
};
|
|
||||||
weight: number; dashArray: number[]
|
|
||||||
} {
|
} {
|
||||||
|
|
||||||
function num(str, deflt = 40) {
|
function num(str, deflt = 40) {
|
||||||
|
|
|
@ -4,6 +4,7 @@ import LayerConfig from "./LayerConfig";
|
||||||
import {LayoutConfigJson} from "./LayoutConfigJson";
|
import {LayoutConfigJson} from "./LayoutConfigJson";
|
||||||
import SharedLayers from "../SharedLayers";
|
import SharedLayers from "../SharedLayers";
|
||||||
import SharedTagRenderings from "../SharedTagRenderings";
|
import SharedTagRenderings from "../SharedTagRenderings";
|
||||||
|
import {Utils} from "../../Utils";
|
||||||
|
|
||||||
export default class LayoutConfig {
|
export default class LayoutConfig {
|
||||||
public readonly id: string;
|
public readonly id: string;
|
||||||
|
@ -74,34 +75,62 @@ export default class LayoutConfig {
|
||||||
return SharedTagRenderings.SharedTagRendering[tr];
|
return SharedTagRenderings.SharedTagRendering[tr];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new TagRenderingConfig(tr, `${this.id}.roaming_renderings[${i}]`);
|
return new TagRenderingConfig(tr, undefined,`${this.id}.roaming_renderings[${i}]`);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
this.defaultBackgroundId = json.defaultBackgroundId;
|
this.defaultBackgroundId = json.defaultBackgroundId;
|
||||||
this.layers = json.layers.map((layer, i) => {
|
this.layers = json.layers.map((layer, i) => {
|
||||||
if (typeof layer === "string"){
|
if (typeof layer === "string") {
|
||||||
if (SharedLayers.sharedLayers[layer] !== undefined) {
|
if (SharedLayers.sharedLayers[layer] !== undefined) {
|
||||||
return SharedLayers.sharedLayers[layer];
|
return SharedLayers.sharedLayers[layer];
|
||||||
} else {
|
} else {
|
||||||
throw "Unkown fixed layer " + layer;
|
throw "Unkown fixed layer " + layer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new LayerConfig(layer, this.roamingRenderings, `${this.id}.layers[${i}]`);
|
// @ts-ignore
|
||||||
|
if (layer.builtin !== undefined) {
|
||||||
|
// @ts-ignore
|
||||||
|
const name = layer.builtin;
|
||||||
|
console.warn("Overwriting!")
|
||||||
|
const shared = SharedLayers.sharedLayersJson[name];
|
||||||
|
if (shared === undefined) {
|
||||||
|
throw "Unkown fixed layer " + name;
|
||||||
|
}
|
||||||
|
// @ts-ignore
|
||||||
|
layer = Utils.Merge(layer.override, shared);
|
||||||
|
}
|
||||||
|
|
||||||
|
// @ts-ignore
|
||||||
|
return new LayerConfig(layer, `${this.id}.layers[${i}]`)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// ALl the layers are constructed, let them share tags in piece now!
|
||||||
|
const roaming : {r, source: LayerConfig}[] = []
|
||||||
|
for (const layer of this.layers) {
|
||||||
|
roaming.push({r: layer.GetRoamingRenderings(), source:layer});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const layer of this.layers) {
|
||||||
|
for (const r of roaming) {
|
||||||
|
if(r.source == layer){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
layer.AddRoamingRenderings(r.r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.clustering = {
|
this.clustering = {
|
||||||
maxZoom: 16,
|
maxZoom: 16,
|
||||||
minNeededElements: 250
|
minNeededElements: 250
|
||||||
};
|
};
|
||||||
if(json.clustering){
|
if (json.clustering) {
|
||||||
this.clustering = {
|
this.clustering = {
|
||||||
maxZoom : json.clustering.maxZoom ?? 18,
|
maxZoom: json.clustering.maxZoom ?? 18,
|
||||||
minNeededElements: json.clustering.minNeededElements ?? 1
|
minNeededElements: json.clustering.minNeededElements ?? 1
|
||||||
}
|
}
|
||||||
for (const layer of this.layers) {
|
for (const layer of this.layers) {
|
||||||
if(layer.wayHandling !== LayerConfig.WAYHANDLING_CENTER_ONLY){
|
if (layer.wayHandling !== LayerConfig.WAYHANDLING_CENTER_ONLY) {
|
||||||
console.error("WARNING: In order to allow clustering, every layer must be set to CENTER_ONLY. Layer", layer.id,"does not respect this for layout",this.id);
|
console.error("WARNING: In order to allow clustering, every layer must be set to CENTER_ONLY. Layer", layer.id, "does not respect this for layout", this.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,8 +120,11 @@ export interface LayoutConfigJson {
|
||||||
*
|
*
|
||||||
* *layers can also remove 'leftover'-features if the leftovers overlap with a feature in the layer itself
|
* *layers can also remove 'leftover'-features if the leftovers overlap with a feature in the layer itself
|
||||||
*
|
*
|
||||||
|
* Note that builtin layers can be reused. Either put in the name of the layer to reuse, or use {builtin: "layername", override: ...}
|
||||||
|
* The 'override'-object will be copied over the original values of the layer, which allows to change certain aspects of the layer
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
layers: (LayerConfigJson | string)[],
|
layers: (LayerConfigJson | string | {builtin: string, override: any})[],
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If defined, data will be clustered.
|
* If defined, data will be clustered.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import {TagsFilter} from "../../Logic/Tags";
|
import {And, TagsFilter} from "../../Logic/Tags";
|
||||||
import {TagRenderingConfigJson} from "./TagRenderingConfigJson";
|
import {TagRenderingConfigJson} from "./TagRenderingConfigJson";
|
||||||
import Translations from "../../UI/i18n/Translations";
|
import Translations from "../../UI/i18n/Translations";
|
||||||
import {FromJSON} from "./FromJSON";
|
import {FromJSON} from "./FromJSON";
|
||||||
|
@ -11,25 +11,26 @@ import {Translation} from "../../UI/i18n/Translation";
|
||||||
*/
|
*/
|
||||||
export default class TagRenderingConfig {
|
export default class TagRenderingConfig {
|
||||||
|
|
||||||
render?: Translation;
|
readonly render?: Translation;
|
||||||
question?: Translation;
|
readonly question?: Translation;
|
||||||
condition?: TagsFilter;
|
readonly condition?: TagsFilter;
|
||||||
|
|
||||||
freeform?: {
|
readonly freeform?: {
|
||||||
key: string,
|
readonly key: string,
|
||||||
type: string,
|
readonly type: string,
|
||||||
addExtraTags: TagsFilter[];
|
readonly addExtraTags: TagsFilter[];
|
||||||
};
|
};
|
||||||
|
|
||||||
multiAnswer: boolean;
|
readonly multiAnswer: boolean;
|
||||||
|
|
||||||
mappings?: {
|
readonly mappings?: {
|
||||||
if: TagsFilter,
|
readonly if: TagsFilter,
|
||||||
then: Translation
|
readonly then: Translation
|
||||||
hideInAnswer: boolean | TagsFilter
|
readonly hideInAnswer: boolean | TagsFilter
|
||||||
}[]
|
}[]
|
||||||
|
readonly roaming: boolean;
|
||||||
|
|
||||||
constructor(json: string | TagRenderingConfigJson, context?: string) {
|
constructor(json: string | TagRenderingConfigJson, conditionIfRoaming: TagsFilter, context?: string) {
|
||||||
|
|
||||||
if (json === "questions") {
|
if (json === "questions") {
|
||||||
// Very special value
|
// Very special value
|
||||||
|
@ -49,7 +50,13 @@ export default class TagRenderingConfig {
|
||||||
|
|
||||||
this.render = Translations.T(json.render);
|
this.render = Translations.T(json.render);
|
||||||
this.question = Translations.T(json.question);
|
this.question = Translations.T(json.question);
|
||||||
this.condition = FromJSON.Tag(json.condition ?? {"and": []}, `${context}.condition`);
|
this.roaming = json.roaming ?? false;
|
||||||
|
const condition = FromJSON.Tag(json.condition ?? {"and": []}, `${context}.condition`);
|
||||||
|
if (this.roaming && conditionIfRoaming !== undefined) {
|
||||||
|
this.condition = new And([condition, conditionIfRoaming]);
|
||||||
|
} else {
|
||||||
|
this.condition = condition;
|
||||||
|
}
|
||||||
if (json.freeform) {
|
if (json.freeform) {
|
||||||
this.freeform = {
|
this.freeform = {
|
||||||
key: json.freeform.key,
|
key: json.freeform.key,
|
||||||
|
@ -69,7 +76,7 @@ export default class TagRenderingConfig {
|
||||||
if (mapping.then === undefined) {
|
if (mapping.then === undefined) {
|
||||||
throw "Invalid mapping: if without body"
|
throw "Invalid mapping: if without body"
|
||||||
}
|
}
|
||||||
let hideInAnswer : boolean | TagsFilter = false;
|
let hideInAnswer: boolean | TagsFilter = false;
|
||||||
if (typeof mapping.hideInAnswer === "boolean") {
|
if (typeof mapping.hideInAnswer === "boolean") {
|
||||||
hideInAnswer = mapping.hideInAnswer;
|
hideInAnswer = mapping.hideInAnswer;
|
||||||
} else if (mapping.hideInAnswer !== undefined) {
|
} else if (mapping.hideInAnswer !== undefined) {
|
||||||
|
@ -111,7 +118,8 @@ export default class TagRenderingConfig {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.freeform?.key === undefined){
|
|
||||||
|
if (this.freeform?.key === undefined) {
|
||||||
return this.render;
|
return this.render;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,4 +53,10 @@ export interface TagRenderingConfigJson {
|
||||||
then: string | any
|
then: string | any
|
||||||
hideInAnswer?: boolean
|
hideInAnswer?: boolean
|
||||||
}[]
|
}[]
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If set to true, this tagRendering will escape the current layer and attach itself to all the other layers too.
|
||||||
|
* However, it will _only_ be shown if it matches the overpass-tags of the layer it was originally defined in.
|
||||||
|
*/
|
||||||
|
roaming?: boolean
|
||||||
}
|
}
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
import * as drinkingWater from "../assets/layers/drinking_water/drinking_water.json";
|
import * as drinkingWater from "../assets/layers/drinking_water/drinking_water.json";
|
||||||
import * as ghostbikes from "../assets/layers/ghost_bike/ghost_bike.json"
|
import * as ghostbikes from "../assets/layers/ghost_bike/ghost_bike.json"
|
||||||
import * as viewpoint from "../assets/layers/viewpoint/viewpoint.json"
|
import * as viewpoint from "../assets/layers/viewpoint/viewpoint.json"
|
||||||
|
@ -12,7 +11,7 @@ import * as cycling_themed_objects from "../assets/layers/cycling_themed_object/
|
||||||
import * as bike_shops from "../assets/layers/bike_shop/bike_shop.json"
|
import * as bike_shops from "../assets/layers/bike_shop/bike_shop.json"
|
||||||
import * as bike_cleaning from "../assets/layers/bike_cleaning/bike_cleaning.json"
|
import * as bike_cleaning from "../assets/layers/bike_cleaning/bike_cleaning.json"
|
||||||
import * as bicycle_library from "../assets/layers/bicycle_library/bicycle_library.json"
|
import * as bicycle_library from "../assets/layers/bicycle_library/bicycle_library.json"
|
||||||
|
import * as bicycle_tube_vending_machine from "../assets/layers/bicycle_tube_vending_machine/bicycle_tube_vending_machine.json"
|
||||||
import * as maps from "../assets/layers/maps/maps.json"
|
import * as maps from "../assets/layers/maps/maps.json"
|
||||||
import * as information_boards from "../assets/layers/information_board/information_board.json"
|
import * as information_boards from "../assets/layers/information_board/information_board.json"
|
||||||
import * as direction from "../assets/layers/direction/direction.json"
|
import * as direction from "../assets/layers/direction/direction.json"
|
||||||
|
@ -21,40 +20,53 @@ import * as toilets from "../assets/layers/toilets/toilets.json"
|
||||||
import * as bookcases from "../assets/layers/public_bookcases/public_bookcases.json"
|
import * as bookcases from "../assets/layers/public_bookcases/public_bookcases.json"
|
||||||
import * as tree_nodes from "../assets/layers/trees/tree_nodes.json"
|
import * as tree_nodes from "../assets/layers/trees/tree_nodes.json"
|
||||||
import LayerConfig from "./JSON/LayerConfig";
|
import LayerConfig from "./JSON/LayerConfig";
|
||||||
|
import {LayerConfigJson} from "./JSON/LayerConfigJson";
|
||||||
|
|
||||||
export default class SharedLayers {
|
export default class SharedLayers {
|
||||||
|
|
||||||
|
|
||||||
|
private static sharedLayersListRaw : LayerConfigJson[] = [
|
||||||
|
drinkingWater,
|
||||||
public static sharedLayers: Map<string, LayerConfig> = SharedLayers.getSharedLayers();
|
ghostbikes,
|
||||||
|
viewpoint,
|
||||||
private static getSharedLayers(){
|
bike_parking,
|
||||||
const sharedLayersList = [
|
bike_repair_station,
|
||||||
new LayerConfig(drinkingWater,[], "shared_layers"),
|
bike_monitoring_station,
|
||||||
new LayerConfig(ghostbikes,[], "shared_layers"),
|
birdhides,
|
||||||
new LayerConfig(viewpoint,[], "shared_layers"),
|
nature_reserve,
|
||||||
new LayerConfig(bike_parking,[], "shared_layers"),
|
bike_cafes,
|
||||||
new LayerConfig(bike_repair_station,[], "shared_layers"),
|
bicycle_library,
|
||||||
new LayerConfig(bike_monitoring_station,[], "shared_layers"),
|
cycling_themed_objects,
|
||||||
new LayerConfig(birdhides,[], "shared_layers"),
|
bike_shops,
|
||||||
new LayerConfig(nature_reserve,[], "shared_layers"),
|
bike_cleaning,
|
||||||
new LayerConfig(bike_cafes,[], "shared_layers"),
|
bicycle_tube_vending_machine,
|
||||||
new LayerConfig(bicycle_library, [], "bike_library"),
|
maps,
|
||||||
new LayerConfig(cycling_themed_objects,[], "shared_layers"),
|
direction,
|
||||||
new LayerConfig(bike_shops,[], "shared_layers"),
|
information_boards,
|
||||||
new LayerConfig(bike_cleaning,[], "shared_layers"),
|
toilets,
|
||||||
new LayerConfig(maps,[], "shared_layers"),
|
bookcases,
|
||||||
new LayerConfig(direction,[], "shared_layers"),
|
surveillance_camera,
|
||||||
new LayerConfig(information_boards,[], "shared_layers"),
|
tree_nodes
|
||||||
new LayerConfig(toilets,[], "shared_layers"),
|
|
||||||
new LayerConfig(bookcases,[], "shared_layers"),
|
|
||||||
new LayerConfig(surveillance_camera,[], "shared_layers"),
|
|
||||||
new LayerConfig(tree_nodes,[], "shared_layers")
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// Must be below the list...
|
||||||
|
public static sharedLayers: Map<string, LayerConfig> = SharedLayers.getSharedLayers();
|
||||||
|
public static sharedLayersJson: Map<string, any> = SharedLayers.getSharedLayersJson();
|
||||||
|
|
||||||
|
|
||||||
|
private static getSharedLayers(): Map<string, LayerConfig> {
|
||||||
const sharedLayers = new Map<string, LayerConfig>();
|
const sharedLayers = new Map<string, LayerConfig>();
|
||||||
for (const layer of sharedLayersList) {
|
for (const layer of SharedLayers.sharedLayersListRaw) {
|
||||||
|
const parsed = new LayerConfig(layer, "shared_layers")
|
||||||
|
sharedLayers.set(layer.id, parsed);
|
||||||
|
sharedLayers[layer.id] = parsed;
|
||||||
|
}
|
||||||
|
return sharedLayers;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static getSharedLayersJson(): Map<string, any> {
|
||||||
|
const sharedLayers = new Map<string, any>();
|
||||||
|
for (const layer of SharedLayers.sharedLayersListRaw) {
|
||||||
sharedLayers.set(layer.id, layer);
|
sharedLayers.set(layer.id, layer);
|
||||||
sharedLayers[layer.id] = layer;
|
sharedLayers[layer.id] = layer;
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,8 @@ import FeatureSwitched from "./UI/Base/FeatureSwitched";
|
||||||
import FeatureDuplicatorPerLayer from "./Logic/FeatureSource/FeatureDuplicatorPerLayer";
|
import FeatureDuplicatorPerLayer from "./Logic/FeatureSource/FeatureDuplicatorPerLayer";
|
||||||
import LayerConfig from "./Customizations/JSON/LayerConfig";
|
import LayerConfig from "./Customizations/JSON/LayerConfig";
|
||||||
import ShowDataLayer from "./UI/ShowDataLayer";
|
import ShowDataLayer from "./UI/ShowDataLayer";
|
||||||
|
import Hash from "./Logic/Web/Hash";
|
||||||
|
import HistoryHandling from "./Logic/Actors/HistoryHandling";
|
||||||
|
|
||||||
export class InitUiElements {
|
export class InitUiElements {
|
||||||
|
|
||||||
|
@ -157,12 +159,18 @@ export class InitUiElements {
|
||||||
layer
|
layer
|
||||||
);
|
);
|
||||||
|
|
||||||
State.state.fullScreenMessage.setData(featureBox);
|
State.state.fullScreenMessage.setData({
|
||||||
|
content: featureBox,
|
||||||
|
hashText: feature.properties.id.replace("/", "_"),
|
||||||
|
titleText: featureBox.title
|
||||||
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
new HistoryHandling(Hash.hash, State.state.fullScreenMessage);
|
||||||
|
|
||||||
InitUiElements.OnlyIf(State.state.featureSwitchUserbadge, () => {
|
InitUiElements.OnlyIf(State.state.featureSwitchUserbadge, () => {
|
||||||
new UserBadge().AttachTo('userbadge');
|
new UserBadge().AttachTo('userbadge');
|
||||||
});
|
});
|
||||||
|
@ -172,9 +180,7 @@ export class InitUiElements {
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
new FullScreenMessageBox(() => {
|
new FullScreenMessageBox().AttachTo("messagesboxmobile");
|
||||||
State.state.selectedElement.setData(undefined)
|
|
||||||
}).AttachTo("messagesboxmobile");
|
|
||||||
|
|
||||||
|
|
||||||
InitUiElements.OnlyIf(State.state.featureSwitchWelcomeMessage, () => {
|
InitUiElements.OnlyIf(State.state.featureSwitchWelcomeMessage, () => {
|
||||||
|
@ -279,20 +285,23 @@ export class InitUiElements {
|
||||||
})
|
})
|
||||||
|
|
||||||
State.state.selectedElement.addCallback(selected => {
|
State.state.selectedElement.addCallback(selected => {
|
||||||
if(selected !== undefined){
|
if (selected !== undefined) {
|
||||||
checkbox.isEnabled.setData(false);
|
checkbox.isEnabled.setData(false);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
const fullOptions2 = new FullWelcomePaneWithTabs();
|
const fullOptions2 = new FullWelcomePaneWithTabs();
|
||||||
State.state.fullScreenMessage.setData(fullOptions2)
|
if (Hash.hash.data === undefined) {
|
||||||
|
State.state.fullScreenMessage.setData({content: fullOptions2, hashText: "welcome"})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
Svg.help_svg()
|
Svg.help_svg()
|
||||||
.SetClass("open-welcome-button")
|
.SetClass("open-welcome-button")
|
||||||
.SetClass("shadow")
|
.SetClass("shadow")
|
||||||
.onClick(() => {
|
.onClick(() => {
|
||||||
State.state.fullScreenMessage.setData(fullOptions2)
|
State.state.fullScreenMessage.setData({content: fullOptions2, hashText: "welcome"})
|
||||||
}).AttachTo("help-button-mobile");
|
}).AttachTo("help-button-mobile");
|
||||||
|
|
||||||
|
|
||||||
|
@ -326,7 +335,7 @@ export class InitUiElements {
|
||||||
const fullScreen = new LayerControlPanel();
|
const fullScreen = new LayerControlPanel();
|
||||||
checkbox.isEnabled.addCallback(isEnabled => {
|
checkbox.isEnabled.addCallback(isEnabled => {
|
||||||
if (isEnabled) {
|
if (isEnabled) {
|
||||||
State.state.fullScreenMessage.setData(fullScreen);
|
State.state.fullScreenMessage.setData({content: fullScreen, hashText: "layer-select"});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
State.state.fullScreenMessage.addCallback(latest => {
|
State.state.fullScreenMessage.addCallback(latest => {
|
||||||
|
|
19
Logic/Actors/HistoryHandling.ts
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
import {UIEventSource} from "../UIEventSource";
|
||||||
|
import {UIElement} from "../../UI/UIElement";
|
||||||
|
|
||||||
|
export default class HistoryHandling {
|
||||||
|
|
||||||
|
constructor(hash: UIEventSource<string>, fullscreenMessage: UIEventSource<{ content: UIElement, hashText: string }>) {
|
||||||
|
hash.addCallback(h => {
|
||||||
|
if (h === undefined || h === "") {
|
||||||
|
fullscreenMessage.setData(undefined);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
fullscreenMessage.addCallback(fs => {
|
||||||
|
hash.setData(fs?.hashText);
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -17,7 +17,7 @@ export default class StrayClickHandler {
|
||||||
selectedElement: UIEventSource<string>,
|
selectedElement: UIEventSource<string>,
|
||||||
filteredLayers: UIEventSource<{ readonly isDisplayed: UIEventSource<boolean> }[]>,
|
filteredLayers: UIEventSource<{ readonly isDisplayed: UIEventSource<boolean> }[]>,
|
||||||
leafletMap: UIEventSource<L.Map>,
|
leafletMap: UIEventSource<L.Map>,
|
||||||
fullscreenMessage: UIEventSource<UIElement>,
|
fullscreenMessage: UIEventSource<{content: UIElement, hashText: string}>,
|
||||||
uiToShow: (() => UIElement)) {
|
uiToShow: (() => UIElement)) {
|
||||||
this._uiToShow = uiToShow;
|
this._uiToShow = uiToShow;
|
||||||
const self = this;
|
const self = this;
|
||||||
|
@ -51,7 +51,7 @@ export default class StrayClickHandler {
|
||||||
self._lastMarker.bindPopup(popup);
|
self._lastMarker.bindPopup(popup);
|
||||||
|
|
||||||
self._lastMarker.on("click", () => {
|
self._lastMarker.on("click", () => {
|
||||||
fullscreenMessage.setData(self._uiToShow());
|
fullscreenMessage.setData({content: self._uiToShow(), hashText: "new"});
|
||||||
uiElement.Update();
|
uiElement.Update();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
33
Logic/Actors/TitleHandler.ts
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
import {UIEventSource} from "../UIEventSource";
|
||||||
|
import LayoutConfig from "../../Customizations/JSON/LayoutConfig";
|
||||||
|
import Translations from "../../UI/i18n/Translations";
|
||||||
|
import Locale from "../../UI/i18n/Locale";
|
||||||
|
import {UIElement} from "../../UI/UIElement";
|
||||||
|
|
||||||
|
export default class TitleHandler{
|
||||||
|
constructor(layoutToUse: UIEventSource<LayoutConfig>, fullScreenMessage: UIEventSource<{ content: UIElement, hashText: string, titleText?: UIElement }>) {
|
||||||
|
|
||||||
|
|
||||||
|
layoutToUse.map((layoutToUse) => {
|
||||||
|
return Translations.WT(layoutToUse?.title)?.txt ?? "MapComplete"
|
||||||
|
}, [Locale.language]
|
||||||
|
).addCallbackAndRun((title) => {
|
||||||
|
document.title = title
|
||||||
|
});
|
||||||
|
|
||||||
|
fullScreenMessage.addCallbackAndRun(selected => {
|
||||||
|
const title = Translations.WT(layoutToUse.data?.title)?.txt ?? "MapComplete"
|
||||||
|
if(selected?.titleText?.data === undefined){
|
||||||
|
document.title = title
|
||||||
|
}else{
|
||||||
|
selected.titleText.Update();
|
||||||
|
var d = document.createElement('div');
|
||||||
|
d.innerHTML = selected.titleText.InnerRender();
|
||||||
|
const poi = (d.textContent || d.innerText)
|
||||||
|
document.title = title + " | " + poi;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -38,7 +38,6 @@ export default class UpdateFromOverpass implements FeatureSource{
|
||||||
location: UIEventSource<Loc>,
|
location: UIEventSource<Loc>,
|
||||||
layoutToUse: UIEventSource<LayoutConfig>,
|
layoutToUse: UIEventSource<LayoutConfig>,
|
||||||
leafletMap: UIEventSource<L.Map>) {
|
leafletMap: UIEventSource<L.Map>) {
|
||||||
console.log("Crating overpass updater")
|
|
||||||
this._location = location;
|
this._location = location;
|
||||||
this._layoutToUse = layoutToUse;
|
this._layoutToUse = layoutToUse;
|
||||||
this._leafletMap = leafletMap;
|
this._leafletMap = leafletMap;
|
||||||
|
|
|
@ -32,23 +32,55 @@ export default class FilteringFeatureSource implements FeatureSource {
|
||||||
if (layer === undefined) {
|
if (layer === undefined) {
|
||||||
throw "No layer found with id " + layerId;
|
throw "No layer found with id " + layerId;
|
||||||
}
|
}
|
||||||
return layer.isDisplayed.data && (layer.layerDef.minzoom <= location.data.zoom);
|
if (FilteringFeatureSource.showLayer(layer, location)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// Does it match any other layer?
|
||||||
|
for (const toCheck of layers) {
|
||||||
|
if (!FilteringFeatureSource.showLayer(toCheck, location)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (toCheck.layerDef.overpassTags.matchesProperties(f.feature.properties)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
|
||||||
});
|
});
|
||||||
self.features.setData(newFeatures);
|
self.features.setData(newFeatures);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const layer of layers) {
|
for (const layer of layers) {
|
||||||
layerDict[layer.layerDef.id] = layer;
|
layerDict[layer.layerDef.id] = layer;
|
||||||
layer.isDisplayed.addCallback(() => {
|
|
||||||
update()})
|
|
||||||
}
|
}
|
||||||
upstream.features.addCallback(() => {
|
upstream.features.addCallback(() => {
|
||||||
update()});
|
update()
|
||||||
location.map(l => l.zoom).addCallback(() => {
|
});
|
||||||
update();});
|
location.map(l => {
|
||||||
|
// We want something that is stable for the shown layers
|
||||||
|
const displayedLayerIndexes = [];
|
||||||
|
for (let i = 0; i < layers.length; i++) {
|
||||||
|
if (l.zoom < layers[i].layerDef.minzoom) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!layers[i].isDisplayed.data) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
displayedLayerIndexes.push(i);
|
||||||
|
}
|
||||||
|
return displayedLayerIndexes.join(",")
|
||||||
|
}, layers.map(l => l.isDisplayed))
|
||||||
|
.addCallback(() => {
|
||||||
|
update();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static showLayer(layer: {
|
||||||
|
isDisplayed: UIEventSource<boolean>,
|
||||||
|
layerDef: LayerConfig
|
||||||
|
}, location: UIEventSource<Loc>) {
|
||||||
|
return layer.isDisplayed.data && (layer.layerDef.minzoom <= location.data.zoom)
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -101,6 +101,14 @@ export default class MetaTagging {
|
||||||
// AUtomatically triggered on the next change
|
// AUtomatically triggered on the next change
|
||||||
const updateTags = () => {
|
const updateTags = () => {
|
||||||
const oldValueIsOpen = tags["_isOpen"];
|
const oldValueIsOpen = tags["_isOpen"];
|
||||||
|
const oldNextChange =tags["_isOpen:nextTrigger"] ?? 0;
|
||||||
|
|
||||||
|
if(oldNextChange > (new Date()).getTime() &&
|
||||||
|
tags["_isOpen:oldvalue"] === tags["opening_hours"]){
|
||||||
|
// Already calculated and should not yet be triggered
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
tags["_isOpen"] = oh.getState() ? "yes" : "no";
|
tags["_isOpen"] = oh.getState() ? "yes" : "no";
|
||||||
const comment = oh.getComment();
|
const comment = oh.getComment();
|
||||||
if (comment) {
|
if (comment) {
|
||||||
|
@ -113,9 +121,15 @@ export default class MetaTagging {
|
||||||
|
|
||||||
const nextChange = oh.getNextChange();
|
const nextChange = oh.getNextChange();
|
||||||
if (nextChange !== undefined) {
|
if (nextChange !== undefined) {
|
||||||
|
const timeout = nextChange.getTime() - (new Date()).getTime();
|
||||||
|
tags["_isOpen:nextTrigger"] = nextChange.getTime();
|
||||||
|
tags["_isOpen:oldvalue"] = tags.opening_hours
|
||||||
window.setTimeout(
|
window.setTimeout(
|
||||||
updateTags,
|
() => {
|
||||||
(nextChange.getTime() - (new Date()).getTime())
|
console.log("Updating the _isOpen tag for ", tags.id);
|
||||||
|
updateTags();
|
||||||
|
},
|
||||||
|
timeout
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,8 @@ export class Geocoding {
|
||||||
private static readonly host = "https://nominatim.openstreetmap.org/search?";
|
private static readonly host = "https://nominatim.openstreetmap.org/search?";
|
||||||
|
|
||||||
static Search(query: string,
|
static Search(query: string,
|
||||||
handleResult: ((places: { display_name: string, lat: number, lon: number, boundingbox: number[] }[]) => void),
|
handleResult: ((places: { display_name: string, lat: number, lon: number, boundingbox: number[],
|
||||||
|
osm_type: string, osm_id: string}[]) => void),
|
||||||
onFail: (() => void)) {
|
onFail: (() => void)) {
|
||||||
const b = State.state.leafletMap.data.getBounds();
|
const b = State.state.leafletMap.data.getBounds();
|
||||||
console.log(b);
|
console.log(b);
|
||||||
|
|
|
@ -2,8 +2,11 @@ import {Utils} from "../Utils";
|
||||||
|
|
||||||
export abstract class TagsFilter {
|
export abstract class TagsFilter {
|
||||||
abstract matches(tags: { k: string, v: string }[]): boolean
|
abstract matches(tags: { k: string, v: string }[]): boolean
|
||||||
|
|
||||||
abstract asOverpass(): string[]
|
abstract asOverpass(): string[]
|
||||||
abstract substituteValues(tags: any) : TagsFilter;
|
|
||||||
|
abstract substituteValues(tags: any): TagsFilter;
|
||||||
|
|
||||||
abstract isUsableAsAnswer(): boolean;
|
abstract isUsableAsAnswer(): boolean;
|
||||||
|
|
||||||
abstract isEquivalent(other: TagsFilter): boolean;
|
abstract isEquivalent(other: TagsFilter): boolean;
|
||||||
|
@ -28,15 +31,8 @@ export class RegexTag extends TagsFilter {
|
||||||
this.invert = invert;
|
this.invert = invert;
|
||||||
}
|
}
|
||||||
|
|
||||||
asOverpass(): string[] {
|
|
||||||
if (typeof this.key === "string") {
|
|
||||||
return [`['${this.key}'${this.invert ? "!" : ""}~'${RegexTag.source(this.value)}']`];
|
|
||||||
}
|
|
||||||
return [`[~'${this.key.source}'${this.invert ? "!" : ""}~'${RegexTag.source(this.value)}']`];
|
|
||||||
}
|
|
||||||
|
|
||||||
private static doesMatch(fromTag: string, possibleRegex: string | RegExp): boolean {
|
private static doesMatch(fromTag: string, possibleRegex: string | RegExp): boolean {
|
||||||
if(typeof possibleRegex === "string"){
|
if (typeof possibleRegex === "string") {
|
||||||
return fromTag === possibleRegex;
|
return fromTag === possibleRegex;
|
||||||
}
|
}
|
||||||
return fromTag.match(possibleRegex) !== null;
|
return fromTag.match(possibleRegex) !== null;
|
||||||
|
@ -49,13 +45,20 @@ export class RegexTag extends TagsFilter {
|
||||||
return r.source;
|
return r.source;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
asOverpass(): string[] {
|
||||||
|
if (typeof this.key === "string") {
|
||||||
|
return [`['${this.key}'${this.invert ? "!" : ""}~'${RegexTag.source(this.value)}']`];
|
||||||
|
}
|
||||||
|
return [`[~'${this.key.source}'${this.invert ? "!" : ""}~'${RegexTag.source(this.value)}']`];
|
||||||
|
}
|
||||||
|
|
||||||
isUsableAsAnswer(): boolean {
|
isUsableAsAnswer(): boolean {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
matches(tags: { k: string; v: string }[]): boolean {
|
matches(tags: { k: string; v: string }[]): boolean {
|
||||||
for (const tag of tags) {
|
for (const tag of tags) {
|
||||||
if (RegexTag.doesMatch(tag.k, this.key)){
|
if (RegexTag.doesMatch(tag.k, this.key)) {
|
||||||
return RegexTag.doesMatch(tag.v, this.value) != this.invert;
|
return RegexTag.doesMatch(tag.v, this.value) != this.invert;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,7 +81,7 @@ export class RegexTag extends TagsFilter {
|
||||||
if (other instanceof RegexTag) {
|
if (other instanceof RegexTag) {
|
||||||
return other.asHumanString() == this.asHumanString();
|
return other.asHumanString() == this.asHumanString();
|
||||||
}
|
}
|
||||||
if(other instanceof Tag){
|
if (other instanceof Tag) {
|
||||||
return RegexTag.doesMatch(other.key, this.key) && RegexTag.doesMatch(other.value, this.value);
|
return RegexTag.doesMatch(other.key, this.key) && RegexTag.doesMatch(other.value, this.value);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -94,13 +97,13 @@ export class Tag extends TagsFilter {
|
||||||
super()
|
super()
|
||||||
this.key = key
|
this.key = key
|
||||||
this.value = value
|
this.value = value
|
||||||
if(key === undefined || key === ""){
|
if (key === undefined || key === "") {
|
||||||
throw "Invalid key: undefined or empty";
|
throw "Invalid key: undefined or empty";
|
||||||
}
|
}
|
||||||
if(value === undefined){
|
if (value === undefined) {
|
||||||
throw "Invalid value: value is undefined";
|
throw "Invalid value: value is undefined";
|
||||||
}
|
}
|
||||||
if(value === "*"){
|
if (value === "*") {
|
||||||
console.warn(`Got suspicious tag ${key}=* ; did you mean ${key}~* ?`)
|
console.warn(`Got suspicious tag ${key}=* ; did you mean ${key}~* ?`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,7 +117,7 @@ export class Tag extends TagsFilter {
|
||||||
}
|
}
|
||||||
|
|
||||||
// The tag was not found
|
// The tag was not found
|
||||||
if(this.value === ""){
|
if (this.value === "") {
|
||||||
// and it shouldn't be found!
|
// and it shouldn't be found!
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -152,10 +155,10 @@ export class Tag extends TagsFilter {
|
||||||
}
|
}
|
||||||
|
|
||||||
isEquivalent(other: TagsFilter): boolean {
|
isEquivalent(other: TagsFilter): boolean {
|
||||||
if(other instanceof Tag){
|
if (other instanceof Tag) {
|
||||||
return this.key === other.key && this.value === other.value;
|
return this.key === other.key && this.value === other.value;
|
||||||
}
|
}
|
||||||
if(other instanceof RegexTag){
|
if (other instanceof RegexTag) {
|
||||||
other.isEquivalent(this);
|
other.isEquivalent(this);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -185,7 +188,7 @@ export class Or extends TagsFilter {
|
||||||
const choices = [];
|
const choices = [];
|
||||||
for (const tagsFilter of this.or) {
|
for (const tagsFilter of this.or) {
|
||||||
const subChoices = tagsFilter.asOverpass();
|
const subChoices = tagsFilter.asOverpass();
|
||||||
for(const subChoice of subChoices){
|
for (const subChoice of subChoices) {
|
||||||
choices.push(subChoice)
|
choices.push(subChoice)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -209,15 +212,15 @@ export class Or extends TagsFilter {
|
||||||
}
|
}
|
||||||
|
|
||||||
isEquivalent(other: TagsFilter): boolean {
|
isEquivalent(other: TagsFilter): boolean {
|
||||||
if(other instanceof Or){
|
if (other instanceof Or) {
|
||||||
|
|
||||||
for (const selfTag of this.or) {
|
for (const selfTag of this.or) {
|
||||||
let matchFound = false;
|
let matchFound = false;
|
||||||
for (let i = 0; i < other.or.length && !matchFound; i++){
|
for (let i = 0; i < other.or.length && !matchFound; i++) {
|
||||||
let otherTag = other.or[i];
|
let otherTag = other.or[i];
|
||||||
matchFound = selfTag.isEquivalent(otherTag);
|
matchFound = selfTag.isEquivalent(otherTag);
|
||||||
}
|
}
|
||||||
if(!matchFound){
|
if (!matchFound) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -236,6 +239,14 @@ export class And extends TagsFilter {
|
||||||
this.and = and;
|
this.and = and;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static combine(filter: string, choices: string[]): string[] {
|
||||||
|
const values = [];
|
||||||
|
for (const or of choices) {
|
||||||
|
values.push(filter + or);
|
||||||
|
}
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
matches(tags: { k: string; v: string }[]): boolean {
|
matches(tags: { k: string; v: string }[]): boolean {
|
||||||
for (const tagsFilter of this.and) {
|
for (const tagsFilter of this.and) {
|
||||||
if (!tagsFilter.matches(tags)) {
|
if (!tagsFilter.matches(tags)) {
|
||||||
|
@ -246,14 +257,6 @@ export class And extends TagsFilter {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static combine(filter: string, choices: string[]): string[] {
|
|
||||||
const values = [];
|
|
||||||
for (const or of choices) {
|
|
||||||
values.push(filter + or);
|
|
||||||
}
|
|
||||||
return values;
|
|
||||||
}
|
|
||||||
|
|
||||||
asOverpass(): string[] {
|
asOverpass(): string[] {
|
||||||
let allChoices: string[] = null;
|
let allChoices: string[] = null;
|
||||||
for (const andElement of this.and) {
|
for (const andElement of this.and) {
|
||||||
|
@ -288,7 +291,7 @@ export class And extends TagsFilter {
|
||||||
|
|
||||||
isUsableAsAnswer(): boolean {
|
isUsableAsAnswer(): boolean {
|
||||||
for (const t of this.and) {
|
for (const t of this.and) {
|
||||||
if(!t.isUsableAsAnswer()){
|
if (!t.isUsableAsAnswer()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -343,7 +346,6 @@ export class And extends TagsFilter {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export class TagUtils {
|
export class TagUtils {
|
||||||
static proprtiesToKV(properties: any): { k: string, v: string }[] {
|
static proprtiesToKV(properties: any): { k: string, v: string }[] {
|
||||||
const result = [];
|
const result = [];
|
||||||
|
@ -374,13 +376,13 @@ export class TagUtils {
|
||||||
/**
|
/**
|
||||||
* Given two hashes of {key --> values[]}, makes sure that every neededTag is present in availableTags
|
* Given two hashes of {key --> values[]}, makes sure that every neededTag is present in availableTags
|
||||||
*/
|
*/
|
||||||
static AllKeysAreContained(availableTags: any, neededTags: any){
|
static AllKeysAreContained(availableTags: any, neededTags: any) {
|
||||||
for (const neededKey in neededTags) {
|
for (const neededKey in neededTags) {
|
||||||
const availableValues : string[] = availableTags[neededKey]
|
const availableValues: string[] = availableTags[neededKey]
|
||||||
if(availableValues === undefined){
|
if (availableValues === undefined) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const neededValues : string[] = neededTags[neededKey];
|
const neededValues: string[] = neededTags[neededKey];
|
||||||
for (const neededValue of neededValues) {
|
for (const neededValue of neededValues) {
|
||||||
if (availableValues.indexOf(neededValue) < 0) {
|
if (availableValues.indexOf(neededValue) < 0) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -396,7 +398,7 @@ export class TagUtils {
|
||||||
* @param tagsFilters
|
* @param tagsFilters
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
static SplitKeys(tagsFilters: TagsFilter[]){
|
static SplitKeys(tagsFilters: TagsFilter[]) {
|
||||||
const keyValues = {} // Map string -> string[]
|
const keyValues = {} // Map string -> string[]
|
||||||
tagsFilters = [...tagsFilters] // copy all
|
tagsFilters = [...tagsFilters] // copy all
|
||||||
while (tagsFilters.length > 0) {
|
while (tagsFilters.length > 0) {
|
||||||
|
@ -425,6 +427,7 @@ export class TagUtils {
|
||||||
}
|
}
|
||||||
return keyValues;
|
return keyValues;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Given multiple tagsfilters which can be used as answer, will take the tags with the same keys together as set.
|
* Given multiple tagsfilters which can be used as answer, will take the tags with the same keys together as set.
|
||||||
* E.g:
|
* E.g:
|
||||||
|
@ -449,4 +452,21 @@ export class TagUtils {
|
||||||
return new And(and);
|
return new And(and);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static MatchesMultiAnswer(tag: TagsFilter, tags: any): boolean {
|
||||||
|
const splitted = TagUtils.SplitKeys([tag]);
|
||||||
|
for (const splitKey in splitted) {
|
||||||
|
const neededValues = splitted[splitKey];
|
||||||
|
if(tags[splitKey] === undefined) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const actualValue = tags[splitKey].split(";");
|
||||||
|
for (const neededValue of neededValues) {
|
||||||
|
if (actualValue.indexOf(neededValue) < 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,15 +1,49 @@
|
||||||
import {UIEventSource} from "../UIEventSource";
|
import {UIEventSource} from "../UIEventSource";
|
||||||
|
import {Utils} from "../../Utils";
|
||||||
|
|
||||||
export default class Hash {
|
export default class Hash {
|
||||||
|
|
||||||
public static Get() : UIEventSource<string>{
|
public static hash: UIEventSource<string> = Hash.Get();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the current string, including the pound sign
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
public static Current(): string {
|
||||||
|
if (Hash.hash.data === undefined || Hash.hash.data === "") {
|
||||||
|
return ""
|
||||||
|
} else {
|
||||||
|
return "#" + Hash.hash.data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Get(): UIEventSource<string> {
|
||||||
|
if (Utils.runningFromConsole) {
|
||||||
|
return new UIEventSource<string>(undefined);
|
||||||
|
}
|
||||||
const hash = new UIEventSource<string>(window.location.hash.substr(1));
|
const hash = new UIEventSource<string>(window.location.hash.substr(1));
|
||||||
hash.addCallback(h => {
|
hash.addCallback(h => {
|
||||||
|
if (h === "undefined") {
|
||||||
|
console.warn("Got a literal 'undefined' as hash, ignoring")
|
||||||
|
h = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (h === undefined || h === "") {
|
||||||
|
window.location.hash = "";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
h = h.replace(/\//g, "_");
|
h = h.replace(/\//g, "_");
|
||||||
return window.location.hash = "#" + h;
|
window.location.hash = "#" + h;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
window.onhashchange = () => {
|
window.onhashchange = () => {
|
||||||
hash.setData(window.location.hash.substr(1))
|
let newValue = window.location.hash.substr(1);
|
||||||
|
if (newValue === "") {
|
||||||
|
newValue = undefined;
|
||||||
|
}
|
||||||
|
hash.setData(newValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
return hash;
|
return hash;
|
||||||
|
|
|
@ -22,9 +22,13 @@ export class MangroveIdentity {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
try {
|
||||||
if ((mangroveIdentity.data ?? "") === "") {
|
if ((mangroveIdentity.data ?? "") === "") {
|
||||||
this.CreateIdentity();
|
this.CreateIdentity();
|
||||||
}
|
}
|
||||||
|
}catch(e){
|
||||||
|
console.error("Could not create identity: ", e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -43,11 +43,7 @@ export class QueryParameters {
|
||||||
private static Serialize() {
|
private static Serialize() {
|
||||||
const parts = []
|
const parts = []
|
||||||
for (const key of QueryParameters.order) {
|
for (const key of QueryParameters.order) {
|
||||||
if (QueryParameters.knownSources[key] === undefined || QueryParameters.knownSources[key].data === undefined) {
|
if (QueryParameters.knownSources[key]?.data === undefined) {
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (QueryParameters.knownSources[key].data === undefined) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,14 +51,15 @@ export class QueryParameters {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (QueryParameters.knownSources[key].data === QueryParameters.defaults[key]) {
|
||||||
if (QueryParameters.knownSources[key].data == QueryParameters.defaults[key]) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
parts.push(encodeURIComponent(key) + "=" + encodeURIComponent(QueryParameters.knownSources[key].data))
|
parts.push(encodeURIComponent(key) + "=" + encodeURIComponent(QueryParameters.knownSources[key].data))
|
||||||
}
|
}
|
||||||
history.replaceState(null, "", "?" + parts.join("&") + "#" + Hash.Get().data);
|
// Don't pollute the history every time a parameter changes
|
||||||
|
|
||||||
|
history.replaceState(null, "", "?" + parts.join("&") + Hash.Current());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import { Utils } from "../Utils";
|
import { Utils } from "../Utils";
|
||||||
|
|
||||||
export default class Constants {
|
export default class Constants {
|
||||||
public static vNumber = "0.3.0" +
|
|
||||||
"a";
|
public static vNumber = "0.4.7";
|
||||||
|
|
||||||
// The user journey states thresholds when a new feature gets unlocked
|
// The user journey states thresholds when a new feature gets unlocked
|
||||||
public static userJourney = {
|
public static userJourney = {
|
||||||
|
@ -15,7 +15,16 @@ export default class Constants {
|
||||||
themeGeneratorReadOnlyUnlock: 200,
|
themeGeneratorReadOnlyUnlock: 200,
|
||||||
themeGeneratorFullUnlock: 500,
|
themeGeneratorFullUnlock: 500,
|
||||||
addNewPointWithUnreadMessagesUnlock: 500,
|
addNewPointWithUnreadMessagesUnlock: 500,
|
||||||
minZoomLevelToAddNewPoints: (Utils.isRetina() ? 18 : 19)
|
minZoomLevelToAddNewPoints: (Constants.isRetina() ? 18 : 19)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private static isRetina(): boolean {
|
||||||
|
if (Utils.runningFromConsole) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// The cause for this line of code: https://github.com/pietervdvn/MapComplete/issues/115
|
||||||
|
// See https://stackoverflow.com/questions/19689715/what-is-the-best-way-to-detect-retina-support-on-a-device-using-javascript
|
||||||
|
return ((window.matchMedia && (window.matchMedia('only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx), only screen and (min-resolution: 75.6dpcm)').matches || window.matchMedia('only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min--moz-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2)').matches)) || (window.devicePixelRatio && window.devicePixelRatio >= 2));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
13
State.ts
|
@ -4,7 +4,6 @@ import {ElementStorage} from "./Logic/ElementStorage";
|
||||||
import {Changes} from "./Logic/Osm/Changes";
|
import {Changes} from "./Logic/Osm/Changes";
|
||||||
import {OsmConnection} from "./Logic/Osm/OsmConnection";
|
import {OsmConnection} from "./Logic/Osm/OsmConnection";
|
||||||
import Locale from "./UI/i18n/Locale";
|
import Locale from "./UI/i18n/Locale";
|
||||||
import Translations from "./UI/i18n/Translations";
|
|
||||||
import {UIEventSource} from "./Logic/UIEventSource";
|
import {UIEventSource} from "./Logic/UIEventSource";
|
||||||
import {LocalStorageSource} from "./Logic/Web/LocalStorageSource";
|
import {LocalStorageSource} from "./Logic/Web/LocalStorageSource";
|
||||||
import {QueryParameters} from "./Logic/Web/QueryParameters";
|
import {QueryParameters} from "./Logic/Web/QueryParameters";
|
||||||
|
@ -18,6 +17,7 @@ import Constants from "./Models/Constants";
|
||||||
|
|
||||||
import UpdateFromOverpass from "./Logic/Actors/UpdateFromOverpass";
|
import UpdateFromOverpass from "./Logic/Actors/UpdateFromOverpass";
|
||||||
import LayerConfig from "./Customizations/JSON/LayerConfig";
|
import LayerConfig from "./Customizations/JSON/LayerConfig";
|
||||||
|
import TitleHandler from "./Logic/Actors/TitleHandler";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Contains the global state: a bunch of UI-event sources
|
* Contains the global state: a bunch of UI-event sources
|
||||||
|
@ -75,7 +75,7 @@ export default class State {
|
||||||
/**
|
/**
|
||||||
This message is shown full screen on mobile devices
|
This message is shown full screen on mobile devices
|
||||||
*/
|
*/
|
||||||
public readonly fullScreenMessage = new UIEventSource<UIElement>(undefined)
|
public readonly fullScreenMessage = new UIEventSource<{ content: UIElement, hashText: string, titleText?: UIElement }>(undefined)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
The latest element that was selected - used to generate the right UI at the right place
|
The latest element that was selected - used to generate the right UI at the right place
|
||||||
|
@ -201,7 +201,7 @@ export default class State {
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
const h = Hash.Get();
|
const h = Hash.hash;
|
||||||
this.selectedElement.addCallback(selected => {
|
this.selectedElement.addCallback(selected => {
|
||||||
if (selected === undefined) {
|
if (selected === undefined) {
|
||||||
h.setData("");
|
h.setData("");
|
||||||
|
@ -240,12 +240,7 @@ export default class State {
|
||||||
}
|
}
|
||||||
}).ping()
|
}).ping()
|
||||||
|
|
||||||
this.layoutToUse.map((layoutToUse) => {
|
new TitleHandler(this.layoutToUse, this.fullScreenMessage);
|
||||||
return Translations.WT(layoutToUse?.title)?.txt ?? "MapComplete"
|
|
||||||
}, [Locale.language]
|
|
||||||
).addCallbackAndRun((title) => {
|
|
||||||
document.title = title
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
this.allElements = new ElementStorage();
|
this.allElements = new ElementStorage();
|
||||||
|
|
42
Svg.ts
|
@ -1,9 +1,12 @@
|
||||||
|
import Constants from "../../Models/Constants";
|
||||||
|
import {Utils} from "../../Utils";
|
||||||
|
|
||||||
export default class Img {
|
export default class Img {
|
||||||
|
|
||||||
public static runningFromConsole = false;
|
public static runningFromConsole = false;
|
||||||
|
|
||||||
static AsData(source:string){
|
static AsData(source:string){
|
||||||
if(this.runningFromConsole){
|
if(Utils.runningFromConsole){
|
||||||
return source;
|
return source;
|
||||||
}
|
}
|
||||||
return `data:image/svg+xml;base64,${(btoa(source))}`;
|
return `data:image/svg+xml;base64,${(btoa(source))}`;
|
||||||
|
|
|
@ -6,9 +6,11 @@ export default class LazyElement extends UIElement {
|
||||||
private _content: UIElement = undefined;
|
private _content: UIElement = undefined;
|
||||||
|
|
||||||
public Activate: () => void;
|
public Activate: () => void;
|
||||||
|
private _loadingContent: string;
|
||||||
|
|
||||||
constructor(content: (() => UIElement)) {
|
constructor(content: (() => UIElement), loadingContent = "Rendering...") {
|
||||||
super();
|
super();
|
||||||
|
this._loadingContent = loadingContent;
|
||||||
this.dumbMode = false;
|
this.dumbMode = false;
|
||||||
const self = this;
|
const self = this;
|
||||||
this.Activate = () => {
|
this.Activate = () => {
|
||||||
|
@ -21,7 +23,7 @@ export default class LazyElement extends UIElement {
|
||||||
|
|
||||||
InnerRender(): string {
|
InnerRender(): string {
|
||||||
if (this._content === undefined) {
|
if (this._content === undefined) {
|
||||||
return "Rendering...";
|
return this._loadingContent;
|
||||||
}
|
}
|
||||||
return this._content.InnerRender();
|
return this._content.InnerRender();
|
||||||
}
|
}
|
||||||
|
|
45
UI/Base/Ornament.ts
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
import {UIElement} from "../UIElement";
|
||||||
|
import {UIEventSource} from "../../Logic/UIEventSource";
|
||||||
|
import Svg from "../../Svg";
|
||||||
|
import State from "../../State";
|
||||||
|
|
||||||
|
export default class Ornament extends UIElement {
|
||||||
|
private static readonly ornamentsCount = Ornament.countOrnaments();
|
||||||
|
private readonly _index = new UIEventSource<string>("0")
|
||||||
|
|
||||||
|
constructor(index = undefined) {
|
||||||
|
super();
|
||||||
|
index = index ?? State.state.osmConnection.GetPreference("ornament");
|
||||||
|
this.ListenTo(index);
|
||||||
|
this._index = index;
|
||||||
|
this.SetClass("ornament")
|
||||||
|
const self = this;
|
||||||
|
this.onClick(() => {
|
||||||
|
let c = Number(index.data);
|
||||||
|
if(isNaN(c)){
|
||||||
|
c = 0;
|
||||||
|
}
|
||||||
|
self._index.setData(""+ ((c + 1) % (Ornament.ornamentsCount + 1)));
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private static countOrnaments() {
|
||||||
|
let ornamentCount = 0;
|
||||||
|
for (const key in Svg.All) {
|
||||||
|
if (key.startsWith("Ornament-Horiz-")) {
|
||||||
|
ornamentCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ornamentCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
InnerRender(): string {
|
||||||
|
if(this._index.data == "0"){
|
||||||
|
return "<svg></svg>"
|
||||||
|
}
|
||||||
|
console.log(this._index.data)
|
||||||
|
return Svg.All[`Ornament-Horiz-${Number(this._index.data) - 1}.svg`]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
38
UI/Base/ScrollableFullScreen.ts
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
import {UIElement} from "../UIElement";
|
||||||
|
import Svg from "../../Svg";
|
||||||
|
import State from "../../State";
|
||||||
|
import Combine from "./Combine";
|
||||||
|
import Ornament from "./Ornament";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wraps some contents into a panel that scrolls the content _under_ the title
|
||||||
|
*/
|
||||||
|
export default class ScrollableFullScreen extends UIElement {
|
||||||
|
private _component: Combine;
|
||||||
|
|
||||||
|
|
||||||
|
constructor(title: UIElement, content: UIElement) {
|
||||||
|
super();
|
||||||
|
const returnToTheMap = Svg.back_svg().onClick(() => {
|
||||||
|
State.state.fullScreenMessage.setData(undefined);
|
||||||
|
State.state.selectedElement.setData(undefined);
|
||||||
|
}).SetClass("only-on-mobile")
|
||||||
|
.SetClass("featureinfobox-back-to-the-map")
|
||||||
|
title.SetClass("featureinfobox-title")
|
||||||
|
const ornament = new Combine([new Ornament().SetStyle("height:5em;")]).SetClass("only-on-mobile")
|
||||||
|
|
||||||
|
this._component = new Combine([
|
||||||
|
new Combine([returnToTheMap, title]).SetClass("featureinfobox-titlebar"),
|
||||||
|
new Combine(["<span>",content,"</span>", ornament]).SetClass("featureinfobox-content"),
|
||||||
|
// We add an ornament which takes around 5em. This is in order to make sure the Web UI doesn't hide
|
||||||
|
])
|
||||||
|
this.SetClass("featureinfobox");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
InnerRender(): string {
|
||||||
|
return this._component.Render();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
import {UIElement} from "../UIElement";
|
import {UIElement} from "../UIElement";
|
||||||
import State from "../../State";
|
import State from "../../State";
|
||||||
import WelcomeMessage from "./WelcomeMessage";
|
import ThemeIntroductionPanel from "./ThemeIntroductionPanel";
|
||||||
import * as personal from "../../assets/themes/personalLayout/personalLayout.json";
|
import * as personal from "../../assets/themes/personalLayout/personalLayout.json";
|
||||||
import PersonalLayersPanel from "./PersonalLayersPanel";
|
import PersonalLayersPanel from "./PersonalLayersPanel";
|
||||||
import Svg from "../../Svg";
|
import Svg from "../../Svg";
|
||||||
|
@ -15,6 +15,8 @@ import {TabbedComponent} from "../Base/TabbedComponent";
|
||||||
import {UIEventSource} from "../../Logic/UIEventSource";
|
import {UIEventSource} from "../../Logic/UIEventSource";
|
||||||
import LayoutConfig from "../../Customizations/JSON/LayoutConfig";
|
import LayoutConfig from "../../Customizations/JSON/LayoutConfig";
|
||||||
import UserDetails from "../../Logic/Osm/OsmConnection";
|
import UserDetails from "../../Logic/Osm/OsmConnection";
|
||||||
|
import {FixedUiElement} from "../Base/FixedUiElement";
|
||||||
|
import CombinedInputElement from "../Input/CombinedInputElement";
|
||||||
|
|
||||||
export default class FullWelcomePaneWithTabs extends UIElement {
|
export default class FullWelcomePaneWithTabs extends UIElement {
|
||||||
private readonly _layoutToUse: UIEventSource<LayoutConfig>;
|
private readonly _layoutToUse: UIEventSource<LayoutConfig>;
|
||||||
|
@ -29,7 +31,7 @@ export default class FullWelcomePaneWithTabs extends UIElement {
|
||||||
|
|
||||||
|
|
||||||
const layoutToUse = this._layoutToUse.data;
|
const layoutToUse = this._layoutToUse.data;
|
||||||
let welcome: UIElement = new WelcomeMessage();
|
let welcome: UIElement = new ThemeIntroductionPanel();
|
||||||
if (layoutToUse.id === personal.id) {
|
if (layoutToUse.id === personal.id) {
|
||||||
welcome = new PersonalLayersPanel();
|
welcome = new PersonalLayersPanel();
|
||||||
}
|
}
|
||||||
|
@ -66,10 +68,18 @@ export default class FullWelcomePaneWithTabs extends UIElement {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
this._component = new TabbedComponent(tabs, State.state.welcomeMessageOpenedTab)
|
const tabbedPart = new TabbedComponent(tabs, State.state.welcomeMessageOpenedTab)
|
||||||
.ListenTo(this._userDetails);
|
.ListenTo(this._userDetails);
|
||||||
|
|
||||||
|
const backButton = new Combine([
|
||||||
|
new Combine([Translations.t.general.returnToTheMap.Clone().SetClass("to-the-map")])
|
||||||
|
.SetClass("to-the-map-inner")
|
||||||
|
|
||||||
|
]).SetClass("only-on-mobile")
|
||||||
|
.onClick(() => State.state.fullScreenMessage.setData(undefined));
|
||||||
|
|
||||||
|
tabbedPart.SetStyle("overflow-y: auto; max-height: calc( 100vh - 4em);display:block;")
|
||||||
|
this._component = new Combine([tabbedPart, backButton]).SetStyle("width:100%;");
|
||||||
}
|
}
|
||||||
|
|
||||||
InnerRender(): string {
|
InnerRender(): string {
|
||||||
|
|
|
@ -3,14 +3,17 @@ import State from "../../State";
|
||||||
import BackgroundSelector from "./BackgroundSelector";
|
import BackgroundSelector from "./BackgroundSelector";
|
||||||
import LayerSelection from "./LayerSelection";
|
import LayerSelection from "./LayerSelection";
|
||||||
import Combine from "../Base/Combine";
|
import Combine from "../Base/Combine";
|
||||||
|
import {FixedUiElement} from "../Base/FixedUiElement";
|
||||||
|
import ScrollableFullScreen from "../Base/ScrollableFullScreen";
|
||||||
|
import Translations from "../i18n/Translations";
|
||||||
|
|
||||||
export default class LayerControlPanel extends UIElement{
|
export default class LayerControlPanel extends UIElement {
|
||||||
private readonly _panel: UIElement;
|
private readonly _panel: UIElement;
|
||||||
|
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
let layerControlPanel: UIElement = undefined;
|
let layerControlPanel: UIElement = new FixedUiElement("");
|
||||||
if (State.state.layoutToUse.data.enableBackgroundLayerSelection) {
|
if (State.state.layoutToUse.data.enableBackgroundLayerSelection) {
|
||||||
layerControlPanel = new BackgroundSelector();
|
layerControlPanel = new BackgroundSelector();
|
||||||
layerControlPanel.SetStyle("margin:1em");
|
layerControlPanel.SetStyle("margin:1em");
|
||||||
|
@ -20,10 +23,15 @@ export default class LayerControlPanel extends UIElement{
|
||||||
|
|
||||||
if (State.state.filteredLayers.data.length > 1) {
|
if (State.state.filteredLayers.data.length > 1) {
|
||||||
const layerSelection = new LayerSelection();
|
const layerSelection = new LayerSelection();
|
||||||
layerSelection.onClick(() => { });
|
layerSelection.onClick(() => {
|
||||||
|
});
|
||||||
layerControlPanel = new Combine([layerSelection, "<br/>", layerControlPanel]);
|
layerControlPanel = new Combine([layerSelection, "<br/>", layerControlPanel]);
|
||||||
}
|
}
|
||||||
this._panel = layerControlPanel;
|
|
||||||
|
|
||||||
|
const title =Translations.t.general.layerSelection.title.SetClass("featureinfobox-title")
|
||||||
|
|
||||||
|
this._panel = new ScrollableFullScreen(title, layerControlPanel);
|
||||||
}
|
}
|
||||||
|
|
||||||
InnerRender(): string {
|
InnerRender(): string {
|
||||||
|
|
|
@ -7,6 +7,9 @@ import Combine from "../Base/Combine";
|
||||||
import {FixedUiElement} from "../Base/FixedUiElement";
|
import {FixedUiElement} from "../Base/FixedUiElement";
|
||||||
import Translations from "../i18n/Translations";
|
import Translations from "../i18n/Translations";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shows the panel with all layers and a toggle for each of them
|
||||||
|
*/
|
||||||
export default class LayerSelection extends UIElement {
|
export default class LayerSelection extends UIElement {
|
||||||
|
|
||||||
private readonly _checkboxes: UIElement[];
|
private readonly _checkboxes: UIElement[];
|
||||||
|
@ -33,7 +36,7 @@ export default class LayerSelection extends UIElement {
|
||||||
|
|
||||||
const zoomStatus = new VariableUiElement(State.state.locationControl.map(location => {
|
const zoomStatus = new VariableUiElement(State.state.locationControl.map(location => {
|
||||||
if (location.zoom < layer.layerDef.minzoom) {
|
if (location.zoom < layer.layerDef.minzoom) {
|
||||||
return Translations.t.general.zoomInToSeeThisLayer
|
return Translations.t.general.layerSelection.zoomInToSeeThisLayer
|
||||||
.SetClass("alert")
|
.SetClass("alert")
|
||||||
.SetStyle("display: block ruby;width:min-content;")
|
.SetStyle("display: block ruby;width:min-content;")
|
||||||
.Render();
|
.Render();
|
||||||
|
@ -41,9 +44,12 @@ export default class LayerSelection extends UIElement {
|
||||||
return ""
|
return ""
|
||||||
}))
|
}))
|
||||||
const style = "display:flex;align-items:center;"
|
const style = "display:flex;align-items:center;"
|
||||||
|
const styleWhole = "display:flex; flex-wrap: wrap"
|
||||||
this._checkboxes.push(new CheckBox(
|
this._checkboxes.push(new CheckBox(
|
||||||
new Combine([icon, name, zoomStatus]).SetStyle(style),
|
new Combine([new Combine([icon, name]).SetStyle(style), zoomStatus])
|
||||||
new Combine([iconUnselected, "<del>", name, "</del>", zoomStatus]).SetStyle(style),
|
.SetStyle(styleWhole),
|
||||||
|
new Combine([new Combine([iconUnselected, "<del>", name, "</del>"]).SetStyle(style), zoomStatus])
|
||||||
|
.SetStyle(styleWhole),
|
||||||
layer.isDisplayed)
|
layer.isDisplayed)
|
||||||
.SetStyle("margin:0.3em;")
|
.SetStyle("margin:0.3em;")
|
||||||
);
|
);
|
||||||
|
|
|
@ -40,15 +40,22 @@ export default class MoreScreen extends UIElement {
|
||||||
}
|
}
|
||||||
|
|
||||||
const currentLocation = State.state.locationControl.data;
|
const currentLocation = State.state.locationControl.data;
|
||||||
|
let path = window.location.pathname;
|
||||||
|
// Path starts with a '/' and contains everything, e.g. '/dir/dir/page.html'
|
||||||
|
path = path.substr(0, path.lastIndexOf("/"));
|
||||||
|
// Path will now contain '/dir/dir', or empty string in case of nothing
|
||||||
|
if(path === ""){
|
||||||
|
path = "."
|
||||||
|
}
|
||||||
let linkText =
|
let linkText =
|
||||||
`./${layout.id.toLowerCase()}.html?z=${currentLocation.zoom}&lat=${currentLocation.lat}&lon=${currentLocation.lon}`
|
`${path}/${layout.id.toLowerCase()}?z=${currentLocation.zoom}&lat=${currentLocation.lat}&lon=${currentLocation.lon}`
|
||||||
|
|
||||||
if (location.hostname === "localhost" || location.hostname === "127.0.0.1") {
|
if (location.hostname === "localhost" || location.hostname === "127.0.0.1") {
|
||||||
linkText = `./index.html?layout=${layout.id}&z=${currentLocation.zoom}&lat=${currentLocation.lat}&lon=${currentLocation.lon}`
|
linkText = `${path}/index.html?layout=${layout.id}&z=${currentLocation.zoom}&lat=${currentLocation.lat}&lon=${currentLocation.lon}`
|
||||||
}
|
}
|
||||||
|
|
||||||
if (customThemeDefinition) {
|
if (customThemeDefinition) {
|
||||||
linkText = `./index.html?userlayout=${layout.id}&z=${currentLocation.zoom}&lat=${currentLocation.lat}&lon=${currentLocation.lon}#${customThemeDefinition}`
|
linkText = `${path}/?userlayout=${layout.id}&z=${currentLocation.zoom}&lat=${currentLocation.lat}&lon=${currentLocation.lon}#${customThemeDefinition}`
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ import State from "../../State";
|
||||||
import {TextField} from "../Input/TextField";
|
import {TextField} from "../Input/TextField";
|
||||||
import {Geocoding} from "../../Logic/Osm/Geocoding";
|
import {Geocoding} from "../../Logic/Osm/Geocoding";
|
||||||
import Translations from "../i18n/Translations";
|
import Translations from "../i18n/Translations";
|
||||||
|
import Hash from "../../Logic/Web/Hash";
|
||||||
|
|
||||||
export default class SearchAndGo extends UIElement {
|
export default class SearchAndGo extends UIElement {
|
||||||
|
|
||||||
|
@ -61,11 +62,14 @@ export default class SearchAndGo extends UIElement {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const bb = result[0].boundingbox;
|
const poi = result[0];
|
||||||
|
const bb = poi.boundingbox;
|
||||||
const bounds: [[number, number], [number, number]] = [
|
const bounds: [[number, number], [number, number]] = [
|
||||||
[bb[0], bb[2]],
|
[bb[0], bb[2]],
|
||||||
[bb[1], bb[3]]
|
[bb[1], bb[3]]
|
||||||
]
|
]
|
||||||
|
State.state.selectedElement. setData(undefined);
|
||||||
|
Hash.hash.setData(poi.osm_type+"_"+poi.osm_id);
|
||||||
State.state.leafletMap.data.fitBounds(bounds);
|
State.state.leafletMap.data.fitBounds(bounds);
|
||||||
self._placeholder.setData(Translations.t.general.search.search);
|
self._placeholder.setData(Translations.t.general.search.search);
|
||||||
},
|
},
|
||||||
|
|
|
@ -147,13 +147,15 @@ export default class ShareScreen extends UIElement {
|
||||||
const url = (currentLocation ?? new UIEventSource(undefined)).map(() => {
|
const url = (currentLocation ?? new UIEventSource(undefined)).map(() => {
|
||||||
|
|
||||||
const host = window.location.host;
|
const host = window.location.host;
|
||||||
let literalText = `https://${host}/${layout.id.toLowerCase()}.html`
|
let path = window.location.pathname;
|
||||||
|
path = path.substr(0, path.lastIndexOf("/"));
|
||||||
|
let literalText = `https://${host}${path}/${layout.id.toLowerCase()}`
|
||||||
|
|
||||||
const parts = Utils.NoEmpty(Utils.NoNull(optionParts.map((eventSource) => eventSource.data)));
|
const parts = Utils.NoEmpty(Utils.NoNull(optionParts.map((eventSource) => eventSource.data)));
|
||||||
|
|
||||||
let hash = "";
|
let hash = "";
|
||||||
if (layoutDefinition !== undefined) {
|
if (layoutDefinition !== undefined) {
|
||||||
literalText = `https://${host}/index.html`
|
literalText = `https://${host}${path}/`
|
||||||
if (layout.id.startsWith("wiki:")) {
|
if (layout.id.startsWith("wiki:")) {
|
||||||
parts.push("userlayout=" + encodeURIComponent(layout.id))
|
parts.push("userlayout=" + encodeURIComponent(layout.id))
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -13,47 +13,175 @@ import {FixedUiElement} from "../Base/FixedUiElement";
|
||||||
import Translations from "../i18n/Translations";
|
import Translations from "../i18n/Translations";
|
||||||
import Constants from "../../Models/Constants";
|
import Constants from "../../Models/Constants";
|
||||||
import LayerConfig from "../../Customizations/JSON/LayerConfig";
|
import LayerConfig from "../../Customizations/JSON/LayerConfig";
|
||||||
|
import ScrollableFullScreen from "../Base/ScrollableFullScreen";
|
||||||
|
|
||||||
export default class SimpleAddUI extends UIElement {
|
export default class SimpleAddUI extends UIElement {
|
||||||
private readonly _addButtons: UIElement[];
|
private readonly _loginButton: UIElement;
|
||||||
|
|
||||||
private _loginButton : UIElement;
|
private readonly _confirmPreset: UIEventSource<{
|
||||||
|
|
||||||
private _confirmPreset: UIEventSource<{
|
|
||||||
description: string | UIElement,
|
description: string | UIElement,
|
||||||
name: string | UIElement,
|
name: string | UIElement,
|
||||||
icon: UIElement,
|
icon: UIElement,
|
||||||
tags: Tag[],
|
tags: Tag[],
|
||||||
layerToAddTo: {
|
layerToAddTo: {
|
||||||
layerDef: LayerConfig,
|
layerDef: LayerConfig,
|
||||||
isDisplayed: UIEventSource<boolean> }
|
isDisplayed: UIEventSource<boolean>
|
||||||
|
}
|
||||||
}>
|
}>
|
||||||
= new UIEventSource(undefined);
|
= new UIEventSource(undefined);
|
||||||
private confirmButton: UIElement = undefined;
|
|
||||||
private _confirmDescription: UIElement = undefined;
|
private _component: UIElement;
|
||||||
private openLayerControl: UIElement;
|
|
||||||
private cancelButton: UIElement;
|
private readonly openLayerControl: UIElement;
|
||||||
private goToInboxButton: UIElement = new SubtleButton(Svg.envelope_ui(),
|
private readonly cancelButton: UIElement;
|
||||||
Translations.t.general.goToInbox, {url:"https://www.openstreetmap.org/messages/inbox", newTab: false});
|
private readonly goToInboxButton: UIElement = new SubtleButton(Svg.envelope_ui(),
|
||||||
|
Translations.t.general.goToInbox, {url: "https://www.openstreetmap.org/messages/inbox", newTab: false});
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super(State.state.locationControl);
|
super(State.state.locationControl.map(loc => loc.zoom));
|
||||||
|
const self = this;
|
||||||
this.ListenTo(Locale.language);
|
this.ListenTo(Locale.language);
|
||||||
this.ListenTo(State.state.osmConnection.userDetails);
|
this.ListenTo(State.state.osmConnection.userDetails);
|
||||||
this.ListenTo(State.state.layerUpdater.runningQuery);
|
this.ListenTo(State.state.layerUpdater.runningQuery);
|
||||||
this.ListenTo(this._confirmPreset);
|
this.ListenTo(this._confirmPreset);
|
||||||
this.ListenTo(State.state.locationControl);
|
this.ListenTo(State.state.locationControl);
|
||||||
|
State.state.filteredLayers.data?.map(layer => {
|
||||||
|
self.ListenTo(layer.isDisplayed)
|
||||||
|
})
|
||||||
|
|
||||||
this._loginButton = Translations.t.general.add.pleaseLogin.Clone().onClick(() => State.state.osmConnection.AttemptLogin());
|
this._loginButton = Translations.t.general.add.pleaseLogin.Clone().onClick(() => State.state.osmConnection.AttemptLogin());
|
||||||
|
|
||||||
this._addButtons = [];
|
|
||||||
this.SetStyle("font-size:large");
|
this.SetStyle("font-size:large");
|
||||||
|
this.cancelButton = new SubtleButton(Svg.close_ui(),
|
||||||
|
Translations.t.general.cancel
|
||||||
|
).onClick(() => {
|
||||||
|
self._confirmPreset.setData(undefined);
|
||||||
|
})
|
||||||
|
|
||||||
|
this.openLayerControl = new SubtleButton(Svg.layers_ui(),
|
||||||
|
Translations.t.general.add.openLayerControl
|
||||||
|
).onClick(() => {
|
||||||
|
State.state.fullScreenMessage.setData(undefined);
|
||||||
|
State.state.layerControlIsOpened.setData(true);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
InnerRender(): string {
|
||||||
|
|
||||||
|
this._component = new ScrollableFullScreen(
|
||||||
|
Translations.t.general.add.title,
|
||||||
|
this.CreateContent()
|
||||||
|
)
|
||||||
|
return this._component.Render();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private CreatePresetsPanel(): UIElement {
|
||||||
|
const userDetails = State.state.osmConnection.userDetails;
|
||||||
|
if (userDetails === undefined) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!userDetails.data.loggedIn) {
|
||||||
|
return this._loginButton;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (userDetails.data.unreadMessages > 0 && userDetails.data.csCount < Constants.userJourney.addNewPointWithUnreadMessagesUnlock) {
|
||||||
|
return new Combine([
|
||||||
|
Translations.t.general.readYourMessages.Clone().SetClass("alert"),
|
||||||
|
this.goToInboxButton
|
||||||
|
]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (userDetails.data.csCount < Constants.userJourney.addNewPointsUnlock) {
|
||||||
|
return new Combine(["<span class='alert'>",
|
||||||
|
Translations.t.general.fewChangesBefore,
|
||||||
|
"</span>"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (State.state.locationControl.data.zoom < Constants.userJourney.minZoomLevelToAddNewPoints) {
|
||||||
|
return Translations.t.general.add.zoomInFurther.SetClass("alert")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (State.state.layerUpdater.runningQuery.data) {
|
||||||
|
return Translations.t.general.add.stillLoading
|
||||||
|
}
|
||||||
|
|
||||||
|
const presetButtons = this.CreatePresetButtons()
|
||||||
|
return new Combine(presetButtons).SetClass("add-popup-all-buttons")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private CreateContent(): UIElement {
|
||||||
|
const confirmPanel = this.CreateConfirmPanel();
|
||||||
|
if (confirmPanel !== undefined) {
|
||||||
|
return confirmPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
let intro: UIElement = Translations.t.general.add.intro;
|
||||||
|
|
||||||
|
let testMode: UIElement = undefined;
|
||||||
|
if (State.state.osmConnection?.userDetails?.data?.dryRun) {
|
||||||
|
testMode = new Combine([
|
||||||
|
"<span class='alert'>",
|
||||||
|
"Test mode - changes won't be saved",
|
||||||
|
"</span>"
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
let presets = this.CreatePresetsPanel();
|
||||||
|
return new Combine([intro, testMode, presets])
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private CreateConfirmPanel(): UIElement {
|
||||||
|
const preset = this._confirmPreset.data;
|
||||||
|
if (preset === undefined) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
const confirmButton = new SubtleButton(preset.icon,
|
||||||
|
new Combine([
|
||||||
|
"<b>",
|
||||||
|
Translations.t.general.add.confirmButton.Subs({category: preset.name}),
|
||||||
|
"</b>"]));
|
||||||
|
confirmButton.onClick(this.CreatePoint(preset.tags));
|
||||||
|
|
||||||
|
if (!this._confirmPreset.data.layerToAddTo.isDisplayed.data) {
|
||||||
|
return new Combine([
|
||||||
|
Translations.t.general.add.layerNotEnabled.Subs({layer: this._confirmPreset.data.layerToAddTo.layerDef.name})
|
||||||
|
.SetClass("alert"),
|
||||||
|
this.openLayerControl,
|
||||||
|
|
||||||
|
this.cancelButton
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
let tagInfo = "";
|
||||||
|
const csCount = State.state.osmConnection.userDetails.data.csCount;
|
||||||
|
if (csCount > Constants.userJourney.tagsVisibleAt) {
|
||||||
|
tagInfo = this._confirmPreset.data.tags.map(t => t.asHumanString(csCount > Constants.userJourney.tagsVisibleAndWikiLinked, true)).join("&");
|
||||||
|
tagInfo = `<br/>More information about the preset: ${tagInfo}`
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Combine([
|
||||||
|
Translations.t.general.add.confirmIntro.Subs({title: this._confirmPreset.data.name}),
|
||||||
|
State.state.osmConnection.userDetails.data.dryRun ? "<span class='alert'>TESTING - changes won't be saved</span>" : "",
|
||||||
|
confirmButton,
|
||||||
|
this.cancelButton,
|
||||||
|
preset.description,
|
||||||
|
tagInfo
|
||||||
|
|
||||||
|
])
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private CreatePresetButtons() {
|
||||||
|
const allButtons = [];
|
||||||
const self = this;
|
const self = this;
|
||||||
for (const layer of State.state.filteredLayers.data) {
|
for (const layer of State.state.filteredLayers.data) {
|
||||||
|
|
||||||
this.ListenTo(layer.isDisplayed);
|
|
||||||
|
|
||||||
const presets = layer.layerDef.presets;
|
const presets = layer.layerDef.presets;
|
||||||
for (const preset of presets) {
|
for (const preset of presets) {
|
||||||
const tags = TagUtils.KVtoProperties(preset.tags ?? []);
|
const tags = TagUtils.KVtoProperties(preset.tags ?? []);
|
||||||
|
@ -77,13 +205,6 @@ export default class SimpleAddUI extends UIElement {
|
||||||
])
|
])
|
||||||
).onClick(
|
).onClick(
|
||||||
() => {
|
() => {
|
||||||
self.confirmButton = new SubtleButton(icon,
|
|
||||||
new Combine([
|
|
||||||
"<b>",
|
|
||||||
Translations.t.general.add.confirmButton.Subs({category: preset.title}),
|
|
||||||
"</b>"]));
|
|
||||||
self.confirmButton.onClick(self.CreatePoint(preset.tags));
|
|
||||||
self._confirmDescription = preset.description;
|
|
||||||
self._confirmPreset.setData({
|
self._confirmPreset.setData({
|
||||||
tags: preset.tags,
|
tags: preset.tags,
|
||||||
layerToAddTo: layer,
|
layerToAddTo: layer,
|
||||||
|
@ -94,23 +215,10 @@ export default class SimpleAddUI extends UIElement {
|
||||||
self.Update();
|
self.Update();
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
allButtons.push(button);
|
||||||
|
|
||||||
this._addButtons.push(button);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return allButtons;
|
||||||
this.cancelButton = new SubtleButton(Svg.close_ui(),
|
|
||||||
Translations.t.general.cancel
|
|
||||||
).onClick(() => {
|
|
||||||
self._confirmPreset.setData(undefined);
|
|
||||||
})
|
|
||||||
|
|
||||||
this.openLayerControl = new SubtleButton(Svg.layers_ui(),
|
|
||||||
Translations.t.general.add.openLayerControl
|
|
||||||
).onClick(() => {
|
|
||||||
State.state.layerControlIsOpened.setData(true);
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private CreatePoint(tags: Tag[]) {
|
private CreatePoint(tags: Tag[]) {
|
||||||
|
@ -121,86 +229,5 @@ export default class SimpleAddUI extends UIElement {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
InnerRender(): string {
|
|
||||||
|
|
||||||
const userDetails = State.state.osmConnection.userDetails;
|
|
||||||
|
|
||||||
if (this._confirmPreset.data !== undefined) {
|
|
||||||
|
|
||||||
if(!this._confirmPreset.data.layerToAddTo.isDisplayed.data){
|
|
||||||
return new Combine([
|
|
||||||
Translations.t.general.add.layerNotEnabled.Subs({layer: this._confirmPreset.data.layerToAddTo.layerDef.name})
|
|
||||||
.SetClass("alert"),
|
|
||||||
this.openLayerControl,
|
|
||||||
|
|
||||||
this.cancelButton
|
|
||||||
]).Render();
|
|
||||||
}
|
|
||||||
|
|
||||||
let tagInfo = "";
|
|
||||||
const csCount = State.state.osmConnection.userDetails.data.csCount;
|
|
||||||
if (csCount > Constants.userJourney.tagsVisibleAt) {
|
|
||||||
tagInfo = this._confirmPreset.data .tags.map(t => t.asHumanString(csCount > Constants.userJourney.tagsVisibleAndWikiLinked, true)).join("&");
|
|
||||||
tagInfo = `<br/>More information about the preset: ${tagInfo}`
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Combine([
|
|
||||||
Translations.t.general.add.confirmIntro.Subs({title: this._confirmPreset.data.name}),
|
|
||||||
userDetails.data.dryRun ? "<span class='alert'>TESTING - changes won't be saved</span>" : "",
|
|
||||||
this.confirmButton,
|
|
||||||
this.cancelButton,
|
|
||||||
this._confirmDescription,
|
|
||||||
tagInfo
|
|
||||||
|
|
||||||
]).Render();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
let header: UIElement = Translations.t.general.add.header;
|
|
||||||
|
|
||||||
|
|
||||||
if (userDetails === undefined) {
|
|
||||||
return header.Render();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!userDetails.data.loggedIn) {
|
|
||||||
return new Combine([header, this._loginButton]).Render()
|
|
||||||
}
|
|
||||||
|
|
||||||
if (userDetails.data.unreadMessages > 0 && userDetails.data.csCount < Constants.userJourney.addNewPointWithUnreadMessagesUnlock) {
|
|
||||||
return new Combine([header,
|
|
||||||
Translations.t.general.readYourMessages.Clone().SetClass("alert"),
|
|
||||||
this.goToInboxButton
|
|
||||||
]).Render();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (userDetails.data.dryRun) {
|
|
||||||
header = new Combine([header,
|
|
||||||
"<span class='alert'>",
|
|
||||||
"Test mode - changes won't be saved",
|
|
||||||
"</span>"
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (userDetails.data.csCount < Constants.userJourney.addNewPointsUnlock) {
|
|
||||||
return new Combine([header, "<span class='alert'>",
|
|
||||||
Translations.t.general.fewChangesBefore,
|
|
||||||
"</span>"]).Render();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (State.state.locationControl.data.zoom < Constants.userJourney.minZoomLevelToAddNewPoints) {
|
|
||||||
return new Combine([header, Translations.t.general.add.zoomInFurther.SetClass("alert")]).Render()
|
|
||||||
}
|
|
||||||
|
|
||||||
if (State.state.layerUpdater.runningQuery.data) {
|
|
||||||
return new Combine([header, Translations.t.general.add.stillLoading]).Render()
|
|
||||||
}
|
|
||||||
|
|
||||||
return header.Render() + new Combine(this._addButtons).SetClass("add-popup-all-buttons").Render();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -4,15 +4,16 @@ import State from "../../State";
|
||||||
import Combine from "../Base/Combine";
|
import Combine from "../Base/Combine";
|
||||||
import LanguagePicker from "../LanguagePicker";
|
import LanguagePicker from "../LanguagePicker";
|
||||||
import Translations from "../i18n/Translations";
|
import Translations from "../i18n/Translations";
|
||||||
|
import {VariableUiElement} from "../Base/VariableUIElement";
|
||||||
|
|
||||||
|
export default class ThemeIntroductionPanel extends UIElement {
|
||||||
export default class WelcomeMessage extends UIElement {
|
|
||||||
private languagePicker: UIElement;
|
private languagePicker: UIElement;
|
||||||
|
|
||||||
private readonly description: UIElement;
|
private readonly description: UIElement;
|
||||||
private readonly plzLogIn: UIElement;
|
private readonly plzLogIn: UIElement;
|
||||||
private readonly welcomeBack: UIElement;
|
private readonly welcomeBack: UIElement;
|
||||||
private readonly tail: UIElement;
|
private readonly tail: UIElement;
|
||||||
|
private readonly loginStatus: UIElement;
|
||||||
|
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@ -32,20 +33,24 @@ export default class WelcomeMessage extends UIElement {
|
||||||
});
|
});
|
||||||
this.welcomeBack = Translations.t.general.welcomeBack;
|
this.welcomeBack = Translations.t.general.welcomeBack;
|
||||||
this.tail = layout.descriptionTail;
|
this.tail = layout.descriptionTail;
|
||||||
|
this.loginStatus = new VariableUiElement(
|
||||||
|
State.state.osmConnection.userDetails.map(
|
||||||
|
userdetails => {
|
||||||
|
if (State.state.featureSwitchUserbadge.data) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return (userdetails.loggedIn ? this.welcomeBack : this.plzLogIn).Render();
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
InnerRender(): string {
|
InnerRender(): string {
|
||||||
|
|
||||||
let loginStatus = undefined;
|
|
||||||
if (State.state.featureSwitchUserbadge.data) {
|
|
||||||
loginStatus = (State.state.osmConnection.userDetails.data.loggedIn ? this.welcomeBack :
|
|
||||||
this.plzLogIn);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Combine([
|
return new Combine([
|
||||||
this.description,
|
this.description,
|
||||||
"<br/><br/>",
|
"<br/><br/>",
|
||||||
loginStatus,
|
this.loginStatus,
|
||||||
this.tail,
|
this.tail,
|
||||||
"<br/>",
|
"<br/>",
|
||||||
this.languagePicker
|
this.languagePicker
|
|
@ -68,7 +68,7 @@ export default class AllLayersPanel extends UIElement {
|
||||||
const layer = config.layers[i];
|
const layer = config.layers[i];
|
||||||
if (typeof layer !== "string") {
|
if (typeof layer !== "string") {
|
||||||
try {
|
try {
|
||||||
const iconTagRendering = new TagRenderingConfig(layer.icon, "icon")
|
const iconTagRendering = new TagRenderingConfig(layer.icon, undefined, "icon")
|
||||||
const icon = iconTagRendering.GetRenderValue({"id": "node/-1"}).txt;
|
const icon = iconTagRendering.GetRenderValue({"id": "node/-1"}).txt;
|
||||||
return `<img src='${icon}'>`
|
return `<img src='${icon}'>`
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
@ -111,7 +111,7 @@ export default class TagRenderingPanel extends InputElement<TagRenderingConfigJs
|
||||||
|
|
||||||
this.validText = new VariableUiElement(value.map((json: TagRenderingConfigJson) => {
|
this.validText = new VariableUiElement(value.map((json: TagRenderingConfigJson) => {
|
||||||
try{
|
try{
|
||||||
new TagRenderingConfig(json, options?.title ?? "");
|
new TagRenderingConfig(json,undefined, options?.title ?? "");
|
||||||
return "";
|
return "";
|
||||||
}catch(e){
|
}catch(e){
|
||||||
return "<span class='alert'>"+e+"</span>"
|
return "<span class='alert'>"+e+"</span>"
|
||||||
|
|
|
@ -40,7 +40,7 @@ export default class TagRenderingPreview extends UIElement {
|
||||||
rendering =
|
rendering =
|
||||||
new VariableUiElement(es.map(tagRenderingConfig => {
|
new VariableUiElement(es.map(tagRenderingConfig => {
|
||||||
try {
|
try {
|
||||||
const tr = new EditableTagRendering(self.previewTagValue, new TagRenderingConfig(tagRenderingConfig, "preview"));
|
const tr = new EditableTagRendering(self.previewTagValue, new TagRenderingConfig(tagRenderingConfig, undefined,"preview"));
|
||||||
return tr.Render();
|
return tr.Render();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return new Combine(["Could not show this tagrendering:", e.message]).Render();
|
return new Combine(["Could not show this tagrendering:", e.message]).Render();
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import {UIElement} from "./UIElement";
|
import {UIElement} from "./UIElement";
|
||||||
import Translations from "./i18n/Translations";
|
|
||||||
import State from "../State";
|
import State from "../State";
|
||||||
import Combine from "./Base/Combine";
|
import Combine from "./Base/Combine";
|
||||||
|
|
||||||
|
@ -8,24 +7,11 @@ import Combine from "./Base/Combine";
|
||||||
*/
|
*/
|
||||||
export default class FullScreenMessageBox extends UIElement {
|
export default class FullScreenMessageBox extends UIElement {
|
||||||
|
|
||||||
private readonly returnToTheMap: UIElement;
|
|
||||||
private _content: UIElement;
|
private _content: UIElement;
|
||||||
|
|
||||||
constructor(onClear: (() => void)) {
|
constructor() {
|
||||||
super(State.state.fullScreenMessage);
|
super(State.state.fullScreenMessage);
|
||||||
this.HideOnEmpty(true);
|
this.HideOnEmpty(true);
|
||||||
|
|
||||||
this.returnToTheMap =
|
|
||||||
new Combine([
|
|
||||||
// Wrapped another time to prevent the value of 'em' to fluctuate
|
|
||||||
Translations.t.general.returnToTheMap.Clone()
|
|
||||||
])
|
|
||||||
.onClick(() => {
|
|
||||||
State.state.fullScreenMessage.setData(undefined);
|
|
||||||
onClear();
|
|
||||||
})
|
|
||||||
.SetClass("to-the-map")
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -33,18 +19,15 @@ export default class FullScreenMessageBox extends UIElement {
|
||||||
if (State.state.fullScreenMessage.data === undefined) {
|
if (State.state.fullScreenMessage.data === undefined) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
this._content = State.state.fullScreenMessage.data;
|
this._content = State.state.fullScreenMessage.data.content;
|
||||||
const innerWrap = new Combine([this._content]).SetClass("fullscreenmessage-content")
|
return new Combine([this._content]).SetClass("fullscreenmessage-content").Render();
|
||||||
|
|
||||||
return new Combine([innerWrap, this.returnToTheMap])
|
|
||||||
.SetStyle("display:block; height: 100%;")
|
|
||||||
.Render();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected InnerUpdate(htmlElement: HTMLElement) {
|
protected InnerUpdate(htmlElement: HTMLElement) {
|
||||||
super.InnerUpdate(htmlElement);
|
super.InnerUpdate(htmlElement);
|
||||||
|
// This is a bit out of place, and it is a fix specifically for the featureinfobox-titlebar
|
||||||
const height = htmlElement.getElementsByClassName("featureinfobox-titlebar")[0]?.clientHeight ?? 0;
|
const height = htmlElement.getElementsByClassName("featureinfobox-titlebar")[0]?.clientHeight ?? 0;
|
||||||
htmlElement.style.setProperty("--variable-title-height", height+"px")
|
htmlElement.style.setProperty("--variable-title-height", height + "px")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -196,8 +196,8 @@ export default class OpeningHoursVisualization extends UIElement {
|
||||||
// Closed!
|
// Closed!
|
||||||
const opensAtDate = oh.getNextChange();
|
const opensAtDate = oh.getNextChange();
|
||||||
if(opensAtDate === undefined){
|
if(opensAtDate === undefined){
|
||||||
const comm = oh.getComment();
|
const comm = oh.getComment() ?? oh.getUnknown();
|
||||||
if(comm !== undefined){
|
if(!!comm){
|
||||||
return new FixedUiElement(comm).SetClass("ohviz-closed").Render();
|
return new FixedUiElement(comm).SetClass("ohviz-closed").Render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ import {OH} from "./OpeningHours";
|
||||||
import {InputElement} from "../Input/InputElement";
|
import {InputElement} from "../Input/InputElement";
|
||||||
import PublicHolidayInput from "./PublicHolidayInput";
|
import PublicHolidayInput from "./PublicHolidayInput";
|
||||||
import Translations from "../i18n/Translations";
|
import Translations from "../i18n/Translations";
|
||||||
|
import {Utils} from "../../Utils";
|
||||||
|
|
||||||
|
|
||||||
export default class OpeningHoursInput extends InputElement<string> {
|
export default class OpeningHoursInput extends InputElement<string> {
|
||||||
|
@ -63,15 +64,13 @@ export default class OpeningHoursInput extends InputElement<string> {
|
||||||
this._phSelector = new PublicHolidayInput(ph);
|
this._phSelector = new PublicHolidayInput(ph);
|
||||||
|
|
||||||
function update() {
|
function update() {
|
||||||
let rules = OH.ToString(rulesFromOhPicker.data);
|
const regular = OH.ToString(rulesFromOhPicker.data);
|
||||||
if (leftoverRules.data.length != 0) {
|
const rules : string[] = [
|
||||||
rules += ";" + leftoverRules.data.join(";")
|
regular,
|
||||||
}
|
...leftoverRules.data,
|
||||||
const phData = ph.data;
|
ph.data
|
||||||
if (phData !== undefined && phData !== "") {
|
]
|
||||||
rules += ";" + phData;
|
value.setData(Utils.NoEmpty(rules).join(";"));
|
||||||
}
|
|
||||||
value.setData(rules);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rulesFromOhPicker.addCallback(update);
|
rulesFromOhPicker.addCallback(update);
|
||||||
|
|
|
@ -7,6 +7,7 @@ import Combine from "../Base/Combine";
|
||||||
import TagRenderingAnswer from "./TagRenderingAnswer";
|
import TagRenderingAnswer from "./TagRenderingAnswer";
|
||||||
import State from "../../State";
|
import State from "../../State";
|
||||||
import Svg from "../../Svg";
|
import Svg from "../../Svg";
|
||||||
|
import {TagUtils} from "../../Logic/Tags";
|
||||||
|
|
||||||
export default class EditableTagRendering extends UIElement {
|
export default class EditableTagRendering extends UIElement {
|
||||||
private readonly _tags: UIEventSource<any>;
|
private readonly _tags: UIEventSource<any>;
|
||||||
|
@ -45,6 +46,29 @@ export default class EditableTagRendering extends UIElement {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InnerRender(): string {
|
||||||
|
if (!this._configuration?.condition?.matchesProperties(this._tags.data)) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if (this._editMode.data) {
|
||||||
|
return this._question.Render();
|
||||||
|
}
|
||||||
|
if (this._configuration.multiAnswer) {
|
||||||
|
const atLeastOneMatch = this._configuration.mappings.some(mp =>TagUtils.MatchesMultiAnswer(mp.if, this._tags.data));
|
||||||
|
console.log("SOME MATCH?", atLeastOneMatch)
|
||||||
|
if (!atLeastOneMatch) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
} else if (this._configuration.GetRenderValue(this._tags.data) === undefined) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Combine([this._answer,
|
||||||
|
(State.state?.osmConnection?.userDetails?.data?.loggedIn ?? true) ? this._editButton : undefined
|
||||||
|
]).SetClass("answer")
|
||||||
|
.Render();
|
||||||
|
}
|
||||||
|
|
||||||
private GenerateQuestion() {
|
private GenerateQuestion() {
|
||||||
const self = this;
|
const self = this;
|
||||||
if (this._configuration.question !== undefined) {
|
if (this._configuration.question !== undefined) {
|
||||||
|
@ -64,25 +88,4 @@ export default class EditableTagRendering extends UIElement {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
InnerRender(): string {
|
|
||||||
|
|
||||||
if (this._editMode.data) {
|
|
||||||
return this._question.Render();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this._configuration.GetRenderValue(this._tags.data)=== undefined){
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!this._configuration?.condition?.matchesProperties(this._tags.data)){
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Combine([this._answer,
|
|
||||||
(State.state?.osmConnection?.userDetails?.data?.loggedIn ?? true) ? this._editButton : undefined
|
|
||||||
]).SetClass("answer")
|
|
||||||
.Render();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -6,16 +6,13 @@ import QuestionBox from "./QuestionBox";
|
||||||
import Combine from "../Base/Combine";
|
import Combine from "../Base/Combine";
|
||||||
import TagRenderingAnswer from "./TagRenderingAnswer";
|
import TagRenderingAnswer from "./TagRenderingAnswer";
|
||||||
import State from "../../State";
|
import State from "../../State";
|
||||||
import {FixedUiElement} from "../Base/FixedUiElement";
|
import TagRenderingConfig from "../../Customizations/JSON/TagRenderingConfig";
|
||||||
|
import ScrollableFullScreen from "../Base/ScrollableFullScreen";
|
||||||
|
|
||||||
export default class FeatureInfoBox extends UIElement {
|
export default class FeatureInfoBox extends UIElement {
|
||||||
private _tags: UIEventSource<any>;
|
private _component: UIElement;
|
||||||
private _layerConfig: LayerConfig;
|
|
||||||
|
|
||||||
private _title: UIElement;
|
public title: UIElement ;
|
||||||
private _titleIcons: UIElement;
|
|
||||||
private _renderings: UIElement[];
|
|
||||||
private _questionBox: UIElement;
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
tags: UIEventSource<any>,
|
tags: UIEventSource<any>,
|
||||||
|
@ -25,14 +22,12 @@ export default class FeatureInfoBox extends UIElement {
|
||||||
if (layerConfig === undefined) {
|
if (layerConfig === undefined) {
|
||||||
throw "Undefined layerconfig"
|
throw "Undefined layerconfig"
|
||||||
}
|
}
|
||||||
this._tags = tags;
|
|
||||||
this._layerConfig = layerConfig;
|
|
||||||
|
|
||||||
|
|
||||||
this._title = layerConfig.title === undefined ? undefined :
|
const title = new TagRenderingAnswer(tags, layerConfig.title ?? new TagRenderingConfig("POI", undefined))
|
||||||
new TagRenderingAnswer(tags, layerConfig.title)
|
|
||||||
.SetClass("featureinfobox-title");
|
.SetClass("featureinfobox-title");
|
||||||
this._titleIcons = new Combine(
|
this.title = title;
|
||||||
|
const titleIcons = new Combine(
|
||||||
layerConfig.titleIcons.map(icon => new TagRenderingAnswer(tags, icon)))
|
layerConfig.titleIcons.map(icon => new TagRenderingAnswer(tags, icon)))
|
||||||
.SetClass("featureinfobox-icons");
|
.SetClass("featureinfobox-icons");
|
||||||
|
|
||||||
|
@ -42,7 +37,7 @@ export default class FeatureInfoBox extends UIElement {
|
||||||
}
|
}
|
||||||
|
|
||||||
let questionBoxIsUsed = false;
|
let questionBoxIsUsed = false;
|
||||||
this._renderings = layerConfig.tagRenderings.map(tr => {
|
const renderings = layerConfig.tagRenderings.map(tr => {
|
||||||
if (tr.question === null) {
|
if (tr.question === null) {
|
||||||
questionBoxIsUsed = true;
|
questionBoxIsUsed = true;
|
||||||
// This is the question box!
|
// This is the question box!
|
||||||
|
@ -50,25 +45,26 @@ export default class FeatureInfoBox extends UIElement {
|
||||||
}
|
}
|
||||||
return new EditableTagRendering(tags, tr);
|
return new EditableTagRendering(tags, tr);
|
||||||
});
|
});
|
||||||
this._renderings[0]?.SetClass("first-rendering");
|
renderings[0]?.SetClass("first-rendering");
|
||||||
if (!questionBoxIsUsed) {
|
if (!questionBoxIsUsed) {
|
||||||
this._renderings.push(questionBox);
|
renderings.push(questionBox);
|
||||||
}
|
}
|
||||||
|
const tail = new Combine([]).SetClass("only-on-mobile");
|
||||||
|
|
||||||
|
const content = new Combine([
|
||||||
|
...renderings,
|
||||||
|
tail.SetClass("featureinfobox-tail")
|
||||||
|
]
|
||||||
|
)
|
||||||
|
const titleBar = new Combine([
|
||||||
|
new Combine([title, titleIcons]).SetClass("featureinfobox-titlebar-title")
|
||||||
|
])
|
||||||
|
|
||||||
|
this._component = new ScrollableFullScreen(titleBar, content)
|
||||||
}
|
}
|
||||||
|
|
||||||
InnerRender(): string {
|
InnerRender(): string {
|
||||||
return new Combine([
|
return this._component.Render();
|
||||||
new Combine([this._title, this._titleIcons])
|
|
||||||
.SetClass("featureinfobox-titlebar"),
|
|
||||||
new Combine([
|
|
||||||
...this._renderings,
|
|
||||||
this._questionBox,
|
|
||||||
new FixedUiElement("").SetClass("featureinfobox-tail")
|
|
||||||
]
|
|
||||||
).SetClass("featureinfobox-content"),
|
|
||||||
]).SetClass("featureinfobox")
|
|
||||||
.Render();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ import {UIEventSource} from "../../Logic/UIEventSource";
|
||||||
import TagRenderingConfig from "../../Customizations/JSON/TagRenderingConfig";
|
import TagRenderingConfig from "../../Customizations/JSON/TagRenderingConfig";
|
||||||
import TagRenderingQuestion from "./TagRenderingQuestion";
|
import TagRenderingQuestion from "./TagRenderingQuestion";
|
||||||
import Translations from "../i18n/Translations";
|
import Translations from "../i18n/Translations";
|
||||||
|
import {TagUtils} from "../../Logic/Tags";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -46,20 +47,39 @@ export default class QuestionBox extends UIElement {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
InnerRender(): string {
|
/**
|
||||||
for (let i = 0; i < this._tagRenderingQuestions.length; i++) {
|
* Returns true if it is known or not shown, false if the question should be asked
|
||||||
let tagRendering = this._tagRenderings[i];
|
* @constructor
|
||||||
if(tagRendering.condition &&
|
*/
|
||||||
!tagRendering.condition.matchesProperties(this._tags.data)){
|
IsKnown(tagRendering: TagRenderingConfig): boolean {
|
||||||
|
if (tagRendering.condition &&
|
||||||
|
!tagRendering.condition.matchesProperties(this._tags.data)) {
|
||||||
// Filtered away by the condition
|
// Filtered away by the condition
|
||||||
continue;
|
return true;
|
||||||
|
}
|
||||||
|
if(tagRendering.multiAnswer){
|
||||||
|
for (const m of tagRendering.mappings) {
|
||||||
|
if(TagUtils.MatchesMultiAnswer(m.if, this._tags.data)){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tagRendering.GetRenderValue(this._tags.data) !== undefined) {
|
if (tagRendering.GetRenderValue(this._tags.data) !== undefined) {
|
||||||
// This value is known
|
// This value is known and can be rendered
|
||||||
continue;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
InnerRender(): string {
|
||||||
|
for (let i = 0; i < this._tagRenderingQuestions.length; i++) {
|
||||||
|
let tagRendering = this._tagRenderings[i];
|
||||||
|
|
||||||
|
if(this.IsKnown(tagRendering)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (this._skippedQuestions.data.indexOf(i) >= 0) {
|
if (this._skippedQuestions.data.indexOf(i) >= 0) {
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -2,6 +2,9 @@ import {UIEventSource} from "../../Logic/UIEventSource";
|
||||||
import TagRenderingConfig from "../../Customizations/JSON/TagRenderingConfig";
|
import TagRenderingConfig from "../../Customizations/JSON/TagRenderingConfig";
|
||||||
import {UIElement} from "../UIElement";
|
import {UIElement} from "../UIElement";
|
||||||
import {SubstitutedTranslation} from "../SpecialVisualizations";
|
import {SubstitutedTranslation} from "../SpecialVisualizations";
|
||||||
|
import {Utils} from "../../Utils";
|
||||||
|
import Combine from "../Base/Combine";
|
||||||
|
import {TagUtils} from "../../Logic/Tags";
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* Displays the correct value for a known tagrendering
|
* Displays the correct value for a known tagrendering
|
||||||
|
@ -15,7 +18,7 @@ export default class TagRenderingAnswer extends UIElement {
|
||||||
super(tags);
|
super(tags);
|
||||||
this._tags = tags;
|
this._tags = tags;
|
||||||
this._configuration = configuration;
|
this._configuration = configuration;
|
||||||
if(configuration === undefined){
|
if (configuration === undefined) {
|
||||||
throw "Trying to generate a tagRenderingAnswer without configuration..."
|
throw "Trying to generate a tagRenderingAnswer without configuration..."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,12 +35,38 @@ export default class TagRenderingAnswer extends UIElement {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
const tr = this._configuration.GetRenderValue(tags);
|
const tr = this._configuration.GetRenderValue(tags);
|
||||||
if (tr === undefined) {
|
if (tr !== undefined) {
|
||||||
return "";
|
|
||||||
}
|
|
||||||
// Bit of a hack; remember that the fields are updated
|
|
||||||
this._content = new SubstitutedTranslation(tr, this._tags);
|
this._content = new SubstitutedTranslation(tr, this._tags);
|
||||||
return this._content.Render();
|
return this._content.Render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The render value doesn't work well with multi-answers (checkboxes), so we have to check for them manually
|
||||||
|
if (this._configuration.multiAnswer) {
|
||||||
|
const applicableThens = Utils.NoNull(this._configuration.mappings.map(mapping => {
|
||||||
|
if (mapping.if === undefined) {
|
||||||
|
return mapping.then;
|
||||||
|
}
|
||||||
|
if (TagUtils.MatchesMultiAnswer(mapping.if, tags)) {
|
||||||
|
return mapping.then;
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}))
|
||||||
|
if (applicableThens.length >= 0) {
|
||||||
|
if (applicableThens.length === 1) {
|
||||||
|
this._content = applicableThens[0];
|
||||||
|
} else {
|
||||||
|
this._content = new Combine(["<ul>",
|
||||||
|
...applicableThens.map(tr => new Combine(["<li>", tr, "</li>"]))
|
||||||
|
,
|
||||||
|
"</ul>"
|
||||||
|
])
|
||||||
|
|
||||||
|
}
|
||||||
|
return this._content.Render();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -53,7 +53,9 @@ export default class TagRenderingQuestion extends UIElement {
|
||||||
this._inputElement = this.GenerateInputElement()
|
this._inputElement = this.GenerateInputElement()
|
||||||
const self = this;
|
const self = this;
|
||||||
const save = () => {
|
const save = () => {
|
||||||
|
console.log("Save clicked!")
|
||||||
const selection = self._inputElement.GetValue().data;
|
const selection = self._inputElement.GetValue().data;
|
||||||
|
console.log("Selection is", selection)
|
||||||
if (selection) {
|
if (selection) {
|
||||||
(State.state?.changes ?? new Changes())
|
(State.state?.changes ?? new Changes())
|
||||||
.addTag(tags.data.id, selection, tags);
|
.addTag(tags.data.id, selection, tags);
|
||||||
|
@ -65,7 +67,7 @@ export default class TagRenderingQuestion extends UIElement {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
this._saveButton = new SaveButton(this._inputElement.GetValue(), State.state.osmConnection)
|
this._saveButton = new SaveButton(this._inputElement.GetValue(), State.state?.osmConnection)
|
||||||
.onClick(save)
|
.onClick(save)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ export default class ShowDataLayer {
|
||||||
const feats = features.data.map(ff => ff.feature);
|
const feats = features.data.map(ff => ff.feature);
|
||||||
let geoLayer = self.CreateGeojsonLayer(feats)
|
let geoLayer = self.CreateGeojsonLayer(feats)
|
||||||
if (layoutToUse.clustering.minNeededElements <= features.data.length) {
|
if (layoutToUse.clustering.minNeededElements <= features.data.length) {
|
||||||
const cl = window["L"];
|
const cl = window["L"]; // This is a dirty workaround, the clustering plugin binds to the L of the window, not of the namespace or something
|
||||||
const cluster = cl.markerClusterGroup({ disableClusteringAtZoom: layoutToUse.clustering.maxZoom });
|
const cluster = cl.markerClusterGroup({ disableClusteringAtZoom: layoutToUse.clustering.maxZoom });
|
||||||
cluster.addLayer(geoLayer);
|
cluster.addLayer(geoLayer);
|
||||||
geoLayer = cluster;
|
geoLayer = cluster;
|
||||||
|
@ -68,6 +68,16 @@ export default class ShowDataLayer {
|
||||||
action();
|
action();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Hash.hash.addCallback(id => {
|
||||||
|
// This is a bit of an edge case: if the hash becomes an id to search, we have to show the corresponding popup
|
||||||
|
if(State.state.selectedElement !== undefined){
|
||||||
|
return; // Something is already selected, we don't have to apply this fix
|
||||||
|
}
|
||||||
|
const action = self._onSelectedTrigger[id];
|
||||||
|
if(action){
|
||||||
|
action();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,9 +124,10 @@ export default class ShowDataLayer {
|
||||||
|
|
||||||
|
|
||||||
const tags = State.state.allElements.getEventSourceFor(feature);
|
const tags = State.state.allElements.getEventSourceFor(feature);
|
||||||
const uiElement: LazyElement = new LazyElement(() => new FeatureInfoBox(tags, layer));
|
const uiElement: LazyElement = new LazyElement(() => new FeatureInfoBox(tags, layer),
|
||||||
|
"<div style='height: 90vh'>Rendering</div>");
|
||||||
popup.setContent(uiElement.Render());
|
popup.setContent(uiElement.Render());
|
||||||
popup.on('popupclose', () => {
|
popup.on('remove', () => {
|
||||||
State.state.selectedElement.setData(undefined);
|
State.state.selectedElement.setData(undefined);
|
||||||
});
|
});
|
||||||
leafletLayer.bindPopup(popup);
|
leafletLayer.bindPopup(popup);
|
||||||
|
@ -126,21 +137,24 @@ export default class ShowDataLayer {
|
||||||
|
|
||||||
leafletLayer.on("click", (e) => {
|
leafletLayer.on("click", (e) => {
|
||||||
// We set the element as selected...
|
// We set the element as selected...
|
||||||
// uiElement.Activate();
|
uiElement.Activate();
|
||||||
State.state.selectedElement.setData(feature);
|
State.state.selectedElement.setData(feature);
|
||||||
});
|
});
|
||||||
|
|
||||||
const id = feature.properties.id+feature.geometry.type+feature._matching_layer_id;
|
const id = feature.properties.id+feature.geometry.type+feature._matching_layer_id;
|
||||||
this._onSelectedTrigger[id]
|
this._onSelectedTrigger[id]
|
||||||
= () => {
|
= () => {
|
||||||
|
if(popup.isOpen()){
|
||||||
|
return;
|
||||||
|
}
|
||||||
leafletLayer.openPopup();
|
leafletLayer.openPopup();
|
||||||
uiElement.Activate();
|
uiElement.Activate();
|
||||||
|
State.state.selectedElement.setData(feature);
|
||||||
}
|
}
|
||||||
|
this._onSelectedTrigger[feature.properties.id.replace("/","_")] = this._onSelectedTrigger[id];
|
||||||
|
if (feature.properties.id.replace(/\//g, "_") === Hash.hash.data) {
|
||||||
if (feature.properties.id.replace(/\//g, "_") === Hash.Get().data) {
|
|
||||||
// This element is in the URL, so this is a share link
|
// This element is in the URL, so this is a share link
|
||||||
// We already open it
|
// We open the relevant popup straight away
|
||||||
uiElement.Activate();
|
uiElement.Activate();
|
||||||
popup.setContent(uiElement.Render());
|
popup.setContent(uiElement.Render());
|
||||||
|
|
||||||
|
|
|
@ -1,27 +1,19 @@
|
||||||
import {UIEventSource} from "../Logic/UIEventSource";
|
import {UIEventSource} from "../Logic/UIEventSource";
|
||||||
|
import Constants from "../Models/Constants";
|
||||||
|
import {Utils} from "../Utils";
|
||||||
|
|
||||||
export abstract class UIElement extends UIEventSource<string> {
|
export abstract class UIElement extends UIEventSource<string> {
|
||||||
|
|
||||||
private static nextId: number = 0;
|
private static nextId: number = 0;
|
||||||
|
|
||||||
public readonly id: string;
|
public readonly id: string;
|
||||||
public readonly _source: UIEventSource<any>;
|
public readonly _source: UIEventSource<any>;
|
||||||
private clss: string[] = []
|
|
||||||
|
|
||||||
private style: string;
|
|
||||||
|
|
||||||
private _hideIfEmpty = false;
|
|
||||||
|
|
||||||
public dumbMode = false;
|
public dumbMode = false;
|
||||||
|
private clss: string[] = []
|
||||||
|
private style: string;
|
||||||
|
private _hideIfEmpty = false;
|
||||||
private lastInnerRender: string;
|
private lastInnerRender: string;
|
||||||
|
private _onClick: () => void;
|
||||||
/**
|
private _onHover: UIEventSource<boolean>;
|
||||||
* In the 'deploy'-step, some code needs to be run by ts-node.
|
|
||||||
* However, ts-node crashes when it sees 'document'. When running from console, we flag this and disable all code where document is needed.
|
|
||||||
* This is a workaround and yet another hack
|
|
||||||
*/
|
|
||||||
public static runningFromConsole = false;
|
|
||||||
|
|
||||||
protected constructor(source: UIEventSource<any> = undefined) {
|
protected constructor(source: UIEventSource<any> = undefined) {
|
||||||
super("");
|
super("");
|
||||||
|
@ -32,7 +24,6 @@ export abstract class UIElement extends UIEventSource<string> {
|
||||||
this.ListenTo(source);
|
this.ListenTo(source);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public ListenTo(source: UIEventSource<any>) {
|
public ListenTo(source: UIEventSource<any>) {
|
||||||
if (source === undefined) {
|
if (source === undefined) {
|
||||||
return this;
|
return this;
|
||||||
|
@ -46,8 +37,6 @@ export abstract class UIElement extends UIEventSource<string> {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _onClick: () => void;
|
|
||||||
|
|
||||||
public onClick(f: (() => void)) {
|
public onClick(f: (() => void)) {
|
||||||
this.dumbMode = false;
|
this.dumbMode = false;
|
||||||
this._onClick = f;
|
this._onClick = f;
|
||||||
|
@ -56,8 +45,6 @@ export abstract class UIElement extends UIEventSource<string> {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _onHover: UIEventSource<boolean>;
|
|
||||||
|
|
||||||
public IsHovered(): UIEventSource<boolean> {
|
public IsHovered(): UIEventSource<boolean> {
|
||||||
this.dumbMode = false;
|
this.dumbMode = false;
|
||||||
if (this._onHover !== undefined) {
|
if (this._onHover !== undefined) {
|
||||||
|
@ -69,7 +56,7 @@ export abstract class UIElement extends UIEventSource<string> {
|
||||||
}
|
}
|
||||||
|
|
||||||
Update(): void {
|
Update(): void {
|
||||||
if (UIElement.runningFromConsole) {
|
if (Utils.runningFromConsole) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,7 +88,7 @@ export abstract class UIElement extends UIEventSource<string> {
|
||||||
const self = this;
|
const self = this;
|
||||||
element.onclick = (e) => {
|
element.onclick = (e) => {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
if(e.consumed){
|
if (e.consumed) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
self._onClick();
|
self._onClick();
|
||||||
|
@ -123,31 +110,12 @@ export abstract class UIElement extends UIEventSource<string> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private UpdateAllChildren() {
|
|
||||||
for (const i in this) {
|
|
||||||
const child = this[i];
|
|
||||||
if (child instanceof UIElement) {
|
|
||||||
child.Update();
|
|
||||||
} else if (child instanceof Array) {
|
|
||||||
for (const ch of child) {
|
|
||||||
if (ch instanceof UIElement) {
|
|
||||||
ch.Update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
HideOnEmpty(hide: boolean) {
|
HideOnEmpty(hide: boolean) {
|
||||||
this._hideIfEmpty = hide;
|
this._hideIfEmpty = hide;
|
||||||
this.Update();
|
this.Update();
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called after the HTML has been replaced. Can be used for css tricks
|
|
||||||
protected InnerUpdate(htmlElement: HTMLElement) {
|
|
||||||
}
|
|
||||||
|
|
||||||
Render(): string {
|
Render(): string {
|
||||||
this.lastInnerRender = this.InnerRender();
|
this.lastInnerRender = this.InnerRender();
|
||||||
if (this.dumbMode) {
|
if (this.dumbMode) {
|
||||||
|
@ -192,6 +160,7 @@ export abstract class UIElement extends UIEventSource<string> {
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RemoveClass(clss: string): UIElement {
|
public RemoveClass(clss: string): UIElement {
|
||||||
const i = this.clss.indexOf(clss);
|
const i = this.clss.indexOf(clss);
|
||||||
if (i >= 0) {
|
if (i >= 0) {
|
||||||
|
@ -201,13 +170,31 @@ export abstract class UIElement extends UIEventSource<string> {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public SetStyle(style: string): UIElement {
|
public SetStyle(style: string): UIElement {
|
||||||
this.dumbMode = false;
|
this.dumbMode = false;
|
||||||
this.style = style;
|
this.style = style;
|
||||||
this.Update();
|
this.Update();
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Called after the HTML has been replaced. Can be used for css tricks
|
||||||
|
protected InnerUpdate(htmlElement: HTMLElement) {
|
||||||
|
}
|
||||||
|
|
||||||
|
private UpdateAllChildren() {
|
||||||
|
for (const i in this) {
|
||||||
|
const child = this[i];
|
||||||
|
if (child instanceof UIElement) {
|
||||||
|
child.Update();
|
||||||
|
} else if (child instanceof Array) {
|
||||||
|
for (const ch of child) {
|
||||||
|
if (ch instanceof UIElement) {
|
||||||
|
ch.Update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import {UIEventSource} from "../../Logic/UIEventSource";
|
import {UIEventSource} from "../../Logic/UIEventSource";
|
||||||
import {UIElement} from "../UIElement";
|
|
||||||
import {LocalStorageSource} from "../../Logic/Web/LocalStorageSource";
|
import {LocalStorageSource} from "../../Logic/Web/LocalStorageSource";
|
||||||
|
import {Utils} from "../../Utils";
|
||||||
|
|
||||||
|
|
||||||
export default class Locale {
|
export default class Locale {
|
||||||
|
@ -9,7 +9,7 @@ export default class Locale {
|
||||||
|
|
||||||
private static setup() {
|
private static setup() {
|
||||||
const source = LocalStorageSource.Get('language', "en");
|
const source = LocalStorageSource.Get('language', "en");
|
||||||
if (!UIElement.runningFromConsole) {
|
if (!Utils.runningFromConsole) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
window.setLanguage = function (language: string) {
|
window.setLanguage = function (language: string) {
|
||||||
source.setData(language)
|
source.setData(language)
|
||||||
|
|
60
Utils.ts
|
@ -1,8 +1,16 @@
|
||||||
import {UIElement} from "./UI/UIElement";
|
|
||||||
import * as $ from "jquery"
|
import * as $ from "jquery"
|
||||||
|
import Constants from "./Models/Constants";
|
||||||
|
|
||||||
|
|
||||||
export class Utils {
|
export class Utils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* In the 'deploy'-step, some code needs to be run by ts-node.
|
||||||
|
* However, ts-node crashes when it sees 'document'. When running from console, we flag this and disable all code where document is needed.
|
||||||
|
* This is a workaround and yet another hack
|
||||||
|
*/
|
||||||
|
public static runningFromConsole = false;
|
||||||
|
|
||||||
public static readonly assets_path = "./assets/svg/";
|
public static readonly assets_path = "./assets/svg/";
|
||||||
|
|
||||||
static EncodeXmlValue(str) {
|
static EncodeXmlValue(str) {
|
||||||
|
@ -59,7 +67,7 @@ export class Utils {
|
||||||
}
|
}
|
||||||
|
|
||||||
static DoEvery(millis: number, f: (() => void)) {
|
static DoEvery(millis: number, f: (() => void)) {
|
||||||
if (UIElement.runningFromConsole) {
|
if (Utils.runningFromConsole) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
window.setTimeout(
|
window.setTimeout(
|
||||||
|
@ -134,15 +142,6 @@ export class Utils {
|
||||||
return [a.substr(0, index), a.substr(index + sep.length)];
|
return [a.substr(0, index), a.substr(index + sep.length)];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static isRetina(): boolean {
|
|
||||||
if (UIElement.runningFromConsole) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// The cause for this line of code: https://github.com/pietervdvn/MapComplete/issues/115
|
|
||||||
// See https://stackoverflow.com/questions/19689715/what-is-the-best-way-to-detect-retina-support-on-a-device-using-javascript
|
|
||||||
return ((window.matchMedia && (window.matchMedia('only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx), only screen and (min-resolution: 75.6dpcm)').matches || window.matchMedia('only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min--moz-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2)').matches)) || (window.devicePixelRatio && window.devicePixelRatio >= 2));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Date will be undefined on failure
|
// Date will be undefined on failure
|
||||||
public static changesetDate(id: number, action: ((isFound: Date) => void)): void {
|
public static changesetDate(id: number, action: ((isFound: Date) => void)): void {
|
||||||
$.getJSON("https://www.openstreetmap.org/api/0.6/changeset/" + id,
|
$.getJSON("https://www.openstreetmap.org/api/0.6/changeset/" + id,
|
||||||
|
@ -176,6 +175,45 @@ export class Utils {
|
||||||
console.error("Key ", objectKey, "might be not supported (in context",context,")")
|
console.error("Key ", objectKey, "might be not supported (in context",context,")")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static Merge(source: any, target: any){
|
||||||
|
target = JSON.parse(JSON.stringify(target));
|
||||||
|
source = JSON.parse(JSON.stringify(source));
|
||||||
|
for (const key in source) {
|
||||||
|
const sourceV = source[key];
|
||||||
|
const targetV = target[key]
|
||||||
|
if(typeof sourceV === "object"){
|
||||||
|
if(targetV === undefined){
|
||||||
|
target[key] = sourceV;
|
||||||
|
}else{
|
||||||
|
Utils.Merge(sourceV, targetV);
|
||||||
|
}
|
||||||
|
|
||||||
|
}else{
|
||||||
|
target[key] = sourceV;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ToMuchTags(source: any, toCheck: any, context: string){
|
||||||
|
|
||||||
|
for (const key in toCheck) {
|
||||||
|
const toCheckV = toCheck[key];
|
||||||
|
const sourceV = source[key];
|
||||||
|
if(sourceV === undefined){
|
||||||
|
console.error("Probably a wrong tag in ", context, ": ", key, "might be wrong")
|
||||||
|
}
|
||||||
|
if(typeof toCheckV === "object"){
|
||||||
|
if(typeof sourceV !== "object"){
|
||||||
|
console.error("Probably a wrong value in ", context, ": ", key, "is a fixed value in the source")
|
||||||
|
}else{
|
||||||
|
Utils.ToMuchTags(sourceV, toCheckV, context+"."+key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 12 KiB |
|
@ -0,0 +1,151 @@
|
||||||
|
{
|
||||||
|
"id": "bicycle_tube_vending_machine",
|
||||||
|
"name": {
|
||||||
|
"en": "Bicycle tube vending machine"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"render": {
|
||||||
|
"en": "Bicycle tube vending machine"
|
||||||
|
},
|
||||||
|
"mappings": [{
|
||||||
|
"if": "name~*",
|
||||||
|
"then": "Bicycle tube vending machine {name}"
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
"icon": {
|
||||||
|
"render": "pin:#ffffff;./assets/layers/bicycle_tube_vending_machine/pinIcon.svg"
|
||||||
|
},
|
||||||
|
"iconOverlays": [
|
||||||
|
{
|
||||||
|
"if": {
|
||||||
|
"or": [
|
||||||
|
"operational_status=broken",
|
||||||
|
"operational_status=closed"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"then": "close:#c33",
|
||||||
|
"badge": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"iconSize": "50,50,bottom",
|
||||||
|
"overpassTags": {
|
||||||
|
"and": [
|
||||||
|
"amenity=vending_machine",
|
||||||
|
"vending~.*bicycle_tube.*"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"minzoom": 13,
|
||||||
|
"wayHandling": 2,
|
||||||
|
"presets": [
|
||||||
|
{
|
||||||
|
"title": {
|
||||||
|
"en": "Bicycle tube vending machine"
|
||||||
|
},
|
||||||
|
"tags": [
|
||||||
|
"amenity=vending_machine",
|
||||||
|
"vending=bicycle_tube",
|
||||||
|
"vending:bicycle_tube=yes"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"color": "#6bc4f7",
|
||||||
|
"tagRenderings": [
|
||||||
|
"images",
|
||||||
|
{
|
||||||
|
"#": "Still in use?",
|
||||||
|
"question": {
|
||||||
|
"en": "Is this vending machine still operational?"
|
||||||
|
},
|
||||||
|
"render": {
|
||||||
|
"en": "The operational status is <i>{operational_status</i>"
|
||||||
|
},
|
||||||
|
"freeform": {
|
||||||
|
"key": "operational_status"
|
||||||
|
},
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"if": "operational_status=",
|
||||||
|
"then": {
|
||||||
|
"en": "This vending machine works"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "operational_status=broken",
|
||||||
|
"then": {
|
||||||
|
"en": "This vending machine is broken"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "operational_status=closed",
|
||||||
|
"then": {
|
||||||
|
"en": "This vending machine is closed"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "How much does a bicycle tube cost?",
|
||||||
|
"render": "A bicycle tube costs {charge}",
|
||||||
|
"freeform": {
|
||||||
|
"key": "charge"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "How can one pay at this tube vending machine?",
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"if": "payment:coins=yes",
|
||||||
|
"then": "Payment with coins is possible"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "payment:notes=yes",
|
||||||
|
"then": "Payment with notes is possible"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "payment:cards=yes",
|
||||||
|
"then": "Payment with cards is possible"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"multiAnswer": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "Which brand of tubes are sold here?",
|
||||||
|
"freeform": {
|
||||||
|
"key": "brand"
|
||||||
|
},
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"if": "brand=Continental",
|
||||||
|
"then": "Continental tubes are sold here"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "brand=Schwalbe",
|
||||||
|
"then": "Schwalbe tubes are sold here"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"multiAnswer": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "Are other bicycle bicycle accessories sold here?",
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"if": "vending:bicycle_light=yes",
|
||||||
|
"then": "Bicycle lights are sold here"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "vending:gloves=yes",
|
||||||
|
"then": "Gloves are sold here"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "vending:bicycle_repair_kit=yes",
|
||||||
|
"then": "Bicycle repair kits are sold here"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "vending:bicycle_pump=yes",
|
||||||
|
"then": "Bicycle pumps are sold here"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"multiAnswer": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
194
assets/layers/bicycle_tube_vending_machine/pinIcon.svg
Normal file
|
@ -0,0 +1,194 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<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"
|
||||||
|
width="25.929167mm"
|
||||||
|
height="30.958698mm"
|
||||||
|
viewBox="0 0 25.929167 30.958698"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
|
||||||
|
sodipodi:docname="pinIcon.svg">
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<filter
|
||||||
|
style="color-interpolation-filters:sRGB"
|
||||||
|
filterUnits="userSpaceOnUse"
|
||||||
|
height="63"
|
||||||
|
width="67"
|
||||||
|
y="23"
|
||||||
|
x="16"
|
||||||
|
id="filter0_d">
|
||||||
|
<feFlood
|
||||||
|
id="feFlood10"
|
||||||
|
result="BackgroundImageFix"
|
||||||
|
flood-opacity="0" />
|
||||||
|
<feColorMatrix
|
||||||
|
id="feColorMatrix12"
|
||||||
|
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||||
|
type="matrix"
|
||||||
|
in="SourceAlpha" />
|
||||||
|
<feOffset
|
||||||
|
id="feOffset14"
|
||||||
|
dy="4" />
|
||||||
|
<feGaussianBlur
|
||||||
|
id="feGaussianBlur16"
|
||||||
|
stdDeviation="2" />
|
||||||
|
<feColorMatrix
|
||||||
|
id="feColorMatrix18"
|
||||||
|
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"
|
||||||
|
type="matrix" />
|
||||||
|
<feBlend
|
||||||
|
id="feBlend20"
|
||||||
|
result="effect1_dropShadow"
|
||||||
|
in2="BackgroundImageFix"
|
||||||
|
mode="normal" />
|
||||||
|
<feBlend
|
||||||
|
id="feBlend22"
|
||||||
|
result="shape"
|
||||||
|
in2="effect1_dropShadow"
|
||||||
|
in="SourceGraphic"
|
||||||
|
mode="normal" />
|
||||||
|
</filter>
|
||||||
|
<filter
|
||||||
|
style="color-interpolation-filters:sRGB"
|
||||||
|
filterUnits="userSpaceOnUse"
|
||||||
|
height="63"
|
||||||
|
width="67"
|
||||||
|
y="23"
|
||||||
|
x="16"
|
||||||
|
id="filter0_d-3">
|
||||||
|
<feFlood
|
||||||
|
id="feFlood10-6"
|
||||||
|
result="BackgroundImageFix"
|
||||||
|
flood-opacity="0" />
|
||||||
|
<feColorMatrix
|
||||||
|
id="feColorMatrix12-7"
|
||||||
|
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||||
|
type="matrix"
|
||||||
|
in="SourceAlpha" />
|
||||||
|
<feOffset
|
||||||
|
id="feOffset14-5"
|
||||||
|
dy="4" />
|
||||||
|
<feGaussianBlur
|
||||||
|
id="feGaussianBlur16-3"
|
||||||
|
stdDeviation="2" />
|
||||||
|
<feColorMatrix
|
||||||
|
id="feColorMatrix18-5"
|
||||||
|
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"
|
||||||
|
type="matrix" />
|
||||||
|
<feBlend
|
||||||
|
id="feBlend20-6"
|
||||||
|
result="effect1_dropShadow"
|
||||||
|
in2="BackgroundImageFix"
|
||||||
|
mode="normal" />
|
||||||
|
<feBlend
|
||||||
|
id="feBlend22-2"
|
||||||
|
result="shape"
|
||||||
|
in2="effect1_dropShadow"
|
||||||
|
in="SourceGraphic"
|
||||||
|
mode="normal" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="8.1303907"
|
||||||
|
inkscape:cx="36.194774"
|
||||||
|
inkscape:cy="71.950763"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:guide-bbox="true"
|
||||||
|
inkscape:object-nodes="false"
|
||||||
|
inkscape:snap-nodes="false"
|
||||||
|
inkscape:snap-others="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="999"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1">
|
||||||
|
<sodipodi:guide
|
||||||
|
position="27.966223,64.089257"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide839"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="33.524427,68.420967"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide841"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<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>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-21.083817,-224.56459)">
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.82687008;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 41.280692,238.51613 c 0,0.53966 -0.617389,0.97866 -1.385942,0.99147 -0.01148,2e-4 -10.875298,2.6e-4 -10.886847,2.6e-4 -0.784514,0 -1.420488,-0.44403 -1.420489,-0.99176 1e-6,-0.54772 0.635975,-0.99175 1.420489,-0.99175 0.01545,0 10.883142,1.6e-4 10.898474,3.6e-4 0.763143,0.0171 1.374315,0.45432 1.374316,0.99127 z"
|
||||||
|
id="path837"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="csscsscc"
|
||||||
|
inkscape:export-xdpi="244.98"
|
||||||
|
inkscape:export-ydpi="244.98" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.82687008;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 43.665973,238.47977 c -1e-6,1.55949 -1.353853,2.82693 -3.035183,2.85428 -0.01846,3e-4 -12.607711,4e-4 -12.626255,4e-4 -1.706945,0 -3.090699,-1.2781 -3.0907,-2.85472 -10e-7,-1.57662 1.383754,-2.85476 3.0907,-2.85476 0.02273,0 12.616119,2.3e-4 12.638718,8.8e-4 1.675556,0.0334 3.02272,1.2984 3.02272,2.85405 z"
|
||||||
|
id="path847"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ssssssss"
|
||||||
|
inkscape:export-xdpi="244.98"
|
||||||
|
inkscape:export-ydpi="244.98" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.82687008;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 46.014735,238.47978 c -2e-6,2.69259 -2.168416,4.87871 -4.854222,4.90735 -0.01778,2e-4 -13.766963,2.8e-4 -13.784791,2.8e-4 -2.710414,0 -4.907638,-2.19723 -4.90764,-4.90763 -10e-7,-2.7104 2.197224,-4.90763 4.90764,-4.90763 0.02907,0 13.789453,2.4e-4 13.818401,9.3e-4 2.670264,0.0465 4.820613,2.22555 4.820612,4.90689 z"
|
||||||
|
id="path849"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="sssssss"
|
||||||
|
inkscape:export-xdpi="244.98"
|
||||||
|
inkscape:export-ydpi="244.98" />
|
||||||
|
<rect
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.23621552;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect910"
|
||||||
|
width="2.2565947"
|
||||||
|
height="11.358825"
|
||||||
|
x="37.684917"
|
||||||
|
y="232.82724"
|
||||||
|
inkscape:export-xdpi="244.98"
|
||||||
|
inkscape:export-ydpi="244.98" />
|
||||||
|
<rect
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.0892781;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect924"
|
||||||
|
width="0.79356372"
|
||||||
|
height="5.3985114"
|
||||||
|
x="34.012344"
|
||||||
|
y="227.07784"
|
||||||
|
inkscape:export-xdpi="244.98"
|
||||||
|
inkscape:export-ydpi="244.98" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.9 KiB |
127
assets/layers/bicycle_tube_vending_machine/tube.svg
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<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"
|
||||||
|
width="51.841461mm"
|
||||||
|
height="36.68618mm"
|
||||||
|
viewBox="0 0 51.841461 36.68618"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
|
||||||
|
sodipodi:docname="tube.svg">
|
||||||
|
<defs
|
||||||
|
id="defs2" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1.6479131"
|
||||||
|
inkscape:cx="31.112488"
|
||||||
|
inkscape:cy="69.182578"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer2"
|
||||||
|
showgrid="false"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:guide-bbox="true"
|
||||||
|
inkscape:object-nodes="false"
|
||||||
|
inkscape:snap-nodes="false"
|
||||||
|
inkscape:snap-others="false"
|
||||||
|
inkscape:window-width="597"
|
||||||
|
inkscape:window-height="464"
|
||||||
|
inkscape:window-x="628"
|
||||||
|
inkscape:window-y="207"
|
||||||
|
inkscape:window-maximized="0">
|
||||||
|
<sodipodi:guide
|
||||||
|
position="40.514968,7.9968472"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide839"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="46.073173,12.328557"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide841"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<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>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer2"
|
||||||
|
inkscape:label="bg" />
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-8.5350726,-162.7447)">
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.68589711;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 52.819614,187.17927 c -1e-6,1.41536 -1.61917,2.56667 -3.634782,2.60026 -0.03011,5e-4 -28.521622,7e-4 -28.551907,7e-4 -2.057472,0 -3.725384,-1.16451 -3.725385,-2.60101 10e-7,-1.4365 1.667913,-2.60101 3.725385,-2.60101 0.04052,0 28.542192,4.5e-4 28.582402,10e-4 2.001425,0.0447 3.604287,1.19146 3.604288,2.59967 z"
|
||||||
|
id="path837"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="csscsscc"
|
||||||
|
inkscape:export-xdpi="244.98"
|
||||||
|
inkscape:export-ydpi="244.98" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.92546511;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 56.121413,187.10232 c -3e-6,3.58651 -3.113572,6.50133 -6.980276,6.56424 -0.04246,6.9e-4 -28.995042,9.3e-4 -29.037689,9.3e-4 -3.925611,0 -7.107948,-2.93938 -7.107951,-6.56528 -2e-6,-3.6259 3.182336,-6.56529 7.107951,-6.56529 0.05225,0 29.014378,5.2e-4 29.066356,0.002 3.853419,0.0768 6.951609,2.98607 6.951609,6.56372 z"
|
||||||
|
id="path847"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ssssssss"
|
||||||
|
inkscape:export-xdpi="244.98"
|
||||||
|
inkscape:export-ydpi="244.98" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 59.376534,187.10233 c -3e-6,5.69942 -4.589909,10.32682 -10.274983,10.38745 -0.03764,4e-4 -29.140686,6e-4 -29.178423,6e-4 -5.737163,0 -10.3880526,-4.65089 -10.3880554,-10.38805 -2.8e-6,-5.73717 4.6508884,-10.38806 10.3880554,-10.38806 0.06153,0 29.188289,5.3e-4 29.249565,0.002 5.652179,0.0983 10.203844,4.71082 10.203841,10.38646 z"
|
||||||
|
id="path849"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="sssssss"
|
||||||
|
inkscape:export-xdpi="244.98"
|
||||||
|
inkscape:export-ydpi="244.98" />
|
||||||
|
<rect
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect910"
|
||||||
|
width="4.7765589"
|
||||||
|
height="24.04335"
|
||||||
|
x="41.744713"
|
||||||
|
y="175.13753"
|
||||||
|
inkscape:export-xdpi="244.98"
|
||||||
|
inkscape:export-ydpi="244.98" />
|
||||||
|
<rect
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.56908238;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect924"
|
||||||
|
width="1.4863302"
|
||||||
|
height="5.9807334"
|
||||||
|
x="31.488573"
|
||||||
|
y="169.11668"
|
||||||
|
inkscape:export-xdpi="244.98"
|
||||||
|
inkscape:export-ydpi="244.98" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 31.188119,163.65776 c 0.228413,-0.98336 1.556534,-1.43106 1.966818,0 l 0.96334,4.97725 h -3.612524 z"
|
||||||
|
id="rect936"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccccc"
|
||||||
|
inkscape:export-xdpi="244.98"
|
||||||
|
inkscape:export-ydpi="244.98" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.4 KiB |
|
@ -26,6 +26,7 @@
|
||||||
"overpassTags": {
|
"overpassTags": {
|
||||||
"or": [
|
"or": [
|
||||||
"service:bicycle:cleaning=yes",
|
"service:bicycle:cleaning=yes",
|
||||||
|
"service:bicycle:cleaning=diy",
|
||||||
"amenity=bicycle_wash"
|
"amenity=bicycle_wash"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -38,13 +39,87 @@
|
||||||
"nl": "Fietsschoonmaakpunt"
|
"nl": "Fietsschoonmaakpunt"
|
||||||
},
|
},
|
||||||
"tags": [
|
"tags": [
|
||||||
"amenity=bicycle_wash",
|
"amenity=bicycle_wash"
|
||||||
"service:bicycle:cleaning=yes"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"color": "#6bc4f7",
|
"color": "#6bc4f7",
|
||||||
|
"iconOverlays": [
|
||||||
|
{
|
||||||
|
"if": {
|
||||||
|
"and": [
|
||||||
|
"service:bicycle:cleaning~*",
|
||||||
|
"amenity!=bike_wash"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"then": {
|
||||||
|
"render": "./assets/layers/bike_cleaning/bike_cleaning_icon.svg",
|
||||||
|
"roaming": true
|
||||||
|
},
|
||||||
|
"badge": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"titleIcons": [
|
||||||
|
{
|
||||||
|
"render": "<img src='./assets/layers/bike_cleaning/bike_cleaning_icon.svg'/>",
|
||||||
|
"roaming": true
|
||||||
|
}
|
||||||
|
],
|
||||||
"tagRenderings": [
|
"tagRenderings": [
|
||||||
"images"
|
"images",
|
||||||
|
{
|
||||||
|
"question": "How much does it cost to use the cleaning service?",
|
||||||
|
"render": "Using the cleaning service costs {charge}",
|
||||||
|
"condition": "amenity!=bike_wash",
|
||||||
|
"freeform": {
|
||||||
|
"key": "service:bicycle:cleaning:charge",
|
||||||
|
"addExtraTags": [
|
||||||
|
"service:bicycle:cleaning:fee=yes"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"if": "service:bicycle:cleaning:fee=no&service:bicycle:cleaning:charge=",
|
||||||
|
"then": "The cleaning service is free to use"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "service:bicycle:cleaning:fee=no&",
|
||||||
|
"then": "Free to use",
|
||||||
|
"hideInAnswer": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "service:bicycle:cleaning:fee=yes",
|
||||||
|
"then": "The cleaning service has a fee"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"roaming": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "How much does it cost to use the cleaning service?",
|
||||||
|
"render": "Using the cleaning service costs {charge}",
|
||||||
|
"condition": "amenity=bike_wash",
|
||||||
|
"freeform": {
|
||||||
|
"key": "charge",
|
||||||
|
"addExtraTags": [
|
||||||
|
"fee=yes"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"if": "fee=no&charge=",
|
||||||
|
"then": "Free to use cleaning service"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "fee=no&",
|
||||||
|
"then": "Free to use",
|
||||||
|
"hideInAnswer": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": "fee=yes",
|
||||||
|
"then": "The cleaning service has a fee"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"roaming": false
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
204
assets/layers/bike_cleaning/bike_cleaning_icon.svg
Normal file
|
@ -0,0 +1,204 @@
|
||||||
|
<?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"
|
||||||
|
width="98"
|
||||||
|
height="98"
|
||||||
|
viewBox="0 0 98 98"
|
||||||
|
version="1.1"
|
||||||
|
id="svg27"
|
||||||
|
sodipodi:docname="bike_cleaning_icon.svg"
|
||||||
|
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
|
||||||
|
style="fill:none">
|
||||||
|
<metadata
|
||||||
|
id="metadata31">
|
||||||
|
<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>
|
||||||
|
<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="999"
|
||||||
|
id="namedview29"
|
||||||
|
showgrid="false"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:guide-bbox="true"
|
||||||
|
inkscape:zoom="1.9032258"
|
||||||
|
inkscape:cx="3.3258144"
|
||||||
|
inkscape:cy="153.42093"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="layer4">
|
||||||
|
<sodipodi:guide
|
||||||
|
position="-18.915254,142.92373"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide1101"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer4"
|
||||||
|
inkscape:label="bg"
|
||||||
|
style="display:inline">
|
||||||
|
<circle
|
||||||
|
style="fill:#6bc4f7"
|
||||||
|
cx="49"
|
||||||
|
cy="49"
|
||||||
|
r="49"
|
||||||
|
id="circle4" />
|
||||||
|
</g>
|
||||||
|
<defs
|
||||||
|
id="defs25">
|
||||||
|
<filter
|
||||||
|
id="filter0_d"
|
||||||
|
x="16"
|
||||||
|
y="23"
|
||||||
|
width="67"
|
||||||
|
height="63"
|
||||||
|
filterUnits="userSpaceOnUse"
|
||||||
|
style="color-interpolation-filters:sRGB">
|
||||||
|
<feFlood
|
||||||
|
flood-opacity="0"
|
||||||
|
result="BackgroundImageFix"
|
||||||
|
id="feFlood10" />
|
||||||
|
<feColorMatrix
|
||||||
|
in="SourceAlpha"
|
||||||
|
type="matrix"
|
||||||
|
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||||
|
id="feColorMatrix12" />
|
||||||
|
<feOffset
|
||||||
|
dy="4"
|
||||||
|
id="feOffset14" />
|
||||||
|
<feGaussianBlur
|
||||||
|
stdDeviation="2"
|
||||||
|
id="feGaussianBlur16" />
|
||||||
|
<feColorMatrix
|
||||||
|
type="matrix"
|
||||||
|
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"
|
||||||
|
id="feColorMatrix18" />
|
||||||
|
<feBlend
|
||||||
|
mode="normal"
|
||||||
|
in2="BackgroundImageFix"
|
||||||
|
result="effect1_dropShadow"
|
||||||
|
id="feBlend20" />
|
||||||
|
<feBlend
|
||||||
|
mode="normal"
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="effect1_dropShadow"
|
||||||
|
result="shape"
|
||||||
|
id="feBlend22" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer3"
|
||||||
|
inkscape:label="fg"
|
||||||
|
style="display:inline">
|
||||||
|
<path
|
||||||
|
style="fill:#fffffc;fill-opacity:1;stroke-width:0.88272834;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="m 29.290947,36.983983 c 0.177522,0.916926 1.141318,1.734153 2.152651,1.827133 v 0 c 1.009061,0.09339 1.683548,-0.575238 1.505341,-1.491556 l -0.778933,-3.979234 c -0.177995,-0.914898 -1.141321,-1.734153 -2.15265,-1.827137 v 0 c -1.008849,-0.09196 -1.681967,0.575447 -1.503969,1.490347 z"
|
||||||
|
id="path1030" />
|
||||||
|
<g
|
||||||
|
id="g853"
|
||||||
|
transform="rotate(-14.887196,22.514768,42.323076)">
|
||||||
|
<rect
|
||||||
|
id="rect1000"
|
||||||
|
height="4.3486524"
|
||||||
|
width="31.293177"
|
||||||
|
transform="matrix(-0.90869492,0.41746083,0.41746083,0.90869492,0,0)"
|
||||||
|
y="37.392448"
|
||||||
|
x="-38.035305"
|
||||||
|
style="fill:#fffffc;fill-opacity:1;stroke-width:0.47552237" />
|
||||||
|
<g
|
||||||
|
transform="matrix(-0.44591765,-0.16517664,-0.16517664,0.44591765,67.8395,17.448122)"
|
||||||
|
id="g1056"
|
||||||
|
style="fill:#fffffc;fill-opacity:1">
|
||||||
|
<path
|
||||||
|
id="path1054"
|
||||||
|
d="m 100,18.328 v -8 c -19.636,0 -22.542,2.165 -31.688,11.338 l -0.925,0.926 2.828,2.829 -5.577,-5.577 c -5.663,-5.663 -14.843,-5.663 -20.506,0 l 31.112,31.113 c 5.662,-5.663 5.662,-14.844 0,-20.506 l -2.201,-2.201 0.934,-0.935 c 7.766,-7.79 8.961,-8.987 26.023,-8.987 z"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
style="fill:#fffffc;fill-opacity:1" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:#fffffc;fill-opacity:1;stroke-width:0.88272834;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="m 30.604299,45.933279 c 0.177522,0.916926 1.141318,1.734153 2.152651,1.827133 v 0 c 1.009061,0.09339 1.683548,-0.575238 1.505341,-1.491556 l -0.778933,-3.979234 c -0.177995,-0.914898 -1.141321,-1.734153 -2.15265,-1.827137 v 0 c -1.008849,-0.09196 -1.681967,0.575447 -1.503969,1.490347 z"
|
||||||
|
id="path1030-1" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:#fffffc;fill-opacity:1;stroke-width:0.88272834;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="m 36.337339,32.524819 c 0.595194,0.719731 1.832735,0.97518 2.764949,0.57217 v 0 c 0.930416,-0.401561 1.202022,-1.31163 0.606518,-2.030499 l -2.590483,-3.119364 c -0.594638,-0.717724 -1.832738,-0.975179 -2.76495,-0.572174 v 0 c -0.929545,0.402715 -1.200535,1.311056 -0.605894,2.02878 z"
|
||||||
|
id="path1030-2" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:#fffffc;fill-opacity:1;stroke-width:0.84610248;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="m 41.803572,39.170925 c 0.535181,0.717421 1.708166,1.021795 2.620646,0.681415 v 0 c 0.910688,-0.339081 1.215009,-1.196589 0.679489,-1.913201 L 42.773781,34.829254 C 42.239036,34.11378 41.065612,33.807461 40.153135,34.147836 v 0 c -0.90991,0.340226 -1.213557,1.196111 -0.678808,1.911586 z"
|
||||||
|
id="path1030-7" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:#fffffc;fill-opacity:1;stroke-width:0.88272834;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="m 43.859519,26.949791 c 0.870604,0.338107 2.075596,-0.04236 2.692927,-0.8488 v 0 c 0.616469,-0.804296 0.409796,-1.731271 -0.460658,-2.068474 l -3.782751,-1.460079 c -0.86914,-0.336626 -2.075598,0.04237 -2.692931,0.848797 v 0 c -0.615145,0.804879 -0.408777,1.730045 0.460366,2.066669 z"
|
||||||
|
id="path1030-0" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:#fffffc;fill-opacity:1;stroke-width:0.88272834;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="m 52.723307,29.001623 c 0.889143,0.285817 2.069419,-0.165527 2.637779,-1.007196 v 0 c 0.567626,-0.83948 0.306279,-1.752549 -0.582661,-2.037473 l -3.862771,-1.232902 c -0.887593,-0.284427 -2.06942,0.16553 -2.637782,1.007193 v 0 c -0.56627,0.839983 -0.305334,1.751264 0.582263,2.035689 z"
|
||||||
|
id="path1030-9" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
inkscape:label="cycle"
|
||||||
|
sodipodi:insensitive="true">
|
||||||
|
<g
|
||||||
|
style="display:inline"
|
||||||
|
id="g896">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="M 50.491776,73.912443 H 33.444983 l 9.298301,-20.633687 h 9.29819 6.71547 7.231926 m 0,0 -2.582831,-5.81969 h 3.615963 3.615963 m -4.649095,5.81969 1.033132,2.645404 2.066264,4.232492 5.682228,13.755791 m -8.781624,-20.633687 -4.907378,7.935991 -2.944516,4.761594 m -1.962973,3.174508 1.962973,-3.174508 m -11.777729,-6.877784 5.165661,11.63949 -10.331322,-23.278981 3.099397,6.348793 m 10.331322,17.988283 3.512671,-5.819801"
|
||||||
|
id="path10"
|
||||||
|
style="stroke:#ffffff;stroke-width:2.21892667" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="m 56.056733,73.012225 c 0,1.75162 -1.383057,3.148767 -3.061342,3.148767 -1.678174,0 -3.061231,-1.397147 -3.061231,-3.148767 0,-1.75151 1.383057,-3.148657 3.061231,-3.148657 1.678285,0 3.061342,1.397147 3.061342,3.148657 z"
|
||||||
|
id="path12"
|
||||||
|
style="stroke:#ffffff;stroke-width:1.10946333" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="m 45.170568,71.95424 c 0,6.717246 -5.310002,12.117115 -11.804689,12.117115 -6.494798,0 -11.804801,-5.399869 -11.804801,-12.117115 0,-6.717356 5.310003,-12.117225 11.804801,-12.117225 6.494687,0 11.804689,5.399869 11.804689,12.117225 z"
|
||||||
|
id="path14"
|
||||||
|
style="stroke:#ffffff;stroke-width:2.21892667" />
|
||||||
|
<g
|
||||||
|
id="g20"
|
||||||
|
transform="matrix(1.1094633,0,0,1.1094633,0.48127584,3.080534)">
|
||||||
|
<circle
|
||||||
|
style="stroke:#ffffff;stroke-width:2"
|
||||||
|
id="circle18"
|
||||||
|
r="11"
|
||||||
|
cy="63"
|
||||||
|
cx="66" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.6 KiB |
|
@ -107,7 +107,8 @@
|
||||||
"titleIcons": [
|
"titleIcons": [
|
||||||
{
|
{
|
||||||
"render": "<a href='https://fietsambassade.gent.be/' target='_blank'><img src='./assets/themes/cyclofix/fietsambassade_gent_logo_small.svg'/></a>",
|
"render": "<a href='https://fietsambassade.gent.be/' target='_blank'><img src='./assets/themes/cyclofix/fietsambassade_gent_logo_small.svg'/></a>",
|
||||||
"condition": "operator=De Fietsambassade Gent"
|
"condition": "operator=De Fietsambassade Gent",
|
||||||
|
"roaming": true
|
||||||
},
|
},
|
||||||
"defaults"
|
"defaults"
|
||||||
],
|
],
|
||||||
|
|
|
@ -1,292 +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"
|
|
||||||
width="98"
|
|
||||||
height="98"
|
|
||||||
viewBox="0 0 98 98"
|
|
||||||
version="1.1"
|
|
||||||
id="svg27"
|
|
||||||
sodipodi:docname="bike_cleaning.svg"
|
|
||||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
|
||||||
style="fill:none">
|
|
||||||
<metadata
|
|
||||||
id="metadata31">
|
|
||||||
<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>
|
|
||||||
<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="namedview29"
|
|
||||||
showgrid="false"
|
|
||||||
showguides="true"
|
|
||||||
inkscape:guide-bbox="true"
|
|
||||||
inkscape:zoom="3.8064516"
|
|
||||||
inkscape:cx="-11.021894"
|
|
||||||
inkscape:cy="44.52432"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="1080"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="layer4">
|
|
||||||
<sodipodi:guide
|
|
||||||
position="-18.915254,142.92373"
|
|
||||||
orientation="0,1"
|
|
||||||
id="guide1101"
|
|
||||||
inkscape:locked="false" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer4"
|
|
||||||
inkscape:label="bg"
|
|
||||||
style="display:inline">
|
|
||||||
<circle
|
|
||||||
style="fill:#6bc4f7"
|
|
||||||
cx="49"
|
|
||||||
cy="49"
|
|
||||||
r="49"
|
|
||||||
id="circle4" />
|
|
||||||
</g>
|
|
||||||
<defs
|
|
||||||
id="defs25">
|
|
||||||
<filter
|
|
||||||
id="filter0_d"
|
|
||||||
x="16"
|
|
||||||
y="23"
|
|
||||||
width="67"
|
|
||||||
height="63"
|
|
||||||
filterUnits="userSpaceOnUse"
|
|
||||||
style="color-interpolation-filters:sRGB">
|
|
||||||
<feFlood
|
|
||||||
flood-opacity="0"
|
|
||||||
result="BackgroundImageFix"
|
|
||||||
id="feFlood10" />
|
|
||||||
<feColorMatrix
|
|
||||||
in="SourceAlpha"
|
|
||||||
type="matrix"
|
|
||||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
|
||||||
id="feColorMatrix12" />
|
|
||||||
<feOffset
|
|
||||||
dy="4"
|
|
||||||
id="feOffset14" />
|
|
||||||
<feGaussianBlur
|
|
||||||
stdDeviation="2"
|
|
||||||
id="feGaussianBlur16" />
|
|
||||||
<feColorMatrix
|
|
||||||
type="matrix"
|
|
||||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"
|
|
||||||
id="feColorMatrix18" />
|
|
||||||
<feBlend
|
|
||||||
mode="normal"
|
|
||||||
in2="BackgroundImageFix"
|
|
||||||
result="effect1_dropShadow"
|
|
||||||
id="feBlend20" />
|
|
||||||
<feBlend
|
|
||||||
mode="normal"
|
|
||||||
in="SourceGraphic"
|
|
||||||
in2="effect1_dropShadow"
|
|
||||||
result="shape"
|
|
||||||
id="feBlend22" />
|
|
||||||
</filter>
|
|
||||||
</defs>
|
|
||||||
<g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer3"
|
|
||||||
inkscape:label="fg"
|
|
||||||
style="display:inline">
|
|
||||||
<path
|
|
||||||
style="stroke:#ffffff;stroke-width:2"
|
|
||||||
id="path10"
|
|
||||||
d="M 53.833,72.506562 H 38.4681 l 8.3809,-18.5979 h 8.3808 6.0529 6.5184 m 0,0 -2.328,-5.2455 h 3.2592 3.2592 m -4.1904,5.2455 0.9312,2.3844 1.8624,3.8149 5.1216,12.3986 m -7.9152,-18.5979 -4.4232,7.153 -2.654,4.2918 m -1.7693,2.8613 1.7693,-2.8613 m -10.6157,-6.1992 4.656,10.4911 -9.312,-20.9822 2.7936,5.7224 m 9.312,16.2135 3.1661,-5.2456"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
<path
|
|
||||||
style="stroke:#ffffff"
|
|
||||||
id="path12"
|
|
||||||
d="m 58.8489,71.695162 c 0,1.5788 -1.2466,2.8381 -2.7593,2.8381 -1.5126,0 -2.7592,-1.2593 -2.7592,-2.8381 0,-1.5787 1.2466,-2.838 2.7592,-2.838 1.5127,0 2.7593,1.2593 2.7593,2.838 z"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
<path
|
|
||||||
style="stroke:#ffffff;stroke-width:2"
|
|
||||||
id="path14"
|
|
||||||
d="m 49.0368,70.741562 c 0,6.0545 -4.7861,10.9216 -10.64,10.9216 -5.854,0 -10.6401,-4.8671 -10.6401,-10.9216 0,-6.0546 4.7861,-10.9217 10.6401,-10.9217 5.8539,0 10.64,4.8671 10.64,10.9217 z"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
<g
|
|
||||||
transform="translate(8.7566998,8.6631615)"
|
|
||||||
id="g20">
|
|
||||||
<circle
|
|
||||||
cx="66"
|
|
||||||
cy="63"
|
|
||||||
r="11"
|
|
||||||
id="circle18"
|
|
||||||
style="stroke:#ffffff;stroke-width:2" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g1094"
|
|
||||||
transform="matrix(-0.44591765,-0.16517664,-0.16517664,0.44591765,67.8395,17.448122)"
|
|
||||||
style="display:inline;fill:#fffffc;fill-opacity:1">
|
|
||||||
<rect
|
|
||||||
id="rect1000"
|
|
||||||
height="9.1450005"
|
|
||||||
width="65.807999"
|
|
||||||
transform="matrix(0.7071,0.7071,-0.7071,0.7071,44.7059,-26.5459)"
|
|
||||||
y="36.118999"
|
|
||||||
x="21.492001"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<g
|
|
||||||
id="g1008"
|
|
||||||
style="fill:#fffffc;fill-opacity:1">
|
|
||||||
<path
|
|
||||||
id="path1002"
|
|
||||||
d="m 27.304,32.959 c -0.825,0.409 -1.825,0.072 -2.233,-0.753 v 0 C 24.662,31.381 25,30.381 25.825,29.972 l 3.584,-1.776 c 0.825,-0.409 1.824,-0.071 2.233,0.754 v 0 c 0.409,0.825 0.071,1.825 -0.753,2.233 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1004"
|
|
||||||
d="m 16.922,39.164 c -0.789,0.47 -1.809,0.211 -2.278,-0.578 v 0 c -0.47,-0.789 -0.211,-1.809 0.579,-2.278 l 3.427,-2.04 c 0.788,-0.47 1.808,-0.211 2.277,0.578 v 0 c 0.47,0.789 0.211,1.809 -0.578,2.277 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1006"
|
|
||||||
d="M 6.539,45.369 C 5.786,45.9 4.747,45.719 4.216,44.967 v 0 c -0.53,-0.753 -0.35,-1.792 0.403,-2.323 l 3.27,-2.304 c 0.752,-0.53 1.792,-0.35 2.322,0.403 v 0 c 0.53,0.752 0.35,1.792 -0.403,2.322 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g1016"
|
|
||||||
style="fill:#fffffc;fill-opacity:1">
|
|
||||||
<path
|
|
||||||
id="path1010"
|
|
||||||
d="m 65.089,70.024 c -0.526,0.757 -1.564,0.941 -2.32,0.415 v 0 c -0.755,-0.526 -0.94,-1.565 -0.414,-2.321 l 2.286,-3.28 c 0.525,-0.755 1.564,-0.941 2.32,-0.415 v 0 c 0.755,0.526 0.94,1.564 0.415,2.319 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1012"
|
|
||||||
d="m 58.977,80.461 c -0.465,0.793 -1.484,1.057 -2.274,0.592 v 0 c -0.791,-0.467 -1.056,-1.484 -0.59,-2.275 l 2.021,-3.438 c 0.465,-0.791 1.483,-1.056 2.274,-0.59 v 0 c 0.791,0.465 1.055,1.482 0.59,2.274 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1014"
|
|
||||||
d="m 52.865,90.898 c -0.404,0.829 -1.404,1.171 -2.23,0.767 v 0 c -0.827,-0.405 -1.17,-1.402 -0.766,-2.229 l 1.757,-3.594 c 0.404,-0.827 1.402,-1.17 2.229,-0.765 v 0 c 0.827,0.403 1.17,1.401 0.766,2.229 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
</g>
|
|
||||||
<path
|
|
||||||
id="path1018"
|
|
||||||
d="m 59.759,64.613 c -0.59,0.708 -1.641,0.802 -2.348,0.211 v 0 c -0.706,-0.59 -0.8,-1.642 -0.21,-2.349 l 2.564,-3.067 c 0.589,-0.706 1.641,-0.802 2.348,-0.211 v 0 c 0.706,0.59 0.8,1.641 0.211,2.347 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1020"
|
|
||||||
d="m 52.76,74.477 c -0.533,0.75 -1.57,0.924 -2.318,0.391 v 0 C 49.694,74.335 49.52,73.298 50.053,72.55 l 2.314,-3.247 c 0.531,-0.747 1.569,-0.923 2.316,-0.39 v 0 c 0.748,0.533 0.922,1.57 0.39,2.318 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1022"
|
|
||||||
d="m 45.759,84.341 c -0.475,0.791 -1.5,1.044 -2.288,0.569 v 0 c -0.789,-0.477 -1.043,-1.499 -0.567,-2.288 l 2.064,-3.427 c 0.475,-0.789 1.5,-1.043 2.287,-0.567 v 0 c 0.789,0.475 1.042,1.498 0.568,2.288 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1024"
|
|
||||||
d="m 54.202,59.292 c -0.629,0.661 -1.675,0.686 -2.335,0.056 v 0 c -0.66,-0.629 -0.685,-1.676 -0.056,-2.337 l 2.736,-2.867 c 0.628,-0.66 1.675,-0.687 2.336,-0.057 v 0 c 0.66,0.63 0.684,1.675 0.056,2.335 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1026"
|
|
||||||
d="m 46.638,68.593 c -0.576,0.707 -1.613,0.812 -2.318,0.236 v 0 C 43.615,68.253 43.51,67.216 44.086,66.51 l 2.5,-3.061 c 0.574,-0.705 1.612,-0.812 2.316,-0.235 v 0 c 0.706,0.576 0.81,1.613 0.235,2.318 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1028"
|
|
||||||
d="m 39.073,77.896 c -0.521,0.751 -1.553,0.936 -2.3,0.414 v 0 c -0.749,-0.522 -0.935,-1.551 -0.413,-2.3 l 2.264,-3.256 c 0.521,-0.749 1.551,-0.934 2.299,-0.412 v 0 c 0.749,0.521 0.934,1.549 0.413,2.3 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1030"
|
|
||||||
d="m 48.646,53.97 c -0.669,0.616 -1.709,0.571 -2.324,-0.099 v 0 c -0.614,-0.668 -0.569,-1.71 0.1,-2.325 l 2.908,-2.667 c 0.668,-0.614 1.709,-0.571 2.324,0.099 v 0 c 0.613,0.669 0.568,1.709 -0.1,2.323 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1032"
|
|
||||||
d="m 40.517,62.709 c -0.619,0.665 -1.656,0.699 -2.318,0.081 v 0 C 37.537,62.172 37.501,61.135 38.12,60.472 l 2.686,-2.876 c 0.617,-0.662 1.655,-0.698 2.317,-0.08 v 0 c 0.663,0.619 0.698,1.655 0.08,2.318 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1034"
|
|
||||||
d="m 32.387,71.449 c -0.567,0.713 -1.604,0.827 -2.312,0.26 v 0 c -0.709,-0.568 -0.826,-1.602 -0.258,-2.312 l 2.465,-3.083 c 0.567,-0.71 1.603,-0.825 2.312,-0.259 v 0 c 0.71,0.568 0.825,1.602 0.258,2.312 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1036"
|
|
||||||
d="m 43.09,48.648 c -0.708,0.57 -1.743,0.456 -2.312,-0.253 v 0 c -0.568,-0.708 -0.454,-1.744 0.255,-2.313 l 3.079,-2.467 c 0.707,-0.569 1.743,-0.457 2.312,0.253 v 0 c 0.568,0.708 0.454,1.743 -0.253,2.312 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1038"
|
|
||||||
d="m 34.396,56.826 c -0.661,0.621 -1.699,0.587 -2.318,-0.074 v 0 c -0.619,-0.662 -0.585,-1.699 0.076,-2.319 l 2.872,-2.689 c 0.66,-0.619 1.698,-0.587 2.317,0.075 v 0 c 0.619,0.66 0.585,1.697 -0.075,2.318 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1040"
|
|
||||||
d="m 25.701,65.004 c -0.614,0.673 -1.656,0.719 -2.325,0.105 v 0 c -0.67,-0.615 -0.716,-1.654 -0.103,-2.324 l 2.665,-2.913 c 0.613,-0.671 1.654,-0.716 2.323,-0.104 v 0 c 0.671,0.613 0.717,1.652 0.104,2.325 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1042"
|
|
||||||
d="m 37.534,43.326 c -0.748,0.524 -1.777,0.341 -2.3,-0.408 v 0 c -0.522,-0.748 -0.338,-1.778 0.41,-2.301 l 3.251,-2.267 c 0.746,-0.523 1.777,-0.341 2.3,0.408 v 0 c 0.522,0.748 0.339,1.777 -0.408,2.3 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1044"
|
|
||||||
d="m 28.275,50.942 c -0.705,0.578 -1.743,0.476 -2.319,-0.229 v 0 c -0.576,-0.705 -0.474,-1.743 0.23,-2.319 l 3.058,-2.504 c 0.703,-0.577 1.742,-0.475 2.317,0.229 v 0 c 0.577,0.705 0.474,1.741 -0.23,2.319 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1046"
|
|
||||||
d="m 19.015,58.559 c -0.66,0.633 -1.707,0.609 -2.337,-0.05 v 0 c -0.63,-0.661 -0.608,-1.706 0.052,-2.337 l 2.865,-2.74 c 0.66,-0.632 1.706,-0.608 2.335,0.051 v 0 c 0.631,0.66 0.608,1.703 -0.051,2.337 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1048"
|
|
||||||
d="m 31.978,38.004 c -0.788,0.478 -1.812,0.226 -2.289,-0.563 v 0 c -0.476,-0.787 -0.223,-1.812 0.565,-2.29 l 3.422,-2.067 c 0.786,-0.477 1.812,-0.226 2.289,0.563 v 0 c 0.476,0.787 0.223,1.812 -0.563,2.288 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1050"
|
|
||||||
d="m 22.153,45.059 c -0.747,0.536 -1.785,0.363 -2.319,-0.383 v 0 c -0.533,-0.747 -0.361,-1.785 0.386,-2.319 l 3.244,-2.318 c 0.746,-0.535 1.785,-0.362 2.318,0.384 v 0 c 0.534,0.747 0.362,1.783 -0.385,2.319 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
id="path1052"
|
|
||||||
d="M 12.329,52.113 C 11.622,52.707 10.57,52.614 9.98,51.908 v 0 C 9.389,51.201 9.481,50.151 10.187,49.56 l 3.065,-2.57 c 0.706,-0.592 1.757,-0.499 2.348,0.206 v 0 c 0.592,0.706 0.5,1.754 -0.207,2.349 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
<g
|
|
||||||
id="g1056"
|
|
||||||
style="fill:#fffffc;fill-opacity:1">
|
|
||||||
<path
|
|
||||||
id="path1054"
|
|
||||||
d="m 100,18.328 v -8 c -19.636,0 -22.542,2.165 -31.688,11.338 l -0.925,0.926 2.828,2.829 -5.577,-5.577 c -5.663,-5.663 -14.843,-5.663 -20.506,0 l 31.112,31.113 c 5.662,-5.663 5.662,-14.844 0,-20.506 l -2.201,-2.201 0.934,-0.935 c 7.766,-7.79 8.961,-8.987 26.023,-8.987 z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="fill:#fffffc;fill-opacity:1" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 13 KiB |
|
@ -186,15 +186,6 @@
|
||||||
"condition": "service:bicycle:diy=yes",
|
"condition": "service:bicycle:diy=yes",
|
||||||
"render": "<img src='./assets/layers/bike_shop/tools.svg'/>"
|
"render": "<img src='./assets/layers/bike_shop/tools.svg'/>"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"condition": {
|
|
||||||
"or": [
|
|
||||||
"service:bicycle:cleaning=yes",
|
|
||||||
"service:bicycle:cleaning=diy"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"render": "<img src='./assets/layers/bike_shop/bike_cleaning.svg'/>"
|
|
||||||
},
|
|
||||||
"defaults"
|
"defaults"
|
||||||
],
|
],
|
||||||
"description": {
|
"description": {
|
||||||
|
|
91
assets/svg/Ornament-Horiz-0.svg
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<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"
|
||||||
|
width="57.311394mm"
|
||||||
|
height="8.7868128mm"
|
||||||
|
viewBox="0 0 57.311392 8.786814"
|
||||||
|
version="1.1"
|
||||||
|
id="svg3667"
|
||||||
|
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
|
||||||
|
sodipodi:docname="Ornament-Horiz-2.svg">
|
||||||
|
<defs
|
||||||
|
id="defs3661" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1.8101934"
|
||||||
|
inkscape:cx="31.095733"
|
||||||
|
inkscape:cy="134.87115"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="g852"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1003"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata3664">
|
||||||
|
<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>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(199.17855,-273.85526)">
|
||||||
|
<g
|
||||||
|
id="g852"
|
||||||
|
transform="translate(-99.012044,18.551839)">
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon207"
|
||||||
|
points="218.01,612.42 219.73,612.92 221.44,613.22 223.26,613.52 225.18,613.52 227,613.42 228.91,613.22 230.93,612.72 234.46,611.32 237.29,609.22 239.31,606.82 240.72,604.12 241.63,601.42 242.03,598.82 242.13,596.51 241.83,594.61 241.33,592.91 240.42,591.01 239.11,589.01 237.49,587.01 235.47,585.11 233.05,583.41 230.13,582.01 226.89,581.01 225.68,580.81 224.37,580.61 223.06,580.51 221.65,580.51 220.33,580.61 218.92,580.71 217.51,580.91 216.09,581.11 214.68,581.51 213.17,581.91 211.75,582.31 210.34,582.91 208.93,583.51 207.52,584.21 206.1,585.01 204.79,585.91 202.77,587.51 200.75,589.31 198.83,591.51 196.82,593.72 194.9,596.12 192.98,598.52 191.16,600.92 189.35,603.12 187.53,605.12 185.71,606.92 184,608.32 182.38,609.32 180.77,609.82 179.25,609.82 177.74,609.12 176.32,607.72 175.92,608.12 176.53,608.62 177.13,609.12 177.84,609.62 178.65,610.02 179.45,610.32 180.46,610.52 181.47,610.62 182.58,610.42 183.9,610.12 185.21,609.52 186.62,608.62 188.14,607.52 189.75,606.02 191.47,604.12 193.38,601.92 195.3,599.22 196.51,597.62 197.62,596.01 198.73,594.61 199.94,593.31 201.06,592.11 202.16,591.01 203.17,590.01 204.29,589.11 205.6,588.11 206.91,587.11 208.12,586.31 209.43,585.61 210.54,584.91 211.75,584.41 212.86,583.91 214.08,583.51 215.09,583.11 216.19,582.91 217.2,582.61 218.11,582.51 219.12,582.31 219.93,582.31 220.84,582.21 221.65,582.21 222.75,582.21 223.97,582.31 225.38,582.51 226.69,582.71 228.1,583.11 229.52,583.61 231.03,584.11 232.44,584.81 233.76,585.61 235.07,586.61 236.28,587.61 237.49,588.91 238.4,590.21 239.31,591.71 240.01,593.41 240.52,595.32 240.82,598.52 240.52,601.32 239.51,603.82 238.1,605.92 236.38,607.72 234.46,609.12 232.54,610.12 230.73,610.82 229.82,611.02 228.81,611.32 227.7,611.52 226.49,611.72 225.18,611.92 223.87,611.92 222.35,611.92 220.84,611.72 219.22,611.52 217.51,611.02 215.79,610.52 213.97,609.72 212.16,608.72 210.24,607.52 208.22,606.02 206.2,604.32 207.21,605.42 208.22,606.42 209.33,607.52 210.64,608.52 211.96,609.42 213.37,610.32 214.88,611.12 216.4,611.83 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-118.18992,101.71015)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon209"
|
||||||
|
points="134.13,581.91 132.42,581.41 130.7,581.01 128.89,580.81 126.97,580.71 125.15,580.81 123.23,581.01 121.22,581.51 117.68,583.01 114.86,585.01 112.84,587.51 111.42,590.21 110.52,592.91 110.11,595.51 110.01,597.92 110.31,599.82 110.82,601.52 111.73,603.42 113.04,605.42 114.65,607.42 116.67,609.32 119.09,610.92 122.02,612.32 125.25,613.22 126.46,613.42 127.78,613.62 129.09,613.72 130.5,613.72 131.81,613.72 133.23,613.62 134.64,613.42 136.05,613.22 137.46,612.82 138.88,612.42 140.29,612.02 141.7,611.42 143.12,610.82 144.53,610.12 145.94,609.32 147.26,608.42 149.28,606.82 151.29,605.02 153.31,602.82 155.23,600.62 157.15,598.22 159.06,595.81 160.98,593.41 162.8,591.21 164.62,589.21 166.43,587.41 168.15,586.01 169.76,585.01 171.38,584.51 172.89,584.61 174.41,585.31 175.82,586.71 176.22,586.31 175.62,585.81 175.01,585.21 174.31,584.81 173.5,584.31 172.59,584.01 171.68,583.81 170.57,583.81 169.46,583.91 168.25,584.21 166.94,584.81 165.53,585.71 164.01,586.91 162.4,588.41 160.68,590.31 158.76,592.51 156.84,595.22 155.63,596.82 154.52,598.32 153.41,599.72 152.2,601.02 151.09,602.22 149.98,603.32 148.97,604.42 147.86,605.32 146.55,606.32 145.24,607.22 144.03,608.02 142.71,608.82 141.6,609.42 140.39,609.92 139.18,610.42 138.07,610.82 137.06,611.12 135.95,611.42 134.94,611.62 133.93,611.83 133.02,611.92 132.12,612.02 131.21,612.12 130.4,612.12 129.29,612.12 128.08,612.02 126.77,611.83 125.35,611.62 123.94,611.22 122.53,610.82 121.11,610.22 119.7,609.52 118.39,608.72 117.08,607.82 115.87,606.72 114.65,605.52 113.75,604.12 112.84,602.62 112.13,600.92 111.63,599.02 111.32,595.81 111.63,593.01 112.64,590.51 114.05,588.41 115.76,586.61 117.58,585.21 119.5,584.21 121.31,583.51 122.22,583.21 123.23,583.01 124.34,582.81 125.55,582.61 126.87,582.41 128.18,582.31 129.69,582.41 131.21,582.51 132.82,582.81 134.54,583.21 136.25,583.81 138.07,584.61 139.99,585.61 141.91,586.81 143.93,588.31 145.94,590.01 144.93,588.91 143.93,587.91 142.81,586.81 141.5,585.81 140.19,584.91 138.78,584.01 137.26,583.21 135.75,582.51 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-118.18992,101.71015)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon211"
|
||||||
|
points="163.51,608.32 165.12,607.02 166.94,605.32 168.96,603.42 170.97,601.32 172.99,599.32 174.81,597.22 176.32,595.41 178.44,592.91 180.46,590.71 182.28,588.91 183.9,587.51 185.51,586.31 186.82,585.41 188.14,584.71 189.35,584.31 190.36,584.11 191.36,584.11 192.27,584.21 193.08,584.41 193.79,584.81 194.5,585.21 195.1,585.71 195.6,586.21 195.2,586.61 193.99,585.51 192.68,585.11 191.16,585.21 189.55,585.91 187.83,587.01 186.01,588.51 184.2,590.31 182.28,592.31 180.26,594.51 178.24,596.82 176.22,599.12 174.21,601.42 172.29,603.62 170.27,605.62 168.45,607.32 166.64,608.72 165.83,609.22 164.72,609.92 163.41,610.52 161.89,610.92 160.38,611.12 158.86,610.92 157.35,610.22 156.14,608.92 156.74,608.42 157.25,609.12 157.85,609.62 158.56,610.02 159.27,610.22 159.97,610.22 160.78,610.02 161.59,609.72 162.4,609.22 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-118.18992,101.71015)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon213"
|
||||||
|
points="123.33,595.81 130.5,595.81 137.87,595.71 145.34,595.71 152.91,595.71 160.68,595.71 168.35,595.71 176.22,595.71 184,595.81 191.77,595.81 199.44,595.81 207.11,595.81 214.58,595.81 221.95,595.91 229.22,595.91 236.28,595.91 243.15,596.01 249.71,596.01 256.06,596.12 262.12,596.12 267.87,596.22 273.22,596.22 278.17,596.31 282.81,596.31 283.42,596.31 284.02,596.51 284.43,596.72 284.63,596.91 284.73,597.12 284.43,597.32 283.82,597.42 282.81,597.52 276.65,597.62 270.2,597.72 263.43,597.82 256.47,597.92 249.2,598.02 241.83,598.02 234.26,598.02 226.49,598.02 218.62,598.02 210.64,598.02 202.67,598.02 194.59,598.02 186.62,597.92 178.55,597.92 170.57,597.92 162.7,597.82 154.93,597.72 147.36,597.72 139.89,597.62 132.62,597.62 125.55,597.52 118.69,597.52 112.13,597.52 105.97,597.42 100.02,597.42 94.47,597.42 89.32,597.42 84.67,597.42 80.34,597.42 76.5,597.42 73.27,597.42 70.44,597.52 69.53,597.52 68.83,597.42 68.33,597.22 68.12,596.91 68.22,596.72 68.63,596.51 69.33,596.42 70.44,596.31 74.89,596.22 79.83,596.12 85.08,596.12 90.73,596.01 96.69,595.91 102.94,595.91 109.51,595.81 116.27,595.81 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-118.18992,101.71015)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon215"
|
||||||
|
points="152.3,609.22 153.41,608.32 155.03,607.02 156.84,605.32 158.86,603.42 160.88,601.32 162.9,599.32 164.72,597.22 166.33,595.41 168.45,592.91 170.37,590.71 172.19,588.91 173.9,587.51 175.42,586.31 176.83,585.41 178.04,584.71 179.25,584.31 180.36,584.11 181.27,584.11 182.18,584.21 182.99,584.41 183.79,584.81 184.4,585.21 185,585.71 185.61,586.21 185.21,586.61 184,585.51 182.69,585.11 181.17,585.21 179.56,585.91 177.84,587.01 176.02,588.51 174.1,590.31 172.19,592.31 170.17,594.51 168.15,596.82 166.23,599.12 164.21,601.42 162.19,603.62 160.28,605.62 158.46,607.32 156.64,608.72 155.74,609.22 154.63,609.92 153.21,610.52 151.59,611.02 149.98,611.12 148.37,610.82 146.95,609.92 145.64,608.32 146.45,608.12 147.05,608.92 147.66,609.52 148.27,609.92 148.97,610.12 149.78,610.22 150.59,610.12 151.4,609.72 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-118.18992,101.71015)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon217"
|
||||||
|
points="173.8,608.32 175.42,607.02 177.24,605.32 179.25,603.42 181.27,601.32 183.29,599.32 185.11,597.22 186.62,595.41 188.74,592.91 190.76,590.71 192.58,588.91 194.19,587.51 195.81,586.31 197.12,585.41 198.43,584.71 199.64,584.31 200.65,584.11 201.66,584.11 202.57,584.21 203.38,584.41 204.08,584.81 204.79,585.21 205.39,585.71 205.9,586.21 205.5,586.61 204.29,585.51 202.97,585.11 201.46,585.21 199.84,585.91 198.13,587.01 196.31,588.51 194.39,590.31 192.47,592.31 190.56,594.51 188.54,596.82 186.52,599.12 184.5,601.42 182.58,603.62 180.56,605.62 178.75,607.32 176.93,608.72 176.13,609.22 175.01,609.92 173.7,610.52 172.19,610.92 170.67,611.12 169.16,610.92 167.65,610.22 166.43,608.92 166.94,608.42 167.54,609.12 168.15,609.62 168.75,610.02 169.46,610.22 170.27,610.22 170.97,610.02 171.88,609.72 172.69,609.22 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-118.18992,101.71015)" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 10 KiB |
159
assets/svg/Ornament-Horiz-1.svg
Normal file
|
@ -0,0 +1,159 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<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"
|
||||||
|
width="37.126331mm"
|
||||||
|
height="12.348104mm"
|
||||||
|
viewBox="0 0 37.126331 12.348105"
|
||||||
|
version="1.1"
|
||||||
|
id="svg3667"
|
||||||
|
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
|
||||||
|
sodipodi:docname="Ornament-Horiz-1.svg">
|
||||||
|
<defs
|
||||||
|
id="defs3661" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1.8101934"
|
||||||
|
inkscape:cx="29.802371"
|
||||||
|
inkscape:cy="-85.635184"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="g852"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1003"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata3664">
|
||||||
|
<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>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(204.8555,-158.2831)">
|
||||||
|
<g
|
||||||
|
id="g852"
|
||||||
|
transform="translate(-99.012044,18.551839)">
|
||||||
|
<g
|
||||||
|
id="g873">
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1195"
|
||||||
|
points="375.06,614.57 374.83,614.45 374.6,614.22 374.25,613.98 374.01,613.75 373.66,613.51 373.31,613.28 373.07,613.16 372.72,612.81 372.37,612.7 372.02,612.46 371.67,612.23 371.2,612.11 370.85,611.88 370.49,611.65 370.02,611.53 369.67,611.3 369.2,611.18 368.74,610.95 368.38,610.83 367.91,610.71 367.44,610.48 366.86,610.36 366.39,610.25 365.92,610.13 365.33,610.01 364.87,609.9 364.4,609.9 363.81,609.78 363.23,609.66 362.64,609.55 362.17,609.55 361.58,609.55 361,609.55 360.41,609.55 359.71,609.55 359.12,609.55 358.65,609.55 358.19,609.66 357.72,609.78 357.13,609.78 356.66,609.9 356.31,610.01 355.84,610.13 355.37,610.25 354.9,610.36 354.43,610.48 354.08,610.71 353.61,610.83 353.26,610.95 352.91,611.18 352.56,611.3 352.09,611.53 351.74,611.65 351.39,611.88 351.03,612.11 350.68,612.23 350.33,612.46 350.1,612.7 349.86,612.93 349.51,613.16 349.16,613.4 348.92,613.51 348.69,613.87 348.45,614.1 348.22,614.33 347.99,614.68 347.87,614.91 347.63,615.15 347.52,615.5 347.28,615.62 347.17,615.97 346.93,616.32 346.81,616.55 346.7,616.78 346.58,617.01 346.46,617.25 346.35,617.6 346.23,617.83 346.23,618.18 346.23,618.3 346.11,618.65 346.11,619 346.11,619.23 346.11,619.7 346.11,620.16 346.11,620.4 346.23,620.63 346.23,620.98 346.35,621.22 346.46,621.68 346.81,622.15 347.05,622.5 347.52,622.97 347.87,623.32 348.22,623.67 348.57,623.78 348.92,624.02 349.28,624.13 349.63,624.37 350.1,624.37 350.45,624.37 350.8,624.37 351.15,624.37 351.62,624.25 351.97,624.25 352.32,624.02 352.56,623.9 352.91,623.78 353.26,623.55 353.5,623.32 353.73,623.08 354.08,622.85 354.32,622.62 354.67,622.03 355.14,621.68 355.25,621.1 355.49,620.75 355.49,620.28 355.25,620.16 355.14,620.28 354.79,620.52 354.43,620.63 354.2,620.63 353.96,620.63 353.73,620.4 353.5,620.16 353.38,619.93 353.5,619.58 353.61,619.35 353.73,619.11 353.96,619 354.2,618.76 354.43,618.65 354.67,618.65 355.14,618.76 355.37,619 355.61,619.11 355.84,619.35 356.07,619.7 356.19,620.05 356.31,620.4 356.31,620.63 356.31,620.98 356.31,621.22 356.31,621.45 356.19,621.68 356.07,622.03 355.96,622.38 355.72,622.73 355.61,623.08 355.37,623.43 355.14,623.78 355.02,624.25 354.67,624.6 354.32,624.95 353.96,625.18 353.61,625.53 353.26,625.77 352.91,626 352.56,626.35 352.32,626.47 351.86,626.7 351.5,626.82 351.03,626.93 350.68,627.05 350.21,627.17 349.86,627.17 349.51,627.28 349.16,627.28 348.69,627.28 348.34,627.28 347.99,627.17 347.52,627.17 347.17,627.05 346.81,626.93 346.46,626.82 346.23,626.7 345.88,626.47 345.52,626.35 345.17,626.12 344.94,625.88 344.7,625.77 344.35,625.42 344.12,625.18 344,624.95 343.65,624.6 343.42,624.25 343.18,623.78 343.06,623.43 342.83,622.97 342.83,622.5 342.71,622.15 342.71,621.68 342.59,621.22 342.59,620.75 342.59,620.28 342.71,619.81 342.83,619.35 342.83,619 342.95,618.41 343.18,617.95 343.3,617.48 343.42,617.01 343.65,616.55 343.77,616.2 344,615.62 344.24,615.26 344.47,614.91 344.82,614.45 345.06,614.1 345.41,613.63 345.64,613.28 345.99,613.05 346.23,612.7 346.58,612.46 346.81,612.23 347.28,612 347.52,611.65 347.87,611.53 348.22,611.18 348.57,611.06 348.92,610.83 349.28,610.6 349.75,610.48 350.21,610.25 350.56,610.13 350.92,609.9 351.39,609.78 351.86,609.55 352.32,609.43 352.68,609.31 353.14,609.08 353.73,609.08 354.08,608.85 354.67,608.85 354.9,608.73 355.02,608.61 355.37,608.61 355.61,608.61 355.84,608.5 356.19,608.38 356.43,608.38 356.66,608.38 357.01,608.38 357.25,608.26 357.48,608.26 357.83,608.26 358.07,608.15 358.42,608.15 358.65,608.15 359,608.15 359.24,608.15 359.59,608.15 359.83,608.15 360.18,608.15 360.53,608.03 360.76,608.03 361.12,608.03 361.47,608.03 361.7,608.03 362.05,608.03 362.4,608.03 362.76,608.15 363.11,608.03 363.46,608.03 363.81,608.03 364.16,608.15 364.63,608.15 364.98,608.15 365.33,608.15 365.81,608.26 366.04,608.26 366.51,608.38 366.86,608.38 367.33,608.5 367.8,608.61 368.15,608.73 368.62,608.85 368.97,608.85 369.44,608.96 369.79,609.08 370.26,609.2 370.73,609.31 371.08,609.43 371.55,609.55 371.9,609.66 372.37,609.78 372.72,610.01 373.19,610.13 373.54,610.25 373.89,610.36 374.25,610.48 374.71,610.71 375.18,610.83 375.53,610.95 375.88,611.18 376.24,611.3 376.59,611.41 376.94,611.53 377.29,611.65 377.64,611.88 378,612 378.35,612.11 378.58,612.23 378.93,612.35 379.29,612.46 379.64,612.58 379.87,612.7 380.11,612.81 380.34,612.93 380.69,613.05 381.04,613.28 381.51,613.51 381.86,613.51 382.22,613.75 382.57,613.98 382.8,614.1 382.8,618.41 382.8,618.41 378.7,618.65 378.58,618.53 378.35,618.3 378.23,617.95 378,617.71 377.76,617.48 377.53,617.25 377.29,616.9 376.94,616.43 376.59,616.08 376.24,615.62 375.77,615.26 375.3,614.91 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1197"
|
||||||
|
points="334.27,620.52 333.92,620.98 333.8,621.33 333.69,621.68 333.69,621.8 333.57,622.15 333.45,622.38 333.33,622.85 333.33,623.32 333.33,623.67 333.33,623.9 333.33,624.25 333.33,624.48 333.33,624.72 333.45,625.07 333.45,625.3 333.69,625.53 333.69,625.77 333.8,626 333.92,626.35 334.15,626.58 334.27,626.82 334.51,627.17 334.62,627.4 334.98,627.75 335.21,627.98 335.44,628.22 335.68,628.45 336.03,628.8 335.91,628.8 335.68,628.92 335.33,628.92 335.09,628.92 334.74,629.03 334.51,629.03 334.04,629.03 333.69,629.03 333.22,628.92 332.75,628.92 332.28,628.8 331.81,628.68 331.34,628.45 330.87,628.33 330.75,628.22 330.64,628.1 330.52,627.75 330.29,627.4 330.17,627.17 330.17,626.93 330.05,626.7 329.94,626.47 329.94,626 329.94,625.77 329.94,625.42 329.94,625.07 329.94,624.6 330.05,624.13 330.17,623.78 330.4,623.2 330.52,622.73 330.75,622.27 330.99,622.03 331.11,621.68 331.34,621.45 331.57,621.22 331.69,620.87 331.93,620.63 332.16,620.28 332.4,620.05 332.63,619.7 332.98,619.46 333.22,619.11 333.69,618.88 333.92,618.41 334.27,618.18 334.62,617.83 335.09,617.6 335.44,617.13 335.91,616.9 336.38,616.55 336.97,616.2 337.55,616.32 337.55,616.32 337.32,616.43 337.2,616.66 336.97,616.78 336.73,617.01 336.5,617.25 336.38,617.6 336.03,617.71 335.8,618.07 335.44,618.41 335.21,618.76 334.98,619.11 334.74,619.58 334.39,620.05 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1199"
|
||||||
|
points="340.48,619.23 340.37,619.46 340.37,619.7 340.25,620.05 340.25,620.28 340.13,620.63 340.01,620.98 340.01,621.22 340.01,621.45 340.01,621.68 340.01,622.03 340.01,622.38 340.01,622.73 340.01,623.08 340.01,623.32 340.01,623.67 340.13,623.9 340.25,624.25 340.37,624.48 340.48,624.83 340.6,625.07 340.72,625.42 340.72,625.77 340.95,626 341.07,626.23 341.31,626.47 341.42,626.82 341.66,627.05 342.01,627.4 342.13,627.63 342.48,627.87 342.83,628.1 343.06,628.45 343.42,628.57 343.77,628.8 344.24,629.15 344.7,629.38 344.59,629.38 344.47,629.38 344.24,629.38 344,629.38 343.65,629.38 343.3,629.38 342.83,629.38 342.48,629.38 342.01,629.27 341.42,629.27 341.19,629.15 340.95,629.15 340.72,629.15 340.48,629.15 340.13,629.03 339.9,628.92 339.55,628.8 339.31,628.68 338.84,628.45 338.38,628.22 338.02,627.98 337.79,627.75 337.32,627.28 337.08,626.93 336.85,626.58 336.73,626.35 336.62,626 336.5,625.77 336.38,625.42 336.26,625.07 336.26,624.6 336.26,624.25 336.15,623.78 336.26,623.32 336.26,622.85 336.38,622.38 336.5,622.15 336.62,621.8 336.62,621.57 336.73,621.33 336.85,620.98 336.97,620.75 337.08,620.52 337.32,620.28 337.44,619.93 337.55,619.58 337.79,619.23 338.02,619 338.14,618.65 338.38,618.3 338.73,617.95 338.96,617.6 339.19,617.25 339.43,616.9 339.78,616.55 340.13,616.32 340.48,615.85 340.84,615.62 341.19,615.15 341.66,614.91 342.48,614.91 342.48,614.91 342.36,614.91 342.13,615.26 342.01,615.5 341.89,615.73 341.66,616.08 341.54,616.43 341.31,616.9 341.19,617.25 340.95,617.6 340.72,618.18 340.72,618.41 340.6,618.65 340.48,619 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1201"
|
||||||
|
points="343.77,608.38 343.42,608.15 343.18,608.03 342.83,607.68 342.59,607.45 342.36,607.21 342.13,606.98 341.89,606.75 341.77,606.4 341.54,606.16 341.42,605.93 341.19,605.58 341.07,605.35 340.95,605 340.84,604.76 340.72,604.41 340.72,604.06 340.72,603.83 340.72,603.6 340.72,603.36 340.72,603.01 340.72,602.78 340.72,602.66 340.72,602.08 340.95,601.73 341.07,601.38 341.31,601.03 341.42,600.68 341.77,600.45 342.01,600.21 342.24,599.98 342.48,599.74 342.83,599.63 343.06,599.51 343.42,599.28 343.77,599.28 344.12,599.28 344.47,599.16 344.82,599.04 345.06,599.04 345.52,599.04 345.76,599.04 345.99,599.04 346.23,599.16 346.58,599.28 347.05,599.28 347.4,599.63 347.63,599.86 347.87,600.21 347.52,600.09 347.17,600.33 346.93,600.33 346.81,600.56 346.7,600.68 346.81,601.03 346.81,601.38 346.81,601.61 347.05,601.61 347.4,601.85 347.52,601.85 347.87,601.85 348.1,601.73 348.34,601.73 348.34,601.61 348.45,601.38 348.45,601.26 348.57,601.03 348.45,600.68 348.45,600.33 348.34,599.98 348.22,599.74 348.1,599.28 347.75,598.93 347.52,598.58 347.05,598.23 346.81,597.99 346.58,597.88 346.23,597.64 345.99,597.53 345.64,597.41 345.29,597.29 344.94,597.18 344.59,597.06 344.12,596.94 343.77,596.94 343.3,596.83 342.83,596.83 342.48,596.83 342.01,596.94 341.66,596.94 341.31,597.18 340.84,597.29 340.48,597.29 340.01,597.53 339.78,597.76 339.43,597.88 339.08,598.23 338.84,598.46 338.61,598.69 338.26,599.04 338.02,599.28 337.79,599.63 337.55,599.98 337.32,600.33 337.2,600.68 337.08,601.03 336.97,601.38 336.73,601.85 336.73,602.2 336.62,602.55 336.62,603.01 336.62,603.36 336.62,603.83 336.73,604.18 336.85,604.65 336.85,605 337.08,605.35 337.2,605.58 337.32,606.05 337.44,606.28 337.67,606.63 337.91,606.86 338.14,607.21 338.38,607.45 338.61,607.68 338.84,607.91 339.19,608.15 339.43,608.38 339.78,608.61 340.01,608.85 340.48,609.08 340.72,609.2 341.07,609.43 341.42,609.43 341.77,609.66 342.13,609.78 342.59,609.9 342.95,610.01 343.42,610.13 343.77,610.13 344.12,610.13 344.47,610.25 344.82,610.36 345.29,610.36 345.64,610.36 346.11,610.36 346.46,610.36 346.81,610.36 347.05,610.25 347.28,610.25 347.52,610.25 347.87,610.13 348.22,610.13 348.45,610.13 348.69,610.01 348.92,609.9 349.16,609.9 349.16,609.31 349.16,609.31 348.81,609.31 348.22,609.43 347.87,609.43 347.52,609.43 347.05,609.43 346.58,609.31 346.23,609.31 345.88,609.2 345.52,609.08 345.06,608.96 344.7,608.85 344.47,608.73 344.12,608.5 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1203"
|
||||||
|
points="330.52,611.3 329.94,610.95 329.58,610.71 329.11,610.25 328.76,610.01 328.29,609.55 327.94,609.08 327.71,608.73 327.47,608.15 327.24,607.91 327.12,607.68 327,607.45 327,607.1 326.89,606.75 326.89,606.4 326.77,606.05 326.77,605.81 326.77,605.46 326.77,605.11 326.77,604.76 326.89,604.41 326.89,604.06 327,603.71 327.12,603.36 327.24,602.9 327.12,602.9 326.77,603.01 326.42,603.13 326.3,603.25 325.95,603.36 325.71,603.6 325.25,603.71 325.01,604.06 324.54,604.3 324.31,604.65 323.84,604.88 323.6,605.35 323.49,605.46 323.25,605.7 323.13,606.05 323.02,606.28 323.02,606.4 323.02,606.63 323.02,606.86 323.02,607.33 323.02,607.56 323.13,607.8 323.13,608.15 323.37,608.38 323.49,608.73 323.72,608.96 323.84,609.31 324.19,609.66 324.43,610.01 324.78,610.36 325.13,610.6 325.6,610.95 325.71,611.18 325.95,611.3 326.3,611.41 326.54,611.53 326.89,611.76 327.12,611.88 327.47,612 327.82,612.23 328.06,612.23 328.41,612.46 328.88,612.58 329.23,612.7 329.58,612.81 330.05,612.81 330.52,612.93 330.99,613.16 331.34,613.16 331.93,613.28 332.51,613.4 332.98,613.51 333.57,613.51 334.15,613.51 334.74,613.51 335.33,613.63 335.8,613.05 335.8,613.05 335.68,613.05 335.33,612.93 335.09,612.81 334.74,612.81 334.39,612.81 334.04,612.7 333.69,612.58 333.22,612.46 332.75,612.23 332.4,612.23 331.81,611.88 331.46,611.76 330.99,611.53 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1205"
|
||||||
|
points="336.03,608.73 335.68,608.26 335.21,607.8 334.86,607.45 334.51,606.86 334.39,606.63 334.15,606.4 334.04,606.05 333.92,605.81 333.8,605.58 333.69,605.35 333.57,605 333.57,604.76 333.33,604.41 333.33,604.06 333.33,603.71 333.33,603.48 333.33,603.13 333.33,602.78 333.33,602.43 333.33,602.08 333.33,601.73 333.45,601.38 333.69,601.03 333.8,600.68 333.92,600.21 334.04,599.86 334.27,599.51 334.51,599.16 334.39,599.16 334.27,599.16 334.04,599.28 333.69,599.39 333.22,599.63 332.87,599.86 332.4,600.09 331.93,600.56 331.34,600.79 330.99,601.26 330.52,601.61 330.05,602.08 329.82,602.31 329.7,602.55 329.58,602.78 329.46,603.13 329.23,603.36 329.23,603.71 329.23,604.06 329.23,604.3 329.11,604.41 329.11,604.53 329.11,604.76 329.23,605.35 329.23,605.46 329.23,605.7 329.46,606.05 329.58,606.28 329.7,606.63 329.94,606.86 330.17,607.21 330.4,607.56 330.64,607.8 330.99,608.15 331.34,608.5 331.81,608.85 331.93,608.96 332.16,609.2 332.4,609.31 332.63,609.43 332.98,609.66 333.22,609.78 333.57,610.01 333.92,610.13 334.15,610.25 334.51,610.48 334.74,610.6 335.21,610.71 335.44,610.83 335.91,610.95 336.38,611.18 336.73,611.3 337.2,611.41 337.55,611.53 338.02,611.65 338.49,611.76 338.96,611.88 339.43,612 340.01,612.11 340.6,612.23 341.31,611.76 341.31,611.76 341.07,611.65 340.72,611.53 340.48,611.41 340.13,611.3 339.78,611.18 339.43,610.95 339.08,610.83 338.73,610.48 338.26,610.25 337.79,610.01 337.32,609.66 336.97,609.43 336.5,609.08 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1207"
|
||||||
|
points="325.01,618.65 324.66,618.76 324.31,619 323.96,619.23 323.72,619.46 323.25,619.7 323.02,620.05 322.55,620.28 322.31,620.63 321.85,620.98 321.61,621.33 321.26,621.68 321.02,622.15 320.79,622.62 320.44,623.08 320.2,623.08 319.97,623.08 319.74,622.97 319.5,622.97 319.15,622.85 318.8,622.85 318.45,622.73 318.1,622.73 317.63,622.62 317.27,622.38 316.81,622.27 316.45,622.15 315.99,621.8 315.52,621.57 315.16,621.22 314.81,620.87 314.81,620.63 314.93,620.16 315.16,619.93 315.28,619.58 315.52,619.23 315.63,619 315.87,618.65 316.1,618.3 316.34,617.95 316.69,617.6 316.92,617.25 317.16,616.9 317.51,616.55 317.86,616.32 318.1,616.43 318.21,616.55 318.68,616.66 318.8,616.66 319.03,616.78 319.27,616.9 319.62,616.9 319.85,616.9 320.2,617.01 320.44,617.13 320.91,617.25 321.14,617.25 321.61,617.25 321.96,617.36 322.43,617.36 322.9,617.36 323.25,617.36 323.6,617.36 323.72,617.36 324.07,617.36 324.31,617.48 324.54,617.36 324.78,617.36 325.01,617.25 325.36,617.25 325.6,617.25 325.83,617.25 326.18,617.13 326.42,617.13 326.77,617.01 327,617.01 327.24,616.9 327.59,616.9 327.94,616.78 328.29,616.66 328.53,616.55 328.88,616.55 329,617.25 328.76,617.25 328.41,617.36 328.06,617.48 327.82,617.48 327.59,617.6 327.24,617.6 327,617.71 326.65,617.83 326.42,617.95 326.07,618.18 325.83,618.3 325.48,618.41 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1209"
|
||||||
|
points="327.36,614.33 327.12,614.22 326.89,614.22 326.54,614.1 326.3,614.1 325.83,613.87 325.36,613.75 324.89,613.51 324.43,613.28 323.96,613.05 323.6,612.81 323.02,612.35 322.67,612 322.31,611.53 321.96,611.18 321.73,610.83 321.61,610.6 321.5,610.36 321.26,610.13 321.14,609.78 321.02,609.43 320.91,609.2 320.91,608.85 320.79,608.85 320.56,609.08 320.32,609.31 319.97,609.78 319.85,609.9 319.62,610.13 319.5,610.48 319.5,610.83 319.27,611.18 319.27,611.53 319.15,611.88 319.27,612.35 319.38,612.58 319.5,612.81 319.74,613.16 320.09,613.51 320.56,613.87 320.79,613.98 321.02,614.22 321.38,614.45 321.73,614.68 322.08,614.8 322.55,614.91 322.9,615.03 323.49,615.26 323.72,615.26 323.84,615.38 324.19,615.38 324.43,615.5 324.78,615.5 325.01,615.62 325.36,615.62 325.71,615.62 325.95,615.62 326.3,615.62 326.65,615.62 327,615.62 327.36,615.62 327.71,615.62 328.18,615.62 328.53,615.62 329,615.5 329.35,615.38 329.82,615.38 330.29,615.26 330.64,615.26 331.22,615.15 331.69,615.03 332.16,614.91 332.16,614.33 332.16,614.33 332.04,614.33 331.81,614.45 331.46,614.45 331.22,614.45 330.99,614.45 330.64,614.57 330.29,614.57 329.94,614.57 329.58,614.57 329.11,614.57 328.64,614.45 328.29,614.45 327.82,614.33 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1211"
|
||||||
|
points="327.94,621.33 327.82,621.8 327.59,622.27 327.36,622.62 327.24,623.08 327.12,623.43 327.12,624.02 327,624.37 327,624.95 327,625.07 327.12,625.42 327.12,625.77 327.24,626 327.24,626.23 327.36,626.47 327.47,626.7 327.59,627.05 327.82,627.28 327.94,627.63 328.18,627.87 328.41,628.22 328.29,628.22 327.94,628.22 327.71,628.22 327.47,628.1 327.24,628.1 327,628.1 326.54,627.98 326.3,627.87 325.95,627.75 325.6,627.75 325.25,627.4 324.89,627.28 324.54,627.05 324.19,626.82 324.19,626.7 324.07,626.58 323.96,626.23 323.84,625.88 323.84,625.77 323.84,625.42 323.84,625.18 323.84,624.95 323.84,624.6 323.84,624.37 323.96,624.02 324.19,623.78 324.19,623.32 324.43,623.08 324.54,622.62 324.89,622.38 325.01,621.92 325.36,621.57 325.71,621.1 326.3,620.75 326.42,620.52 326.65,620.28 326.89,620.16 327.24,619.93 327.47,619.7 327.82,619.58 328.06,619.23 328.41,619.11 328.76,619 329.11,618.76 329.58,618.53 329.94,618.3 330.4,618.07 330.75,617.95 331.22,617.6 331.81,617.6 332.28,617.83 332.28,617.83 332.04,617.83 331.81,617.95 331.46,618.3 330.99,618.65 330.64,618.76 330.4,619 330.05,619.23 329.82,619.46 329.46,619.7 329.11,620.05 328.88,620.28 328.64,620.75 328.29,620.98 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1213"
|
||||||
|
points="394.64,625.77 394.88,625.88 395.23,626.12 395.46,626.47 395.81,626.58 396.05,626.82 396.4,627.05 396.75,627.17 396.99,627.4 397.34,627.63 397.69,627.75 398.16,628.1 398.51,628.22 398.86,628.45 399.21,628.57 399.68,628.8 400.03,628.92 400.5,629.15 400.97,629.27 401.44,629.5 401.91,629.62 402.26,629.85 402.85,629.85 403.32,630.08 403.78,630.2 404.25,630.2 404.84,630.32 405.43,630.55 405.89,630.55 406.48,630.55 406.95,630.55 407.65,630.67 408.24,630.67 408.82,630.78 409.41,630.78 410.12,630.78 410.58,630.67 411.05,630.67 411.64,630.55 412.11,630.55 412.58,630.55 413.05,630.43 413.51,630.32 413.98,630.2 414.33,630.08 414.8,629.85 415.27,629.85 415.74,629.73 416.09,629.5 416.44,629.38 416.91,629.15 417.26,629.03 417.62,628.8 417.97,628.57 418.32,628.45 418.67,628.22 419.02,627.98 419.26,627.75 419.61,627.52 419.84,627.4 420.08,627.05 420.43,626.82 420.66,626.58 421.02,626.47 421.49,625.88 421.84,625.42 422.07,625.18 422.19,624.95 422.42,624.6 422.54,624.37 422.66,624.13 422.77,623.78 423.01,623.55 423.13,623.32 423.24,623.08 423.24,622.73 423.36,622.5 423.48,622.27 423.48,621.92 423.6,621.68 423.6,621.45 423.71,621.22 423.6,620.98 423.6,620.63 423.6,620.28 423.6,620.16 423.48,619.58 423.36,619.23 423.24,618.65 423.01,618.3 422.66,617.83 422.42,617.48 421.95,617.01 421.6,616.78 421.25,616.43 420.78,616.32 420.43,616.08 420.08,615.97 419.73,615.85 419.26,615.85 418.91,615.85 418.44,615.97 418.08,615.97 417.85,616.2 417.38,616.32 417.15,616.43 416.8,616.55 416.44,616.9 416.21,617.01 415.86,617.25 415.62,617.48 415.39,617.71 415.04,617.95 414.92,618.3 414.8,618.41 414.69,618.76 414.33,619.23 414.33,619.7 414.33,620.05 414.57,620.28 414.69,620.16 415.04,619.93 415.27,619.7 415.51,619.7 415.74,619.7 416.09,619.93 416.33,620.28 416.44,620.52 416.33,620.75 416.21,620.98 416.09,621.22 415.74,621.45 415.62,621.57 415.39,621.68 415.04,621.68 414.57,621.57 414.33,621.33 414.1,621.22 413.87,620.98 413.75,620.63 413.63,620.28 413.51,619.93 413.4,619.7 413.4,619.46 413.51,619.11 413.63,619 413.63,618.65 413.75,618.3 413.75,617.95 413.98,617.6 414.1,617.25 414.33,616.9 414.57,616.55 414.92,616.32 415.15,615.85 415.51,615.5 415.74,615.03 416.09,614.8 416.44,614.45 416.8,614.22 417.15,613.98 417.62,613.87 417.85,613.51 418.32,613.51 418.67,613.28 419.14,613.16 419.49,613.16 419.84,613.05 420.31,613.05 420.66,613.05 421.02,613.05 421.49,613.05 421.84,613.05 422.19,613.16 422.54,613.16 422.89,613.4 423.24,613.51 423.6,613.63 423.95,613.75 424.18,613.98 424.53,614.22 424.88,614.45 425.12,614.57 425.35,614.91 425.59,615.15 425.94,615.5 426.17,615.73 426.41,616.2 426.53,616.55 426.76,616.9 426.88,617.36 427,617.71 427,618.18 427.11,618.65 427.11,619 427.11,619.58 427.11,619.93 427,620.52 426.88,620.98 426.88,621.45 426.76,621.92 426.64,622.38 426.53,622.85 426.29,623.32 426.06,623.78 425.94,624.13 425.7,624.6 425.47,625.07 425.24,625.42 425,625.88 424.65,626.23 424.42,626.58 424.06,626.93 423.83,627.28 423.48,627.52 423.13,627.87 422.77,628.1 422.54,628.45 422.19,628.57 421.84,628.8 421.49,629.03 421.13,629.27 420.78,629.5 420.43,629.62 419.96,629.85 419.61,630.08 419.14,630.2 418.79,630.43 418.44,630.55 417.97,630.78 417.5,630.9 417.03,631.02 416.56,631.13 416.09,631.25 415.86,631.25 415.62,631.37 415.39,631.37 415.04,631.48 414.57,631.6 414.1,631.72 413.87,631.72 413.63,631.83 413.28,631.83 413.05,631.83 412.69,631.83 412.46,631.95 412.22,631.95 411.99,632.07 411.64,632.07 411.4,632.07 411.05,632.07 410.82,632.18 410.47,632.18 410.23,632.18 409.88,632.18 409.64,632.18 409.29,632.18 408.94,632.18 408.59,632.18 408.24,632.3 408,632.3 407.65,632.3 407.3,632.3 406.95,632.3 406.6,632.3 406.25,632.3 405.89,632.18 405.54,632.18 405.07,632.18 404.72,632.18 404.37,632.07 404.02,632.07 403.55,631.95 403.2,631.95 402.73,631.83 402.38,631.83 401.91,631.72 401.56,631.6 401.09,631.48 400.74,631.48 400.27,631.25 399.92,631.25 399.45,631.13 399.1,631.02 398.63,630.78 398.16,630.67 397.81,630.55 397.45,630.55 396.99,630.32 396.63,630.2 396.17,630.08 395.81,629.85 395.35,629.85 394.99,629.62 394.64,629.5 394.29,629.38 393.82,629.15 393.47,629.15 393.12,628.92 392.76,628.8 392.41,628.68 392.06,628.45 391.71,628.45 391.48,628.33 391.13,628.1 390.77,627.98 390.42,627.87 390.19,627.75 389.83,627.63 389.6,627.52 389.37,627.4 389.13,627.28 388.66,627.05 388.31,626.93 387.84,626.7 387.61,626.58 387.14,626.47 387.14,626.47 387.14,622.03 387.14,622.03 391.13,621.68 391.24,621.8 391.36,622.15 391.48,622.27 391.71,622.5 391.83,622.85 392.18,623.2 392.53,623.43 392.76,623.78 393.12,624.25 393.47,624.72 393.94,625.07 394.41,625.53 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1215"
|
||||||
|
points="436.02,619 436.14,618.41 436.25,617.95 436.25,617.6 436.37,617.48 436.37,617.13 436.37,616.9 436.37,616.66 436.37,616.43 436.37,616.2 436.37,615.85 436.25,615.62 436.25,615.38 436.14,615.03 436.14,614.8 436.02,614.57 435.79,614.22 435.67,613.98 435.55,613.75 435.44,613.51 435.2,613.16 434.97,612.81 434.85,612.7 434.5,612.35 434.26,612.23 434.03,611.88 433.68,611.65 433.79,611.53 434.14,611.53 434.26,611.53 434.61,611.53 434.85,611.41 435.32,611.41 435.67,611.41 436.02,611.41 436.49,611.41 436.96,611.53 437.43,611.53 437.9,611.65 438.13,611.65 438.37,611.76 438.72,611.88 438.95,612.11 439.07,612.23 439.19,612.46 439.42,612.81 439.54,613.05 439.65,613.28 439.65,613.51 439.77,613.87 439.77,614.22 439.89,614.57 439.89,614.91 439.89,615.26 439.77,615.62 439.65,616.08 439.54,616.55 439.42,617.01 439.19,617.6 438.95,618.07 438.72,618.3 438.6,618.65 438.37,618.88 438.25,619.11 438.01,619.46 437.78,619.7 437.54,619.93 437.31,620.28 437.08,620.52 436.84,620.87 436.49,621.22 436.25,621.57 435.79,621.8 435.55,622.15 435.08,622.38 434.73,622.85 434.26,623.08 433.91,623.55 433.44,623.78 432.97,624.25 432.27,624.02 432.27,624.02 432.39,623.9 432.62,623.78 432.97,623.32 433.44,622.85 433.68,622.5 434.03,622.27 434.26,621.8 434.5,621.57 434.73,621.1 434.97,620.75 435.32,620.28 435.55,619.93 435.79,619.35 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1217"
|
||||||
|
points="429.22,621.1 429.34,620.87 429.34,620.52 429.46,620.28 429.57,620.05 429.57,619.7 429.57,619.46 429.57,619.11 429.69,618.88 429.69,618.53 429.69,618.3 429.69,617.95 429.69,617.6 429.57,617.25 429.57,617.01 429.57,616.66 429.46,616.43 429.34,616.08 429.34,615.85 429.22,615.62 429.22,615.26 428.99,614.91 428.87,614.68 428.75,614.33 428.64,614.1 428.28,613.75 428.17,613.51 427.93,613.16 427.7,612.93 427.46,612.7 427.23,612.46 426.88,612.23 426.53,612 426.17,611.65 425.94,611.53 425.47,611.3 425.24,611.06 425.24,611.06 425.35,611.06 425.47,610.95 425.7,610.95 425.94,610.95 426.41,610.95 426.76,610.95 427.35,610.95 427.7,610.95 428.28,611.06 428.52,611.06 428.75,611.18 428.99,611.18 429.34,611.3 429.57,611.3 429.81,611.41 430.04,611.53 430.28,611.53 430.63,611.65 430.86,611.88 431.1,612 431.45,612.23 431.68,612.35 432.04,612.58 432.15,612.81 432.27,612.93 432.5,613.16 432.74,613.51 432.86,613.75 432.97,613.98 433.09,614.22 433.32,614.68 433.32,614.91 433.44,615.38 433.44,615.73 433.56,616.2 433.44,616.55 433.44,617.01 433.44,617.48 433.32,617.95 433.21,618.3 433.09,618.53 432.97,618.76 432.97,619 432.86,619.23 432.74,619.58 432.62,619.81 432.5,620.16 432.27,620.4 432.15,620.75 431.92,620.98 431.68,621.33 431.45,621.68 431.33,622.03 431.1,622.38 430.86,622.73 430.51,623.08 430.28,623.32 429.93,623.78 429.57,624.02 429.22,624.37 428.87,624.83 428.64,625.18 428.28,625.65 427.35,625.53 427.35,625.53 427.35,625.42 427.58,625.07 427.7,624.72 427.81,624.48 428.05,624.25 428.28,623.9 428.4,623.43 428.64,623.08 428.75,622.62 428.87,622.15 428.99,621.8 429.1,621.68 429.22,621.33 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1219"
|
||||||
|
points="425.94,631.95 426.29,632.18 426.64,632.42 426.88,632.53 427.11,632.77 427.35,633 427.58,633.24 427.81,633.47 428.05,633.82 428.17,634.05 428.4,634.4 428.52,634.63 428.64,634.99 428.75,635.22 428.87,635.57 428.87,635.92 428.99,636.15 429.1,636.5 429.1,636.85 429.1,637.32 428.99,637.78 428.87,638.13 428.75,638.6 428.64,638.95 428.52,639.3 428.28,639.53 428.05,639.88 427.81,640 427.46,640.35 427.23,640.47 426.88,640.7 426.64,640.82 426.29,640.93 425.94,641.05 425.7,641.17 425.35,641.17 425,641.29 424.65,641.29 424.3,641.29 423.95,641.29 423.71,641.29 423.48,641.17 423.24,641.17 422.89,641.05 422.66,640.93 422.54,640.82 422.31,640.7 422.07,640.47 421.95,640.24 422.19,640.24 422.54,640.12 422.77,640 422.89,639.88 423.01,639.65 423.13,639.3 422.89,639.07 422.77,638.84 422.54,638.6 422.42,638.6 422.19,638.6 421.84,638.6 421.72,638.6 421.49,638.72 421.25,638.95 421.25,639.3 421.25,639.65 421.25,640 421.37,640.35 421.49,640.7 421.72,641.05 421.95,641.4 422.31,641.75 422.66,642.1 422.89,642.34 423.13,642.45 423.48,642.69 423.71,642.8 423.95,642.92 424.42,643.04 424.77,643.27 425.24,643.39 425.59,643.39 426.06,643.5 426.53,643.5 426.88,643.5 427.23,643.39 427.7,643.39 428.05,643.39 428.52,643.27 428.87,643.04 429.22,642.92 429.57,642.69 430.04,642.57 430.28,642.34 430.63,642.1 430.98,641.87 431.33,641.64 431.45,641.4 431.8,641.05 432.04,640.7 432.15,640.35 432.39,640 432.62,639.65 432.74,639.3 432.86,638.95 432.97,638.6 432.97,638.13 433.09,637.78 433.21,637.32 433.09,636.97 433.09,636.62 433.09,636.15 432.97,635.8 432.86,635.34 432.74,635.1 432.62,634.63 432.5,634.4 432.27,634.05 432.15,633.82 431.92,633.47 431.68,633.24 431.45,632.88 431.1,632.65 430.86,632.42 430.63,632.18 430.28,631.83 429.93,631.72 429.57,631.48 429.34,631.37 428.99,631.13 428.64,630.9 428.28,630.78 427.93,630.67 427.58,630.55 427.23,630.43 426.76,630.32 426.41,630.2 425.94,630.08 425.59,630.08 425.24,629.97 424.88,629.97 424.53,629.97 424.06,629.97 423.71,629.97 423.36,629.97 423.01,629.97 422.77,629.97 422.54,629.97 422.31,630.08 421.84,630.08 421.6,630.2 421.25,630.2 421.13,630.32 420.78,630.43 420.66,630.55 420.55,631.13 420.55,631.13 421.02,631.02 421.49,630.9 421.84,630.9 422.31,630.9 422.66,630.9 423.13,630.9 423.48,631.02 423.95,631.13 424.18,631.13 424.65,631.25 424.88,631.48 425.35,631.6 425.59,631.72 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1221"
|
||||||
|
points="439.3,629.15 439.65,629.27 440.12,629.62 440.48,629.85 440.94,630.32 441.3,630.67 441.65,631.13 441.76,631.37 442,631.6 442.12,631.83 442.35,632.18 442.35,632.42 442.47,632.65 442.59,632.88 442.7,633.24 442.7,633.47 442.82,633.82 442.94,634.05 443.05,634.52 442.94,634.75 442.94,635.1 442.94,635.45 442.94,635.92 442.82,636.27 442.82,636.62 442.7,637.09 442.7,637.43 442.7,637.43 443.05,637.32 443.29,637.2 443.52,637.09 443.76,636.97 444.11,636.74 444.46,636.62 444.81,636.27 445.05,635.92 445.51,635.68 445.75,635.34 446.1,634.99 446.45,634.63 446.81,634.17 446.81,634.05 446.81,633.82 446.81,633.47 446.69,633.12 446.57,632.77 446.57,632.53 446.45,632.18 446.45,631.95 446.22,631.6 446.1,631.25 445.75,631.02 445.63,630.67 445.28,630.32 445.05,629.97 444.58,629.62 444.23,629.38 443.88,629.15 443.76,629.03 443.41,628.8 443.17,628.68 442.82,628.57 442.59,628.45 442.23,628.33 442,628.22 441.65,628.1 441.18,627.87 440.83,627.75 440.48,627.63 440.01,627.52 439.65,627.4 439.19,627.28 438.72,627.28 438.25,627.17 437.78,627.05 437.31,627.05 436.72,626.93 436.14,626.82 435.55,626.82 434.97,626.82 434.38,626.82 434.03,627.4 434.03,627.4 434.14,627.4 434.5,627.4 434.61,627.4 434.97,627.52 435.32,627.52 435.67,627.75 436.02,627.75 436.49,627.87 436.84,627.98 437.31,628.22 437.78,628.33 438.25,628.57 438.72,628.8 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1223"
|
||||||
|
points="433.68,631.72 434.03,632.07 434.5,632.53 434.85,632.88 435.2,633.47 435.32,633.7 435.55,633.93 435.67,634.17 435.79,634.52 435.9,634.75 436.02,634.99 436.14,635.22 436.25,635.57 436.25,635.92 436.37,636.15 436.37,636.5 436.37,636.85 436.37,637.09 436.37,637.43 436.37,637.78 436.37,638.25 436.25,638.6 436.25,638.95 436.14,639.3 436.02,639.65 435.79,640 435.67,640.47 435.55,640.82 435.32,641.29 435.79,641.05 436.14,640.93 436.49,640.7 436.96,640.47 437.43,640.12 437.9,639.88 438.37,639.42 438.83,639.07 439.19,638.72 439.65,638.25 439.77,638.02 440.01,637.78 440.12,637.43 440.36,637.32 440.36,636.97 440.48,636.62 440.48,636.38 440.59,636.15 440.59,635.92 440.71,635.8 440.59,635.45 440.59,635.1 440.48,634.87 440.36,634.63 440.24,634.28 440.12,634.05 440.01,633.7 439.77,633.47 439.54,633.12 439.42,632.88 438.95,632.53 438.72,632.18 438.37,631.83 438.01,631.48 437.43,631.13 436.96,630.78 436.72,630.55 436.37,630.55 436.14,630.32 435.9,630.2 435.55,629.97 435.2,629.85 434.85,629.73 434.5,629.5 434.14,629.38 433.79,629.27 433.32,629.15 432.97,629.03 432.5,628.92 432.15,628.8 431.57,628.57 431.21,628.45 430.75,628.45 430.28,628.33 429.69,628.22 429.22,628.1 428.64,628.68 428.99,628.8 429.22,628.92 429.57,629.15 429.81,629.15 430.28,629.38 430.63,629.5 430.98,629.85 431.45,630.08 431.92,630.32 432.27,630.55 432.74,630.9 433.21,631.25 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1225"
|
||||||
|
points="444.69,621.68 445.05,621.45 445.4,621.33 445.75,620.98 446.1,620.75 446.45,620.52 446.81,620.28 447.16,619.93 447.51,619.58 447.86,619.23 448.1,619 448.45,618.53 448.68,618.07 449.03,617.6 449.27,617.25 449.5,617.25 449.74,617.36 449.97,617.36 450.32,617.48 450.56,617.48 450.91,617.48 451.26,617.6 451.73,617.6 452.08,617.71 452.43,617.83 452.9,617.95 453.25,618.3 453.72,618.41 454.19,618.76 454.66,619.11 455.13,619.58 454.89,619.81 454.78,620.28 454.66,620.4 454.54,620.75 454.31,620.98 454.07,621.45 453.84,621.68 453.6,622.03 453.25,622.38 453.13,622.85 452.78,623.08 452.55,623.43 452.2,623.78 451.85,624.13 451.85,624.02 451.73,624.02 451.38,623.78 451.14,623.78 450.91,623.67 450.56,623.55 450.32,623.43 450.09,623.32 449.85,623.32 449.5,623.2 449.15,623.08 448.92,623.08 448.45,623.08 448.1,623.08 447.74,622.97 447.27,622.97 446.81,622.97 446.34,622.97 445.87,622.97 445.4,622.97 445.05,622.97 444.81,622.97 444.58,623.08 444.34,623.08 444.11,623.08 443.76,623.08 443.52,623.08 443.29,623.2 442.94,623.2 442.7,623.32 442.35,623.32 442.12,623.43 441.76,623.55 441.53,623.67 441.18,623.78 440.94,623.9 440.83,623.08 441.06,623.08 441.3,622.97 441.65,622.85 441.88,622.73 442.12,622.73 442.35,622.62 442.7,622.5 443.05,622.38 443.29,622.38 443.64,622.15 443.99,622.03 444.34,621.92 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1227"
|
||||||
|
points="442.47,626 442.94,626.12 443.41,626.23 443.88,626.47 444.46,626.58 444.93,626.7 445.4,627.05 445.75,627.28 446.34,627.63 446.69,627.87 447.16,628.33 447.51,628.8 447.86,629.27 447.98,629.5 448.21,629.73 448.33,629.97 448.45,630.32 448.56,630.55 448.8,630.9 448.92,631.25 449.03,631.6 449.15,631.48 449.27,631.25 449.5,631.02 449.85,630.67 449.97,630.43 450.09,630.2 450.2,629.85 450.44,629.5 450.44,629.15 450.56,628.8 450.56,628.45 450.56,628.1 450.56,627.98 450.56,627.75 450.32,627.52 450.09,627.17 449.74,626.82 449.27,626.47 449.03,626.23 448.68,626 448.45,625.88 448.1,625.77 447.63,625.53 447.16,625.3 446.81,625.18 446.34,625.07 446.1,625.07 445.75,624.95 445.51,624.83 445.28,624.83 444.93,624.72 444.69,624.72 444.34,624.72 444.11,624.72 443.76,624.72 443.41,624.72 443.05,624.72 442.7,624.72 442.35,624.72 442,624.72 441.65,624.72 441.18,624.83 440.71,624.83 440.36,624.83 439.89,624.95 439.54,625.07 438.95,625.07 438.6,625.18 438.13,625.42 437.66,625.53 437.66,626 437.66,626 437.78,626 438.01,625.88 438.25,625.88 438.48,625.77 438.72,625.77 439.07,625.77 439.42,625.77 439.77,625.77 440.24,625.77 440.71,625.77 441.06,625.77 441.53,625.88 442,625.88 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1229"
|
||||||
|
points="441.18,619.7 441.41,619.23 441.65,619 441.88,618.53 442.12,618.18 442.35,617.6 442.47,617.25 442.59,616.78 442.7,616.32 442.7,616.08 442.7,615.85 442.7,615.62 442.7,615.38 442.59,614.91 442.47,614.33 442.35,614.1 442.35,613.87 442.23,613.51 442.12,613.28 441.88,612.93 441.76,612.7 441.65,612.46 441.41,612.23 441.53,612.23 441.76,612.23 442,612.23 442.23,612.23 442.47,612.23 442.82,612.23 443.05,612.23 443.41,612.35 443.76,612.46 444.11,612.7 444.46,612.81 444.81,613.05 445.16,613.28 445.63,613.63 445.75,613.87 445.75,614.1 445.87,614.45 445.87,614.91 445.87,615.38 445.87,615.62 445.75,615.85 445.75,616.32 445.75,616.55 445.51,616.9 445.4,617.25 445.05,617.6 444.93,617.95 444.58,618.3 444.34,618.76 443.88,619.23 443.52,619.58 443.29,619.7 443.05,619.93 442.7,620.16 442.47,620.4 442.23,620.63 441.88,620.87 441.65,620.98 441.3,621.22 440.94,621.45 440.48,621.68 440.12,621.8 439.77,622.03 439.42,622.27 438.95,622.5 438.48,622.73 438.01,622.97 437.66,622.62 437.66,622.62 437.66,622.5 438.01,622.38 438.13,622.27 438.37,622.03 438.6,621.92 438.83,621.8 439.07,621.57 439.42,621.33 439.65,621.1 440.01,620.87 440.24,620.52 440.59,620.28 440.94,619.93 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon1231"
|
||||||
|
points="387.73,620.87 387.73,620.52 387.84,620.28 387.73,619.93 387.73,619.7 387.61,619.35 387.61,619.11 387.26,618.65 387.02,618.18 386.79,617.95 386.55,617.71 386.32,617.6 386.08,617.6 385.73,617.36 385.5,617.36 385.26,617.25 385.03,617.25 384.68,617.25 384.32,617.25 384.09,617.36 383.74,617.48 383.27,617.71 382.92,618.07 382.57,618.3 382.45,618.53 382.33,618.76 382.22,619 382.1,619.23 381.98,619.58 381.98,619.81 381.98,620.16 381.98,620.4 381.98,620.63 381.98,620.98 382.22,621.22 382.33,621.45 382.33,621.68 382.57,622.03 382.8,622.27 383.04,622.38 383.15,622.5 383.39,622.73 383.74,622.85 383.97,622.97 384.21,623.08 384.56,623.08 384.91,623.08 384.91,623.08 385.03,623.08 385.38,623.08 385.73,622.97 385.97,622.85 386.2,622.73 386.44,622.62 386.67,622.38 386.9,622.38 387.02,622.03 387.26,621.8 387.37,621.68 387.49,621.33 387.61,621.1 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-189.13693,-18.180006)" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 38 KiB |
96
assets/svg/Ornament-Horiz-2.svg
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<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"
|
||||||
|
width="57.311394mm"
|
||||||
|
height="9.4800205mm"
|
||||||
|
viewBox="0 0 57.311392 9.4800218"
|
||||||
|
version="1.1"
|
||||||
|
id="svg3667"
|
||||||
|
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
|
||||||
|
sodipodi:docname="Ornament-Horiz-2.svg">
|
||||||
|
<defs
|
||||||
|
id="defs3661" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1.8101934"
|
||||||
|
inkscape:cx="63.107245"
|
||||||
|
inkscape:cy="144.23021"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="g852"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1003"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata3664">
|
||||||
|
<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>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(207.64826,-258.09874)">
|
||||||
|
<g
|
||||||
|
id="g852"
|
||||||
|
transform="translate(-99.012044,18.551839)">
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon219"
|
||||||
|
points="227.84,517.48 227.53,517.37 227.63,517.17 228.36,516.96 229.72,516.76 231.18,516.55 232.74,516.35 234.3,516.35 235.97,516.45 237.64,516.65 239.1,517.07 240.55,517.79 236.59,517.48 235.13,517.17 233.78,517.07 232.64,517.07 231.7,517.17 230.86,517.27 230.13,517.48 229.41,517.58 228.78,517.58 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-126.65963,103.7204)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon221"
|
||||||
|
points="242.33,525.61 241.91,526.54 241.28,527.26 240.55,527.88 239.62,528.29 238.78,528.6 237.84,528.9 237.01,529.01 235.03,529.01 233.37,528.7 232.11,527.98 231.18,527.05 230.45,526.02 230.03,524.89 229.82,523.96 229.93,523.04 230.45,521.39 231.39,519.95 232.74,518.82 234.3,517.79 236.18,517.07 238.16,516.45 240.24,515.93 242.53,515.63 244.72,515.32 246.91,515.21 248.89,515.11 250.87,515.11 252.54,515.21 253.89,515.21 254.93,515.32 255.66,515.32 257.85,515.42 260.14,515.63 262.33,515.93 264.52,516.24 266.7,516.65 268.79,517.17 270.77,517.79 272.64,518.51 274.52,519.33 276.19,520.15 277.64,521.18 279,522.32 280.14,523.45 281.19,524.79 281.92,526.23 282.44,527.77 282.65,529.63 282.44,531.38 281.81,532.92 280.67,534.26 279.31,535.39 277.54,536.52 275.56,537.35 273.37,538.17 270.98,538.79 268.37,539.3 265.77,539.72 263.16,540.02 260.56,540.13 257.95,540.23 255.45,540.23 253.06,540.13 250.66,540.02 248.16,539.82 245.35,539.61 242.43,539.41 239.2,539.1 235.87,538.68 232.32,538.27 228.68,537.86 224.82,537.35 220.76,536.73 216.59,536.01 212.22,535.18 207.63,534.26 203.05,533.23 198.25,532.1 193.25,530.86 190.65,530.24 188.04,529.52 185.33,528.9 182.52,528.18 179.71,527.46 176.79,526.85 173.87,526.13 170.85,525.4 167.83,524.68 164.81,524.07 161.68,523.35 158.56,522.63 155.33,522.01 152.2,521.29 148.97,520.67 145.74,520.05 142.62,519.43 139.39,518.82 136.16,518.3 133.03,517.68 129.8,517.17 126.68,516.65 123.55,516.24 120.53,515.73 117.51,515.32 114.49,515.01 111.47,514.7 108.65,514.39 105.73,514.08 102.92,513.88 100.21,513.67 97.61,513.57 92.61,513.57 88.23,513.88 84.38,514.49 80.94,515.32 78.02,516.45 75.52,517.79 73.44,519.23 71.77,520.77 70.41,522.42 69.37,524.17 68.64,525.82 68.23,527.46 68.12,529.11 68.23,530.55 68.54,531.79 68.95,532.92 70.83,532.2 70.31,529.63 70.31,527.36 70.83,525.4 71.87,523.65 73.33,522.21 75.21,521.08 77.5,520.05 80.1,519.23 82.92,518.71 85.94,518.2 89.17,517.89 92.5,517.68 96.05,517.68 99.48,517.58 103.03,517.68 106.46,517.79 108.23,517.89 110.11,517.99 111.98,518.1 114.07,518.3 116.15,518.51 118.45,518.71 120.74,519.02 123.13,519.33 125.64,519.64 128.24,520.05 130.95,520.46 133.66,520.88 136.47,521.29 139.39,521.8 142.41,522.32 145.53,522.93 148.66,523.45 151.89,524.07 155.22,524.68 158.56,525.4 162,526.02 165.54,526.74 169.19,527.46 172.83,528.29 176.48,529.01 180.33,529.83 184.19,530.65 188.04,531.58 192,532.4 196.06,533.33 200.13,534.26 204.3,535.18 208.99,536.21 213.67,537.14 218.26,538.07 222.63,538.89 226.9,539.61 231.07,540.23 235.13,540.85 239.1,541.26 242.85,541.67 246.39,541.98 249.83,542.29 253.16,542.39 256.29,542.39 259.2,542.39 261.91,542.29 264.52,542.08 267.75,541.67 270.56,541.16 273.16,540.43 275.46,539.72 277.54,538.79 279.31,537.86 280.77,536.83 282.02,535.7 283.06,534.57 283.79,533.43 284.31,532.2 284.63,530.96 284.73,529.63 284.52,528.39 284.21,527.15 283.69,525.92 282.44,523.86 280.77,522.01 278.9,520.36 276.6,518.82 274.1,517.58 271.39,516.45 268.48,515.52 265.35,514.7 262.23,514.08 259,513.67 255.66,513.46 252.43,513.36 249.2,513.36 245.97,513.57 242.95,513.98 240.03,514.49 234.93,516.04 231.49,517.99 229.3,520.26 228.26,522.63 228.16,524.89 228.68,526.95 229.82,528.6 231.18,529.73 233.16,530.55 235.24,530.86 237.22,530.76 239.1,530.35 240.66,529.52 242.12,528.39 243.16,526.85 243.78,525.1 243.99,523.76 243.89,522.52 243.68,521.39 243.26,520.46 242.74,519.64 242.01,518.92 241.28,518.3 240.55,517.79 236.59,517.48 238.47,517.99 239.93,518.61 240.97,519.43 241.81,520.26 242.22,521.29 242.53,522.32 242.64,523.45 242.53,524.58 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-126.65963,103.7204)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon223"
|
||||||
|
points="162.62,515.93 160.54,515.73 158.25,515.73 155.54,515.83 152.41,516.24 149.08,516.86 145.32,517.79 141.16,519.02 136.57,520.67 131.47,522.73 126.05,525.1 120.11,527.98 114.17,530.86 108.65,533.13 103.55,534.88 98.75,536.21 94.48,537.14 90.52,537.66 86.98,537.86 83.86,537.76 81.04,537.45 78.54,536.93 76.46,536.32 74.69,535.49 73.23,534.67 72.19,533.85 71.35,532.92 70.83,532.2 68.95,532.92 71.14,535.49 73.85,537.35 76.98,538.79 80.52,539.61 84.27,540.02 88.23,539.92 92.29,539.61 96.46,539 100.63,538.07 104.69,537.04 108.65,535.8 112.3,534.57 115.73,533.33 118.76,532.1 121.26,530.96 123.34,530.04 125.11,529.11 126.88,528.18 128.66,527.26 130.43,526.23 132.3,525.2 134.28,524.27 136.26,523.24 138.34,522.32 140.53,521.39 142.93,520.46 145.43,519.74 148.14,518.92 150.95,518.3 154.08,517.79 157.31,517.27 160.85,516.96 163.04,516.96 164.91,517.17 166.48,517.58 167.83,518.3 168.87,519.13 169.5,520.15 169.71,521.29 169.6,522.63 170.33,522.83 170.33,521.49 170.12,520.36 169.71,519.33 169.08,518.61 168.25,517.99 167.21,517.37 165.96,516.86 164.39,516.35 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-126.65963,103.7204)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon225"
|
||||||
|
points="177.42,520.05 175.54,519.64 173.66,519.33 172,519.13 170.33,519.13 168.87,519.13 167.41,519.23 166.06,519.43 164.7,519.74 163.56,520.15 162.41,520.57 161.37,520.98 160.33,521.49 159.39,521.9 158.56,522.42 157.72,522.93 156.27,523.96 155.12,525.2 154.29,526.43 153.66,527.67 153.45,528.9 153.45,529.93 153.87,530.86 154.6,531.48 155.74,531.89 157.2,531.89 158.97,531.68 161.06,531.07 163.14,530.04 165.23,528.6 167.21,526.74 168.87,524.27 169.19,523.86 169.39,523.45 169.5,523.04 169.6,522.63 170.33,522.83 169.91,524.79 168.98,526.74 167.73,528.7 165.96,530.45 163.87,531.79 161.37,532.72 158.56,533.02 155.43,532.61 153.35,531.68 152.31,530.24 152.2,528.6 152.83,526.74 153.97,524.79 155.54,523.04 157.31,521.6 159.08,520.57 159.91,520.26 160.85,519.95 162,519.54 163.25,519.23 164.7,518.92 166.16,518.61 167.73,518.4 169.5,518.3 171.16,518.3 172.94,518.4 174.81,518.61 176.58,518.92 178.46,519.43 180.33,520.15 182.1,520.98 183.88,522.11 185.02,523.14 185.85,524.48 186.27,525.92 186.38,527.46 184.6,527.05 184.6,526.13 184.5,525.2 184.19,524.27 183.67,523.35 183.04,522.63 182.1,521.9 180.96,521.18 179.5,520.67 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-126.65963,103.7204)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon227"
|
||||||
|
points="190.13,524.17 187.73,524.27 185.23,524.48 182.83,524.89 180.44,525.51 178.15,526.13 176.06,527.05 174.08,527.98 172.41,529.11 171.06,530.35 170.02,531.79 169.39,533.23 169.5,534.05 170.23,534.67 171.58,535.08 173.25,535.29 175.12,535.18 176.89,534.98 178.56,534.57 179.92,533.95 180.75,533.43 181.48,532.82 182.21,531.99 182.94,531.17 183.46,530.24 183.98,529.21 184.4,528.08 184.6,527.05 186.38,527.46 185.96,529.42 185.13,531.48 183.67,533.33 181.9,534.98 179.71,536.21 177.21,536.93 174.5,537.14 171.48,536.63 169.29,535.7 168.25,534.46 168.04,533.02 168.66,531.48 170.02,529.93 172,528.29 174.4,526.85 177.21,525.51 179.19,524.79 181.17,524.17 183.25,523.65 185.33,523.24 187.31,523.04 189.29,522.93 191.06,523.04 192.63,523.24 195.96,524.07 198.57,525.1 200.44,526.13 201.9,527.36 202.73,528.7 203.05,530.04 203.05,531.38 202.63,532.82 200.65,532.3 201.48,530.86 201.69,529.42 201.17,527.98 199.82,526.54 198.36,525.71 196.59,524.99 194.61,524.58 192.42,524.27 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-126.65963,103.7204)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon229"
|
||||||
|
points="219.92,541.46 220.34,540.54 220.55,539.51 220.34,538.48 219.82,537.45 219.09,536.21 218.05,534.98 216.9,533.74 215.44,532.61 213.78,531.48 211.9,530.45 209.92,529.73 208.67,529.42 207.32,529.11 205.96,528.9 204.5,528.7 203.05,528.6 201.48,528.6 200.03,528.7 198.57,528.8 197.11,529.01 195.75,529.21 194.4,529.63 193.15,530.04 191.9,530.55 190.86,531.17 189.92,531.79 189.08,532.61 187.94,534.15 187.52,535.39 187.63,536.32 188.15,536.93 189.08,537.35 190.44,537.45 191.9,537.25 193.57,536.93 194.5,536.63 195.44,536.21 196.38,535.8 197.42,535.18 198.36,534.57 199.19,533.85 200.03,533.13 200.65,532.3 202.63,532.82 201.48,534.67 199.82,536.21 197.63,537.55 195.23,538.38 192.84,539 190.44,539.1 188.36,538.89 186.79,538.17 185.85,537.14 185.75,535.8 186.38,534.36 187.52,532.82 189.08,531.38 190.96,530.14 192.94,529.11 195.13,528.39 196.38,528.08 197.73,527.88 199.09,527.67 200.44,527.46 201.9,527.46 203.25,527.36 204.82,527.46 206.28,527.67 207.73,527.88 209.3,528.29 210.76,528.8 212.32,529.52 213.78,530.35 215.34,531.38 216.8,532.51 218.26,533.85 220.55,536.52 221.49,538.79 221.49,540.74 220.76,542.39 219.4,543.52 217.74,544.35 215.97,544.76 214.3,544.76 213.57,544.66 212.84,544.55 212.11,544.35 211.38,544.14 211.8,543.11 212.22,543.22 212.63,543.42 213.15,543.52 213.57,543.63 215.24,543.83 216.8,543.63 218.05,543.11 219.09,542.39 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-126.65963,103.7204)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon231"
|
||||||
|
points="207.32,539.3 208.15,539 209.3,539 210.65,539.41 212,540.02 213.26,540.85 214.09,542.08 214.61,543.52 214.61,544.97 214.4,546.1 213.88,547.02 213.36,547.75 212.74,548.36 212.22,548.77 211.69,548.98 211.28,549.19 211.8,548.05 212.32,547.75 212.84,547.23 213.47,546.41 213.88,545.38 214.19,544.35 214.09,543.22 213.47,542.08 212.42,541.05 211.49,540.43 210.76,540.02 210.13,539.82 209.61,539.72 209.19,539.72 208.88,539.82 208.67,539.92 208.57,540.13 208.57,540.33 208.57,540.64 208.67,540.95 208.99,541.36 209.4,541.77 210.03,542.29 210.76,542.7 211.8,543.11 211.38,544.14 210.44,543.73 209.61,543.22 208.78,542.7 208.15,542.19 207.63,541.57 207.32,541.05 207.01,540.43 207.01,539.92 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-126.65963,103.7204)" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 12 KiB |
91
assets/svg/Ornament-Horiz-3.svg
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<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"
|
||||||
|
width="33.914291mm"
|
||||||
|
height="14.131395mm"
|
||||||
|
viewBox="0 0 33.914291 14.131397"
|
||||||
|
version="1.1"
|
||||||
|
id="svg3667"
|
||||||
|
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
|
||||||
|
sodipodi:docname="Ornament-Horiz-2.svg">
|
||||||
|
<defs
|
||||||
|
id="defs3661" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1.8101934"
|
||||||
|
inkscape:cx="-17.045425"
|
||||||
|
inkscape:cy="13.889135"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="g852"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1003"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata3664">
|
||||||
|
<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>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(221.52032,-178.03564)">
|
||||||
|
<g
|
||||||
|
id="g852"
|
||||||
|
transform="translate(-99.012044,18.551839)">
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon111"
|
||||||
|
points="395.5,514.95 397.05,515.3 398.24,515.9 399.19,516.62 399.79,517.58 400.26,518.66 400.5,519.62 400.62,520.57 400.5,521.53 400.26,522.37 399.91,523.33 399.43,524.05 398.72,524.65 398,525.12 397.17,525.48 396.34,525.6 395.62,525.6 394.91,525.37 394.19,525.12 393.48,524.65 392.88,524.05 392.41,523.33 392.05,522.37 391.93,521.29 392.17,519.85 392.88,518.66 393.84,517.94 394.91,517.7 395.98,517.94 396.81,518.42 397.29,519.02 397.53,519.85 397.65,519.02 397.41,518.3 397.17,517.82 396.7,517.34 396.1,517.1 395.38,516.86 394.67,516.74 393.84,516.74 392.29,517.1 390.74,517.94 389.43,519.25 388.13,521.05 387.17,523.09 386.34,525.37 385.75,527.64 385.51,530.04 385.63,527.04 385.86,524.17 386.34,521.77 387.17,519.62 388.36,517.82 389.79,516.38 391.58,515.42 393.72,514.95 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-207.40777,23.30012)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon113"
|
||||||
|
points="396.22,541.77 395.03,538.9 393.72,536.5 392.53,534.35 391.46,532.43 390.62,530.63 390.38,528.96 390.86,527.16 392.05,525.37 391.93,526.32 392.17,527.16 392.77,528.12 393.72,528.96 394.79,529.79 396.1,530.51 397.53,531.11 398.95,531.59 401.1,532.67 403,534.59 404.55,536.86 405.5,539.38 405.86,541.89 405.62,544.16 404.55,546.08 402.53,547.28 401.93,547.4 401.45,547.64 400.86,547.76 400.26,548 399.79,548.36 399.31,548.84 398.95,549.43 398.72,550.39 398.36,552.31 398.12,554.35 397.88,556.26 397.76,557.94 398.6,557.58 399.67,557.22 400.86,556.74 402.17,556.14 403.36,555.54 404.43,554.82 405.26,554.11 405.86,553.39 405.74,551.59 405.86,549.91 406.34,548.48 407.05,547.4 407.88,546.44 408.95,545.72 410.26,545.24 411.69,545 413.12,544.88 414.67,545.12 416.33,545.6 418,546.32 419.67,547.16 421.21,548.36 422.88,549.68 424.31,551.35 425.86,553.27 427.52,555.06 429.07,556.74 430.62,558.18 432.16,559.5 433.71,560.69 435.14,561.65 436.57,562.49 437.88,563.21 439.06,563.57 440.26,563.81 441.33,563.92 442.28,563.81 443.11,563.45 443.83,562.85 444.42,562.01 444.78,561.05 444.66,560.21 444.42,559.38 443.83,558.78 443.23,558.3 442.52,558.18 441.8,558.42 441.33,559.02 442.52,559.14 443.23,559.97 443.35,561.17 442.76,562.25 442.28,562.61 441.8,562.97 441.33,563.09 440.85,563.09 440.38,562.97 439.9,562.73 439.42,562.49 439.06,562.13 438.59,560.81 438.71,558.9 439.3,557.1 440.73,555.78 441.8,555.54 443.11,555.3 444.42,555.42 445.85,555.9 447.04,556.62 448.11,557.82 448.83,559.5 449.06,561.77 448.71,564.04 447.52,565.84 445.73,567.04 443.35,567.64 440.61,567.52 437.64,566.68 434.54,565.12 431.33,562.73 429.55,561.29 427.76,559.97 425.86,558.78 423.95,557.82 421.93,556.98 419.79,556.26 417.76,555.78 415.62,555.54 413.48,555.42 411.21,555.54 409.07,555.78 406.81,556.26 404.55,556.86 402.29,557.7 400.15,558.78 397.88,560.09 396.81,560.93 395.74,562.13 394.67,563.45 393.36,564.76 391.81,566.08 390.03,567.16 387.77,567.88 385.03,568.12 385.03,565.72 389.08,565.12 392.29,563.33 394.79,560.69 396.46,557.34 397.41,553.63 397.65,549.55 397.29,545.6 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-207.40777,23.30012)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon115"
|
||||||
|
points="440.02,551.71 437.88,555.54 435.26,559.02 432.16,562.01 428.71,564.52 424.67,566.44 420.02,567.64 414.9,568.12 412.88,568.12 410.98,567.88 409.07,567.76 407.17,567.4 405.5,567.04 403.72,566.56 402.17,565.96 400.62,565.36 399.07,564.64 397.65,563.92 396.34,563.09 395.15,562.25 393.84,561.29 392.77,560.33 391.7,559.26 390.74,558.18 388.13,554.11 386.34,549.32 385.39,544.05 385.15,538.66 385.75,533.75 387.05,529.32 389.08,526.08 391.7,524.17 390.51,525.12 389.67,526.44 388.96,528 388.72,529.68 388.6,531.35 388.96,533.15 389.43,534.83 390.38,536.38 391.7,538.54 392.65,540.57 393.12,542.61 393.12,544.28 392.88,545.72 392.17,546.92 391.22,547.76 389.91,548.24 388.48,548.48 387.77,548.96 387.65,549.79 388.13,550.87 388.6,551.83 389.55,553.51 390.74,555.54 392.41,557.7 394.31,559.62 396.58,561.17 399.19,561.89 402.05,561.53 405.38,560.69 408.6,560.33 411.45,560.21 413.95,560.57 415.74,561.29 416.81,562.49 416.81,564.16 415.74,566.2 419.31,566.08 422.52,565.48 425.38,564.4 428,563.09 430.14,561.41 431.81,559.62 433.12,557.58 434.07,555.54 434.43,553.51 434.31,551.59 433.71,549.68 432.52,548 430.85,546.68 428.59,545.6 425.74,545 422.28,544.76 422.64,540.45 423.95,537.22 425.86,535.06 428.24,533.99 430.62,533.87 432.88,534.71 434.54,536.38 435.5,539.14 434.19,541.53 434.07,544.88 434.66,548.48 435.5,551.35 436.21,552.79 437.16,552.91 438,552.19 438.71,550.75 439.19,549.68 439.78,548 440.38,546.08 440.73,544.05 440.61,542.13 440.14,540.45 438.83,539.38 436.69,539.01 435.5,535.18 435.97,531.71 437.52,528.72 439.9,525.96 442.4,523.21 444.66,520.57 446.33,517.82 446.92,514.71 446.92,517.94 446.68,521.65 446.45,525.72 445.97,529.92 445.38,534.35 444.42,538.78 443.35,543.21 441.8,547.52 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-207.40777,23.30012)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon117"
|
||||||
|
points="374.32,514.95 372.89,515.3 371.7,515.9 370.75,516.62 370.03,517.58 369.56,518.66 369.32,519.62 369.2,520.57 369.32,521.53 369.56,522.37 369.91,523.33 370.51,524.05 371.1,524.65 371.82,525.12 372.65,525.48 373.49,525.6 374.2,525.6 374.91,525.37 375.75,525.12 376.46,524.65 377.06,524.05 377.53,523.33 377.89,522.37 378.01,521.29 377.77,519.85 377.06,518.66 376.1,517.94 375.03,517.7 373.96,517.94 373.01,518.42 372.53,519.02 372.3,519.85 372.18,519.02 372.41,518.3 372.77,517.82 373.25,517.34 373.84,517.1 374.56,516.86 375.27,516.74 376.1,516.74 377.65,517.1 379.2,517.94 380.51,519.25 381.82,521.05 382.89,523.09 383.72,525.37 384.32,527.64 384.55,530.04 384.44,527.04 384.2,524.17 383.6,521.77 382.77,519.62 381.58,517.82 380.15,516.38 378.37,515.42 376.1,514.95 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-207.40777,23.30012)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon119"
|
||||||
|
points="373.6,541.77 374.8,538.9 376.22,536.5 377.41,534.35 378.6,532.43 379.32,530.63 379.56,528.96 379.08,527.16 377.77,525.37 377.89,526.32 377.65,527.16 377.06,528.12 376.1,528.96 375.03,529.79 373.72,530.51 372.3,531.11 370.87,531.59 368.72,532.67 366.82,534.59 365.39,536.86 364.44,539.38 364.08,541.89 364.32,544.16 365.39,546.08 367.42,547.28 368.01,547.4 368.49,547.64 369.08,547.76 369.68,548 370.15,548.36 370.63,548.84 370.99,549.43 371.22,550.39 371.58,552.31 371.82,554.35 372.06,556.26 372.18,557.94 371.34,557.58 370.15,557.22 368.96,556.74 367.77,556.14 366.46,555.54 365.39,554.82 364.56,554.11 363.96,553.39 364.08,551.59 363.96,549.91 363.49,548.48 362.77,547.4 361.94,546.44 360.87,545.72 359.56,545.24 358.25,545 356.7,544.88 355.15,545.12 353.61,545.6 351.94,546.32 350.27,547.16 348.73,548.36 347.06,549.68 345.63,551.35 343.97,553.27 342.42,555.06 340.87,556.74 339.21,558.18 337.66,559.5 336.23,560.69 334.68,561.65 333.38,562.49 331.95,563.21 330.76,563.57 329.56,563.81 328.49,563.92 327.54,563.81 326.71,563.45 326,562.85 325.4,562.01 325.16,561.05 325.16,560.21 325.52,559.38 326.11,558.78 326.71,558.3 327.42,558.18 328.02,558.42 328.49,559.02 327.3,559.14 326.59,559.97 326.47,561.17 327.07,562.25 327.54,562.61 328.02,562.97 328.61,563.09 329.09,563.09 329.56,562.97 329.92,562.73 330.4,562.49 330.76,562.13 331.23,560.81 331.23,558.9 330.52,557.1 329.09,555.78 328.02,555.54 326.83,555.3 325.4,555.42 324.09,555.9 322.9,556.62 321.83,557.82 321.12,559.5 320.88,561.77 321.23,564.04 322.42,565.84 324.21,567.04 326.59,567.64 329.33,567.52 332.3,566.68 335.4,565.12 338.61,562.73 340.4,561.29 342.18,559.97 344.09,558.78 345.99,557.82 348.01,556.98 350.04,556.26 352.18,555.78 354.32,555.54 356.46,555.42 358.61,555.54 360.87,555.78 363.13,556.26 365.39,556.86 367.53,557.7 369.8,558.78 372.06,560.09 373.13,560.93 374.08,562.13 375.27,563.45 376.46,564.76 378.01,566.08 379.91,567.16 382.17,567.88 385.03,568.12 385.03,565.72 380.86,565.12 377.65,563.33 375.15,560.69 373.49,557.34 372.53,553.63 372.18,549.55 372.65,545.6 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-207.40777,23.30012)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon121"
|
||||||
|
points="329.8,551.71 332.06,555.54 334.68,559.02 337.66,562.01 341.23,564.52 345.28,566.44 349.92,567.64 355.04,568.12 357.06,568.12 358.96,567.88 360.87,567.76 362.65,567.4 364.44,567.04 366.1,566.56 367.77,565.96 369.32,565.36 370.75,564.64 372.18,563.92 373.49,563.09 374.8,562.25 375.99,561.29 377.17,560.33 378.25,559.26 379.2,558.18 381.82,554.11 383.6,549.32 384.55,544.05 384.79,538.66 384.2,533.75 382.89,529.32 380.86,526.08 378.25,524.17 379.44,525.12 380.39,526.44 380.98,528 381.34,529.68 381.34,531.35 381.1,533.15 380.51,534.83 379.56,536.38 378.13,538.54 377.29,540.57 376.82,542.61 376.7,544.28 377.06,545.72 377.65,546.92 378.72,547.76 380.03,548.24 381.46,548.48 382.29,548.96 382.41,549.79 381.94,550.87 381.34,551.83 380.51,553.51 379.2,555.54 377.65,557.7 375.63,559.62 373.37,561.17 370.75,561.89 367.89,561.53 364.56,560.69 361.35,560.33 358.49,560.21 355.99,560.57 354.2,561.29 353.13,562.49 353.13,564.16 354.2,566.2 350.63,566.08 347.42,565.48 344.56,564.4 341.94,563.09 339.8,561.41 338.13,559.62 336.83,557.58 335.87,555.54 335.52,553.51 335.64,551.59 336.23,549.68 337.3,548 338.97,546.68 341.23,545.6 344.09,545 347.54,544.76 347.18,540.45 345.99,537.22 343.97,535.06 341.7,533.99 339.32,533.87 337.06,534.71 335.4,536.38 334.45,539.14 335.64,541.53 335.76,544.88 335.16,548.48 334.45,551.35 333.61,552.79 332.78,552.91 331.95,552.19 331.23,550.75 330.76,549.68 330.16,548 329.56,546.08 329.21,544.05 329.21,542.13 329.8,540.45 331.11,539.38 333.26,539.01 334.33,535.18 333.97,531.71 332.3,528.72 330.04,525.96 327.54,523.21 325.16,520.57 323.5,517.82 322.9,514.71 322.9,517.94 323.14,521.65 323.38,525.72 323.85,529.92 324.45,534.35 325.4,538.78 326.59,543.21 328.02,547.52 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-207.40777,23.30012)" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 12 KiB |
66
assets/svg/Ornament-Horiz-4.svg
Normal file
After Width: | Height: | Size: 8.9 KiB |
81
assets/svg/Ornament-Horiz-5.svg
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<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"
|
||||||
|
width="35.967457mm"
|
||||||
|
height="13.596937mm"
|
||||||
|
viewBox="0 0 35.967456 13.596939"
|
||||||
|
version="1.1"
|
||||||
|
id="svg3667"
|
||||||
|
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
|
||||||
|
sodipodi:docname="Ornament-Horiz-2.svg">
|
||||||
|
<defs
|
||||||
|
id="defs3661" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1.8101934"
|
||||||
|
inkscape:cx="-101.54531"
|
||||||
|
inkscape:cy="104.21811"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="g852"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1003"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata3664">
|
||||||
|
<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>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(199.16306,-202.46964)">
|
||||||
|
<g
|
||||||
|
id="g852"
|
||||||
|
transform="translate(-99.012044,18.551839)">
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon199"
|
||||||
|
points="362.74,364.92 363.73,365.34 364.72,365.77 365.71,366.26 366.63,366.76 367.48,367.18 368.26,367.68 369.04,368.1 370.03,368.74 371.09,369.59 372.08,370.51 373.08,371.64 374,372.78 374.7,374.12 375.27,375.46 375.63,376.88 375.7,377.94 375.48,379.07 375.13,380.14 374.49,381.13 373.64,381.98 372.51,382.62 371.09,382.97 369.32,383.04 368.26,382.83 367.34,382.4 366.63,381.76 366,380.92 365.5,379.92 365.07,378.72 364.79,377.38 364.51,375.89 364.37,375.04 364.23,374.19 364.01,373.27 363.73,372.35 363.38,371.36 362.95,370.37 362.46,369.45 361.89,368.46 361.18,367.54 360.4,366.69 359.48,365.91 358.49,365.13 357.29,364.49 356.01,363.93 354.53,363.5 352.9,363.15 353.96,363.08 355.09,363.08 356.23,363.15 357.29,363.29 358.42,363.57 359.55,363.79 360.62,364.14 361.68,364.49 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-184.02393,92.255552)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon201"
|
||||||
|
points="407.27,364.92 406.21,365.34 405.29,365.77 404.3,366.26 403.38,366.76 402.53,367.18 401.75,367.68 400.97,368.1 399.98,368.74 398.92,369.59 397.86,370.51 396.86,371.64 396.01,372.78 395.24,374.12 394.67,375.46 394.39,376.88 394.32,377.94 394.53,379.07 394.88,380.14 395.52,381.13 396.37,381.98 397.5,382.62 398.92,382.97 400.62,383.04 401.68,382.83 402.6,382.4 403.38,381.76 404.01,380.92 404.51,379.92 404.94,378.72 405.22,377.38 405.5,375.89 405.64,375.04 405.79,374.19 406,373.27 406.28,372.35 406.63,371.36 406.99,370.37 407.48,369.45 408.12,368.46 408.76,367.54 409.54,366.69 410.46,365.91 411.52,365.13 412.65,364.49 414,363.93 415.41,363.5 417.04,363.15 415.98,363.08 414.85,363.08 413.71,363.15 412.65,363.29 411.52,363.57 410.46,363.79 409.33,364.14 408.26,364.49 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-184.02393,92.255552)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon203"
|
||||||
|
points="368.33,397.48 369.25,397.62 370.1,397.76 371.02,397.83 371.94,397.83 372.86,397.76 373.79,397.62 374.7,397.48 375.98,397.13 377.32,396.7 378.6,396.14 379.94,395.43 381.22,394.58 382.49,393.59 383.77,392.38 385.04,391.04 386.17,392.31 387.38,393.44 388.58,394.37 389.79,395.21 390.99,395.92 392.19,396.56 393.39,396.99 394.6,397.34 395.8,397.62 397.01,397.76 398.14,397.83 399.34,397.83 400.55,397.69 401.68,397.48 402.81,397.27 403.94,396.91 405.08,396.56 406.14,396.06 407.2,395.57 408.19,395.07 409.25,394.51 410.18,393.94 411.17,393.3 412.02,392.67 412.94,392.03 413.71,391.39 414.49,390.75 415.27,390.05 415.98,389.41 416.62,388.84 417.18,388.21 417.75,387.64 418.81,386.58 419.8,385.66 420.79,384.81 421.72,384.03 422.64,383.39 423.56,382.76 424.48,382.19 425.4,381.69 426.32,381.27 427.31,380.85 428.23,380.49 429.15,380.14 430.14,379.78 431.13,379.5 432.19,379.22 433.26,378.93 434.39,378.72 435.59,378.72 436.94,378.79 438.28,379.07 439.7,379.43 441.11,379.92 442.53,380.49 443.95,381.2 445.36,381.98 446.71,382.76 447.98,383.68 449.19,384.6 450.32,385.52 451.31,386.51 452.23,387.5 452.94,388.49 452.51,387.36 452.02,386.23 451.45,385.09 450.74,384.03 449.96,383.04 449.12,382.12 448.26,381.2 447.42,380.35 446.5,379.57 445.65,378.79 444.8,378.15 444.02,377.59 443.31,377.09 442.6,376.67 442.04,376.31 441.61,376.1 441.11,375.89 440.33,375.54 439.27,375.18 438.07,374.76 436.65,374.33 435.1,374.05 433.33,373.77 431.42,373.63 429.29,373.69 427.17,373.91 424.83,374.33 422.49,375.11 420.02,376.1 417.54,377.52 414.99,379.22 412.44,381.41 409.89,383.54 407.41,385.02 405.08,386.08 402.81,386.65 400.69,386.79 398.63,386.58 396.72,386.01 394.88,385.23 393.18,384.24 391.63,383.04 390.21,381.69 388.86,380.28 387.73,378.86 386.67,377.45 385.75,376.1 385.04,374.83 384.26,376.1 383.41,377.45 382.35,378.86 381.15,380.28 379.8,381.69 378.39,383.04 376.83,384.24 375.13,385.23 373.29,386.01 371.31,386.58 369.25,386.79 367.13,386.65 364.86,386.08 362.53,385.02 360.05,383.54 357.5,381.41 354.95,379.22 352.4,377.52 349.92,376.1 347.45,375.11 345.11,374.33 342.85,373.91 340.65,373.69 338.6,373.63 336.69,373.77 334.92,374.05 333.29,374.33 331.87,374.76 330.67,375.18 329.68,375.54 328.9,375.89 328.33,376.1 327.9,376.31 327.34,376.67 326.63,377.09 325.92,377.59 325.14,378.15 324.3,378.79 323.45,379.57 322.52,380.35 321.68,381.2 320.83,382.12 319.98,383.04 319.2,384.03 318.49,385.09 317.92,386.23 317.43,387.36 317,388.49 317.71,387.5 318.63,386.51 319.62,385.52 320.76,384.6 321.96,383.68 323.23,382.76 324.58,381.98 325.99,381.2 327.41,380.49 328.83,379.92 330.24,379.43 331.66,379.07 333,378.79 334.35,378.72 335.55,378.72 336.69,378.93 337.75,379.22 338.81,379.5 339.8,379.78 340.79,380.14 341.71,380.49 342.63,380.85 343.62,381.27 344.54,381.69 345.46,382.19 346.38,382.76 347.31,383.39 348.23,384.03 349.14,384.81 350.14,385.66 351.13,386.58 352.19,387.64 352.97,388.42 353.82,389.27 354.81,390.19 355.87,391.11 357,391.96 358.21,392.88 359.48,393.73 360.83,394.58 361.61,395 362.38,395.43 363.24,395.78 364.01,396.14 364.86,396.49 365.71,396.77 366.56,397.06 367.48,397.27 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-184.02393,92.255552)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon205"
|
||||||
|
points="394.46,357.2 394.6,355.5 394.81,353.95 395.09,352.6 395.45,351.47 395.87,350.48 396.37,349.7 397.08,349.13 395.52,349.06 394.1,349.27 392.76,349.84 391.56,350.55 390.56,351.47 389.71,352.46 389.08,353.45 388.72,354.51 388.65,352.6 388.3,350.97 387.73,349.63 387.02,348.57 386.32,347.72 385.68,347.08 385.25,346.65 385.04,346.44 384.83,346.65 384.33,347.08 383.7,347.72 382.99,348.57 382.28,349.63 381.71,350.97 381.36,352.6 381.29,354.51 380.93,353.45 380.3,352.46 379.45,351.47 378.39,350.55 377.18,349.84 375.91,349.27 374.42,349.06 372.94,349.13 373.57,349.7 374.14,350.48 374.56,351.47 374.85,352.6 375.13,353.95 375.34,355.5 375.55,357.2 375.7,359.04 375.91,361.02 376.19,363.08 376.69,365.13 377.54,366.97 378.67,368.53 380.3,369.8 382.35,370.65 385.04,370.93 387.66,370.65 389.71,369.8 391.27,368.53 392.48,366.97 393.25,365.13 393.75,363.08 394.1,361.02 394.32,359.04 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-184.02393,92.255552)" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 7.8 KiB |
301
assets/svg/Ornament-Horiz-6.svg
Normal file
|
@ -0,0 +1,301 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<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"
|
||||||
|
width="59.655605mm"
|
||||||
|
height="14.967479mm"
|
||||||
|
viewBox="0 0 59.655604 14.967481"
|
||||||
|
version="1.1"
|
||||||
|
id="svg3667"
|
||||||
|
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
|
||||||
|
sodipodi:docname="Ornament-Horiz-0.svg">
|
||||||
|
<defs
|
||||||
|
id="defs3661" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1.8101934"
|
||||||
|
inkscape:cx="-86.531379"
|
||||||
|
inkscape:cy="89.130909"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="g852"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1003"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata3664">
|
||||||
|
<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>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(168.05638,-255.57249)">
|
||||||
|
<g
|
||||||
|
id="g852"
|
||||||
|
transform="translate(-99.012044,18.551839)">
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon567"
|
||||||
|
points="694.41,691.35 694.94,691.25 695.47,691.25 696,691.14 696.53,691.25 696.96,691.25 697.48,691.46 697.91,691.67 698.44,691.14 699.18,690.61 699.92,690.18 700.66,689.87 701.4,689.76 702.25,689.87 702.88,690.4 703.41,691.25 704.36,691.14 705.21,691.14 705.95,691.35 706.59,691.57 707.12,691.99 707.54,692.52 707.75,693.05 707.86,693.59 709.23,694.54 709.87,695.92 710.08,697.41 709.97,698.69 709.13,698.37 708.07,698.48 707.01,699.01 705.85,699.75 704.79,700.82 703.73,702.09 702.88,703.47 702.25,704.86 701.72,705.92 700.98,706.45 700.02,706.66 699.18,706.56 698.22,706.24 697.38,705.81 696.53,705.28 695.89,704.96 695.15,704.43 694.94,703.69 695.15,702.94 695.26,702.09 695.68,701.03 696,699.65 696.21,698.05 696.21,696.46 696.11,694.86 695.68,693.48 694.94,692.2 693.88,691.35 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#f2fcdd;fill-rule:evenodd"
|
||||||
|
id="polygon569"
|
||||||
|
points="702.25,692.95 702.78,692.84 703.2,692.84 703.62,692.84 704.05,693.48 704.36,694.01 704.58,694.54 704.47,695.18 705.11,695.18 705.74,695.18 706.27,695.29 706.9,695.39 707.43,695.61 707.86,695.82 708.17,696.14 708.49,696.56 708.39,696.14 708.17,695.61 707.75,694.97 707.33,694.44 706.8,693.8 706.16,693.27 705.53,692.84 704.79,692.42 704.05,692.1 703.31,691.78 702.67,691.57 702.03,691.35 701.51,691.14 700.98,691.03 700.55,690.93 700.24,690.93 699.71,691.25 699.18,691.57 698.75,691.99 698.65,692.1 699.07,692.63 699.49,693.16 699.81,693.69 699.92,694.33 700.24,693.91 700.66,693.59 701.08,693.27 701.61,693.05 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd"
|
||||||
|
id="polygon571"
|
||||||
|
points="697.7,704.43 698.22,704.64 698.75,704.75 699.28,704.75 699.81,704.54 700.34,704.22 700.87,703.69 701.4,702.84 702.14,701.88 703.2,700.82 704.36,699.86 705.53,699.01 706.48,698.26 707.22,697.63 707.43,697.31 707.12,697.2 706.48,696.88 705.63,696.67 704.89,696.67 704.15,696.88 703.84,695.5 703.31,694.33 702.88,693.69 702.67,693.48 702.56,693.48 702.25,693.59 701.82,693.8 701.4,694.01 700.87,694.23 700.34,694.54 699.81,694.86 699.49,695.29 699.07,694.76 698.75,694.23 698.12,693.8 696.96,693.8 697.16,695.39 697.06,697.73 696.85,699.97 696.42,701.45 696.11,702.31 696,703.05 696.32,703.69 697.16,704.22 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon573"
|
||||||
|
points="698.33,683.06 698.12,683.06 697.91,683.27 697.8,683.49 697.8,683.7 697.91,684.02 698.01,684.23 698.33,684.34 698.65,684.44 698.97,684.65 699.18,684.97 699.28,685.29 699.81,687.42 700.02,689.44 700.02,691.57 699.71,693.69 699.71,693.8 699.71,693.91 699.71,694.01 699.81,694.01 699.92,694.01 700.02,694.01 700.02,694.01 700.13,693.91 700.13,693.91 700.98,691.57 701.29,689.12 700.98,686.67 700.24,684.34 699.92,683.91 699.6,683.49 699.07,683.17 698.54,683.06 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon575"
|
||||||
|
points="706.16,689.02 706.69,688.38 707.01,687.74 707.43,686.99 707.86,686.14 708.28,685.19 708.6,684.23 708.92,683.17 708.92,683.27 708.92,683.27 708.92,683.27 708.92,683.38 708.92,683.17 708.92,682.85 708.81,682.63 708.6,682.53 708.39,682.53 708.17,682.53 707.96,682.63 707.75,682.85 707.54,683.8 707.22,684.76 706.9,685.83 706.38,686.78 705.95,687.52 705.53,688.27 705,688.91 704.58,689.55 704.15,690.29 703.62,690.93 703.2,691.67 702.78,692.42 702.67,692.52 702.67,692.52 702.67,692.63 702.78,692.74 702.88,692.84 702.99,692.84 703.09,692.84 703.09,692.74 703.09,692.74 703.31,692.63 703.52,692.52 703.62,692.31 703.84,692.2 704.36,691.57 704.79,690.93 705.32,690.29 705.74,689.65 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon577"
|
||||||
|
points="713.36,686.67 713.47,686.67 713.68,686.67 713.78,686.67 714.1,686.57 714.32,686.46 714.42,686.14 714.42,685.93 714.32,685.61 714.1,685.4 713.89,685.29 713.57,685.29 713.04,685.51 712.51,685.72 711.99,686.04 711.56,686.36 711.14,686.67 710.72,687.1 710.29,687.52 709.87,687.95 709.13,688.59 708.39,689.23 707.64,689.97 707.01,690.61 706.38,691.46 705.85,692.2 705.42,693.05 705.11,694.01 705.11,694.12 705.21,694.23 705.21,694.33 705.32,694.33 705.42,694.33 705.53,694.33 705.63,694.23 705.63,694.12 705.63,694.12 706.38,693.05 707.22,692.1 708.07,691.14 708.92,690.18 709.97,689.33 710.93,688.38 711.99,687.63 713.15,686.78 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon579"
|
||||||
|
points="656.09,729.21 655.57,729.74 655.46,730.69 655.78,731.97 656.73,733.14 658.32,733.88 660.33,734.1 662.55,733.78 664.67,732.93 666.57,731.44 668.06,729.21 668.8,726.44 668.9,724.95 668.8,723.47 668.48,721.98 668.06,720.7 667.31,719.42 666.47,718.25 665.3,717.19 663.93,716.23 662.34,715.38 660.33,714.75 658.21,714.11 655.67,713.68 652.92,713.47 649.74,713.26 646.36,713.36 642.54,713.58 638.73,714 635.13,714.75 631.75,715.6 628.68,716.66 625.82,717.83 623.17,719.11 620.74,720.49 618.62,721.87 616.61,723.36 614.92,724.74 613.33,726.12 612.06,727.4 610.89,728.57 610.05,729.63 609.31,730.59 608.78,731.23 611.11,730.48 612.59,728.78 614.39,726.87 616.4,725.06 618.73,723.25 621.27,721.55 624.02,719.96 626.99,718.36 630.16,717.09 633.55,716.02 637.15,715.06 640.85,714.53 644.77,714.32 648.79,714.43 652.92,714.96 657.15,715.92 661.49,717.4 663.82,718.57 665.52,720.06 666.57,721.76 667,723.47 667,725.38 666.57,727.29 665.73,729.21 664.56,730.91 663.29,732.29 662.13,733.14 660.96,733.57 660.01,733.67 659.16,733.46 658.42,733.25 657.79,732.82 657.26,732.5 656.73,731.76 656.84,730.8 657.58,730.16 658.53,730.48 658.85,730.91 659.06,731.33 659.16,731.87 659.27,732.5 660.12,732.5 660.12,731.87 660.01,731.23 659.91,730.59 659.59,730.06 659.06,729.42 658.42,729 657.58,728.78 656.73,728.89 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon581"
|
||||||
|
points="674.09,713.89 677.16,713.47 680.12,712.94 682.98,712.19 685.73,711.24 688.38,709.96 690.71,708.47 692.82,706.56 692.82,705.5 692.82,704.43 693.04,703.37 693.67,702.63 693.25,702.52 692.72,702.52 692.19,702.52 691.66,702.52 691.24,702.73 690.92,702.94 690.71,703.26 690.71,703.69 690.5,703.15 690.5,702.41 690.6,701.67 690.92,701.03 691.45,700.5 692.19,700.18 693.04,700.18 693.99,700.6 695.15,701.24 696.21,701.88 697.27,702.41 698.22,703.15 699.07,703.9 699.6,704.75 699.92,705.71 699.92,706.77 699.6,708.47 699.18,709.32 698.86,709.64 698.33,709.85 698.65,708.58 698.54,707.41 698.22,706.35 697.59,705.92 697.16,706.45 696.74,706.88 696.21,707.2 695.79,707.3 695.26,707.51 694.73,707.51 694.31,707.51 693.88,707.51 691.24,709 688.8,710.39 686.47,711.55 684.25,712.51 682.13,713.36 680.02,714 677.9,714.53 675.68,714.96 673.56,715.28 671.23,715.38 668.9,715.49 666.36,715.38 663.72,715.28 660.75,715.06 657.68,714.85 654.3,714.53 652.6,713.58 653.98,713.58 655.67,713.68 657.68,713.79 660.01,714 662.55,714.11 665.3,714.21 668.16,714.21 671.13,714.11 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#b2b2b2;fill-rule:evenodd"
|
||||||
|
id="polygon583"
|
||||||
|
points="696.32,706.03 695.47,706.35 694.62,706.45 693.99,706.45 693.78,705.6 693.67,704.75 693.88,704.01 694.31,703.05 694.84,703.15 695.26,703.15 695.68,703.05 696.32,703.05 696.53,703.9 696.64,704.54 696.85,705.17 697.06,705.5 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon585"
|
||||||
|
points="632.81,706.88 630.05,707.94 627.51,709.22 625.08,710.6 622.75,712.09 620.63,713.79 618.73,715.49 617.03,717.19 615.45,719 614.07,720.81 612.91,722.61 611.85,724.31 611,726.02 610.37,727.61 609.94,729.21 609.62,730.59 612.48,729.63 613.01,729.42 613.54,729.21 614.28,729.1 615.13,729 615.98,729.1 617.03,729.1 618.3,729.21 619.68,729.42 620.95,729.63 622.01,729.95 623.07,730.38 624.13,730.8 625.08,731.23 626.03,731.76 626.99,732.18 627.94,732.61 628.89,732.93 629.84,733.25 630.9,733.35 631.96,733.35 633.12,733.25 634.39,732.93 635.77,732.39 637.25,731.65 638.95,729.84 639.69,727.4 639.58,724.42 638.84,721.23 637.36,718.36 635.35,715.92 632.91,714.43 630.16,714 627.62,714.64 626.24,715.92 625.61,717.62 625.72,719.42 626.35,721.34 627.41,723.04 628.78,724.31 630.16,724.95 631.43,725.17 632.38,725.48 633.02,725.7 633.34,725.8 633.44,726.02 633.34,726.23 633.02,726.34 632.38,726.44 629.84,726.23 627.51,725.06 625.61,723.25 624.34,720.91 623.91,718.36 624.55,715.81 626.56,713.68 629.95,711.98 631.96,711.55 633.87,711.34 635.66,711.45 637.25,711.87 638.73,712.51 640.11,713.36 641.27,714.43 642.23,715.7 643.07,717.09 643.71,718.57 644.13,720.06 644.45,721.76 644.45,723.47 644.34,725.27 644.03,726.97 643.39,728.67 642.65,730.27 641.7,731.55 640.64,732.72 639.48,733.57 638.21,734.31 636.83,734.73 635.45,735.16 634.08,735.27 632.6,735.27 631.22,735.16 629.74,734.95 628.36,734.63 627.09,734.2 625.93,733.67 624.76,733.03 623.81,732.39 621.8,731.23 619.47,730.59 616.93,730.27 614.49,730.38 612.27,730.69 610.58,731.23 609.31,731.87 608.88,732.61 608.78,734.52 608.46,736.01 608.04,737.07 607.51,737.71 606.98,738.03 606.34,738.14 605.81,737.92 605.39,737.5 605.07,736.54 605.5,735.59 606.34,735.05 607.19,735.59 607.19,735.59 607.19,735.16 607.3,734.2 607.4,732.39 607.72,730.06 608.25,727.72 609.1,725.48 610.15,723.25 611.32,721.23 612.8,719.11 614.49,717.19 616.29,715.28 618.3,713.58 620.42,711.87 622.64,710.28 625.08,708.79 627.62,707.41 630.27,706.13 633.02,704.96 635.77,703.9 640.53,701.88 643.6,699.65 645.3,697.52 645.93,695.29 645.72,693.37 644.98,691.67 644.03,690.29 643.18,689.33 642.44,689.65 641.38,689.87 640.22,689.97 638.95,689.97 637.67,689.97 636.62,689.76 635.66,689.55 635.03,689.33 634.29,688.8 633.44,688.38 632.81,687.85 632.28,687.31 631.96,686.78 631.75,686.25 631.96,685.72 632.38,685.19 633.02,684.87 633.87,684.87 634.5,685.19 635.24,685.61 635.66,686.36 635.98,686.99 635.98,687.74 635.56,688.38 636.19,688.7 637.15,689.02 638.21,689.23 639.37,689.23 640.53,689.23 641.49,689.02 642.12,688.59 642.33,688.06 642.02,687.63 641.38,687.31 640.53,686.99 639.58,686.89 638.52,686.89 637.57,686.89 636.72,686.99 636.19,687.21 635.98,686.57 636.83,686.36 637.78,686.14 638.84,686.04 639.9,685.93 640.96,686.04 642.02,686.25 642.86,686.78 643.6,687.52 644.77,689.12 645.93,691.25 646.78,693.8 646.89,696.35 646.14,699.12 644.24,701.67 640.85,704.01 635.77,705.92 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon587"
|
||||||
|
points="607.72,718.47 607.08,718.68 606.55,717.83 606.66,716.45 607.08,715.06 607.72,713.58 608.46,711.98 609.41,710.39 610.26,708.9 611.21,707.62 612.16,706.56 613.01,705.92 613.75,706.56 612.8,707.3 611.95,708.15 611.21,709.22 610.47,710.28 609.73,711.55 609.2,713.04 608.67,714.53 608.35,716.23 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon589"
|
||||||
|
points="604.65,708.68 604.23,708.58 604.12,708.37 604.33,708.15 604.65,708.05 605.18,707.83 605.92,707.73 606.66,707.62 607.51,707.51 608.46,707.3 609.41,707.09 610.37,706.66 611.21,706.13 612.06,705.39 612.69,704.33 613.22,702.94 612.8,703.9 612.27,704.86 611.64,705.92 610.79,706.88 609.84,707.73 608.57,708.37 607.08,708.79 605.39,708.79 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon591"
|
||||||
|
points="618.62,710.81 617.99,710.28 617.46,709.75 617.03,709 616.61,708.26 616.4,707.41 616.29,706.56 616.19,705.6 615.34,706.56 614.49,707.2 613.65,707.73 612.91,708.05 612.27,708.26 611.74,708.37 611.42,708.37 611.32,708.37 611.32,707.2 611.21,706.03 611.32,704.75 612.06,703.37 611.11,703.79 610.26,704.11 609.52,704.11 608.78,703.9 608.04,703.58 607.51,702.94 606.98,702.2 606.66,701.24 608.46,701.35 610.05,701.13 611.64,700.6 613.12,699.97 614.39,699.01 615.66,698.05 616.82,696.99 617.88,695.92 618.94,694.86 619.89,694.01 620.85,693.37 621.8,692.95 622.64,692.74 623.6,692.95 624.45,693.59 625.29,694.76 625.93,697.31 625.61,699.54 624.45,701.35 622.96,703.05 621.48,704.75 620.11,706.56 619.26,708.68 619.36,711.13 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd"
|
||||||
|
id="polygon593"
|
||||||
|
points="617.88,706.45 617.56,705.39 617.46,704.54 617.35,704.22 615.98,704.75 614.92,705.28 614.07,705.6 613.44,705.81 613.01,706.03 612.69,706.03 612.48,706.13 612.48,706.13 612.91,704.75 613.01,703.58 613.01,702.84 613.44,702.41 612.8,702.52 612.16,702.63 611.53,702.73 610.89,702.73 610.26,702.73 609.73,702.63 609.1,702.41 608.46,702.09 611.42,701.35 613.96,699.97 616.19,698.48 618.09,696.78 619.68,695.29 621.06,694.33 622.22,693.91 623.17,694.44 624.66,695.82 624.87,697.41 624.13,699.12 622.75,700.92 621.16,702.84 619.68,704.54 618.52,706.24 618.2,707.62 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon595"
|
||||||
|
points="628.36,694.33 629,693.37 629.31,692.31 629.63,691.14 630.27,690.82 630.9,690.4 631.32,689.97 631.85,689.55 632.38,689.23 632.91,688.8 633.65,688.38 634.61,688.06 633.87,687.85 633.34,687.95 632.7,688.16 631.96,688.48 631.11,688.8 630.27,689.12 629.52,689.33 629,689.55 628.68,689.65 628.47,689.76 628.04,689.87 627.51,690.08 626.99,690.29 626.35,690.72 625.82,691.14 625.29,691.67 624.87,692.31 624.13,691.57 623.7,690.5 624.13,689.65 625.5,689.12 623.91,689.02 622.86,689.44 622.22,690.29 622.01,691.46 622.01,692.74 622.33,694.01 622.96,695.18 623.81,696.14 624.76,696.78 626.03,697.2 627.3,697.31 628.68,697.2 629.95,696.78 631.01,695.92 631.64,694.65 631.85,692.95 631.75,693.16 631.43,693.59 630.9,694.12 630.27,694.65 629.52,695.18 628.78,695.5 627.94,695.5 627.2,695.08 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#b2b2b2;fill-rule:evenodd"
|
||||||
|
id="polygon597"
|
||||||
|
points="642.33,717.83 642.86,719.53 643.29,721.23 643.5,722.93 643.39,724.53 642.97,726.02 642.23,727.19 641.06,728.14 641.27,726.12 641.06,723.89 640.53,721.55 639.69,719.21 638.31,717.09 636.51,715.17 634.18,713.68 631.43,712.73 632.38,712.73 633.55,712.62 634.82,712.73 636.19,712.94 637.67,713.36 639.05,714.11 640.32,715.06 641.49,716.45 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#b2b2b2;fill-rule:evenodd"
|
||||||
|
id="polygon599"
|
||||||
|
points="625.5,693.05 625.61,693.37 625.61,693.8 625.5,694.23 625.82,694.33 626.14,694.44 626.46,694.65 626.77,694.76 627.73,694.01 628.36,693.16 628.57,692.2 628.57,691.14 628.25,691.03 627.83,691.14 627.41,691.25 626.88,691.35 626.46,691.67 626.03,691.99 625.61,692.31 625.4,692.63 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon601"
|
||||||
|
points="656.09,738.14 655.57,738.25 655.14,738.35 654.72,738.35 655.46,737.39 656.41,737.07 657.26,736.65 658,736.12 658.53,735.37 658.85,734.73 659.16,733.99 659.27,733.25 659.27,732.5 660.12,732.5 660.01,733.46 659.8,734.42 659.38,735.27 658.85,736.12 658.32,736.76 657.68,737.29 657.15,737.71 656.62,738.03 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon603"
|
||||||
|
points="650.59,703.47 652.18,703.58 653.66,703.69 655.04,703.9 656.2,704.22 657.26,704.75 658,705.28 658.63,706.03 659.48,707.73 660.22,709.53 660.65,711.45 660.65,713.36 660.22,715.28 659.16,716.98 657.47,718.47 654.93,719.64 656.52,719.96 658.74,719.96 661.07,719.53 663.29,718.47 665.2,716.87 666.36,714.53 666.57,711.34 665.41,707.3 668.48,708.9 671.23,711.34 673.45,714.53 674.94,718.25 675.57,722.08 675.15,725.91 673.56,729.52 670.6,732.5 673.45,732.39 675.89,731.23 677.79,729.1 679.17,726.23 679.81,723.04 679.6,719.74 678.43,716.34 676.1,713.36 678.43,714.96 680.55,716.23 682.66,717.3 684.57,718.25 686.37,719.21 687.96,720.38 689.23,721.76 690.39,723.57 691.55,725.38 692.93,726.87 694.62,728.03 696.42,728.89 698.12,729.52 699.81,729.95 701.19,730.27 702.35,730.59 703.2,730.8 704.05,731.01 704.68,731.33 705.21,731.55 705.63,731.97 706.06,732.39 706.27,733.14 706.48,733.99 706.8,733.03 707.01,731.97 706.9,730.59 706.38,729.21 705.21,727.61 703.2,726.02 700.24,724.31 696,722.51 697.27,722.72 698.65,722.93 700.02,723.04 701.4,723.14 702.78,723.14 704.15,723.14 705.42,723.14 706.8,723.04 708.07,722.83 709.34,722.72 710.5,722.4 711.67,722.19 712.73,721.87 713.78,721.45 714.63,721.02 715.48,720.59 713.68,720.49 712.2,720.91 710.5,721.23 708.92,721.55 707.12,721.76 705.42,721.98 703.52,722.08 701.72,722.08 699.92,722.08 698.01,721.98 696.21,721.76 694.41,721.45 692.61,721.02 690.92,720.59 689.23,719.96 687.64,719.32 686.05,718.47 690.5,719.21 693.67,719 696.11,718.15 697.8,716.87 699.07,715.49 700.13,714.21 701.29,713.36 702.67,713.04 701.08,712.51 699.18,712.41 696.85,712.51 694.62,712.94 692.4,713.58 690.5,714.53 689.01,715.7 688.17,717.09 687.53,717.19 687,717.4 686.37,717.4 685.73,717.4 684.67,716.98 683.62,716.45 682.56,715.92 681.39,715.38 680.23,714.64 679.07,714 677.9,713.26 676.74,712.51 675.47,711.77 674.3,711.13 673.14,710.39 671.97,709.64 670.7,709 669.54,708.37 668.37,707.83 667.21,707.3 668.48,707.3 669.85,707.41 671.23,707.3 672.82,707.09 674.41,706.66 676,705.81 677.79,704.43 679.6,702.52 676.1,701.56 673.56,701.56 671.87,702.09 670.49,703.15 669.54,704.33 668.59,705.5 667.53,706.13 666.15,706.24 663.93,705.5 662.13,704.86 660.65,704.22 659.27,703.79 657.68,703.37 655.88,703.05 653.66,702.84 650.8,702.63 652.39,702.41 653.98,702.2 655.78,701.99 657.58,701.67 659.48,701.35 661.28,700.92 663.08,700.39 664.77,699.75 666.36,699.12 667.84,698.26 669.11,697.2 670.17,696.03 670.91,694.65 671.34,693.16 671.55,691.35 671.34,689.33 670.7,687.21 669.64,685.51 668.37,684.02 666.78,682.95 665.09,682.32 663.29,681.89 661.39,681.78 659.69,681.89 658.11,682.42 656.73,683.06 655.67,684.12 654.93,685.29 654.72,686.67 654.93,688.27 655.88,690.08 657.37,692.1 656.62,689.23 657.26,686.78 658.85,684.87 661.07,683.59 663.5,683.27 665.94,684.02 667.95,685.93 669.22,689.33 669.43,691.14 669.11,692.84 668.59,694.33 667.74,695.61 666.57,696.78 665.2,697.84 663.61,698.69 661.92,699.44 660.12,700.07 658.21,700.6 656.41,701.13 654.51,701.45 652.71,701.77 651.01,701.99 649.43,702.2 648.05,702.41 647.31,702.41 646.46,702.52 645.51,702.52 644.56,702.52 643.6,702.63 642.65,702.73 641.7,702.94 640.75,703.15 636.51,705.28 637.78,704.96 639.16,704.75 640.64,704.43 642.23,704.22 643.92,704.01 645.62,703.79 647.31,703.69 649,703.58 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#b2b2b2;fill-rule:evenodd"
|
||||||
|
id="polygon605"
|
||||||
|
points="660.43,718.79 662.13,718.04 663.4,716.77 664.35,715.17 664.99,713.36 665.2,711.55 665.09,709.64 664.56,707.94 664.03,707.2 663.5,706.56 662.87,706.13 662.13,705.92 661.49,705.71 660.86,705.71 660.33,705.71 659.91,705.71 660.65,706.66 661.49,708.15 662.13,709.85 662.45,711.77 662.45,713.79 661.92,715.7 660.65,717.51 658.53,718.89 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#b2b2b2;fill-rule:evenodd"
|
||||||
|
id="polygon607"
|
||||||
|
points="677.16,703.69 676.42,704.43 675.57,705.17 674.62,705.71 673.45,706.13 672.18,706.35 670.81,706.35 669.11,706.13 669.54,705.5 670.07,704.86 670.7,704.01 671.55,703.26 672.61,702.73 673.98,702.41 675.68,702.41 677.79,702.84 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#b2b2b2;fill-rule:evenodd"
|
||||||
|
id="polygon609"
|
||||||
|
points="675.15,730.27 676.84,728.46 678.01,726.02 678.53,723.25 678.43,720.38 677.69,717.51 676.1,714.85 673.56,712.62 674.3,713.79 675.25,715.49 676,717.62 676.63,720.06 676.84,722.72 676.42,725.59 675.25,728.46 673.14,731.33 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#b2b2b2;fill-rule:evenodd"
|
||||||
|
id="polygon611"
|
||||||
|
points="698.75,714.32 697.91,715.28 696.96,716.23 695.79,717.09 694.52,717.72 692.93,718.04 691.13,718.04 689.23,717.51 689.54,716.87 690.28,716.13 691.45,715.38 692.82,714.64 694.41,714 696.11,713.58 697.8,713.36 699.39,713.47 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#b2b2b2;fill-rule:evenodd"
|
||||||
|
id="polygon613"
|
||||||
|
points="704.47,729.52 703.62,728.46 702.46,727.29 700.87,726.02 698.97,724.85 696.64,723.89 694.1,723.14 691.13,722.83 691.55,723.57 692.19,724.42 693.04,725.38 694.31,726.44 696.11,727.5 698.44,728.57 701.29,729.52 705,730.38 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon615"
|
||||||
|
points="511.07,691.35 510.55,691.25 509.91,691.25 509.49,691.14 508.96,691.25 508.43,691.25 508,691.46 507.58,691.67 507.05,691.14 506.31,690.61 505.57,690.18 504.83,689.87 503.98,689.76 503.24,689.87 502.61,690.4 501.97,691.25 501.02,691.14 500.17,691.14 499.43,691.35 498.9,691.57 498.37,691.99 497.95,692.52 497.74,693.05 497.63,693.59 496.25,694.54 495.51,695.92 495.3,697.41 495.41,698.69 496.25,698.37 497.31,698.48 498.37,699.01 499.54,699.75 500.7,700.82 501.65,702.09 502.5,703.47 503.14,704.86 503.67,705.92 504.51,706.45 505.36,706.66 506.31,706.56 507.26,706.24 508.11,705.81 508.96,705.28 509.59,704.96 510.33,704.43 510.55,703.69 510.33,702.94 510.12,702.09 509.7,701.03 509.49,699.65 509.27,698.05 509.27,696.46 509.38,694.86 509.81,693.48 510.55,692.2 511.6,691.35 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#f2fcdd;fill-rule:evenodd"
|
||||||
|
id="polygon617"
|
||||||
|
points="503.24,692.95 502.71,692.84 502.29,692.84 501.87,692.84 501.44,693.48 501.12,694.01 500.81,694.54 500.91,695.18 500.28,695.18 499.75,695.18 499.11,695.29 498.58,695.39 498.06,695.61 497.63,695.82 497.21,696.14 496.89,696.56 497,696.14 497.31,695.61 497.63,694.97 498.06,694.44 498.58,693.8 499.22,693.27 499.85,692.84 500.6,692.42 501.34,692.1 502.08,691.78 502.71,691.57 503.35,691.35 503.88,691.14 504.41,691.03 504.83,690.93 505.15,690.93 505.68,691.25 506.31,691.57 506.63,691.99 506.84,692.1 506.42,692.63 505.99,693.16 505.68,693.69 505.57,694.33 505.25,693.91 504.83,693.59 504.41,693.27 503.88,693.05 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd"
|
||||||
|
id="polygon619"
|
||||||
|
points="507.79,704.43 507.26,704.64 506.74,704.75 506.21,704.75 505.68,704.54 505.15,704.22 504.62,703.69 504.09,702.84 503.35,701.88 502.29,700.82 501.12,699.86 499.96,699.01 499.01,698.26 498.27,697.63 498.06,697.31 498.37,697.2 499.01,696.88 499.75,696.67 500.6,696.67 501.34,696.88 501.55,695.5 502.08,694.33 502.5,693.69 502.71,693.48 502.82,693.48 503.14,693.59 503.56,693.8 503.98,694.01 504.51,694.23 505.04,694.54 505.57,694.86 505.89,695.29 506.42,694.76 506.74,694.23 507.37,693.8 508.43,693.8 508.22,695.39 508.32,697.73 508.64,699.97 509.06,701.45 509.38,702.31 509.49,703.05 509.17,703.69 508.32,704.22 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon621"
|
||||||
|
points="507.05,683.06 507.37,683.06 507.48,683.27 507.58,683.49 507.58,683.7 507.58,684.02 507.37,684.23 507.16,684.34 506.84,684.44 506.52,684.65 506.31,684.97 506.1,685.29 505.57,687.42 505.36,689.44 505.46,691.57 505.78,693.69 505.78,693.8 505.78,693.91 505.78,694.01 505.68,694.01 505.57,694.01 505.46,694.01 505.36,694.01 505.36,693.91 505.36,693.91 504.51,691.57 504.19,689.12 504.41,686.67 505.15,684.34 505.46,683.91 505.89,683.49 506.31,683.17 506.84,683.06 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon623"
|
||||||
|
points="499.22,689.01 498.69,688.38 498.37,687.74 497.95,686.99 497.53,686.14 497.1,685.19 496.78,684.23 496.47,683.17 496.47,683.27 496.47,683.27 496.47,683.27 496.57,683.38 496.47,683.17 496.47,682.85 496.57,682.63 496.78,682.53 497,682.53 497.31,682.53 497.53,682.63 497.63,682.85 497.95,683.8 498.16,684.76 498.58,685.83 499.01,686.78 499.43,687.52 499.96,688.27 500.38,688.91 500.91,689.55 501.34,690.29 501.76,690.93 502.18,691.67 502.61,692.42 502.71,692.52 502.71,692.52 502.71,692.63 502.71,692.74 502.61,692.84 502.5,692.84 502.39,692.84 502.29,692.74 502.29,692.74 502.08,692.63 501.87,692.52 501.76,692.31 501.65,692.2 501.12,691.57 500.6,690.93 500.17,690.29 499.64,689.65 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon625"
|
||||||
|
points="492.13,686.67 492.02,686.67 491.81,686.67 491.6,686.67 491.39,686.57 491.17,686.46 491.07,686.14 491.07,685.93 491.17,685.61 491.39,685.4 491.6,685.29 491.92,685.29 492.44,685.51 492.97,685.72 493.4,686.04 493.93,686.36 494.35,686.67 494.77,687.1 495.2,687.52 495.62,687.95 496.36,688.59 497.1,689.23 497.84,689.97 498.48,690.61 499.11,691.46 499.64,692.2 500.06,693.05 500.38,694.01 500.38,694.12 500.28,694.23 500.28,694.33 500.17,694.33 500.06,694.33 499.96,694.33 499.85,694.23 499.85,694.12 499.85,694.12 499.11,693.05 498.27,692.1 497.42,691.14 496.47,690.18 495.51,689.33 494.46,688.38 493.4,687.63 492.34,686.78 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon627"
|
||||||
|
points="549.5,729.21 549.92,729.74 550.13,730.69 549.82,731.97 548.86,733.14 547.28,733.88 545.27,734.1 543.04,733.78 540.92,732.93 539.02,731.44 537.54,729.21 536.8,726.44 536.69,724.95 536.8,723.47 537.12,721.98 537.54,720.7 538.17,719.42 539.13,718.25 540.29,717.19 541.67,716.23 543.25,715.38 545.16,714.75 547.38,714.11 549.82,713.68 552.67,713.47 555.75,713.26 559.24,713.36 563.05,713.58 566.86,714 570.46,714.75 573.85,715.6 576.92,716.66 579.77,717.83 582.42,719.11 584.86,720.49 586.97,721.87 588.98,723.36 590.68,724.74 592.26,726.12 593.53,727.4 594.7,728.57 595.55,729.63 596.29,730.59 596.82,731.23 594.49,730.48 593.01,728.78 591.21,726.87 589.2,725.06 586.87,723.25 584.33,721.55 581.57,719.96 578.61,718.36 575.33,717.09 571.94,716.02 568.34,715.06 564.64,714.53 560.72,714.32 556.7,714.43 552.57,714.96 548.34,715.92 544,717.4 541.67,718.57 540.08,720.06 539.02,721.76 538.49,723.47 538.49,725.38 538.91,727.29 539.76,729.21 540.92,730.91 542.2,732.29 543.47,733.14 544.52,733.57 545.48,733.67 546.43,733.46 547.17,733.25 547.81,732.82 548.34,732.5 548.86,731.76 548.65,730.8 548.02,730.16 547.07,730.48 546.75,730.91 546.54,731.33 546.32,731.87 546.22,732.5 545.37,732.5 545.37,731.87 545.58,731.23 545.69,730.59 546.01,730.06 546.54,729.42 547.17,729 548.02,728.78 548.76,728.89 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon629"
|
||||||
|
points="531.4,713.89 528.33,713.47 525.37,712.94 522.51,712.19 519.65,711.24 517.11,709.96 514.78,708.47 512.66,706.56 512.66,705.5 512.66,704.43 512.35,703.37 511.82,702.62 512.24,702.52 512.77,702.52 513.3,702.52 513.83,702.52 514.25,702.73 514.57,702.94 514.67,703.26 514.67,703.69 514.88,703.15 514.99,702.41 514.88,701.67 514.46,701.03 513.93,700.5 513.3,700.18 512.45,700.18 511.39,700.6 510.23,701.24 509.17,701.88 508.11,702.41 507.16,703.15 506.42,703.9 505.89,704.75 505.57,705.71 505.57,706.77 505.89,708.47 506.21,709.32 506.63,709.64 507.16,709.85 506.84,708.58 506.95,707.41 507.26,706.35 507.9,705.92 508.32,706.45 508.75,706.88 509.17,707.2 509.7,707.3 510.23,707.51 510.65,707.51 511.07,707.51 511.5,707.51 514.14,709 516.58,710.39 518.91,711.55 521.24,712.51 523.35,713.36 525.47,714 527.59,714.53 529.81,714.96 531.93,715.28 534.26,715.38 536.59,715.49 539.13,715.38 541.77,715.28 544.74,715.06 547.81,714.85 551.19,714.53 552.99,713.58 551.62,713.58 549.92,713.68 547.81,713.79 545.48,714 542.94,714.11 540.18,714.21 537.33,714.21 534.36,714.11 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#b2b2b2;fill-rule:evenodd"
|
||||||
|
id="polygon631"
|
||||||
|
points="509.17,706.03 510.02,706.35 510.76,706.45 511.39,706.45 511.71,705.6 511.82,704.75 511.6,704.01 511.18,703.05 510.65,703.15 510.23,703.15 509.7,703.05 509.06,703.05 508.96,703.9 508.85,704.54 508.64,705.17 508.32,705.5 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon633"
|
||||||
|
points="572.68,706.88 575.43,707.94 578.08,709.22 580.52,710.6 582.84,712.09 584.86,713.79 586.87,715.49 588.56,717.19 590.15,719 591.52,720.81 592.69,722.61 593.75,724.31 594.59,726.02 595.23,727.61 595.65,729.21 595.97,730.59 593.01,729.63 592.48,729.42 591.95,729.21 591.21,729.1 590.47,729 589.51,729.1 588.45,729.1 587.29,729.21 585.91,729.42 584.64,729.63 583.48,729.95 582.42,730.38 581.47,730.8 580.41,731.23 579.46,731.76 578.61,732.18 577.66,732.61 576.7,732.93 575.64,733.25 574.69,733.35 573.53,733.35 572.36,733.25 571.09,732.93 569.72,732.39 568.24,731.65 566.54,729.84 565.8,727.4 565.91,724.42 566.75,721.23 568.24,718.36 570.25,715.92 572.58,714.43 575.33,714 577.87,714.64 579.25,715.92 579.88,717.62 579.77,719.42 579.14,721.34 578.08,723.04 576.7,724.31 575.33,724.95 574.16,725.17 573.21,725.48 572.58,725.7 572.15,725.8 572.05,726.02 572.15,726.23 572.58,726.34 573.21,726.44 575.75,726.23 578.08,725.06 579.88,723.25 581.15,720.91 581.57,718.36 580.94,715.81 579.03,713.68 575.64,711.98 573.63,711.55 571.62,711.34 569.93,711.45 568.24,711.87 566.75,712.51 565.48,713.36 564.32,714.43 563.26,715.7 562.41,717.09 561.78,718.57 561.36,720.06 561.14,721.76 561.04,723.47 561.14,725.27 561.57,726.97 562.1,728.67 562.84,730.27 563.79,731.55 564.85,732.72 566.01,733.57 567.28,734.31 568.66,734.73 570.03,735.16 571.52,735.27 572.89,735.27 574.38,735.16 575.75,734.95 577.13,734.63 578.4,734.2 579.67,733.67 580.83,733.03 581.78,732.39 583.8,731.23 586.13,730.59 588.66,730.27 591.1,730.38 593.32,730.69 595.02,731.23 596.29,731.87 596.71,732.61 596.82,734.52 597.13,736.01 597.56,737.07 598.09,737.71 598.62,738.03 599.14,738.14 599.67,737.92 600.1,737.5 600.41,736.54 599.99,735.59 599.25,735.05 598.4,735.59 598.4,735.59 598.4,735.16 598.3,734.2 598.19,732.39 597.88,730.06 597.24,727.72 596.5,725.48 595.44,723.25 594.17,721.23 592.69,719.11 591.1,717.19 589.3,715.28 587.29,713.58 585.17,711.87 582.84,710.28 580.41,708.79 577.87,707.41 575.22,706.13 572.58,704.96 569.72,703.9 564.95,701.88 561.88,699.65 560.19,697.52 559.66,695.29 559.87,693.37 560.61,691.67 561.57,690.29 562.41,689.33 563.15,689.65 564.21,689.87 565.38,689.97 566.65,689.97 567.81,689.97 568.98,689.76 569.82,689.55 570.46,689.33 571.2,688.8 572.05,688.38 572.68,687.85 573.21,687.31 573.63,686.78 573.74,686.25 573.63,685.72 573.21,685.19 572.47,684.87 571.73,684.87 570.99,685.19 570.35,685.61 569.82,686.36 569.51,686.99 569.51,687.74 569.93,688.38 569.29,688.7 568.45,689.02 567.39,689.23 566.23,689.23 565.06,689.23 564.11,689.02 563.47,688.59 563.26,688.06 563.58,687.63 564.21,687.31 565.06,686.99 566.01,686.89 566.97,686.89 567.92,686.89 568.76,686.99 569.4,687.21 569.61,686.57 568.76,686.36 567.71,686.14 566.65,686.04 565.59,685.93 564.53,686.04 563.47,686.25 562.63,686.78 561.88,687.52 560.72,689.12 559.56,691.25 558.82,693.8 558.6,696.35 559.34,699.12 561.25,701.67 564.64,704.01 569.72,705.92 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon635"
|
||||||
|
points="597.77,718.47 598.51,718.68 598.93,717.83 598.93,716.45 598.4,715.06 597.77,713.58 597.03,711.98 596.18,710.39 595.23,708.9 594.28,707.62 593.32,706.56 592.48,705.92 591.74,706.56 592.69,707.3 593.53,708.15 594.38,709.22 595.12,710.28 595.76,711.55 596.29,713.04 596.82,714.53 597.13,716.23 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon637"
|
||||||
|
points="600.84,708.68 601.26,708.58 601.37,708.37 601.26,708.15 600.84,708.05 600.31,707.83 599.67,707.73 598.93,707.62 598.09,707.51 597.13,707.3 596.18,707.09 595.23,706.66 594.38,706.13 593.53,705.39 592.79,704.33 592.26,702.94 592.69,703.9 593.22,704.86 593.85,705.92 594.7,706.88 595.76,707.73 596.92,708.37 598.4,708.79 600.1,708.79 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon639"
|
||||||
|
points="587.5,710.28 588.45,709 589.09,707.41 589.3,705.6 590.15,706.56 590.99,707.2 591.84,707.73 592.58,708.05 593.32,708.26 593.85,708.37 594.17,708.37 594.28,708.37 594.28,707.2 594.38,706.03 594.28,704.75 593.53,703.37 594.49,703.79 595.33,704.11 596.08,704.11 596.92,703.9 597.56,703.58 598.09,702.94 598.62,702.2 598.93,701.24 597.13,701.35 595.55,701.13 593.96,700.6 592.48,699.97 591.21,699.01 589.94,698.05 588.77,696.99 587.71,695.92 586.65,694.86 585.7,694.01 584.75,693.37 583.8,692.95 582.95,692.74 582,692.95 581.15,693.59 580.3,694.76 579.67,697.31 579.99,699.54 581.04,701.35 582.53,703.05 584.12,704.75 585.49,706.56 586.34,708.68 586.23,711.13 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd"
|
||||||
|
id="polygon641"
|
||||||
|
points="587.71,706.45 587.92,705.39 588.14,704.54 588.24,704.22 589.51,704.75 590.57,705.28 591.42,705.6 592.05,705.81 592.48,706.03 592.79,706.03 593.01,706.13 593.01,706.13 592.58,704.75 592.58,703.58 592.48,702.84 592.05,702.41 592.79,702.52 593.43,702.63 594.06,702.73 594.7,702.73 595.23,702.73 595.86,702.63 596.39,702.41 597.03,702.09 594.06,701.35 591.52,699.97 589.3,698.48 587.39,696.78 585.81,695.29 584.43,694.33 583.27,693.91 582.32,694.44 580.83,695.82 580.73,697.41 581.47,699.12 582.74,700.92 584.33,702.84 585.91,704.54 586.97,706.24 587.29,707.62 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon643"
|
||||||
|
points="577.23,694.33 576.6,693.37 576.17,692.31 575.96,691.14 575.33,690.82 574.69,690.4 574.16,689.97 573.74,689.55 573.21,689.23 572.58,688.8 571.84,688.38 570.99,688.06 571.73,687.85 572.15,687.95 572.79,688.16 573.63,688.48 574.48,688.8 575.33,689.12 575.96,689.33 576.49,689.55 576.81,689.65 577.02,689.76 577.45,689.87 577.97,690.08 578.61,690.29 579.14,690.72 579.77,691.14 580.3,691.67 580.73,692.31 581.47,691.57 581.78,690.5 581.47,689.65 579.99,689.12 581.57,689.02 582.63,689.44 583.27,690.29 583.58,691.46 583.48,692.74 583.16,694.01 582.53,695.18 581.78,696.14 580.83,696.78 579.56,697.2 578.19,697.31 576.81,697.2 575.54,696.78 574.59,695.92 573.85,694.65 573.63,692.95 573.74,693.16 574.06,693.59 574.59,694.12 575.22,694.65 575.96,695.18 576.81,695.5 577.55,695.5 578.29,695.08 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#b2b2b2;fill-rule:evenodd"
|
||||||
|
id="polygon645"
|
||||||
|
points="563.26,717.83 562.73,719.53 562.31,721.23 562.1,722.93 562.2,724.53 562.63,726.02 563.26,727.19 564.43,728.14 564.21,726.12 564.43,723.89 564.95,721.55 565.91,719.21 567.18,717.09 568.98,715.17 571.3,713.68 574.06,712.73 573.11,712.73 571.94,712.62 570.67,712.73 569.29,712.94 567.92,713.36 566.54,714.11 565.27,715.06 564.11,716.45 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#b2b2b2;fill-rule:evenodd"
|
||||||
|
id="polygon647"
|
||||||
|
points="580.09,693.05 579.99,693.37 579.88,693.8 579.99,694.23 579.77,694.33 579.46,694.44 579.14,694.65 578.82,694.76 577.87,694.01 577.23,693.16 576.92,692.2 576.92,691.14 577.23,691.03 577.66,691.14 578.19,691.25 578.61,691.35 579.14,691.67 579.56,691.99 579.99,692.31 580.2,692.63 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon649"
|
||||||
|
points="549.5,738.14 550.03,738.25 550.45,738.35 550.88,738.35 550.13,737.39 549.08,737.07 548.23,736.65 547.59,736.12 547.07,735.37 546.64,734.73 546.32,733.99 546.22,733.25 546.22,732.5 545.37,732.5 545.48,733.46 545.69,734.42 546.11,735.27 546.75,736.12 547.28,736.76 547.81,737.29 548.44,737.71 548.97,738.03 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="polygon651"
|
||||||
|
points="554.9,703.47 553.42,703.58 551.93,703.69 550.56,703.9 549.39,704.22 548.34,704.75 547.49,705.28 546.96,706.03 546.11,707.73 545.37,709.53 544.95,711.45 544.84,713.36 545.27,715.28 546.32,716.98 548.12,718.47 550.66,719.64 548.97,719.96 546.85,719.96 544.52,719.53 542.2,718.47 540.4,716.87 539.23,714.53 539.02,711.34 540.08,707.3 537.01,708.9 534.26,711.34 532.03,714.53 530.55,718.25 529.92,722.08 530.34,725.91 531.93,729.52 534.89,732.5 532.03,732.39 529.6,731.23 527.59,729.1 526.32,726.23 525.68,723.04 525.89,719.74 527.06,716.34 529.39,713.36 527.06,714.96 524.84,716.23 522.72,717.3 520.81,718.25 519.01,719.21 517.53,720.38 516.15,721.76 515.1,723.57 513.93,725.38 512.56,726.87 510.86,728.03 509.17,728.89 507.37,729.52 505.68,729.95 504.3,730.27 503.14,730.59 502.18,730.8 501.44,731.01 500.81,731.33 500.28,731.55 499.75,731.97 499.43,732.39 499.11,733.14 498.9,733.99 498.58,733.03 498.37,731.97 498.48,730.59 499.01,729.21 500.17,727.61 502.29,726.02 505.25,724.31 509.49,722.51 508.22,722.72 506.84,722.93 505.46,723.04 504.09,723.14 502.71,723.14 501.44,723.14 500.06,723.14 498.69,723.04 497.42,722.83 496.15,722.72 494.99,722.4 493.82,722.19 492.76,721.87 491.7,721.45 490.86,721.02 490.01,720.59 491.81,720.49 493.29,720.91 494.88,721.23 496.57,721.55 498.27,721.76 500.06,721.98 501.87,722.08 503.67,722.08 505.46,722.08 507.37,721.98 509.17,721.76 510.97,721.45 512.77,721.02 514.46,720.59 516.15,719.96 517.74,719.32 519.33,718.47 514.99,719.21 511.71,719 509.38,718.15 507.69,716.87 506.42,715.49 505.25,714.21 504.19,713.36 502.71,713.04 504.3,712.51 506.21,712.41 508.54,712.51 510.86,712.94 513.09,713.58 514.99,714.53 516.47,715.7 517.32,717.09 517.95,717.19 518.59,717.4 519.12,717.4 519.75,717.4 520.81,716.98 521.87,716.45 523.04,715.92 524.1,715.38 525.26,714.64 526.42,714 527.59,713.26 528.86,712.51 530.02,711.77 531.29,711.13 532.46,710.39 533.62,709.64 534.89,709 536.06,708.37 537.22,707.83 538.38,707.3 537.12,707.3 535.74,707.41 534.26,707.3 532.77,707.09 531.19,706.66 529.49,705.81 527.69,704.43 525.89,702.52 529.39,701.56 531.93,701.56 533.73,702.09 535,703.15 535.95,704.33 536.9,705.5 537.96,706.13 539.34,706.24 541.56,705.5 543.36,704.86 544.95,704.22 546.32,703.79 547.91,703.37 549.71,703.05 551.93,702.84 554.79,702.62 553.2,702.41 551.62,702.2 549.82,701.99 548.02,701.67 546.11,701.35 544.31,700.92 542.51,700.39 540.71,699.75 539.13,699.12 537.75,698.26 536.48,697.2 535.42,696.03 534.68,694.65 534.15,693.16 534.04,691.35 534.26,689.33 534.89,687.21 535.95,685.51 537.22,684.02 538.81,682.95 540.5,682.32 542.3,681.89 544.1,681.78 545.79,681.89 547.38,682.42 548.76,683.06 549.82,684.12 550.56,685.29 550.77,686.67 550.56,688.27 549.61,690.08 548.12,692.1 548.86,689.23 548.23,686.78 546.64,684.87 544.42,683.59 541.98,683.27 539.55,684.02 537.54,685.93 536.27,689.33 536.16,691.14 536.37,692.84 536.9,694.33 537.86,695.61 539.02,696.78 540.4,697.84 541.98,698.69 543.68,699.44 545.48,700.07 547.28,700.6 549.18,701.13 551.09,701.45 552.89,701.77 554.58,701.99 556.06,702.2 557.44,702.41 558.28,702.41 559.13,702.52 559.98,702.52 561.04,702.52 561.99,702.62 562.94,702.73 563.9,702.94 564.85,703.15 568.98,705.28 567.71,704.96 566.33,704.75 564.85,704.43 563.26,704.22 561.67,704.01 559.98,703.79 558.28,703.69 556.59,703.58 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#b2b2b2;fill-rule:evenodd"
|
||||||
|
id="polygon653"
|
||||||
|
points="545.05,718.79 543.47,718.04 542.09,716.77 541.14,715.17 540.5,713.36 540.29,711.55 540.5,709.64 541.03,707.94 541.46,707.2 542.09,706.56 542.73,706.13 543.36,705.92 544,705.71 544.63,705.71 545.16,705.71 545.58,705.71 544.84,706.66 544.1,708.15 543.47,709.85 543.15,711.77 543.15,713.79 543.68,715.7 544.95,717.51 547.07,718.89 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#b2b2b2;fill-rule:evenodd"
|
||||||
|
id="polygon655"
|
||||||
|
points="528.43,703.69 529.17,704.43 530.02,705.17 530.98,705.71 532.03,706.13 533.3,706.35 534.79,706.35 536.37,706.13 535.95,705.5 535.42,704.86 534.89,704.01 534.04,703.26 532.99,702.73 531.61,702.41 529.92,702.41 527.8,702.84 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#b2b2b2;fill-rule:evenodd"
|
||||||
|
id="polygon657"
|
||||||
|
points="530.34,730.27 528.75,728.46 527.59,726.02 526.95,723.25 527.06,720.38 527.8,717.51 529.49,714.85 532.03,712.62 531.29,713.79 530.34,715.49 529.49,717.62 528.86,720.06 528.65,722.72 529.07,725.59 530.23,728.46 532.35,731.33 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#b2b2b2;fill-rule:evenodd"
|
||||||
|
id="polygon659"
|
||||||
|
points="506.74,714.32 507.48,715.28 508.54,716.23 509.59,717.09 510.97,717.72 512.45,718.04 514.25,718.04 516.15,717.51 515.84,716.87 515.1,716.13 513.93,715.38 512.56,714.64 510.97,714 509.27,713.58 507.58,713.36 506.1,713.47 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
<polygon
|
||||||
|
style="fill:#b2b2b2;fill-rule:evenodd"
|
||||||
|
id="polygon661"
|
||||||
|
points="500.91,729.52 501.76,728.46 503.03,727.29 504.62,726.02 506.52,724.85 508.85,723.89 511.39,723.14 514.36,722.83 513.93,723.57 513.3,724.42 512.35,725.38 511.07,726.44 509.27,727.5 506.95,728.57 504.09,729.52 500.38,730.38 "
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,-198.69281,56.633027)" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 44 KiB |
77
assets/svg/back.svg
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<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"
|
||||||
|
width="100"
|
||||||
|
height="100"
|
||||||
|
viewBox="0 0 26.458333 26.458334"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
sodipodi:docname="back.svg"
|
||||||
|
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
|
||||||
|
<defs
|
||||||
|
id="defs2" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="11.313708"
|
||||||
|
inkscape:cx="53.672761"
|
||||||
|
inkscape:cy="44.121128"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="svg8"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:guide-bbox="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1003"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1">
|
||||||
|
<sodipodi:guide
|
||||||
|
position="13.229167,23.859748"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide815"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="14.944824,13.229167"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide817"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<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>
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:5.29166651;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 14.287501,23.618637 4.1432302,13.229167 14.287501,2.8716565"
|
||||||
|
id="path821"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:3.96875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 5.5322927,13.229167 c 6.8146903,-0.012 17.9353933,-0.039 18.2802083,-0.0286"
|
||||||
|
id="path815"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.5 KiB |
|
@ -8,6 +8,7 @@
|
||||||
"phone": {
|
"phone": {
|
||||||
"question": {
|
"question": {
|
||||||
"en": "What is the phone number of {name}?",
|
"en": "What is the phone number of {name}?",
|
||||||
|
"nl": "Wat is het telefoonnummer van {name}?",
|
||||||
"de": "Was ist die Telefonnummer von {name}?"
|
"de": "Was ist die Telefonnummer von {name}?"
|
||||||
},
|
},
|
||||||
"render": "<a href='tel:{phone}'>{phone}</a>",
|
"render": "<a href='tel:{phone}'>{phone}</a>",
|
||||||
|
|
27
assets/themes/bicycle_library/bicycle_library.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"id": "bicyclelib",
|
||||||
|
"maintainer": "MapComplete",
|
||||||
|
"version": "2020-08-29",
|
||||||
|
"language": [
|
||||||
|
"en",
|
||||||
|
"nl"
|
||||||
|
],
|
||||||
|
"title": {
|
||||||
|
"en": "Bicycle libraries",
|
||||||
|
"nl": "Fietsbibliotheken"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"nl": "Een fietsbibliotheek is een plaats waar men een fiets kan lenen, vaak voor een klein bedrag per jaar. Een typisch voorbeeld zijn kinderfietsbibliotheken, waar men een fiets op maat van het kind kan lenen. Is het kind de fiets ontgroeid, dan kan het te kleine fietsje omgeruild worden voor een grotere.",
|
||||||
|
"en": "A bicycle library is a place where bicycles can be lent, often for a small yearly fee. A notable use case are bicycle libraries for kids, which allows them to change for a bigger bike when they've outgrown their current bike"
|
||||||
|
},
|
||||||
|
"icon": "./assets/themes/bicycle_library/logo.svg",
|
||||||
|
"socialImage": null,
|
||||||
|
"startLat": 0,
|
||||||
|
"startLon": 0,
|
||||||
|
"startZoom": 1,
|
||||||
|
"widenFactor": 0.05,
|
||||||
|
"roamingRenderings": [],
|
||||||
|
"layers": [
|
||||||
|
"bicycle_library"
|
||||||
|
]
|
||||||
|
}
|
166
assets/themes/bicycle_library/logo.svg
Normal file
After Width: | Height: | Size: 11 KiB |
|
@ -13,9 +13,14 @@
|
||||||
"fr": "Le but de cette carte est de présenter aux cyclistes une solution facile à utiliser pour trouver l'infrastructure appropriée à leurs besoins.<br><br>Vous pouvez suivre votre localisation précise (mobile uniquement) et sélectionner les couches qui vous concernent dans le coin inférieur gauche. Vous pouvez également utiliser cet outil pour ajouter ou modifier des épingles (points d'intérêt) sur la carte et fournir plus de données en répondant aux questions.<br><br>Toutes les modifications que vous apportez seront automatiquement enregistrées dans la base de données mondiale d'OpenStreetMap et peuvent être librement réutilisées par d'autres.<br><br>Pour plus d'informations sur le projet cyclofix, rendez-vous sur <a href='https://cyclofix.osm.be/'>cyclofix.osm.be</a>.",
|
"fr": "Le but de cette carte est de présenter aux cyclistes une solution facile à utiliser pour trouver l'infrastructure appropriée à leurs besoins.<br><br>Vous pouvez suivre votre localisation précise (mobile uniquement) et sélectionner les couches qui vous concernent dans le coin inférieur gauche. Vous pouvez également utiliser cet outil pour ajouter ou modifier des épingles (points d'intérêt) sur la carte et fournir plus de données en répondant aux questions.<br><br>Toutes les modifications que vous apportez seront automatiquement enregistrées dans la base de données mondiale d'OpenStreetMap et peuvent être librement réutilisées par d'autres.<br><br>Pour plus d'informations sur le projet cyclofix, rendez-vous sur <a href='https://cyclofix.osm.be/'>cyclofix.osm.be</a>.",
|
||||||
"gl": "O obxectivo deste mapa é amosar ós ciclistas unha solución doada de empregar para atopar a infraestrutura axeitada para as súas necesidades.<br><br>Podes obter a túa localización precisa (só para dispositivos móbiles) e escoller as capas que sexan relevantes para ti na esquina inferior esquerda. Tamén podes empregar esta ferramenta para engadir ou editar puntos de interese ó mapa e fornecer máis datos respondendo as cuestións.<br><br>Todas as modificacións que fagas serán gardadas de xeito automático na base de datos global do OpenStreetMap e outros poderán reutilizalos libremente.<br><br>Para máis información sobre o proxecto cyclofix, vai a <a href='https://cyclofix.osm.be/'>cyclofix.osm.be</a>.",
|
"gl": "O obxectivo deste mapa é amosar ós ciclistas unha solución doada de empregar para atopar a infraestrutura axeitada para as súas necesidades.<br><br>Podes obter a túa localización precisa (só para dispositivos móbiles) e escoller as capas que sexan relevantes para ti na esquina inferior esquerda. Tamén podes empregar esta ferramenta para engadir ou editar puntos de interese ó mapa e fornecer máis datos respondendo as cuestións.<br><br>Todas as modificacións que fagas serán gardadas de xeito automático na base de datos global do OpenStreetMap e outros poderán reutilizalos libremente.<br><br>Para máis información sobre o proxecto cyclofix, vai a <a href='https://cyclofix.osm.be/'>cyclofix.osm.be</a>.",
|
||||||
"de": "Das Ziel dieser Karte ist es, den Radfahrern eine einfach zu benutzende Lösung zu präsentieren, um die geeignete Infrastruktur für ihre Bedürfnisse zu finden.<br><br>Sie können Ihren genauen Standort verfolgen (nur mobil) und in der linken unteren Ecke die für Sie relevanten Ebenen auswählen. Sie können dieses Tool auch verwenden, um Pins (Points of Interest/Interessante Orte) zur Karte hinzuzufügen oder zu bearbeiten und mehr Daten durch Beantwortung der Fragen bereitstellen.<br><br>Alle Änderungen, die Sie vornehmen, werden automatisch in der globalen Datenbank von OpenStreetMap gespeichert und können von anderen frei wiederverwendet werden.<br><br>Weitere Informationen über das Projekt Cyclofix finden Sie unter <a href='https://cyclofix.osm.be/'>cyclofix.osm.be</a>."
|
"de": "Das Ziel dieser Karte ist es, den Radfahrern eine einfach zu benutzende Lösung zu präsentieren, um die geeignete Infrastruktur für ihre Bedürfnisse zu finden.<br><br>Sie können Ihren genauen Standort verfolgen (nur mobil) und in der linken unteren Ecke die für Sie relevanten Ebenen auswählen. Sie können dieses Tool auch verwenden, um Pins (Points of Interest/Interessante Orte) zur Karte hinzuzufügen oder zu bearbeiten und mehr Daten durch Beantwortung der Fragen bereitstellen.<br><br>Alle Änderungen, die Sie vornehmen, werden automatisch in der globalen Datenbank von OpenStreetMap gespeichert und können von anderen frei wiederverwendet werden.<br><br>Weitere Informationen über das Projekt Cyclofix finden Sie unter <a href='https://cyclofix.osm.be/'>cyclofix.osm.be</a>."
|
||||||
|
|
||||||
},
|
},
|
||||||
"language": ["en", "nl", "fr", "gl","de"],
|
"language": [
|
||||||
|
"en",
|
||||||
|
"nl",
|
||||||
|
"fr",
|
||||||
|
"gl",
|
||||||
|
"de"
|
||||||
|
],
|
||||||
"maintainer": "MapComplete",
|
"maintainer": "MapComplete",
|
||||||
"icon": "./assets/themes/cyclofix/logo.svg",
|
"icon": "./assets/themes/cyclofix/logo.svg",
|
||||||
"version": "0",
|
"version": "0",
|
||||||
|
@ -25,6 +30,21 @@
|
||||||
"startZoom": 16,
|
"startZoom": 16,
|
||||||
"widenFactor": 0.05,
|
"widenFactor": 0.05,
|
||||||
"socialImage": "./assets/themes/cyclofix/logo.svg",
|
"socialImage": "./assets/themes/cyclofix/logo.svg",
|
||||||
"layers": ["bike_cafes", "bike_shops", "bicycle_library","bike_repair_station", "drinking_water", "bike_themed_object","bike_cleaning","bike_parking"],
|
"layers": [
|
||||||
|
"bike_cafes",
|
||||||
|
"bike_shops",
|
||||||
|
{
|
||||||
|
"builtin": "bicycle_library",
|
||||||
|
"override": {
|
||||||
|
"minzoom": 13
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bike_repair_station",
|
||||||
|
"bicycle_tube_vending_machine",
|
||||||
|
"drinking_water",
|
||||||
|
"bike_themed_object",
|
||||||
|
"bike_cleaning",
|
||||||
|
"bike_parking"
|
||||||
|
],
|
||||||
"roamingRenderings": []
|
"roamingRenderings": []
|
||||||
}
|
}
|
|
@ -309,14 +309,24 @@
|
||||||
"gl": "Engadir {category} aquí",
|
"gl": "Engadir {category} aquí",
|
||||||
"de": "Hier eine neue {category} hinzufügen"
|
"de": "Hier eine neue {category} hinzufügen"
|
||||||
},
|
},
|
||||||
"header": {
|
"title": {
|
||||||
"en": "<h2>Add a point?</h2>You clicked somewhere where no data is known yet.<br/>",
|
"en": "Add a new point?",
|
||||||
"ca": "<h2>Vols afegir un punt?</h2>Has marcat un lloc on no coneixem les dades.<br/>",
|
"ca": "Vols afegir un punt?",
|
||||||
"es": "<h2>Quieres añadir un punto?</h2>Has marcado un lugar del que no conocemos los datos.<br/>",
|
"es": "Quieres añadir un punto?",
|
||||||
"nl": "<h2>Punt toevoegen?</h2>Je klikte ergens waar er nog geen data is. Kies hieronder welk punt je wilt toevoegen<br/>",
|
"nl": "Nieuw punt toevoegen?",
|
||||||
"fr": "<h2>Pas de données</h2>Vous avez cliqué sur un endroit où il n'y a pas encore de données. <br/>",
|
"fr": "Pas de données",
|
||||||
"gl": "<h2>Queres engadir un punto?</h2>Marcaches un lugar onde non coñecemos os datos.<br/>",
|
"gl": "Queres engadir un punto?",
|
||||||
"de": "<h2>Punkt hinzufügen?</h2>Sie haben irgendwo geklickt, wo noch keine Daten bekannt sind.<br/>"
|
"de": "Punkt hinzufügen?"
|
||||||
|
|
||||||
|
},
|
||||||
|
"intro": {
|
||||||
|
"en": "You clicked somewhere where no data is known yet.<br/>",
|
||||||
|
"ca": "Has marcat un lloc on no coneixem les dades.<br/>",
|
||||||
|
"es": "Has marcado un lugar del que no conocemos los datos.<br/>",
|
||||||
|
"nl": "Je klikte ergens waar er nog geen data is. Kies hieronder welk punt je wilt toevoegen<br/>",
|
||||||
|
"fr": "Vous avez cliqué sur un endroit où il n'y a pas encore de données. <br/>",
|
||||||
|
"gl": "Marcaches un lugar onde non coñecemos os datos.<br/>",
|
||||||
|
"de": "Sie haben irgendwo geklickt, wo noch keine Daten bekannt sind.<br/>"
|
||||||
},
|
},
|
||||||
"pleaseLogin": {
|
"pleaseLogin": {
|
||||||
"en": "<a class='activate-osm-authentication'>Please log in to add a new point</a>",
|
"en": "<a class='activate-osm-authentication'>Please log in to add a new point</a>",
|
||||||
|
@ -744,6 +754,7 @@
|
||||||
"fr": "Carte de fonds",
|
"fr": "Carte de fonds",
|
||||||
"de": "Hintergrundkarte"
|
"de": "Hintergrundkarte"
|
||||||
},
|
},
|
||||||
|
"layerSelection": {
|
||||||
"zoomInToSeeThisLayer": {
|
"zoomInToSeeThisLayer": {
|
||||||
"en": "Zoom in to see this layer",
|
"en": "Zoom in to see this layer",
|
||||||
"ca": "Amplia per veure aquesta capa",
|
"ca": "Amplia per veure aquesta capa",
|
||||||
|
@ -752,6 +763,12 @@
|
||||||
"fr": "Aggrandissez la carte pour voir cette couche",
|
"fr": "Aggrandissez la carte pour voir cette couche",
|
||||||
"de": "Vergrößern, um diese Ebene zu sehen"
|
"de": "Vergrößern, um diese Ebene zu sehen"
|
||||||
},
|
},
|
||||||
|
"title": {
|
||||||
|
"en": "Select layers",
|
||||||
|
"nl": "Selecteer lagen"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
"weekdays": {
|
"weekdays": {
|
||||||
"abbreviations": {
|
"abbreviations": {
|
||||||
"monday": {
|
"monday": {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
.fullscreenmessage-content {
|
.fullscreenmessage-content {
|
||||||
max-height: calc(100vh - var(--return-to-the-map-height));
|
max-height: calc(100vh);
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
|
@ -15,11 +15,15 @@
|
||||||
.fullscreenmessage-content .featureinfobox-content {
|
.fullscreenmessage-content .featureinfobox-content {
|
||||||
padding: 1em;
|
padding: 1em;
|
||||||
top: var(--variable-title-height);
|
top: var(--variable-title-height);
|
||||||
/* 2em extra: padding from the title */
|
max-height: calc(100vh - var(--variable-title-height)) !important;
|
||||||
max-height: calc(100vh - var(--variable-title-height) - var(--return-to-the-map-height) - 2em) !important;
|
min-height: calc(100vh - var(--variable-title-height)) !important;
|
||||||
display: block;
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between
|
||||||
}
|
}
|
||||||
|
|
||||||
.fullscreenmessage-content .featureinfobox-titlebar {
|
.fullscreenmessage-content .featureinfobox-titlebar {
|
||||||
|
@ -35,29 +39,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.fullscreenmessage-content .featureinfobox-tail {
|
.fullscreenmessage-content .featureinfobox-tail {
|
||||||
display: block;
|
/*THe ornament to give the URL bar some room...*/
|
||||||
height: 1em;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.to-the-map span {
|
|
||||||
font-size: xx-large;
|
|
||||||
}
|
|
||||||
|
|
||||||
.to-the-map {
|
|
||||||
background: var(--catch-detail-color);
|
|
||||||
height: var(--return-to-the-map-height);
|
|
||||||
position: fixed;
|
|
||||||
z-index: 10000;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
width: 100vw;
|
|
||||||
color: var(--catch-detail-color-contrast);
|
|
||||||
font-weight: bold;
|
|
||||||
pointer-events: all;
|
|
||||||
cursor: pointer;
|
|
||||||
padding-top: 1.2em;
|
|
||||||
text-align: center;
|
|
||||||
padding-bottom: 1.2em;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ Contains tweaks for small screens
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.only-on-mobile {
|
.only-on-mobile {
|
||||||
display: none;
|
display: none !important;
|
||||||
background-color: var(--background-color);
|
background-color: var(--background-color);
|
||||||
color: var(--foreground-color);
|
color: var(--foreground-color);
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ Contains tweaks for small screens
|
||||||
@media only screen and (max-width: 600px), only screen and (max-height: 600px) {
|
@media only screen and (max-width: 600px), only screen and (max-height: 600px) {
|
||||||
|
|
||||||
.only-on-mobile {
|
.only-on-mobile {
|
||||||
display: unset;
|
display: unset !important;
|
||||||
background-color: var(--background-color);
|
background-color: var(--background-color);
|
||||||
color: var(--foreground-color);
|
color: var(--foreground-color);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,12 +6,16 @@
|
||||||
|
|
||||||
.featureinfobox-title {
|
.featureinfobox-title {
|
||||||
font-size: xx-large;
|
font-size: xx-large;
|
||||||
|
word-break: break-word;
|
||||||
}
|
}
|
||||||
.featureinfobox-icons img{
|
|
||||||
|
.featureinfobox-icons img {
|
||||||
max-height: 1.5em;
|
max-height: 1.5em;
|
||||||
width: 1.5em;
|
width: 1.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.featureinfobox-icons {
|
.featureinfobox-icons {
|
||||||
|
margin-left: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.featureinfobox-icons span {
|
.featureinfobox-icons span {
|
||||||
|
@ -19,30 +23,64 @@
|
||||||
padding-right: 0.1em;
|
padding-right: 0.1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.featureinfobox-titlebar{
|
.featureinfobox-titlebar {
|
||||||
|
border-bottom: 2px solid var(--foreground-color);
|
||||||
|
box-shadow: 0 10px 10px -10px var(--shadow-color);
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
width: 100%;
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featureinfobox-titlebar-title {
|
||||||
font-size: large;
|
font-size: large;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
border-bottom: 2px solid var(--foreground-color);
|
flex-grow: 2;
|
||||||
|
word-break: break-all;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.featureinfobox-back-to-the-map {
|
||||||
|
padding: 0.5em;
|
||||||
|
border-radius: 999em;
|
||||||
|
margin-right: 0.4em;
|
||||||
|
width: 2em;
|
||||||
|
height: 2em;
|
||||||
|
background: var(--subtle-detail-color);
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featureinfobox-back-to-the-map svg {
|
||||||
|
width: 1.75em;
|
||||||
|
height: 1.75em;
|
||||||
|
margin-left: 0.15em;
|
||||||
|
margin-top: 0.15em
|
||||||
|
}
|
||||||
|
|
||||||
|
.featureinfobox-back-to-the-map svg path{
|
||||||
|
stroke: var(--subtle-detail-color-contrast) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.featureinfobox-content {
|
.featureinfobox-content {
|
||||||
display: block;
|
display: block;
|
||||||
max-height: 75vh;
|
max-height: 75vh;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
overflow-x: hidden;
|
|
||||||
padding-top: 1em;
|
padding-top: 1em;
|
||||||
|
width:100%;
|
||||||
|
overflow-x: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media only screen and (max-width: 600px), only screen and (max-height: 600px) {
|
@media only screen and (max-width: 600px), only screen and (max-height: 600px) {
|
||||||
.featureinfobox-content {
|
.featureinfobox-content {
|
||||||
display:block;
|
display: block;
|
||||||
max-height: unset !important;
|
max-height: unset !important;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media only screen and (max-height: 600px) and (min-width: 600px){
|
@media only screen and (max-height: 600px) and (min-width: 600px) {
|
||||||
/* landscape mode: the first tagrendering of the infobox gets a special treatment and is placed on the right*/
|
/* landscape mode: the first tagrendering of the infobox gets a special treatment and is placed on the right*/
|
||||||
.featureinfobox-content {
|
.featureinfobox-content {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -64,7 +102,7 @@
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.first-rendering{
|
.first-rendering {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
width: 94%;
|
width: 94%;
|
||||||
|
@ -129,7 +167,7 @@
|
||||||
border-radius: 0.5em;
|
border-radius: 0.5em;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin:0;
|
margin: 0;
|
||||||
margin-left: -2em;
|
margin-left: -2em;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding: 0.5em;
|
padding: 0.5em;
|
||||||
|
@ -161,7 +199,7 @@ input:checked + label .question-option-with-border {
|
||||||
|
|
||||||
.login-button-friendly {
|
.login-button-friendly {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
background-color:var(--catch-detail-color);
|
background-color: var(--catch-detail-color);
|
||||||
color: var(--catch-detail-color-contrast);
|
color: var(--catch-detail-color-contrast);
|
||||||
border: solid var(--catch-detail-color-contrast) 2px;
|
border: solid var(--catch-detail-color-contrast) 2px;
|
||||||
padding: 0.2em 0.6em;
|
padding: 0.2em 0.6em;
|
||||||
|
@ -204,7 +242,34 @@ input:checked + label .question-option-with-border {
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.edit-button svg path{
|
.edit-button svg path {
|
||||||
stroke: var(--foreground-color) !important;
|
stroke: var(--foreground-color) !important;
|
||||||
fill: var(--foreground-color) !important;
|
fill: var(--foreground-color) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.to-the-map span {
|
||||||
|
font-size: xx-large;
|
||||||
|
}
|
||||||
|
|
||||||
|
.to-the-map {
|
||||||
|
background: var(--catch-detail-color);
|
||||||
|
height: var(--return-to-the-map-height);
|
||||||
|
color: var(--catch-detail-color-contrast);
|
||||||
|
font-weight: bold;
|
||||||
|
pointer-events: all;
|
||||||
|
cursor: pointer;
|
||||||
|
padding-top: 0.4em;
|
||||||
|
text-align: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: block;
|
||||||
|
max-height: var(--return-to-the-map-height);
|
||||||
|
position: fixed;
|
||||||
|
width: 100vw;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.to-the-map-inner{
|
||||||
|
font-size: xx-large;
|
||||||
|
}
|
||||||
|
|
55
index.css
|
@ -10,9 +10,8 @@
|
||||||
--foreground-color: black;
|
--foreground-color: black;
|
||||||
--popup-border: white;
|
--popup-border: white;
|
||||||
--shadow-color: #00000066;
|
--shadow-color: #00000066;
|
||||||
|
--variable-title-height: 0px; /* Set by javascript */
|
||||||
--return-to-the-map-height: 5em;
|
--return-to-the-map-height: 2em;
|
||||||
--variable-title-height: 0px; /*Set by javascript dynamically*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
html, body {
|
html, body {
|
||||||
|
@ -40,7 +39,7 @@ a {
|
||||||
stroke: var(--foreground-color) !important;
|
stroke: var(--foreground-color) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.direction-svg svg path{
|
.direction-svg svg path {
|
||||||
fill: var(--catch-detail-color) !important;
|
fill: var(--catch-detail-color) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,22 +99,24 @@ a {
|
||||||
box-shadow: 0 0 10px var(--shadow-color);
|
box-shadow: 0 0 10px var(--shadow-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.single-layer-selection-toggle{
|
.single-layer-selection-toggle {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 2em;
|
width: 2em;
|
||||||
height: 2em;
|
height: 2em;
|
||||||
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
.single-layer-selection-toggle img{
|
|
||||||
|
.single-layer-selection-toggle img {
|
||||||
max-height: 2em !important;
|
max-height: 2em !important;
|
||||||
max-width: 2em !important;
|
max-width: 2em !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.single-layer-selection-toggle svg{
|
.single-layer-selection-toggle svg {
|
||||||
max-height:2em !important;
|
max-height: 2em !important;
|
||||||
max-width: 2em !important;
|
max-width: 2em !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.simple-add-ui-icon{
|
.simple-add-ui-icon {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: block;
|
display: block;
|
||||||
width: 3.5em;
|
width: 3.5em;
|
||||||
|
@ -124,13 +125,13 @@ a {
|
||||||
padding-left: 0.3em;
|
padding-left: 0.3em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.simple-add-ui-icon img{
|
.simple-add-ui-icon img {
|
||||||
max-height:3.5em !important;
|
max-height: 3.5em !important;
|
||||||
max-width: 3.5em !important;
|
max-width: 3.5em !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.simple-add-ui-icon svg{
|
.simple-add-ui-icon svg {
|
||||||
max-height:3.5em !important;
|
max-height: 3.5em !important;
|
||||||
max-width: 3.5em !important;
|
max-width: 3.5em !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -551,7 +552,7 @@ a {
|
||||||
height: 2.5em;
|
height: 2.5em;
|
||||||
width: 2.5em;
|
width: 2.5em;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding:0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.share-button svg {
|
.share-button svg {
|
||||||
|
@ -563,12 +564,34 @@ a {
|
||||||
stroke: var(--subtle-detail-color-contrast) !important;
|
stroke: var(--subtle-detail-color-contrast) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.share-button svg path{
|
.share-button svg path {
|
||||||
fill: var(--subtle-detail-color-contrast) !important;
|
fill: var(--subtle-detail-color-contrast) !important;
|
||||||
stroke: var(--subtle-detail-color-contrast) !important;
|
stroke: var(--subtle-detail-color-contrast) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.share-button svg circle{
|
.share-button svg circle {
|
||||||
fill: var(--subtle-detail-color-contrast) !important;
|
fill: var(--subtle-detail-color-contrast) !important;
|
||||||
stroke: var(--subtle-detail-color-contrast) !important;
|
stroke: var(--subtle-detail-color-contrast) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.ornament {
|
||||||
|
padding-top: 1em;
|
||||||
|
padding-bottom: 1em;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ornament svg {
|
||||||
|
height: 2.5em;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ornament svg path {
|
||||||
|
stroke: var(--subtle-detail-color-light-contrast);
|
||||||
|
}
|
||||||
|
|
||||||
|
.ornament svg polygon {
|
||||||
|
fill: var(--subtle-detail-color-light-contrast);
|
||||||
|
}
|
6
index.ts
|
@ -6,7 +6,6 @@ import {UIEventSource} from "./Logic/UIEventSource";
|
||||||
import * as $ from "jquery";
|
import * as $ from "jquery";
|
||||||
import LayoutConfig from "./Customizations/JSON/LayoutConfig";
|
import LayoutConfig from "./Customizations/JSON/LayoutConfig";
|
||||||
import {Utils} from "./Utils";
|
import {Utils} from "./Utils";
|
||||||
import {Overpass} from "./Logic/Osm/Overpass";
|
|
||||||
|
|
||||||
let defaultLayout = "bookcases"
|
let defaultLayout = "bookcases"
|
||||||
// --------------------- Special actions based on the parameters -----------------
|
// --------------------- Special actions based on the parameters -----------------
|
||||||
|
@ -77,8 +76,8 @@ if (layoutFromBase64.startsWith("wiki:")) {
|
||||||
data = data.substr(start,
|
data = data.substr(start,
|
||||||
data.indexOf("<div class=\"printfooter\">") - start)
|
data.indexOf("<div class=\"printfooter\">") - start)
|
||||||
data = data.substr(0, data.lastIndexOf("</p>"))
|
data = data.substr(0, data.lastIndexOf("</p>"))
|
||||||
data = data.substr(startTrigger.length + 3);
|
data = data.substr( data.indexOf("<p>") + 3)
|
||||||
|
console.log(data)
|
||||||
try {
|
try {
|
||||||
const parsed = JSON.parse(data);
|
const parsed = JSON.parse(data);
|
||||||
parsed["id"] = layoutFromBase64
|
parsed["id"] = layoutFromBase64
|
||||||
|
@ -88,6 +87,7 @@ if (layoutFromBase64.startsWith("wiki:")) {
|
||||||
new FixedUiElement(`<a href="${cleanUrl}">${themeName}</a> is invalid:<br/>${e}`)
|
new FixedUiElement(`<a href="${cleanUrl}">${themeName}</a> is invalid:<br/>${e}`)
|
||||||
.SetClass("clickable")
|
.SetClass("clickable")
|
||||||
.AttachTo("centermessage");
|
.AttachTo("centermessage");
|
||||||
|
console.error("Could not parse the text", data)
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
import Img from "../UI/Base/Img"
|
|
||||||
import {UIElement} from "../UI/UIElement";
|
|
||||||
Img.runningFromConsole = true;
|
|
||||||
// We HAVE to mark this while importing
|
// We HAVE to mark this while importing
|
||||||
UIElement.runningFromConsole = true;
|
import {Utils} from "../Utils";
|
||||||
|
Utils.runningFromConsole = true;
|
||||||
|
|
||||||
|
import LayoutConfig from "../Customizations/JSON/LayoutConfig";
|
||||||
import {AllKnownLayouts} from "../Customizations/AllKnownLayouts";
|
import {AllKnownLayouts} from "../Customizations/AllKnownLayouts";
|
||||||
import {existsSync, mkdirSync, readFileSync, writeFile, writeFileSync} from "fs";
|
import {existsSync, mkdirSync, readFileSync, writeFile, writeFileSync} from "fs";
|
||||||
import Locale from "../UI/i18n/Locale";
|
import Locale from "../UI/i18n/Locale";
|
||||||
import svg2img from 'promise-svg2img';
|
import svg2img from 'promise-svg2img';
|
||||||
import Translations from "../UI/i18n/Translations";
|
import Translations from "../UI/i18n/Translations";
|
||||||
import {Translation} from "../UI/i18n/Translation";
|
import {Translation} from "../UI/i18n/Translation";
|
||||||
import LayoutConfig from "../Customizations/JSON/LayoutConfig";
|
|
||||||
|
|
||||||
|
|
||||||
function enc(str: string): string {
|
function enc(str: string): string {
|
||||||
return encodeURIComponent(str.toLowerCase());
|
return encodeURIComponent(str.toLowerCase());
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
import {UIElement} from "../UI/UIElement";
|
import {Utils} from "../Utils";
|
||||||
UIElement.runningFromConsole = true;
|
Utils.runningFromConsole = true;
|
||||||
import Img from "../UI/Base/Img";
|
|
||||||
Img.runningFromConsole = true;
|
|
||||||
import {equal} from "assert";
|
import {equal} from "assert";
|
||||||
import T from "./TestHelper";
|
import T from "./TestHelper";
|
||||||
import {FromJSON} from "../Customizations/JSON/FromJSON";
|
import {FromJSON} from "../Customizations/JSON/FromJSON";
|
||||||
|
@ -12,7 +10,6 @@ import {UIEventSource} from "../Logic/UIEventSource";
|
||||||
import TagRenderingConfig from "../Customizations/JSON/TagRenderingConfig";
|
import TagRenderingConfig from "../Customizations/JSON/TagRenderingConfig";
|
||||||
import EditableTagRendering from "../UI/Popup/EditableTagRendering";
|
import EditableTagRendering from "../UI/Popup/EditableTagRendering";
|
||||||
import {SubstitutedTranslation} from "../UI/SpecialVisualizations";
|
import {SubstitutedTranslation} from "../UI/SpecialVisualizations";
|
||||||
import {Utils} from "../Utils";
|
|
||||||
import {Translation} from "../UI/i18n/Translation";
|
import {Translation} from "../UI/i18n/Translation";
|
||||||
import {OH, OpeningHour} from "../UI/OpeningHours/OpeningHours";
|
import {OH, OpeningHour} from "../UI/OpeningHours/OpeningHours";
|
||||||
import PublicHolidayInput from "../UI/OpeningHours/PublicHolidayInput";
|
import PublicHolidayInput from "../UI/OpeningHours/PublicHolidayInput";
|
||||||
|
@ -44,6 +41,19 @@ new T([
|
||||||
equal(notReg.matches([]), true)
|
equal(notReg.matches([]), true)
|
||||||
|
|
||||||
|
|
||||||
|
const noMatch = FromJSON.Tag("key!=value") as Tag;
|
||||||
|
equal(noMatch.matches([{k:"key",v:"value"}]), false)
|
||||||
|
equal(noMatch.matches([{k:"key",v:"otherValue"}]), true)
|
||||||
|
equal(noMatch.matches([{k:"key",v:""}]), true)
|
||||||
|
equal(noMatch.matches([{k:"otherKey",v:""}]), true)
|
||||||
|
|
||||||
|
|
||||||
|
const multiMatch = FromJSON.Tag("vending~.*bicycle_tube.*") as Tag;
|
||||||
|
equal(multiMatch.matches([{k:"vending",v:"bicycle_tube"}]), true)
|
||||||
|
equal(multiMatch.matches([{k:"vending",v:"something;bicycle_tube"}]), true)
|
||||||
|
equal(multiMatch.matches([{k:"vending",v:"bicycle_tube;something"}]), true)
|
||||||
|
equal(multiMatch.matches([{k:"vending",v:"xyz;bicycle_tube;something"}]), true)
|
||||||
|
|
||||||
})],
|
})],
|
||||||
["Is equivalent test", (() => {
|
["Is equivalent test", (() => {
|
||||||
|
|
||||||
|
@ -94,7 +104,7 @@ new T([
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
condition: "x="
|
condition: "x="
|
||||||
}, "");
|
}, undefined,"");
|
||||||
|
|
||||||
equal(undefined, tr.GetRenderValue({"foo": "bar"}));
|
equal(undefined, tr.GetRenderValue({"foo": "bar"}));
|
||||||
equal("Has no name", tr.GetRenderValue({"noname": "yes"})?.txt);
|
equal("Has no name", tr.GetRenderValue({"noname": "yes"})?.txt);
|
||||||
|
@ -147,7 +157,7 @@ new T([
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
const constr = new TagRenderingConfig(def, "test");
|
const constr = new TagRenderingConfig(def, undefined,"test");
|
||||||
const uiEl = new EditableTagRendering(new UIEventSource<any>(
|
const uiEl = new EditableTagRendering(new UIEventSource<any>(
|
||||||
{leisure: "park", "access": "no"}), constr
|
{leisure: "park", "access": "no"}), constr
|
||||||
);
|
);
|
||||||
|
|