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; })();