]> git.openstreetmap.org Git - nominatim-ui.git/blobdiff - dist/assets/js/nominatim-ui.js
Merge pull request #18 from mtmail/version-1dot2
[nominatim-ui.git] / dist / assets / js / nominatim-ui.js
index faf69020270b48925a0486b16a86e55ac00239da..c3ffd1bed2b9c2114763d2f39de2471097839ce1 100644 (file)
@@ -599,6 +599,7 @@ function search_page_load() {
           aPlace = null;
         }
 
+        context.bSearchRan = true;
         context.aPlace = aPlace;
 
         render_template($('main'), 'reversepage-template', context);
@@ -666,12 +667,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);
@@ -770,13 +772,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 +814,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);