Merge master

This commit is contained in:
pietervdvn 2021-01-09 02:23:52 +01:00
commit cc65936369
80 changed files with 3232 additions and 971 deletions

View file

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

View file

@ -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 personal from "../assets/themes/personalLayout/personalLayout.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 LayoutConfig from "./JSON/LayoutConfig";
import SharedLayers from "./SharedLayers";
@ -57,6 +58,7 @@ export class AllKnownLayouts {
new LayoutConfig(drinking_water),
new LayoutConfig(nature),
new LayoutConfig(cyclestreets),
new LayoutConfig(bicycle_lib),
new LayoutConfig(maps),
new LayoutConfig(fritures),
new LayoutConfig(benches),

View file

@ -11,7 +11,17 @@ export class FromJSON {
}
public static Tag(json: AndOrTagConfigJson | string, context: string = ""): TagsFilter {
if (json === undefined) {
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) {
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`
}
if (typeof (json) == "string") {

View file

@ -19,22 +19,18 @@ import {UIElement} from "../../UI/UIElement";
export default class LayerConfig {
static WAYHANDLING_DEFAULT = 0;
static WAYHANDLING_CENTER_ONLY = 1;
static WAYHANDLING_CENTER_AND_WAY = 2;
id: string;
name: Translation
description: Translation;
overpassTags: TagsFilter;
doNotDownload: boolean;
passAllFeatures: boolean;
minzoom: number;
title?: TagRenderingConfig;
titleIcons: TagRenderingConfig[];
icon: TagRenderingConfig;
iconOverlays: { if: TagsFilter, then: TagRenderingConfig, badge: boolean }[]
iconSize: TagRenderingConfig;
@ -42,14 +38,7 @@ export default class LayerConfig {
color: TagRenderingConfig;
width: TagRenderingConfig;
dashArray: TagRenderingConfig;
wayHandling: number;
static WAYHANDLING_DEFAULT = 0;
static WAYHANDLING_CENTER_ONLY = 1;
static WAYHANDLING_CENTER_AND_WAY = 2;
hideUnderlayingFeaturesMinPercentage?: number;
presets: {
@ -60,10 +49,10 @@ export default class LayerConfig {
tagRenderings: TagRenderingConfig [];
constructor(json: LayerConfigJson, roamingRenderings: TagRenderingConfig[],
constructor(json: LayerConfigJson,
context?: string) {
context = context + "." + json.id;
const self = this;
this.id = json.id;
this.name = Translations.T(json.name);
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
* A string is interpreted as a name to call
@ -90,26 +101,27 @@ export default class LayerConfig {
if (tagRenderings === undefined) {
return [];
}
return tagRenderings.map(
(renderingJson, i) => {
if (typeof renderingJson === "string") {
if(renderingJson === "questions"){
return new TagRenderingConfig("questions")
if (renderingJson === "questions") {
return new TagRenderingConfig("questions", undefined)
}
const shared = SharedTagRenderings.SharedTagRendering[renderingJson];
if (shared !== undefined) {
return shared;
}
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 = [];
@ -125,29 +137,10 @@ export default class LayerConfig {
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.icon = tr("icon", Img.AsData(Svg.pin));
this.iconOverlays = (json.iconOverlays ?? []).map(overlay => {
let tr = new TagRenderingConfig(overlay.then);
this.iconOverlays = (json.iconOverlays ?? []).map((overlay, i) => {
let tr = new TagRenderingConfig(overlay.then, self.overpassTags, `iconoverlays.${i}`);
if (typeof overlay.then === "string" && SharedTagRenderings.SharedIcons[overlay.then] !== undefined) {
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):
{
color: string;
icon: {
iconUrl: string,
popupAnchor: [number, number];
iconAnchor: [number, number];
iconSize: [number, number];
html: UIElement;
className?: string;
};
weight: number; dashArray: number[]
icon:
{
html: UIElement,
iconSize: [number, number],
iconAnchor: [number, number],
popupAnchor: [number, number],
iconUrl: string,
className: string
},
color: string,
weight: number,
dashArray: number[]
} {
function num(str, deflt = 40) {
@ -259,7 +287,7 @@ export default class LayerConfig {
if (match !== null && Svg.All[match[1] + ".svg"] !== undefined) {
html = new Combine([
(Svg.All[match[1] + ".svg"] as string)
.replace(/#000000/g, match[2])
.replace(/#000000/g, match[2])
]).SetStyle(style);
}
return html;

View file

@ -4,6 +4,7 @@ import LayerConfig from "./LayerConfig";
import {LayoutConfigJson} from "./LayoutConfigJson";
import SharedLayers from "../SharedLayers";
import SharedTagRenderings from "../SharedTagRenderings";
import {Utils} from "../../Utils";
export default class LayoutConfig {
public readonly id: string;
@ -24,11 +25,11 @@ export default class LayoutConfig {
public readonly roamingRenderings: TagRenderingConfig[];
public readonly defaultBackgroundId?: string;
public readonly layers: LayerConfig[];
public readonly clustering?: {
public readonly clustering?: {
maxZoom: number,
minNeededElements: number
};
public readonly hideFromOverview: boolean;
public readonly enableUserBadge: boolean;
public readonly enableShareScreen: boolean;
@ -74,34 +75,62 @@ export default class LayoutConfig {
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.layers = json.layers.map((layer, i) => {
if (typeof layer === "string"){
if (typeof layer === "string") {
if (SharedLayers.sharedLayers[layer] !== undefined) {
return SharedLayers.sharedLayers[layer];
} else {
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 = {
maxZoom: 16,
minNeededElements: 250
};
if(json.clustering){
if (json.clustering) {
this.clustering = {
maxZoom : json.clustering.maxZoom ?? 18,
maxZoom: json.clustering.maxZoom ?? 18,
minNeededElements: json.clustering.minNeededElements ?? 1
}
for (const layer of this.layers) {
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);
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);
}
}
}

View file

@ -120,8 +120,11 @@ export interface LayoutConfigJson {
*
* *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.

View file

@ -1,4 +1,4 @@
import {TagsFilter} from "../../Logic/Tags";
import {And, TagsFilter} from "../../Logic/Tags";
import {TagRenderingConfigJson} from "./TagRenderingConfigJson";
import Translations from "../../UI/i18n/Translations";
import {FromJSON} from "./FromJSON";
@ -11,25 +11,26 @@ import {Translation} from "../../UI/i18n/Translation";
*/
export default class TagRenderingConfig {
render?: Translation;
question?: Translation;
condition?: TagsFilter;
readonly render?: Translation;
readonly question?: Translation;
readonly condition?: TagsFilter;
freeform?: {
key: string,
type: string,
addExtraTags: TagsFilter[];
readonly freeform?: {
readonly key: string,
readonly type: string,
readonly addExtraTags: TagsFilter[];
};
multiAnswer: boolean;
readonly multiAnswer: boolean;
mappings?: {
if: TagsFilter,
then: Translation
hideInAnswer: boolean | TagsFilter
readonly mappings?: {
readonly if: TagsFilter,
readonly then: Translation
readonly hideInAnswer: boolean | TagsFilter
}[]
readonly roaming: boolean;
constructor(json: string | TagRenderingConfigJson, context?: string) {
constructor(json: string | TagRenderingConfigJson, conditionIfRoaming: TagsFilter, context?: string) {
if (json === "questions") {
// Very special value
@ -49,7 +50,13 @@ export default class TagRenderingConfig {
this.render = Translations.T(json.render);
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) {
this.freeform = {
key: json.freeform.key,
@ -69,7 +76,7 @@ export default class TagRenderingConfig {
if (mapping.then === undefined) {
throw "Invalid mapping: if without body"
}
let hideInAnswer : boolean | TagsFilter = false;
let hideInAnswer: boolean | TagsFilter = false;
if (typeof mapping.hideInAnswer === "boolean") {
hideInAnswer = mapping.hideInAnswer;
} 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;
}

View file

@ -53,4 +53,10 @@ export interface TagRenderingConfigJson {
then: string | any
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
}

View file

@ -1,4 +1,3 @@
import * as drinkingWater from "../assets/layers/drinking_water/drinking_water.json";
import * as ghostbikes from "../assets/layers/ghost_bike/ghost_bike.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_cleaning from "../assets/layers/bike_cleaning/bike_cleaning.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 information_boards from "../assets/layers/information_board/information_board.json"
import * as direction from "../assets/layers/direction/direction.json"
@ -21,45 +20,58 @@ import * as toilets from "../assets/layers/toilets/toilets.json"
import * as bookcases from "../assets/layers/public_bookcases/public_bookcases.json"
import * as tree_nodes from "../assets/layers/trees/tree_nodes.json"
import LayerConfig from "./JSON/LayerConfig";
import {LayerConfigJson} from "./JSON/LayerConfigJson";
export default class SharedLayers {
private static sharedLayersListRaw : LayerConfigJson[] = [
drinkingWater,
ghostbikes,
viewpoint,
bike_parking,
bike_repair_station,
bike_monitoring_station,
birdhides,
nature_reserve,
bike_cafes,
bicycle_library,
cycling_themed_objects,
bike_shops,
bike_cleaning,
bicycle_tube_vending_machine,
maps,
direction,
information_boards,
toilets,
bookcases,
surveillance_camera,
tree_nodes
];
// Must be below the list...
public static sharedLayers: Map<string, LayerConfig> = SharedLayers.getSharedLayers();
public static sharedLayersJson: Map<string, any> = SharedLayers.getSharedLayersJson();
private static getSharedLayers(){
const sharedLayersList = [
new LayerConfig(drinkingWater,[], "shared_layers"),
new LayerConfig(ghostbikes,[], "shared_layers"),
new LayerConfig(viewpoint,[], "shared_layers"),
new LayerConfig(bike_parking,[], "shared_layers"),
new LayerConfig(bike_repair_station,[], "shared_layers"),
new LayerConfig(bike_monitoring_station,[], "shared_layers"),
new LayerConfig(birdhides,[], "shared_layers"),
new LayerConfig(nature_reserve,[], "shared_layers"),
new LayerConfig(bike_cafes,[], "shared_layers"),
new LayerConfig(bicycle_library, [], "bike_library"),
new LayerConfig(cycling_themed_objects,[], "shared_layers"),
new LayerConfig(bike_shops,[], "shared_layers"),
new LayerConfig(bike_cleaning,[], "shared_layers"),
new LayerConfig(maps,[], "shared_layers"),
new LayerConfig(direction,[], "shared_layers"),
new LayerConfig(information_boards,[], "shared_layers"),
new LayerConfig(toilets,[], "shared_layers"),
new LayerConfig(bookcases,[], "shared_layers"),
new LayerConfig(surveillance_camera,[], "shared_layers"),
new LayerConfig(tree_nodes,[], "shared_layers")
];
private static getSharedLayers(): 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[layer.id] = layer;
}
return sharedLayers;
}
}

View file

@ -40,6 +40,8 @@ import FeatureSwitched from "./UI/Base/FeatureSwitched";
import FeatureDuplicatorPerLayer from "./Logic/FeatureSource/FeatureDuplicatorPerLayer";
import LayerConfig from "./Customizations/JSON/LayerConfig";
import ShowDataLayer from "./UI/ShowDataLayer";
import Hash from "./Logic/Web/Hash";
import HistoryHandling from "./Logic/Actors/HistoryHandling";
export class InitUiElements {
@ -157,12 +159,18 @@ export class InitUiElements {
layer
);
State.state.fullScreenMessage.setData(featureBox);
State.state.fullScreenMessage.setData({
content: featureBox,
hashText: feature.properties.id.replace("/", "_"),
titleText: featureBox.title
});
break;
}
}
);
new HistoryHandling(Hash.hash, State.state.fullScreenMessage);
InitUiElements.OnlyIf(State.state.featureSwitchUserbadge, () => {
new UserBadge().AttachTo('userbadge');
});
@ -172,9 +180,7 @@ export class InitUiElements {
});
new FullScreenMessageBox(() => {
State.state.selectedElement.setData(undefined)
}).AttachTo("messagesboxmobile");
new FullScreenMessageBox().AttachTo("messagesboxmobile");
InitUiElements.OnlyIf(State.state.featureSwitchWelcomeMessage, () => {
@ -279,20 +285,23 @@ export class InitUiElements {
})
State.state.selectedElement.addCallback(selected => {
if(selected !== undefined){
if (selected !== undefined) {
checkbox.isEnabled.setData(false);
}
})
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()
.SetClass("open-welcome-button")
.SetClass("shadow")
.onClick(() => {
State.state.fullScreenMessage.setData(fullOptions2)
State.state.fullScreenMessage.setData({content: fullOptions2, hashText: "welcome"})
}).AttachTo("help-button-mobile");
@ -326,7 +335,7 @@ export class InitUiElements {
const fullScreen = new LayerControlPanel();
checkbox.isEnabled.addCallback(isEnabled => {
if (isEnabled) {
State.state.fullScreenMessage.setData(fullScreen);
State.state.fullScreenMessage.setData({content: fullScreen, hashText: "layer-select"});
}
})
State.state.fullScreenMessage.addCallback(latest => {

View 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);
})
}
}

View file

@ -17,7 +17,7 @@ export default class StrayClickHandler {
selectedElement: UIEventSource<string>,
filteredLayers: UIEventSource<{ readonly isDisplayed: UIEventSource<boolean> }[]>,
leafletMap: UIEventSource<L.Map>,
fullscreenMessage: UIEventSource<UIElement>,
fullscreenMessage: UIEventSource<{content: UIElement, hashText: string}>,
uiToShow: (() => UIElement)) {
this._uiToShow = uiToShow;
const self = this;
@ -51,7 +51,7 @@ export default class StrayClickHandler {
self._lastMarker.bindPopup(popup);
self._lastMarker.on("click", () => {
fullscreenMessage.setData(self._uiToShow());
fullscreenMessage.setData({content: self._uiToShow(), hashText: "new"});
uiElement.Update();
});
});

View 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;
}
})
}
}

View file

@ -38,7 +38,6 @@ export default class UpdateFromOverpass implements FeatureSource{
location: UIEventSource<Loc>,
layoutToUse: UIEventSource<LayoutConfig>,
leafletMap: UIEventSource<L.Map>) {
console.log("Crating overpass updater")
this._location = location;
this._layoutToUse = layoutToUse;
this._leafletMap = leafletMap;

View file

@ -32,23 +32,55 @@ export default class FilteringFeatureSource implements FeatureSource {
if (layer === undefined) {
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);
}
for (const layer of layers) {
layerDict[layer.layerDef.id] = layer;
layer.isDisplayed.addCallback(() => {
update()})
}
upstream.features.addCallback(() => {
update()});
location.map(l => l.zoom).addCallback(() => {
update();});
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)
}
}

View file

@ -101,6 +101,14 @@ export default class MetaTagging {
// AUtomatically triggered on the next change
const updateTags = () => {
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";
const comment = oh.getComment();
if (comment) {
@ -113,10 +121,16 @@ export default class MetaTagging {
const nextChange = oh.getNextChange();
if (nextChange !== undefined) {
const timeout = nextChange.getTime() - (new Date()).getTime();
tags["_isOpen:nextTrigger"] = nextChange.getTime();
tags["_isOpen:oldvalue"] = tags.opening_hours
window.setTimeout(
updateTags,
(nextChange.getTime() - (new Date()).getTime())
)
() => {
console.log("Updating the _isOpen tag for ", tags.id);
updateTags();
},
timeout
)
}
}
updateTags();

View file

@ -5,7 +5,8 @@ export class Geocoding {
private static readonly host = "https://nominatim.openstreetmap.org/search?";
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)) {
const b = State.state.leafletMap.data.getBounds();
console.log(b);

View file

@ -2,8 +2,11 @@ import {Utils} from "../Utils";
export abstract class TagsFilter {
abstract matches(tags: { k: string, v: string }[]): boolean
abstract asOverpass(): string[]
abstract substituteValues(tags: any) : TagsFilter;
abstract substituteValues(tags: any): TagsFilter;
abstract isUsableAsAnswer(): boolean;
abstract isEquivalent(other: TagsFilter): boolean;
@ -28,15 +31,8 @@ export class RegexTag extends TagsFilter {
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 {
if(typeof possibleRegex === "string"){
if (typeof possibleRegex === "string") {
return fromTag === possibleRegex;
}
return fromTag.match(possibleRegex) !== null;
@ -48,14 +44,21 @@ export class RegexTag extends TagsFilter {
}
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 {
return false;
}
matches(tags: { k: string; v: string }[]): boolean {
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;
}
}
@ -78,7 +81,7 @@ export class RegexTag extends TagsFilter {
if (other instanceof RegexTag) {
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 false;
@ -94,27 +97,27 @@ export class Tag extends TagsFilter {
super()
this.key = key
this.value = value
if(key === undefined || key === ""){
if (key === undefined || key === "") {
throw "Invalid key: undefined or empty";
}
if(value === undefined){
if (value === undefined) {
throw "Invalid value: value is undefined";
}
if(value === "*"){
console.warn(`Got suspicious tag ${key}=* ; did you mean ${key}~* ?`)
if (value === "*") {
console.warn(`Got suspicious tag ${key}=* ; did you mean ${key}~* ?`)
}
}
matches(tags: { k: string; v: string }[]): boolean {
for (const tag of tags) {
if (this.key == tag.k) {
return this.value === tag.v;
}
}
// The tag was not found
if(this.value === ""){
if (this.value === "") {
// and it shouldn't be found!
return true;
}
@ -146,16 +149,16 @@ export class Tag extends TagsFilter {
}
return this.key + "=" + v;
}
isUsableAsAnswer(): boolean {
return true;
}
isEquivalent(other: TagsFilter): boolean {
if(other instanceof Tag){
if (other instanceof Tag) {
return this.key === other.key && this.value === other.value;
}
if(other instanceof RegexTag){
if (other instanceof RegexTag) {
other.isEquivalent(this);
}
return false;
@ -185,7 +188,7 @@ export class Or extends TagsFilter {
const choices = [];
for (const tagsFilter of this.or) {
const subChoices = tagsFilter.asOverpass();
for(const subChoice of subChoices){
for (const subChoice of subChoices) {
choices.push(subChoice)
}
}
@ -203,21 +206,21 @@ export class Or extends TagsFilter {
asHumanString(linkToWiki: boolean, shorten: boolean) {
return this.or.map(t => t.asHumanString(linkToWiki, shorten)).join("|");
}
isUsableAsAnswer(): boolean {
return false;
}
isEquivalent(other: TagsFilter): boolean {
if(other instanceof Or){
if (other instanceof Or) {
for (const selfTag of this.or) {
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];
matchFound = selfTag.isEquivalent(otherTag);
}
if(!matchFound){
if (!matchFound) {
return false;
}
}
@ -236,6 +239,14 @@ export class And extends TagsFilter {
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 {
for (const tagsFilter of this.and) {
if (!tagsFilter.matches(tags)) {
@ -246,14 +257,6 @@ export class And extends TagsFilter {
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[] {
let allChoices: string[] = null;
for (const andElement of this.and) {
@ -285,16 +288,16 @@ export class And extends TagsFilter {
asHumanString(linkToWiki: boolean, shorten: boolean) {
return this.and.map(t => t.asHumanString(linkToWiki, shorten)).join("&");
}
isUsableAsAnswer(): boolean {
for (const t of this.and) {
if(!t.isUsableAsAnswer()){
if (!t.isUsableAsAnswer()) {
return false;
}
}
return true;
}
isEquivalent(other: TagsFilter): boolean {
if (!(other instanceof And)) {
return false;
@ -343,7 +346,6 @@ export class And extends TagsFilter {
}
export class TagUtils {
static proprtiesToKV(properties: any): { k: string, v: string }[] {
const result = [];
@ -374,13 +376,13 @@ export class TagUtils {
/**
* 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) {
const availableValues : string[] = availableTags[neededKey]
if(availableValues === undefined){
const availableValues: string[] = availableTags[neededKey]
if (availableValues === undefined) {
return false;
}
const neededValues : string[] = neededTags[neededKey];
const neededValues: string[] = neededTags[neededKey];
for (const neededValue of neededValues) {
if (availableValues.indexOf(neededValue) < 0) {
return false;
@ -392,11 +394,11 @@ export class TagUtils {
/***
* Creates a hash {key --> [values]}, with all the values present in the tagsfilter
*
*
* @param tagsFilters
* @constructor
*/
static SplitKeys(tagsFilters: TagsFilter[]){
static SplitKeys(tagsFilters: TagsFilter[]) {
const keyValues = {} // Map string -> string[]
tagsFilters = [...tagsFilters] // copy all
while (tagsFilters.length > 0) {
@ -425,6 +427,7 @@ export class TagUtils {
}
return keyValues;
}
/**
* Given multiple tagsfilters which can be used as answer, will take the tags with the same keys together as set.
* E.g:
@ -449,4 +452,21 @@ export class TagUtils {
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;
}
}

View file

@ -1,18 +1,52 @@
import {UIEventSource} from "../UIEventSource";
import {Utils} from "../../Utils";
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));
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, "_");
return window.location.hash = "#" + h;
window.location.hash = "#" + h;
});
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;
}
}

View file

@ -22,8 +22,12 @@ export class MangroveIdentity {
})
})
})
if ((mangroveIdentity.data ?? "") === "") {
this.CreateIdentity();
try {
if ((mangroveIdentity.data ?? "") === "") {
this.CreateIdentity();
}
}catch(e){
console.error("Could not create identity: ", e)
}
}

View file

@ -43,26 +43,23 @@ export class QueryParameters {
private static Serialize() {
const parts = []
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;
}
if (QueryParameters.knownSources[key].data === "undefined") {
continue;
}
if (QueryParameters.knownSources[key].data == QueryParameters.defaults[key]) {
if (QueryParameters.knownSources[key].data === QueryParameters.defaults[key]) {
continue;
}
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());
}

View file

@ -1,8 +1,8 @@
import { Utils } from "../Utils";
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
public static userJourney = {
@ -15,7 +15,16 @@ export default class Constants {
themeGeneratorReadOnlyUnlock: 200,
themeGeneratorFullUnlock: 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));
}
}

View file

@ -4,7 +4,6 @@ import {ElementStorage} from "./Logic/ElementStorage";
import {Changes} from "./Logic/Osm/Changes";
import {OsmConnection} from "./Logic/Osm/OsmConnection";
import Locale from "./UI/i18n/Locale";
import Translations from "./UI/i18n/Translations";
import {UIEventSource} from "./Logic/UIEventSource";
import {LocalStorageSource} from "./Logic/Web/LocalStorageSource";
import {QueryParameters} from "./Logic/Web/QueryParameters";
@ -18,6 +17,7 @@ import Constants from "./Models/Constants";
import UpdateFromOverpass from "./Logic/Actors/UpdateFromOverpass";
import LayerConfig from "./Customizations/JSON/LayerConfig";
import TitleHandler from "./Logic/Actors/TitleHandler";
/**
* 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
*/
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
@ -112,9 +112,9 @@ export default class State {
public layoutDefinition: string;
public installedThemes: UIEventSource<{ layout: LayoutConfig; definition: string }[]>;
public layerControlIsOpened: UIEventSource<boolean> =
public layerControlIsOpened: UIEventSource<boolean> =
QueryParameters.GetQueryParameter("layer-control-toggle", "false", "Whether or not the layer control is shown")
.map<boolean>((str) => str !== "false", [], b => "" + b)
.map<boolean>((str) => str !== "false", [], b => "" + b)
public welcomeMessageOpenedTab = QueryParameters.GetQueryParameter("tab", "0", `The tab that is shown in the welcome-message. 0 = the explanation of the theme,1 = OSM-credits, 2 = sharescreen, 3 = more themes, 4 = about mapcomplete (user must be logged in and have >${Constants.userJourney.mapCompleteHelpUnlock} changesets)`).map<number>(
str => isNaN(Number(str)) ? 0 : Number(str), [], n => "" + n
@ -201,7 +201,7 @@ export default class State {
);
const h = Hash.Get();
const h = Hash.hash;
this.selectedElement.addCallback(selected => {
if (selected === undefined) {
h.setData("");
@ -240,13 +240,8 @@ export default class State {
}
}).ping()
this.layoutToUse.map((layoutToUse) => {
return Translations.WT(layoutToUse?.title)?.txt ?? "MapComplete"
}, [Locale.language]
).addCallbackAndRun((title) => {
document.title = title
});
new TitleHandler(this.layoutToUse, this.fullScreenMessage);
this.allElements = new ElementStorage();
this.changes = new Changes();

42
Svg.ts

File diff suppressed because one or more lines are too long

View file

@ -1,9 +1,12 @@
import Constants from "../../Models/Constants";
import {Utils} from "../../Utils";
export default class Img {
public static runningFromConsole = false;
static AsData(source:string){
if(this.runningFromConsole){
if(Utils.runningFromConsole){
return source;
}
return `data:image/svg+xml;base64,${(btoa(source))}`;

View file

@ -6,9 +6,11 @@ export default class LazyElement extends UIElement {
private _content: UIElement = undefined;
public Activate: () => void;
private _loadingContent: string;
constructor(content: (() => UIElement)) {
constructor(content: (() => UIElement), loadingContent = "Rendering...") {
super();
this._loadingContent = loadingContent;
this.dumbMode = false;
const self = this;
this.Activate = () => {
@ -21,7 +23,7 @@ export default class LazyElement extends UIElement {
InnerRender(): string {
if (this._content === undefined) {
return "Rendering...";
return this._loadingContent;
}
return this._content.InnerRender();
}

45
UI/Base/Ornament.ts Normal file
View 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`]
}
}

