}
}
+ 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}
{/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 />
{/each}
{/if}
- <tr class="all-columns"><td colspan="6"><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 !reverse_only}
+ <tr class="all-columns"><td colspan="7"><h2>Keywords</h2></td></tr>
+ {#if api_request_params.keywords}
- {#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 />
{/each}