forked from MapComplete/MapComplete
Styling: style most buttons
This commit is contained in:
parent
e04430b428
commit
83f3662b9a
46 changed files with 720 additions and 671 deletions
|
@ -2,7 +2,7 @@ import { UIEventSource } from "../UIEventSource"
|
||||||
import { LocalStorageSource } from "../Web/LocalStorageSource"
|
import { LocalStorageSource } from "../Web/LocalStorageSource"
|
||||||
import { QueryParameters } from "../Web/QueryParameters"
|
import { QueryParameters } from "../Web/QueryParameters"
|
||||||
|
|
||||||
type GeolocationState = "prompt" | "requested" | "granted" | "denied"
|
export type GeolocationPermissionState = "prompt" | "requested" | "granted" | "denied"
|
||||||
|
|
||||||
export interface GeoLocationPointProperties extends GeolocationCoordinates {
|
export interface GeoLocationPointProperties extends GeolocationCoordinates {
|
||||||
id: "gps"
|
id: "gps"
|
||||||
|
@ -21,7 +21,7 @@ export class GeoLocationState {
|
||||||
* 'granted' means that it is granted
|
* 'granted' means that it is granted
|
||||||
* 'denied' means that we don't have access
|
* 'denied' means that we don't have access
|
||||||
*/
|
*/
|
||||||
public readonly permission: UIEventSource<GeolocationState> = new UIEventSource("prompt")
|
public readonly permission: UIEventSource<GeolocationPermissionState> = new UIEventSource("prompt")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Important to determine e.g. if we move automatically on fix or not
|
* Important to determine e.g. if we move automatically on fix or not
|
||||||
|
|
16
UI/Base/BackButton.svelte
Normal file
16
UI/Base/BackButton.svelte
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<script lang="ts">
|
||||||
|
/**
|
||||||
|
* Wrapper around 'subtleButton' with an arrow pointing to the right
|
||||||
|
*/
|
||||||
|
import SubtleButton from "./SubtleButton.svelte";
|
||||||
|
import {ChevronLeftIcon} from "@rgossiaux/svelte-heroicons/solid";
|
||||||
|
import {createEventDispatcher} from "svelte";
|
||||||
|
|
||||||
|
const dispatch = createEventDispatcher<{ click }>()
|
||||||
|
export let clss = ""
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<SubtleButton on:click={() => dispatch("click")} options={{extraClasses:clss+ " flex items-center"}}>
|
||||||
|
<ChevronLeftIcon class="w-12 h-12" slot="image"/>
|
||||||
|
<slot name="message" slot="message"/>
|
||||||
|
</SubtleButton>
|
|
@ -11,9 +11,10 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export let clss = ""
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if src !== undefined}
|
{#if src !== undefined}
|
||||||
<span bind:this={htmlElem}></span>
|
<span bind:this={htmlElem} class={clss}></span>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import {OsmConnection} from "../../Logic/Osm/OsmConnection";
|
import {OsmConnection} from "../../Logic/Osm/OsmConnection";
|
||||||
import SubtleButton from "./SubtleButton.svelte";
|
|
||||||
import Translations from "../i18n/Translations.js";
|
import Translations from "../i18n/Translations.js";
|
||||||
import Tr from "./Tr.svelte";
|
import Tr from "./Tr.svelte";
|
||||||
|
import ToSvelte from "./ToSvelte.svelte";
|
||||||
|
import Svg from "../../Svg";
|
||||||
|
|
||||||
export let osmConnection: OsmConnection
|
export let osmConnection: OsmConnection
|
||||||
|
export let clss = ""
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<SubtleButton on:click={() => osmConnection.AttemptLogin()}>
|
<button class={clss} on:click={() => osmConnection.AttemptLogin()}>
|
||||||
<img slot="image" src="./assets/svg/login.svg" class="w-8"/>
|
<ToSvelte construct={Svg.login_svg().SetClass("w-12 m-1")}/>
|
||||||
<slot name="message" slot="message">
|
<slot name="message">
|
||||||
<Tr t={Translations.t.general.loginWithOpenStreetMap}/>
|
<Tr t={Translations.t.general.loginWithOpenStreetMap}/>
|
||||||
</slot>
|
</slot>
|
||||||
</SubtleButton>
|
</button>
|
||||||
|
|
|
@ -8,6 +8,6 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
<button on:click={e => dispatch("click", e)} class="secondary rounded-full h-fit w-fit m-0.5 md:m-1 p-0.5 sm:p-1">
|
<button on:click={e => dispatch("click", e)} class="rounded-full h-fit w-fit m-0.5 md:m-1 p-0.5 sm:p-1">
|
||||||
<slot/>
|
<slot/>
|
||||||
</button>
|
</button>
|
||||||
|
|
20
UI/Base/NextButton.svelte
Normal file
20
UI/Base/NextButton.svelte
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
<script lang="ts">
|
||||||
|
/**
|
||||||
|
* Wrapper around 'subtleButton' with an arrow pointing to the right
|
||||||
|
*/
|
||||||
|
import SubtleButton from "./SubtleButton.svelte";
|
||||||
|
import {ChevronRightIcon} from "@rgossiaux/svelte-heroicons/solid";
|
||||||
|
import {createEventDispatcher} from "svelte";
|
||||||
|
|
||||||
|
const dispatch = createEventDispatcher<{ click }>()
|
||||||
|
|
||||||
|
export let clss : string= ""
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<SubtleButton on:click={() => dispatch("click")} options={{extraClasses: clss+" flex items-center"}}>
|
||||||
|
<slot name="image" slot="image"/>
|
||||||
|
<div class="w-full flex justify-between items-center" slot="message">
|
||||||
|
<slot/>
|
||||||
|
<ChevronRightIcon class="w-12 h-12"/>
|
||||||
|
</div>
|
||||||
|
</SubtleButton>
|
|
@ -12,11 +12,10 @@
|
||||||
|
|
||||||
let imgClasses = "block justify-center shrink-0 mr-4 " + (options?.imgSize ?? "h-11 w-11");
|
let imgClasses = "block justify-center shrink-0 mr-4 " + (options?.imgSize ?? "h-11 w-11");
|
||||||
const dispatch = createEventDispatcher<{click}>()
|
const dispatch = createEventDispatcher<{click}>()
|
||||||
console.log("Slots:", $$slots)
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
class={(options.extraClasses??"") + 'flex hover:shadow-xl transition-[color,background-color,box-shadow] hover:bg-unsubtle cursor-pointer'}
|
class={(options.extraClasses??"") + ' secondary no-image-background'}
|
||||||
target={options?.newTab ? "_blank" : ""}
|
target={options?.newTab ? "_blank" : ""}
|
||||||
on:click={(e) => dispatch("click", e)}
|
on:click={(e) => dispatch("click", e)}
|
||||||
>
|
>
|
||||||
|
@ -30,16 +29,3 @@
|
||||||
|
|
||||||
<slot name="message"/>
|
<slot name="message"/>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<style lang="scss">
|
|
||||||
span,
|
|
||||||
a {
|
|
||||||
@apply flex p-3 my-2 py-4 rounded-lg shrink-0;
|
|
||||||
@apply items-center w-full no-underline;
|
|
||||||
@apply bg-subtle text-black;
|
|
||||||
|
|
||||||
:global(span) {
|
|
||||||
@apply block text-ellipsis;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
<div class="interactive flex items-center justify-between sticky top-0">
|
<div class="interactive flex items-center justify-between sticky top-0">
|
||||||
<TabList class="flex flex-wrap">
|
<TabList class="flex flex-wrap">
|
||||||
{#if $$slots.title1}
|
{#if $$slots.title1}
|
||||||
<Tab class={({selected}) => "tab "+(selected ? "selected" : "secondary")}>
|
<Tab class={({selected}) => "tab "+(selected ? "primary" : "")}>
|
||||||
<div bind:this={tabElements[0]} class="flex">
|
<div bind:this={tabElements[0]} class="flex">
|
||||||
<slot name="title0">
|
<slot name="title0">
|
||||||
Tab 0
|
Tab 0
|
||||||
|
@ -31,28 +31,28 @@
|
||||||
</Tab>
|
</Tab>
|
||||||
{/if}
|
{/if}
|
||||||
{#if $$slots.title1}
|
{#if $$slots.title1}
|
||||||
<Tab class={({selected}) => "tab "+(selected ? "selected" : "secondary")}>
|
<Tab class={({selected}) => "tab "+(selected ? "primary" : "")}>
|
||||||
<div bind:this={tabElements[1]} class="flex">
|
<div bind:this={tabElements[1]} class="flex">
|
||||||
<slot name="title1"/>
|
<slot name="title1"/>
|
||||||
</div>
|
</div>
|
||||||
</Tab>
|
</Tab>
|
||||||
{/if}
|
{/if}
|
||||||
{#if $$slots.title2}
|
{#if $$slots.title2}
|
||||||
<Tab class={({selected}) => "tab "+(selected ? "selected" : "secondary")}>
|
<Tab class={({selected}) => "tab "+(selected ? "primary" : "")}>
|
||||||
<div bind:this={tabElements[2]} class="flex">
|
<div bind:this={tabElements[2]} class="flex">
|
||||||
<slot name="title2"/>
|
<slot name="title2"/>
|
||||||
</div>
|
</div>
|
||||||
</Tab>
|
</Tab>
|
||||||
{/if}
|
{/if}
|
||||||
{#if $$slots.title3}
|
{#if $$slots.title3}
|
||||||
<Tab class={({selected}) => "tab "+(selected ? "selected" : "secondary")}>
|
<Tab class={({selected}) => "tab "+(selected ? "primary" : "")}>
|
||||||
<div bind:this={tabElements[3]} class="flex">
|
<div bind:this={tabElements[3]} class="flex">
|
||||||
<slot name="title3"/>
|
<slot name="title3"/>
|
||||||
</div>
|
</div>
|
||||||
</Tab>
|
</Tab>
|
||||||
{/if}
|
{/if}
|
||||||
{#if $$slots.title4}
|
{#if $$slots.title4}
|
||||||
<Tab class={({selected}) => "tab "+(selected ? "selected" : "secondary")}>
|
<Tab class={({selected}) => "tab "+(selected ? "primary" : "")}>
|
||||||
<div bind:this={tabElements[4]} class="flex">
|
<div bind:this={tabElements[4]} class="flex">
|
||||||
<slot name="title4"/>
|
<slot name="title4"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
import WeblateLink from "./WeblateLink.svelte";
|
import WeblateLink from "./WeblateLink.svelte";
|
||||||
|
|
||||||
export let t: Translation;
|
export let t: Translation;
|
||||||
|
export let cls: string = ""
|
||||||
export let tags: Record<string, string> | undefined = undefined;
|
export let tags: Record<string, string> | undefined = undefined;
|
||||||
// Text for the current language
|
// Text for the current language
|
||||||
let txt: string | undefined;
|
let txt: string | undefined;
|
||||||
|
@ -29,7 +30,7 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if t}
|
{#if t}
|
||||||
<span class="inline-flex items-center">
|
<span class={"inline-flex items-center "+cls}>
|
||||||
<FromHtml src={txt}></FromHtml>
|
<FromHtml src={txt}></FromHtml>
|
||||||
<WeblateLink context={t.context}></WeblateLink>
|
<WeblateLink context={t.context}></WeblateLink>
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -40,9 +40,9 @@
|
||||||
</a>
|
</a>
|
||||||
{resource.resolved?.description}
|
{resource.resolved?.description}
|
||||||
{#if resource.languageCodes?.indexOf($language) >= 0}
|
{#if resource.languageCodes?.indexOf($language) >= 0}
|
||||||
<span class="border-2 rounded-full border-lime-500 text-sm w-fit px-2">
|
<div class="thanks w-fit">
|
||||||
<ToSvelte construct={() => availableTranslation.Clone()} />
|
<ToSvelte construct={() => availableTranslation.Clone()} />
|
||||||
</span>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -111,17 +111,3 @@ $: onDestroy(
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<style>
|
|
||||||
|
|
||||||
:global(.no-image-background * img) {
|
|
||||||
background: none;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
:global(.no-image-background * svg) {
|
|
||||||
background: none;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
import { Geocoding } from "../../Logic/Osm/Geocoding";
|
import { Geocoding } from "../../Logic/Osm/Geocoding";
|
||||||
import { BBox } from "../../Logic/BBox";
|
import { BBox } from "../../Logic/BBox";
|
||||||
import { GeoIndexedStoreForLayer } from "../../Logic/FeatureSource/Actors/GeoIndexedStore";
|
import { GeoIndexedStoreForLayer } from "../../Logic/FeatureSource/Actors/GeoIndexedStore";
|
||||||
|
import {createEventDispatcher} from "svelte";
|
||||||
|
|
||||||
export let perLayer: ReadonlyMap<string, GeoIndexedStoreForLayer> | undefined = undefined;
|
export let perLayer: ReadonlyMap<string, GeoIndexedStoreForLayer> | undefined = undefined;
|
||||||
export let bounds: UIEventSource<BBox>;
|
export let bounds: UIEventSource<BBox>;
|
||||||
|
@ -34,6 +35,8 @@
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const dispatch = createEventDispatcher<{searchCompleted}>()
|
||||||
|
|
||||||
async function performSearch() {
|
async function performSearch() {
|
||||||
try {
|
try {
|
||||||
isRunning = true;
|
isRunning = true;
|
||||||
|
@ -59,6 +62,7 @@
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
dispatch("searchCompleted")
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
feedback = Translations.t.general.search.error.txt;
|
feedback = Translations.t.general.search.error.txt;
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
import LayerConfig from "../../Models/ThemeConfig/LayerConfig";
|
import LayerConfig from "../../Models/ThemeConfig/LayerConfig";
|
||||||
import type {SpecialVisualizationState} from "../SpecialVisualization";
|
import type {SpecialVisualizationState} from "../SpecialVisualization";
|
||||||
import TagRenderingAnswer from "../Popup/TagRendering/TagRenderingAnswer.svelte";
|
import TagRenderingAnswer from "../Popup/TagRendering/TagRenderingAnswer.svelte";
|
||||||
import TagRenderingEditable from "../Popup/TagRendering/TagRenderingEditable.svelte";
|
|
||||||
import {onDestroy} from "svelte";
|
import {onDestroy} from "svelte";
|
||||||
import Translations from "../i18n/Translations";
|
import Translations from "../i18n/Translations";
|
||||||
import Tr from "../Base/Tr.svelte";
|
import Tr from "../Base/Tr.svelte";
|
||||||
|
@ -31,7 +30,7 @@
|
||||||
{#if _tags._deleted === "yes"}
|
{#if _tags._deleted === "yes"}
|
||||||
<Tr t={ Translations.t.delete.isDeleted}/>
|
<Tr t={ Translations.t.delete.isDeleted}/>
|
||||||
{:else}
|
{:else}
|
||||||
<div class="flex border-b-2 border-black drop-shadow-md justify-between items-center low-interaction px-3 active-links">
|
<div class="flex border-b-2 border-black drop-shadow-md justify-between items-center low-interaction px-3">
|
||||||
<div class="flex flex-col">
|
<div class="flex flex-col">
|
||||||
|
|
||||||
<!-- Title element-->
|
<!-- Title element-->
|
||||||
|
@ -40,7 +39,7 @@
|
||||||
{layer}></TagRenderingAnswer>
|
{layer}></TagRenderingAnswer>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<div class="flex flex-row flex-wrap pt-0.5 sm:pt-1 items-center mr-2 gap-x-0.5 p-1">
|
<div class="title-icons flex flex-row flex-wrap pt-0.5 sm:pt-1 items-center mr-2 gap-x-0.5 p-1 links-as-button">
|
||||||
{#each layer.titleIcons as titleIconConfig}
|
{#each layer.titleIcons as titleIconConfig}
|
||||||
{#if (titleIconConfig.condition?.matchesProperties(_tags) ?? true) && (titleIconConfig.metacondition?.matchesProperties({..._metatags, ..._tags}) ?? true) && titleIconConfig.IsKnown(_tags)}
|
{#if (titleIconConfig.condition?.matchesProperties(_tags) ?? true) && (titleIconConfig.metacondition?.matchesProperties({..._metatags, ..._tags}) ?? true) && titleIconConfig.IsKnown(_tags)}
|
||||||
<div class="w-8 h-8 flex items-center">
|
<div class="w-8 h-8 flex items-center">
|
||||||
|
@ -57,5 +56,11 @@
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
.title-icons {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
:global(.title-icons a) {
|
||||||
|
display: block !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
}));
|
}));
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="flex border border-gray-300 border-dashed m-1 p-1 rounded-md link-underline">
|
<div class="flex border border-gray-600 border-dashed m-1 p-1 rounded-md link-underline">
|
||||||
{#if $userdetails.img}
|
{#if $userdetails.img}
|
||||||
<img src={$userdetails.img} class="rounded-full w-12 h-12 m-4">
|
<img src={$userdetails.img} class="rounded-full w-12 h-12 m-4">
|
||||||
{:else}
|
{:else}
|
||||||
|
@ -33,14 +33,14 @@
|
||||||
<h3>{$userdetails.name}</h3>
|
<h3>{$userdetails.name}</h3>
|
||||||
{#if description}
|
{#if description}
|
||||||
<FromHtml src={description}/>
|
<FromHtml src={description}/>
|
||||||
<a href={osmConnection.Backend() + "/profile/edit"} target="_blank" class="link-no-underline flex subtle-background items-center w-fit self-end">
|
<a href={osmConnection.Backend() + "/profile/edit"} target="_blank" class="link-no-underline flex items-center self-end">
|
||||||
<PencilAltIcon slot="image" class="p-2 w-8 h-8" />
|
<PencilAltIcon slot="image" class="p-2 w-8 h-8" />
|
||||||
<Tr slot="message" t={Translations.t.userinfo.editDescription} />
|
<Tr slot="message" t={Translations.t.userinfo.editDescription} />
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
{:else}
|
{:else}
|
||||||
<Tr t={Translations.t. userinfo.noDescription} />
|
<Tr t={Translations.t. userinfo.noDescription} />
|
||||||
<a href={osmConnection.Backend() + "/profile/edit"} target="_blank" class="flex subtle-background items-center">
|
<a href={osmConnection.Backend() + "/profile/edit"} target="_blank" class="flex items-center">
|
||||||
<PencilAltIcon slot="image" class="p-2 w-8 h-8" />
|
<PencilAltIcon slot="image" class="p-2 w-8 h-8" />
|
||||||
<Tr slot="message" t={Translations.t.userinfo.noDescriptionCallToAction} />
|
<Tr slot="message" t={Translations.t.userinfo.noDescriptionCallToAction} />
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -68,18 +68,15 @@ export default class CheckBoxes extends InputElement<number[]> {
|
||||||
label.appendChild(inputI.ConstructElement())
|
label.appendChild(inputI.ConstructElement())
|
||||||
label.classList.add("block", "w-full", "p-2", "cursor-pointer", "bg-red")
|
label.classList.add("block", "w-full", "p-2", "cursor-pointer", "bg-red")
|
||||||
|
|
||||||
const wrapper = document.createElement("div")
|
formTag.appendChild(label)
|
||||||
wrapper.classList.add("wrapper", "flex", "w-full", "border", "border-gray-400", "mb-1")
|
|
||||||
wrapper.appendChild(label)
|
|
||||||
formTag.appendChild(wrapper)
|
|
||||||
|
|
||||||
value.addCallbackAndRunD((selectedValues) => {
|
value.addCallbackAndRunD((selectedValues) => {
|
||||||
input.checked = selectedValues.indexOf(i) >= 0
|
input.checked = selectedValues.indexOf(i) >= 0
|
||||||
|
|
||||||
if (input.checked) {
|
if (input.checked) {
|
||||||
wrapper.classList.add("checked")
|
label.classList.add("checked")
|
||||||
} else {
|
} else {
|
||||||
wrapper.classList.remove("checked")
|
label.classList.remove("checked")
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
import Loading from "../../Base/Loading.svelte";
|
import Loading from "../../Base/Loading.svelte";
|
||||||
import type {GlobalFilter} from "../../../Models/GlobalFilter";
|
import type {GlobalFilter} from "../../../Models/GlobalFilter";
|
||||||
import {onDestroy} from "svelte";
|
import {onDestroy} from "svelte";
|
||||||
|
import NextButton from "../../Base/NextButton.svelte";
|
||||||
|
import BackButton from "../../Base/BackButton.svelte";
|
||||||
|
|
||||||
export let coordinate: { lon: number, lat: number };
|
export let coordinate: { lon: number, lat: number };
|
||||||
export let state: SpecialVisualizationState;
|
export let state: SpecialVisualizationState;
|
||||||
|
@ -172,6 +174,7 @@
|
||||||
<EyeIcon slot="image" class="w-8"/>
|
<EyeIcon slot="image" class="w-8"/>
|
||||||
<Tr slot="message" t={Translations.t.general.add.enableLayer.Subs({name: selectedPreset.layer.name})}/>
|
<Tr slot="message" t={Translations.t.general.add.enableLayer.Subs({name: selectedPreset.layer.name})}/>
|
||||||
</SubtleButton>
|
</SubtleButton>
|
||||||
|
|
||||||
<SubtleButton on:click={() => {
|
<SubtleButton on:click={() => {
|
||||||
abort()
|
abort()
|
||||||
state.guistate.openFilterView(selectedPreset.layer) } }>
|
state.guistate.openFilterView(selectedPreset.layer) } }>
|
||||||
|
@ -198,7 +201,7 @@
|
||||||
</SubtleButton>
|
</SubtleButton>
|
||||||
|
|
||||||
|
|
||||||
<SubtleButton on:click={() => {
|
<SubtleButton options={{extraClasses:"secondary"}} on:click={() => {
|
||||||
abort()
|
abort()
|
||||||
state.guistate.openFilterView(selectedPreset.layer)
|
state.guistate.openFilterView(selectedPreset.layer)
|
||||||
}
|
}
|
||||||
|
@ -209,7 +212,11 @@
|
||||||
|
|
||||||
{:else if !confirmedCategory }
|
{:else if !confirmedCategory }
|
||||||
<!-- Second, confirm the category -->
|
<!-- Second, confirm the category -->
|
||||||
<Tr t={Translations.t.general.add.confirmIntro.Subs({title: selectedPreset.preset.title})}></Tr>
|
<h2>
|
||||||
|
<Tr t={Translations.t.general.add.confirmTitle.Subs({title: selectedPreset.preset.title})}/>
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<Tr t={Translations.t.general.add.confirmIntro}/>
|
||||||
|
|
||||||
|
|
||||||
{#if selectedPreset.preset.description}
|
{#if selectedPreset.preset.description}
|
||||||
|
@ -217,13 +224,13 @@
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if selectedPreset.preset.exampleImages}
|
{#if selectedPreset.preset.exampleImages}
|
||||||
<h4>
|
<h3>
|
||||||
{#if selectedPreset.preset.exampleImages.length == 1}
|
{#if selectedPreset.preset.exampleImages.length === 1}
|
||||||
<Tr t={Translations.t.general.example}/>
|
<Tr t={Translations.t.general.example}/>
|
||||||
{:else}
|
{:else}
|
||||||
<Tr t={Translations.t.general.examples }/>
|
<Tr t={Translations.t.general.examples }/>
|
||||||
{/if}
|
{/if}
|
||||||
</h4>
|
</h3>
|
||||||
<span class="flex flex-wrap items-stretch">
|
<span class="flex flex-wrap items-stretch">
|
||||||
{#each selectedPreset.preset.exampleImages as src}
|
{#each selectedPreset.preset.exampleImages as src}
|
||||||
<img {src} class="h-64 m-1 w-auto rounded-lg">
|
<img {src} class="h-64 m-1 w-auto rounded-lg">
|
||||||
|
@ -233,27 +240,30 @@
|
||||||
<TagHint embedIn={tags => t.presetInfo.Subs({tags})} {state}
|
<TagHint embedIn={tags => t.presetInfo.Subs({tags})} {state}
|
||||||
tags={new And(selectedPreset.preset.tags)}></TagHint>
|
tags={new And(selectedPreset.preset.tags)}></TagHint>
|
||||||
|
|
||||||
|
<div class="flex w-full">
|
||||||
|
|
||||||
<SubtleButton on:click={() => confirmedCategory = true}>
|
<BackButton on:click={() => selectedPreset = undefined} clss="w-full">
|
||||||
|
<Tr slot="message" t={t.backToSelect}/>
|
||||||
|
</BackButton>
|
||||||
|
|
||||||
|
<NextButton on:click={() => confirmedCategory = true} clss="primary w-full">
|
||||||
<div slot="image" class="relative">
|
<div slot="image" class="relative">
|
||||||
<FromHtml src={selectedPreset.icon}></FromHtml>
|
<FromHtml src={selectedPreset.icon}></FromHtml>
|
||||||
<img class="absolute bottom-0 right-0 w-4 h-4" src="./assets/svg/confirm.svg">
|
<img class="absolute bottom-0 right-0 w-4 h-4" src="./assets/svg/confirm.svg">
|
||||||
</div>
|
</div>
|
||||||
<div slot="message">
|
<div class="w-full">
|
||||||
<Tr t={selectedPreset.text}></Tr>
|
<Tr t={selectedPreset.text}></Tr>
|
||||||
</div>
|
</div>
|
||||||
</SubtleButton>
|
</NextButton>
|
||||||
<SubtleButton on:click={() => selectedPreset = undefined}>
|
|
||||||
<img src="./assets/svg/back.svg" class="w-8 h-8" slot="image">
|
|
||||||
<div slot="message">
|
|
||||||
<Tr t={t.backToSelect} />
|
|
||||||
</div>
|
</div>
|
||||||
</SubtleButton>
|
|
||||||
{:else if _globalFilter?.length > 0 && _globalFilter?.length > checkedOfGlobalFilters}
|
{:else if _globalFilter?.length > 0 && _globalFilter?.length > checkedOfGlobalFilters}
|
||||||
<Tr t={_globalFilter[checkedOfGlobalFilters].onNewPoint?.safetyCheck}/>
|
<Tr t={_globalFilter[checkedOfGlobalFilters].onNewPoint?.safetyCheck}/>
|
||||||
<SubtleButton on:click={() => {checkedOfGlobalFilters = checkedOfGlobalFilters + 1}}>
|
<SubtleButton on:click={() => {checkedOfGlobalFilters = checkedOfGlobalFilters + 1}}>
|
||||||
<img slot="image" src={_globalFilter[checkedOfGlobalFilters].onNewPoint?.icon ?? "./assets/svg/confirm.svg"} class="w-12 h-12">
|
<img slot="image" src={_globalFilter[checkedOfGlobalFilters].onNewPoint?.icon ?? "./assets/svg/confirm.svg"}
|
||||||
<Tr slot="message" t={_globalFilter[checkedOfGlobalFilters].onNewPoint?.confirmAddNew.Subs({preset: selectedPreset.preset})} />
|
class="w-12 h-12">
|
||||||
|
<Tr slot="message"
|
||||||
|
t={_globalFilter[checkedOfGlobalFilters].onNewPoint?.confirmAddNew.Subs({preset: selectedPreset.preset})}/>
|
||||||
</SubtleButton>
|
</SubtleButton>
|
||||||
<SubtleButton on:click={() => {globalFilter.setData([]); abort()}}>
|
<SubtleButton on:click={() => {globalFilter.setData([]); abort()}}>
|
||||||
<img slot="image" src="./assets/svg/close.svg" class="w-8 h-8"/>
|
<img slot="image" src="./assets/svg/close.svg" class="w-8 h-8"/>
|
||||||
|
@ -263,9 +273,18 @@
|
||||||
<NewPointLocationInput value={preciseCoordinate} snappedTo={snappedToObject} {state} {coordinate}
|
<NewPointLocationInput value={preciseCoordinate} snappedTo={snappedToObject} {state} {coordinate}
|
||||||
targetLayer={selectedPreset.layer}
|
targetLayer={selectedPreset.layer}
|
||||||
snapToLayers={selectedPreset.preset.preciseInput.snapToLayers}></NewPointLocationInput>
|
snapToLayers={selectedPreset.preset.preciseInput.snapToLayers}></NewPointLocationInput>
|
||||||
<SubtleButton on:click={confirm}>
|
<div class="flex">
|
||||||
<span slot="message">Confirm location</span>
|
|
||||||
</SubtleButton>
|
<BackButton on:click={() => selectedPreset = undefined} clss="w-full">
|
||||||
|
<Tr slot="message" t={t.backToSelect}/>
|
||||||
|
</BackButton>
|
||||||
|
|
||||||
|
<NextButton on:click={confirm} clss="primary w-full">
|
||||||
|
<div class="w-full flex justify-end gap-x-2">
|
||||||
|
<Tr t={Translations.t.general.add.confirmLocation}/>
|
||||||
|
</div>
|
||||||
|
</NextButton>
|
||||||
|
</div>
|
||||||
{:else}
|
{:else}
|
||||||
<Loading>Creating point...</Loading>
|
<Loading>Creating point...</Loading>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
import {TagUtils} from "../../../Logic/Tags/TagUtils";
|
import {TagUtils} from "../../../Logic/Tags/TagUtils";
|
||||||
import LayerConfig from "../../../Models/ThemeConfig/LayerConfig";
|
import LayerConfig from "../../../Models/ThemeConfig/LayerConfig";
|
||||||
import FromHtml from "../../Base/FromHtml.svelte";
|
import FromHtml from "../../Base/FromHtml.svelte";
|
||||||
|
import NextButton from "../../Base/NextButton.svelte";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This component lists all the presets and allows the user to select one
|
* This component lists all the presets and allows the user to select one
|
||||||
|
@ -64,25 +65,29 @@
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const dispatch = createEventDispatcher<{ select: {preset: PresetConfig, layer: LayerConfig, icon: string, tags: Record<string, string>} }>();
|
const dispatch = createEventDispatcher<{
|
||||||
|
select: { preset: PresetConfig, layer: LayerConfig, icon: string, tags: Record<string, string> }
|
||||||
|
}>();
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div>
|
<div class="flex flex-col w-full">
|
||||||
|
<h2>
|
||||||
<Tr t={Translations.t.general.add.intro}/>
|
<Tr t={Translations.t.general.add.intro}/>
|
||||||
{#each presets as preset}
|
</h2>
|
||||||
<SubtleButton on:click={() => dispatch("select", preset)}>
|
|
||||||
<FromHtml slot="image" src={preset.icon}></FromHtml>
|
|
||||||
<div slot="message">
|
|
||||||
|
|
||||||
<b>
|
{#each presets as preset}
|
||||||
|
<NextButton on:click={() => dispatch("select", preset)}>
|
||||||
|
<FromHtml slot="image" src={preset.icon}></FromHtml>
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<b class="w-fit">
|
||||||
<Tr t={preset.text}/>
|
<Tr t={preset.text}/>
|
||||||
</b>
|
</b>
|
||||||
{#if preset.description}
|
{#if preset.description}
|
||||||
<Tr t={preset.description}/>
|
<Tr t={preset.description} cls="font-normal"/>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</SubtleButton>
|
</NextButton>
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -201,7 +201,7 @@
|
||||||
|
|
||||||
<slot name="cancel"></slot>
|
<slot name="cancel"></slot>
|
||||||
|
|
||||||
<button on:click={onSave} class={selectedTags === undefined ? "disabled" : "button-shadow"}>
|
<button on:click={onSave} class={(selectedTags === undefined ? "disabled" : "button-shadow")+" primary"}>
|
||||||
<Tr t={Translations.t.general.save}></Tr>
|
<Tr t={Translations.t.general.save}></Tr>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -31,21 +31,21 @@
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<button>
|
<button class="primary">
|
||||||
<ToSvelte construct={Svg.community_svg().SetClass("w-6 h-6")}/>
|
<ToSvelte construct={Svg.community_svg().SetClass("w-6 h-6")}/>
|
||||||
Main action
|
Main action
|
||||||
</button>
|
</button>
|
||||||
<button class="disabled">
|
<button class="primary disabled">
|
||||||
<ToSvelte construct={Svg.community_svg().SetClass("w-6 h-6")}/>
|
<ToSvelte construct={Svg.community_svg().SetClass("w-6 h-6")}/>
|
||||||
Main action (disabled)
|
Main action (disabled)
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<button class="secondary">
|
<button>
|
||||||
<ToSvelte construct={Svg.community_svg().SetClass("w-6 h-6")}/>
|
<ToSvelte construct={Svg.community_svg().SetClass("w-6 h-6")}/>
|
||||||
Secondary action
|
Secondary action
|
||||||
</button>
|
</button>
|
||||||
<button class="secondary disabled">
|
<button class="disabled">
|
||||||
<ToSvelte construct={Svg.community_svg().SetClass("w-6 h-6")}/>
|
<ToSvelte construct={Svg.community_svg().SetClass("w-6 h-6")}/>
|
||||||
Secondary action (disabled)
|
Secondary action (disabled)
|
||||||
</button>
|
</button>
|
||||||
|
@ -79,21 +79,21 @@
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<button>
|
<button class="primary">
|
||||||
<ToSvelte construct={Svg.community_svg().SetClass("w-6 h-6")}/>
|
<ToSvelte construct={Svg.community_svg().SetClass("w-6 h-6")}/>
|
||||||
Main action
|
Main action
|
||||||
</button>
|
</button>
|
||||||
<button class="disabled">
|
<button class="primary disabled">
|
||||||
<ToSvelte construct={Svg.community_svg().SetClass("w-6 h-6")}/>
|
<ToSvelte construct={Svg.community_svg().SetClass("w-6 h-6")}/>
|
||||||
Main action (disabled)
|
Main action (disabled)
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<button class="secondary">
|
<button>
|
||||||
<ToSvelte construct={Svg.community_svg().SetClass("w-6 h-6")}/>
|
<ToSvelte construct={Svg.community_svg().SetClass("w-6 h-6")}/>
|
||||||
Secondary action
|
Secondary action
|
||||||
</button>
|
</button>
|
||||||
<button class="secondary disabled">
|
<button class="disabled">
|
||||||
<ToSvelte construct={Svg.community_svg().SetClass("w-6 h-6")}/>
|
<ToSvelte construct={Svg.community_svg().SetClass("w-6 h-6")}/>
|
||||||
Secondary action (disabled)
|
Secondary action (disabled)
|
||||||
</button>
|
</button>
|
||||||
|
|
|
@ -39,6 +39,8 @@
|
||||||
import SelectedElementTitle from "./BigComponents/SelectedElementTitle.svelte";
|
import SelectedElementTitle from "./BigComponents/SelectedElementTitle.svelte";
|
||||||
import Svg from "../Svg";
|
import Svg from "../Svg";
|
||||||
import {ShareScreen} from "./BigComponents/ShareScreen";
|
import {ShareScreen} from "./BigComponents/ShareScreen";
|
||||||
|
import NextButton from "./Base/NextButton.svelte";
|
||||||
|
import IfNot from "./Base/IfNot.svelte";
|
||||||
|
|
||||||
export let state: ThemeViewState;
|
export let state: ThemeViewState;
|
||||||
let layout = state.layout;
|
let layout = state.layout;
|
||||||
|
@ -83,6 +85,21 @@
|
||||||
let availableLayers = state.availableLayers;
|
let availableLayers = state.availableLayers;
|
||||||
let userdetails = state.osmConnection.userDetails;
|
let userdetails = state.osmConnection.userDetails;
|
||||||
let currentViewLayer = layout.layers.find(l => l.id === "current_view")
|
let currentViewLayer = layout.layers.find(l => l.id === "current_view")
|
||||||
|
|
||||||
|
function jumpToCurrentLocation() {
|
||||||
|
const glstate = state.geolocation.geolocationState
|
||||||
|
if (glstate.currentGPSLocation.data !== undefined) {
|
||||||
|
const c: GeolocationCoordinates = glstate.currentGPSLocation.data
|
||||||
|
state.guistate.themeIsOpened.setData(false)
|
||||||
|
const coor = {lon: c.longitude, lat: c.latitude}
|
||||||
|
state.mapProperties.location.setData(coor)
|
||||||
|
}
|
||||||
|
if (glstate.permission.data !== "granted") {
|
||||||
|
glstate.requestPermission()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
@ -95,7 +112,7 @@
|
||||||
<If condition={state.featureSwitches.featureSwitchSearch}>
|
<If condition={state.featureSwitches.featureSwitchSearch}>
|
||||||
<div class="max-[480px]:w-full float-right mt-1 px-1 sm:m-2">
|
<div class="max-[480px]:w-full float-right mt-1 px-1 sm:m-2">
|
||||||
<Geosearch bounds={state.mapProperties.bounds} perLayer={state.perLayer} {selectedElement}
|
<Geosearch bounds={state.mapProperties.bounds} perLayer={state.perLayer} {selectedElement}
|
||||||
{selectedLayer}></Geosearch>
|
{selectedLayer}/>
|
||||||
</div>
|
</div>
|
||||||
</If>
|
</If>
|
||||||
<div class="float-left m-1 sm:mt-2">
|
<div class="float-left m-1 sm:mt-2">
|
||||||
|
@ -184,7 +201,7 @@
|
||||||
<Tr t={layout.title}/>
|
<Tr t={layout.title}/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div slot="content0">
|
<div class="m-4" slot="content0">
|
||||||
|
|
||||||
<Tr t={layout.description}></Tr>
|
<Tr t={layout.description}></Tr>
|
||||||
<Tr t={Translations.t.general.welcomeExplanation.general}/>
|
<Tr t={Translations.t.general.welcomeExplanation.general}/>
|
||||||
|
@ -198,11 +215,30 @@
|
||||||
loginStatus.SetClass("block mt-6 pt-2 md:border-t-2 border-dotted border-gray-400"),
|
loginStatus.SetClass("block mt-6 pt-2 md:border-t-2 border-dotted border-gray-400"),
|
||||||
-->
|
-->
|
||||||
<Tr t={layout.descriptionTail}></Tr>
|
<Tr t={layout.descriptionTail}></Tr>
|
||||||
<div class="m-x-8">
|
<NextButton clss="primary w-full" on:click={() => state.guistate.themeIsOpened.setData(false)}>
|
||||||
<button class="subtle-background rounded w-full p-4"
|
<div class="flex justify-center w-full text-2xl">
|
||||||
on:click={() => state.guistate.themeIsOpened.setData(false)}>
|
|
||||||
<Tr t={Translations.t.general.openTheMap}/>
|
<Tr t={Translations.t.general.openTheMap}/>
|
||||||
|
</div>
|
||||||
|
</NextButton>
|
||||||
|
|
||||||
|
<div class="flex w-full">
|
||||||
|
<IfNot condition={state.geolocation.geolocationState.permission.map(p => p === "denied")}>
|
||||||
|
<button class="flex w-full gap-x-2 items-center" on:click={jumpToCurrentLocation}>
|
||||||
|
<ToSvelte construct={Svg.crosshair_svg().SetClass("w-8 h-8")}/>
|
||||||
|
<span>
|
||||||
|
Jump to your location
|
||||||
|
</span>
|
||||||
</button>
|
</button>
|
||||||
|
</IfNot>
|
||||||
|
|
||||||
|
<div class="flex flex-col w-full border rounded low-interactive">
|
||||||
|
Search for a location:
|
||||||
|
<Geosearch bounds={state.mapProperties.bounds}
|
||||||
|
on:searchCompleted={() => state.guistate.themeIsOpened.setData(false)}
|
||||||
|
perLayer={state.perLayer}
|
||||||
|
{selectedElement}
|
||||||
|
{selectedLayer}/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -238,7 +274,7 @@
|
||||||
<Tr t={Translations.t.general.download.title}/>
|
<Tr t={Translations.t.general.download.title}/>
|
||||||
</If>
|
</If>
|
||||||
</div>
|
</div>
|
||||||
<div slot="content2">
|
<div class="m-4" slot="content2">
|
||||||
<ToSvelte construct={() => new DownloadPanel(state)}/>
|
<ToSvelte construct={() => new DownloadPanel(state)}/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -270,7 +306,7 @@
|
||||||
<Tr t={Translations.t.general.menu.aboutMapComplete}/>
|
<Tr t={Translations.t.general.menu.aboutMapComplete}/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex flex-col" slot="content0">
|
<div class="flex flex-col m-2 links-as-button links-w-full gap-y-1" slot="content0">
|
||||||
|
|
||||||
<Tr t={Translations.t.general.aboutMapComplete.intro}/>
|
<Tr t={Translations.t.general.aboutMapComplete.intro}/>
|
||||||
|
|
||||||
|
@ -308,12 +344,12 @@
|
||||||
<Tr t={UserRelatedState.usersettingsConfig.title.GetRenderValue({})}/>
|
<Tr t={UserRelatedState.usersettingsConfig.title.GetRenderValue({})}/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div slot="content1">
|
<div class="links-as-button" slot="content1">
|
||||||
<!-- All shown components are set by 'usersettings.json', which happily uses some special visualisations created specifically for it -->
|
<!-- All shown components are set by 'usersettings.json', which happily uses some special visualisations created specifically for it -->
|
||||||
<LoginToggle {state}>
|
<LoginToggle {state}>
|
||||||
<div slot="not-logged-in">
|
<div slot="not-logged-in" class="flex flex-col">
|
||||||
<Tr class="alert" t={Translations.t.userinfo.notLoggedIn}/>
|
<Tr class="alert" t={Translations.t.userinfo.notLoggedIn}/>
|
||||||
<LoginButton osmConnection={state.osmConnection}></LoginButton>
|
<LoginButton osmConnection={state.osmConnection} clss="primary"/>
|
||||||
</div>
|
</div>
|
||||||
<SelectedElementView
|
<SelectedElementView
|
||||||
highlightedRendering={state.guistate.highlightedUserSetting}
|
highlightedRendering={state.guistate.highlightedUserSetting}
|
||||||
|
@ -330,16 +366,20 @@
|
||||||
<ToSvelte construct={Svg.community_svg().SetClass("w-6 h-6")}/>
|
<ToSvelte construct={Svg.community_svg().SetClass("w-6 h-6")}/>
|
||||||
Get in touch with others
|
Get in touch with others
|
||||||
</div>
|
</div>
|
||||||
<CommunityIndexView location={state.mapProperties.location} slot="content2"></CommunityIndexView>
|
<div class="m-2" slot="content2">
|
||||||
|
<CommunityIndexView location={state.mapProperties.location}></CommunityIndexView>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="flex" slot="title3">
|
<div class="flex" slot="title3">
|
||||||
<EyeIcon class="w-6"/>
|
<EyeIcon class="w-6"/>
|
||||||
<Tr t={Translations.t.privacy.title}></Tr>
|
<Tr t={Translations.t.privacy.title}></Tr>
|
||||||
</div>
|
</div>
|
||||||
<ToSvelte construct={() => new PrivacyPolicy()} slot="content3"></ToSvelte>
|
<div class="m-2" slot="content3">
|
||||||
|
<ToSvelte construct={() => new PrivacyPolicy()}/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<Tr slot="title4" t={Translations.t.advanced.title}/>
|
<Tr slot="title4" t={Translations.t.advanced.title}/>
|
||||||
<div class="flex flex-col" slot="content4">
|
<div class="flex flex-col m-2" slot="content4">
|
||||||
<ToSvelte construct={Hotkeys.generateDocumentationDynamic}></ToSvelte>
|
<ToSvelte construct={Hotkeys.generateDocumentationDynamic}></ToSvelte>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="375px" height="375px" viewBox="0 0 375 375" version="1.1">
|
<svg
|
||||||
<g id="surface1">
|
width="375px"
|
||||||
<path style="fill:none;stroke-width:2.645833;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:0.988235;stroke-miterlimit:4;" d="M 22.034555 283.770823 C 22.034555 288.670301 18.062773 292.642358 13.16302 292.642358 C 8.263267 292.642358 4.291486 288.670301 4.291486 283.770823 C 4.291486 278.871071 8.263267 274.899289 13.16302 274.899289 C 18.062773 274.899289 22.034555 278.871071 22.034555 283.770823 Z M 22.034555 283.770823 " transform="matrix(14.173228,0,0,14.173228,0.0000135166,-3834.448583)"/>
|
height="375px"
|
||||||
<path style="fill:none;stroke-width:2.097239;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:0.988235;stroke-miterlimit:4;" d="M 3.28414 283.770823 L 1.041796 283.770823 " transform="matrix(14.173228,0,0,14.173228,0.0000135166,-3834.448583)"/>
|
viewBox="0 0 375 375"
|
||||||
<path style="fill:none;stroke-width:2.116667;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:0.988235;stroke-miterlimit:4;" d="M 25.405787 283.770823 L 23.286365 283.770823 " transform="matrix(14.173228,0,0,14.173228,0.0000135166,-3834.448583)"/>
|
version="1.1"
|
||||||
<path style="fill:none;stroke-width:2.116667;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:0.988235;stroke-miterlimit:4;" d="M 13.229166 295.948823 L 13.229166 293.831329 " transform="matrix(14.173228,0,0,14.173228,0.0000135166,-3834.448583)"/>
|
id="svg15"
|
||||||
<path style="fill:none;stroke-width:2.116667;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:0.988235;stroke-miterlimit:4;" d="M 13.229166 275.057488 L 13.229166 271.612392 " transform="matrix(14.173228,0,0,14.173228,0.0000135166,-3834.448583)"/>
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
<path style="stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 235.789062 187.5 C 235.789062 214.167969 214.167969 235.789062 187.5 235.789062 C 160.832031 235.789062 139.210938 214.167969 139.210938 187.5 C 139.210938 160.832031 160.832031 139.210938 187.5 139.210938 C 214.167969 139.210938 235.789062 160.832031 235.789062 187.5 Z M 235.789062 187.5 "/>
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
</g>
|
<path
|
||||||
|
id="path2"
|
||||||
|
style="color:#000000;fill:#000000;fill-opacity:0.988235;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none"
|
||||||
|
d="M 187.5 0.17578125 A 15 15 0 0 0 172.5 15.175781 L 172.5 43.708984 C 104.37541 50.343145 49.843699 104.61884 42.837891 172.63672 L 14.765625 172.63672 A 14.86235 14.86235 0 0 0 -0.09765625 187.5 A 14.86235 14.86235 0 0 0 14.765625 202.36133 L 42.837891 202.36133 C 49.842792 270.37794 104.37427 324.65648 172.5 331.29102 L 172.5 360.10156 A 15 15 0 0 0 187.5 375.10156 A 15 15 0 0 0 202.5 360.10156 L 202.5 331.08594 C 269.70108 323.65092 323.26953 269.82518 330.26953 202.5 L 360.08203 202.5 A 15 15 0 0 0 375.08203 187.5 A 15 15 0 0 0 360.08203 172.5 L 330.26953 172.5 C 323.26946 105.17266 269.70061 51.348735 202.5 43.914062 L 202.5 15.175781 A 15 15 0 0 0 187.5 0.17578125 z M 186.5625 80.511719 C 245.87515 80.511719 293.55078 128.18741 293.55078 187.5 C 293.55078 246.80822 245.87443 294.48828 186.5625 294.48828 C 127.25056 294.48828 79.574219 246.80822 79.574219 187.5 C 79.574219 128.1874 127.24984 80.511719 186.5625 80.511719 z M 187.5 139.21094 C 160.83203 139.21094 139.21094 160.83203 139.21094 187.5 C 139.21094 214.16797 160.83203 235.78906 187.5 235.78906 C 214.16797 235.78906 235.78906 214.16797 235.78906 187.5 C 235.78906 160.83203 214.16797 139.21094 187.5 139.21094 z " />
|
||||||
</svg>
|
</svg>
|
||||||
|
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.6 KiB |
|
@ -5,48 +5,12 @@
|
||||||
viewBox="0 0 375 375"
|
viewBox="0 0 375 375"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg11"
|
id="svg11"
|
||||||
sodipodi:docname="login.svg"
|
|
||||||
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
<defs
|
<defs
|
||||||
id="defs15" />
|
id="defs15" />
|
||||||
<sodipodi:namedview
|
|
||||||
id="namedview13"
|
|
||||||
pagecolor="#505050"
|
|
||||||
bordercolor="#eeeeee"
|
|
||||||
borderopacity="1"
|
|
||||||
inkscape:pageshadow="0"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="1.3821795"
|
|
||||||
inkscape:cx="194.62016"
|
|
||||||
inkscape:cy="176.89453"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="995"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="0"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg11" />
|
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#000000;stroke-width:39.7328;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
|
id="path2"
|
||||||
d="m 237.15027,94.152359 c 0,0 -92.37109,68.046801 -92.69922,93.515521 -0.32428,25.46887 92.69922,93.7423 92.69922,93.7423"
|
style="color:#000000;fill:#000000;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none"
|
||||||
id="path2" />
|
d="M 53.929688 27.095703 C 32.119816 27.095703 16.970068 40.812733 11.746094 53.177734 C 7.106544 64.159419 7.5344948 73.99011 7.6914062 76.158203 L 8.4628906 188.625 L 7.6914062 301.08984 C 7.5344948 303.25794 7.106544 313.08863 11.746094 324.07031 C 16.970068 336.43531 32.119816 350.1543 53.929688 350.1543 C 87.406 350.1543 140.12695 349.40625 140.12695 349.40625 A 15.663316 15.663316 0 0 0 140.16602 349.40625 C 140.16602 349.40625 151.12665 349.32365 161.72266 342.59961 C 172.31866 335.87554 182.41602 320.93277 182.41602 300.11719 L 182.41602 294.41016 A 15.66175 15.66175 0 0 0 166.75391 278.74805 A 15.66175 15.66175 0 0 0 151.0918 294.41016 L 151.0918 300.11719 C 151.0918 312.48521 147.76532 314.35785 144.9375 316.15234 C 142.10968 317.94684 139.64648 318.08594 139.64648 318.08594 C 139.59848 318.08661 86.922647 318.83008 53.929688 318.83008 C 42.493509 318.83008 42.353165 316.03148 40.599609 311.88086 C 38.846054 307.73024 38.962891 302.7207 38.962891 302.7207 A 15.663316 15.663316 0 0 0 39.013672 301.56836 L 39.787109 188.73242 A 15.66175 15.66175 0 0 0 39.78125 188.625 A 15.66175 15.66175 0 0 0 39.787109 188.51758 L 39.013672 75.681641 A 15.663316 15.663316 0 0 0 38.962891 74.527344 C 38.962891 74.527344 38.846054 69.517805 40.599609 65.367188 C 42.353165 61.216571 42.493508 58.419922 53.929688 58.419922 C 86.922646 58.419922 139.59847 59.161432 139.64648 59.162109 C 139.64648 59.162109 142.10968 59.303163 144.9375 61.097656 C 147.76532 62.892149 151.0918 64.762835 151.0918 77.130859 L 151.0918 82.839844 A 15.66175 15.66175 0 0 0 166.75391 98.5 A 15.66175 15.66175 0 0 0 182.41602 82.839844 L 182.41602 77.130859 C 182.41602 56.315277 172.31866 41.374459 161.72266 34.650391 C 151.12665 27.926322 140.16602 27.84375 140.16602 27.84375 A 15.663316 15.663316 0 0 0 140.12695 27.841797 C 140.12695 27.841797 87.406001 27.095703 53.929688 27.095703 z M 234.94336 74.408203 A 19.8664 19.8664 0 0 0 225.36719 78.158203 C 225.36719 78.158203 201.76359 95.524722 177.85938 116.39258 C 165.90727 126.82651 153.84111 138.11038 144.11523 149.23828 C 134.38936 160.36618 124.82118 169.15316 124.58594 187.41211 A 19.868386 19.868386 0 0 0 124.58594 187.41406 C 124.34949 205.98477 134.08341 214.90837 143.80273 226.0918 C 153.52206 237.27522 165.61857 248.59181 177.61914 259.06055 C 201.62029 279.99802 225.39648 297.42578 225.39648 297.42578 A 19.8664 19.8664 0 0 0 253.16602 293.16406 A 19.8664 19.8664 0 0 0 248.9043 265.39453 C 248.9043 265.39453 226.16776 248.68556 203.73828 229.11914 C 194.28077 220.86885 185.03853 212.15104 177.75586 204.33594 L 359.47461 204.33594 A 16.875 16.875 0 0 0 376.34961 187.46094 A 16.875 16.875 0 0 0 359.47461 170.58594 L 178.46289 170.58594 C 185.70519 162.89528 194.75718 154.38471 203.98828 146.32617 C 226.3516 126.80349 248.93359 110.14648 248.93359 110.14648 A 19.8664 19.8664 0 0 0 253.14453 82.369141 A 19.8664 19.8664 0 0 0 234.94336 74.408203 z " />
|
||||||
<path
|
|
||||||
style="fill:none;stroke:#000000;stroke-width:33.75;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
|
|
||||||
d="M 148.99403,187.46096 H 359.47448"
|
|
||||||
id="path4" />
|
|
||||||
<path
|
|
||||||
style="fill:none;stroke:#000000;stroke-width:31.3235;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
|
|
||||||
d="m 166.75391,294.40998 0,5.70716 c 0,33.18364 -26.84767,33.62896 -26.84767,33.62896 0,0 -52.734369,0.74551 -85.976555,0.74551 -33.246085,0 -30.578116,-33.03127 -30.578116,-33.03127 l 0.773433,-112.8359"
|
|
||||||
id="path8"
|
|
||||||
sodipodi:nodetypes="cscscc" />
|
|
||||||
<path
|
|
||||||
style="fill:none;stroke:#000000;stroke-width:31.3235;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
|
|
||||||
d="m 166.75391,82.8389 v -5.70716 c 0,-33.18364 -26.84767,-33.62896 -26.84767,-33.62896 0,0 -52.734369,-0.74551 -85.976555,-0.74551 -33.246085,0 -30.578116,33.03127 -30.578116,33.03127 l 0.773433,112.8359"
|
|
||||||
id="path1167"
|
|
||||||
sodipodi:nodetypes="cscscc" />
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 3.2 KiB |
166
index.css
166
index.css
|
@ -88,7 +88,7 @@ li::marker {
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
font-size: x-large;
|
font-size: xx-large;
|
||||||
margin-top: 0.6em;
|
margin-top: 0.6em;
|
||||||
margin-bottom: 0.4em;
|
margin-bottom: 0.4em;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
@ -96,7 +96,7 @@ h1 {
|
||||||
|
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
font-size: large;
|
font-size: x-large;
|
||||||
margin-top: 0.5em;
|
margin-top: 0.5em;
|
||||||
margin-bottom: 0.3em;
|
margin-bottom: 0.3em;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
@ -157,31 +157,6 @@ input {
|
||||||
* This very important section defines what the various input elements look like within the 'low-interaction' and 'interactive'-blocks
|
* This very important section defines what the various input elements look like within the 'low-interaction' and 'interactive'-blocks
|
||||||
*/
|
*/
|
||||||
|
|
||||||
button.disabled {
|
|
||||||
cursor: default;
|
|
||||||
border: 2px dashed var(--button-background);
|
|
||||||
background: unset;
|
|
||||||
color: unset;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
button.disabled:hover {
|
|
||||||
cursor: default;
|
|
||||||
border: 2px dashed var(--button-background);
|
|
||||||
background: unset;
|
|
||||||
color: unset;
|
|
||||||
}
|
|
||||||
|
|
||||||
button:hover {
|
|
||||||
border: 2px solid var(--catch-detail-color-contrast);
|
|
||||||
background-color: var(--catch-detail-color);
|
|
||||||
color: var(--catch-detail-foregroundcolor);
|
|
||||||
}
|
|
||||||
|
|
||||||
button:hover img {
|
|
||||||
background: var(--low-interaction-background);
|
|
||||||
border-radius: 100rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
button {
|
button {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
|
@ -192,16 +167,17 @@ button {
|
||||||
padding-right: 0.6rem;
|
padding-right: 0.6rem;
|
||||||
font-size: large;
|
font-size: large;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: var(--button-foreground);
|
|
||||||
background: var(--button-background);
|
|
||||||
/*-- invisible border: rendered on hover*/
|
/*-- invisible border: rendered on hover*/
|
||||||
border: 2px solid var(--button-background);
|
border: 2px solid var(--button-background);
|
||||||
border-radius: 0.5rem;
|
border-radius: 0.5rem;
|
||||||
transition: all 250ms;
|
transition: all 250ms;
|
||||||
--tw-text-opacity: 1;
|
--tw-text-opacity: 1;
|
||||||
--tw-bg-opacity: 1;
|
--tw-bg-opacity: 1;
|
||||||
|
background: var(--low-interaction-background);
|
||||||
|
color: var(--low-interaction-foreground);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
button .button-shadow {
|
button .button-shadow {
|
||||||
box-shadow: 0 5px 10px #88888888;
|
box-shadow: 0 5px 10px #88888888;
|
||||||
}
|
}
|
||||||
|
@ -217,14 +193,71 @@ button.selected svg path {
|
||||||
fill: var(--catch-detail-foregroundcolor) !important;
|
fill: var(--catch-detail-foregroundcolor) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
button svg path {
|
button:not(.no-image-background) svg path {
|
||||||
|
fill: var(--interactive-foreground) !important;;
|
||||||
|
transition: all 250ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
.interactive button {
|
||||||
|
background: var(--interactive-background);
|
||||||
|
color: var(--interactive-foreground);
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
background-color: var(--catch-detail-color);
|
||||||
|
color: var(--catch-detail-foregroundcolor);
|
||||||
|
border: 2px solid var(--catch-detail-color-contrast);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
button:hover:not(.no-image-background) img {
|
||||||
|
background: var(--low-interaction-background);
|
||||||
|
border-radius: 100rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
button:hover:not(.no-image-background) svg path {
|
||||||
|
fill: var(--catch-detail-foregroundcolor) !important;;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.disabled:hover:not(.no-image-background) svg path {
|
||||||
|
fill: var(--low-interaction-foreground) !important;;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
button.primary {
|
||||||
|
color: var(--button-foreground);
|
||||||
|
background: var(--button-background);
|
||||||
|
}
|
||||||
|
|
||||||
|
button.primary:not(.no-image-background) svg path {
|
||||||
fill: var(--button-foreground) !important;;
|
fill: var(--button-foreground) !important;;
|
||||||
|
transition: all 250ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
button.disabled {
|
||||||
|
cursor: default;
|
||||||
|
border: 2px dashed var(--button-background);
|
||||||
|
background: unset;
|
||||||
|
color: unset;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
button.disabled:hover {
|
||||||
|
cursor: default;
|
||||||
|
border: 2px dashed var(--button-background);
|
||||||
|
background: unset;
|
||||||
|
color: unset;
|
||||||
}
|
}
|
||||||
|
|
||||||
.interactive button.disabled svg path {
|
.interactive button.disabled svg path {
|
||||||
fill: var(--interactive-foreground) !important;;
|
fill: var(--interactive-foreground) !important;;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.low-interaction button.disabled svg path {
|
.low-interaction button.disabled svg path {
|
||||||
fill: var(--low-interaction-foreground) !important;;
|
fill: var(--low-interaction-foreground) !important;;
|
||||||
}
|
}
|
||||||
|
@ -233,49 +266,7 @@ button svg path {
|
||||||
fill: var(--foreground-color) !important;
|
fill: var(--foreground-color) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
button.disabled.secondary:hover {
|
|
||||||
background: unset;
|
|
||||||
color: unset;
|
|
||||||
}
|
|
||||||
|
|
||||||
button.secondary {
|
|
||||||
background: var(--low-interaction-background);
|
|
||||||
color: var(--low-interaction-foreground);
|
|
||||||
border-color: var(--button-background);
|
|
||||||
}
|
|
||||||
|
|
||||||
.interactive button.secondary {
|
|
||||||
background: var(--interactive-background);
|
|
||||||
color: var(--interactive-foreground);
|
|
||||||
}
|
|
||||||
|
|
||||||
button.secondary svg path {
|
|
||||||
fill: var(--low-interaction-foreground) !important;
|
|
||||||
transition: all 250ms;
|
|
||||||
}
|
|
||||||
|
|
||||||
button.secondary.disabled {
|
|
||||||
background: unset;
|
|
||||||
color: var(--low-interaction-foreground);
|
|
||||||
}
|
|
||||||
|
|
||||||
button.secondary.disabled svg path {
|
|
||||||
fill: var(--low-interaction-foreground) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
button.secondary:hover {
|
|
||||||
background-color: var(--catch-detail-color);
|
|
||||||
color: var(--catch-detail-foregroundcolor);
|
|
||||||
border-color: var(--catch-detail-color-contrast);
|
|
||||||
}
|
|
||||||
|
|
||||||
button.secondary:hover svg path {
|
|
||||||
fill: var(--catch-detail-foregroundcolor) !important;;
|
|
||||||
}
|
|
||||||
|
|
||||||
button.secondary.disabled:hover svg path {
|
|
||||||
fill: var(--low-interaction-foreground) !important;;
|
|
||||||
}
|
|
||||||
|
|
||||||
label {
|
label {
|
||||||
/**
|
/**
|
||||||
|
@ -317,15 +308,18 @@ label.checked {
|
||||||
border: 2px solid var(--foreground-color);
|
border: 2px solid var(--foreground-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.links-w-full a {
|
||||||
|
display: flex;
|
||||||
.active-links a{
|
column-gap: 0.25rem;
|
||||||
/*
|
padding-left: 0.5rem;
|
||||||
* Let a 'link' mimick a secondary button, but not entirely
|
padding-right: 0.5rem;
|
||||||
*/
|
|
||||||
display: block;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
}
|
||||||
|
|
||||||
|
.links-as-button a{
|
||||||
|
/*
|
||||||
|
* Let a 'link' mimick a button, but not entirely
|
||||||
|
*/
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
background: var(--low-interaction-background);
|
background: var(--low-interaction-background);
|
||||||
|
@ -335,13 +329,13 @@ label.checked {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.active-links a:hover {
|
.links-as-button a:hover {
|
||||||
background-color: var(--interactive-background);
|
background-color: var(--interactive-background);
|
||||||
color: var(--catch-detail-foregroundcolor);
|
color: var(--catch-detail-foregroundcolor);
|
||||||
border-color: var(--catch-detail-color-contrast);
|
border-color: var(--catch-detail-color-contrast);
|
||||||
}
|
}
|
||||||
|
|
||||||
.active-links a:hover svg path {
|
.links-as-button a:hover svg path {
|
||||||
fill: var(--catch-detail-foregroundcolor) !important;
|
fill: var(--catch-detail-foregroundcolor) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -354,12 +348,15 @@ label.checked {
|
||||||
|
|
||||||
.thanks {
|
.thanks {
|
||||||
/* The class to indicate 'operation successful' or 'thank you for contributing' */
|
/* The class to indicate 'operation successful' or 'thank you for contributing' */
|
||||||
background-color: #43d904;
|
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
border-radius: 1em;
|
border-radius: 1em;
|
||||||
margin: 0.25em;
|
margin: 0.25em;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 0.15em 0.3em;
|
padding: 0.25rem;
|
||||||
|
padding-left: 0.5rem;
|
||||||
|
padding-right: 0.5rem;
|
||||||
|
border: 3px dotted #58cd27;
|
||||||
|
background-color: #58cd2722;
|
||||||
}
|
}
|
||||||
|
|
||||||
.alert {
|
.alert {
|
||||||
|
@ -371,6 +368,7 @@ label.checked {
|
||||||
margin: 0.25em;
|
margin: 0.25em;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 0.15em 0.3em;
|
padding: 0.15em 0.3em;
|
||||||
|
border: 2px dotted #ff9143;
|
||||||
}
|
}
|
||||||
|
|
||||||
.subtle {
|
.subtle {
|
||||||
|
|
|
@ -92,7 +92,6 @@
|
||||||
"addNew": "Afegir {category} aquí",
|
"addNew": "Afegir {category} aquí",
|
||||||
"backToSelect": "Selecciona una categoria diferent",
|
"backToSelect": "Selecciona una categoria diferent",
|
||||||
"confirmButton": "Afegir una {category}<br/><div class='alert'>La teva atribució és visible per a tots</div>",
|
"confirmButton": "Afegir una {category}<br/><div class='alert'>La teva atribució és visible per a tots</div>",
|
||||||
"confirmIntro": "<h3>Afegir {title} aquí?</h3>L'element que estàs creant <b>el veurà tothom</b>. Només afegeix coses que realment existeixen. Moltes aplicacions fan servir aquestes dades.",
|
|
||||||
"disableFilters": "Deshabilitar tots els filtres",
|
"disableFilters": "Deshabilitar tots els filtres",
|
||||||
"disableFiltersExplanation": "Alguns elements s'amagaran en passar un filtre",
|
"disableFiltersExplanation": "Alguns elements s'amagaran en passar un filtre",
|
||||||
"hasBeenImported": "Aquest element ja ha estat importat",
|
"hasBeenImported": "Aquest element ja ha estat importat",
|
||||||
|
|
|
@ -92,7 +92,6 @@
|
||||||
"addNew": "Přidat {category}",
|
"addNew": "Přidat {category}",
|
||||||
"backToSelect": "Vyberte jinou kategorii",
|
"backToSelect": "Vyberte jinou kategorii",
|
||||||
"confirmButton": "Přidat kategorii {category}<br/><div class='alert'>Váš příspěvek je viditelný pro všechny</div>",
|
"confirmButton": "Přidat kategorii {category}<br/><div class='alert'>Váš příspěvek je viditelný pro všechny</div>",
|
||||||
"confirmIntro": "<h3>Přidat {title}?</h3>Funkce, kterou zde vytvoříte, bude <b>viditelná pro všechny</b>. Prosíme, přidávejte věci na mapu pouze tehdy, pokud skutečně existují. Tato data využívá mnoho aplikací.",
|
|
||||||
"disableFilters": "Vypnout všechny filtry",
|
"disableFilters": "Vypnout všechny filtry",
|
||||||
"disableFiltersExplanation": "Některé funkce mohou být filtrem skryty",
|
"disableFiltersExplanation": "Některé funkce mohou být filtrem skryty",
|
||||||
"hasBeenImported": "Tato funkce již byla importována",
|
"hasBeenImported": "Tato funkce již byla importována",
|
||||||
|
|
|
@ -44,7 +44,6 @@
|
||||||
"add": {
|
"add": {
|
||||||
"addNew": "Tilføj {category}",
|
"addNew": "Tilføj {category}",
|
||||||
"confirmButton": "Tilføj en {category}<br><div class=\"alert\">Din tilføjelse er synlig for alle</div>",
|
"confirmButton": "Tilføj en {category}<br><div class=\"alert\">Din tilføjelse er synlig for alle</div>",
|
||||||
"confirmIntro": "<h3>Tilføj en {title}?</h3>Punktet du opretter her vil være <b>synligt for alle</b>. Tilføj kun ting til kortet, hvis de virkelig findes. Mange programmer bruger disse data.",
|
|
||||||
"disableFilters": "Slå alle filtre fra",
|
"disableFilters": "Slå alle filtre fra",
|
||||||
"disableFiltersExplanation": "Nogle elementer kan være skjult af et filter",
|
"disableFiltersExplanation": "Nogle elementer kan være skjult af et filter",
|
||||||
"hasBeenImported": "Punktet er allerede importeret",
|
"hasBeenImported": "Punktet er allerede importeret",
|
||||||
|
|
|
@ -92,7 +92,6 @@
|
||||||
"addNew": "{category} hinzufügen",
|
"addNew": "{category} hinzufügen",
|
||||||
"backToSelect": "Wählen Sie eine andere Kategorie",
|
"backToSelect": "Wählen Sie eine andere Kategorie",
|
||||||
"confirmButton": "Eine {category} hinzufügen.<br><div class=\"alert\">Ihre Ergänzung ist für alle sichtbar</div>",
|
"confirmButton": "Eine {category} hinzufügen.<br><div class=\"alert\">Ihre Ergänzung ist für alle sichtbar</div>",
|
||||||
"confirmIntro": "<h3>Einen {title} hinzufügen?</h3>Das Objekt, das Sie erstellen wird <b>für alle sichtbar sein</b>. Bitte nur Dinge hinzufügen, die wirklich existieren. Viele Anwendungen verwenden diese Daten.",
|
|
||||||
"disableFilters": "Alle Filter deaktivieren",
|
"disableFilters": "Alle Filter deaktivieren",
|
||||||
"disableFiltersExplanation": "Einige Elemente können durch einen Filter ausgeblendet sein",
|
"disableFiltersExplanation": "Einige Elemente können durch einen Filter ausgeblendet sein",
|
||||||
"hasBeenImported": "Dieses Objekt wurde bereits importiert",
|
"hasBeenImported": "Dieses Objekt wurde bereits importiert",
|
||||||
|
|
|
@ -98,7 +98,9 @@
|
||||||
"addNew": "Add {category}",
|
"addNew": "Add {category}",
|
||||||
"backToSelect": "Select a different category",
|
"backToSelect": "Select a different category",
|
||||||
"confirmButton": "Add a {category}<br/><div class='alert'>Your addition is visible for everyone</div>",
|
"confirmButton": "Add a {category}<br/><div class='alert'>Your addition is visible for everyone</div>",
|
||||||
"confirmIntro": "<h3>Add a {title}?</h3>The feature you create here will be <b>visible for everyone</b>. Please, only add things on to the map if they truly exist. A lot of applications use this data.",
|
"confirmLocation": "Confirm this location",
|
||||||
|
"confirmTitle": "Add a {title}?",
|
||||||
|
"confirmWarning": "The feature you create here will be <b>visible for everyone</b>. Please, only add things on to the map if they truly exist. A lot of applications use this data.",
|
||||||
"disableFilters": "Disable all filters",
|
"disableFilters": "Disable all filters",
|
||||||
"disableFiltersExplanation": "Some features might be hidden by a filter",
|
"disableFiltersExplanation": "Some features might be hidden by a filter",
|
||||||
"enableLayer": "Enable layer {name}",
|
"enableLayer": "Enable layer {name}",
|
||||||
|
|
|
@ -44,7 +44,6 @@
|
||||||
"add": {
|
"add": {
|
||||||
"addNew": "Añadir {category}",
|
"addNew": "Añadir {category}",
|
||||||
"confirmButton": "Añadir una {category} .<br><div class=\"alert\">Tu contribución es visible para todos</div>",
|
"confirmButton": "Añadir una {category} .<br><div class=\"alert\">Tu contribución es visible para todos</div>",
|
||||||
"confirmIntro": "<h3>Añadir {title} aquí?</h3>El punto que estás creando <b>lo verá todo el mundo</b>. Sólo añade cosas que realmente existan. Muchas aplicaciones usan estos datos.",
|
|
||||||
"disableFilters": "Desactivar todos los filtros",
|
"disableFilters": "Desactivar todos los filtros",
|
||||||
"disableFiltersExplanation": "Algunas características pueden estar ocultas por un filtro",
|
"disableFiltersExplanation": "Algunas características pueden estar ocultas por un filtro",
|
||||||
"hasBeenImported": "Este punto ya ha sido importado",
|
"hasBeenImported": "Este punto ya ha sido importado",
|
||||||
|
|
|
@ -42,7 +42,6 @@
|
||||||
"add": {
|
"add": {
|
||||||
"addNew": "Dagdagan ng {category}",
|
"addNew": "Dagdagan ng {category}",
|
||||||
"confirmButton": "Magdagdag ng {category}<br><div class=\"alert\">Makikita ng lahat ang idinagdag mo</div>",
|
"confirmButton": "Magdagdag ng {category}<br><div class=\"alert\">Makikita ng lahat ang idinagdag mo</div>",
|
||||||
"confirmIntro": "<h3>Mag-dagdag ng {title}?</h3>Ang tampók na ida-dagdag mo ay <b>makikita ng lahat</b>. Paki-usap, mag-dagdag lamang ng mga bagay na tutuong umiiral. Marami pang mga aplikasyon ang gumagamit ng datos na ito.",
|
|
||||||
"disableFilters": "Huwag paganahin ang lahat ng filter",
|
"disableFilters": "Huwag paganahin ang lahat ng filter",
|
||||||
"disableFiltersExplanation": "May mga tampók na maaring nai-tago ng filter",
|
"disableFiltersExplanation": "May mga tampók na maaring nai-tago ng filter",
|
||||||
"hasBeenImported": "Ang bukóng ito ay nai-angkat na",
|
"hasBeenImported": "Ang bukóng ito ay nai-angkat na",
|
||||||
|
|
|
@ -63,7 +63,6 @@
|
||||||
"addNew": "Ajouter {category}",
|
"addNew": "Ajouter {category}",
|
||||||
"backToSelect": "Sélectionner une catégorie différente",
|
"backToSelect": "Sélectionner une catégorie différente",
|
||||||
"confirmButton": "Ajouter un/une {category} ici.<br><div class=\"alert\">Votre ajout sera visible par tout le monde</div>",
|
"confirmButton": "Ajouter un/une {category} ici.<br><div class=\"alert\">Votre ajout sera visible par tout le monde</div>",
|
||||||
"confirmIntro": "<h3>Ajouter un/une {title} ici ?</h3>L’élément que vous ajouterez sera <b>visible par tout le monde</b>. Merci de vous assurer que celui-ci existe réellement. Beaucoup d'autres applications utilisent ces données.",
|
|
||||||
"disableFilters": "Désactiver tous les filtres",
|
"disableFilters": "Désactiver tous les filtres",
|
||||||
"disableFiltersExplanation": "Certains élément peuvent être filtrés",
|
"disableFiltersExplanation": "Certains élément peuvent être filtrés",
|
||||||
"hasBeenImported": "Cet élément a déjà été importé",
|
"hasBeenImported": "Cet élément a déjà été importé",
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
"add": {
|
"add": {
|
||||||
"addNew": "Engadir {category} aquí",
|
"addNew": "Engadir {category} aquí",
|
||||||
"confirmButton": "Engadir {category} aquí",
|
"confirmButton": "Engadir {category} aquí",
|
||||||
"confirmIntro": "<h3>Engadir {title} aquí?</h3>O punto que estás a crear <b>será ollado por todo o mundo</b>. Só engade cousas que realmente existan. Moitas aplicacións empregan estes datos.",
|
|
||||||
"import": {},
|
"import": {},
|
||||||
"intro": "Marcaches un lugar onde non coñecemos os datos.<br/>",
|
"intro": "Marcaches un lugar onde non coñecemos os datos.<br/>",
|
||||||
"layerNotEnabled": "A capa {layer} non está activada. Faino para poder engadir un punto nesta capa",
|
"layerNotEnabled": "A capa {layer} non está activada. Faino para poder engadir un punto nesta capa",
|
||||||
|
|
|
@ -42,7 +42,6 @@
|
||||||
"add": {
|
"add": {
|
||||||
"addNew": "Új {category} hozzáadása",
|
"addNew": "Új {category} hozzáadása",
|
||||||
"confirmButton": "{category} hozzáadása.<br><div class=\"alert\">A hozzáadott objektum mindenki számára látható lesz</div>",
|
"confirmButton": "{category} hozzáadása.<br><div class=\"alert\">A hozzáadott objektum mindenki számára látható lesz</div>",
|
||||||
"confirmIntro": "<h3>Felrajzolsz egy {title} objektumot?</h3>Az itt létrehozandó térképelemet <b>mindenki láthatja majd</b>. Kérjük, csak valóban létező dolgokat rajzolj fel a térképre. Ezeket az adatokat sok alkalmazás használja.",
|
|
||||||
"disableFilters": "Minden szűrő kikapcsolása",
|
"disableFilters": "Minden szűrő kikapcsolása",
|
||||||
"disableFiltersExplanation": "Lehet, hogy a szűrő miatt egyes térképelemek nem látszanak",
|
"disableFiltersExplanation": "Lehet, hogy a szűrő miatt egyes térképelemek nem látszanak",
|
||||||
"hasBeenImported": "Ezt a térképelemet már importálták",
|
"hasBeenImported": "Ezt a térképelemet már importálták",
|
||||||
|
|
|
@ -42,7 +42,6 @@
|
||||||
"add": {
|
"add": {
|
||||||
"addNew": "Tambahkan {category}",
|
"addNew": "Tambahkan {category}",
|
||||||
"confirmButton": "Tambahkan {category}<br><div class=\"alert\">Penambahan Anda akan terlihat oleh semua orang</div>",
|
"confirmButton": "Tambahkan {category}<br><div class=\"alert\">Penambahan Anda akan terlihat oleh semua orang</div>",
|
||||||
"confirmIntro": "<h3>Tambahkan {title}?</h3>Fitur yang Anda buat di sini akan <b>terlihat oleh semua orang</b>. Harap menambahkan sesuatu ke peta hanya jika ia benar-benar ada. Banyak aplikasi menggunakan data ini.",
|
|
||||||
"disableFiltersExplanation": "Beberapa fitur mungkin disembunyikan oleh penyaringan",
|
"disableFiltersExplanation": "Beberapa fitur mungkin disembunyikan oleh penyaringan",
|
||||||
"hasBeenImported": "Fitur ini sudah diimpor",
|
"hasBeenImported": "Fitur ini sudah diimpor",
|
||||||
"import": {
|
"import": {
|
||||||
|
|
|
@ -44,7 +44,6 @@
|
||||||
"add": {
|
"add": {
|
||||||
"addNew": "Aggiungi {category} qua",
|
"addNew": "Aggiungi {category} qua",
|
||||||
"confirmButton": "Aggiungi una {category} qua.<br><div class=\"alert\">La tua aggiunta è visibile a chiunque</div>",
|
"confirmButton": "Aggiungi una {category} qua.<br><div class=\"alert\">La tua aggiunta è visibile a chiunque</div>",
|
||||||
"confirmIntro": "<h3>Aggiungere un {title}?</h3>L'elemento che hai creato qui sarà <b>visibile da chiunque</b>. Per favore, aggiungi sulla mappa solo oggetti realmente esistenti. Molte applicazioni usano questi dati.",
|
|
||||||
"disableFilters": "Disabilita tutti i filtri",
|
"disableFilters": "Disabilita tutti i filtri",
|
||||||
"disableFiltersExplanation": "Alcuni oggetti potrebbero essere nascosti da un filtro",
|
"disableFiltersExplanation": "Alcuni oggetti potrebbero essere nascosti da un filtro",
|
||||||
"hasBeenImported": "Questo elemento è stato già importato",
|
"hasBeenImported": "Questo elemento è stato già importato",
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
"add": {
|
"add": {
|
||||||
"addNew": "ここに新しい {category} を追加します",
|
"addNew": "ここに新しい {category} を追加します",
|
||||||
"confirmButton": "ここに{category}を追加します。<br><div class=\"alert\">追加内容はすべてのユーザーに表示されます。</div>",
|
"confirmButton": "ここに{category}を追加します。<br><div class=\"alert\">追加内容はすべてのユーザーに表示されます。</div>",
|
||||||
"confirmIntro": "<h3>ここに{title}を追加しますか?</h3>ここで作成したポイントは<b>すべてのユーザーに表示されます</b>。本当に存在するものだけをマップに追加してください。多くのアプリケーションがこのデータを使用しています。",
|
|
||||||
"import": {},
|
"import": {},
|
||||||
"intro": "データがまだわからない場所をクリックしました。<br>",
|
"intro": "データがまだわからない場所をクリックしました。<br>",
|
||||||
"layerNotEnabled": "レイヤ{layer}は有効になっていません。このレイヤで点を追加できるようにする",
|
"layerNotEnabled": "レイヤ{layer}は有効になっていません。このレイヤで点を追加できるようにする",
|
||||||
|
|
|
@ -8870,6 +8870,24 @@
|
||||||
},
|
},
|
||||||
"question": "Show user settings debug info?"
|
"question": "Show user settings debug info?"
|
||||||
},
|
},
|
||||||
|
"show_tags": {
|
||||||
|
"mappings": {
|
||||||
|
"0": {
|
||||||
|
"then": "Never show the tags."
|
||||||
|
},
|
||||||
|
"1": {
|
||||||
|
"then": "Show the tags that will be applied once I have made {__userjourney_tagsVisibleAt} changesets"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"then": "Show the tags that will be applied when making a change"
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"then": "Show the tags that will be applied when making a change and show the tags table on every feature"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"question": "Show the raw OpenStreetMap-tags?",
|
||||||
|
"questionHint": "<b>Tags</b> are attributes that every element has. This is the technical data that is stored in the database. You don't need this information to edit with MapComplete, but advanced users might want to use this as reference."
|
||||||
|
},
|
||||||
"translation-completeness": {
|
"translation-completeness": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
"0": {
|
"0": {
|
||||||
|
|
|
@ -75,7 +75,6 @@
|
||||||
"addNew": "Legg til {category} her",
|
"addNew": "Legg til {category} her",
|
||||||
"backToSelect": "Velg en annen kategori",
|
"backToSelect": "Velg en annen kategori",
|
||||||
"confirmButton": "Legg til en {category} her.<br/><div class='alert'>Din endring er synlig for alle</div>",
|
"confirmButton": "Legg til en {category} her.<br/><div class='alert'>Din endring er synlig for alle</div>",
|
||||||
"confirmIntro": "<h3>Legg til {title} her?</h3>Punktet du oppretter her vil være <b>synlig for alle</b>. Kun legg til ting på kartet hvis de virkelig finnes. Mange programmer bruker denne dataen.",
|
|
||||||
"disableFilters": "Skru av alle filtre",
|
"disableFilters": "Skru av alle filtre",
|
||||||
"disableFiltersExplanation": "Det kan hende noen funksjoner er skjult av et filter",
|
"disableFiltersExplanation": "Det kan hende noen funksjoner er skjult av et filter",
|
||||||
"hasBeenImported": "Dette punktet har allerede blitt importert",
|
"hasBeenImported": "Dette punktet har allerede blitt importert",
|
||||||
|
|
|
@ -92,7 +92,8 @@
|
||||||
"addNew": "Voeg {category} toe",
|
"addNew": "Voeg {category} toe",
|
||||||
"backToSelect": "Selecteer een andere categorie",
|
"backToSelect": "Selecteer een andere categorie",
|
||||||
"confirmButton": "Voeg een {category} toe<br><div class=\"alert\">Je toevoeging is voor iedereen zichtbaar</div>",
|
"confirmButton": "Voeg een {category} toe<br><div class=\"alert\">Je toevoeging is voor iedereen zichtbaar</div>",
|
||||||
"confirmIntro": "<h3>Voeg een {title} toe?</h3>Het object dat je toevoegt, is <b>zichtbaar voor iedereen</b>. Veel applicaties gebruiken deze data, voeg dus enkel punten toe die echt bestaan.",
|
"confirmTitle": "Voeg een {title} toe?",
|
||||||
|
"confirmWarning": "Het object dat je toevoegt, is <b>zichtbaar voor iedereen</b>. Veel applicaties gebruiken deze data, voeg dus enkel punten toe die echt bestaan.",
|
||||||
"disableFilters": "Zet alle filters af",
|
"disableFilters": "Zet alle filters af",
|
||||||
"disableFiltersExplanation": "Interessepunten kunnen verborgen zijn door een filter",
|
"disableFiltersExplanation": "Interessepunten kunnen verborgen zijn door een filter",
|
||||||
"hasBeenImported": "Dit object is reeds geïmporteerd",
|
"hasBeenImported": "Dit object is reeds geïmporteerd",
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
"add": {
|
"add": {
|
||||||
"addNew": "Dodaj nową {category} tutaj",
|
"addNew": "Dodaj nową {category} tutaj",
|
||||||
"confirmButton": "Dodaj tutaj {category}.<br><div class=\"alert\">Twój dodatek jest widoczny dla wszystkich</div>",
|
"confirmButton": "Dodaj tutaj {category}.<br><div class=\"alert\">Twój dodatek jest widoczny dla wszystkich</div>",
|
||||||
"confirmIntro": "<h3>Czy dodać tutaj {title}?</h3> Punkt, który tutaj utworzysz, będzie <b>widoczny dla wszystkich<b>. Proszę, dodawaj rzeczy do mapy tylko wtedy, gdy naprawdę istnieją. Wiele aplikacji korzysta z tych danych.</b></b>",
|
|
||||||
"intro": "Kliknąłeś gdzieś, gdzie nie są jeszcze znane żadne dane.<br>",
|
"intro": "Kliknąłeś gdzieś, gdzie nie są jeszcze znane żadne dane.<br>",
|
||||||
"layerNotEnabled": "Warstwa {layer} nie jest włączona. Włącz tę warstwę, aby dodać punkt",
|
"layerNotEnabled": "Warstwa {layer} nie jest włączona. Włącz tę warstwę, aby dodać punkt",
|
||||||
"openLayerControl": "Otwórz okno sterowania warstwą",
|
"openLayerControl": "Otwórz okno sterowania warstwą",
|
||||||
|
|
|
@ -81,7 +81,6 @@
|
||||||
"addNew": "Adicionar {category} aqui",
|
"addNew": "Adicionar {category} aqui",
|
||||||
"backToSelect": "Selecione uma categoria diferente",
|
"backToSelect": "Selecione uma categoria diferente",
|
||||||
"confirmButton": "Adicione uma {category} aqui.<br><div class=\"alert\">Esta adição será visível a todos</div>",
|
"confirmButton": "Adicione uma {category} aqui.<br><div class=\"alert\">Esta adição será visível a todos</div>",
|
||||||
"confirmIntro": "<h3>Adicionar {title} aqui?</h3>O elemento que criar aqui será <b>visível a todos</b>. Por favor, só adicione coisas ao mapa se elas realmente existirem. Muitas aplicações usam estes dados.",
|
|
||||||
"disableFilters": "Desativar todos os filtros",
|
"disableFilters": "Desativar todos os filtros",
|
||||||
"disableFiltersExplanation": "Alguns elementos podem estar escondidos por um filtro",
|
"disableFiltersExplanation": "Alguns elementos podem estar escondidos por um filtro",
|
||||||
"hasBeenImported": "Este elemento já foi importado",
|
"hasBeenImported": "Este elemento já foi importado",
|
||||||
|
|
|
@ -39,7 +39,6 @@
|
||||||
"add": {
|
"add": {
|
||||||
"addNew": "Adicione {category} aqui",
|
"addNew": "Adicione {category} aqui",
|
||||||
"confirmButton": "Adicione uma {category} aqui.<br><div class=\"alert\">Sua adição é visível para todos</div>",
|
"confirmButton": "Adicione uma {category} aqui.<br><div class=\"alert\">Sua adição é visível para todos</div>",
|
||||||
"confirmIntro": "<h3>Adicionar um {title} aqui?</h3>O ponto que você criar aqui será <b>visível para todos</b>. Por favor, só adicione coisas ao mapa se elas realmente existirem. Muitos aplicativos usam esses dados.",
|
|
||||||
"intro": "Você clicou em algum lugar onde ainda não há dados conhecidos.<br>",
|
"intro": "Você clicou em algum lugar onde ainda não há dados conhecidos.<br>",
|
||||||
"layerNotEnabled": "A camada {layer} não está habilitada. Habilite esta camada para adicionar um ponto",
|
"layerNotEnabled": "A camada {layer} não está habilitada. Habilite esta camada para adicionar um ponto",
|
||||||
"openLayerControl": "Abra a caixa de controle da camada",
|
"openLayerControl": "Abra a caixa de controle da camada",
|
||||||
|
|
|
@ -32,7 +32,6 @@
|
||||||
"add": {
|
"add": {
|
||||||
"addNew": "Добавить новую {category} здесь",
|
"addNew": "Добавить новую {category} здесь",
|
||||||
"confirmButton": "Добавить {category} сюда.<br><div class=\"alert\">Ваш вклад будет виден каждому</div>",
|
"confirmButton": "Добавить {category} сюда.<br><div class=\"alert\">Ваш вклад будет виден каждому</div>",
|
||||||
"confirmIntro": "<h3>Добавить {title} сюда?</h3>Точка будет <b>видна всем</b>. Пожалуйста, добавляйте только то, что действительно существует. Много приложений используют эти данные.",
|
|
||||||
"intro": "Вы нажали туда, где ещё нет данных.<br>",
|
"intro": "Вы нажали туда, где ещё нет данных.<br>",
|
||||||
"layerNotEnabled": "Слой {layer} не включён. Включите этот слой чтобы добавить точку",
|
"layerNotEnabled": "Слой {layer} не включён. Включите этот слой чтобы добавить точку",
|
||||||
"openLayerControl": "Открыть панель управления слоями",
|
"openLayerControl": "Открыть панель управления слоями",
|
||||||
|
|
|
@ -55,7 +55,6 @@
|
||||||
"add": {
|
"add": {
|
||||||
"addNew": "在這裡新增新的 {category}",
|
"addNew": "在這裡新增新的 {category}",
|
||||||
"confirmButton": "在此新增 {category}。<br><div class=\"alert\">大家都可以看到您新增的內容</div>",
|
"confirmButton": "在此新增 {category}。<br><div class=\"alert\">大家都可以看到您新增的內容</div>",
|
||||||
"confirmIntro": "<h3>在這裡新增 {title} ?</h3>你在這裡新增的圖徵<b>所有人都看得到</b>。請只有在確定有物件存在的情形下才新增上去,許多應用程式都使用這份資料。",
|
|
||||||
"disableFilters": "關閉所有篩選器",
|
"disableFilters": "關閉所有篩選器",
|
||||||
"disableFiltersExplanation": "有些圖徵可能被篩選器隱藏",
|
"disableFiltersExplanation": "有些圖徵可能被篩選器隱藏",
|
||||||
"hasBeenImported": "這個圖徵已經被匯入了",
|
"hasBeenImported": "這個圖徵已經被匯入了",
|
||||||
|
|
|
@ -909,10 +909,6 @@ video {
|
||||||
margin-bottom: 2rem;
|
margin-bottom: 2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mb-1 {
|
|
||||||
margin-bottom: 0.25rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.-ml-6 {
|
.-ml-6 {
|
||||||
margin-left: -1.5rem;
|
margin-left: -1.5rem;
|
||||||
}
|
}
|
||||||
|
@ -929,6 +925,10 @@ video {
|
||||||
margin-top: -3rem;
|
margin-top: -3rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mb-1 {
|
||||||
|
margin-bottom: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
.box-border {
|
.box-border {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
@ -1281,6 +1281,11 @@ video {
|
||||||
gap: 1rem;
|
gap: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.gap-x-2 {
|
||||||
|
-webkit-column-gap: 0.5rem;
|
||||||
|
column-gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
.gap-y-1 {
|
.gap-y-1 {
|
||||||
row-gap: 0.25rem;
|
row-gap: 0.25rem;
|
||||||
}
|
}
|
||||||
|
@ -1445,9 +1450,9 @@ video {
|
||||||
border-color: rgb(252 165 165 / var(--tw-border-opacity));
|
border-color: rgb(252 165 165 / var(--tw-border-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
.border-lime-500 {
|
.border-gray-600 {
|
||||||
--tw-border-opacity: 1;
|
--tw-border-opacity: 1;
|
||||||
border-color: rgb(132 204 22 / var(--tw-border-opacity));
|
border-color: rgb(75 85 99 / var(--tw-border-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
.border-opacity-50 {
|
.border-opacity-50 {
|
||||||
|
@ -1537,16 +1542,16 @@ video {
|
||||||
padding-bottom: 1rem;
|
padding-bottom: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.px-2 {
|
|
||||||
padding-left: 0.5rem;
|
|
||||||
padding-right: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.px-3 {
|
.px-3 {
|
||||||
padding-left: 0.75rem;
|
padding-left: 0.75rem;
|
||||||
padding-right: 0.75rem;
|
padding-right: 0.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.px-2 {
|
||||||
|
padding-left: 0.5rem;
|
||||||
|
padding-right: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
.px-4 {
|
.px-4 {
|
||||||
padding-left: 1rem;
|
padding-left: 1rem;
|
||||||
padding-right: 1rem;
|
padding-right: 1rem;
|
||||||
|
@ -1671,6 +1676,10 @@ video {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.font-normal {
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
.uppercase {
|
.uppercase {
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
}
|
}
|
||||||
|
@ -1812,12 +1821,6 @@ video {
|
||||||
transition-duration: 150ms;
|
transition-duration: 150ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
.transition-\[color\2c background-color\2c box-shadow\] {
|
|
||||||
transition-property: color,background-color,box-shadow;
|
|
||||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
||||||
transition-duration: 150ms;
|
|
||||||
}
|
|
||||||
|
|
||||||
.transition-colors {
|
.transition-colors {
|
||||||
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
||||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
|
@ -1830,6 +1833,12 @@ video {
|
||||||
transition-duration: 150ms;
|
transition-duration: 150ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.transition-\[color\2c background-color\2c box-shadow\] {
|
||||||
|
transition-property: color,background-color,box-shadow;
|
||||||
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
|
transition-duration: 150ms;
|
||||||
|
}
|
||||||
|
|
||||||
.ease-in-out {
|
.ease-in-out {
|
||||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
}
|
}
|
||||||
|
@ -1910,14 +1919,14 @@ li::marker {
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
font-size: x-large;
|
font-size: xx-large;
|
||||||
margin-top: 0.6em;
|
margin-top: 0.6em;
|
||||||
margin-bottom: 0.4em;
|
margin-bottom: 0.4em;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
font-size: large;
|
font-size: x-large;
|
||||||
margin-top: 0.5em;
|
margin-top: 0.5em;
|
||||||
margin-bottom: 0.3em;
|
margin-bottom: 0.3em;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
@ -1976,32 +1985,6 @@ input {
|
||||||
* This very important section defines what the various input elements look like within the 'low-interaction' and 'interactive'-blocks
|
* This very important section defines what the various input elements look like within the 'low-interaction' and 'interactive'-blocks
|
||||||
*/
|
*/
|
||||||
|
|
||||||
button.disabled {
|
|
||||||
cursor: default;
|
|
||||||
border: 2px dashed var(--button-background);
|
|
||||||
background: unset;
|
|
||||||
color: unset;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
button.disabled:hover {
|
|
||||||
cursor: default;
|
|
||||||
border: 2px dashed var(--button-background);
|
|
||||||
background: unset;
|
|
||||||
color: unset;
|
|
||||||
}
|
|
||||||
|
|
||||||
button:hover {
|
|
||||||
border: 2px solid var(--catch-detail-color-contrast);
|
|
||||||
background-color: var(--catch-detail-color);
|
|
||||||
color: var(--catch-detail-foregroundcolor);
|
|
||||||
}
|
|
||||||
|
|
||||||
button:hover img {
|
|
||||||
background: var(--low-interaction-background);
|
|
||||||
border-radius: 100rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
button {
|
button {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
line-height: 1.25rem;
|
line-height: 1.25rem;
|
||||||
|
@ -2011,14 +1994,14 @@ button {
|
||||||
padding-right: 0.6rem;
|
padding-right: 0.6rem;
|
||||||
font-size: large;
|
font-size: large;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: var(--button-foreground);
|
|
||||||
background: var(--button-background);
|
|
||||||
/*-- invisible border: rendered on hover*/
|
/*-- invisible border: rendered on hover*/
|
||||||
border: 2px solid var(--button-background);
|
border: 2px solid var(--button-background);
|
||||||
border-radius: 0.5rem;
|
border-radius: 0.5rem;
|
||||||
transition: all 250ms;
|
transition: all 250ms;
|
||||||
--tw-text-opacity: 1;
|
--tw-text-opacity: 1;
|
||||||
--tw-bg-opacity: 1;
|
--tw-bg-opacity: 1;
|
||||||
|
background: var(--low-interaction-background);
|
||||||
|
color: var(--low-interaction-foreground);
|
||||||
}
|
}
|
||||||
|
|
||||||
button .button-shadow {
|
button .button-shadow {
|
||||||
|
@ -2035,8 +2018,58 @@ button.selected svg path {
|
||||||
fill: var(--catch-detail-foregroundcolor) !important;
|
fill: var(--catch-detail-foregroundcolor) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
button svg path {
|
button:not(.no-image-background) svg path {
|
||||||
|
fill: var(--interactive-foreground) !important;
|
||||||
|
transition: all 250ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
.interactive button {
|
||||||
|
background: var(--interactive-background);
|
||||||
|
color: var(--interactive-foreground);
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
background-color: var(--catch-detail-color);
|
||||||
|
color: var(--catch-detail-foregroundcolor);
|
||||||
|
border: 2px solid var(--catch-detail-color-contrast);
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover:not(.no-image-background) img {
|
||||||
|
background: var(--low-interaction-background);
|
||||||
|
border-radius: 100rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover:not(.no-image-background) svg path {
|
||||||
|
fill: var(--catch-detail-foregroundcolor) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.disabled:hover:not(.no-image-background) svg path {
|
||||||
|
fill: var(--low-interaction-foreground) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.primary {
|
||||||
|
color: var(--button-foreground);
|
||||||
|
background: var(--button-background);
|
||||||
|
}
|
||||||
|
|
||||||
|
button.primary:not(.no-image-background) svg path {
|
||||||
fill: var(--button-foreground) !important;
|
fill: var(--button-foreground) !important;
|
||||||
|
transition: all 250ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.disabled {
|
||||||
|
cursor: default;
|
||||||
|
border: 2px dashed var(--button-background);
|
||||||
|
background: unset;
|
||||||
|
color: unset;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.disabled:hover {
|
||||||
|
cursor: default;
|
||||||
|
border: 2px dashed var(--button-background);
|
||||||
|
background: unset;
|
||||||
|
color: unset;
|
||||||
}
|
}
|
||||||
|
|
||||||
.interactive button.disabled svg path {
|
.interactive button.disabled svg path {
|
||||||
|
@ -2051,50 +2084,6 @@ button svg path {
|
||||||
fill: var(--foreground-color) !important;
|
fill: var(--foreground-color) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
button.disabled.secondary:hover {
|
|
||||||
background: unset;
|
|
||||||
color: unset;
|
|
||||||
}
|
|
||||||
|
|
||||||
button.secondary {
|
|
||||||
background: var(--low-interaction-background);
|
|
||||||
color: var(--low-interaction-foreground);
|
|
||||||
border-color: var(--button-background);
|
|
||||||
}
|
|
||||||
|
|
||||||
.interactive button.secondary {
|
|
||||||
background: var(--interactive-background);
|
|
||||||
color: var(--interactive-foreground);
|
|
||||||
}
|
|
||||||
|
|
||||||
button.secondary svg path {
|
|
||||||
fill: var(--low-interaction-foreground) !important;
|
|
||||||
transition: all 250ms;
|
|
||||||
}
|
|
||||||
|
|
||||||
button.secondary.disabled {
|
|
||||||
background: unset;
|
|
||||||
color: var(--low-interaction-foreground);
|
|
||||||
}
|
|
||||||
|
|
||||||
button.secondary.disabled svg path {
|
|
||||||
fill: var(--low-interaction-foreground) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
button.secondary:hover {
|
|
||||||
background-color: var(--catch-detail-color);
|
|
||||||
color: var(--catch-detail-foregroundcolor);
|
|
||||||
border-color: var(--catch-detail-color-contrast);
|
|
||||||
}
|
|
||||||
|
|
||||||
button.secondary:hover svg path {
|
|
||||||
fill: var(--catch-detail-foregroundcolor) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
button.secondary.disabled:hover svg path {
|
|
||||||
fill: var(--low-interaction-foreground) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
label {
|
label {
|
||||||
/**
|
/**
|
||||||
* Label should _contain_ the input element
|
* Label should _contain_ the input element
|
||||||
|
@ -2135,13 +2124,19 @@ label.checked {
|
||||||
border: 2px solid var(--foreground-color);
|
border: 2px solid var(--foreground-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.active-links a{
|
.links-w-full a {
|
||||||
/*
|
display: flex;
|
||||||
* Let a 'link' mimick a secondary button, but not entirely
|
-webkit-column-gap: 0.25rem;
|
||||||
*/
|
column-gap: 0.25rem;
|
||||||
display: block;
|
padding-left: 0.5rem;
|
||||||
|
padding-right: 0.5rem;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
}
|
||||||
|
|
||||||
|
.links-as-button a{
|
||||||
|
/*
|
||||||
|
* Let a 'link' mimick a button, but not entirely
|
||||||
|
*/
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
background: var(--low-interaction-background);
|
background: var(--low-interaction-background);
|
||||||
|
@ -2150,13 +2145,13 @@ label.checked {
|
||||||
border-radius: 0.5rem;
|
border-radius: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.active-links a:hover {
|
.links-as-button a:hover {
|
||||||
background-color: var(--interactive-background);
|
background-color: var(--interactive-background);
|
||||||
color: var(--catch-detail-foregroundcolor);
|
color: var(--catch-detail-foregroundcolor);
|
||||||
border-color: var(--catch-detail-color-contrast);
|
border-color: var(--catch-detail-color-contrast);
|
||||||
}
|
}
|
||||||
|
|
||||||
.active-links a:hover svg path {
|
.links-as-button a:hover svg path {
|
||||||
fill: var(--catch-detail-foregroundcolor) !important;
|
fill: var(--catch-detail-foregroundcolor) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2169,12 +2164,15 @@ label.checked {
|
||||||
|
|
||||||
.thanks {
|
.thanks {
|
||||||
/* The class to indicate 'operation successful' or 'thank you for contributing' */
|
/* The class to indicate 'operation successful' or 'thank you for contributing' */
|
||||||
background-color: #43d904;
|
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
border-radius: 1em;
|
border-radius: 1em;
|
||||||
margin: 0.25em;
|
margin: 0.25em;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 0.15em 0.3em;
|
padding: 0.25rem;
|
||||||
|
padding-left: 0.5rem;
|
||||||
|
padding-right: 0.5rem;
|
||||||
|
border: 3px dotted #58cd27;
|
||||||
|
background-color: #58cd2722;
|
||||||
}
|
}
|
||||||
|
|
||||||
.alert {
|
.alert {
|
||||||
|
@ -2186,6 +2184,7 @@ label.checked {
|
||||||
margin: 0.25em;
|
margin: 0.25em;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 0.15em 0.3em;
|
padding: 0.15em 0.3em;
|
||||||
|
border: 2px dotted #ff9143;
|
||||||
}
|
}
|
||||||
|
|
||||||
.subtle {
|
.subtle {
|
||||||
|
|
Loading…
Reference in a new issue