View 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();
}
}

View file

@ -1,6 +1,6 @@
import {UIElement} from "../UIElement";
import State from "../../State";
import WelcomeMessage from "./WelcomeMessage";
import ThemeIntroductionPanel from "./ThemeIntroductionPanel";
import * as personal from "../../assets/themes/personalLayout/personalLayout.json";
import PersonalLayersPanel from "./PersonalLayersPanel";
import Svg from "../../Svg";
@ -15,6 +15,8 @@ import {TabbedComponent} from "../Base/TabbedComponent";
import {UIEventSource} from "../../Logic/UIEventSource";
import LayoutConfig from "../../Customizations/JSON/LayoutConfig";
import UserDetails from "../../Logic/Osm/OsmConnection";
import {FixedUiElement} from "../Base/FixedUiElement";
import CombinedInputElement from "../Input/CombinedInputElement";
export default class FullWelcomePaneWithTabs extends UIElement {
private readonly _layoutToUse: UIEventSource<LayoutConfig>;
@ -27,9 +29,9 @@ export default class FullWelcomePaneWithTabs extends UIElement {
this._layoutToUse = State.state.layoutToUse;
this._userDetails = State.state.osmConnection.userDetails;
const layoutToUse = this._layoutToUse.data;
let welcome: UIElement = new WelcomeMessage();
let welcome: UIElement = new ThemeIntroductionPanel();
if (layoutToUse.id === personal.id) {
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);
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 {

View file

@ -3,14 +3,17 @@ import State from "../../State";
import BackgroundSelector from "./BackgroundSelector";
import LayerSelection from "./LayerSelection";
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;
constructor() {
super();
let layerControlPanel: UIElement = undefined;
let layerControlPanel: UIElement = new FixedUiElement("");
if (State.state.layoutToUse.data.enableBackgroundLayerSelection) {
layerControlPanel = new BackgroundSelector();
layerControlPanel.SetStyle("margin:1em");
@ -20,14 +23,19 @@ export default class LayerControlPanel extends UIElement{
if (State.state.filteredLayers.data.length > 1) {
const layerSelection = new LayerSelection();
layerSelection.onClick(() => { });
layerSelection.onClick(() => {
});
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 {
return this._panel.Render();
}
}

View file

@ -7,6 +7,9 @@ import Combine from "../Base/Combine";
import {FixedUiElement} from "../Base/FixedUiElement";
import Translations from "../i18n/Translations";
/**
* Shows the panel with all layers and a toggle for each of them
*/
export default class LayerSelection extends UIElement {
private readonly _checkboxes: UIElement[];
@ -33,7 +36,7 @@ export default class LayerSelection extends UIElement {
const zoomStatus = new VariableUiElement(State.state.locationControl.map(location => {
if (location.zoom < layer.layerDef.minzoom) {
return Translations.t.general.zoomInToSeeThisLayer
return Translations.t.general.layerSelection.zoomInToSeeThisLayer
.SetClass("alert")
.SetStyle("display: block ruby;width:min-content;")
.Render();
@ -41,9 +44,12 @@ export default class LayerSelection extends UIElement {
return ""
}))
const style = "display:flex;align-items:center;"
const styleWhole = "display:flex; flex-wrap: wrap"
this._checkboxes.push(new CheckBox(
new Combine([icon, name, zoomStatus]).SetStyle(style),
new Combine([iconUnselected, "<del>", name, "</del>", zoomStatus]).SetStyle(style),
new Combine([new Combine([icon, name]).SetStyle(style), zoomStatus])
.SetStyle(styleWhole),
new Combine([new Combine([iconUnselected, "<del>", name, "</del>"]).SetStyle(style), zoomStatus])
.SetStyle(styleWhole),
layer.isDisplayed)
.SetStyle("margin:0.3em;")
);

View file

@ -40,15 +40,22 @@ export default class MoreScreen extends UIElement {
}
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 =
`./${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") {
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) {
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}`
}

View file

@ -8,6 +8,7 @@ import State from "../../State";
import {TextField} from "../Input/TextField";
import {Geocoding} from "../../Logic/Osm/Geocoding";
import Translations from "../i18n/Translations";
import Hash from "../../Logic/Web/Hash";
export default class SearchAndGo extends UIElement {
@ -61,11 +62,14 @@ export default class SearchAndGo extends UIElement {
return;
}
const bb = result[0].boundingbox;
const poi = result[0];
const bb = poi.boundingbox;
const bounds: [[number, number], [number, number]] = [
[bb[0], bb[2]],
[bb[1], bb[3]]
]
State.state.selectedElement. setData(undefined);
Hash.hash.setData(poi.osm_type+"_"+poi.osm_id);
State.state.leafletMap.data.fitBounds(bounds);
self._placeholder.setData(Translations.t.general.search.search);
},

View file

@ -147,13 +147,15 @@ export default class ShareScreen extends UIElement {
const url = (currentLocation ?? new UIEventSource(undefined)).map(() => {
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)));
let hash = "";
if (layoutDefinition !== undefined) {
literalText = `https://${host}/index.html`
literalText = `https://${host}${path}/`
if (layout.id.startsWith("wiki:")) {
parts.push("userlayout=" + encodeURIComponent(layout.id))
} else {

View file

@ -13,47 +13,175 @@ import {FixedUiElement} from "../Base/FixedUiElement";
import Translations from "../i18n/Translations";
import Constants from "../../Models/Constants";
import LayerConfig from "../../Customizations/JSON/LayerConfig";
import ScrollableFullScreen from "../Base/ScrollableFullScreen";
export default class SimpleAddUI extends UIElement {
private readonly _addButtons: UIElement[];
private _loginButton : UIElement;
private _confirmPreset: UIEventSource<{
private readonly _loginButton: UIElement;
private readonly _confirmPreset: UIEventSource<{
description: string | UIElement,
name: string | UIElement,
icon: UIElement,
tags: Tag[],
layerToAddTo: {
layerDef: LayerConfig,
isDisplayed: UIEventSource<boolean> }
isDisplayed: UIEventSource<boolean>
}
}>
= new UIEventSource(undefined);
private confirmButton: UIElement = undefined;
private _confirmDescription: UIElement = undefined;
private openLayerControl: UIElement;
private cancelButton: UIElement;
private goToInboxButton: UIElement = new SubtleButton(Svg.envelope_ui(),
Translations.t.general.goToInbox, {url:"https://www.openstreetmap.org/messages/inbox", newTab: false});
private _component: UIElement;
private readonly openLayerControl: UIElement;
private readonly cancelButton: UIElement;
private readonly goToInboxButton: UIElement = new SubtleButton(Svg.envelope_ui(),
Translations.t.general.goToInbox, {url: "https://www.openstreetmap.org/messages/inbox", newTab: false});
constructor() {
super(State.state.locationControl);
super(State.state.locationControl.map(loc => loc.zoom));
const self = this;
this.ListenTo(Locale.language);
this.ListenTo(State.state.osmConnection.userDetails);
this.ListenTo(State.state.layerUpdater.runningQuery);
this.ListenTo(this._confirmPreset);
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._addButtons = [];
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;
for (const layer of State.state.filteredLayers.data) {
this.ListenTo(layer.isDisplayed);
const presets = layer.layerDef.presets;
for (const preset of presets) {
const tags = TagUtils.KVtoProperties(preset.tags ?? []);
@ -77,13 +205,6 @@ export default class SimpleAddUI extends UIElement {
])
).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({
tags: preset.tags,
layerToAddTo: layer,
@ -94,23 +215,10 @@ export default class SimpleAddUI extends UIElement {
self.Update();
}
)
this._addButtons.push(button);
allButtons.push(button);
}
}
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);
})
return allButtons;
}
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();
}
}

View file

@ -4,15 +4,16 @@ import State from "../../State";
import Combine from "../Base/Combine";
import LanguagePicker from "../LanguagePicker";
import Translations from "../i18n/Translations";
import {VariableUiElement} from "../Base/VariableUIElement";
export default class WelcomeMessage extends UIElement {
export default class ThemeIntroductionPanel extends UIElement {
private languagePicker: UIElement;
private readonly description: UIElement;
private readonly plzLogIn: UIElement;
private readonly welcomeBack: UIElement;
private readonly tail: UIElement;
private readonly loginStatus: UIElement;
constructor() {
@ -32,20 +33,24 @@ export default class WelcomeMessage extends UIElement {
});
this.welcomeBack = Translations.t.general.welcomeBack;
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 {
let loginStatus = undefined;
if (State.state.featureSwitchUserbadge.data) {
loginStatus = (State.state.osmConnection.userDetails.data.loggedIn ? this.welcomeBack :
this.plzLogIn);
}
return new Combine([
this.description,
"<br/><br/>",
loginStatus,
this.loginStatus,
this.tail,
"<br/>",
this.languagePicker

View file

@ -68,7 +68,7 @@ export default class AllLayersPanel extends UIElement {
const layer = config.layers[i];
if (typeof layer !== "string") {
try {
const iconTagRendering = new TagRenderingConfig(layer.icon, "icon")
const iconTagRendering = new TagRenderingConfig(layer.icon, undefined, "icon")
const icon = iconTagRendering.GetRenderValue({"id": "node/-1"}).txt;
return `<img src='${icon}'>`
} catch (e) {

View file

@ -111,7 +111,7 @@ export default class TagRenderingPanel extends InputElement<TagRenderingConfigJs
this.validText = new VariableUiElement(value.map((json: TagRenderingConfigJson) => {
try{
new TagRenderingConfig(json, options?.title ?? "");
new TagRenderingConfig(json,undefined, options?.title ?? "");
return "";
}catch(e){
return "<span class='alert'>"+e+"</span>"

View file

@ -40,7 +40,7 @@ export default class TagRenderingPreview extends UIElement {
rendering =
new VariableUiElement(es.map(tagRenderingConfig => {
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();
} catch (e) {
return new Combine(["Could not show this tagrendering:", e.message]).Render();

View file

@ -1,5 +1,4 @@
import {UIElement} from "./UIElement";
import Translations from "./i18n/Translations";
import State from "../State";
import Combine from "./Base/Combine";
@ -8,24 +7,11 @@ import Combine from "./Base/Combine";
*/
export default class FullScreenMessageBox extends UIElement {
private readonly returnToTheMap: UIElement;
private _content: UIElement;
constructor(onClear: (() => void)) {
constructor() {
super(State.state.fullScreenMessage);
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) {
return "";
}
this._content = State.state.fullScreenMessage.data;
const innerWrap = new Combine([this._content]).SetClass("fullscreenmessage-content")
return new Combine([innerWrap, this.returnToTheMap])
.SetStyle("display:block; height: 100%;")
.Render();
this._content = State.state.fullScreenMessage.data.content;
return new Combine([this._content]).SetClass("fullscreenmessage-content").Render();
}
protected InnerUpdate(htmlElement: 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;
htmlElement.style.setProperty("--variable-title-height", height+"px")
htmlElement.style.setProperty("--variable-title-height", height + "px")
}

View file

@ -196,8 +196,8 @@ export default class OpeningHoursVisualization extends UIElement {
// Closed!
const opensAtDate = oh.getNextChange();
if(opensAtDate === undefined){
const comm = oh.getComment();
if(comm !== undefined){
const comm = oh.getComment() ?? oh.getUnknown();
if(!!comm){
return new FixedUiElement(comm).SetClass("ohviz-closed").Render();
}

View file

@ -13,6 +13,7 @@ import {OH} from "./OpeningHours";
import {InputElement} from "../Input/InputElement";
import PublicHolidayInput from "./PublicHolidayInput";
import Translations from "../i18n/Translations";
import {Utils} from "../../Utils";
export default class OpeningHoursInput extends InputElement<string> {
@ -63,15 +64,13 @@ export default class OpeningHoursInput extends InputElement<string> {
this._phSelector = new PublicHolidayInput(ph);
function update() {
let rules = OH.ToString(rulesFromOhPicker.data);
if (leftoverRules.data.length != 0) {
rules += ";" + leftoverRules.data.join(";")
}
const phData = ph.data;
if (phData !== undefined && phData !== "") {
rules += ";" + phData;
}
value.setData(rules);
const regular = OH.ToString(rulesFromOhPicker.data);
const rules : string[] = [
regular,
...leftoverRules.data,
ph.data
]
value.setData(Utils.NoEmpty(rules).join(";"));
}
rulesFromOhPicker.addCallback(update);

View file

@ -7,6 +7,7 @@ import Combine from "../Base/Combine";
import TagRenderingAnswer from "./TagRenderingAnswer";
import State from "../../State";
import Svg from "../../Svg";
import {TagUtils} from "../../Logic/Tags";
export default class EditableTagRendering extends UIElement {
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() {
const self = this;
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();
}
}

View file

@ -6,17 +6,14 @@ import QuestionBox from "./QuestionBox";
import Combine from "../Base/Combine";
import TagRenderingAnswer from "./TagRenderingAnswer";
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 {
private _tags: UIEventSource<any>;
private _layerConfig: LayerConfig;
private _title: UIElement;
private _titleIcons: UIElement;
private _renderings: UIElement[];
private _questionBox: UIElement;
private _component: UIElement;
public title: UIElement ;
constructor(
tags: UIEventSource<any>,
layerConfig: LayerConfig
@ -25,14 +22,12 @@ export default class FeatureInfoBox extends UIElement {
if (layerConfig === undefined) {
throw "Undefined layerconfig"
}
this._tags = tags;
this._layerConfig = layerConfig;
this._title = layerConfig.title === undefined ? undefined :
new TagRenderingAnswer(tags, layerConfig.title)
.SetClass("featureinfobox-title");
this._titleIcons = new Combine(
const title = new TagRenderingAnswer(tags, layerConfig.title ?? new TagRenderingConfig("POI", undefined))
.SetClass("featureinfobox-title");
this.title = title;
const titleIcons = new Combine(
layerConfig.titleIcons.map(icon => new TagRenderingAnswer(tags, icon)))
.SetClass("featureinfobox-icons");
@ -42,7 +37,7 @@ export default class FeatureInfoBox extends UIElement {
}
let questionBoxIsUsed = false;
this._renderings = layerConfig.tagRenderings.map(tr => {
const renderings = layerConfig.tagRenderings.map(tr => {
if (tr.question === null) {
questionBoxIsUsed = true;
// This is the question box!
@ -50,25 +45,26 @@ export default class FeatureInfoBox extends UIElement {
}
return new EditableTagRendering(tags, tr);
});
this._renderings[0]?.SetClass("first-rendering");
renderings[0]?.SetClass("first-rendering");
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 {
return new Combine([
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();
return this._component.Render();
}
}

View file

@ -3,6 +3,7 @@ import {UIEventSource} from "../../Logic/UIEventSource";
import TagRenderingConfig from "../../Customizations/JSON/TagRenderingConfig";
import TagRenderingQuestion from "./TagRenderingQuestion";
import Translations from "../i18n/Translations";
import {TagUtils} from "../../Logic/Tags";
/**
@ -46,20 +47,39 @@ export default class QuestionBox extends UIElement {
})
}
/**
* Returns true if it is known or not shown, false if the question should be asked
* @constructor
*/
IsKnown(tagRendering: TagRenderingConfig): boolean {
if (tagRendering.condition &&
!tagRendering.condition.matchesProperties(this._tags.data)) {
// Filtered away by the condition
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) {
// This value is known and can be rendered
return true;
}
return false;
}
InnerRender(): string {
for (let i = 0; i < this._tagRenderingQuestions.length; i++) {
let tagRendering = this._tagRenderings[i];
if(tagRendering.condition &&
!tagRendering.condition.matchesProperties(this._tags.data)){
// Filtered away by the condition
if(this.IsKnown(tagRendering)){
continue;
}
if (tagRendering.GetRenderValue(this._tags.data) !== undefined) {
// This value is known
continue;
}
if (this._skippedQuestions.data.indexOf(i) >= 0) {
continue;

View file

@ -2,6 +2,9 @@ import {UIEventSource} from "../../Logic/UIEventSource";
import TagRenderingConfig from "../../Customizations/JSON/TagRenderingConfig";
import {UIElement} from "../UIElement";
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
@ -15,7 +18,7 @@ export default class TagRenderingAnswer extends UIElement {
super(tags);
this._tags = tags;
this._configuration = configuration;
if(configuration === undefined){
if (configuration === undefined) {
throw "Trying to generate a tagRenderingAnswer without configuration..."
}
}
@ -32,12 +35,38 @@ export default class TagRenderingAnswer extends UIElement {
return "";
}
const tr = this._configuration.GetRenderValue(tags);
if (tr === undefined) {
return "";
if (tr !== undefined) {
this._content = new SubstitutedTranslation(tr, this._tags);
return this._content.Render();
}
// Bit of a hack; remember that the fields are updated
this._content = new SubstitutedTranslation(tr, this._tags);
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 "";
}
}

View file

@ -53,7 +53,9 @@ export default class TagRenderingQuestion extends UIElement {
this._inputElement = this.GenerateInputElement()
const self = this;
const save = () => {
console.log("Save clicked!")
const selection = self._inputElement.GetValue().data;
console.log("Selection is", selection)
if (selection) {
(State.state?.changes ?? new Changes())
.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)

View file

@ -43,7 +43,7 @@ export default class ShowDataLayer {
const feats = features.data.map(ff => ff.feature);
let geoLayer = self.CreateGeojsonLayer(feats)
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 });
cluster.addLayer(geoLayer);
geoLayer = cluster;
@ -68,6 +68,16 @@ export default class ShowDataLayer {
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 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.on('popupclose', () => {
popup.on('remove', () => {
State.state.selectedElement.setData(undefined);
});
leafletLayer.bindPopup(popup);
@ -126,21 +137,24 @@ export default class ShowDataLayer {
leafletLayer.on("click", (e) => {
// We set the element as selected...
// uiElement.Activate();
uiElement.Activate();
State.state.selectedElement.setData(feature);
});
const id = feature.properties.id+feature.geometry.type+feature._matching_layer_id;
this._onSelectedTrigger[id]
= () => {
if(popup.isOpen()){
return;
}
leafletLayer.openPopup();
uiElement.Activate();
State.state.selectedElement.setData(feature);
}
if (feature.properties.id.replace(/\//g, "_") === Hash.Get().data) {
this._onSelectedTrigger[feature.properties.id.replace("/","_")] = this._onSelectedTrigger[id];
if (feature.properties.id.replace(/\//g, "_") === Hash.hash.data) {
// 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();
popup.setContent(uiElement.Render());

View file

@ -1,27 +1,19 @@
import {UIEventSource} from "../Logic/UIEventSource";
import Constants from "../Models/Constants";
import {Utils} from "../Utils";
export abstract class UIElement extends UIEventSource<string> {
private static nextId: number = 0;
public readonly id: string;
public readonly _source: UIEventSource<any>;
private clss: string[] = []
private style: string;
private _hideIfEmpty = false;
public dumbMode = false;
private clss: string[] = []
private style: string;
private _hideIfEmpty = false;
private lastInnerRender: string;
/**
* 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;
private _onClick: () => void;
private _onHover: UIEventSource<boolean>;
protected constructor(source: UIEventSource<any> = undefined) {
super("");
@ -32,7 +24,6 @@ export abstract class UIElement extends UIEventSource<string> {
this.ListenTo(source);
}
public ListenTo(source: UIEventSource<any>) {
if (source === undefined) {
return this;
@ -46,8 +37,6 @@ export abstract class UIElement extends UIEventSource<string> {
return this;
}
private _onClick: () => void;
public onClick(f: (() => void)) {
this.dumbMode = false;
this._onClick = f;
@ -56,8 +45,6 @@ export abstract class UIElement extends UIEventSource<string> {
return this;
}
private _onHover: UIEventSource<boolean>;
public IsHovered(): UIEventSource<boolean> {
this.dumbMode = false;
if (this._onHover !== undefined) {
@ -69,10 +56,10 @@ export abstract class UIElement extends UIEventSource<string> {
}
Update(): void {
if (UIElement.runningFromConsole) {
if (Utils.runningFromConsole) {
return;
}
let element = document.getElementById(this.id);
if (element === undefined || element === null) {
// The element is not painted or, in the case of 'dumbmode' this UI-element is not explicitely present
@ -101,7 +88,7 @@ export abstract class UIElement extends UIEventSource<string> {
const self = this;
element.onclick = (e) => {
// @ts-ignore
if(e.consumed){
if (e.consumed) {
return;
}
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) {
this._hideIfEmpty = hide;
this.Update();
return this;
}
// Called after the HTML has been replaced. Can be used for css tricks
protected InnerUpdate(htmlElement: HTMLElement) {
}
Render(): string {
this.lastInnerRender = this.InnerRender();
if (this.dumbMode) {
@ -192,6 +160,7 @@ export abstract class UIElement extends UIEventSource<string> {
}
return this;
}
public RemoveClass(clss: string): UIElement {
const i = this.clss.indexOf(clss);
if (i >= 0) {
@ -201,13 +170,31 @@ export abstract class UIElement extends UIEventSource<string> {
return this;
}
public SetStyle(style: string): UIElement {
this.dumbMode = false;
this.style = style;
this.Update();
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();
}
}
}
}
}
}

View file

@ -1,6 +1,6 @@
import {UIEventSource} from "../../Logic/UIEventSource";
import {UIElement} from "../UIElement";
import {LocalStorageSource} from "../../Logic/Web/LocalStorageSource";
import {Utils} from "../../Utils";
export default class Locale {
@ -9,7 +9,7 @@ export default class Locale {
private static setup() {
const source = LocalStorageSource.Get('language', "en");
if (!UIElement.runningFromConsole) {
if (!Utils.runningFromConsole) {
// @ts-ignore
window.setLanguage = function (language: string) {
source.setData(language)

View file

@ -1,8 +1,16 @@
import {UIElement} from "./UI/UIElement";
import * as $ from "jquery"
import Constants from "./Models/Constants";
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/";
static EncodeXmlValue(str) {
@ -59,7 +67,7 @@ export class Utils {
}
static DoEvery(millis: number, f: (() => void)) {
if (UIElement.runningFromConsole) {
if (Utils.runningFromConsole) {
return;
}
window.setTimeout(
@ -134,15 +142,6 @@ export class Utils {
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
public static changesetDate(id: number, action: ((isFound: Date) => void)): void {
$.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,")")
}
}
}
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);
}
}
}
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View file

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

View 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

View 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

View file

@ -26,6 +26,7 @@
"overpassTags": {
"or": [
"service:bicycle:cleaning=yes",
"service:bicycle:cleaning=diy",
"amenity=bicycle_wash"
]
},
@ -38,13 +39,87 @@
"nl": "Fietsschoonmaakpunt"
},
"tags": [
"amenity=bicycle_wash",
"service:bicycle:cleaning=yes"
"amenity=bicycle_wash"
]
}
],
"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": [
"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
}
]
}

View 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

View file

@ -107,7 +107,8 @@
"titleIcons": [
{
"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"
],

View file

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

View file

@ -186,15 +186,6 @@
"condition": "service:bicycle:diy=yes",
"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"
],
"description": {

View 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

View 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

View 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

View 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

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.9 KiB

View 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

View 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
View 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

View file

@ -8,6 +8,7 @@
"phone": {
"question": {
"en": "What is the phone number of {name}?",
"nl": "Wat is het telefoonnummer van {name}?",
"de": "Was ist die Telefonnummer von {name}?"
},
"render": "<a href='tel:{phone}'>{phone}</a>",

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

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -13,18 +13,38 @@
"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>.",
"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",
"icon": "./assets/themes/cyclofix/logo.svg",
"version": "0",
"startLat": 50.8465573,
"defaultBackgroundId": "CartoDB.Voyager",
"startLon": 4.3516970,
"startLon": 4.3516970,
"startZoom": 16,
"widenFactor": 0.05,
"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": []
}

View file

@ -309,14 +309,24 @@
"gl": "Engadir {category} aquí",
"de": "Hier eine neue {category} hinzufügen"
},
"header": {
"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": {
"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": {
"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": {
"en": "<a class='activate-osm-authentication'>Please log in to add a new point</a>",
@ -744,14 +754,21 @@
"fr": "Carte de fonds",
"de": "Hintergrundkarte"
},
"zoomInToSeeThisLayer": {
"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": {
"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": {
"en": "Select layers",
"nl": "Selecteer lagen"
}
},
"weekdays": {
"abbreviations": {
"monday": {

View file

@ -1,5 +1,5 @@
.fullscreenmessage-content {
max-height: calc(100vh - var(--return-to-the-map-height));
max-height: calc(100vh);
height: 100%;
overflow-y: auto;
overflow-x: hidden;
@ -15,11 +15,15 @@
.fullscreenmessage-content .featureinfobox-content {
padding: 1em;
top: var(--variable-title-height);
/* 2em extra: padding from the title */
max-height: calc(100vh - var(--variable-title-height) - var(--return-to-the-map-height) - 2em) !important;
display: block;
max-height: calc(100vh - var(--variable-title-height)) !important;
min-height: calc(100vh - var(--variable-title-height)) !important;
position: absolute;
overflow-y: auto;
box-sizing: border-box;
display: flex;
flex-direction: column;
justify-content: space-between
}
.fullscreenmessage-content .featureinfobox-titlebar {
@ -31,33 +35,10 @@
padding: 0.5em;
width: 100%;
box-sizing: border-box;
}
.fullscreenmessage-content .featureinfobox-tail {
display: block;
height: 1em;
/*THe ornament to give the URL bar some room...*/
}
.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;
}

View file

@ -3,7 +3,7 @@ Contains tweaks for small screens
*/
.only-on-mobile {
display: none;
display: none !important;
background-color: var(--background-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) {
.only-on-mobile {
display: unset;
display: unset !important;
background-color: var(--background-color);
color: var(--foreground-color);
}

View file

@ -1,17 +1,21 @@
.featureinfobox {
display: flex;
flex-direction: column;
flex-direction: column;
}
.featureinfobox-title {
font-size: xx-large;
font-size: xx-large;
word-break: break-word;
}
.featureinfobox-icons img{
.featureinfobox-icons img {
max-height: 1.5em;
width: 1.5em;
}
.featureinfobox-icons {
margin-left: auto;
}
.featureinfobox-icons span {
@ -19,30 +23,64 @@
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-weight: bold;
display: flex;
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 {
display: block;
max-height: 75vh;
overflow-y: auto;
overflow-x: hidden;
padding-top: 1em;
width:100%;
overflow-x: hidden;
}
@media only screen and (max-width: 600px), only screen and (max-height: 600px) {
.featureinfobox-content {
display:block;
display: block;
max-height: unset !important;
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*/
.featureinfobox-content {
position: relative;
@ -51,7 +89,7 @@
max-height: unset !important;
height: 100vh;
}
.answer {
max-width: 48% !important;
padding-right: 0.3em;
@ -63,8 +101,8 @@
padding-right: 0.3em;
box-sizing: border-box;
}
.first-rendering{
.first-rendering {
position: absolute;
left: 50%;
width: 94%;
@ -129,7 +167,7 @@
border-radius: 0.5em;
display: inline-block;
width: 100%;
margin:0;
margin: 0;
margin-left: -2em;
box-sizing: border-box;
padding: 0.5em;
@ -161,7 +199,7 @@ input:checked + label .question-option-with-border {
.login-button-friendly {
display: inline-block;
background-color:var(--catch-detail-color);
background-color: var(--catch-detail-color);
color: var(--catch-detail-color-contrast);
border: solid var(--catch-detail-color-contrast) 2px;
padding: 0.2em 0.6em;
@ -204,7 +242,34 @@ input:checked + label .question-option-with-border {
float: right;
}
.edit-button svg path{
.edit-button svg path {
stroke: 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;
}

View file

@ -2,7 +2,7 @@
--subtle-detail-color: #e5f5ff;
--subtle-detail-color-contrast: black;
--subtle-detail-color-light-contrast: lightgrey;
--catch-detail-color: #3a3aeb;
--catch-detail-color-contrast: white;
--alert-color: #fee4d1;
@ -10,9 +10,8 @@
--foreground-color: black;
--popup-border: white;
--shadow-color: #00000066;
--return-to-the-map-height: 5em;
--variable-title-height: 0px; /*Set by javascript dynamically*/
--variable-title-height: 0px; /* Set by javascript */
--return-to-the-map-height: 2em;
}
html, body {
@ -40,8 +39,8 @@ a {
stroke: var(--foreground-color) !important;
}
.direction-svg svg path{
fill: var(--catch-detail-color) !important;
.direction-svg svg path {
fill: var(--catch-detail-color) !important;
}
@ -100,37 +99,39 @@ a {
box-shadow: 0 0 10px var(--shadow-color);
}
.single-layer-selection-toggle{
.single-layer-selection-toggle {
position: relative;
width: 2em;
width: 2em;
height: 2em;
}
.single-layer-selection-toggle img{
max-height: 2em !important;
max-width: 2em !important;
flex-shrink: 0;
}
.single-layer-selection-toggle svg{
max-height:2em !important;
.single-layer-selection-toggle img {
max-height: 2em !important;
max-width: 2em !important;
}
.simple-add-ui-icon{
.single-layer-selection-toggle svg {
max-height: 2em !important;
max-width: 2em !important;
}
.simple-add-ui-icon {
position: relative;
display: block;
width: 3.5em;
width: 3.5em;
height: 3.5em;
padding-right: 0.3em;
padding-left: 0.3em;
}
.simple-add-ui-icon img{
max-height:3.5em !important;
.simple-add-ui-icon img {
max-height: 3.5em !important;
max-width: 3.5em !important;
}
.simple-add-ui-icon svg{
max-height:3.5em !important;
.simple-add-ui-icon svg {
max-height: 3.5em !important;
max-width: 3.5em !important;
}
@ -551,7 +552,7 @@ a {
height: 2.5em;
width: 2.5em;
box-sizing: border-box;
padding:0;
padding: 0;
}
.share-button svg {
@ -563,12 +564,34 @@ a {
stroke: var(--subtle-detail-color-contrast) !important;
}
.share-button svg path{
.share-button svg path {
fill: 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;
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);
}

View file

@ -6,7 +6,6 @@ import {UIEventSource} from "./Logic/UIEventSource";
import * as $ from "jquery";
import LayoutConfig from "./Customizations/JSON/LayoutConfig";
import {Utils} from "./Utils";
import {Overpass} from "./Logic/Osm/Overpass";
let defaultLayout = "bookcases"
// --------------------- Special actions based on the parameters -----------------
@ -77,8 +76,8 @@ if (layoutFromBase64.startsWith("wiki:")) {
data = data.substr(start,
data.indexOf("<div class=\"printfooter\">") - start)
data = data.substr(0, data.lastIndexOf("</p>"))
data = data.substr(startTrigger.length + 3);
data = data.substr( data.indexOf("<p>") + 3)
console.log(data)
try {
const parsed = JSON.parse(data);
parsed["id"] = layoutFromBase64
@ -88,6 +87,7 @@ if (layoutFromBase64.startsWith("wiki:")) {
new FixedUiElement(`<a href="${cleanUrl}">${themeName}</a> is invalid:<br/>${e}`)
.SetClass("clickable")
.AttachTo("centermessage");
console.error("Could not parse the text", data)
throw e;
}
},

View file

@ -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
UIElement.runningFromConsole = true;
import {Utils} from "../Utils";
Utils.runningFromConsole = true;
import LayoutConfig from "../Customizations/JSON/LayoutConfig";
import {AllKnownLayouts} from "../Customizations/AllKnownLayouts";
import {existsSync, mkdirSync, readFileSync, writeFile, writeFileSync} from "fs";
import Locale from "../UI/i18n/Locale";
import svg2img from 'promise-svg2img';
import Translations from "../UI/i18n/Translations";
import {Translation} from "../UI/i18n/Translation";
import LayoutConfig from "../Customizations/JSON/LayoutConfig";
function enc(str: string): string {
return encodeURIComponent(str.toLowerCase());

View file

@ -1,7 +1,5 @@
import {UIElement} from "../UI/UIElement";
UIElement.runningFromConsole = true;
import Img from "../UI/Base/Img";
Img.runningFromConsole = true;
import {Utils} from "../Utils";
Utils.runningFromConsole = true;
import {equal} from "assert";
import T from "./TestHelper";
import {FromJSON} from "../Customizations/JSON/FromJSON";
@ -12,7 +10,6 @@ import {UIEventSource} from "../Logic/UIEventSource";
import TagRenderingConfig from "../Customizations/JSON/TagRenderingConfig";
import EditableTagRendering from "../UI/Popup/EditableTagRendering";
import {SubstitutedTranslation} from "../UI/SpecialVisualizations";
import {Utils} from "../Utils";
import {Translation} from "../UI/i18n/Translation";
import {OH, OpeningHour} from "../UI/OpeningHours/OpeningHours";
import PublicHolidayInput from "../UI/OpeningHours/PublicHolidayInput";
@ -42,7 +39,20 @@ new T([
equal(notReg.matches([{k:"x",v:""}]), 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", (() => {
@ -94,7 +104,7 @@ new T([
}
],
condition: "x="
}, "");
}, undefined,"");
equal(undefined, tr.GetRenderValue({"foo": "bar"}));
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>(
{leisure: "park", "access": "no"}), constr
);