]> git.openstreetmap.org Git - nominatim-ui.git/commitdiff
Merge pull request #29 from mtmail/debug-info-link
authormtmail <mtmail@gmx.net>
Tue, 1 Sep 2020 15:22:21 +0000 (17:22 +0200)
committerGitHub <noreply@github.com>
Tue, 1 Sep 2020 15:22:21 +0000 (17:22 +0200)
Add a &debug=1 API link in the header instead of redirecting

13 files changed:
dist/assets/css/common.css
dist/assets/js/nominatim-ui.js
dist/assets/js/url-search-params.js
dist/deletable.html
dist/details.html
dist/polygons.html
dist/reverse.html
dist/search.html
src/assets/css/common.css
src/assets/js/base.js
src/assets/js/controller.js
src/assets/js/searchpage.js
src/layout.html

index ab814d77ed45f6b908718319bc327b807bebf63f..1141b33568a8071d75691d131fc1fc2f4194e82a 100755 (executable)
@@ -32,6 +32,7 @@ header #last-updated {
   font-size: 0.7em;
   white-space: nowrap;
   text-align: center;
+  display: none;
 }
 
 header .dropdown-menu {
index e36e866610a056b0bf8c07fe52e4371c1422e61a..4dd8d01ae8e4f840c0cb92b24d45b666c26e9111 100644 (file)
@@ -96,18 +96,36 @@ function generate_full_api_url(endpoint_name, params) {
   return api_url;
 }
 
-function fetch_from_api(endpoint_name, params, callback) {
+function update_last_updated(endpoint_name, params) {
+  if (endpoint_name === 'status') return;
+
   var api_url = generate_full_api_url(endpoint_name, params);
-  if (endpoint_name !== 'status') {
-    $('#api-request-link').attr('href', api_url);
+  $('#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);
   });
 }
@@ -139,6 +157,8 @@ function hide_error() {
 jQuery(document).ready(function () {
   hide_error();
 
+  $('#last-updated').hide();
+
   $(document).ajaxStart(function () {
     $('#loading').fadeIn('fast');
   }).ajaxComplete(function () {
@@ -586,11 +606,6 @@ 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,
@@ -655,11 +670,6 @@ 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'),
@@ -833,6 +843,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')) return;
 
     e.preventDefault();
     e.stopPropagation();
index ff9e3445918e856109742b63cdac5b918e7e48ab..ddf750e09aa95223b21fff79083c567f0fcf322b 100644 (file)
@@ -1,2 +1,2 @@
 /*! (c) Andrea Giammarchi - ISC */
-var self=this||{};try{!function(t,e){if(new t("q=%2B").get("q")!==e||new t({q:e}).get("q")!==e||new t([["q",e]]).get("q")!==e||"q=%0A"!==new t("q=\n").toString()||"q=+%26"!==new t({q:" &"}).toString()||"q=%25zx"!==new t({q:"%zx"}).toString())throw t;self.URLSearchParams=t}(URLSearchParams,"+")}catch(t){!function(t,a,o){"use strict";var u=t.create,h=t.defineProperty,e=/[!'\(\)~]|%20|%00/g,n=/%(?![0-9a-fA-F]{2})/g,r=/\+/g,i={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"},s={append:function(t,e){p(this._ungap,t,e)},delete:function(t){delete this._ungap[t]},get:function(t){return this.has(t)?this._ungap[t][0]:null},getAll:function(t){return this.has(t)?this._ungap[t].slice(0):[]},has:function(t){return t in this._ungap},set:function(t,e){this._ungap[t]=[a(e)]},forEach:function(e,n){var r=this;for(var i in r._ungap)r._ungap[i].forEach(t,i);function t(t){e.call(n,t,a(i),r)}},toJSON:function(){return{}},toString:function(){var t=[];for(var e in this._ungap)for(var n=v(e),r=0,i=this._ungap[e];r<i.length;r++)t.push(n+"="+v(i[r]));return t.join("&")}};for(var c in s)h(f.prototype,c,{configurable:!0,writable:!0,value:s[c]});function f(t){var e=u(null);switch(h(this,"_ungap",{value:e}),!0){case!t:break;case"string"==typeof t:"?"===t.charAt(0)&&(t=t.slice(1));for(var n=t.split("&"),r=0,i=n.length;r<i;r++){var a=(s=n[r]).indexOf("=");-1<a?p(e,g(s.slice(0,a)),g(s.slice(a+1))):s.length&&p(e,g(s),"")}break;case o(t):for(r=0,i=t.length;r<i;r++){var s;p(e,(s=t[r])[0],s[1])}break;case"forEach"in t:t.forEach(l,e);break;default:for(var c in t)p(e,c,t[c])}}function l(t,e){p(this,e,t)}function p(t,e,n){var r=o(n)?n.join(","):n;e in t?t[e].push(r):t[e]=[r]}function g(t){return decodeURIComponent(t.replace(n,"%25").replace(r," "))}function v(t){return encodeURIComponent(t).replace(e,d)}function d(t){return i[t]}self.URLSearchParams=f}(Object,String,Array.isArray)}!function(d){var r=!1;try{r=!!Symbol.iterator}catch(t){}function t(t,e){var n=[];return t.forEach(e,n),r?n[Symbol.iterator]():{next:function(){var t=n.shift();return{done:void 0===t,value:t}}}}"forEach"in d||(d.forEach=function(n,r){var i=this,t=Object.create(null);this.toString().replace(/=[\s\S]*?(?:&|$)/g,"=").split("=").forEach(function(e){!e.length||e in t||(t[e]=i.getAll(e)).forEach(function(t){n.call(r,t,e,i)})})}),"keys"in d||(d.keys=function(){return t(this,function(t,e){this.push(e)})}),"values"in d||(d.values=function(){return t(this,function(t,e){this.push(t)})}),"entries"in d||(d.entries=function(){return t(this,function(t,e){this.push([e,t])})}),!r||Symbol.iterator in d||(d[Symbol.iterator]=d.entries),"sort"in d||(d.sort=function(){for(var t,e,n,r=this.entries(),i=r.next(),a=i.done,s=[],c=Object.create(null);!a;)e=(n=i.value)[0],s.push(e),e in c||(c[e]=[]),c[e].push(n[1]),a=(i=r.next()).done;for(s.sort(),t=0;t<s.length;t++)this.delete(s[t]);for(t=0;t<s.length;t++)e=s[t],this.append(e,c[e].shift())}),function(f){function l(t){var e=t.append;t.append=d.append,URLSearchParams.call(t,t._usp.search.slice(1)),t.append=e}function p(t,e){if(!(t instanceof e))throw new TypeError("'searchParams' accessed on an object that does not implement interface "+e.name)}function t(e){var n,r,i,t=e.prototype,a=v(t,"searchParams"),s=v(t,"href"),c=v(t,"search");function o(t,e){d.append.call(this,t,e),t=this.toString(),i.set.call(this._usp,t?"?"+t:"")}function u(t){d.delete.call(this,t),t=this.toString(),i.set.call(this._usp,t?"?"+t:"")}function h(t,e){d.set.call(this,t,e),t=this.toString(),i.set.call(this._usp,t?"?"+t:"")}!a&&c&&c.set&&(i=c,r=function(t,e){return t.append=o,t.delete=u,t.set=h,g(t,"_usp",{configurable:!0,writable:!0,value:e})},n=function(t,e){return g(t,"_searchParams",{configurable:!0,writable:!0,value:r(e,t)}),e},f.defineProperties(t,{href:{get:function(){return s.get.call(this)},set:function(t){var e=this._searchParams;s.set.call(this,t),e&&l(e)}},search:{get:function(){return c.get.call(this)},set:function(t){var e=this._searchParams;c.set.call(this,t),e&&l(e)}},searchParams:{get:function(){return p(this,e),this._searchParams||n(this,new URLSearchParams(this.search.slice(1)))},set:function(t){p(this,e),n(this,t)}}}))}var g=f.defineProperty,v=f.getOwnPropertyDescriptor;try{t(HTMLAnchorElement),/^function|object$/.test(typeof URL)&&URL.prototype&&t(URL)}catch(t){}}(Object)}(self.URLSearchParams.prototype,Object);
\ No newline at end of file
+var self=this||{};try{!function(t,e){if(new t("q=%2B").get("q")!==e||new t({q:e}).get("q")!==e||new t([["q",e]]).get("q")!==e||"q=%0A"!==new t("q=\n").toString()||"q=+%26"!==new t({q:" &"}).toString()||"q=%25zx"!==new t({q:"%zx"}).toString())throw t;self.URLSearchParams=t}(URLSearchParams,"+")}catch(t){!function(t,a,o){"use strict";var u=t.create,h=t.defineProperty,e=/[!'\(\)~]|%20|%00/g,n=/%(?![0-9a-fA-F]{2})/g,r=/\+/g,i={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"},s={append:function(t,e){p(this._ungap,t,e)},delete:function(t){delete this._ungap[t]},get:function(t){return this.has(t)?this._ungap[t][0]:null},getAll:function(t){return this.has(t)?this._ungap[t].slice(0):[]},has:function(t){return t in this._ungap},set:function(t,e){this._ungap[t]=[a(e)]},forEach:function(e,n){var r=this;for(var i in r._ungap)r._ungap[i].forEach(t,i);function t(t){e.call(n,t,a(i),r)}},toJSON:function(){return{}},toString:function(){var t=[];for(var e in this._ungap)for(var n=v(e),r=0,i=this._ungap[e];r<i.length;r++)t.push(n+"="+v(i[r]));return t.join("&")}};for(var c in s)h(f.prototype,c,{configurable:!0,writable:!0,value:s[c]});function f(t){var e=u(null);switch(h(this,"_ungap",{value:e}),!0){case!t:break;case"string"==typeof t:"?"===t.charAt(0)&&(t=t.slice(1));for(var n=t.split("&"),r=0,i=n.length;r<i;r++){var a=(s=n[r]).indexOf("=");-1<a?p(e,g(s.slice(0,a)),g(s.slice(a+1))):s.length&&p(e,g(s),"")}break;case o(t):for(var s,r=0,i=t.length;r<i;r++){p(e,(s=t[r])[0],s[1])}break;case"forEach"in t:t.forEach(l,e);break;default:for(var c in t)p(e,c,t[c])}}function l(t,e){p(this,e,t)}function p(t,e,n){var r=o(n)?n.join(","):n;e in t?t[e].push(r):t[e]=[r]}function g(t){return decodeURIComponent(t.replace(n,"%25").replace(r," "))}function v(t){return encodeURIComponent(t).replace(e,d)}function d(t){return i[t]}self.URLSearchParams=f}(Object,String,Array.isArray)}!function(d){var r=!1;try{r=!!Symbol.iterator}catch(t){}function t(t,e){var n=[];return t.forEach(e,n),r?n[Symbol.iterator]():{next:function(){var t=n.shift();return{done:void 0===t,value:t}}}}"forEach"in d||(d.forEach=function(n,r){var i=this,t=Object.create(null);this.toString().replace(/=[\s\S]*?(?:&|$)/g,"=").split("=").forEach(function(e){!e.length||e in t||(t[e]=i.getAll(e)).forEach(function(t){n.call(r,t,e,i)})})}),"keys"in d||(d.keys=function(){return t(this,function(t,e){this.push(e)})}),"values"in d||(d.values=function(){return t(this,function(t,e){this.push(t)})}),"entries"in d||(d.entries=function(){return t(this,function(t,e){this.push([e,t])})}),!r||Symbol.iterator in d||(d[Symbol.iterator]=d.entries),"sort"in d||(d.sort=function(){for(var t,e,n,r=this.entries(),i=r.next(),a=i.done,s=[],c=Object.create(null);!a;)e=(n=i.value)[0],s.push(e),e in c||(c[e]=[]),c[e].push(n[1]),a=(i=r.next()).done;for(s.sort(),t=0;t<s.length;t++)this.delete(s[t]);for(t=0;t<s.length;t++)e=s[t],this.append(e,c[e].shift())}),function(f){function l(t){var e=t.append;t.append=d.append,URLSearchParams.call(t,t._usp.search.slice(1)),t.append=e}function p(t,e){if(!(t instanceof e))throw new TypeError("'searchParams' accessed on an object that does not implement interface "+e.name)}function t(e){var n,r,i,t=e.prototype,a=v(t,"searchParams"),s=v(t,"href"),c=v(t,"search");function o(t,e){d.append.call(this,t,e),t=this.toString(),i.set.call(this._usp,t?"?"+t:"")}function u(t){d.delete.call(this,t),t=this.toString(),i.set.call(this._usp,t?"?"+t:"")}function h(t,e){d.set.call(this,t,e),t=this.toString(),i.set.call(this._usp,t?"?"+t:"")}!a&&c&&c.set&&(i=c,r=function(t,e){return t.append=o,t.delete=u,t.set=h,g(t,"_usp",{configurable:!0,writable:!0,value:e})},n=function(t,e){return g(t,"_searchParams",{configurable:!0,writable:!0,value:r(e,t)}),e},f.defineProperties(t,{href:{get:function(){return s.get.call(this)},set:function(t){var e=this._searchParams;s.set.call(this,t),e&&l(e)}},search:{get:function(){return c.get.call(this)},set:function(t){var e=this._searchParams;c.set.call(this,t),e&&l(e)}},searchParams:{get:function(){return p(this,e),this._searchParams||n(this,new URLSearchParams(this.search.slice(1)))},set:function(t){p(this,e),n(this,t)}}}))}var g=f.defineProperty,v=f.getOwnPropertyDescriptor;try{t(HTMLAnchorElement),/^function|object$/.test(typeof URL)&&URL.prototype&&t(URL)}catch(t){}}(Object)}(self.URLSearchParams.prototype,Object);
\ No newline at end of file
index e323dcc10ec647e794612b338610034d006090d3..f82ae809e3ab01286c6f7436c136d8319111b358 100644 (file)
           </a>
         </div>
       </div>
-      <div id="last-updated" class="col-4 text-center">
-        <div id="loading">loading...</div>
-        Data from <a id="api-request-link" href="">API request</a>
-        <br>
-        Data last updated:
-        <span id="data-date"></span>
+      <div class="col-4">
+        <div id="last-updated" class="text-center">
+          <div id="loading">loading...</div>
+          <div id="api-request">
+            Data from <a href="">API request</a>
+            <span id="api-request-debug">(<a href="">debug output</a>)</span>
+          </div>
+          Data last updated: <span id="data-date"></span>
+        </div>
       </div>
       <div class="col-4 text-right">
         <div class="dropdown">
index e323dcc10ec647e794612b338610034d006090d3..f82ae809e3ab01286c6f7436c136d8319111b358 100644 (file)
           </a>
         </div>
       </div>
-      <div id="last-updated" class="col-4 text-center">
-        <div id="loading">loading...</div>
-        Data from <a id="api-request-link" href="">API request</a>
-        <br>
-        Data last updated:
-        <span id="data-date"></span>
+      <div class="col-4">
+        <div id="last-updated" class="text-center">
+          <div id="loading">loading...</div>
+          <div id="api-request">
+            Data from <a href="">API request</a>
+            <span id="api-request-debug">(<a href="">debug output</a>)</span>
+          </div>
+          Data last updated: <span id="data-date"></span>
+        </div>
       </div>
       <div class="col-4 text-right">
         <div class="dropdown">
index e323dcc10ec647e794612b338610034d006090d3..f82ae809e3ab01286c6f7436c136d8319111b358 100644 (file)
           </a>
         </div>
       </div>
-      <div id="last-updated" class="col-4 text-center">
-        <div id="loading">loading...</div>
-        Data from <a id="api-request-link" href="">API request</a>
-        <br>
-        Data last updated:
-        <span id="data-date"></span>
+      <div class="col-4">
+        <div id="last-updated" class="text-center">
+          <div id="loading">loading...</div>
+          <div id="api-request">
+            Data from <a href="">API request</a>
+            <span id="api-request-debug">(<a href="">debug output</a>)</span>
+          </div>
+          Data last updated: <span id="data-date"></span>
+        </div>
       </div>
       <div class="col-4 text-right">
         <div class="dropdown">
index e323dcc10ec647e794612b338610034d006090d3..f82ae809e3ab01286c6f7436c136d8319111b358 100644 (file)
           </a>
         </div>
       </div>
-      <div id="last-updated" class="col-4 text-center">
-        <div id="loading">loading...</div>
-        Data from <a id="api-request-link" href="">API request</a>
-        <br>
-        Data last updated:
-        <span id="data-date"></span>
+      <div class="col-4">
+        <div id="last-updated" class="text-center">
+          <div id="loading">loading...</div>
+          <div id="api-request">
+            Data from <a href="">API request</a>
+            <span id="api-request-debug">(<a href="">debug output</a>)</span>
+          </div>
+          Data last updated: <span id="data-date"></span>
+        </div>
       </div>
       <div class="col-4 text-right">
         <div class="dropdown">
index e323dcc10ec647e794612b338610034d006090d3..f82ae809e3ab01286c6f7436c136d8319111b358 100644 (file)
           </a>
         </div>
       </div>
-      <div id="last-updated" class="col-4 text-center">
-        <div id="loading">loading...</div>
-        Data from <a id="api-request-link" href="">API request</a>
-        <br>
-        Data last updated:
-        <span id="data-date"></span>
+      <div class="col-4">
+        <div id="last-updated" class="text-center">
+          <div id="loading">loading...</div>
+          <div id="api-request">
+            Data from <a href="">API request</a>
+            <span id="api-request-debug">(<a href="">debug output</a>)</span>
+          </div>
+          Data last updated: <span id="data-date"></span>
+        </div>
       </div>
       <div class="col-4 text-right">
         <div class="dropdown">
index ab814d77ed45f6b908718319bc327b807bebf63f..1141b33568a8071d75691d131fc1fc2f4194e82a 100755 (executable)
@@ -32,6 +32,7 @@ header #last-updated {
   font-size: 0.7em;
   white-space: nowrap;
   text-align: center;
+  display: none;
 }
 
 header .dropdown-menu {
index 0a5b2c8ae9277c38820c739bafb7791513287dcb..39d1f1393a73841dcb28c61fe72626b8f974e609 100644 (file)
@@ -96,18 +96,36 @@ function generate_full_api_url(endpoint_name, params) {
   return api_url;
 }
 
-function fetch_from_api(endpoint_name, params, callback) {
+function update_last_updated(endpoint_name, params) {
+  if (endpoint_name === 'status') return;
+
   var api_url = generate_full_api_url(endpoint_name, params);
-  if (endpoint_name !== 'status') {
-    $('#api-request-link').attr('href', api_url);
+  $('#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);
   });
 }
@@ -139,6 +157,8 @@ function hide_error() {
 jQuery(document).ready(function () {
   hide_error();
 
+  $('#last-updated').hide();
+
   $(document).ajaxStart(function () {
     $('#loading').fadeIn('fast');
   }).ajaxComplete(function () {
index 364e8f2611e01e5359e596df2bfca88c1e91a7a9..9975ba7011c6686f6641a233bd4ed88897132338 100644 (file)
@@ -63,6 +63,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')) return;
 
     e.preventDefault();
     e.stopPropagation();
index ee76ba83fcd98a3a184984e0bcf329a2eaad251a..95d842d5d176f3fd3a29c84e7a25559ca38b39b2 100755 (executable)
@@ -321,11 +321,6 @@ 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,
@@ -390,11 +385,6 @@ 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'),
index 81c613a35de6b9bda48d65b0006720d9e4dce522..a1ef890006d3e76ca8a52e23ac49092b2cfecaf0 100644 (file)
           </a>
         </div>
       </div>
-      <div id="last-updated" class="col-4 text-center">
-        <div id="loading">loading...</div>
-        Data from <a id="api-request-link" href="">API request</a>
-        <br>
-        Data last updated:
-        <span id="data-date"></span>
+      <div class="col-4">
+        <div id="last-updated" class="text-center">
+          <div id="loading">loading...</div>
+          <div id="api-request">
+            Data from <a href="">API request</a>
+            <span id="api-request-debug">(<a href="">debug output</a>)</span>
+          </div>
+          Data last updated: <span id="data-date"></span>
+        </div>
       </div>
       <div class="col-4 text-right">
         <div class="dropdown">