X-Git-Url: https://git.openstreetmap.org/nominatim-ui.git/blobdiff_plain/f46c0fdc50d5fac8a61f51aa3e6b4df8f5087f1f..a410d476a22053a8e7ffda483efbb1959be9d713:/src/assets/js/detailpage.js diff --git a/src/assets/js/detailpage.js b/src/assets/js/detailpage.js index 0466670..3a95187 100644 --- a/src/assets/js/detailpage.js +++ b/src/assets/js/detailpage.js @@ -1,73 +1,114 @@ -/********************************************************* -* DETAILS PAGE -*********************************************************/ - +// ********************************************************* +// DETAILS PAGE +// ********************************************************* function init_map_on_detail_page(lat, lon, geojson) { - map = new L.map('map', { - // center: [nominatim_map_init.lat, nominatim_map_init.lon], - // zoom: nominatim_map_init.zoom, - attributionControl: (get_config_value('Map_Tile_Attribution') && get_config_value('Map_Tile_Attribution').length), - scrollWheelZoom: true, // !L.Browser.touch, - touchZoom: false, - }); - - L.tileLayer(get_config_value('Map_Tile_URL'), { - // moved to footer - attribution: (get_config_value('Map_Tile_Attribution') || null ) //'© OpenStreetMap contributors' - }).addTo(map); - - var layerGroup = new L.layerGroup().addTo(map); - - var circle = L.circleMarker([lat,lon], { radius: 10, weight: 2, fillColor: '#ff7800', color: 'blue', opacity: 0.75}); - map.addLayer(circle); - - if (geojson) { - var geojson_layer = L.geoJson( - // http://leafletjs.com/reference-1.0.3.html#path-option - parse_and_normalize_geojson_string(geojson), - { - style: function(feature) { - return { interactive: false, color: 'blue' }; - } - } - ); - map.addLayer(geojson_layer); - map.fitBounds(geojson_layer.getBounds()); - } else { - map.setView([lat,lon],10); + var attribution = get_config_value('Map_Tile_Attribution') || null; + map = new L.map('map', { + // center: [nominatim_map_init.lat, nominatim_map_init.lon], + // zoom: nominatim_map_init.zoom, + attributionControl: (attribution && attribution.length), + scrollWheelZoom: true, // !L.Browser.touch, + touchZoom: false + }); + + L.tileLayer(get_config_value('Map_Tile_URL'), { + // moved to footer + // '© OpenStreetMap contributors' + attribution: attribution + }).addTo(map); + + // var layerGroup = new L.layerGroup().addTo(map); + + var circle = L.circleMarker([lat, lon], { + radius: 10, weight: 2, fillColor: '#ff7800', color: 'blue', opacity: 0.75 + }); + map.addLayer(circle); + + if (geojson) { + var geojson_layer = L.geoJson( + // https://leafletjs.com/reference-1.0.3.html#path-option + parse_and_normalize_geojson_string(geojson), + { + style: function () { + return { interactive: false, color: 'blue' }; + } + } + ); + map.addLayer(geojson_layer); + map.fitBounds(geojson_layer.getBounds()); + } else { + map.setView([lat, lon], 10); + } + + var osm2 = new L.TileLayer( + get_config_value('Map_Tile_URL'), + { + minZoom: 0, + maxZoom: 13, + attribution: (get_config_value('Map_Tile_Attribution') || null) } - - var osm2 = new L.TileLayer(get_config_value('Map_Tile_URL'), {minZoom: 0, maxZoom: 13, attribution: (get_config_value('Map_Tile_Attribution') || null )}); - var miniMap = new L.Control.MiniMap(osm2, {toggleDisplay: true}).addTo(map); + ); + (new L.Control.MiniMap(osm2, { toggleDisplay: true })).addTo(map); } +function details_page_load() { + + var search_params = new URLSearchParams(window.location.search); + // var place_id = search_params.get('place_id'); + + var api_request_params = { + place_id: search_params.get('place_id'), + osmtype: search_params.get('osmtype'), + osmid: search_params.get('osmid'), + class: search_params.get('class'), + keywords: search_params.get('keywords'), + addressdetails: 1, + hierarchy: (search_params.get('hierarchy') === '1' ? 1 : 0), + group_hierarchy: 1, + polygon_geojson: 1, + format: 'json' + }; + + if (api_request_params.place_id || (api_request_params.osmtype && api_request_params.osmid)) { + fetch_from_api('details', api_request_params, function (aFeature) { + var context = { aPlace: aFeature, base_url: window.location.search }; + + render_template($('main'), 'detailspage-template', context); + if (api_request_params.place_id) { + update_html_title('Details for ' + api_request_params.place_id); + } else { + update_html_title('Details for ' + api_request_params.osmtype + api_request_params.osmid); + } + + update_data_date(); + + var lat = aFeature.centroid.coordinates[1]; + var lon = aFeature.centroid.coordinates[0]; + init_map_on_detail_page(lat, lon, aFeature.geometry); + }); + } else { + render_template($('main'), 'detailspage-index-template'); + } -jQuery(document).ready(function(){ - - if ( !$('#details-page').length ){ return; } - - var search_params = new URLSearchParams(location.search); - // var place_id = search_params.get('place_id'); - - var api_request_params = { - place_id: search_params.get('place_id'), - osmtype: search_params.get('osmtype'), - osmid: search_params.get('osmid'), - group_parents: 1, - format: 'json' - }; - - fetch_from_api('details', api_request_params, function(aFeature){ - - var context = { aPlace: aFeature }; + $('#form-by-type-and-id,#form-by-osm-url').on('submit', function (e) { + e.preventDefault(); - render_template($('main'), 'detailspage-template', context); + var val = $(this).find('input[type=edit]').val(); + var matches = val.match(/^\s*([NWR])(\d+)\s*$/i); - update_data_date(); + if (!matches) { + matches = val.match(/\/(relation|way|node)\/(\d+)\s*$/); + } - init_map_on_detail_page(aFeature.lat, aFeature.lon, aFeature.geojson); - }); -}); \ No newline at end of file + if (matches) { + $(this).find('input[name=osmtype]').val(matches[1].charAt(0).toUpperCase()); + $(this).find('input[name=osmid]').val(matches[2]); + $(this).get(0).submit(); + } else { + alert('invalid input'); + } + }); +}