# TODO list
-* check output of /dist into repository?
-
## Might never work
## Nice-to-have
-* support nearlat,nearlon parameters
* should images/mapicons/ be served from API server or this repo?
-* different content for official OSM, e.g. github urls
* cache `update_data_date` result somehow?
* a new search causes a new pageview
* add tests with fixtures
-* detailpage: make linkedplaces, childplaces optional (rarely used? second click to enable?)
* set better alt tag for icons
* print text "loading..." instead of an error (which the user sees for a split second)
* concatenate/minify JS and CSS
function fetch_from_api(endpoint_name, params, callback) {
// `&a=&b=&c=1` => '&c='
- for (var k in params) {
- if (typeof (params[k]) === 'undefined' || params[k] === '' || params[k] === null) {
- delete params[k];
+ // fetch_from_api
+
+ // var c = ;
+ var keys = Object.keys(params);
+ for (var i = 0; i < keys.length; i += 1) {
+ var val = params[keys[i]];
+ if (typeof (val) === 'undefined' || val === '' || val === null) {
+ delete params[keys[i]];
}
}
<div class="container">
<div class="row">
<div class="col-sm-10">
- <h1>{{aPlace.localname}} <small>{{detailsPermaLink aPlace 'link to this page'}}</small></h1>
+ <h1>
+ {{aPlace.localname}}
+ <small>{{detailsPermaLink aPlace 'link to this page'}}</small>
+ </h1>
</div>
<div class="col-sm-2 text-right">
{{formatMapIcon aPlace.icon}}
<td>Name</td>
<td>
{{#each aPlace.names}}
- <div class="line"><span class="name">{{this}}</span> ({{@key}})</div>
+ <div class="line">
+ <span class="name">{{this}}</span> ({{@key}})
+ </div>
{{/each}}
</td>
</tr>
</tr>
<tr>
<td>Centre Point (lat,lon)</td>
- <td>{{aPlace.centroid.coordinates.[1]}},{{aPlace.centroid.coordinates.[0]}}</td>
+ <td>
+ {{aPlace.centroid.coordinates.[1]}},{{aPlace.centroid.coordinates.[0]}}
+ </td>
</tr>
<tr>
<td>OSM</td>
<td>{{osmLink aPlace}}
</tr>
<tr>
- <td>Place Id (<a href="https://nominatim.org/release-docs/develop/api/Output/#place_id-is-not-a-persistent-id">on this server</a>)</td>
+ <td>
+ Place Id
+ (<a href="https://nominatim.org/release-docs/develop/api/Output/#place_id-is-not-a-persistent-id">on this server</a>)
+ </td>
<td>{{aPlace.place_id}}</td>
</tr>
{{#if aPlace.calculated_wikipedia}}
<td>Address Tags</td>
<td>
{{#each aPlace.addresstags}}
- <div class="line"><span class="name">{{this}}</span> ({{@key}})</div>
+ <div class="line">
+ <span class="name">{{this}}</span> ({{@key}})
+ </div>
{{/each}}
</td>
</tr>
<td>Extra Tags</td>
<td>
{{#each aPlace.extratags}}
- <div class="line"><span class="name">{{this}}</span> ({{@key}})</div>
+ <div class="line">
+ <span class="name">{{this}}</span> ({{@key}})
+ </div>
{{/each}}
</td>
</tr>
{{else}}
<tr>
<td>
- <a class="btn btn-default btn-xs" href="{{base_url}}&hierarchy=1">display child places</a>
+ <a class="btn btn-default btn-xs"
+ href="{{base_url}}&hierarchy=1">display child places</a>
</td>
</tr>
{{/if}}
<h4>Search by place id</h4>
<form class="form-inline" action="details.html">
- <input type="edit" class="form-control input-sm" pattern="^[0-9]+$" name="place_id" placeholder="12345" />
- <input type="submit" class="btn btn-primary btn-sm" value="Show" />
+ <input type="edit"
+ class="form-control input-sm"
+ pattern="^[0-9]+$"
+ name="place_id"
+ placeholder="12345" />
+ <input type="submit"
+ class="btn btn-primary btn-sm"
+ value="Show" />
</form>
</div>
<div class="search-form">
<h4>Search by OSM type and OSM id</h4>
- <form id="form-by-type-and-id" class="form-inline" action="details.html">
- <input type="edit" class="form-control input-sm" pattern="^[NWR][0-9]+$" placeholder="N123 or W123 or R123" />
+ <form id="form-by-type-and-id"
+ class="form-inline"
+ action="details.html">
+ <input type="edit"
+ class="form-control input-sm"
+ pattern="^[NWR][0-9]+$"
+ placeholder="N123 or W123 or R123" />
<input type="hidden" name="osmtype" />
<input type="hidden" name="osmid" />
<input type="submit" class="btn btn-primary btn-sm" value="Show" />
<div class="search-form">
<h4>Search by openstreetmap.org URL</h4>
- <form id="form-by-osm-url" class="form-inline" action="details.html">
- <input type="edit" class="form-control input-sm" pattern=".*openstreetmap.*" placeholder="https://www.openstreetmap.org/relation/123" />
+ <form id="form-by-osm-url"
+ class="form-inline"
+ action="details.html">
+ <input type="edit"
+ class="form-control input-sm"
+ pattern=".*openstreetmap.*"
+ placeholder="https://www.openstreetmap.org/relation/123" />
<input type="hidden" name="osmtype" />
<input type="hidden" name="osmid" />
<input type="submit" class="btn btn-primary btn-sm" value="Show" />
<h4>Search by place id</h4>
<form class="form-inline" action="details.html">
- <input type="edit" class="form-control input-sm" pattern="^[0-9]+$" name="place_id" placeholder="12345" />
- <input type="submit" class="btn btn-primary btn-sm" value="Show" />
+ <input type="edit"
+ class="form-control input-sm"
+ pattern="^[0-9]+$"
+ name="place_id"
+ placeholder="12345" />
+ <input type="submit"
+ class="btn btn-primary btn-sm"
+ value="Show" />
</form>
</div>
<div class="search-form">
<h4>Search by OSM type and OSM id</h4>
- <form id="form-by-type-and-id" class="form-inline" action="details.html">
- <input type="edit" class="form-control input-sm" pattern="^[NWR][0-9]+$" placeholder="N123 or W123 or R123" />
+ <form id="form-by-type-and-id"
+ class="form-inline"
+ action="details.html">
+ <input type="edit"
+ class="form-control input-sm"
+ pattern="^[NWR][0-9]+$"
+ placeholder="N123 or W123 or R123" />
<input type="hidden" name="osmtype" />
<input type="hidden" name="osmid" />
<input type="submit" class="btn btn-primary btn-sm" value="Show" />
<div class="search-form">
<h4>Search by openstreetmap.org URL</h4>
- <form id="form-by-osm-url" class="form-inline" action="details.html">
- <input type="edit" class="form-control input-sm" pattern=".*openstreetmap.*" placeholder="https://www.openstreetmap.org/relation/123" />
+ <form id="form-by-osm-url"
+ class="form-inline"
+ action="details.html">
+ <input type="edit"
+ class="form-control input-sm"
+ pattern=".*openstreetmap.*"
+ placeholder="https://www.openstreetmap.org/relation/123" />
<input type="hidden" name="osmtype" />
<input type="hidden" name="osmid" />
<input type="submit" class="btn btn-primary btn-sm" value="Show" />
<div class="container">
<div class="row">
<div class="col-sm-10">
- <h1>{{aPlace.localname}} <small>{{detailsPermaLink aPlace 'link to this page'}}</small></h1>
+ <h1>
+ {{aPlace.localname}}
+ <small>{{detailsPermaLink aPlace 'link to this page'}}</small>
+ </h1>
</div>
<div class="col-sm-2 text-right">
{{formatMapIcon aPlace.icon}}
<td>Name</td>
<td>
{{#each aPlace.names}}
- <div class="line"><span class="name">{{this}}</span> ({{@key}})</div>
+ <div class="line">
+ <span class="name">{{this}}</span> ({{@key}})
+ </div>
{{/each}}
</td>
</tr>
</tr>
<tr>
<td>Centre Point (lat,lon)</td>
- <td>{{aPlace.centroid.coordinates.[1]}},{{aPlace.centroid.coordinates.[0]}}</td>
+ <td>
+ {{aPlace.centroid.coordinates.[1]}},{{aPlace.centroid.coordinates.[0]}}
+ </td>
</tr>
<tr>
<td>OSM</td>
<td>{{osmLink aPlace}}
</tr>
<tr>
- <td>Place Id (<a href="https://nominatim.org/release-docs/develop/api/Output/#place_id-is-not-a-persistent-id">on this server</a>)</td>
+ <td>
+ Place Id
+ (<a href="https://nominatim.org/release-docs/develop/api/Output/#place_id-is-not-a-persistent-id">on this server</a>)
+ </td>
<td>{{aPlace.place_id}}</td>
</tr>
{{#if aPlace.calculated_wikipedia}}
<td>Address Tags</td>
<td>
{{#each aPlace.addresstags}}
- <div class="line"><span class="name">{{this}}</span> ({{@key}})</div>
+ <div class="line">
+ <span class="name">{{this}}</span> ({{@key}})
+ </div>
{{/each}}
</td>
</tr>
<td>Extra Tags</td>
<td>
{{#each aPlace.extratags}}
- <div class="line"><span class="name">{{this}}</span> ({{@key}})</div>
+ <div class="line">
+ <span class="name">{{this}}</span> ({{@key}})
+ </div>
{{/each}}
</td>
</tr>
{{else}}
<tr>
<td>
- <a class="btn btn-default btn-xs" href="{{base_url}}&hierarchy=1">display child places</a>
+ <a class="btn btn-default btn-xs"
+ href="{{base_url}}&hierarchy=1">display child places</a>
</td>
</tr>
{{/if}}
+'use strict';
+
function formatOSMType(sType, bExcludeExternal) {
if (sType === 'N') return 'node';
if (sType === 'W') return 'way';
}
Handlebars.registerHelper({
- shortOSMType: function(sType) {
+ shortOSMType: function (sType) {
if (sType === 'node') return 'N';
if (sType === 'way') return 'W';
if (sType === 'relation') return 'R';
return (iLevel < 15 ? iLevel : '');
},
formatMapIcon: function (sIcon) {
- if (!sIcon) return;
+ if (!sIcon) return '';
var url = sIcon;
if (!url.match(/^http/)) url = get_config_value('Images_Base_Url') + url;
if (aPlace.type && aPlace.type === 'yes' && aPlace.class) {
return capitalize(aPlace.class.replace(/_/g, ' '));
- } else if (aPlace.type) {
+ }
+ if (aPlace.type) {
return capitalize(aPlace.type.replace(/_/g, ' '));
}
return '';
return 'other: ' + iRank;
},
tooManyHierarchyLinesWarning: function (aPlace) {
- if (!aPlace.hierarchy) return;
+ if (!aPlace.hierarchy) return '';
- var c = 0;
- for (var type in aPlace.hierarchy) {
- c = c + type.length + 1;
- }
- if (c < 500) return;
+ var c = Object.keys(aPlace.hierarchy);
+ if (c < 500) return '';
return new Handlebars.SafeString(
'<p>There are more child objects which are not shown.</p>'
var select = $('<select>');
var option = jQuery('<option>', { value: '', text: '--' });
- if (typeof (iSelectedZoom) === 'undefined') option.attr('selected', 'selected');
+ if (typeof (iSelectedZoom) === 'undefined') {
+ option.attr('selected', 'selected');
+ }
option.appendTo(select);
jQuery.each(aZoomLevels, function (i, title) {
<span class="type">{{formatLabel aResult}}</span>
<p class="coords">{{aResult.lat}},{{aResult.lon}}</p>
- <a class="btn btn-default btn-xs details" href="details.html?osmtype={{shortOSMType aResult.osm_type}}&osmid={{aResult.osm_id}}">details</a>
+ <a class="btn btn-default btn-xs details"
+ href="details.html?osmtype={{shortOSMType aResult.osm_type}}&osmid={{aResult.osm_id}}">details</a>
</div>
{{/inline}}
<form class="form-inline" role="search" accept-charset="UTF-8" action="">
<div class="form-group">
<input name="format" type="hidden" value="html">
- <input name="lat" type="text" class="form-control input-sm" placeholder="latitude" value="{{fLat}}">
+ <input name="lat"
+ type="text"
+ class="form-control input-sm"
+ placeholder="latitude"
+ value="{{fLat}}" />
<span id="switch-coords"><></span>
- <input name="lon" type="text" class="form-control input-sm" placeholder="longitude" value="{{fLon}}">
+ <input name="lon"
+ type="text"
+ class="form-control input-sm"
+ placeholder="longitude"
+ value="{{fLon}}" />
max zoom
<select name="zoom" class="form-control input-sm" value="{{iZoom}}">
{{zoomLevels iZoom}}
</select>
</div>
<div class="form-group search-button-group">
- <button type="submit" class="btn btn-primary btn-sm">Search</button>
+ <button type="submit" class="btn btn-primary btn-sm">
+ Search
+ </button>
</div>
<div class="search-type-link">
<a href="/search.html">forward search</a>
<span class="type">{{formatLabel aResult}}</span>
<p class="coords">{{aResult.lat}},{{aResult.lon}}</p>
- <a class="btn btn-default btn-xs details" href="details.html?osmtype={{shortOSMType aResult.osm_type}}&osmid={{aResult.osm_id}}">details</a>
+ <a class="btn btn-default btn-xs details"
+ href="details.html?osmtype={{shortOSMType aResult.osm_type}}&osmid={{aResult.osm_id}}">details</a>
</div>
{{/inline}}
<form class="form-inline" role="search" accept-charset="UTF-8" action="">
<div class="form-group">
<input name="format" type="hidden" value="html">
- <input name="lat" type="text" class="form-control input-sm" placeholder="latitude" value="{{fLat}}">
+ <input name="lat"
+ type="text"
+ class="form-control input-sm"
+ placeholder="latitude"
+ value="{{fLat}}" />
<span id="switch-coords"><></span>
- <input name="lon" type="text" class="form-control input-sm" placeholder="longitude" value="{{fLon}}">
+ <input name="lon"
+ type="text"
+ class="form-control input-sm"
+ placeholder="longitude"
+ value="{{fLon}}" />
max zoom
<select name="zoom" class="form-control input-sm" value="{{iZoom}}">
{{zoomLevels iZoom}}
</select>
</div>
<div class="form-group search-button-group">
- <button type="submit" class="btn btn-primary btn-sm">Search</button>
+ <button type="submit" class="btn btn-primary btn-sm">
+ Search
+ </button>
</div>
<div class="search-type-link">
<a href="/search.html">forward search</a>
<span class="type">({{formatLabel aResult}})</span>
<p class="coords">{{aResult.lat}},{{aResult.lon}}</p>
- <a class="btn btn-default btn-xs details" href="details.html?osmtype={{shortOSMType aResult.osm_type}}&osmid={{aResult.osm_id}}">details</a>
+ <a class="btn btn-default btn-xs details"
+ href="details.html?osmtype={{shortOSMType aResult.osm_type}}&osmid={{aResult.osm_id}}">details</a>
</div>
{{/inline}}
<form class="form-inline" role="search" accept-charset="UTF-8" action="">
<div class="form-group">
- <input id="q" name="q" type="text" class="form-control input-sm" placeholder="Search" value="{{sQuery}}">
+ <input id="q"
+ name="q"
+ type="text"
+ class="form-control input-sm"
+ placeholder="Search"
+ value="{{sQuery}}" />
</div>
<div class="form-group search-button-group">
<button type="submit" class="btn btn-primary btn-sm">Search</button>
{{/if}}
<input type="hidden" name="viewbox" value="{{sViewBox}}" />
<div class="checkbox-inline">
- <input type="checkbox" id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
+ <input type="checkbox"
+ id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
<label for="use_viewbox">apply viewbox</label>
</div>
</div>
{{#if aSearchResults}}
{{#if sMoreURL}}
<div class="more">
- <a class="btn btn-primary" href="{{sMoreURL}}">Search for more results</a>
+ <a class="btn btn-primary" href="{{sMoreURL}}">
+ Search for more results
+ </a>
</div>
{{/if}}
{{else}}
<div id="intro" class="sidebar">
<h2>Welcome to Nominatim</h2>
- <p>Nominatim is a search engine for <a href="https://www.openstreetmap.org">OpenStreetMap</a>
- data. This is the debugging interface. You may search for a name or address(forward search) or
- look up data by its geographic coordinate(reverse search). Each result comes with a
- link to a details page where you can inspect what data about the object is saved in
- the database and investigate how the address of the object has been computed.</p>
-
- For more information visit the <a href="https://nominatim.org">Nominatim home page</a>.
+ <p>
+ Nominatim is a search engine for
+ <a href="https://www.openstreetmap.org">OpenStreetMap</a> data. This
+ is the debugging interface. You may search for a name or address
+ (forward search) or look up data by its geographic coordinate (reverse
+ search). Each result comes with a link to a details page where you
+ can inspect what data about the object is saved in the database and
+ investigate how the address of the object has been computed.
+ </p>
+
+ For more information visit the
+ <a href="https://nominatim.org">Nominatim home page</a>.
</div>
{{/if}}
<span class="type">({{formatLabel aResult}})</span>
<p class="coords">{{aResult.lat}},{{aResult.lon}}</p>
- <a class="btn btn-default btn-xs details" href="details.html?osmtype={{shortOSMType aResult.osm_type}}&osmid={{aResult.osm_id}}">details</a>
+ <a class="btn btn-default btn-xs details"
+ href="details.html?osmtype={{shortOSMType aResult.osm_type}}&osmid={{aResult.osm_id}}">details</a>
</div>
{{/inline}}
<form class="form-inline" role="search" accept-charset="UTF-8" action="">
<div class="form-group">
- <input id="q" name="q" type="text" class="form-control input-sm" placeholder="Search" value="{{sQuery}}">
+ <input id="q"
+ name="q"
+ type="text"
+ class="form-control input-sm"
+ placeholder="Search"
+ value="{{sQuery}}" />
</div>
<div class="form-group search-button-group">
<button type="submit" class="btn btn-primary btn-sm">Search</button>
{{/if}}
<input type="hidden" name="viewbox" value="{{sViewBox}}" />
<div class="checkbox-inline">
- <input type="checkbox" id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
+ <input type="checkbox"
+ id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
<label for="use_viewbox">apply viewbox</label>
</div>
</div>
{{#if aSearchResults}}
{{#if sMoreURL}}
<div class="more">
- <a class="btn btn-primary" href="{{sMoreURL}}">Search for more results</a>
+ <a class="btn btn-primary" href="{{sMoreURL}}">
+ Search for more results
+ </a>
</div>
{{/if}}
{{else}}
<div id="intro" class="sidebar">
<h2>Welcome to Nominatim</h2>
- <p>Nominatim is a search engine for <a href="https://www.openstreetmap.org">OpenStreetMap</a>
- data. This is the debugging interface. You may search for a name or address(forward search) or
- look up data by its geographic coordinate(reverse search). Each result comes with a
- link to a details page where you can inspect what data about the object is saved in
- the database and investigate how the address of the object has been computed.</p>
+ <p>
+ Nominatim is a search engine for
+ <a href="https://www.openstreetmap.org">OpenStreetMap</a> data. This
+ is the debugging interface. You may search for a name or address
+ (forward search) or look up data by its geographic coordinate (reverse
+ search). Each result comes with a link to a details page where you
+ can inspect what data about the object is saved in the database and
+ investigate how the address of the object has been computed.
+ </p>
- For more information visit the <a href="https://nominatim.org">Nominatim home page</a>.
+ For more information visit the
+ <a href="https://nominatim.org">Nominatim home page</a>.
</div>
{{/if}}