}
}
+ function place_has_keywords(aThisPlace) {
+ // Return false if Nominatim API sends 'keywords: { name: [], address: [] }'
+ return (
+ aThisPlace.keywords && aThisPlace.keywords.name && aThisPlace.keywords.address
+ && (aThisPlace.keywords.name.length > 0 || aThisPlace.keywords.address.length > 0)
+ );
+ }
+
$: {
let pageinfo = $page;
if (pageinfo.tab === 'details') {
base_url = window.location.search;
}
}
+ $: reverse_only = Nominatim_Config.Reverse_Only;
</script>
<Header>
<small><DetailsLink feature={aPlace}>link to this page</DetailsLink></small>
</h1>
</div>
- <div class="col-sm-2 text-right">
+ <div class="col-sm-2 text-end">
<MapIcon aPlace={aPlace} />
</div>
</div>
<tbody>
<InfoRow title="Name">
{#if (Array.isArray(aPlace.names)) }
- <span class="noname font-weight-bold">No Name</span>
+ <span class="noname fw-bold">No Name</span>
{:else}
<InfoRowList items={aPlace.names} />
{/if}
<InfoRow title="Admin Level">{aPlace.admin_level}</InfoRow>
{/if}
<InfoRow title="Search Rank">{aPlace.rank_search}</InfoRow>
- <InfoRow title="Address Rank">{aPlace.rank_address} ({formatAddressRank(aPlace.rank_address)})</InfoRow>
+ <InfoRow title="Address Rank">
+ {aPlace.rank_address} ({formatAddressRank(aPlace.rank_address)})
+ </InfoRow>
{#if aPlace.calculated_importance}
<InfoRow title="Importance">
{aPlace.calculated_importance}
<InfoRow title="Centre Point (lat,lon)">
{aPlace.centroid.coordinates[1]},{aPlace.centroid.coordinates[0]}
</InfoRow>
+ <!-- eslint-disable-next-line svelte/no-at-html-tags -->
<InfoRow title="OSM">{@html osmLink(aPlace)}</InfoRow>
<InfoRow title="Place Id">
{aPlace.place_id}
- (<a href="https://nominatim.org/release-docs/develop/api/Output/#place_id-is-not-a-persistent-id">on this server</a>)
+ (<a href="https://nominatim.org/release-docs/develop/api/Output/#place_id-is-not-a-persistent-id">
+ on this server
+ </a>)
</InfoRow>
{#if aPlace.calculated_wikipedia}
+ <!-- eslint-disable-next-line svelte/no-at-html-tags -->
<InfoRow title="Wikipedia Calculated">{@html wikipediaLink(aPlace)}</InfoRow>
{/if}
<InfoRow title="Computed Postcode">
{#if aPlace.calculated_postcode}
{aPlace.calculated_postcode}
- <DetailsPostcodeHint postcode={aPlace.calculated_postcode} lat={aPlace.centroid.coordinates[1]} lon={aPlace.centroid.coordinates[0]} />
+ <DetailsPostcodeHint postcode={aPlace.calculated_postcode}
+ lat={aPlace.centroid.coordinates[1]}
+ lon={aPlace.centroid.coordinates[0]} />
{/if}
</InfoRow>
<InfoRow title="Address Tags"><InfoRowList items={aPlace.addresstags} /></InfoRow>
<tbody>
{#if aPlace.address}
{#each aPlace.address as addressLine}
- <DetailsOneRow addressLine={addressLine} bMarkUnusedLines=true bDistanceInMeters=false />
+ <DetailsOneRow addressLine={addressLine}
+ bMarkUnusedLines={true}
+ bDistanceInMeters={false} />
{/each}
{/if}
{#if aPlace.linked_places}
- <tr class="all-columns"><td colspan="6"><h2>Linked Places</h2></td></tr>
+ <tr class="all-columns"><td colspan="7"><h2>Linked Places</h2></td></tr>
{#each aPlace.linked_places as addressLine}
- <DetailsOneRow addressLine={addressLine} bMarkUnusedLines=true bDistanceInMeters=true />
+ <DetailsOneRow addressLine={addressLine}
+ bMarkUnusedLines={true}
+ bDistanceInMeters={true} />
{/each}
{/if}
- <tr class="all-columns"><td colspan="6"><h2>Keywords</h2></td></tr>
- {#if api_request_params.keywords}
+ {#if !reverse_only}
+ <tr class="all-columns"><td colspan="7"><h2>Keywords</h2></td></tr>
+ {#if api_request_params.keywords}
- {#if aPlace.keywords && (aPlace.keywords.name || aPlace.keywords.address) }
- <tr class="all-columns"><td colspan="6"><h3>Name Keywords</h3></td></tr>
- {#each aPlace.keywords.name as keyword}
- <tr>
- <td>{formatKeywordToken(keyword.token)}</td>
- {#if keyword.id}
- <td>word id: {keyword.id}</td>
- {/if}
- </tr>
- {/each}
-
- {#if aPlace.keywords.address}
- <tr class="all-columns"><td colspan="6"><h3>Address Keywords</h3></td></tr>
- {#each aPlace.keywords.address as keyword}
+ {#if place_has_keywords(aPlace)}
+ <tr class="all-columns"><td colspan="7"><h3>Name Keywords</h3></td></tr>
+ {#each aPlace.keywords.name as keyword}
<tr>
<td>{formatKeywordToken(keyword.token)}</td>
{#if keyword.id}
{/if}
</tr>
{/each}
+
+ {#if aPlace.keywords.address}
+ <tr class="all-columns"><td colspan="7"><h3>Address Keywords</h3></td></tr>
+ {#each aPlace.keywords.address as keyword}
+ <tr>
+ <td>{formatKeywordToken(keyword.token)}</td>
+ {#if keyword.id}
+ <td>word id: {keyword.id}</td>
+ {/if}
+ </tr>
+ {/each}
+ {/if}
+ {:else}
+ <tr><td>Place has no keywords</td></tr>
{/if}
{:else}
- <tr><td>Place has no keywords</td></tr>
+ <tr>
+ <td>
+ <a class="btn btn-outline-secondary btn-sm"
+ href="{base_url}&keywords=1">display keywords</a>
+ </td>
+ </tr>
{/if}
- {:else}
- <tr>
- <td>
- <a class="btn btn-outline-secondary btn-sm"
- href="{base_url}&keywords=1">display keywords</a>
- </td>
- </tr>
{/if}
- <tr class="all-columns"><td colspan="6"><h2>Parent Of</h2></td></tr>
+ <tr class="all-columns"><td colspan="7"><h2>Parent Of</h2></td></tr>
{#if api_request_params.hierarchy}
- {#if aPlace.hierarchy && aPlace.hierarchy.length}
-
+ {#if aPlace.hierarchy && typeof (aPlace.hierarchy) === 'object'
+ && Object.keys(aPlace.hierarchy).length}
{#each Object.keys(aPlace.hierarchy) as type}
- <tr class="all-columns"><td colspan="6"><h3>{type}</h3></td></tr>
+ <tr class="all-columns"><td colspan="7"><h3>{type}</h3></td></tr>
{#each aPlace.hierarchy[type] as line}
- <DetailsOneRow addressLine={line} bDistanceInMeters=true />
+ <DetailsOneRow addressLine={line} bDistanceInMeters={true} />
{/each}
{/each}
}
tr.all-columns {
- background-color: white !important;
+ background-color: white !important;
border: none;
}
tr.all-columns td {
}
#map-wrapper {
+ position: relative;
width:100%;
min-height: auto;
height:300px;