//#include "Permalink.js // patch to not encode URL (beside 'layer', better readable/hackable, Browser can handle) L.Control.Permalink.include({ _update_href: function () { //var params = L.Util.getParamString(this._params); var params = this.getParamString(this._params); var sep = '?'; if (this.options.useAnchor) sep = '#'; var url = this._url_base + sep + params.slice(1); if (this._href) this._href.setAttribute('href', url); if (this.options.useLocation) location.replace('#' + params.slice(1)); return url; }, getParamString: function (obj, existingUrl, uppercase) { var params = []; for (var i in obj) { // do encode layer (e.g. spaces) if (i === 'layer') { params.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i])); } else { params.push(uppercase ? i.toUpperCase() : i + '=' + obj[i]); } } return ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&'); } }); // patch: no animation when setting the map view, strange effects with nogo circles L.Control.Permalink.include({ _set_center: function(e) { //console.info('Update center', e); var params = e.params; if (params.zoom === undefined || params.lat === undefined || params.lon === undefined) return; this._map.setView(new L.LatLng(params.lat, params.lon), params.zoom, { reset: true }); } }); L.Control.Permalink.include({ initialize_routing: function () { this.on('update', this._set_routing, this); this.on('add', this._onadd_routing, this); }, _onadd_routing: function (e) { this.options.routingOptions.on('update', this._update_routing, this); this.options.nogos.on('update', this._update_routing, this); // waypoint add, move, delete (but last) this.options.routing.on('routing:routeWaypointEnd', this._update_routing, this); // delete last waypoint this.options.routing.on('waypoint:click', function (evt) { var r = evt.marker._routing; if (!r.prevMarker && !r.nextMarker) { this._update_routing(evt); } }, this); }, _update_routing: function (evt) { var router = this.options.router, routing = this.options.routing, routingOptions = this.options.routingOptions, latLngs = routing.getWaypoints(), params = router.getUrlParams(latLngs); if (evt && evt.options) { router.setOptions(evt.options); } // don't permalink to custom profile, as these are only stored temporarily if (params.profile && params.profile === routingOptions.getCustomProfile()) { params.profile = null; } this._update(params); //console.log('permalink: ' + this._href.href); }, _set_routing: function (e) { var router = this.options.router, routing = this.options.routing, routingOptions = this.options.routingOptions, nogos = this.options.nogos; var opts = router.parseUrlParams(e.params); router.setOptions(opts); routingOptions.setOptions(opts); nogos.setOptions(opts); if (opts.lonlats) { routing.draw(false); routing.clear(); routing.setWaypoints(opts.lonlats); } } });