X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/9d33721630e02ab9bed1d7853be4fcb5960d7b4f..34e251c225c7903b64f1fda2b594dd1c70aeeb93:/app/assets/javascripts/index.js?ds=sidebyside diff --git a/app/assets/javascripts/index.js b/app/assets/javascripts/index.js index c9316ebae..4724351ce 100644 --- a/app/assets/javascripts/index.js +++ b/app/assets/javascripts/index.js @@ -1,12 +1,12 @@ //= require_self +//= require leaflet.sidebar +//= require leaflet.locate //= require leaflet.layers -//= require leaflet.share +//= require leaflet.key //= require leaflet.note -//= require leaflet.locate -//= require leaflet.customzoom +//= require leaflet.share //= require index/browse //= require index/export -//= require index/key //= require index/notes $(document).ready(function () { @@ -19,6 +19,8 @@ $(document).ready(function () { map.attributionControl.setPrefix(''); + map.hash = L.hash(map); + var layers = [ new L.OSM.Mapnik({ attribution: '', @@ -46,68 +48,77 @@ $(document).ready(function () { }) ]; - layers[0].addTo(map); + for (var i = layers.length - 1; i >= 0; i--) { + if (i === 0 || params.layers.indexOf(layers[i].options.code) >= 0) { + map.addLayer(layers[i]); + break; + } + } + + map.noteLayer = new L.LayerGroup(); + map.noteLayer.options = {code: 'N'}; + + map.dataLayer = new L.OSM.DataLayer(null); + map.dataLayer.options.code = 'D'; - $("#map").on("resized", function () { + $("#sidebar").on("opened closed", function () { map.invalidateSize(); }); - L.control.customZoom({position: 'topright'}) + var position = $('html').attr('dir') === 'rtl' ? 'topleft' : 'topright'; + + L.OSM.zoom({position: position}) .addTo(map); - var uiPane = $('#map-ui')[0]; + L.control.locate({position: position}) + .addTo(map); + + var sidebar = L.OSM.sidebar('#map-ui') + .addTo(map); L.OSM.layers({ - position: 'topright', + position: position, layers: layers, - uiPane: uiPane + sidebar: sidebar }).addTo(map); - L.control.share({ - getUrl: getShortUrl, - uiPane: uiPane + L.OSM.key({ + position: position, + sidebar: sidebar }).addTo(map); - L.control.note({ position: 'topright' }).addTo(map); - L.control.locate({ position: 'topright' }).addTo(map); - L.control.scale().addTo(map); + L.OSM.share({ + position: position, + sidebar: sidebar, + short: true + }).addTo(map); + + L.OSM.note({ + position: position, + sidebar: sidebar + }).addTo(map); + + L.control.scale() + .addTo(map); map.on('moveend layeradd layerremove', updateLocation); map.markerLayer = L.layerGroup().addTo(map); if (!params.object_zoom) { - if (params.bbox) { - var bbox = L.latLngBounds([params.minlat, params.minlon], - [params.maxlat, params.maxlon]); - - map.fitBounds(bbox); - - if (params.box) { - L.rectangle(bbox, { - weight: 2, - color: '#e90', - fillOpacity: 0 - }).addTo(map); - } + if (params.bounds) { + map.fitBounds(params.bounds); } else { map.setView([params.lat, params.lon], params.zoom); } } - if (params.layers) { - var foundLayer = false; - for (var i = 0; i < layers.length; i++) { - if (params.layers.indexOf(layers[i].options.code) >= 0) { - map.addLayer(layers[i]); - foundLayer = true; - } else { - map.removeLayer(layers[i]); - } - } - if (!foundLayer) { - map.addLayer(layers[0]); - } + if (params.box) { + L.rectangle(params.box, { + weight: 2, + color: '#e90', + fillOpacity: 0 + }).addTo(map); } if (params.marker) { @@ -115,11 +126,9 @@ $(document).ready(function () { } if (params.object) { - addObjectToMap(params.object, map, { zoom: params.object_zoom }); + map.addObject(params.object, { zoom: params.object_zoom }); } - handleResize(); - $("body").on("click", "a.set_position", setPositionLink(map)); $("a[data-editor=remote]").click(function(e) { @@ -131,8 +140,6 @@ $(document).ready(function () { remoteEditHandler(map.getBounds()); } - $(window).resize(handleResize); - $("#search_form").submit(submitSearch(map)); @@ -146,45 +153,23 @@ $(document).ready(function () { $("#query").focus(); } - initializeBrowse(map); - initializeNotes(map); + initializeExport(map); + initializeBrowse(map, params); + initializeNotes(map, params); }); -function getMapBaseLayerId(map) { - for (var i in map._layers) { // TODO: map.eachLayer - var layer = map._layers[i]; - if (layer.options && layer.options.keyid) { - return layer.options.keyid; - } - } -} - -function getMapLayers(map) { - var layerConfig = ''; - for (var i in map._layers) { // TODO: map.eachLayer - var layer = map._layers[i]; - if (layer.options && layer.options.code) { - layerConfig += layer.options.code; - } - } - return layerConfig; -} - -// generate a cookie-safe string of map state -function cookieContent(map) { - var center = map.getCenter().wrap(); - return [center.lng, center.lat, map.getZoom(), getMapLayers(map)].join('|'); -} - function updateLocation() { updatelinks(this.getCenter().wrap(), this.getZoom(), - getMapLayers(this), - this.getBounds().wrap(), {}); + this.getLayersCode(), + this.getBounds().wrap()); var expiry = new Date(); expiry.setYear(expiry.getFullYear() + 10); $.cookie("_osm_location", cookieContent(this), { expires: expiry }); + + // Trigger hash update on layer changes. + this.hash.onMapMove(); } function setPositionLink(map) { @@ -200,7 +185,7 @@ function setPositionLink(map) { } if (data.type && data.id) { - addObjectToMap(data, map, { zoom: true, style: { opacity: 0.2, fill: false } }); + map.addObject(data, { zoom: true, style: { opacity: 0.2, fill: false } }); } map.markerLayer.clearLayers(); @@ -217,10 +202,10 @@ function submitSearch(map) { $("#sidebar_title").html(I18n.t('site.sidebar.search_results')); $("#sidebar_content").load($(this).attr("action"), { query: $("#query").val(), - minlon: bounds.getWestLng(), - minlat: bounds.getSouthLat(), - maxlon: bounds.getEastLng(), - maxlat: bounds.getNorthLat() + minlon: bounds.getWest(), + minlat: bounds.getSouth(), + maxlon: bounds.getEast(), + maxlat: bounds.getNorth() }, openSidebar); return e.preventDefault();