diff --git a/build b/build
deleted file mode 100755
index 33bc078..0000000
--- a/build
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/bash
-
-# directories
-JS_IN_DIR='./src/'
-JS_OUT_DIR='.'
-
-JS_TEMP=""
-JS_WRAPPER=$(<"$JS_IN_DIR/wrapper.js")
-JS_COMBINED_FILE="$JS_OUT_DIR/ol3-geocoder-debug.js"
-JS_COMBINED_FILE_MIN="$JS_OUT_DIR/ol3-geocoder.js"
-
-# JS files you want to combine together
-
-JS_FILES=(
- base.js
- nominatim.js
- utils.js
-)
-
-#clear the files
-> $JS_COMBINED_FILE
-> $JS_COMBINED_FILE_MIN
-
-#run thru the JS files
-for F in ${JS_FILES[@]}; do
- CONTENTS=$(<"$JS_IN_DIR/$F")
- JS_TEMP+="$CONTENTS"
-done
-
-echo "${JS_WRAPPER//CODE_HERE/$JS_TEMP}" > $JS_COMBINED_FILE
-
-
-#compress it
-uglifyjs --screw-ie8 -c -o $JS_COMBINED_FILE_MIN $JS_COMBINED_FILE
-
-#add the file to the git base
-#git add $JS_COMBINED_FILE
-#git add $JS_COMBINED_FILE_MIN
diff --git a/build.js b/build.js
new file mode 100644
index 0000000..c486f09
--- /dev/null
+++ b/build.js
@@ -0,0 +1,46 @@
+module.paths.push('/usr/local/lib/node_modules');
+var
+ fs = require('fs'),
+ path = require('path'),
+ UglifyJS = require('uglify-js'),
+ read = function(f) {
+ return fs.readFileSync(f).toString();
+ },
+ log = function(t){console.log(t)},
+ js_str = '',
+ src_dir = __dirname + '/src/',
+ js_files = [
+ 'base.js',
+ 'nominatim.js',
+ 'utils.js'
+ ],
+
+ out_dir = __dirname + '/',
+ out_js_file_combined = out_dir + 'ol3-geocoder-debug.js',
+ out_js_file_min = out_dir + 'ol3-geocoder.js',
+ i = -1
+;
+
+
+//JS
+while(++i < js_files.length){
+ js_str += read(src_dir + js_files[i]);
+}
+var wrapper = read(fs.realpathSync(src_dir + 'wrapper.js'));
+var js_str_combined = wrapper.replace('{CODE_HERE}', js_str);
+
+fs.writeFile(out_js_file_combined, js_str_combined, function(error) {
+ if (error) {
+ log('JS:' + error);
+ } else {
+ var result_js = UglifyJS.minify(out_js_file_combined);
+
+ fs.writeFile(out_js_file_min, result_js.code, function(error) {
+ if (error) {
+ log('JS MIN:' + error);
+ } else {
+ log('JS written');
+ }
+ });
+ }
+});
\ No newline at end of file
diff --git a/examples/control-nominatim.js b/examples/control-nominatim.js
index 30cbd53..bff1268 100644
--- a/examples/control-nominatim.js
+++ b/examples/control-nominatim.js
@@ -23,6 +23,8 @@
//Instantiate with some options and add the Control
var geocoder = new Geocoder('nominatim', {
provider: 'mapquest',
+ key: '5wLaMQ9Z56pVgIKqxhD2UaM2BetlR6Vz', //please, get yours at
+ // https://developer.mapquest.com/
lang: 'pt-BR',
limit: 5,
keepOpen: true
diff --git a/ol3-geocoder-debug.js b/ol3-geocoder-debug.js
index 19ae909..327c370 100644
--- a/ol3-geocoder-debug.js
+++ b/ol3-geocoder-debug.js
@@ -32,7 +32,7 @@ Geocoder.prototype.getSource = function(){
source: new ol.source.Vector()
});
var defaults = {
- provider: 'mapquest',
+ provider: 'osm',
keepOpen: false
};
@@ -48,7 +48,6 @@ Geocoder.prototype.getSource = function(){
var container = this.createControl();
this.els = Geocoder.Nominatim.elements;
-
this.setListeners();
return this;
};
@@ -91,7 +90,9 @@ Geocoder.prototype.getSource = function(){
utils.removeClass(this.els.input_search, 'ol-geocoder-loading');
utils.addClass(this.els.control, this.constants.expanded_class);
var input = this.els.input_search;
- window.setTimeout(function(){input.focus()}, 100);
+ window.setTimeout(function(){
+ input.focus();
+ }, 100);
},
collapse: function(){
this.els.input_search.value = "";
@@ -108,12 +109,15 @@ Geocoder.prototype.getSource = function(){
var
this_ = this,
input = this.els.input_search,
- provider = this.getProvider(
- this.options.provider,
- query,
- this.options.lang,
- this.options.limit
- );
+ providers_names = Geocoder.Nominatim.providers.names,
+ provider = this.getProvider({
+ provider: this.options.provider,
+ key: this.options.key,
+ query: query,
+ lang: this.options.lang,
+ limit: this.options.limit
+ })
+ ;
this.clearResults();
utils.addClass(input, 'ol-geocoder-loading');
@@ -124,14 +128,16 @@ Geocoder.prototype.getSource = function(){
var response;
switch (this_.options.provider) {
- case 'osm':
- case 'mapquest':
- response = this.response.length > 0 ? this.response : undefined;
+ case providers_names.OSM:
+ case providers_names.MAPQUEST:
+ response = this.response.length > 0
+ ? this.response
+ : undefined;
break;
- case 'photon':
+ case providers_names.PHOTON:
response = this.response.features.length > 0
- ? this_.photonResponse(this.response.features)
- : undefined;
+ ? this_.photonResponse(this.response.features)
+ : undefined;
break;
}
if(response){
@@ -287,20 +293,30 @@ Geocoder.prototype.getSource = function(){
map.addLayer(this.layer);
}
},
- getProvider: function(key, query, lang, limit){
- var provider = Geocoder.Nominatim.providers[key];
- provider.params.q = query;
- provider.params.limit = limit || provider.params.limit;
+ getProvider: function(options){
+ var
+ provider = Geocoder.Nominatim.providers[options.provider],
+ providers_names = Geocoder.Nominatim.providers.names,
+ langs_photon = ['de', 'it', 'fr', 'en']
+ ;
+ provider.params.q = options.query;
+ provider.params.limit = options.limit || provider.params.limit;
+
+ //defining key
+ if(options.provider == providers_names.MAPQUEST){
+ provider.params.key = options.key;
+ }
- if(key == 'photon'){
- lang = lang.toLowerCase();
- var accepted = ['de', 'it', 'fr', 'en'];
- (accepted.indexOf(lang) > -1)
- ? provider.params.lang = lang
+ //defining language
+ if(options.provider == providers_names.PHOTON){
+ options.lang = options.lang.toLowerCase();
+
+ provider.params.lang = (langs_photon.indexOf(options.lang) > -1)
+ ? options.lang
: provider.params.lang;
} else {
provider.params['accept-language'] =
- lang || provider.params['accept-language'];
+ options.lang || provider.params['accept-language'];
}
return provider;
@@ -309,6 +325,11 @@ Geocoder.prototype.getSource = function(){
Geocoder.Nominatim.elements = {};
Geocoder.Nominatim.providers = {
+ names: {
+ OSM: 'osm',
+ MAPQUEST: 'mapquest',
+ PHOTON: 'photon'
+ },
osm: {
url: 'http://nominatim.openstreetmap.org/search/',
params: {
@@ -322,6 +343,7 @@ Geocoder.prototype.getSource = function(){
mapquest: {
url: 'http://open.mapquestapi.com/nominatim/v1/search.php',
params: {
+ key: '',
format: 'json',
q: '',
addressdetails: 1,
@@ -345,14 +367,16 @@ Geocoder.prototype.getSource = function(){
anchor: [0.5, 1],
src: '//cdn.rawgit.com/jonataswalker/'
+ 'map-utils/master/images/marker.png'
- }), zIndex: 5
+ }),
+ zIndex: 5
}),
new ol.style.Style({
image: new ol.style.Circle({
fill: new ol.style.Fill({ color: [235, 235, 235, 1]}),
stroke: new ol.style.Stroke({ color: [0, 0, 0, 1]}),
radius: 5
- }), zIndex: 4
+ }),
+ zIndex: 4
})
];
Geocoder.Nominatim.html = [
@@ -606,4 +630,4 @@ Geocoder.prototype.getSource = function(){
log = function(m){console.info(m)},
utils = Geocoder.Utils
;
-}).call(this, window, document);
+}).call(this, window, document);
\ No newline at end of file
diff --git a/ol3-geocoder.js b/ol3-geocoder.js
index 2377e91..c1df904 100644
--- a/ol3-geocoder.js
+++ b/ol3-geocoder.js
@@ -1 +1 @@
-(function(win,doc){"use strict";this.Geocoder=function(){var Geocoder=function(control_type,opt_options){var nominatim=new Geocoder.Nominatim(this,opt_options);this.layer=nominatim.layer,ol.control.Control.call(this,{element:nominatim.els.container}),this.set("geocoder","")};return ol.inherits(Geocoder,ol.control.Control),Geocoder.prototype.getSource=function(){return this.layer.getSource()},function(Geocoder){Geocoder.Nominatim=function(geocoder,opt_options){this.geocoder=geocoder,this.feature_increment=0,this.layer_name="geocoder-nominatim-"+(new Date).getTime().toString(36),this.layer=new ol.layer.Vector({name:this.layer_name,source:new ol.source.Vector});var defaults={provider:"mapquest",keepOpen:!1};this.options=utils.mergeOptions(defaults,opt_options),this.constants={class_container:"ol-geocoder",expanded_class:"ol-geocoder-search-expanded",road:"ol-geocoder-road",city:"ol-geocoder-city",country:"ol-geocoder-country"};this.createControl();return this.els=Geocoder.Nominatim.elements,this.setListeners(),this},Geocoder.Nominatim.prototype={createControl:function(){var container=utils.createElement(["div",{classname:this.constants.class_container}],Geocoder.Nominatim.html);return Geocoder.Nominatim.elements={container:container,control:container.querySelector(".ol-geocoder-search"),btn_search:container.querySelector(".ol-geocoder-btn-search"),input_search:container.querySelector(".ol-geocoder-input-search"),result_container:container.querySelector(".ol-geocoder-result")},container},setListeners:function(){var this_=this,openSearch=function(){utils.hasClass(this_.els.control,this_.constants.expanded_class)?this_.collapse():this_.expand()},query=function(evt){if(13==evt.keyCode){var q=utils.htmlEscape(this_.els.input_search.value);this_.query(q)}};this_.els.input_search.addEventListener("keydown",query,!1),this_.els.btn_search.addEventListener("click",openSearch,!1)},expand:function(){utils.removeClass(this.els.input_search,"ol-geocoder-loading"),utils.addClass(this.els.control,this.constants.expanded_class);var input=this.els.input_search;window.setTimeout(function(){input.focus()},100)},collapse:function(){this.els.input_search.value="",this.els.input_search.blur(),utils.removeClass(this.els.control,this.constants.expanded_class),this.clearResults()},clearResults:function(collapse){collapse?this.collapse():utils.removeAllChildren(this.els.result_container)},query:function(query){var this_=this,input=this.els.input_search,provider=this.getProvider(this.options.provider,query,this.options.lang,this.options.limit);this.clearResults(),utils.addClass(input,"ol-geocoder-loading"),utils.json(provider.url,provider.params).when({ready:function(){utils.removeClass(input,"ol-geocoder-loading");var response;switch(this_.options.provider){case"osm":case"mapquest":response=this.response.length>0?this.response:void 0;break;case"photon":response=this.response.features.length>0?this_.photonResponse(this.response.features):void 0}if(response){this_.createList(response);var canvas=this_.geocoder.getMap().getTargetElement();canvas.addEventListener("click",{handleEvent:function(evt){this_.clearResults(!0),canvas.removeEventListener(evt.type,this,!1)}},!1)}},error:function(){utils.removeClass(input,"ol-geocoder-loading");var li=utils.createElement("li","
Error! No internet connection?
");this_.els.result_container.appendChild(li)}})},createList:function(response){var this_=this,ul=this.els.result_container;response.forEach(function(row){var address=this_.addressTemplate(row),html=''+address+"",li=utils.createElement("li",html);li.addEventListener("click",function(evt){evt.preventDefault(),this_.chosen(row,address)},!1),ul.appendChild(li)})},addressTemplate:function(row){var r=row.address,html=[];return r.name&&html.push('{name}'),(r.road||r.building)&&html.push('{building} {road} {house_number}'),(r.city||r.town||r.village)&&html.push('{postcode} {city} {town} {village}'),(r.state||r.country)&&html.push('{state} {country}'),utils.template(html.join("
"),r)},chosen:function(place,address){this.options.keepOpen===!1&&this.clearResults(!0);var map=this.geocoder.getMap(),coord=utils.to3857([place.lon,place.lat]),resolution=2.388657133911758,duration=500,obj={coord:coord,address:address},pan=ol.animation.pan({duration:duration,source:map.getView().getCenter()}),zoom=ol.animation.zoom({duration:duration,resolution:map.getView().getResolution()});map.beforeRender(pan,zoom),map.getView().setCenter(coord),map.getView().setResolution(resolution),this.createFeature(obj)},createFeature:function(obj){var feature=new ol.Feature({address:obj.address,geometry:new ol.geom.Point(obj.coord)}),feature_id=this.featureId(),feature_style=this.options.featureStyle||Geocoder.Nominatim.featureStyle;this.addLayer(),feature.setStyle(feature_style),feature.setId(feature_id),this.getSource().addFeature(feature),this.geocoder.set("geocoder",feature_id)},featureId:function(){return"geocoder-"+ ++this.feature_increment},photonResponse:function(features){var array=features.map(function(feature){var obj={lon:feature.geometry.coordinates[0],lat:feature.geometry.coordinates[1],address:{name:feature.properties.name,city:feature.properties.city,state:feature.properties.state,country:feature.properties.country}};return obj});return array},getSource:function(){return this.layer.getSource()},addLayer:function(){var found,this_=this,map=this.geocoder.getMap();map.getLayers().forEach(function(layer){found=layer===this_.layer?!0:!1}),found===!1&&map.addLayer(this.layer)},getProvider:function(key,query,lang,limit){var provider=Geocoder.Nominatim.providers[key];if(provider.params.q=query,provider.params.limit=limit||provider.params.limit,"photon"==key){lang=lang.toLowerCase();var accepted=["de","it","fr","en"];accepted.indexOf(lang)>-1?provider.params.lang=lang:provider.params.lang}else provider.params["accept-language"]=lang||provider.params["accept-language"];return provider}},Geocoder.Nominatim.elements={},Geocoder.Nominatim.providers={osm:{url:"http://nominatim.openstreetmap.org/search/",params:{format:"json",q:"",addressdetails:1,limit:10,"accept-language":"en-US"}},mapquest:{url:"http://open.mapquestapi.com/nominatim/v1/search.php",params:{format:"json",q:"",addressdetails:1,limit:10,"accept-language":"en-US"}},photon:{url:"http://photon.komoot.de/api/",params:{q:"",limit:10,lang:"en"}}},Geocoder.Nominatim.featureStyle=[new ol.style.Style({image:new ol.style.Icon({scale:.7,anchor:[.5,1],src:"//cdn.rawgit.com/jonataswalker/map-utils/master/images/marker.png"}),zIndex:5}),new ol.style.Style({image:new ol.style.Circle({fill:new ol.style.Fill({color:[235,235,235,1]}),stroke:new ol.style.Stroke({color:[0,0,0,1]}),radius:5}),zIndex:4})],Geocoder.Nominatim.html=['','','',"
",''].join("")}(Geocoder),function(win,doc){var getXhr=function(){var xhr=!1;if(win.XMLHttpRequest)xhr=new XMLHttpRequest;else if(win.ActiveXObject)try{xhr=new ActiveXObject("Msxml2.XMLHTTP")}catch(e){try{xhr=new ActiveXObject("Microsoft.XMLHTTP")}catch(e){xhr=!1}}return xhr};Geocoder.Utils={whiteSpaceRegex:/\s+/,json:function(url,data){function onload(){200===xhr.status&&when.ready.call({response:JSON.parse(xhr.response)})}function onerror(){when.error.call({response:"Can't xhr on url: "+url})}function onprogress(){}if(data&&"object"==typeof data){var y="",e=encodeURIComponent;for(var x in data)y+="&"+e(x)+"="+e(data[x]);data=y.slice(1),url+=(/\?/.test(url)?"&":"?")+data}var xhr=getXhr(),when={};return xhr.open("GET",url,!0),xhr.setRequestHeader("Accept","application/json"),xhr.onload=onload,xhr.onerror=onerror,xhr.onprogress=onprogress,xhr.send(null),{when:function(obj){when.ready=obj.ready,when.error=obj.error}}},to3857:function(coord){return ol.proj.transform([parseFloat(coord[0]),parseFloat(coord[1])],"EPSG:4326","EPSG:3857")},to4326:function(coord){return ol.proj.transform([parseFloat(coord[0]),parseFloat(coord[1])],"EPSG:3857","EPSG:4326")},classRegex:function(classname){return new RegExp("(^|\\s+)"+classname+"(\\s+|$)")},_addClass:function(el,c){el.classList?el.classList.add(c):el.className=(el.className+" "+c).trim()},addClass:function(el,classname){if(Array.isArray(el))return void el.forEach(function(each){utils.addClass(each,classname)});for(var array=Array.isArray(classname)?classname:classname.split(utils.whiteSpaceRegex),i=array.length;i--;)utils.hasClass(el,array[i])||utils._addClass(el,array[i])},_removeClass:function(el,c){el.classList?el.classList.remove(c):el.className=el.className.replace(utils.classReg(c)," ").trim()},removeClass:function(el,classname){if(Array.isArray(el))return void el.forEach(function(each){utils.removeClass(each,classname)});for(var array=Array.isArray(classname)?classname:classname.split(utils.whiteSpaceRegex),i=array.length;i--;)utils.hasClass(el,array[i])&&utils._removeClass(el,array[i])},hasClass:function(el,c){return el.classList?el.classList.contains(c):utils.classReg(c).test(el.className)},toggleClass:function(el,c){return Array.isArray(el)?void el.forEach(function(each){utils.toggleClass(each,c)}):void(el.classList?el.classList.toggle(c):utils.hasClass(el,c)?utils._removeClass(el,c):utils._addClass(el,c))},$:function(id){return id="#"===id[0]?id.substr(1,id.length):id,doc.getElementById(id)},isElement:function(obj){return"HTMLElement"in win?!!obj&&obj instanceof HTMLElement:!!obj&&"object"==typeof obj&&1===obj.nodeType&&!!obj.nodeName},getAllChildren:function(node,tag){return[].slice.call(node.getElementsByTagName(tag))},emptyArray:function(array){for(;array.length;)array.pop()},removeAllChildren:function(node){for(;node.firstChild;)node.removeChild(node.firstChild)},removeAll:function(collection){for(var node;node=collection[0];)node.parentNode.removeChild(node)},getChildren:function(node,tag){return[].filter.call(node.childNodes,function(el){return tag?1==el.nodeType&&el.tagName.toLowerCase()==tag:1==el.nodeType})},template:function(html,row){var this_=this;return html.replace(/\{ *([\w_-]+) *\}/g,function(html,key){var value=void 0===row[key]?"":row[key];return this_.htmlEscape(value)})},htmlEscape:function(str){return String(str).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")},mergeOptions:function(obj1,obj2){var obj3={};for(var attrname in obj1)obj3[attrname]=obj1[attrname];for(var attrname in obj2)obj3[attrname]=obj2[attrname];return obj3},createElement:function(node,html){var elem;if(Array.isArray(node)){if(elem=doc.createElement(node[0]),node[1].id&&(elem.id=node[1].id),node[1].classname&&(elem.className=node[1].classname),node[1].attr){var attr=node[1].attr;if(Array.isArray(attr))for(var i=-1;++i0?this.response:void 0;break;case o.PHOTON:e=this.response.features.length>0?s.photonResponse(this.response.features):void 0}if(e){s.createList(e);var t=s.geocoder.getMap().getTargetElement();t.addEventListener("click",{handleEvent:function(e){s.clearResults(!0),t.removeEventListener(e.type,this,!1)}},!1)}},error:function(){r.removeClass(n,"ol-geocoder-loading");var e=r.createElement("li","Error! No internet connection?
");s.els.result_container.appendChild(e)}})},createList:function(e){var t=this,s=this.els.result_container;e.forEach(function(e){var n=t.addressTemplate(e),o=''+n+"",a=r.createElement("li",o);a.addEventListener("click",function(r){r.preventDefault(),t.chosen(e,n)},!1),s.appendChild(a)})},addressTemplate:function(e){var t=e.address,s=[];return t.name&&s.push('{name}'),(t.road||t.building)&&s.push('{building} {road} {house_number}'),(t.city||t.town||t.village)&&s.push('{postcode} {city} {town} {village}'),(t.state||t.country)&&s.push('{state} {country}'),r.template(s.join("
"),t)},chosen:function(e,t){this.options.keepOpen===!1&&this.clearResults(!0);var s=this.geocoder.getMap(),n=r.to3857([e.lon,e.lat]),o=2.388657133911758,a=500,i={coord:n,address:t},l=ol.animation.pan({duration:a,source:s.getView().getCenter()}),c=ol.animation.zoom({duration:a,resolution:s.getView().getResolution()});s.beforeRender(l,c),s.getView().setCenter(n),s.getView().setResolution(o),this.createFeature(i)},createFeature:function(t){var r=new ol.Feature({address:t.address,geometry:new ol.geom.Point(t.coord)}),s=this.featureId(),n=this.options.featureStyle||e.Nominatim.featureStyle;this.addLayer(),r.setStyle(n),r.setId(s),this.getSource().addFeature(r),this.geocoder.set("geocoder",s)},featureId:function(){return"geocoder-"+ ++this.feature_increment},photonResponse:function(e){var t=e.map(function(e){var t={lon:e.geometry.coordinates[0],lat:e.geometry.coordinates[1],address:{name:e.properties.name,city:e.properties.city,state:e.properties.state,country:e.properties.country}};return t});return t},getSource:function(){return this.layer.getSource()},addLayer:function(){var e,t=this,r=this.geocoder.getMap();r.getLayers().forEach(function(r){e=r===t.layer?!0:!1}),e===!1&&r.addLayer(this.layer)},getProvider:function(t){var r=e.Nominatim.providers[t.provider],s=e.Nominatim.providers.names,n=["de","it","fr","en"];return r.params.q=t.query,r.params.limit=t.limit||r.params.limit,t.provider==s.MAPQUEST&&(r.params.key=t.key),t.provider==s.PHOTON?(t.lang=t.lang.toLowerCase(),r.params.lang=n.indexOf(t.lang)>-1?t.lang:r.params.lang):r.params["accept-language"]=t.lang||r.params["accept-language"],r}},e.Nominatim.elements={},e.Nominatim.providers={names:{OSM:"osm",MAPQUEST:"mapquest",PHOTON:"photon"},osm:{url:"http://nominatim.openstreetmap.org/search/",params:{format:"json",q:"",addressdetails:1,limit:10,"accept-language":"en-US"}},mapquest:{url:"http://open.mapquestapi.com/nominatim/v1/search.php",params:{key:"",format:"json",q:"",addressdetails:1,limit:10,"accept-language":"en-US"}},photon:{url:"http://photon.komoot.de/api/",params:{q:"",limit:10,lang:"en"}}},e.Nominatim.featureStyle=[new ol.style.Style({image:new ol.style.Icon({scale:.7,anchor:[.5,1],src:"//cdn.rawgit.com/jonataswalker/map-utils/master/images/marker.png"}),zIndex:5}),new ol.style.Style({image:new ol.style.Circle({fill:new ol.style.Fill({color:[235,235,235,1]}),stroke:new ol.style.Stroke({color:[0,0,0,1]}),radius:5}),zIndex:4})],e.Nominatim.html=['','','',"
",''].join("")}(s),function(e,t){var n=function(){var t=!1;if(e.XMLHttpRequest)t=new XMLHttpRequest;else if(e.ActiveXObject)try{t=new ActiveXObject("Msxml2.XMLHTTP")}catch(r){try{t=new ActiveXObject("Microsoft.XMLHTTP")}catch(r){t=!1}}return t};s.Utils={whiteSpaceRegex:/\s+/,json:function(e,t){function r(){200===c.status&&u.ready.call({response:JSON.parse(c.response)})}function s(){u.error.call({response:"Can't xhr on url: "+e})}function o(){}if(t&&"object"==typeof t){var a="",i=encodeURIComponent;for(var l in t)a+="&"+i(l)+"="+i(t[l]);t=a.slice(1),e+=(/\?/.test(e)?"&":"?")+t}var c=n(),u={};return c.open("GET",e,!0),c.setRequestHeader("Accept","application/json"),c.onload=r,c.onerror=s,c.onprogress=o,c.send(null),{when:function(e){u.ready=e.ready,u.error=e.error}}},to3857:function(e){return ol.proj.transform([parseFloat(e[0]),parseFloat(e[1])],"EPSG:4326","EPSG:3857")},to4326:function(e){return ol.proj.transform([parseFloat(e[0]),parseFloat(e[1])],"EPSG:3857","EPSG:4326")},classRegex:function(e){return new RegExp("(^|\\s+)"+e+"(\\s+|$)")},_addClass:function(e,t){e.classList?e.classList.add(t):e.className=(e.className+" "+t).trim()},addClass:function(e,t){if(Array.isArray(e))return void e.forEach(function(e){r.addClass(e,t)});for(var s=Array.isArray(t)?t:t.split(r.whiteSpaceRegex),n=s.length;n--;)r.hasClass(e,s[n])||r._addClass(e,s[n])},_removeClass:function(e,t){e.classList?e.classList.remove(t):e.className=e.className.replace(r.classReg(t)," ").trim()},removeClass:function(e,t){if(Array.isArray(e))return void e.forEach(function(e){r.removeClass(e,t)});for(var s=Array.isArray(t)?t:t.split(r.whiteSpaceRegex),n=s.length;n--;)r.hasClass(e,s[n])&&r._removeClass(e,s[n])},hasClass:function(e,t){return e.classList?e.classList.contains(t):r.classReg(t).test(e.className)},toggleClass:function(e,t){return Array.isArray(e)?void e.forEach(function(e){r.toggleClass(e,t)}):void(e.classList?e.classList.toggle(t):r.hasClass(e,t)?r._removeClass(e,t):r._addClass(e,t))},$:function(e){return e="#"===e[0]?e.substr(1,e.length):e,t.getElementById(e)},isElement:function(t){return"HTMLElement"in e?!!t&&t instanceof HTMLElement:!!t&&"object"==typeof t&&1===t.nodeType&&!!t.nodeName},getAllChildren:function(e,t){return[].slice.call(e.getElementsByTagName(t))},emptyArray:function(e){for(;e.length;)e.pop()},removeAllChildren:function(e){for(;e.firstChild;)e.removeChild(e.firstChild)},removeAll:function(e){for(var t;t=e[0];)t.parentNode.removeChild(t)},getChildren:function(e,t){return[].filter.call(e.childNodes,function(e){return t?1==e.nodeType&&e.tagName.toLowerCase()==t:1==e.nodeType})},template:function(e,t){var r=this;return e.replace(/\{ *([\w_-]+) *\}/g,function(e,s){var n=void 0===t[s]?"":t[s];return r.htmlEscape(n)})},htmlEscape:function(e){return String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")},mergeOptions:function(e,t){var r={};for(var s in e)r[s]=e[s];for(var s in t)r[s]=t[s];return r},createElement:function(e,r){var s;if(Array.isArray(e)){if(s=t.createElement(e[0]),e[1].id&&(s.id=e[1].id),e[1].classname&&(s.className=e[1].classname),e[1].attr){var n=e[1].attr;if(Array.isArray(n))for(var o=-1;++o 0 ? this.response : undefined;
+ case providers_names.OSM:
+ case providers_names.MAPQUEST:
+ response = this.response.length > 0
+ ? this.response
+ : undefined;
break;
- case 'photon':
+ case providers_names.PHOTON:
response = this.response.features.length > 0
- ? this_.photonResponse(this.response.features)
- : undefined;
+ ? this_.photonResponse(this.response.features)
+ : undefined;
break;
}
if(response){
@@ -265,20 +271,30 @@
map.addLayer(this.layer);
}
},
- getProvider: function(key, query, lang, limit){
- var provider = Geocoder.Nominatim.providers[key];
- provider.params.q = query;
- provider.params.limit = limit || provider.params.limit;
+ getProvider: function(options){
+ var
+ provider = Geocoder.Nominatim.providers[options.provider],
+ providers_names = Geocoder.Nominatim.providers.names,
+ langs_photon = ['de', 'it', 'fr', 'en']
+ ;
+ provider.params.q = options.query;
+ provider.params.limit = options.limit || provider.params.limit;
+
+ //defining key
+ if(options.provider == providers_names.MAPQUEST){
+ provider.params.key = options.key;
+ }
- if(key == 'photon'){
- lang = lang.toLowerCase();
- var accepted = ['de', 'it', 'fr', 'en'];
- (accepted.indexOf(lang) > -1)
- ? provider.params.lang = lang
+ //defining language
+ if(options.provider == providers_names.PHOTON){
+ options.lang = options.lang.toLowerCase();
+
+ provider.params.lang = (langs_photon.indexOf(options.lang) > -1)
+ ? options.lang
: provider.params.lang;
} else {
provider.params['accept-language'] =
- lang || provider.params['accept-language'];
+ options.lang || provider.params['accept-language'];
}
return provider;
@@ -287,6 +303,11 @@
Geocoder.Nominatim.elements = {};
Geocoder.Nominatim.providers = {
+ names: {
+ OSM: 'osm',
+ MAPQUEST: 'mapquest',
+ PHOTON: 'photon'
+ },
osm: {
url: 'http://nominatim.openstreetmap.org/search/',
params: {
@@ -300,6 +321,7 @@
mapquest: {
url: 'http://open.mapquestapi.com/nominatim/v1/search.php',
params: {
+ key: '',
format: 'json',
q: '',
addressdetails: 1,
@@ -323,14 +345,16 @@
anchor: [0.5, 1],
src: '//cdn.rawgit.com/jonataswalker/'
+ 'map-utils/master/images/marker.png'
- }), zIndex: 5
+ }),
+ zIndex: 5
}),
new ol.style.Style({
image: new ol.style.Circle({
fill: new ol.style.Fill({ color: [235, 235, 235, 1]}),
stroke: new ol.style.Stroke({ color: [0, 0, 0, 1]}),
radius: 5
- }), zIndex: 4
+ }),
+ zIndex: 4
})
];
Geocoder.Nominatim.html = [
diff --git a/src/wrapper.js b/src/wrapper.js
index a16eddb..ada5454 100644
--- a/src/wrapper.js
+++ b/src/wrapper.js
@@ -3,7 +3,7 @@
this.Geocoder = (function(){
- CODE_HERE
+ {CODE_HERE}
return Geocoder;
})();