]> git.openstreetmap.org Git - nominatim-ui.git/blobdiff - dist/assets/js/nominatim-ui.js
redirect to API URL when parameter &debug=1 in URL
[nominatim-ui.git] / dist / assets / js / nominatim-ui.js
index faf69020270b48925a0486b16a86e55ac00239da..d16de70e48b3d9edf37319a0582b5696f6d759a2 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,6 +93,11 @@ function fetch_from_api(endpoint_name, params, callback) {
 
   var api_url = get_config_value('Nominatim_API_Endpoint') + endpoint_name + '.php?'
                   + $.param(params);
+  return api_url;
+}
+
+function fetch_from_api(endpoint_name, params, callback) {
+  var api_url = generate_full_api_url(endpoint_name, params);
   if (endpoint_name !== 'status') {
     $('#api-request-link').attr('href', api_url);
   }
@@ -581,6 +586,11 @@ function search_page_load() {
       format: 'jsonv2'
     };
 
+    if (search_params.get('debug') === '1') {
+      window.location.href = generate_full_api_url('reverse', api_request_params);
+      return;
+    }
+
     context = {
       // aPlace: aPlace,
       fLat: api_request_params.lat,
@@ -599,6 +609,7 @@ function search_page_load() {
           aPlace = null;
         }
 
+        context.bSearchRan = true;
         context.aPlace = aPlace;
 
         render_template($('main'), 'reversepage-template', context);
@@ -644,6 +655,11 @@ function search_page_load() {
       format: 'jsonv2'
     };
 
+    if (search_params.get('debug') === '1') {
+      window.location.href = generate_full_api_url('search', api_request_params);
+      return;
+    }
+
     context = {
       sQuery: api_request_params.q,
       sViewBox: search_params.get('viewbox'),
@@ -666,12 +682,13 @@ function search_page_load() {
 
       fetch_from_api('search', api_request_params, function (aResults) {
 
+        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(',');
+            aExcludePlaceIds = search_params.get('exclude_place_ids').split(',');
           }
           for (var i = 0; i < aResults.length; i += 1) {
             aExcludePlaceIds.push(aResults[i].place_id);
@@ -755,7 +772,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');
 
@@ -770,13 +789,41 @@ jQuery(document).ready(function () {
     }
   }
 
+  function is_relative_url(url) {
+    if (!url) return false;
+    if (url.indexOf('?') === 0) return true;
+    if (url.indexOf('/') === 0) return true;
+    if (url.indexOf('#') === 0) return false;
+    if (url.match(/^http/)) return false;
+    if (!url.match(/\.html/)) return true;
+
+    return false;
+  }
+
+  // remove any URL paramters with empty values
+  // '&empty=&filled=value' => 'filled=value'
+  function clean_up_url_parameters(url) {
+    var url_params = new URLSearchParams(url);
+    var to_delete = []; // deleting inside loop would skip iterations
+    url_params.forEach(function (value, key) {
+      if (value === '') to_delete.push(key);
+    });
+    for (var i = 0; i < to_delete.length; i += 1) {
+      url_params.delete(to_delete[i]);
+    }
+    return url_params.toString();
+  }
+
   parse_url_and_load_page();
 
   // load page after form submit
   $(document).on('submit', 'form', function (e) {
     e.preventDefault();
 
-    window.history.pushState(myhistory, '', '?' + $(this).serialize());
+    var target_url = $(this).serialize();
+    target_url = clean_up_url_parameters(target_url);
+
+    window.history.pushState(myhistory, '', '?' + target_url);
 
     parse_url_and_load_page();
   });
@@ -784,10 +831,10 @@ jQuery(document).ready(function () {
   // load page after click on relative URL
   $(document).on('click', 'a', function (e) {
     var target_url = $(this).attr('href');
-    if (target_url && target_url.match(/^http/)) return;
-    if (target_url && !target_url.match(/\.html/)) return;
+    if (!is_relative_url(target_url)) return;
 
     e.preventDefault();
+    e.stopPropagation();
 
     window.history.pushState(myhistory, '', target_url);