X-Git-Url: https://git.openstreetmap.org./nominatim-ui.git/blobdiff_plain/cb5c9a8f77ae6e220a4565d43ef6f182b7831844..e0d087f4a2b5fbc758de432f8932de296279a82f:/dist/assets/js/nominatim-ui.js diff --git a/dist/assets/js/nominatim-ui.js b/dist/assets/js/nominatim-ui.js index cbfb4df..faf6902 100644 --- a/dist/assets/js/nominatim-ui.js +++ b/dist/assets/js/nominatim-ui.js @@ -3,13 +3,33 @@ var map; var last_click_latlng; +// ********************************************************* +// DEFAULTS +// ********************************************************* + +var Nominatim_Config_Defaults = { + Nominatim_API_Endpoint: 'http://localhost/nominatim/', + Images_Base_Url: '/mapicons/', + Search_AreaPolygons: 1, + Reverse_Default_Search_Zoom: 18, + Map_Default_Lat: 20.0, + Map_Default_Lon: 0.0, + Map_Default_Zoom: 2, + Map_Tile_URL: 'https://{s}.tile.osm.org/{z}/{x}/{y}.png', + Map_Tile_Attribution: 'OpenStreetMap contributors' +}; // ********************************************************* // HELPERS // ********************************************************* + function get_config_value(str, default_val) { - return (typeof Nominatim_Config[str] !== 'undefined' ? Nominatim_Config[str] : default_val); + var value = ((typeof Nominatim_Config !== 'undefined') + && (typeof Nominatim_Config[str] !== 'undefined')) + ? Nominatim_Config[str] + : Nominatim_Config_Defaults[str]; + return (typeof value !== 'undefined' ? value : default_val); } function parse_and_normalize_geojson_string(part) { @@ -61,13 +81,13 @@ function map_viewbox_as_string() { // ********************************************************* function fetch_from_api(endpoint_name, params, callback) { + // // `&a=&b=&c=1` => '&c=1' - var param_names = Object.keys(params); for (var i = 0; i < param_names.length; i += 1) { - var val = param_names[i]; + var val = params[param_names[i]]; if (typeof (val) === 'undefined' || val === '' || val === null) { - delete param_names[i]; + delete params[param_names[i]]; } } @@ -111,16 +131,19 @@ function hide_error() { } -$(document).ajaxError(function (event, jqXHR, ajaxSettings/* , thrownError */) { - // console.log(thrownError); - // console.log(ajaxSettings); - var url = ajaxSettings.url; - show_error('Error fetching results from ' + url + ''); -}); - - jQuery(document).ready(function () { hide_error(); + + $(document).ajaxStart(function () { + $('#loading').fadeIn('fast'); + }).ajaxComplete(function () { + $('#loading').fadeOut('fast'); + }).ajaxError(function (event, jqXHR, ajaxSettings/* , thrownError */) { + // console.log(thrownError); + // console.log(ajaxSettings); + var url = ajaxSettings.url; + show_error('Error fetching results from ' + url + ''); + }); }); // ********************************************************* // DETAILS PAGE @@ -178,8 +201,7 @@ function init_map_on_detail_page(lat, lon, geojson) { } -jQuery(document).ready(function () { - if (!$('#details-page').length) { return; } +function details_page_load() { var search_params = new URLSearchParams(window.location.search); // var place_id = search_params.get('place_id'); @@ -235,7 +257,7 @@ jQuery(document).ready(function () { alert('invalid input'); } }); -}); +} // ********************************************************* // FORWARD/REVERSE SEARCH PAGE @@ -408,20 +430,6 @@ function init_map_on_search_page(is_reverse_search, nominatim_results, request_l update_viewbox_field(); }); - $("input[name='query-selector']").click(function () { - var query_val = $("input[name='query-selector']:checked").val(); - if (query_val === 'simple') { - $('div.form-group-simple').removeClass('hidden'); - $('div.form-group-structured').addClass('hidden'); - $('.form-group-structured').find('input:text').val(''); - } else if (query_val === 'structured') { - console.log('here'); - $('div.form-group-simple').addClass('hidden'); - $('div.form-group-structured').removeClass('hidden'); - $('.form-group-simple').find('input:text').val(''); - } - }); - function get_result_element(position) { return $('.result').eq(position); } @@ -544,12 +552,9 @@ function init_map_on_search_page(is_reverse_search, nominatim_results, request_l +function search_page_load() { -jQuery(document).ready(function () { - // - if (!$('#search-page,#reverse-page').length) { return; } - - var is_reverse_search = !!($('#reverse-page').length); + var is_reverse_search = window.location.pathname.match(/reverse/); var search_params = new URLSearchParams(window.location.search); @@ -633,7 +638,7 @@ jQuery(document).ready(function () { state: search_params.get('state'), country: search_params.get('country'), postalcode: search_params.get('postalcode'), - polygon_geojson: search_params.get('polygon_geojson') ? 1 : 0, + polygon_geojson: get_config_value('Search_AreaPolygons', false) ? 1 : 0, viewbox: search_params.get('viewbox'), exclude_place_ids: search_params.get('exclude_place_ids'), format: 'jsonv2' @@ -642,7 +647,7 @@ jQuery(document).ready(function () { context = { sQuery: api_request_params.q, sViewBox: search_params.get('viewbox'), - env: Nominatim_Config + env: {} }; if (api_request_params.street || api_request_params.city || api_request_params.county @@ -704,13 +709,14 @@ jQuery(document).ready(function () { ); } } -}); +} + + // ********************************************************* // DELETABLE PAGE // ********************************************************* -jQuery(document).ready(function () { - if (!$('#deletable-page').length) { return; } +function deletable_page_load() { var api_request_params = { format: 'json' @@ -724,14 +730,13 @@ jQuery(document).ready(function () { update_data_date(); }); -}); +} // ********************************************************* // BROKEN POLYGON PAGE // ********************************************************* -jQuery(document).ready(function () { - if (!$('#polygons-page').length) { return; } - +function polygons_page_load() { + // var api_request_params = { format: 'json' }; @@ -744,4 +749,54 @@ jQuery(document).ready(function () { update_data_date(); }); +} +jQuery(document).ready(function () { + var myhistory = []; + + function parse_url_and_load_page() { + // 'search', 'reverse', 'details' + var pagename = window.location.pathname.replace('.html', '').replace(/^\//, ''); + + $('body').attr('id', pagename + '-page'); + + if (pagename === 'search' || pagename === 'reverse') { + search_page_load(); + } else if (pagename === 'details') { + details_page_load(); + } else if (pagename === 'deletable') { + deletable_page_load(); + } else if (pagename === 'polygons') { + polygons_page_load(); + } + } + + parse_url_and_load_page(); + + // load page after form submit + $(document).on('submit', 'form', function (e) { + e.preventDefault(); + + window.history.pushState(myhistory, '', '?' + $(this).serialize()); + + parse_url_and_load_page(); + }); + + // 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; + + e.preventDefault(); + + window.history.pushState(myhistory, '', target_url); + + parse_url_and_load_page(); + }); + + // deal with back-button and other user action + window.onpopstate = function () { + parse_url_and_load_page(); + }; }); +