]> git.openstreetmap.org Git - nominatim-ui.git/blobdiff - src/assets/js/controller.js
fix URL links when serving app from a subdirectory
[nominatim-ui.git] / src / assets / js / controller.js
index 4070d09ec79ff4164df14897a6602d271b323fc7..4196151180f0d196b0bfceaca1daf6864558b92e 100644 (file)
@@ -3,7 +3,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');
 
@@ -22,19 +24,37 @@ jQuery(document).ready(function () {
     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();
   });