]> git.openstreetmap.org Git - nominatim-ui.git/blobdiff - dist/details.html
show admin level only for admin boundaries
[nominatim-ui.git] / dist / details.html
index d22be818acdf32e1a871709f5e44d7a15f5e5d9a..16ebbc2415f9561f52f82ba771669aaf214a5aa5 100644 (file)
@@ -1,55 +1,58 @@
 <!DOCTYPE html>
 <html lang="en">
 <head>
+  <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
   <title>OpenStreetMap Nominatim</title>
   <meta name="viewport" content="width=device-width, initial-scale=1">
 
-  <link rel="icon" type="image/png" href="/assets/images/favicon-194x194.png" sizes="194x194" />
-  <link rel="icon" type="image/png" href="/assets/images/favicon-16x16.png" sizes="16x16" />
+  <link rel="icon" type="image/png" href="assets/images/favicon-194x194.png" sizes="194x194" />
+  <link rel="icon" type="image/png" href="assets/images/favicon-16x16.png" sizes="16x16" />
 
   <link href="assets/css/leaflet.css" rel="stylesheet" />
   <link href="assets/css/Control.MiniMap.min.css" rel="stylesheet" />
-  <link href="assets/css/bootstrap-theme.min.css" rel="stylesheet" />
   <link href="assets/css/bootstrap.min.css" rel="stylesheet" />
   <link href="assets/css/common.css" rel="stylesheet" />
   <link href="assets/css/search.css" rel="stylesheet" type="text/css" />
   <link href="assets/css/details.css" rel="stylesheet" type="text/css" />
 </head>
-<body id="details-page">
+<body id="BODYID">
 
-  <div id="error-overlay">
-    You need Javascript enabled to view this page.
-  </div>
+  <div id="error-overlay"></div>
 
   <header class="container-fluid">
     <div class="row">
-      <div class="col-xs-4">
+      <div class="col-4">
         <div class="brand">
-          <a href="/">
+          <a href="search.html">
             <img alt="logo" src="assets/images/osm_logo.120px.png" width="30" height="30"/>
             <h1>Nominatim</h1>
           </a>
         </div>
       </div>
-      <div id="last-updated" class="col-xs-4 text-center">
-        Data from <a id="api-request-link" href="">API request</a>
-        <br>
-        Data last updated:
-        <span id="data-date"></span>
+      <div class="col-4">
+        <div id="last-updated" class="text-center">
+          <div id="loading">loading...</div>
+          <div id="api-request">
+            Data from <a href="">API request</a>
+            <span id="api-request-debug">(<a href="">debug output</a>)</span>
+          </div>
+          Data last updated: <span id="data-date"></span>
+        </div>
       </div>
-      <div class="col-xs-4 text-right">
-        <div class="btn-group">
-          <button class="dropdown-toggle btn btn-sm btn-default" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
-            About &amp; Help <span class="caret"></span>
+      <div class="col-4 text-right">
+        <div class="dropdown">
+          <button class="dropdown-toggle btn btn-sm btn-outline-secondary" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
+            About &amp; Help
           </button>
-          <ul class="dropdown-menu dropdown-menu-right">
-            <li><a href="https://nominatim.org/release-docs/develop/api/Overview/" target="_blank">API Reference</a></li>
-            <li><a href="https://nominatim.org/release-docs/develop/api/Faq/" target="_blank">FAQ</a></li>
-            <li><a href="https://help.openstreetmap.org/tags/nominatim/">OpenStreetMap Help</a></li>
-            <li><a href="https://github.com/openstreetmap/Nominatim">Nominatim on Github</a></li>
-            <li role="separator" class="divider"></li>
-            <li><a href="#" class="" data-toggle="modal" data-target="#report-modal">Report problem with results</a></li>
-          </ul>
+          <div class="dropdown-menu dropdown-menu-right">
+            <a class="dropdown-item" href="https://nominatim.org/release-docs/develop/api/Overview/" target="_blank">API Reference</a>
+            <a class="dropdown-item" href="https://nominatim.org/release-docs/develop/api/Faq/" target="_blank">FAQ</a>
+            <a class="dropdown-item" href="https://help.openstreetmap.org/tags/nominatim/">OpenStreetMap Help</a>
+            <a class="dropdown-item" href="https://github.com/osm-search/Nominatim">Nominatim on Github</a>
+            <a class="dropdown-item" href="https://github.com/osm-search/nominatim-ui">This frontend on Github</a>
+            <div class="dropdown-divider"></div>
+            <a class="dropdown-item" href="#" data-toggle="modal" data-target="#report-modal">Report problem with results</a>
+          </div>
         </div>
       </div>
     </div>
@@ -59,8 +62,8 @@
     <div class="modal-dialog">
       <div class="modal-content">
         <div class="modal-header">
-          <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
           <h4 class="modal-title">Report a problem</h4>
+          <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
         </div>
         <div class="modal-body">
           <p>
@@ -72,7 +75,7 @@
             to check how the address was generated before reporting a problem.
           </p>
           <p>
-            Use <a target="_blank" href="https://github.com/openstreetmap/Nominatim/issues">Nominatim issues on github</a>
+            Use <a target="_blank" href="https://github.com/osm-search/Nominatim/issues">Nominatim issues on github</a>
             to report problems.
           </p>
           <p>
@@ -86,7 +89,7 @@
           </p>
         </div>
         <div class="modal-footer">
-          <button type="button" class="btn btn-default" data-dismiss="modal">OK</button>
+          <button type="button" class="btn btn-outline-secondary" data-dismiss="modal">OK</button>
         </div>
       </div>
     </div>
   </footer>
 
   <script src="assets/js/jquery.min.js"></script>
-  <script src="assets/js/bootstrap.min.js"></script>
+  <script src="assets/js/bootstrap.bundle.min.js"></script>
   <script src="assets/js/leaflet.js"></script>
   <script src="assets/js/Control.MiniMap.min.js"></script>
   <script src="assets/js/handlebars.min.js"></script>
   <script src="handlebar_helpers.js"></script>
 
   <script src="assets/js/nominatim-ui.js"></script>
+<script id="searchpage-template" type="text/x-handlebars-template">
+{{#*inline "partial_one_result"}}
+  <div class="result" data-position="{{iResNum}}">
+    {{formatMapIcon aResult}}
+
+    <span class="name">{{aResult.display_name}}</span>
+    <span class="type">({{formatLabel aResult}})</span>
+    <p class="coords">{{aResult.lat}},{{aResult.lon}}</p>  
+
+    <a class="details btn btn-outline-secondary btn-sm" href="{{detailsURL aResult}}">details</a>
+  </div>
+{{/inline}}
+
+<div class="top-bar">
+  <ul class="nav nav-tabs">
+    <li class="nav-item">
+      <a class="nav-link {{#unless hStructured}}active{{/unless}}" data-toggle="tab" href="#simple">simple</a>
+    </li>
+    <li class="nav-item">
+      <a class="nav-link {{#if hStructured}}active{{/if}}" data-toggle="tab" href="#structured">structured</a>
+    </li>
+    <div class="search-type-link">
+      <a href="details.html" class="mr-2">search by id</a>
+      <a id="switch-to-reverse" href="/reverse.html">reverse search</a>
+    </div>
+  </ul>
+  <div class="tab-content p-2">
+    <div class="tab-pane {{#unless hStructured}}active{{/unless}}" id="simple" role="tabpanel">
+      <form class="form-inline" role="search" accept-charset="UTF-8" action="">
+        <input id="q"
+               name="q"
+               type="text"
+               class="form-control form-control-sm"
+               placeholder="Search"
+               value="{{sQuery}}" />
+
+        <div class="form-group search-button-group">
+          <button type="submit" class="btn btn-primary btn-sm mx-1">Search</button>
+          <input type="hidden" name="viewbox" value="{{sViewBox}}" />
+          <input type="hidden" name="dedupe" value="{{sDedupe}}" />
+          <input type="hidden" name="bounded" value="{{sBounded}}" />
+          <input type="hidden" name="accept-language" value="{{sLang}}" />
+          <input type="hidden" name="countrycodes" value="{{sCCode}}" />
+          <input type="hidden" name="limit" value="{{sLimit}}" />
+          <input type="hidden" name="polygon_threshold" value="{{sPolyThreshold}}" />
+        </div>
+      </form>
+    </div>
+    <div class="tab-pane {{#if hStructured}}active{{/if}}" id="structured" role="tabpanel">
+      <form class="form-inline" role="search" accept-charset="UTF-8" action="">
+        <input name="street" type="text" class="form-control form-control-sm mr-1"
+               placeholder="House number/Street"
+               value="{{hStructured.street}}" />
+        <input name="city" type="text" class="form-control form-control-sm mr-1"
+               placeholder="City"
+               value="{{hStructured.city}}" />
+        <input id="county" name="county" type="text" class="form-control form-control-sm mr-1"
+               placeholder="County"
+               value="{{hStructured.county}}" />
+        <input name="state" type="text" class="form-control form-control-sm mr-1"
+               placeholder="State"
+               value="{{hStructured.state}}" />
+        <input name="country" type="text" class="form-control form-control-sm mr-1"
+               placeholder="Country"
+               value="{{hStructured.country}}" />
+        <input name="postalcode" type="text" class="form-control form-control-sm mr-1"
+               placeholder="Postal Code"
+               value="{{hStructured.postalcode}}" />
+
+        <div class="form-group search-button-group">
+          <button type="submit" class="btn btn-primary btn-sm mx-1">Search</button>
+          <input type="hidden" name="viewbox" value="{{sViewBox}}" />
+          <input type="hidden" name="dedupe" value="{{#unless sDedupe}}0{{/unless}}" />
+          <input type="hidden" name="bounded" value="{{#if sBounded}}1{{/if}}" />
+          <input type="hidden" name="accept-language" value="{{sLang}}" />
+          <input type="hidden" name="countrycodes" value="{{sCCode}}" />
+          <input type="hidden" name="limit" value="{{sLimit}}" />
+          <input type="hidden" name="polygon_threshold" value="{{sPolyThreshold}}" />
+        </div>
+      </form>
+    </div>
+    <!-- Additional options -->
+    <a class="btn btn-outline-secondary btn-sm" data-toggle="collapse" data-target="#searchAdvancedOptions" role="button" aria-expanded="false" aria-controls="collapseAdvancedOptions">
+      Advanced options
+    </a>
+    <div class="collapse" id="searchAdvancedOptions">
+      <div id="searchAdvancedOptionsContent">
+          <div class="form-check form-check-inline">
+            <span><input type="checkbox" class="form-check-input api-param-setting"
+                   id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
+            <label class="form-check-label" for="use_viewbox">apply viewbox</label></span>
+            <span><input type="checkbox" class="form-check-input api-param-setting"
+                   id="option_bounded" {{#if sBounded}}checked="checked"{{/if}}>
+            <label class="form-check-label" for="option_bounded">bounded to viewbox</label></span>
+            <span><input type="checkbox" class="form-check-input api-param-setting"
+                   id="option_dedupe" {{#unless sDedupe}}checked="checked"{{/unless}}>
+            <label class="form-check-label" for="option_dedupe">deduplicate results</label></span>
+          </div>
+          <div class="form-check form-check-inline">
+            <span><label class="form-check-label" for="option_limit">Maximum number of results: </label>
+            <input type="number" class="form-check-input api-param-setting" data-api-param="limit" id="option_limit" size="5" min="1" max="50" value="{{sLimit}}"></span>
+            <span><label class="form-check-label" for="option_polygon_threashold">Polygon simplification: </label>
+            <input type="number" class="form-check-input api-param-setting" data-api-param="polygon_threshold" id="option_polygon_threshold" size="5" min="0.0" step="0.01" value="{{sPolyThreshold}}"></span>
+          </div>
+          <div class="form-check form-check-inline">
+            <span><label class="form-check-label" for="accept_lang">Languages: </label>
+            <input type="text" placeholder="e.g. en,zh-Hant" class="form-check-input api-param-setting" data-api-param="accept-language" id="accept_lang" size="15" value="{{sLang}}"></span>
+            <span><label class="form-check-label" for="option_ccode">Countries: </label>
+            <input type="text" placeholder="e.g. de,gb" class="form-check-input api-param-setting" data-api-param="countrycodes" id="option_ccode" size="15" value="{{sCCode}}"></span>
+          </div>
+       </div>
+    </div>
+  </div> <!-- /tab-content -->
+</div> <!-- /top-bar -->
+
+<div id="content">
+
+  {{#if bSearchRan}}
+    <div id="searchresults" class="sidebar">
+      {{#each aSearchResults as |aResult|}}
+        {{>partial_one_result iResNum=@index aResult=aResult env=env}}
+      {{/each}}
+
+      {{#if aSearchResults}}
+        {{#if sMoreURL}}
+          <div class="more">
+            <a class="btn btn-primary" href="{{sMoreURL}}">
+              Search for more results
+            </a>
+          </div>
+        {{/if}}
+      {{else}}
+        <div class="noresults">No search results found</div>
+      {{/if}}
+    </div>
+
+  {{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>.
+    </div>
+
+  {{/if}}
+
+  <div id="map-wrapper">
+    <div id="map-position">
+      <div id="map-position-inner"></div>
+      <div id="map-position-close"><a href="#">hide</a></div>
+    </div>
+    <div id="map"></div>
+  </div>
+</div>
+</script>
+<script id="reversepage-template" type="text/x-handlebars-template">
+
+{{#*inline "partial_one_result"}}
+  <div class="result" data-position="{{iResNum}}">
+    {{formatMapIcon aResult}}
+
+    <span class="name">{{aResult.display_name}}</span>
+    <span class="type">{{formatLabel aResult}}</span>
+    <p class="coords">{{aResult.lat}},{{aResult.lon}}</p>  
+
+    <a class="details btn btn-outline-secondary btn-sm" href="{{detailsURL aResult}}">details</a>
+  </div>
+{{/inline}}
+
+<div class="top-bar">
+  <form class="form-inline" role="search" accept-charset="UTF-8" action="">
+    <div class="form-group">
+      <input name="format" type="hidden" value="html">
+      <label>lat</label>
+      <input name="lat"
+             type="text"
+             class="form-control form-control-sm"
+             placeholder="latitude"
+             value="{{fLat}}" />
+      <a id="switch-coords" class="btn btn-outline-secondary btn-sm" title="switch lat and lon">&lt;&gt;</a>
+      <label>lon</label>
+      <input name="lon"
+             type="text"
+             class="form-control form-control-sm"
+             placeholder="longitude"
+             value="{{fLon}}" />
+      <label>max zoom</label>
+      <select name="zoom" class="form-control form-control-sm" value="{{iZoom}}">
+        {{zoomLevels iZoom}}
+      </select>
+      <button type="submit" class="btn btn-primary btn-sm mx-1">
+        Search
+      </button>
+    </div>
+    <div class="search-type-link">
+      <a href="details.html" class="mr-2">search by id</a>
+      <a href="search.html">forward search</a>
+    </div>
+  </form>
+</div>
+
+<div id="content">
+  {{#if aPlace}}
+    <div id="searchresults" class="sidebar">
+      {{>partial_one_result iResNum=0 aResult=aPlace env=env}}
+    </div>
+  {{else}}
+    <div id="intro" class="sidebar">
+      Search for coordinates or click anywhere on the map.
+    </div>
+  {{/if}}
+
+  <div id="map-wrapper">
+    <div id="map-position">
+      <div id="map-position-inner"></div>
+      <div id="map-position-close"><a href="#">hide</a></div>
+    </div>
+    <div id="map"></div>
+  </div>
+</div>
+</script>
 <script id="detailspage-template" type="text/x-handlebars-template">
 
 {{#*inline "partial_details_one_row"}}
-  <tr class="{{isaddresses_unused this}}">
+  <tr class="{{#unless bAddressLineUsed}}notused{{/unless}}">
     <td class="name">
       {{#if this.localname}}
         {{this.localname}}
         <span class="noname">No Name</span>
       {{/if}}
     </td>
-    <td>{{this.class}}:{{this.type}}</td>
+    <td>{{formatPlaceType this}}</td>
     <td>{{osmLink this}}</td>
     <td>{{this.rank_address}}</td>
     <td>{{formatAdminLevel this.admin_level}}</td>
-    <td>{{formatDistance this.distance}}</td>
-    <td>{{detailsPermaLink this 'details >'}}</td>
+    <td>{{formatDistance this.distance bDistanceInMeters}}</td>
+    <td>{{#if this.osm_id}}<a href="{{detailsURL this}}">details</a>{{/if}}</td>
   </tr>
 {{/inline}}
 
     <div class="col-sm-10">
       <h1>
         {{aPlace.localname}}
-        <small>{{detailsPermaLink aPlace 'link to this page'}}</small>
+        <small><a href="{{detailsURL aPlace}}">link to this page</a></small>
       </h1>
     </div>
     <div class="col-sm-2 text-right">
-      {{formatMapIcon aPlace.icon}}
+      {{formatMapIcon aPlace}}
     </div>
   </div>
   <div class="row">
           <td>Last Updated</td>
           <td>{{aPlace.indexed_date}}</td>
         </tr>
+        {{#if (isAdminBoundary aPlace) }}
         <tr>
           <td>Admin Level</td>
           <td>{{aPlace.admin_level}}</td>
         </tr>
+        {{/if}}
+        <tr>
+          <td>Search Rank</td>
+          <td>{{aPlace.rank_search}}</td>
+        </tr>
         <tr>
-          <td>Rank</td>
-          <td>{{formatSearchRank aPlace.rank_search}}</td>
+          <td>Address Rank</td>
+          <td>{{aPlace.rank_address}} ({{formatAddressRank aPlace.rank_address}})</td>
         </tr>
         {{#if aPlace.calculated_importance}}
           <tr>
   <div class="row">
     <div class="col-md-12">
       <h2>Address</h2>
-       <table id="address" class="table table-striped table-responsive">
+       <table id="address" class="table table-striped table-small">
         <thead>
           <tr>
             <th>Local name</th>
         <tbody>
           {{#if aPlace.address}}
             {{#each aPlace.address}}
-              {{> partial_details_one_row}}
+              {{> partial_details_one_row bDistanceInMeters=false bAddressLineUsed=this.isaddress}}
             {{/each}}
           {{/if}}
 
           {{#if aPlace.linked_places}}
             {{> partial_h2 'Linked Places'}}
             {{#each aPlace.linked_places}}
-              {{> partial_details_one_row}}
+              {{> partial_details_one_row bDistanceInMeters=true bAddressLineUsed=true}}
             {{/each}}
           {{/if}}
 
             {{#each aPlace.hierarchy as |lines type|}}
               {{> partial_h3 type}}
               {{#each lines}}
-                {{> partial_details_one_row}}
+                {{> partial_details_one_row bDistanceInMeters=true bAddressLineUsed=true}}
               {{/each}}
             {{/each}}
           {{else}}
             <tr>
               <td>
-                <a class="btn btn-default btn-xs"
+                <a class="btn btn-outline-secondary btn-sm"
                   href="{{base_url}}&hierarchy=1">display child places</a>
               </td>
             </tr>
     </div>
   </div>
 </div></script>
+<script id="deletable-template" type="text/x-handlebars-template">
+<div class="container">
+  <div class="row">
+    <div class="col-sm-12">
+      <h1>Deletable</h1>
+
+      <p>
+          {{aPolygons.length}} objects have been deleted in OSM but are still in the Nominatim database.
+      </p>
+
+      <table class="table table-striped table-hover">
+        <thead>
+          <th>Place id</th>
+          <th>Country Code</th>
+          <th>Name</th>
+          <th>OSM id</th>
+          <th>OSM type</th>
+          <th>Class</th>
+          <th>Type</th>
+        </thead>
+        <tbody>
+          {{#each aPolygons}}
+          <tr>
+            <td><a href="{{detailsURL this}}">{{this.place_id}}</a></td>
+            <td>{{country_code}}</td>
+            <td>{{name}}</td>
+            <td>{{osmLink this}}</td>
+            <td>{{osm_type}}</td>
+            <td>{{class}}</td>
+            <td>{{type}}</td>
+          </tr>
+          {{/each}}
+        </tbody>
+      </table>
+
+
+    </div>
+  </div>
+</div
+
+</script>
+<script id="polygons-template" type="text/x-handlebars-template">
+<div class="container">
+  <div class="row">
+    <div class="col-sm-12">
+      <h1>Broken polygons</h1>
+
+      <p>
+          Total number of broken polygons: {{aPolygons.length}}.
+      </p>
+
+      <table class="table table-striped table-hover">
+        <thead>
+          <th>OSM type</th>
+          <th>OSM id</th>
+          <th>Class</th>
+          <th>Type</th>
+          <th>Name</th>
+          <th>Country Code</th>
+          <th>Error message</th>
+          <th>Updated</th>
+          <th>&nbsp;</th>
+        </thead>
+        <tbody>
+          {{#each aPolygons}}
+          <tr>
+            <td>{{osm_type}}</td>
+            <td>{{osmLink this}}</td>
+            <td>{{class}}</td>
+            <td>{{type}}</td>
+            <td>{{name}}</td>
+            <td>{{country_code}}</td>
+            <td>{{errormessage}}</td>
+            <td>{{updated}}</td>
+            <td>
+              <a href="http://localhost:8111/import?url=https://www.openstreetmap.org/api/0.6/{{formatOSMType osm_type}}/{{osm_id}}/full" target="josm">josm</a>
+            </td>
+          </tr>
+          {{/each}}
+        </tbody>
+      </table>
+
+
+    </div>
+  </div>
+</div
+
+</script>
 </body>
 </html>