Formatting and Share Buttons
This commit is contained in:
+64
-2
@@ -21,6 +21,12 @@ const continents = computed(() => props.continents.filter(c => c.internal_name !
|
||||
|
||||
const { entriesByDeparture, departureNames, completedCount, totalCount } =
|
||||
useDirectedContinentPairs(flights, continents)
|
||||
|
||||
// Split "Africa → Asia" into ["Africa", "Asia"] for independent flex items
|
||||
function splitLabel(label: string): [string, string] {
|
||||
const [from, to] = label.split('→').map(part => part.trim())
|
||||
return [from, to]
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -35,11 +41,16 @@ const { entriesByDeparture, departureNames, completedCount, totalCount } =
|
||||
:rows="entriesByDeparture.get(dep) ?? []"
|
||||
:rowKey="entry => entry.key"
|
||||
:hasItems="entry => entry.flights.length > 0"
|
||||
labelWidth="18em"
|
||||
compactOnMobile
|
||||
>
|
||||
<template #label="{ row: entry }">
|
||||
<div class="pair-label">
|
||||
<span class="pair-name">{{ entry.label }}</span>
|
||||
<span class="pair-part">{{ splitLabel(entry.label)[0] }}</span>
|
||||
<span class="pair-divider">
|
||||
<span class="divider-horizontal">{{ '\u2192\uFE0E' }}</span>
|
||||
<span class="divider-vertical">{{ '\u2193\uFE0E' }}</span>
|
||||
</span>
|
||||
<span class="pair-part">{{ splitLabel(entry.label)[1] }}</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -80,4 +91,55 @@ const { entriesByDeparture, departureNames, completedCount, totalCount } =
|
||||
gap: 1rem;
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
|
||||
.pair-label {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 0.35rem;
|
||||
padding: 0 0.25rem;
|
||||
}
|
||||
|
||||
.pair-part {
|
||||
font-size: 0.9rem;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.pair-divider {
|
||||
font-size: 0.9rem;
|
||||
opacity: 0.6;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.divider-vertical {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@container (max-width: 480px) {
|
||||
.pair-label {
|
||||
flex-direction: column;
|
||||
gap: 0.1rem;
|
||||
}
|
||||
|
||||
.pair-part {
|
||||
font-size: 0.7rem;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.pair-divider {
|
||||
font-size: 0.65rem;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.divider-horizontal {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.divider-vertical {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
+54
-4
@@ -19,6 +19,12 @@ const flights = computed(() => props.flights)
|
||||
const continents = computed(() => props.continents.filter(c => c.internal_name !== 'antarctica'))
|
||||
|
||||
const { entries, completedCount, totalCount } = useUndirectedContinentPairs(flights, continents)
|
||||
|
||||
// Split "Africa↔Asia" into ["Africa", "Asia"] for independent flex items
|
||||
function splitLabel(label: string): [string, string] {
|
||||
const [from, to] = label.split('↔')
|
||||
return [from, to]
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -32,11 +38,16 @@ const { entries, completedCount, totalCount } = useUndirectedContinentPairs(flig
|
||||
:rows="entries"
|
||||
:rowKey="entry => entry.key"
|
||||
:hasItems="entry => entry.flights.length > 0"
|
||||
labelWidth="18em"
|
||||
compactOnMobile
|
||||
>
|
||||
<template #label="{ row: entry }">
|
||||
<div class="pair-label">
|
||||
<span class="pair-name">{{ entry.label }}</span>
|
||||
<span class="pair-part">{{ splitLabel(entry.label)[0] }}</span>
|
||||
<span class="pair-divider">
|
||||
<span class="divider-horizontal">{{ '\u2194\uFE0E' }}</span>
|
||||
<span class="divider-vertical">{{ '\u2195\uFE0E' }}</span>
|
||||
</span>
|
||||
<span class="pair-part">{{ splitLabel(entry.label)[1] }}</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -80,12 +91,51 @@ const { entries, completedCount, totalCount } = useUndirectedContinentPairs(flig
|
||||
.pair-label {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
justify-content: center;
|
||||
gap: 0.35rem;
|
||||
padding: 0 0.25rem;
|
||||
}
|
||||
|
||||
.pair-name {
|
||||
.pair-part {
|
||||
font-size: 0.9rem;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.pair-divider {
|
||||
font-size: 0.9rem;
|
||||
opacity: 0.6;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.divider-vertical {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@container (max-width: 480px) {
|
||||
.pair-label {
|
||||
flex-direction: column;
|
||||
gap: 0.1rem;
|
||||
}
|
||||
|
||||
.pair-part {
|
||||
font-size: 0.7rem;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.pair-divider {
|
||||
font-size: 0.65rem;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.divider-horizontal {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.divider-vertical {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user