]> git.openstreetmap.org Git - nominatim-ui.git/blob - src/assets/js/controller.js
e7f010c861ca4e1d9c7057e6d60803f84c3a7e29
[nominatim-ui.git] / src / assets / js / controller.js
1 jQuery(document).ready(function () {
2   var myhistory = [];
3
4   function parse_url_and_load_page() {
5     // 'search', 'reverse', 'details'
6     var pagename = window.location.pathname.replace('.html', '').replace(/^\//, '');
7
8     $('body').attr('id', pagename + '-page');
9
10     if (pagename === 'search' || pagename === 'reverse') {
11       search_page_load();
12     } else if (pagename === 'details') {
13       details_page_load();
14     } else if (pagename === 'deletable') {
15       deletable_page_load();
16     } else if (pagename === 'polygons') {
17       polygons_page_load();
18     }
19   }
20
21   function is_relative_url(url) {
22     if (!url) return false;
23     if (url.indexOf('?') === 0) return true;
24     if (url.indexOf('/') === 0) return true;
25     if (url.indexOf('#') === 0) return false;
26     if (url.match(/^http/)) return false;
27     if (!url.match(/\.html/)) return true;
28
29     return false;
30   }
31
32   // remove any URL paramters with empty values
33   // '&empty=&filled=value' => 'filled=value'
34   function clean_up_url_parameters(url) {
35     var url_params = new URLSearchParams(url);
36     var to_delete = []; // deleting inside loop would skip iterations
37     url_params.forEach(function (value, key) {
38       if (value === '') to_delete.push(key);
39     });
40     for (var i=0; i<to_delete.length; i++) {
41       url_params.delete(to_delete[i]);
42     }
43     return url_params.toString();
44   }
45
46   parse_url_and_load_page();
47
48   // load page after form submit
49   $(document).on('submit', 'form', function (e) {
50     e.preventDefault();
51
52     var target_url = $(this).serialize();
53     target_url = clean_up_url_parameters(target_url);
54
55     window.history.pushState(myhistory, '', '?' + target_url);
56
57     parse_url_and_load_page();
58   });
59
60   // load page after click on relative URL
61   $(document).on('click', 'a', function (e) {
62     var target_url = $(this).attr('href');
63     if (!is_relative_url(target_url)) return;
64
65     e.preventDefault();
66     e.stopPropagation();
67
68     window.history.pushState(myhistory, '', target_url);
69
70     parse_url_and_load_page();
71   });
72
73   // deal with back-button and other user action
74   window.onpopstate = function () {
75     parse_url_and_load_page();
76   };
77 });
78