]> git.openstreetmap.org Git - nominatim-ui.git/blobdiff - dist/assets/js/nominatim-ui.js
/reverse.html should be reverse.html to app works in subdirectory
[nominatim-ui.git] / dist / assets / js / nominatim-ui.js
index c3ffd1bed2b9c2114763d2f39de2471097839ce1..54eaa75116be30c9c5d6896ede7159e3b468c618 100644 (file)
@@ -80,7 +80,7 @@ function map_viewbox_as_string() {
 // PAGE HELPERS
 // *********************************************************
 
-function fetch_from_api(endpoint_name, params, callback) {
+function generate_full_api_url(endpoint_name, params) {
   //
   // `&a=&b=&c=1` => '&c=1'
   var param_names = Object.keys(params);
@@ -93,16 +93,39 @@ function fetch_from_api(endpoint_name, params, callback) {
 
   var api_url = get_config_value('Nominatim_API_Endpoint') + endpoint_name + '.php?'
                   + $.param(params);
-  if (endpoint_name !== 'status') {
-    $('#api-request-link').attr('href', api_url);
+  return api_url;
+}
+
+function update_last_updated(endpoint_name, params) {
+  if (endpoint_name === 'status') return;
+
+  var api_url = generate_full_api_url(endpoint_name, params);
+  $('#last-updated').show();
+
+  $('#api-request a').attr('href', api_url);
+  $('#api-request').show();
+
+  if (endpoint_name === 'search' || endpoint_name === 'reverse') {
+    $('#api-request-debug a').attr('href', api_url + '&debug=1');
+    $('#api-request-debug').show();
+  } else {
+    $('#api-request-debug').hide();
   }
+}
+
+function fetch_from_api(endpoint_name, params, callback) {
+  var api_url = generate_full_api_url(endpoint_name, params);
   $.get(api_url, function (data) {
+    if (endpoint_name !== 'status') {
+      update_last_updated(endpoint_name, params);
+    }
     callback(data);
   });
 }
 
 function update_data_date() {
   fetch_from_api('status', { format: 'json' }, function (data) {
+    $('#last-updated').show();
     $('#data-date').text(data.data_updated);
   });
 }
@@ -134,6 +157,8 @@ function hide_error() {
 jQuery(document).ready(function () {
   hide_error();
 
+  $('#last-updated').hide();
+
   $(document).ajaxStart(function () {
     $('#loading').fadeIn('fast');
   }).ajaxComplete(function () {
@@ -210,6 +235,7 @@ function details_page_load() {
     place_id: search_params.get('place_id'),
     osmtype: search_params.get('osmtype'),
     osmid: search_params.get('osmid'),
+    class: search_params.get('class'),
     keywords: search_params.get('keywords'),
     addressdetails: 1,
     hierarchy: (search_params.get('hierarchy') === '1' ? 1 : 0),
@@ -305,7 +331,7 @@ function display_map_position(mouse_lat_lng) {
   };
   $('#switch-to-reverse').attr('href', 'reverse.html?' + $.param(reverse_params));
 
-  $('input#use_viewbox').trigger('change');
+  $('input.api-param-setting').trigger('change');
 }
 
 function init_map_on_search_page(is_reverse_search, nominatim_results, request_lat,
@@ -430,6 +456,23 @@ function init_map_on_search_page(is_reverse_search, nominatim_results, request_l
     update_viewbox_field();
   });
 
+  $('input#option_bounded').on('change', function () {
+    $('input[name=bounded]')
+      .val($('input#option_bounded')
+        .prop('checked') ? '1' : '');
+  });
+
+  $('input#option_dedupe').on('change', function () {
+    $('input[name=dedupe]')
+      .val($('input#option_dedupe')
+        .prop('checked') ? '' : '0');
+  });
+
+  $('input[data-api-param]').on('change', function (e) {
+    $('input[name=' + $(e.target).data('api-param') + ']').val(e.target.value);
+  });
+
+
   function get_result_element(position) {
     return $('.result').eq(position);
   }
@@ -641,6 +684,12 @@ function search_page_load() {
       postalcode: search_params.get('postalcode'),
       polygon_geojson: get_config_value('Search_AreaPolygons', false) ? 1 : 0,
       viewbox: search_params.get('viewbox'),
+      bounded: search_params.get('bounded'),
+      dedupe: search_params.get('dedupe'),
+      'accept-language': search_params.get('accept-language'),
+      countrycodes: search_params.get('countrycodes'),
+      limit: search_params.get('limit'),
+      polygon_threshold: search_params.get('polygon_threshold'),
       exclude_place_ids: search_params.get('exclude_place_ids'),
       format: 'jsonv2'
     };
@@ -648,6 +697,12 @@ function search_page_load() {
     context = {
       sQuery: api_request_params.q,
       sViewBox: search_params.get('viewbox'),
+      sBounded: search_params.get('bounded'),
+      sDedupe: search_params.get('dedupe'),
+      sLang: search_params.get('accept-language'),
+      sCCode: search_params.get('countrycodes'),
+      sLimit: search_params.get('limit'),
+      sPolyThreshold: search_params.get('polygon_threshold'),
       env: {}
     };
 
@@ -670,19 +725,20 @@ function search_page_load() {
         context.bSearchRan = true;
         context.aSearchResults = aResults;
 
-        if (aResults.length >= 10) {
-          var aExcludePlaceIds = [];
-          if (search_params.has('exclude_place_ids')) {
-            aExcludePlaceIds = search_params.get('exclude_place_ids').split(',');
-          }
-          for (var i = 0; i < aResults.length; i += 1) {
-            aExcludePlaceIds.push(aResults[i].place_id);
-          }
-
-          var parsed_url = new URLSearchParams(window.location.search);
-          parsed_url.set('exclude_place_ids', aExcludePlaceIds.join(','));
-          context.sMoreURL = '?' + parsed_url.toString();
+        // lonvia wrote: https://github.com/osm-search/nominatim-ui/issues/24
+        // I would suggest to remove the guessing and always show the link. Nominatim only returns
+        // one or two results when it believes the result to be a good enough match.
+        // if (aResults.length >= 10) {
+        var aExcludePlaceIds = [];
+        if (search_params.has('exclude_place_ids')) {
+          aExcludePlaceIds = search_params.get('exclude_place_ids').split(',');
+        }
+        for (var i = 0; i < aResults.length; i += 1) {
+          aExcludePlaceIds.push(aResults[i].place_id);
         }
+        var parsed_url = new URLSearchParams(window.location.search);
+        parsed_url.set('exclude_place_ids', aExcludePlaceIds.join(','));
+        context.sMoreURL = '?' + parsed_url.toString();
 
         render_template($('main'), 'searchpage-template', context);
         update_html_title('Result for ' + api_request_params.q);
@@ -757,7 +813,9 @@ jQuery(document).ready(function () {
 
   function parse_url_and_load_page() {
     // 'search', 'reverse', 'details'
-    var pagename = window.location.pathname.replace('.html', '').replace(/^\//, '');
+    var pagename = window.location.pathname.replace('.html', '').replace(/^.*\//, '');
+
+    if (pagename === '') pagename = 'search';
 
     $('body').attr('id', pagename + '-page');
 
@@ -815,6 +873,7 @@ jQuery(document).ready(function () {
   $(document).on('click', 'a', function (e) {
     var target_url = $(this).attr('href');
     if (!is_relative_url(target_url)) return;
+    if ($(this).parents('#last-updated').length !== 0) return;
 
     e.preventDefault();
     e.stopPropagation();