function umsLeafletMap(elementId, mapData, engine){
this._zoomControl=null;
this._mainLayer=null;
this._mapTypes=null;
this._providers=null;
this._scaleControl=null;
this._provider=false;
this._providerData=null;
umsLeafletMap.superclass.constructor.apply(this, arguments);
}
extendUms(umsLeafletMap, umsBaseMap);
umsLeafletMap.prototype._beforeInit=function (){
this._mapParams.zoom=this._mapParams.zoom ? parseInt(this._mapParams.zoom):10;
if(typeof this._mapParams.zoom_min!=='undefined'){
this._mapParams.minZoom=parseInt(this._mapParams.zoom_min);
}
if(typeof this._mapParams.zoom_max!=='undefined'){
this._mapParams.maxZoom=parseInt(this._mapParams.zoom_max);
}
if(typeof this._mapParams.mouse_wheel_zoom!=='undefined'){
this._mapParams.scrollWheelZoom=parseInt(this._mapParams.mouse_wheel_zoom);
}
if(typeof this._mapParams.draggable!=='undefined'){
var isMobile=navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(android)|(webOS)/i) ? true:false;
switch (this._mapParams.draggable){
case 'enable':
this._mapParams.dragging=1;
break;
case 'disable':
this._mapParams.dragging=0;
break;
case 'desktop':
if(!isMobile){
this._mapParams.dragging=1;
}else{
this._mapParams.dragging=0;
}
break;
case 'mobile':
if(isMobile){
this._mapParams.dragging=1;
}else{
this._mapParams.dragging=0;
}
break;
}}
if(typeof this._mapParams.dbl_click_zoom!=='undefined'){
this._mapParams.doubleClickZoom=parseInt(this._mapParams.dbl_click_zoom);
}
this._mapParams.zoomControl=false;
umsLeafletMap.superclass._beforeInit.apply(this, arguments);
};
umsLeafletMap.prototype._createMapObj=function (){
var centerCoords=this._getCreateCoords(),
params=jQuery.extend(this._mapParams, {
center: [centerCoords.coord_x, centerCoords.coord_y],
});
this._mapObj=L.map(this._clearElementId, params);
this._provider=this._getProviderEngine();
this._mainLayer=this._createMainLayer();
};
umsLeafletMap.prototype._createMainLayer=function (provider){
var typeUrl='';
this._providerData=this._getProviderData(this._provider);
if(this._providerData){
typeUrl=this._providerData.url;
}else if(typeof this._mapParams.map_type!=='undefined'&&this._mapTypeExists(this._mapParams.map_type)){
typeUrl=this._providerData&&this._providerData.typeToUrl ? this._providerData.typeToUrl(this._mapParams.map_type):this._mapParams.map_type;
}else{
typeUrl='https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
}
var props={
attribution: this._getAttributions(typeUrl),
};
if(this._providerData){
if(this._providerData.props){
props=jQuery.extend(props, this._providerData.props);
}
if(this._providerData.prepareProps){
props=this._providerData.prepareProps(props);
}}
return L.tileLayer(typeUrl, props).addTo(this._mapObj);
};
umsLeafletMap.prototype._getProviders=function (){
if(!this._providers){
var self=this;
this._providers={
mapbox: {
url: 'https://api.mapbox.com/styles/v1/mapbox/{id}/tiles/256/{z}/{x}/{y}?access_token={accessToken}',
props: { id: 'streets-v11', accessToken: UMS_DATA.mapboxKey },
typeToUrl: function (type){
return str_replace(this.url, '{id}', type);
},
prepareProps: function (props){
if(typeof self._mapParams.map_type!=='undefined'&&self._mapTypeExists(self._mapParams.map_type)){
props.id=self._mapParams.map_type;
}
return props;
},
},
thunderforest: {
url: 'https://tile.thunderforest.com/{id}/{z}/{x}/{y}.png?apikey={apikey}',
props: { id: 'cycle', apikey: UMS_DATA.thunderforestKey },
typeToUrl: function (type){
return str_replace(this.url, '{id}', type);
},
prepareProps: function (props){
if(typeof self._mapParams.map_type!=='undefined'&&self._mapTypeExists(self._mapParams.map_type)){
props.id=self._mapParams.map_type;
}
return props;
},
},
maptiles: {
url: 'https://maptiles.p.rapidapi.com/{id}/map/v1/{z}/{x}/{y}.png?rapidapi-key={apikey}',
props: { id: 'en', apikey: UMS_DATA.rapidapiKey },
typeToUrl: function (type){
return str_replace(this.url, '{id}', type);
},
prepareProps: function (props){
if(typeof self._mapParams.map_type!=='undefined'&&self._mapTypeExists(self._mapParams.map_type)){
props.id=self._mapParams.map_type;
}
return props;
},
},
};}
return this._providers;
};
umsLeafletMap.prototype._getProviderData=function (provider){
this._getProviders();
return this._providers[provider] ? this._providers[provider]:false;
};
umsLeafletMap.prototype._getProviderEngine=function (){
if(this._fullEngine.indexOf('l-')===0){
return this._fullEngine.split('-')[1];
}
return this._fullEngine;
};
umsLeafletMap.prototype._afterInit=function (){
if(typeof this._mapParams.zoom_control!=='undefined'&&this._mapParams.zoom_control!=='none'){
this.enbZoom(true);
}
umsLeafletMap.superclass._afterInit.apply(this, arguments);
};
umsLeafletMap.prototype.addEventListener=function (event, clb){
if(event==='zoom_changed'){
event='zoomend';
}
this._mapObj.addEventListener(event, clb);
};
umsLeafletMap.prototype.enbZoom=function (mode){
var self=this;
var removeCtrl=function (ctrl){
switch (ctrl){
case 'zoom':
if(self._zoomControl){
self._zoomControl.remove();
self._zoomControl=null;
}
break;
case 'scale':
if(self._scaleControl){
self._scaleControl.remove();
self._scaleControl=null;
}
break;
}};
if(mode){
var mode=typeof this._mapParams.navigation_bar_mode!=='undefined' ? this._mapParams.navigation_bar_mode:'full';
if(toeInArrayUms(mode, ['full', 'zoom_only'])&&!this._zoomControl){
this._zoomControl=new L.control.zoom();
this._mapObj.addControl(this._zoomControl);
if(mode!=='full'){
removeCtrl('scale');
}}
if(toeInArrayUms(mode, ['full', 'scale_only'])&&!this._scaleControl){
this._scaleControl=new L.control.scale();
this._mapObj.addControl(this._scaleControl);
if(mode!=='full'){
removeCtrl('zoom');
}}
}else{
removeCtrl('zoom');
removeCtrl('scale');
}};
umsLeafletMap.prototype.enbDraggable=function (mode){
var isMobile=navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(android)|(webOS)/i) ? true:false;
switch (mode){
case 'enable':
this._mapObj.dragging.enable();
break;
case 'disable':
this._mapObj.dragging.disable();
break;
case 'desktop':
if(!isMobile){
this._mapObj.dragging.enable();
}else{
this._mapObj.dragging.disable();
}
break;
case 'mobile':
if(isMobile){
this._mapObj.dragging.enable();
}else{
this._mapObj.dragging.disable();
}
break;
}};
umsLeafletMap.prototype.setCenter=function (lat, lng){
this._mapObj.panTo([lat, lng]);
};
umsLeafletMap.prototype.getCenter=function (){
var center=this._mapObj.getCenter();
return { lat: center.lat, lng: center.lng };};
umsLeafletMap.prototype.setZoom=function (zoomLevel){
this._mapObj.setZoom(zoomLevel);
};
umsLeafletMap.prototype.getZoom=function (){
return this._mapObj.getZoom();
};
umsLeafletMap.prototype.setNavigationBarMode=function (mode){
if(typeof this._mapParams.zoom_control!=='undefined'&&this._mapParams.zoom_control!=='none'){
this._mapParams.navigation_bar_mode=mode;
this.enbZoom(false);
this.enbZoom(true);
}};
umsLeafletMap.prototype.enbWheelZoom=function (mode){
mode ? this._mapObj.scrollWheelZoom.enable():this._mapObj.scrollWheelZoom.disable();
};
umsLeafletMap.prototype.getNavigationBarMode=function (){
this._methodRedefineNotice('umsLeafletMap.prototype.getNavigationBarMode');
};
umsLeafletMap.prototype.setMapType=function (mapType){
if(this._providerData&&this._providerData.typeToUrl){
this._mainLayer.setUrl(this._providerData.typeToUrl(mapType));
}else{
this._mainLayer.setUrl(mapType);
}};
umsLeafletMap.prototype.geocodeQuery=function (search, clb, errorClb){
jQuery.ajax({
url: 'https://nominatim.openstreetmap.org/?q=' + search + '&format=json',
dataType: 'text',
success: function (data){
if(clb){
if(data){
var r=JSON.parse(data);
if(r){
var formattedResult=[];
if(r&&r.length > 0){
for (var i=0; i < r.length; i++){
formattedResult.push({
formatted_address: r[i].display_name,
lat: r[i].lat,
lng: r[i].lon,
});
}
clb(formattedResult);
}
return;
}}
errorClb(data);
return;
} else console.log('So, what should I do next, ha?');
},
});
};
umsLeafletMap.prototype._generateMarkerInfoWndStyle=function (){
var res=[];
res.push(this._elementId + ' .marker-cluster {background-color: ' + this.getParam('marker_clasterer_border_color') + '; opacity:1;}');
res.push(this._elementId + ' .marker-cluster {color: ' + this.getParam('marker_clasterer_text_color') + ';}');
res.push(this._elementId + ' .marker-cluster div {background-color: ' + this.getParam('marker_clasterer_background_color') + '; opacity:1;}');
if(this.getParam('marker_infownd_width_units')==='px'){
res.push(this._elementId + ' .leaflet-popup-content {width: ' + this.getParam('marker_infownd_width') + 'px;}');
}
if(this.getParam('marker_infownd_height_units')==='px'){
res.push(this._elementId + ' .leaflet-popup-content {height: ' + this.getParam('marker_infownd_height') + 'px;}');
}
res.push(this._elementId + ' .leaflet-popup-content .umsMarkerTitle {color: ' + this.getParam('marker_title_color') + '; font-size: ' + this.getParam('marker_title_size') + 'px}');
res.push(this._elementId + ' .leaflet-popup-content .umsMarkerDesc, ' + this._elementId + ' .leaflet-popup-content .umsMarkerDesc * {font-size: ' + this.getParam('marker_desc_size') + 'px}');
res.push(this._elementId + ' .leaflet-popup .leaflet-popup-content-wrapper, ' + this._elementId + ' .leaflet-popup .leaflet-popup-tip {background-color: ' + this.getParam('marker_infownd_bg_color') + ';}');
return res.join('');
};
umsLeafletMap.prototype._mapTypeExists=function (typeUrl){
this._getMapTypes();
if(typeof this._mapTypes[typeUrl]!=='undefined') return true;
return false;
};
umsLeafletMap.prototype._getMapTypes=function (){
if(!this._mapTypes){
var attr='';
this._mapTypes={};
var typesVarName='umsLeaFletTypes__' + (this._provider ? this._provider:this._fullEngine);
if(this._providerData){
this._mapTypes[this._providerData.url]={
attr: window[typesVarName][Object.keys(window[typesVarName])[0]].attr,
};}
for (var typeName in window[typesVarName]){
if(typeof window[typesVarName][typeName]==='object'){
attr=window[typesVarName][typeName]['attr'];
}
this._mapTypes[typeName]={
attr: attr,
};}}
return this._mapTypes;
};
umsLeafletMap.prototype._getAttributions=function (typeUrl){
this._getMapTypes();
return this._mapTypes[typeUrl].attr;
};
umsLeafletMap.prototype.enableClasterization=function (clasterType, needTrigger){
switch (clasterType){
case 'MarkerClusterer':
this._clearCluster();
this._createCluster();
this._addMarkersToCluster();
this._mapObj.addLayer(this._clasterer);
break;
}
this._clastererEnabled=true;
};
umsLeafletMap.prototype._addMarkersToCluster=function (){
if(this._markers.length > 0){
for (var i=0; i < this._markers.length; i++){
this._clasterer.addLayer(this._markers[i].getRawMarkerInstance());
this._markers[i].removeFromMap();
}}
};
umsLeafletMap.prototype.disableClasterization=function (){
this._clearCluster();
if(this._markers.length > 0){
for (var i=0; i < this._markers.length; i++){
this._markers[i].addToMap();
}}
this._clastererEnabled=false;
};
umsLeafletMap.prototype._clearCluster=function (){
if(this._clasterer){
this._clasterer.remove();
this._clasterer=null;
}};
umsLeafletMap.prototype._createCluster=function (){
if(!this._clasterer){
var clasterGridSize=parseInt(this.getParam('marker_clasterer_grid_size'));
if(!clasterGridSize) clasterGridSize=60;
var opts={
maxClusterRadius: clasterGridSize,
};
this._clasterer=new L.MarkerClusterGroup(opts);
}};
umsLeafletMap.prototype._refreshCluster=function (){
this._clearCluster();
this._createCluster();
this._addMarkersToCluster();
this._mapObj.addLayer(this._clasterer);
};
umsLeafletMap.prototype.setClusterSize=function (size){
this.setParam('marker_clasterer_grid_size', size);
this._refreshCluster();
};
umsLeafletMap.prototype._setMinZoomLevel=function (){
umsLeafletMap.superclass._setMinZoomLevel.apply(this, arguments);
var minZoom=parseInt(this._mapParams.zoom_min) ? parseInt(this._mapParams.zoom_min):null;
this._mapObj.setMinZoom(minZoom);
};
umsLeafletMap.prototype._setMaxZoomLevel=function (){
umsLeafletMap.superclass._setMaxZoomLevel.apply(this, arguments);
var maxZoom=parseInt(this._mapParams.zoom_max) ? parseInt(this._mapParams.zoom_max):null;
this._mapObj.setMaxZoom(maxZoom);
};
function umsLeafletMapsLoadComplete(){
g_umsMapLoadObserver.setLoaded('leaflet');
}
umsLeafletMapsLoadComplete();