var leafletControlGeocoder = (function (exports, L) { function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n['default'] = e; return n; } var L__namespace = /*#__PURE__*/_interopNamespace(L); function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } /** * @internal */ function geocodingParams(options, params) { return L__namespace.Util.extend(params, options.geocodingQueryParams); } /** * @internal */ function reverseParams(options, params) { return L__namespace.Util.extend(params, options.reverseQueryParams); } /** * @internal */ var lastCallbackId = 0; // Adapted from handlebars.js // https://github.com/wycats/handlebars.js/ /** * @internal */ var badChars = /[&<>"'`]/g; /** * @internal */ var possible = /[&<>"'`]/; /** * @internal */ var escape = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' }; /** * @internal */ function escapeChar(chr) { return escape[chr]; } /** * @internal */ function htmlEscape(string) { if (string == null) { return ''; } else if (!string) { return string + ''; } // Force a string conversion as this will be done by the append regardless and // the regex test will do this transparently behind the scenes, causing issues if // an object's to string has escaped characters in it. string = '' + string; if (!possible.test(string)) { return string; } return string.replace(badChars, escapeChar); } /** * @internal */ function jsonp(url, params, callback, context, jsonpParam) { var callbackId = '_l_geocoder_' + lastCallbackId++; params[jsonpParam || 'callback'] = callbackId; window[callbackId] = L__namespace.Util.bind(callback, context); var script = document.createElement('script'); script.type = 'text/javascript'; script.src = url + getParamString(params); script.id = callbackId; document.getElementsByTagName('head')[0].appendChild(script); } /** * @internal */ function getJSON(url, params, callback) { var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState !== 4) { return; } var message; if (xmlHttp.status !== 200 && xmlHttp.status !== 304) { message = ''; } else if (typeof xmlHttp.response === 'string') { // IE doesn't parse JSON responses even with responseType: 'json'. try { message = JSON.parse(xmlHttp.response); } catch (e) { // Not a JSON response message = xmlHttp.response; } } else { message = xmlHttp.response; } callback(message); }; xmlHttp.open('GET', url + getParamString(params), true); xmlHttp.responseType = 'json'; xmlHttp.setRequestHeader('Accept', 'application/json'); xmlHttp.send(null); } /** * @internal */ function template(str, data) { return str.replace(/\{ *([\w_]+) *\}/g, function (str, key) { var value = data[key]; if (value === undefined) { value = ''; } else if (typeof value === 'function') { value = value(data); } return htmlEscape(value); }); } /** * @internal */ function getParamString(obj, existingUrl, uppercase) { var params = []; for (var i in obj) { var key = encodeURIComponent(uppercase ? i.toUpperCase() : i); var value = obj[i]; if (!Array.isArray(value)) { params.push(key + '=' + encodeURIComponent(String(value))); } else { for (var j = 0; j < value.length; j++) { params.push(key + '=' + encodeURIComponent(value[j])); } } } return (!existingUrl || existingUrl.indexOf('?') === -1 ? '?' : '&') + params.join('&'); } /** * Implementation of the [ArcGIS geocoder](https://developers.arcgis.com/features/geocoding/) */ var ArcGis = /*#__PURE__*/function () { function ArcGis(options) { this.options = { serviceUrl: 'https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer', apiKey: '' }; L__namespace.Util.setOptions(this, options); } var _proto = ArcGis.prototype; _proto.geocode = function geocode(query, cb, context) { var params = geocodingParams(this.options, { token: this.options.apiKey, SingleLine: query, outFields: 'Addr_Type', forStorage: false, maxLocations: 10, f: 'json' }); getJSON(this.options.serviceUrl + '/findAddressCandidates', params, function (data) { var results = []; if (data.candidates && data.candidates.length) { for (var i = 0; i <= data.candidates.length - 1; i++) { var loc = data.candidates[i]; var latLng = L__namespace.latLng(loc.location.y, loc.location.x); var latLngBounds = L__namespace.latLngBounds(L__namespace.latLng(loc.extent.ymax, loc.extent.xmax), L__namespace.latLng(loc.extent.ymin, loc.extent.xmin)); results[i] = { name: loc.address, bbox: latLngBounds, center: latLng }; } } cb.call(context, results); }); }; _proto.suggest = function suggest(query, cb, context) { return this.geocode(query, cb, context); }; _proto.reverse = function reverse(location, scale, cb, context) { var params = reverseParams(this.options, { location: location.lng + ',' + location.lat, distance: 100, f: 'json' }); getJSON(this.options.serviceUrl + '/reverseGeocode', params, function (data) { var result = []; if (data && !data.error) { var center = L__namespace.latLng(data.location.y, data.location.x); var bbox = L__namespace.latLngBounds(center, center); result.push({ name: data.address.Match_addr, center: center, bbox: bbox }); } cb.call(context, result); }); }; return ArcGis; }(); /** * [Class factory method](https://leafletjs.com/reference.html#class-class-factories) for {@link ArcGis} * @param options the options */ function arcgis(options) { return new ArcGis(options); } /** * Implementation of the [Bing Locations API](https://docs.microsoft.com/en-us/bingmaps/rest-services/locations/) */ var Bing = /*#__PURE__*/function () { function Bing(options) { this.options = { serviceUrl: 'https://dev.virtualearth.net/REST/v1/Locations' }; L__namespace.Util.setOptions(this, options); } var _proto = Bing.prototype; _proto.geocode = function geocode(query, cb, context) { var params = geocodingParams(this.options, { query: query, key: this.options.apiKey }); jsonp(this.options.apiKey, params, function (data) { var results = []; if (data.resourceSets.length > 0) { for (var i = data.resourceSets[0].resources.length - 1; i >= 0; i--) { var resource = data.resourceSets[0].resources[i], bbox = resource.bbox; results[i] = { name: resource.name, bbox: L__namespace.latLngBounds([bbox[0], bbox[1]], [bbox[2], bbox[3]]), center: L__namespace.latLng(resource.point.coordinates) }; } } cb.call(context, results); }, this, 'jsonp'); }; _proto.reverse = function reverse(location, scale, cb, context) { var params = reverseParams(this.options, { key: this.options.apiKey }); jsonp(this.options.serviceUrl + location.lat + ',' + location.lng, params, function (data) { var results = []; for (var i = data.resourceSets[0].resources.length - 1; i >= 0; i--) { var resource = data.resourceSets[0].resources[i], bbox = resource.bbox; results[i] = { name: resource.name, bbox: L__namespace.latLngBounds([bbox[0], bbox[1]], [bbox[2], bbox[3]]), center: L__namespace.latLng(resource.point.coordinates) }; } cb.call(context, results); }, this, 'jsonp'); }; return Bing; }(); /** * [Class factory method](https://leafletjs.com/reference.html#class-class-factories) for {@link Bing} * @param options the options */ function bing(options) { return new Bing(options); } var Google = /*#__PURE__*/function () { function Google(options) { this.options = { serviceUrl: 'https://maps.googleapis.com/maps/api/geocode/json' }; L__namespace.Util.setOptions(this, options); } var _proto = Google.prototype; _proto.geocode = function geocode(query, cb, context) { var params = geocodingParams(this.options, { key: this.options.apiKey, address: query }); getJSON(this.options.serviceUrl, params, function (data) { var results = []; if (data.results && data.results.length) { for (var i = 0; i <= data.results.length - 1; i++) { var loc = data.results[i]; var latLng = L__namespace.latLng(loc.geometry.location); var latLngBounds = L__namespace.latLngBounds(L__namespace.latLng(loc.geometry.viewport.northeast), L__namespace.latLng(loc.geometry.viewport.southwest)); results[i] = { name: loc.formatted_address, bbox: latLngBounds, center: latLng, properties: loc.address_components }; } } cb.call(context, results); }); }; _proto.reverse = function reverse(location, scale, cb, context) { var params = reverseParams(this.options, { key: this.options.apiKey, latlng: location.lat + ',' + location.lng }); getJSON(this.options.serviceUrl, params, function (data) { var results = []; if (data.results && data.results.length) { for (var i = 0; i <= data.results.length - 1; i++) { var loc = data.results[i]; var center = L__namespace.latLng(loc.geometry.location); var bbox = L__namespace.latLngBounds(L__namespace.latLng(loc.geometry.viewport.northeast), L__namespace.latLng(loc.geometry.viewport.southwest)); results[i] = { name: loc.formatted_address, bbox: bbox, center: center, properties: loc.address_components }; } } cb.call(context, results); }); }; return Google; }(); /** * [Class factory method](https://leafletjs.com/reference.html#class-class-factories) for {@link Google} * @param options the options */ function google(options) { return new Google(options); } /** * Implementation of the [HERE Geocoder API](https://developer.here.com/documentation/geocoder/topics/introduction.html) */ var HERE = /*#__PURE__*/function () { function HERE(options) { this.options = { serviceUrl: 'https://geocoder.api.here.com/6.2/', app_id: '', app_code: '', apiKey: '', maxResults: 5 }; L__namespace.Util.setOptions(this, options); if (options.apiKey) throw Error('apiKey is not supported, use app_id/app_code instead!'); } var _proto = HERE.prototype; _proto.geocode = function geocode(query, cb, context) { var params = geocodingParams(this.options, { searchtext: query, gen: 9, app_id: this.options.app_id, app_code: this.options.app_code, jsonattributes: 1, maxresults: this.options.maxResults }); this.getJSON(this.options.serviceUrl + 'geocode.json', params, cb, context); }; _proto.reverse = function reverse(location, scale, cb, context) { var prox = location.lat + ',' + location.lng; if (this.options.reverseGeocodeProxRadius) { prox += ',' + this.options.reverseGeocodeProxRadius; } var params = reverseParams(this.options, { prox: prox, mode: 'retrieveAddresses', app_id: this.options.app_id, app_code: this.options.app_code, gen: 9, jsonattributes: 1, maxresults: this.options.maxResults }); this.getJSON(this.options.serviceUrl + 'reversegeocode.json', params, cb, context); }; _proto.getJSON = function getJSON$1(url, params, cb, context) { getJSON(url, params, function (data) { var results = []; if (data.response.view && data.response.view.length) { for (var i = 0; i <= data.response.view[0].result.length - 1; i++) { var loc = data.response.view[0].result[i].location; var center = L__namespace.latLng(loc.displayPosition.latitude, loc.displayPosition.longitude); var bbox = L__namespace.latLngBounds(L__namespace.latLng(loc.mapView.topLeft.latitude, loc.mapView.topLeft.longitude), L__namespace.latLng(loc.mapView.bottomRight.latitude, loc.mapView.bottomRight.longitude)); results[i] = { name: loc.address.label, properties: loc.address, bbox: bbox, center: center }; } } cb.call(context, results); }); }; return HERE; }(); /** * Implementation of the new [HERE Geocoder API](https://developer.here.com/documentation/geocoding-search-api/api-reference-swagger.html) */ var HEREv2 = /*#__PURE__*/function () { function HEREv2(options) { this.options = { serviceUrl: 'https://geocode.search.hereapi.com/v1', apiKey: '', app_id: '', app_code: '', maxResults: 10 }; L__namespace.Util.setOptions(this, options); } var _proto2 = HEREv2.prototype; _proto2.geocode = function geocode(query, cb, context) { var params = geocodingParams(this.options, { q: query, apiKey: this.options.apiKey, limit: this.options.maxResults }); if (!params.at && !params["in"]) { throw Error('at / in parameters not found. Please define coordinates (at=latitude,longitude) or other (in) in your geocodingQueryParams.'); } this.getJSON(this.options.serviceUrl + '/discover', params, cb, context); }; _proto2.reverse = function reverse(location, scale, cb, context) { var params = reverseParams(this.options, { at: location.lat + ',' + location.lng, limit: this.options.reverseGeocodeProxRadius, apiKey: this.options.apiKey }); this.getJSON(this.options.serviceUrl + '/revgeocode', params, cb, context); }; _proto2.getJSON = function getJSON$1(url, params, cb, context) { getJSON(url, params, function (data) { var results = []; if (data.items && data.items.length) { for (var i = 0; i <= data.items.length - 1; i++) { var item = data.items[i]; var latLng = L__namespace.latLng(item.position.lat, item.position.lng); var bbox = void 0; if (item.mapView) { bbox = L__namespace.latLngBounds(L__namespace.latLng(item.mapView.south, item.mapView.west), L__namespace.latLng(item.mapView.north, item.mapView.east)); } else { // Using only position when not provided bbox = L__namespace.latLngBounds(L__namespace.latLng(item.position.lat, item.position.lng), L__namespace.latLng(item.position.lat, item.position.lng)); } results[i] = { name: item.address.label, properties: item.address, bbox: bbox, center: latLng }; } } cb.call(context, results); }); }; return HEREv2; }(); /** * [Class factory method](https://leafletjs.com/reference.html#class-class-factories) for {@link HERE} * @param options the options */ function here(options) { if (options.apiKey) { return new HEREv2(options); } else { return new HERE(options); } } /** * Parses basic latitude/longitude strings such as `'50.06773 14.37742'`, `'N50.06773 W14.37742'`, `'S 50° 04.064 E 014° 22.645'`, or `'S 50° 4′ 03.828″, W 14° 22′ 38.712″'` * @param query the latitude/longitude string to parse * @returns the parsed latitude/longitude */ function parseLatLng(query) { var match; // regex from https://github.com/openstreetmap/openstreetmap-website/blob/master/app/controllers/geocoder_controller.rb if (match = query.match(/^([NS])\s*(\d{1,3}(?:\.\d*)?)\W*([EW])\s*(\d{1,3}(?:\.\d*)?)$/)) { // [NSEW] decimal degrees return L__namespace.latLng((/N/i.test(match[1]) ? 1 : -1) * +match[2], (/E/i.test(match[3]) ? 1 : -1) * +match[4]); } else if (match = query.match(/^(\d{1,3}(?:\.\d*)?)\s*([NS])\W*(\d{1,3}(?:\.\d*)?)\s*([EW])$/)) { // decimal degrees [NSEW] return L__namespace.latLng((/N/i.test(match[2]) ? 1 : -1) * +match[1], (/E/i.test(match[4]) ? 1 : -1) * +match[3]); } else if (match = query.match(/^([NS])\s*(\d{1,3})°?\s*(\d{1,3}(?:\.\d*)?)?['′]?\W*([EW])\s*(\d{1,3})°?\s*(\d{1,3}(?:\.\d*)?)?['′]?$/)) { // [NSEW] degrees, decimal minutes return L__namespace.latLng((/N/i.test(match[1]) ? 1 : -1) * (+match[2] + +match[3] / 60), (/E/i.test(match[4]) ? 1 : -1) * (+match[5] + +match[6] / 60)); } else if (match = query.match(/^(\d{1,3})°?\s*(\d{1,3}(?:\.\d*)?)?['′]?\s*([NS])\W*(\d{1,3})°?\s*(\d{1,3}(?:\.\d*)?)?['′]?\s*([EW])$/)) { // degrees, decimal minutes [NSEW] return L__namespace.latLng((/N/i.test(match[3]) ? 1 : -1) * (+match[1] + +match[2] / 60), (/E/i.test(match[6]) ? 1 : -1) * (+match[4] + +match[5] / 60)); } else if (match = query.match(/^([NS])\s*(\d{1,3})°?\s*(\d{1,2})['′]?\s*(\d{1,3}(?:\.\d*)?)?["″]?\W*([EW])\s*(\d{1,3})°?\s*(\d{1,2})['′]?\s*(\d{1,3}(?:\.\d*)?)?["″]?$/)) { // [NSEW] degrees, minutes, decimal seconds return L__namespace.latLng((/N/i.test(match[1]) ? 1 : -1) * (+match[2] + +match[3] / 60 + +match[4] / 3600), (/E/i.test(match[5]) ? 1 : -1) * (+match[6] + +match[7] / 60 + +match[8] / 3600)); } else if (match = query.match(/^(\d{1,3})°?\s*(\d{1,2})['′]?\s*(\d{1,3}(?:\.\d*)?)?["″]\s*([NS])\W*(\d{1,3})°?\s*(\d{1,2})['′]?\s*(\d{1,3}(?:\.\d*)?)?["″]?\s*([EW])$/)) { // degrees, minutes, decimal seconds [NSEW] return L__namespace.latLng((/N/i.test(match[4]) ? 1 : -1) * (+match[1] + +match[2] / 60 + +match[3] / 3600), (/E/i.test(match[8]) ? 1 : -1) * (+match[5] + +match[6] / 60 + +match[7] / 3600)); } else if (match = query.match(/^\s*([+-]?\d+(?:\.\d*)?)\s*[\s,]\s*([+-]?\d+(?:\.\d*)?)\s*$/)) { return L__namespace.latLng(+match[1], +match[2]); } } /** * Parses basic latitude/longitude strings such as `'50.06773 14.37742'`, `'N50.06773 W14.37742'`, `'S 50° 04.064 E 014° 22.645'`, or `'S 50° 4′ 03.828″, W 14° 22′ 38.712″'` */ var LatLng = /*#__PURE__*/function () { function LatLng(options) { this.options = { next: undefined, sizeInMeters: 10000 }; L__namespace.Util.setOptions(this, options); } var _proto = LatLng.prototype; _proto.geocode = function geocode(query, cb, context) { var center = parseLatLng(query); if (center) { var results = [{ name: query, center: center, bbox: center.toBounds(this.options.sizeInMeters) }]; cb.call(context, results); } else if (this.options.next) { this.options.next.geocode(query, cb, context); } }; return LatLng; }(); /** * [Class factory method](https://leafletjs.com/reference.html#class-class-factories) for {@link LatLng} * @param options the options */ function latLng(options) { return new LatLng(options); } /** * Implementation of the [Mapbox Geocoding](https://www.mapbox.com/api-documentation/#geocoding) */ var Mapbox = /*#__PURE__*/function () { function Mapbox(options) { this.options = { serviceUrl: 'https://api.mapbox.com/geocoding/v5/mapbox.places/' }; L__namespace.Util.setOptions(this, options); } var _proto = Mapbox.prototype; _proto._getProperties = function _getProperties(loc) { var properties = { text: loc.text, address: loc.address }; for (var j = 0; j < (loc.context || []).length; j++) { var id = loc.context[j].id.split('.')[0]; properties[id] = loc.context[j].text; // Get country code when available if (loc.context[j].short_code) { properties['countryShortCode'] = loc.context[j].short_code; } } return properties; }; _proto.geocode = function geocode(query, cb, context) { var _this = this; var params = geocodingParams(this.options, { access_token: this.options.apiKey }); if (params.proximity !== undefined && params.proximity.lat !== undefined && params.proximity.lng !== undefined) { params.proximity = params.proximity.lng + ',' + params.proximity.lat; } getJSON(this.options.serviceUrl + encodeURIComponent(query) + '.json', params, function (data) { var results = []; if (data.features && data.features.length) { for (var i = 0; i <= data.features.length - 1; i++) { var loc = data.features[i]; var center = L__namespace.latLng(loc.center.reverse()); var bbox = void 0; if (loc.bbox) { bbox = L__namespace.latLngBounds(L__namespace.latLng(loc.bbox.slice(0, 2).reverse()), L__namespace.latLng(loc.bbox.slice(2, 4).reverse())); } else { bbox = L__namespace.latLngBounds(center, center); } results[i] = { name: loc.place_name, bbox: bbox, center: center, properties: _this._getProperties(loc) }; } } cb.call(context, results); }); }; _proto.suggest = function suggest(query, cb, context) { return this.geocode(query, cb, context); }; _proto.reverse = function reverse(location, scale, cb, context) { var _this2 = this; var url = this.options.serviceUrl + location.lng + ',' + location.lat + '.json'; var param = reverseParams(this.options, { access_token: this.options.apiKey }); getJSON(url, param, function (data) { var results = []; if (data.features && data.features.length) { for (var i = 0; i <= data.features.length - 1; i++) { var loc = data.features[i]; var center = L__namespace.latLng(loc.center.reverse()); var bbox = void 0; if (loc.bbox) { bbox = L__namespace.latLngBounds(L__namespace.latLng(loc.bbox.slice(0, 2).reverse()), L__namespace.latLng(loc.bbox.slice(2, 4).reverse())); } else { bbox = L__namespace.latLngBounds(center, center); } results[i] = { name: loc.place_name, bbox: bbox, center: center, properties: _this2._getProperties(loc) }; } } cb.call(context, results); }); }; return Mapbox; }(); /** * [Class factory method](https://leafletjs.com/reference.html#class-class-factories) for {@link Mapbox} * @param options the options */ function mapbox(options) { return new Mapbox(options); } /** * Implementation of the [MapQuest Geocoding API](http://developer.mapquest.com/web/products/dev-services/geocoding-ws) */ var MapQuest = /*#__PURE__*/function () { function MapQuest(options) { this.options = { serviceUrl: 'https://www.mapquestapi.com/geocoding/v1' }; L__namespace.Util.setOptions(this, options); // MapQuest seems to provide URI encoded API keys, // so to avoid encoding them twice, we decode them here this.options.apiKey = decodeURIComponent(this.options.apiKey); } var _proto = MapQuest.prototype; _proto._formatName = function _formatName() { return [].slice.call(arguments).filter(function (s) { return !!s; }).join(', '); }; _proto.geocode = function geocode(query, cb, context) { var params = geocodingParams(this.options, { key: this.options.apiKey, location: query, limit: 5, outFormat: 'json' }); getJSON(this.options.serviceUrl + '/address', params, L__namespace.Util.bind(function (data) { var results = []; if (data.results && data.results[0].locations) { for (var i = data.results[0].locations.length - 1; i >= 0; i--) { var loc = data.results[0].locations[i]; var center = L__namespace.latLng(loc.latLng); results[i] = { name: this._formatName(loc.street, loc.adminArea4, loc.adminArea3, loc.adminArea1), bbox: L__namespace.latLngBounds(center, center), center: center }; } } cb.call(context, results); }, this)); }; _proto.reverse = function reverse(location, scale, cb, context) { var params = reverseParams(this.options, { key: this.options.apiKey, location: location.lat + ',' + location.lng, outputFormat: 'json' }); getJSON(this.options.serviceUrl + '/reverse', params, L__namespace.Util.bind(function (data) { var results = []; if (data.results && data.results[0].locations) { for (var i = data.results[0].locations.length - 1; i >= 0; i--) { var loc = data.results[0].locations[i]; var center = L__namespace.latLng(loc.latLng); results[i] = { name: this._formatName(loc.street, loc.adminArea4, loc.adminArea3, loc.adminArea1), bbox: L__namespace.latLngBounds(center, center), center: center }; } } cb.call(context, results); }, this)); }; return MapQuest; }(); /** * [Class factory method](https://leafletjs.com/reference.html#class-class-factories) for {@link MapQuest} * @param options the options */ function mapQuest(options) { return new MapQuest(options); } /** * Implementation of the [Neutrino API](https://www.neutrinoapi.com/api/geocode-address/) */ var Neutrino = /*#__PURE__*/function () { function Neutrino(options) { this.options = { userId: undefined, apiKey: undefined, serviceUrl: 'https://neutrinoapi.com/' }; L__namespace.Util.setOptions(this, options); } // https://www.neutrinoapi.com/api/geocode-address/ var _proto = Neutrino.prototype; _proto.geocode = function geocode(query, cb, context) { var params = geocodingParams(this.options, { apiKey: this.options.apiKey, userId: this.options.userId, //get three words and make a dot based string address: query.split(/\s+/).join('.') }); getJSON(this.options.serviceUrl + 'geocode-address', params, function (data) { var results = []; if (data.locations) { data.geometry = data.locations[0]; var center = L__namespace.latLng(data.geometry['latitude'], data.geometry['longitude']); var bbox = L__namespace.latLngBounds(center, center); results[0] = { name: data.geometry.address, bbox: bbox, center: center }; } cb.call(context, results); }); }; _proto.suggest = function suggest(query, cb, context) { return this.geocode(query, cb, context); } // https://www.neutrinoapi.com/api/geocode-reverse/ ; _proto.reverse = function reverse(location, scale, cb, context) { var params = reverseParams(this.options, { apiKey: this.options.apiKey, userId: this.options.userId, latitude: location.lat, longitude: location.lng }); getJSON(this.options.serviceUrl + 'geocode-reverse', params, function (data) { var results = []; if (data.status.status == 200 && data.found) { var center = L__namespace.latLng(location.lat, location.lng); var bbox = L__namespace.latLngBounds(center, center); results[0] = { name: data.address, bbox: bbox, center: center }; } cb.call(context, results); }); }; return Neutrino; }(); /** * [Class factory method](https://leafletjs.com/reference.html#class-class-factories) for {@link Neutrino} * @param options the options */ function neutrino(options) { return new Neutrino(options); } /** * Implementation of the [Nominatim](https://wiki.openstreetmap.org/wiki/Nominatim) geocoder. * * This is the default geocoding service used by the control, unless otherwise specified in the options. * * Unless using your own Nominatim installation, please refer to the [Nominatim usage policy](https://operations.osmfoundation.org/policies/nominatim/). */ var Nominatim = /*#__PURE__*/function () { function Nominatim(options) { this.options = { serviceUrl: 'https://nominatim.openstreetmap.org/', htmlTemplate: function htmlTemplate(r) { var address = r.address; var className; var parts = []; if (address.road || address.building) { parts.push('{building} {road} {house_number}'); } if (address.city || address.town || address.village || address.hamlet) { className = parts.length > 0 ? 'leaflet-control-geocoder-address-detail' : ''; parts.push('{postcode} {city} {town} {village} {hamlet}'); } if (address.state || address.country) { className = parts.length > 0 ? 'leaflet-control-geocoder-address-context' : ''; parts.push('{state} {country}'); } return template(parts.join('
'), address); } }; L__namespace.Util.setOptions(this, options || {}); } var _proto = Nominatim.prototype; _proto.geocode = function geocode(query, cb, context) { var _this = this; var params = geocodingParams(this.options, { q: query, limit: 5, format: 'json', addressdetails: 1 }); getJSON(this.options.serviceUrl + 'search', params, function (data) { var results = []; for (var i = data.length - 1; i >= 0; i--) { var bbox = data[i].boundingbox; for (var j = 0; j < 4; j++) { bbox[j] = +bbox[j]; } results[i] = { icon: data[i].icon, name: data[i].display_name, html: _this.options.htmlTemplate ? _this.options.htmlTemplate(data[i]) : undefined, bbox: L__namespace.latLngBounds([bbox[0], bbox[2]], [bbox[1], bbox[3]]), center: L__namespace.latLng(data[i].lat, data[i].lon), properties: data[i] }; } cb.call(context, results); }); }; _proto.reverse = function reverse(location, scale, cb, context) { var _this2 = this; var params = reverseParams(this.options, { lat: location.lat, lon: location.lng, zoom: Math.round(Math.log(scale / 256) / Math.log(2)), addressdetails: 1, format: 'json' }); getJSON(this.options.serviceUrl + 'reverse', params, function (data) { var result = []; if (data && data.lat && data.lon) { var center = L__namespace.latLng(data.lat, data.lon); var bbox = L__namespace.latLngBounds(center, center); result.push({ name: data.display_name, html: _this2.options.htmlTemplate ? _this2.options.htmlTemplate(data) : undefined, center: center, bbox: bbox, properties: data }); } cb.call(context, result); }); }; return Nominatim; }(); /** * [Class factory method](https://leafletjs.com/reference.html#class-class-factories) for {@link Nominatim} * @param options the options */ function nominatim(options) { return new Nominatim(options); } /** * Implementation of the [Plus codes](https://plus.codes/) (formerly OpenLocationCode) (requires [open-location-code](https://www.npmjs.com/package/open-location-code)) */ var OpenLocationCode = /*#__PURE__*/function () { function OpenLocationCode(options) { L__namespace.Util.setOptions(this, options); } var _proto = OpenLocationCode.prototype; _proto.geocode = function geocode(query, cb, context) { try { var decoded = this.options.OpenLocationCode.decode(query); var result = { name: query, center: L__namespace.latLng(decoded.latitudeCenter, decoded.longitudeCenter), bbox: L__namespace.latLngBounds(L__namespace.latLng(decoded.latitudeLo, decoded.longitudeLo), L__namespace.latLng(decoded.latitudeHi, decoded.longitudeHi)) }; cb.call(context, [result]); } catch (e) { console.warn(e); // eslint-disable-line no-console cb.call(context, []); } }; _proto.reverse = function reverse(location, scale, cb, context) { try { var code = this.options.OpenLocationCode.encode(location.lat, location.lng, this.options.codeLength); var result = { name: code, center: L__namespace.latLng(location.lat, location.lng), bbox: L__namespace.latLngBounds(L__namespace.latLng(location.lat, location.lng), L__namespace.latLng(location.lat, location.lng)) }; cb.call(context, [result]); } catch (e) { console.warn(e); // eslint-disable-line no-console cb.call(context, []); } }; return OpenLocationCode; }(); /** * [Class factory method](https://leafletjs.com/reference.html#class-class-factories) for {@link OpenLocationCode} * @param options the options */ function openLocationCode(options) { return new OpenLocationCode(options); } /** * Implementation of the [OpenCage Data API](https://opencagedata.com/) */ var OpenCage = /*#__PURE__*/function () { function OpenCage(options) { this.options = { serviceUrl: 'https://api.opencagedata.com/geocode/v1/json' }; L__namespace.Util.setOptions(this, options); } var _proto = OpenCage.prototype; _proto.geocode = function geocode(query, cb, context) { var params = geocodingParams(this.options, { key: this.options.apiKey, q: query }); getJSON(this.options.serviceUrl, params, function (data) { var results = []; if (data.results && data.results.length) { for (var i = 0; i < data.results.length; i++) { var loc = data.results[i]; var center = L__namespace.latLng(loc.geometry); var bbox = void 0; if (loc.annotations && loc.annotations.bounds) { bbox = L__namespace.latLngBounds(L__namespace.latLng(loc.annotations.bounds.northeast), L__namespace.latLng(loc.annotations.bounds.southwest)); } else { bbox = L__namespace.latLngBounds(center, center); } results.push({ name: loc.formatted, bbox: bbox, center: center }); } } cb.call(context, results); }); }; _proto.suggest = function suggest(query, cb, context) { return this.geocode(query, cb, context); }; _proto.reverse = function reverse(location, scale, cb, context) { var params = reverseParams(this.options, { key: this.options.apiKey, q: [location.lat, location.lng].join(',') }); getJSON(this.options.serviceUrl, params, function (data) { var results = []; if (data.results && data.results.length) { for (var i = 0; i < data.results.length; i++) { var loc = data.results[i]; var center = L__namespace.latLng(loc.geometry); var bbox = void 0; if (loc.annotations && loc.annotations.bounds) { bbox = L__namespace.latLngBounds(L__namespace.latLng(loc.annotations.bounds.northeast), L__namespace.latLng(loc.annotations.bounds.southwest)); } else { bbox = L__namespace.latLngBounds(center, center); } results.push({ name: loc.formatted, bbox: bbox, center: center }); } } cb.call(context, results); }); }; return OpenCage; }(); function opencage(options) { return new OpenCage(options); } /** * Implementation of the [Pelias](https://pelias.io/), [geocode.earth](https://geocode.earth/) geocoder (formerly Mapzen Search) */ var Pelias = /*#__PURE__*/function () { function Pelias(options) { this.options = { serviceUrl: 'https://api.geocode.earth/v1' }; this._lastSuggest = 0; L__namespace.Util.setOptions(this, options); } var _proto = Pelias.prototype; _proto.geocode = function geocode(query, cb, context) { var _this = this; var params = geocodingParams(this.options, { api_key: this.options.apiKey, text: query }); getJSON(this.options.serviceUrl + '/search', params, function (data) { cb.call(context, _this._parseResults(data, 'bbox')); }); }; _proto.suggest = function suggest(query, cb, context) { var _this2 = this; var params = geocodingParams(this.options, { api_key: this.options.apiKey, text: query }); getJSON(this.options.serviceUrl + '/autocomplete', params, function (data) { if (data.geocoding.timestamp > _this2._lastSuggest) { _this2._lastSuggest = data.geocoding.timestamp; cb.call(context, _this2._parseResults(data, 'bbox')); } }); }; _proto.reverse = function reverse(location, scale, cb, context) { var _this3 = this; var params = reverseParams(this.options, { api_key: this.options.apiKey, 'point.lat': location.lat, 'point.lon': location.lng }); getJSON(this.options.serviceUrl + '/reverse', params, function (data) { cb.call(context, _this3._parseResults(data, 'bounds')); }); }; _proto._parseResults = function _parseResults(data, bboxname) { var results = []; L__namespace.geoJSON(data, { pointToLayer: function pointToLayer(feature, latlng) { return L__namespace.circleMarker(latlng); }, onEachFeature: function onEachFeature(feature, layer) { var result = {}; var bbox; var center; if (layer.getBounds) { bbox = layer.getBounds(); center = bbox.getCenter(); } else if (layer.feature.bbox) { center = layer.getLatLng(); bbox = L__namespace.latLngBounds(L__namespace.GeoJSON.coordsToLatLng(layer.feature.bbox.slice(0, 2)), L__namespace.GeoJSON.coordsToLatLng(layer.feature.bbox.slice(2, 4))); } else { center = layer.getLatLng(); bbox = L__namespace.latLngBounds(center, center); } result.name = layer.feature.properties.label; result.center = center; result[bboxname] = bbox; result.properties = layer.feature.properties; results.push(result); } }); return results; }; return Pelias; }(); /** * [Class factory method](https://leafletjs.com/reference.html#class-class-factories) for {@link Pelias} * @param options the options */ function pelias(options) { return new Pelias(options); } var GeocodeEarth = Pelias; var geocodeEarth = pelias; /** * r.i.p. * @deprecated */ var Mapzen = Pelias; /** * r.i.p. * @deprecated */ var mapzen = pelias; /** * Implementation of the [Openrouteservice](https://openrouteservice.org/dev/#/api-docs/geocode) geocoder */ var Openrouteservice = /*#__PURE__*/function (_Pelias) { _inheritsLoose(Openrouteservice, _Pelias); function Openrouteservice(options) { return _Pelias.call(this, L__namespace.Util.extend({ serviceUrl: 'https://api.openrouteservice.org/geocode' }, options)) || this; } return Openrouteservice; }(Pelias); /** * [Class factory method](https://leafletjs.com/reference.html#class-class-factories) for {@link Openrouteservice} * @param options the options */ function openrouteservice(options) { return new Openrouteservice(options); } /** * Implementation of the [Photon](http://photon.komoot.de/) geocoder */ var Photon = /*#__PURE__*/function () { function Photon(options) { this.options = { serviceUrl: 'https://photon.komoot.io/api/', reverseUrl: 'https://photon.komoot.io/reverse/', nameProperties: ['name', 'street', 'suburb', 'hamlet', 'town', 'city', 'state', 'country'] }; L__namespace.Util.setOptions(this, options); } var _proto = Photon.prototype; _proto.geocode = function geocode(query, cb, context) { var params = geocodingParams(this.options, { q: query }); getJSON(this.options.serviceUrl, params, L__namespace.Util.bind(function (data) { cb.call(context, this._decodeFeatures(data)); }, this)); }; _proto.suggest = function suggest(query, cb, context) { return this.geocode(query, cb, context); }; _proto.reverse = function reverse(latLng, scale, cb, context) { var params = reverseParams(this.options, { lat: latLng.lat, lon: latLng.lng }); getJSON(this.options.reverseUrl, params, L__namespace.Util.bind(function (data) { cb.call(context, this._decodeFeatures(data)); }, this)); }; _proto._decodeFeatures = function _decodeFeatures(data) { var results = []; if (data && data.features) { for (var i = 0; i < data.features.length; i++) { var f = data.features[i]; var c = f.geometry.coordinates; var center = L__namespace.latLng(c[1], c[0]); var extent = f.properties.extent; var bbox = extent ? L__namespace.latLngBounds([extent[1], extent[0]], [extent[3], extent[2]]) : L__namespace.latLngBounds(center, center); results.push({ name: this._decodeFeatureName(f), html: this.options.htmlTemplate ? this.options.htmlTemplate(f) : undefined, center: center, bbox: bbox, properties: f.properties }); } } return results; }; _proto._decodeFeatureName = function _decodeFeatureName(f) { return (this.options.nameProperties || []).map(function (p) { return f.properties[p]; }).filter(function (v) { return !!v; }).join(', '); }; return Photon; }(); /** * [Class factory method](https://leafletjs.com/reference.html#class-class-factories) for {@link Photon} * @param options the options */ function photon(options) { return new Photon(options); } /** * Implementation of the What3Words service */ var What3Words = /*#__PURE__*/function () { function What3Words(options) { this.options = { serviceUrl: 'https://api.what3words.com/v2/' }; L__namespace.Util.setOptions(this, options); } var _proto = What3Words.prototype; _proto.geocode = function geocode(query, cb, context) { //get three words and make a dot based string getJSON(this.options.serviceUrl + 'forward', geocodingParams(this.options, { key: this.options.apiKey, addr: query.split(/\s+/).join('.') }), function (data) { var results = []; if (data.geometry) { var latLng = L__namespace.latLng(data.geometry['lat'], data.geometry['lng']); var latLngBounds = L__namespace.latLngBounds(latLng, latLng); results[0] = { name: data.words, bbox: latLngBounds, center: latLng }; } cb.call(context, results); }); }; _proto.suggest = function suggest(query, cb, context) { return this.geocode(query, cb, context); }; _proto.reverse = function reverse(location, scale, cb, context) { getJSON(this.options.serviceUrl + 'reverse', reverseParams(this.options, { key: this.options.apiKey, coords: [location.lat, location.lng].join(',') }), function (data) { var results = []; if (data.status.status == 200) { var center = L__namespace.latLng(data.geometry['lat'], data.geometry['lng']); var bbox = L__namespace.latLngBounds(center, center); results[0] = { name: data.words, bbox: bbox, center: center }; } cb.call(context, results); }); }; return What3Words; }(); /** * [Class factory method](https://leafletjs.com/reference.html#class-class-factories) for {@link What3Words} * @param options the options */ function what3words(options) { return new What3Words(options); } var geocoders = { __proto__: null, geocodingParams: geocodingParams, reverseParams: reverseParams, ArcGis: ArcGis, arcgis: arcgis, Bing: Bing, bing: bing, Google: Google, google: google, HERE: HERE, HEREv2: HEREv2, here: here, parseLatLng: parseLatLng, LatLng: LatLng, latLng: latLng, Mapbox: Mapbox, mapbox: mapbox, MapQuest: MapQuest, mapQuest: mapQuest, Neutrino: Neutrino, neutrino: neutrino, Nominatim: Nominatim, nominatim: nominatim, OpenLocationCode: OpenLocationCode, openLocationCode: openLocationCode, OpenCage: OpenCage, opencage: opencage, Pelias: Pelias, pelias: pelias, GeocodeEarth: GeocodeEarth, geocodeEarth: geocodeEarth, Mapzen: Mapzen, mapzen: mapzen, Openrouteservice: Openrouteservice, openrouteservice: openrouteservice, Photon: Photon, photon: photon, What3Words: What3Words, what3words: what3words }; /** * Leaflet mixins https://leafletjs.com/reference-1.7.1.html#class-includes * for TypeScript https://www.typescriptlang.org/docs/handbook/mixins.html * @internal */ var EventedControl = // eslint-disable-next-line @typescript-eslint/no-unused-vars function EventedControl() {// empty }; L__namespace.Util.extend(EventedControl.prototype, L__namespace.Control.prototype); L__namespace.Util.extend(EventedControl.prototype, L__namespace.Evented.prototype); /** * This is the geocoder control. It works like any other [Leaflet control](https://leafletjs.com/reference.html#control), and is added to the map. */ var GeocoderControl = /*#__PURE__*/function (_EventedControl) { _inheritsLoose(GeocoderControl, _EventedControl); /** * Instantiates a geocoder control (to be invoked using `new`) * @param options the options */ function GeocoderControl(options) { var _this; _this = _EventedControl.call(this, options) || this; _this.options = { showUniqueResult: true, showResultIcons: false, collapsed: true, expand: 'touch', position: 'topright', placeholder: 'Search...', errorMessage: 'Nothing found.', iconLabel: 'Initiate a new search', query: '', queryMinLength: 1, suggestMinLength: 3, suggestTimeout: 250, defaultMarkGeocode: true }; _this._requestCount = 0; L__namespace.Util.setOptions(_assertThisInitialized(_this), options); if (!_this.options.geocoder) { _this.options.geocoder = new Nominatim(); } return _this; } var _proto = GeocoderControl.prototype; _proto.addThrobberClass = function addThrobberClass() { L__namespace.DomUtil.addClass(this._container, 'leaflet-control-geocoder-throbber'); }; _proto.removeThrobberClass = function removeThrobberClass() { L__namespace.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-throbber'); } /** * Returns the container DOM element for the control and add listeners on relevant map events. * @param map the map instance * @see https://leafletjs.com/reference.html#control-onadd */ ; _proto.onAdd = function onAdd(map) { var _this2 = this; var className = 'leaflet-control-geocoder'; var container = L__namespace.DomUtil.create('div', className + ' leaflet-bar'); var icon = L__namespace.DomUtil.create('button', className + '-icon', container); var form = this._form = L__namespace.DomUtil.create('div', className + '-form', container); this._map = map; this._container = container; icon.innerHTML = ' '; icon.type = 'button'; icon.setAttribute('aria-label', this.options.iconLabel); var input = this._input = L__namespace.DomUtil.create('input', '', form); input.type = 'text'; input.value = this.options.query; input.placeholder = this.options.placeholder; L__namespace.DomEvent.disableClickPropagation(input); this._errorElement = L__namespace.DomUtil.create('div', className + '-form-no-error', container); this._errorElement.innerHTML = this.options.errorMessage; this._alts = L__namespace.DomUtil.create('ul', className + '-alternatives leaflet-control-geocoder-alternatives-minimized', container); L__namespace.DomEvent.disableClickPropagation(this._alts); L__namespace.DomEvent.addListener(input, 'keydown', this._keydown, this); if (this.options.geocoder.suggest) { L__namespace.DomEvent.addListener(input, 'input', this._change, this); } L__namespace.DomEvent.addListener(input, 'blur', function () { if (_this2.options.collapsed && !_this2._preventBlurCollapse) { _this2._collapse(); } _this2._preventBlurCollapse = false; }); if (this.options.collapsed) { if (this.options.expand === 'click') { L__namespace.DomEvent.addListener(container, 'click', function (e) { if (e.button === 0 && e.detail !== 2) { _this2._toggle(); } }); } else if (this.options.expand === 'touch') { L__namespace.DomEvent.addListener(container, L__namespace.Browser.touch ? 'touchstart mousedown' : 'mousedown', function (e) { _this2._toggle(); e.preventDefault(); // mobile: clicking focuses the icon, so UI expands and immediately collapses e.stopPropagation(); }, this); } else { L__namespace.DomEvent.addListener(container, 'mouseover', this._expand, this); L__namespace.DomEvent.addListener(container, 'mouseout', this._collapse, this); this._map.on('movestart', this._collapse, this); } } else { this._expand(); if (L__namespace.Browser.touch) { L__namespace.DomEvent.addListener(container, 'touchstart', function () { return _this2._geocode(); }); } else { L__namespace.DomEvent.addListener(container, 'click', function () { return _this2._geocode(); }); } } if (this.options.defaultMarkGeocode) { this.on('markgeocode', this.markGeocode, this); } this.on('startgeocode', this.addThrobberClass, this); this.on('finishgeocode', this.removeThrobberClass, this); this.on('startsuggest', this.addThrobberClass, this); this.on('finishsuggest', this.removeThrobberClass, this); L__namespace.DomEvent.disableClickPropagation(container); return container; } /** * Sets the query string on the text input * @param string the query string */ ; _proto.setQuery = function setQuery(string) { this._input.value = string; return this; }; _proto._geocodeResult = function _geocodeResult(results, suggest) { if (!suggest && this.options.showUniqueResult && results.length === 1) { this._geocodeResultSelected(results[0]); } else if (results.length > 0) { this._alts.innerHTML = ''; this._results = results; L__namespace.DomUtil.removeClass(this._alts, 'leaflet-control-geocoder-alternatives-minimized'); L__namespace.DomUtil.addClass(this._container, 'leaflet-control-geocoder-options-open'); for (var i = 0; i < results.length; i++) { this._alts.appendChild(this._createAlt(results[i], i)); } } else { L__namespace.DomUtil.addClass(this._container, 'leaflet-control-geocoder-options-error'); L__namespace.DomUtil.addClass(this._errorElement, 'leaflet-control-geocoder-error'); } } /** * Marks a geocoding result on the map * @param result the geocoding result */ ; _proto.markGeocode = function markGeocode(event) { var result = event.geocode; this._map.fitBounds(result.bbox); if (this._geocodeMarker) { this._map.removeLayer(this._geocodeMarker); } this._geocodeMarker = new L__namespace.Marker(result.center).bindPopup(result.html || result.name).addTo(this._map).openPopup(); return this; }; _proto._geocode = function _geocode(suggest) { var _this3 = this; var value = this._input.value; if (!suggest && value.length < this.options.queryMinLength) { return; } var requestCount = ++this._requestCount; var cb = function cb(results) { if (requestCount === _this3._requestCount) { var _event = { input: value, results: results }; _this3.fire(suggest ? 'finishsuggest' : 'finishgeocode', _event); _this3._geocodeResult(results, suggest); } }; this._lastGeocode = value; if (!suggest) { this._clearResults(); } var event = { input: value }; this.fire(suggest ? 'startsuggest' : 'startgeocode', event); if (suggest) { this.options.geocoder.suggest(value, cb); } else { this.options.geocoder.geocode(value, cb); } }; _proto._geocodeResultSelected = function _geocodeResultSelected(geocode) { var event = { geocode: geocode }; this.fire('markgeocode', event); }; _proto._toggle = function _toggle() { if (L__namespace.DomUtil.hasClass(this._container, 'leaflet-control-geocoder-expanded')) { this._collapse(); } else { this._expand(); } }; _proto._expand = function _expand() { L__namespace.DomUtil.addClass(this._container, 'leaflet-control-geocoder-expanded'); this._input.select(); this.fire('expand'); }; _proto._collapse = function _collapse() { L__namespace.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-expanded'); L__namespace.DomUtil.addClass(this._alts, 'leaflet-control-geocoder-alternatives-minimized'); L__namespace.DomUtil.removeClass(this._errorElement, 'leaflet-control-geocoder-error'); L__namespace.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-open'); L__namespace.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-error'); this._input.blur(); // mobile: keyboard shouldn't stay expanded this.fire('collapse'); }; _proto._clearResults = function _clearResults() { L__namespace.DomUtil.addClass(this._alts, 'leaflet-control-geocoder-alternatives-minimized'); this._selection = null; L__namespace.DomUtil.removeClass(this._errorElement, 'leaflet-control-geocoder-error'); L__namespace.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-open'); L__namespace.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-error'); }; _proto._createAlt = function _createAlt(result, index) { var _this4 = this; var li = L__namespace.DomUtil.create('li', ''), a = L__namespace.DomUtil.create('a', '', li), icon = this.options.showResultIcons && result.icon ? L__namespace.DomUtil.create('img', '', a) : null, text = result.html ? undefined : document.createTextNode(result.name), mouseDownHandler = function mouseDownHandler(e) { // In some browsers, a click will fire on the map if the control is // collapsed directly after mousedown. To work around this, we // wait until the click is completed, and _then_ collapse the // control. Messy, but this is the workaround I could come up with // for #142. _this4._preventBlurCollapse = true; L__namespace.DomEvent.stop(e); _this4._geocodeResultSelected(result); L__namespace.DomEvent.on(li, 'click touchend', function () { if (_this4.options.collapsed) { _this4._collapse(); } else { _this4._clearResults(); } }); }; if (icon) { icon.src = result.icon; } li.setAttribute('data-result-index', String(index)); if (result.html) { a.innerHTML = a.innerHTML + result.html; } else if (text) { a.appendChild(text); } // Use mousedown and not click, since click will fire _after_ blur, // causing the control to have collapsed and removed the items // before the click can fire. L__namespace.DomEvent.addListener(li, 'mousedown touchstart', mouseDownHandler, this); return li; }; _proto._keydown = function _keydown(e) { var _this5 = this; var select = function select(dir) { if (_this5._selection) { L__namespace.DomUtil.removeClass(_this5._selection, 'leaflet-control-geocoder-selected'); _this5._selection = _this5._selection[dir > 0 ? 'nextSibling' : 'previousSibling']; } if (!_this5._selection) { _this5._selection = _this5._alts[dir > 0 ? 'firstChild' : 'lastChild']; } if (_this5._selection) { L__namespace.DomUtil.addClass(_this5._selection, 'leaflet-control-geocoder-selected'); } }; switch (e.keyCode) { // Escape case 27: if (this.options.collapsed) { this._collapse(); } else { this._clearResults(); } break; // Up case 38: select(-1); break; // Up case 40: select(1); break; // Enter case 13: if (this._selection) { var index = parseInt(this._selection.getAttribute('data-result-index'), 10); this._geocodeResultSelected(this._results[index]); this._clearResults(); } else { this._geocode(); } break; default: return; } L__namespace.DomEvent.preventDefault(e); }; _proto._change = function _change() { var _this6 = this; var v = this._input.value; if (v !== this._lastGeocode) { clearTimeout(this._suggestTimeout); if (v.length >= this.options.suggestMinLength) { this._suggestTimeout = setTimeout(function () { return _this6._geocode(true); }, this.options.suggestTimeout); } else { this._clearResults(); } } }; return GeocoderControl; }(EventedControl); /** * [Class factory method](https://leafletjs.com/reference.html#class-class-factories) for {@link GeocoderControl} * @param options the options */ function geocoder(options) { return new GeocoderControl(options); } /* @preserve * Leaflet Control Geocoder * https://github.com/perliedman/leaflet-control-geocoder * * Copyright (c) 2012 sa3m (https://github.com/sa3m) * Copyright (c) 2018 Per Liedman * All rights reserved. */ L__namespace.Util.extend(GeocoderControl, geocoders); L__namespace.Util.extend(L__namespace.Control, { Geocoder: GeocoderControl, geocoder: geocoder }); exports.Geocoder = GeocoderControl; exports.default = GeocoderControl; exports.geocoder = geocoder; exports.geocoders = geocoders; return exports; }({}, L)); //# sourceMappingURL=Control.Geocoder.js.map