forked from MapComplete/MapComplete
Chore: housekeeping
This commit is contained in:
parent
18e3e6f806
commit
a3a7e74f56
94 changed files with 1273 additions and 1080 deletions
|
|
@ -149,14 +149,13 @@
|
|||
</LoginToggle>
|
||||
|
||||
<a
|
||||
class="flex button"
|
||||
class="button flex"
|
||||
href={window.location.protocol + "//" + window.location.host + "/studio.html"}
|
||||
>
|
||||
<Pencil class="mr-2 h-6 w-6" />
|
||||
<Tr t={Translations.t.general.morescreen.createYourOwnTheme} />
|
||||
</a>
|
||||
|
||||
|
||||
<h3 id="about">
|
||||
<Tr t={Translations.t.index.about} />
|
||||
</h3>
|
||||
|
|
@ -173,8 +172,8 @@
|
|||
</a>
|
||||
|
||||
<a class="flex" href={Utils.OsmChaLinkFor(7)} target="_blank">
|
||||
<ArrowTrendingUp class="mr-2 h-6 w-6"/>
|
||||
<Tr t={Translations.t.general.attribution.openOsmchaLastWeek}/>
|
||||
<ArrowTrendingUp class="mr-2 h-6 w-6" />
|
||||
<Tr t={Translations.t.general.attribution.openOsmchaLastWeek} />
|
||||
</a>
|
||||
|
||||
<a class="flex" href="https://en.osm.town/@MapComplete" target="_blank">
|
||||
|
|
|
|||
|
|
@ -41,14 +41,14 @@
|
|||
</slot>
|
||||
{:else if !silentFail && $loadingStatus === "error"}
|
||||
<slot name="error">
|
||||
<div class="alert flex items-center flex-col">
|
||||
<div class="max-w-64 flex items-center ">
|
||||
<Invalid class="m-2 h-8 w-8 shrink-0" />
|
||||
<Tr t={offlineModes[$apiState] ?? t.loginFailedUnreachableMode} />
|
||||
</div>
|
||||
<div class="alert flex flex-col items-center">
|
||||
<div class="max-w-64 flex items-center">
|
||||
<Invalid class="m-2 h-8 w-8 shrink-0" />
|
||||
<Tr t={offlineModes[$apiState] ?? t.loginFailedUnreachableMode} />
|
||||
</div>
|
||||
<button class="h-fit" on:click={() => state.osmConnection.AttemptLogin()}>
|
||||
<ArrowPath class="w-6 h-6"/>
|
||||
<Tr t={t.retry}/>
|
||||
<ArrowPath class="h-6 w-6" />
|
||||
<Tr t={t.retry} />
|
||||
</button>
|
||||
</div>
|
||||
</slot>
|
||||
|
|
|
|||
|
|
@ -40,9 +40,9 @@ export default class CopyrightPanel extends Combine {
|
|||
const t = Translations.t.general.attribution
|
||||
const layoutToUse = state.layout
|
||||
|
||||
const iconAttributions: BaseUIElement[] = Utils.Dedup(layoutToUse
|
||||
.getUsedImages())
|
||||
.map(CopyrightPanel.IconAttribution)
|
||||
const iconAttributions: BaseUIElement[] = Utils.Dedup(layoutToUse.getUsedImages()).map(
|
||||
CopyrightPanel.IconAttribution
|
||||
)
|
||||
|
||||
let maintainer: BaseUIElement = undefined
|
||||
if (layoutToUse.credits !== undefined && layoutToUse.credits !== "") {
|
||||
|
|
|
|||
|
|
@ -151,10 +151,10 @@
|
|||
</div>
|
||||
|
||||
{#if Utils.isIframe}
|
||||
<div class="flex justify-end link-underline">
|
||||
<a href="https://mapcomplete.org" target="_blank">
|
||||
<Tr t={Translations.t.general.poweredByMapComplete}/>
|
||||
</a>
|
||||
<div class="link-underline flex justify-end">
|
||||
<a href="https://mapcomplete.org" target="_blank">
|
||||
<Tr t={Translations.t.general.poweredByMapComplete} />
|
||||
</a>
|
||||
</div>
|
||||
{:else}
|
||||
<If condition={state.featureSwitches.featureSwitchBackToThemeOverview}>
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@
|
|||
let knownImages = comparisonState.bindD((ct) => ct.knownImages)
|
||||
let propertyKeysExternal = comparisonState.mapD((ct) => ct.propertyKeysExternal)
|
||||
let hasDifferencesAtStart = comparisonState.mapD((ct) => ct.hasDifferencesAtStart)
|
||||
let enableLogin= state.featureSwitches.featureSwitchEnableLogin
|
||||
let enableLogin = state.featureSwitches.featureSwitchEnableLogin
|
||||
</script>
|
||||
|
||||
{#if !$sourceUrl || !$enableLogin}
|
||||
|
|
|
|||
|
|
@ -29,10 +29,10 @@
|
|||
</script>
|
||||
|
||||
{#if enableLogin.data}
|
||||
<AccordionSingle>
|
||||
<span slot="header" class="p-2 text-base">
|
||||
<Tr t={t.seeNearby} />
|
||||
</span>
|
||||
<NearbyImages {tags} {state} {lon} {lat} {feature} {linkable} {layer} />
|
||||
</AccordionSingle>
|
||||
{/if}
|
||||
<AccordionSingle>
|
||||
<span slot="header" class="p-2 text-base">
|
||||
<Tr t={t.seeNearby} />
|
||||
</span>
|
||||
<NearbyImages {tags} {state} {lon} {lat} {feature} {linkable} {layer} />
|
||||
</AccordionSingle>
|
||||
{/if}
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@
|
|||
<LoginButton clss="small w-full" osmConnection={state.osmConnection} slot="not-logged-in">
|
||||
<Tr t={Translations.t.image.pleaseLogin} />
|
||||
</LoginButton>
|
||||
<div class="flex flex-col my-4">
|
||||
<div class="my-4 flex flex-col">
|
||||
<UploadingImageCounter {state} {tags} />
|
||||
{#each $errors as error}
|
||||
<Tr t={error} cls="alert" />
|
||||
|
|
|
|||
|
|
@ -934,7 +934,7 @@ export class ToTextualDescription {
|
|||
ranges: OpeningRange[][]
|
||||
): Translation | undefined {
|
||||
const t = Translations.t.general.opening_hours
|
||||
if(!ranges){
|
||||
if (!ranges) {
|
||||
return undefined
|
||||
}
|
||||
if (!ranges?.some((r) => r.length > 0)) {
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ export default class OpeningHoursVisualization extends Toggle {
|
|||
// The normal case: we have items for the coming days
|
||||
return OpeningHoursVisualization.ConstructVizTable(oh, ranges, lastMonday)
|
||||
}
|
||||
// The special case that range is completely empty
|
||||
// The special case that range is completely empty
|
||||
return OpeningHoursVisualization.ShowSpecialCase(oh)
|
||||
}
|
||||
|
||||
|
|
@ -303,6 +303,8 @@ export default class OpeningHoursVisualization extends Toggle {
|
|||
opensAtDate.getHours(),
|
||||
opensAtDate.getMinutes()
|
||||
)}`
|
||||
return Translations.t.general.opening_hours.closed_until.Subs({ date: opensAtDate.toLocaleString() })
|
||||
return Translations.t.general.opening_hours.closed_until.Subs({
|
||||
date: opensAtDate.toLocaleString(),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,7 +64,9 @@ export class CloseNoteButton implements SpecialVisualization {
|
|||
zoomButton: string
|
||||
} = <any>Utils.ParseVisArgs(this.args, args)
|
||||
|
||||
let icon: BaseUIElement = new SvelteUIElement(Icon, {icon: params.icon ?? "checkmark.svg"})
|
||||
let icon: BaseUIElement = new SvelteUIElement(Icon, {
|
||||
icon: params.icon ?? "checkmark.svg",
|
||||
})
|
||||
let textToShow = t.closeNote
|
||||
if ((params.text ?? "") !== "") {
|
||||
textToShow = Translations.T(args[0])
|
||||
|
|
|
|||
|
|
@ -110,7 +110,10 @@
|
|||
</SubtleButton>
|
||||
</div>
|
||||
{:else}
|
||||
<form class="low-interaction rounded-sm p-2 flex flex-col" on:submit|preventDefault={uploadNote}>
|
||||
<form
|
||||
class="low-interaction flex flex-col rounded-sm p-2"
|
||||
on:submit|preventDefault={uploadNote}
|
||||
>
|
||||
<label class="neutral-label">
|
||||
<Tr t={Translations.t.notes.createNoteIntro} />
|
||||
<div class="w-full p-1">
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ export default class NoteCommentElement extends Combine {
|
|||
}
|
||||
|
||||
const userinfo = Stores.FromPromise(
|
||||
Utils.downloadJsonCached<{user: { img: { href: string } }}>(
|
||||
Utils.downloadJsonCached<{ user: { img: { href: string } } }>(
|
||||
"https://api.openstreetmap.org/api/0.6/user/" + comment.uid,
|
||||
24 * 60 * 60 * 1000
|
||||
)
|
||||
|
|
@ -122,7 +122,7 @@ export default class NoteCommentElement extends Combine {
|
|||
public static addCommentTo(
|
||||
txt: string,
|
||||
tags: UIEventSource<any>,
|
||||
state: { osmConnection: {userDetails: Store<{ name: string, uid: number }>} }
|
||||
state: { osmConnection: { userDetails: Store<{ name: string; uid: number }> } }
|
||||
) {
|
||||
const comments: any[] = JSON.parse(tags.data["comments"])
|
||||
const username = state.osmConnection.userDetails.data.name
|
||||
|
|
|
|||
|
|
@ -111,93 +111,97 @@
|
|||
</script>
|
||||
|
||||
{#if $loginEnabled}
|
||||
<div
|
||||
bind:this={questionboxElem}
|
||||
aria-live="polite"
|
||||
class="marker-questionbox-root"
|
||||
class:hidden={$questionsToAsk.length === 0 && skipped === 0 && answered === 0}
|
||||
>
|
||||
{#if $allQuestionsToAsk.length === 0}
|
||||
{#if skipped + answered > 0}
|
||||
<div class="thanks">
|
||||
<Tr t={Translations.t.general.questionBox.done} />
|
||||
</div>
|
||||
{#if answered === 0}
|
||||
{#if skipped === 1}
|
||||
<Tr t={Translations.t.general.questionBox.skippedOne} />
|
||||
{:else}
|
||||
<Tr t={Translations.t.general.questionBox.skippedMultiple.Subs({ skipped })} />
|
||||
{/if}
|
||||
{:else if answered === 1}
|
||||
{#if skipped === 0}
|
||||
<Tr t={Translations.t.general.questionBox.answeredOne} />
|
||||
{:else if skipped === 1}
|
||||
<Tr t={Translations.t.general.questionBox.answeredOneSkippedOne} />
|
||||
{:else}
|
||||
<Tr t={Translations.t.general.questionBox.answeredOneSkippedMultiple.Subs({ skipped })} />
|
||||
{/if}
|
||||
{:else if skipped === 0}
|
||||
<Tr t={Translations.t.general.questionBox.answeredMultiple.Subs({ answered })} />
|
||||
{:else if skipped === 1}
|
||||
<Tr t={Translations.t.general.questionBox.answeredMultipleSkippedOne.Subs({ answered })} />
|
||||
{:else}
|
||||
<Tr
|
||||
t={Translations.t.general.questionBox.answeredMultipleSkippedMultiple.Subs({
|
||||
answered,
|
||||
skipped,
|
||||
})}
|
||||
/>
|
||||
{/if}
|
||||
|
||||
{#if skipped > 0}
|
||||
<button
|
||||
class="w-full"
|
||||
on:click={() => {
|
||||
skippedQuestions.setData(new Set())
|
||||
skipped = 0
|
||||
}}
|
||||
>
|
||||
<Tr t={Translations.t.general.questionBox.reactivate} />
|
||||
</button>
|
||||
{/if}
|
||||
{/if}
|
||||
{:else}
|
||||
<div>
|
||||
{#if $showAllQuestionsAtOnce}
|
||||
<div class="flex flex-col gap-y-1">
|
||||
{#each $allQuestionsToAsk as question (question.id)}
|
||||
<TagRenderingQuestionDynamic
|
||||
config={question}
|
||||
{tags}
|
||||
{selectedElement}
|
||||
{state}
|
||||
{layer}
|
||||
/>
|
||||
{/each}
|
||||
<div
|
||||
bind:this={questionboxElem}
|
||||
aria-live="polite"
|
||||
class="marker-questionbox-root"
|
||||
class:hidden={$questionsToAsk.length === 0 && skipped === 0 && answered === 0}
|
||||
>
|
||||
{#if $allQuestionsToAsk.length === 0}
|
||||
{#if skipped + answered > 0}
|
||||
<div class="thanks">
|
||||
<Tr t={Translations.t.general.questionBox.done} />
|
||||
</div>
|
||||
{:else if $firstQuestion !== undefined}
|
||||
<TagRenderingQuestionDynamic
|
||||
config={$firstQuestion}
|
||||
{layer}
|
||||
{selectedElement}
|
||||
{state}
|
||||
{tags}
|
||||
on:saved={() => {
|
||||
skip($firstQuestion, true)
|
||||
}}
|
||||
>
|
||||
{#if answered === 0}
|
||||
{#if skipped === 1}
|
||||
<Tr t={Translations.t.general.questionBox.skippedOne} />
|
||||
{:else}
|
||||
<Tr t={Translations.t.general.questionBox.skippedMultiple.Subs({ skipped })} />
|
||||
{/if}
|
||||
{:else if answered === 1}
|
||||
{#if skipped === 0}
|
||||
<Tr t={Translations.t.general.questionBox.answeredOne} />
|
||||
{:else if skipped === 1}
|
||||
<Tr t={Translations.t.general.questionBox.answeredOneSkippedOne} />
|
||||
{:else}
|
||||
<Tr
|
||||
t={Translations.t.general.questionBox.answeredOneSkippedMultiple.Subs({ skipped })}
|
||||
/>
|
||||
{/if}
|
||||
{:else if skipped === 0}
|
||||
<Tr t={Translations.t.general.questionBox.answeredMultiple.Subs({ answered })} />
|
||||
{:else if skipped === 1}
|
||||
<Tr
|
||||
t={Translations.t.general.questionBox.answeredMultipleSkippedOne.Subs({ answered })}
|
||||
/>
|
||||
{:else}
|
||||
<Tr
|
||||
t={Translations.t.general.questionBox.answeredMultipleSkippedMultiple.Subs({
|
||||
answered,
|
||||
skipped,
|
||||
})}
|
||||
/>
|
||||
{/if}
|
||||
|
||||
{#if skipped > 0}
|
||||
<button
|
||||
class="secondary"
|
||||
class="w-full"
|
||||
on:click={() => {
|
||||
skip($firstQuestion)
|
||||
skippedQuestions.setData(new Set())
|
||||
skipped = 0
|
||||
}}
|
||||
slot="cancel"
|
||||
>
|
||||
<Tr t={Translations.t.general.skip} />
|
||||
<Tr t={Translations.t.general.questionBox.reactivate} />
|
||||
</button>
|
||||
</TagRenderingQuestionDynamic>
|
||||
{/if}
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
{:else}
|
||||
<div>
|
||||
{#if $showAllQuestionsAtOnce}
|
||||
<div class="flex flex-col gap-y-1">
|
||||
{#each $allQuestionsToAsk as question (question.id)}
|
||||
<TagRenderingQuestionDynamic
|
||||
config={question}
|
||||
{tags}
|
||||
{selectedElement}
|
||||
{state}
|
||||
{layer}
|
||||
/>
|
||||
{/each}
|
||||
</div>
|
||||
{:else if $firstQuestion !== undefined}
|
||||
<TagRenderingQuestionDynamic
|
||||
config={$firstQuestion}
|
||||
{layer}
|
||||
{selectedElement}
|
||||
{state}
|
||||
{tags}
|
||||
on:saved={() => {
|
||||
skip($firstQuestion, true)
|
||||
}}
|
||||
>
|
||||
<button
|
||||
class="secondary"
|
||||
on:click={() => {
|
||||
skip($firstQuestion)
|
||||
}}
|
||||
slot="cancel"
|
||||
>
|
||||
<Tr t={Translations.t.general.skip} />
|
||||
</button>
|
||||
</TagRenderingQuestionDynamic>
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
</script>
|
||||
|
||||
{#if config !== undefined && (config?.condition === undefined || config.condition.matchesProperties($tags))}
|
||||
<div {id} class={twMerge("link-underline flex w-full h-full flex-col", extraClasses)}>
|
||||
<div {id} class={twMerge("link-underline flex h-full w-full flex-col", extraClasses)}>
|
||||
{#if $trs.length === 1}
|
||||
<TagRenderingMapping
|
||||
mapping={$trs[0]}
|
||||
|
|
|
|||
|
|
@ -106,8 +106,16 @@
|
|||
</TagRenderingQuestion>
|
||||
{:else}
|
||||
<div class="low-interaction flex items-center justify-between overflow-hidden rounded pl-2">
|
||||
<TagRenderingAnswer id={answerId} {config} {tags} {selectedElement} {state} {layer} extraClasses="my-2"/>
|
||||
{#if (!editingEnabled || $editingEnabled)}
|
||||
<TagRenderingAnswer
|
||||
id={answerId}
|
||||
{config}
|
||||
{tags}
|
||||
{selectedElement}
|
||||
{state}
|
||||
{layer}
|
||||
extraClasses="my-2"
|
||||
/>
|
||||
{#if !editingEnabled || $editingEnabled}
|
||||
<EditButton
|
||||
arialabel={config.editButtonAriaLabel}
|
||||
ariaLabelledBy={answerId}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
<script lang="ts">
|
||||
</script>
|
||||
|
||||
<main >
|
||||
</main>
|
||||
<main />
|
||||
|
|
|
|||
|
|
@ -124,11 +124,11 @@
|
|||
state.mapProperties.installCustomKeyboardHandler(viewport)
|
||||
let canZoomIn = mapproperties.maxzoom.map(
|
||||
(mz) => mapproperties.zoom.data < mz,
|
||||
[mapproperties.zoom],
|
||||
[mapproperties.zoom]
|
||||
)
|
||||
let canZoomOut = mapproperties.minzoom.map(
|
||||
(mz) => mapproperties.zoom.data > mz,
|
||||
[mapproperties.zoom],
|
||||
[mapproperties.zoom]
|
||||
)
|
||||
|
||||
function updateViewport() {
|
||||
|
|
@ -165,7 +165,7 @@
|
|||
onDestroy(
|
||||
rasterLayer.addCallbackAndRunD((l) => {
|
||||
rasterLayerName = l.properties.name
|
||||
}),
|
||||
})
|
||||
)
|
||||
let previewedImage = state.previewedImage
|
||||
|
||||
|
|
@ -196,7 +196,7 @@
|
|||
let openMapButton: UIEventSource<HTMLElement> = new UIEventSource<HTMLElement>(undefined)
|
||||
let openMenuButton: UIEventSource<HTMLElement> = new UIEventSource<HTMLElement>(undefined)
|
||||
let openCurrentViewLayerButton: UIEventSource<HTMLElement> = new UIEventSource<HTMLElement>(
|
||||
undefined,
|
||||
undefined
|
||||
)
|
||||
let _openNewElementButton: HTMLButtonElement
|
||||
let openNewElementButton: UIEventSource<HTMLElement> = new UIEventSource<HTMLElement>(undefined)
|
||||
|
|
@ -572,7 +572,6 @@
|
|||
<div class="link-underline links-w-full m-2 flex flex-col gap-y-1" slot="content0">
|
||||
<Tr t={Translations.t.general.aboutMapComplete.intro} />
|
||||
|
||||
|
||||
<a class="flex" href={Utils.HomepageLink()}>
|
||||
<Add class="h-6 w-6" />
|
||||
{#if Utils.isIframe}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue