]> git.openstreetmap.org Git - nominatim-ui.git/commitdiff
structured search form
authormarc tobias <mtmail@gmx.net>
Thu, 7 May 2020 23:27:35 +0000 (01:27 +0200)
committermarc tobias <mtmail@gmx.net>
Thu, 7 May 2020 23:27:35 +0000 (01:27 +0200)
dist/assets/css/search.css
dist/assets/js/nominatim-ui.js
dist/search.html
dist/searchpage.hbs
src/assets/css/search.css
src/assets/js/searchpage.js
src/templates/searchpage.hbs

index f7448f7ad664e877f017e69a82e182a4d1eb9a9e..51a4490ed44adc794d8b918c5d7a2a1e9ea562c0 100755 (executable)
@@ -1,9 +1,17 @@
-
-
-form {
+.top-bar {
   width: 100%;
   padding: 1em 15px;
 }
+
+.top-bar #q {
+  max-width: 500px;
+}
+
+.form-group-simple.hidden,
+.form-group-structured.hidden {
+  display: none;
+}
+
 form #q {
   min-width: 500px;
 }
@@ -140,6 +148,16 @@ form label {
     width: 100%;
   }
   .search-button-group {
-    display: inline
+    display: inline;
   }
 }
+
+.search-button-group {
+  margin-top: 3px;
+  box-sizing: content-box;
+  margin-bottom: 3px;
+}
+
+label {
+  font-weight: normal;
+}
\ No newline at end of file
index 56f731f943aa5d671d523a7a29067f54bec97e1f..d61aac57ef60cf4d01c2af8912df6fb02ca0a8ca 100644 (file)
@@ -408,8 +408,19 @@ function init_map_on_search_page(is_reverse_search, nominatim_results, request_l
     update_viewbox_field();
   });
 
-
-
+  $("input[name='query-selector']").click(function () {
+    var query_val = $("input[name='query-selector']:checked").val();
+    if (query_val === 'simple') {
+      $('div.form-group-simple').removeClass('hidden');
+      $('div.form-group-structured').addClass('hidden');
+      $('.form-group-structured').find('input:text').val('');
+    } else if (query_val === 'structured') {
+      console.log('here');
+      $('div.form-group-simple').addClass('hidden');
+      $('div.form-group-structured').removeClass('hidden');
+      $('.form-group-simple').find('input:text').val('');
+    }
+  });
 
   function get_result_element(position) {
     return $('.result').eq(position);
@@ -534,9 +545,6 @@ function init_map_on_search_page(is_reverse_search, nominatim_results, request_l
 
 
 
-
-
-
 jQuery(document).ready(function () {
   //
   if (!$('#search-page,#reverse-page').length) { return; }
@@ -619,6 +627,12 @@ jQuery(document).ready(function () {
   } else {
     api_request_params = {
       q: search_params.get('q'),
+      street: search_params.get('street'),
+      city: search_params.get('city'),
+      county: search_params.get('county'),
+      state: search_params.get('state'),
+      country: search_params.get('country'),
+      postalcode: search_params.get('postalcode'),
       polygon_geojson: search_params.get('polygon_geojson') ? 1 : 0,
       viewbox: search_params.get('viewbox'),
       exclude_place_ids: search_params.get('exclude_place_ids'),
@@ -626,14 +640,24 @@ jQuery(document).ready(function () {
     };
 
     context = {
-      // aSearchResults: aResults,
       sQuery: api_request_params.q,
       sViewBox: search_params.get('viewbox'),
       env: Nominatim_Config
-      // sMoreURL: 'x'
     };
 
-    if (api_request_params.q) {
+    if (api_request_params.street || api_request_params.city || api_request_params.county
+      || api_request_params.state || api_request_params.country || api_request_params.postalcode) {
+      context.hStructured = {
+        street: api_request_params.street,
+        city: api_request_params.city,
+        county: api_request_params.county,
+        state: api_request_params.state,
+        country: api_request_params.country,
+        postalcode: api_request_params.postalcode
+      };
+    }
+
+    if (api_request_params.q || context.hStructured) {
 
       fetch_from_api('search', api_request_params, function (aResults) {
 
index f0282d05f5324218d18bf836c3de2d499a7683a9..b84e93c914ffb134005f84eb4d7b2caaa9ca836f 100644 (file)
   </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}}" />
-  </div>
-  <div class="form-group search-button-group">
-    <button type="submit" class="btn btn-primary btn-sm">Search</button>
-    {{#if env.Search_AreaPolygons}}
-      <input type="hidden" value="1" name="polygon_geojson" />
-    {{/if}}
-    <input type="hidden" name="viewbox" value="{{sViewBox}}" />
-    <div class="checkbox-inline">
-      <input type="checkbox"
-             id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
-      <label for="use_viewbox">apply viewbox</label>
-    </div>
-  </div>
+<div class="top-bar" id="structured-query-selector">
   <div class="search-type-link">
     <a id="switch-to-reverse" href="/reverse.html">reverse search</a>
   </div>
-</form>
+  <div class="radio-inline"><input type="radio" name="query-selector" id="simple" value="simple" {{#unless hStructured}}checked="checked"{{/unless}}>
+  <label for="simple">simple</label></div>
+  <div class="radio-inline"><input type="radio" name="query-selector" id="structured" value="structured" {{#if hStructured}}checked="checked"{{/if}}>
+  <label for="structured">structured</label></div>
+
+  <form class="form-inline" role="search" accept-charset="UTF-8" action="">
+    <div class="form-group-simple {{#if hStructured}}hidden{{/if}}">
+      <input id="q"
+             name="q"
+             type="text"
+             class="form-control input-sm"
+             placeholder="Search"
+             value="{{sQuery}}" />
+    </div>
+    <div class="form-group-structured {{#unless hStructured}}hidden{{/unless}}">
+      <div class="form-inline">
+        <input name="street" type="text" class="form-control input-sm"
+               placeholder="House number/Street"
+               value="{{hStructured.street}}" />
+        <input name="city" type="text" class="form-control input-sm"
+               placeholder="City"
+               value="{{hStructured.city}}" />
+        <input id="county" name="county" type="text" class="form-control input-sm"
+               placeholder="County"
+               value="{{hStructured.county}}" />
+        <input name="state" type="text" class="form-control input-sm"
+               placeholder="State"
+               value="{{hStructured.state}}" />
+        <input name="country" type="text" class="form-control input-sm"
+               placeholder="Country"
+               value="{{hStructured.country}}" />
+        <input name="postalcode" type="text" class="form-control input-sm"
+               placeholder="Postal Code"
+               value="{{hStructured.postalcode}}" />
+      </div>
+    </div>
+    <div class="form-group search-button-group">
+      <button type="submit" class="btn btn-primary btn-sm">Search</button>
+      {{#if env.Search_AreaPolygons}}
+        <input type="hidden" value="1" name="polygon_geojson" />
+      {{/if}}
+      <input type="hidden" name="viewbox" value="{{sViewBox}}" />
+      <div class="checkbox-inline">
+        <input type="checkbox"
+               id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
+        <label for="use_viewbox">apply viewbox</label>
+      </div>
+    </div>
+  </form>
+</div>
 
 <div id="content">
 
index a4c220d7e97d6671e8af8cba00a45bcdd0c18600..d1d70ae252bcccb9b71c7b4c90d9acad31849fd6 100644 (file)
   </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}}" />
-  </div>
-  <div class="form-group search-button-group">
-    <button type="submit" class="btn btn-primary btn-sm">Search</button>
-    {{#if env.Search_AreaPolygons}}
-      <input type="hidden" value="1" name="polygon_geojson" />
-    {{/if}}
-    <input type="hidden" name="viewbox" value="{{sViewBox}}" />
-    <div class="checkbox-inline">
-      <input type="checkbox"
-             id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
-      <label for="use_viewbox">apply viewbox</label>
-    </div>
-  </div>
+<div class="top-bar" id="structured-query-selector">
   <div class="search-type-link">
     <a id="switch-to-reverse" href="/reverse.html">reverse search</a>
   </div>
-</form>
+  <div class="radio-inline"><input type="radio" name="query-selector" id="simple" value="simple" {{#unless hStructured}}checked="checked"{{/unless}}>
+  <label for="simple">simple</label></div>
+  <div class="radio-inline"><input type="radio" name="query-selector" id="structured" value="structured" {{#if hStructured}}checked="checked"{{/if}}>
+  <label for="structured">structured</label></div>
+
+  <form class="form-inline" role="search" accept-charset="UTF-8" action="">
+    <div class="form-group-simple {{#if hStructured}}hidden{{/if}}">
+      <input id="q"
+             name="q"
+             type="text"
+             class="form-control input-sm"
+             placeholder="Search"
+             value="{{sQuery}}" />
+    </div>
+    <div class="form-group-structured {{#unless hStructured}}hidden{{/unless}}">
+      <div class="form-inline">
+        <input name="street" type="text" class="form-control input-sm"
+               placeholder="House number/Street"
+               value="{{hStructured.street}}" />
+        <input name="city" type="text" class="form-control input-sm"
+               placeholder="City"
+               value="{{hStructured.city}}" />
+        <input id="county" name="county" type="text" class="form-control input-sm"
+               placeholder="County"
+               value="{{hStructured.county}}" />
+        <input name="state" type="text" class="form-control input-sm"
+               placeholder="State"
+               value="{{hStructured.state}}" />
+        <input name="country" type="text" class="form-control input-sm"
+               placeholder="Country"
+               value="{{hStructured.country}}" />
+        <input name="postalcode" type="text" class="form-control input-sm"
+               placeholder="Postal Code"
+               value="{{hStructured.postalcode}}" />
+      </div>
+    </div>
+    <div class="form-group search-button-group">
+      <button type="submit" class="btn btn-primary btn-sm">Search</button>
+      {{#if env.Search_AreaPolygons}}
+        <input type="hidden" value="1" name="polygon_geojson" />
+      {{/if}}
+      <input type="hidden" name="viewbox" value="{{sViewBox}}" />
+      <div class="checkbox-inline">
+        <input type="checkbox"
+               id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
+        <label for="use_viewbox">apply viewbox</label>
+      </div>
+    </div>
+  </form>
+</div>
 
 <div id="content">
 
index f7448f7ad664e877f017e69a82e182a4d1eb9a9e..51a4490ed44adc794d8b918c5d7a2a1e9ea562c0 100755 (executable)
@@ -1,9 +1,17 @@
-
-
-form {
+.top-bar {
   width: 100%;
   padding: 1em 15px;
 }
+
+.top-bar #q {
+  max-width: 500px;
+}
+
+.form-group-simple.hidden,
+.form-group-structured.hidden {
+  display: none;
+}
+
 form #q {
   min-width: 500px;
 }
@@ -140,6 +148,16 @@ form label {
     width: 100%;
   }
   .search-button-group {
-    display: inline
+    display: inline;
   }
 }
+
+.search-button-group {
+  margin-top: 3px;
+  box-sizing: content-box;
+  margin-bottom: 3px;
+}
+
+label {
+  font-weight: normal;
+}
\ No newline at end of file
index d76dffac9ec538590cbd969f459f2566ac4cdf7a..d909533370d1ed66524d1ddd8c3f7b54c35a3acc 100755 (executable)
@@ -170,8 +170,19 @@ function init_map_on_search_page(is_reverse_search, nominatim_results, request_l
     update_viewbox_field();
   });
 
-
-
+  $("input[name='query-selector']").click(function () {
+    var query_val = $("input[name='query-selector']:checked").val();
+    if (query_val === 'simple') {
+      $('div.form-group-simple').removeClass('hidden');
+      $('div.form-group-structured').addClass('hidden');
+      $('.form-group-structured').find('input:text').val('');
+    } else if (query_val === 'structured') {
+      console.log('here');
+      $('div.form-group-simple').addClass('hidden');
+      $('div.form-group-structured').removeClass('hidden');
+      $('.form-group-simple').find('input:text').val('');
+    }
+  });
 
   function get_result_element(position) {
     return $('.result').eq(position);
@@ -296,9 +307,6 @@ function init_map_on_search_page(is_reverse_search, nominatim_results, request_l
 
 
 
-
-
-
 jQuery(document).ready(function () {
   //
   if (!$('#search-page,#reverse-page').length) { return; }
@@ -381,6 +389,12 @@ jQuery(document).ready(function () {
   } else {
     api_request_params = {
       q: search_params.get('q'),
+      street: search_params.get('street'),
+      city: search_params.get('city'),
+      county: search_params.get('county'),
+      state: search_params.get('state'),
+      country: search_params.get('country'),
+      postalcode: search_params.get('postalcode'),
       polygon_geojson: search_params.get('polygon_geojson') ? 1 : 0,
       viewbox: search_params.get('viewbox'),
       exclude_place_ids: search_params.get('exclude_place_ids'),
@@ -388,14 +402,24 @@ jQuery(document).ready(function () {
     };
 
     context = {
-      // aSearchResults: aResults,
       sQuery: api_request_params.q,
       sViewBox: search_params.get('viewbox'),
       env: Nominatim_Config
-      // sMoreURL: 'x'
     };
 
-    if (api_request_params.q) {
+    if (api_request_params.street || api_request_params.city || api_request_params.county
+      || api_request_params.state || api_request_params.country || api_request_params.postalcode) {
+      context.hStructured = {
+        street: api_request_params.street,
+        city: api_request_params.city,
+        county: api_request_params.county,
+        state: api_request_params.state,
+        country: api_request_params.country,
+        postalcode: api_request_params.postalcode
+      };
+    }
+
+    if (api_request_params.q || context.hStructured) {
 
       fetch_from_api('search', api_request_params, function (aResults) {
 
index a4c220d7e97d6671e8af8cba00a45bcdd0c18600..d1d70ae252bcccb9b71c7b4c90d9acad31849fd6 100644 (file)
   </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}}" />
-  </div>
-  <div class="form-group search-button-group">
-    <button type="submit" class="btn btn-primary btn-sm">Search</button>
-    {{#if env.Search_AreaPolygons}}
-      <input type="hidden" value="1" name="polygon_geojson" />
-    {{/if}}
-    <input type="hidden" name="viewbox" value="{{sViewBox}}" />
-    <div class="checkbox-inline">
-      <input type="checkbox"
-             id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
-      <label for="use_viewbox">apply viewbox</label>
-    </div>
-  </div>
+<div class="top-bar" id="structured-query-selector">
   <div class="search-type-link">
     <a id="switch-to-reverse" href="/reverse.html">reverse search</a>
   </div>
-</form>
+  <div class="radio-inline"><input type="radio" name="query-selector" id="simple" value="simple" {{#unless hStructured}}checked="checked"{{/unless}}>
+  <label for="simple">simple</label></div>
+  <div class="radio-inline"><input type="radio" name="query-selector" id="structured" value="structured" {{#if hStructured}}checked="checked"{{/if}}>
+  <label for="structured">structured</label></div>
+
+  <form class="form-inline" role="search" accept-charset="UTF-8" action="">
+    <div class="form-group-simple {{#if hStructured}}hidden{{/if}}">
+      <input id="q"
+             name="q"
+             type="text"
+             class="form-control input-sm"
+             placeholder="Search"
+             value="{{sQuery}}" />
+    </div>
+    <div class="form-group-structured {{#unless hStructured}}hidden{{/unless}}">
+      <div class="form-inline">
+        <input name="street" type="text" class="form-control input-sm"
+               placeholder="House number/Street"
+               value="{{hStructured.street}}" />
+        <input name="city" type="text" class="form-control input-sm"
+               placeholder="City"
+               value="{{hStructured.city}}" />
+        <input id="county" name="county" type="text" class="form-control input-sm"
+               placeholder="County"
+               value="{{hStructured.county}}" />
+        <input name="state" type="text" class="form-control input-sm"
+               placeholder="State"
+               value="{{hStructured.state}}" />
+        <input name="country" type="text" class="form-control input-sm"
+               placeholder="Country"
+               value="{{hStructured.country}}" />
+        <input name="postalcode" type="text" class="form-control input-sm"
+               placeholder="Postal Code"
+               value="{{hStructured.postalcode}}" />
+      </div>
+    </div>
+    <div class="form-group search-button-group">
+      <button type="submit" class="btn btn-primary btn-sm">Search</button>
+      {{#if env.Search_AreaPolygons}}
+        <input type="hidden" value="1" name="polygon_geojson" />
+      {{/if}}
+      <input type="hidden" name="viewbox" value="{{sViewBox}}" />
+      <div class="checkbox-inline">
+        <input type="checkbox"
+               id="use_viewbox" {{#if sViewBox}}checked="checked"{{/if}}>
+        <label for="use_viewbox">apply viewbox</label>
+      </div>
+    </div>
+  </form>
+</div>
 
 <div id="content">