X-Git-Url: https://git.openstreetmap.org./nominatim-ui.git/blobdiff_plain/3d5062bc458e674828760ba0fe07100e3bf69e9b..4cef4fd8107653656e83662f71c4cdaeb94708ab:/src/assets/js/base.js diff --git a/src/assets/js/base.js b/src/assets/js/base.js index 8c7696d..4ff6b23 100644 --- a/src/assets/js/base.js +++ b/src/assets/js/base.js @@ -1,23 +1,45 @@ +'use strict'; + 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 +// ********************************************************* -/********************************************************* -* 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){ +function parse_and_normalize_geojson_string(part) { // normalize places the geometry into a featurecollection, similar to // https://github.com/mapbox/geojson-normalize var parsed_geojson = { - type: "FeatureCollection", + type: 'FeatureCollection', features: [ { - type: "Feature", + type: 'Feature', geometry: part, properties: {} } @@ -26,8 +48,11 @@ function parse_and_normalize_geojson_string(part){ return parsed_geojson; } -function map_link_to_osm(){ - return "https://openstreetmap.org/#map=" + map.getZoom() + "/" + map.getCenter().lat + "/" + map.getCenter().lng; +function map_link_to_osm() { + var zoom = map.getZoom(); + var lat = map.getCenter().lat; + var lng = map.getCenter().lng; + return 'https://openstreetmap.org/#map=' + zoom + '/' + lat + '/' + lng; } function map_viewbox_as_string() { @@ -36,8 +61,8 @@ function map_viewbox_as_string() { var east = bounds.getEast(); if ((east - west) >= 360) { // covers more than whole planet - west = map.getCenter().lng-179.999; - east = map.getCenter().lng+179.999; + west = map.getCenter().lng - 179.999; + east = map.getCenter().lng + 179.999; } east = L.latLng(77, east).wrap().lng; west = L.latLng(77, west).wrap().lng; @@ -51,28 +76,33 @@ function map_viewbox_as_string() { } -/********************************************************* -* PAGE HELPERS -*********************************************************/ +// ********************************************************* +// PAGE HELPERS +// ********************************************************* function fetch_from_api(endpoint_name, params, callback) { - - // `&a=&b=&c=1` => '&c=' - for(var k in params) { - if (typeof(params[k]) === 'undefined' || params[k] === '' || params[k] === null ) delete params[k]; + // + // `&a=&b=&c=1` => '&c=1' + var param_names = Object.keys(params); + for (var i = 0; i < param_names.length; i += 1) { + var val = params[param_names[i]]; + if (typeof (val) === 'undefined' || val === '' || val === null) { + delete params[param_names[i]]; + } } - var api_url = get_config_value('Nominatim_API_Endpoint') + endpoint_name + '.php?' + $.param(params); + var api_url = get_config_value('Nominatim_API_Endpoint') + endpoint_name + '.php?' + + $.param(params); if (endpoint_name !== 'status') { $('#api-request-link').attr('href', api_url); } - $.get(api_url, function(data){ + $.get(api_url, function (data) { callback(data); }); } function update_data_date() { - fetch_from_api('status', {format: 'json'}, function(data){ + fetch_from_api('status', { format: 'json' }, function (data) { $('#data-date').text(data.data_updated); }); } @@ -80,27 +110,38 @@ function update_data_date() { function render_template(el, template_name, page_context) { var template_source = $('#' + template_name).text(); var template = Handlebars.compile(template_source); - var html = template(page_context); + var html = template(page_context); el.html(html); } +function update_html_title(title) { + var prefix = ''; + if (title && title.length > 1) { + prefix = title + ' | '; + } + $('head title').text(prefix + 'OpenStreetMap Nominatim'); +} + function show_error(html) { - $('#error-overlay').html(html).show(); + $('#error-overlay').html(html).show(); } function hide_error() { - $('#error-overlay').empty().hide(); + $('#error-overlay').empty().hide(); } -$(document).ajaxError(function(event, jqXHR, ajaxSettings, thrownError) { - // console.log(thrownError); - // console.log(ajaxSettings); - show_error('Error fetching results from ' + ajaxSettings.url + ''); -}); - - -jQuery(document).ready(function(){ +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 + ''); + }); +});