From: marc tobias Date: Wed, 4 Mar 2020 02:39:21 +0000 (+0100) Subject: add moreURL/pagination feature X-Git-Url: https://git.openstreetmap.org./nominatim-ui.git/commitdiff_plain/5de297f31b68eb92019f3d4c973a837a368a83af?ds=inline;hp=--cc add moreURL/pagination feature --- 5de297f31b68eb92019f3d4c973a837a368a83af diff --git a/TODO.md b/TODO.md index 605fde9..40142de 100644 --- a/TODO.md +++ b/TODO.md @@ -3,7 +3,6 @@ ## Might never work -* pagination. API returns an array without indication if more results exist * API returns category, type, but without admin_level we can't derive e.g. state,country * setting accept-language without a server component https://github.com/dansingerman/jQuery-Browser-Language diff --git a/dist/assets/js/nominatim-ui.js b/dist/assets/js/nominatim-ui.js index 4101705..d213626 100644 --- a/dist/assets/js/nominatim-ui.js +++ b/dist/assets/js/nominatim-ui.js @@ -61,15 +61,13 @@ function map_viewbox_as_string() { // ********************************************************* function fetch_from_api(endpoint_name, params, callback) { - // `&a=&b=&c=1` => '&c=' - // fetch_from_api + // `&a=&b=&c=1` => '&c=1' - // var c = ; - var keys = Object.keys(params); - for (var i = 0; i < keys.length; i += 1) { - var val = params[keys[i]]; + var param_names = Object.keys(params); + for (var i = 0; i < param_names.length; i += 1) { + var val = param_names[i]; if (typeof (val) === 'undefined' || val === '' || val === null) { - delete params[keys[i]]; + delete param_names[i]; } } @@ -623,6 +621,7 @@ jQuery(document).ready(function () { q: search_params.get('q'), polygon_geojson: search_params.get('polygon_geojson') ? 1 : 0, viewbox: search_params.get('viewbox'), + exclude_place_ids: search_params.get('exclude_place_ids'), format: 'jsonv2' }; @@ -630,8 +629,8 @@ jQuery(document).ready(function () { // aSearchResults: aResults, sQuery: api_request_params.q, sViewBox: search_params.get('viewbox'), - env: Nominatim_Config, - sMoreURL: '' + env: Nominatim_Config + // sMoreURL: 'x' }; if (api_request_params.q) { @@ -640,6 +639,20 @@ jQuery(document).ready(function () { context.aSearchResults = aResults; + if (aResults.length >= 10) { + var aExcludePlaceIds = []; + if (search_params.has('exclude_place_ids')) { + aExcludePlaceIds.search_params.get('exclude_place_ids').split(','); + } + for (var i = 0; i < aResults.length; i += 1) { + aExcludePlaceIds.push(aResults[i].place_id); + } + + var parsed_url = new URLSearchParams(window.location.search); + parsed_url.set('exclude_place_ids', aExcludePlaceIds.join(',')); + context.sMoreURL = '?' + parsed_url.toString(); + } + render_template($('main'), 'searchpage-template', context); update_html_title('Result for ' + api_request_params.q); diff --git a/src/assets/js/base.js b/src/assets/js/base.js index 98f7ee8..a8f6d0a 100644 --- a/src/assets/js/base.js +++ b/src/assets/js/base.js @@ -65,9 +65,9 @@ function fetch_from_api(endpoint_name, params, callback) { var param_names = Object.keys(params); for (var i = 0; i < param_names.length; i += 1) { - var val = param_names[keys[i]]; + var val = param_names[i]; if (typeof (val) === 'undefined' || val === '' || val === null) { - delete param_names[keys[i]]; + delete param_names[i]; } } diff --git a/src/assets/js/searchpage.js b/src/assets/js/searchpage.js index be7f0c1..d76dffa 100755 --- a/src/assets/js/searchpage.js +++ b/src/assets/js/searchpage.js @@ -383,6 +383,7 @@ jQuery(document).ready(function () { q: search_params.get('q'), polygon_geojson: search_params.get('polygon_geojson') ? 1 : 0, viewbox: search_params.get('viewbox'), + exclude_place_ids: search_params.get('exclude_place_ids'), format: 'jsonv2' }; @@ -390,8 +391,8 @@ jQuery(document).ready(function () { // aSearchResults: aResults, sQuery: api_request_params.q, sViewBox: search_params.get('viewbox'), - env: Nominatim_Config, - sMoreURL: '' + env: Nominatim_Config + // sMoreURL: 'x' }; if (api_request_params.q) { @@ -400,6 +401,20 @@ jQuery(document).ready(function () { context.aSearchResults = aResults; + if (aResults.length >= 10) { + var aExcludePlaceIds = []; + if (search_params.has('exclude_place_ids')) { + aExcludePlaceIds.search_params.get('exclude_place_ids').split(','); + } + for (var i = 0; i < aResults.length; i += 1) { + aExcludePlaceIds.push(aResults[i].place_id); + } + + var parsed_url = new URLSearchParams(window.location.search); + parsed_url.set('exclude_place_ids', aExcludePlaceIds.join(',')); + context.sMoreURL = '?' + parsed_url.toString(); + } + render_template($('main'), 'searchpage-template', context); update_html_title('Result for ' + api_request_params.q);