MapPress Easy Google Maps - Version 2.52.1

Version Description

  • Fixed: ajax error when opening map for edit
Download this release

Release Info

Developer chrisvrichardson
Plugin Icon 128x128 MapPress Easy Google Maps
Version 2.52.1
Comparing to
See all releases

Code changes from version 2.50.11 to 2.52.1

forms/media.php CHANGED
@@ -9,7 +9,8 @@
9
<option value='post'><?php _e('This post', 'mappress-google-maps-for-wordpress');?></option>
10
<option value='all'><?php _e('All posts', 'mappress-google-maps-for-wordpress');?></option>
11
</select>
12
- <input type='text' size="15" class='mapp-media-search' placeholder='<?php _e('Search post title', 'mappress-google-maps-for-wordpress');?>'>
13
</div>
14
<div class='mapp-list mapp-media-list'></div>
15
</div>
@@ -55,8 +56,8 @@
55
56
<script type='text/template' id='mapp-tmpl-media-list'>
57
<div class='mapp-items'>
58
- <# _.forEach(list.items, function(item, i) { #>
59
- <div class='mapp-item' data-mapp-media='edit' data-mapp-mapid='{{ item.mapid }}'>
60
61
<# if (type == 'all') { #>
62
<# if (item.post_title) { #>{{ item.post_title }}<# } else { #><?php _e('Untitled', 'mappress-google-maps-for-wordpress');?><# } #>
@@ -66,21 +67,18 @@
66
<# if (item.map_title) { #>{{ item.map_title }}<# } else { #><?php _e('Untitled', 'mappress-google-maps-for-wordpress');?><# } #>
67
68
<div class='mapp-actions'>
69
- <a href='#' data-mapp-media='edit'><?php _e('Edit', 'mappress-google-maps-for-wordpress');?></a> |&nbsp;
70
- <a href='#' data-mapp-media='insert'><?php _e('Insert into post', 'mappress-google-maps-for-wordpress');?></a> |&nbsp;
71
- <a href='#' data-mapp-media='remove'><?php _e('Delete', 'mappress-google-maps-for-wordpress');?></a>
72
</div>
73
</div>
74
<# }); #>
75
</div>
76
<div class='mapp-list-footer'>
77
- <# if (list.items.length == 0) { #>
78
<?php _e('No maps found', 'mappress-google-maps-for-wordpress');?>
79
<# } #>
80
- <# if (list.page < list.pages) { #>
81
- <input type='button' class='button' data-mapp-media='more' value='<?php _e('Load More', 'mappress-google-maps-for-wordpress');?>'>
82
- <span class='spinner'></span>
83
- <# } #>
84
</div>
85
</div>
86
</script>
9
<option value='post'><?php _e('This post', 'mappress-google-maps-for-wordpress');?></option>
10
<option value='all'><?php _e('All posts', 'mappress-google-maps-for-wordpress');?></option>
11
</select>
12
+ <input type='text' size="15" class='mapp-media-search' placeholder='<?php _e('Filter by title', 'mappress-google-maps-for-wordpress');?>'>
13
+ <span class='spinner'></span>
14
</div>
15
<div class='mapp-list mapp-media-list'></div>
16
</div>
56
57
<script type='text/template' id='mapp-tmpl-media-list'>
58
<div class='mapp-items'>
59
+ <# _.forEach(items, function(item, i) { #>
60
+ <div class='mapp-item' data-mapp-media-list='edit' data-mapp-mapid='{{ item.mapid }}'>
61
62
<# if (type == 'all') { #>
63
<# if (item.post_title) { #>{{ item.post_title }}<# } else { #><?php _e('Untitled', 'mappress-google-maps-for-wordpress');?><# } #>
67
<# if (item.map_title) { #>{{ item.map_title }}<# } else { #><?php _e('Untitled', 'mappress-google-maps-for-wordpress');?><# } #>
68
69
<div class='mapp-actions'>
70
+ <a href='#' data-mapp-media-list='edit'><?php _e('Edit', 'mappress-google-maps-for-wordpress');?></a> |&nbsp;
71
+ <a href='#' data-mapp-media-list='insert'><?php _e('Insert into post', 'mappress-google-maps-for-wordpress');?></a> |&nbsp;
72
+ <a href='#' data-mapp-media-list='remove'><?php _e('Delete', 'mappress-google-maps-for-wordpress');?></a>
73
</div>
74
</div>
75
<# }); #>
76
</div>
77
<div class='mapp-list-footer'>
78
+ <# if (items.length == 0) { #>
79
<?php _e('No maps found', 'mappress-google-maps-for-wordpress');?>
80
<# } #>
81
+ {{{more}}}
82
</div>
83
</div>
84
</script>
js/mappress.min.js CHANGED
@@ -1 +1 @@
1
- var mapp=window.mapp||{};+function(n){mapp.Map=function(n,t){this.defaults={center:null,editable:null,height:null,initialOpenDirections:null,initialOpenInfo:null,layers:null,mapid:null,mapTypeId:null,metaKey:null,mapOpts:null,name:null,pois:null,postid:null,query:null,sel:null,title:null,width:null,zoom:null};this.highlight=null;this.iw=null;this.places=null;this.poi=null;this.settings=t?t:{};this.templates=null;this.dir_=null;this.div={};this.layers_={};this.map_=null;this.pois_=[];this.xhr_;this.zindex_=0;_.extend(this,this.defaults,n,this.settings)};mapp.Map.prototype={display:function(){var t=this,i;if(this.div.layout=this.sel?n(".mapp-layout",this.sel):n("#"+this.name+"-layout"),n.each(["canvas","controls","dialog","directions","filters","iw","list","menu","search"],function(i,r){t.div[r]=n(".mapp-"+r,t.div.layout)}),this.sanity()===!0){this.templates=this.editable?{loop:"edit-loop",item:"edit-item",popup:"edit-popup"}:this.query?{loop:"map-loop",item:"mashup-item",popup:"mashup-popup"}:{loop:"map-loop",item:"map-item",popup:"map-popup"};mappl10n.options.engine=="leaflet"?(i=_.extend({attribution:'Map data © <a href="https://openstreetmap.org">OpenStreetMap<\/a>',minZoom:0,scrollWheelZoom:!1,worldCopyJump:!0,zoomControl:null},this.mapOpts),i.minZoom=isNaN(parseInt(i.minZoom))?0:parseInt(i.minZoom),this.map_=new L.Map(this.div.canvas.get(0),i),L.control.zoom({position:"bottomright",zoomInTitle:"",zoomOutTitle:""}).addTo(this.map_),this.iw=L.popup(),this.iw.setContent(this.div.iw.get(0))):(this.map_=new google.maps.Map(this.div.canvas.get(0),{mapTypeId:"roadmap",zoom:1}),i=_.extend({backgroundColor:"transparent",clickableIcons:!1,fullscreenControl:!1,keyboardShortcuts:!1,mapTypeControl:!0,mapTypeControlOptions:{position:google.maps.ControlPosition.TOP_RIGHT,style:google.maps.MapTypeControlStyle.DROPDOWN_MENU},minZoom:0,scaleControl:!0,scrollwheel:!1,streetViewControl:!this.editable&&!this.query},this.mapOpts),i.minZoom=isNaN(parseInt(i.minZoom))?0:parseInt(i.minZoom),this.map_.setOptions(i),this.iw=mappl10n.options.iwType=="ib"||this.editable?new mapp.InfoBox(this):new google.maps.InfoWindow,this.iw.setContent(this.div.iw.get(0)),this.addLayers());this.addStyles();this.addControls();this.addMenu();this.setMapTypeId(this.mapTypeId,!0);this.places=new mapp.Places(n(".mapp-places",this.div.search),{map:t});n(this.places).on("search.mapp",function(n,i){t.search(i)});this.addEvents("click drag",function(){t.close()});this.toggleView("mini",this.div.layout.width()<mappl10n.options.mini);this.div.layout.on("click","[data-mapp-action]",function(i){var r=n(this).attr("data-mapp-action");i.preventDefault();t.action(r,n(this).attr("data-mapp-"+r),n(this))});this.div.filters.on("change",function(){t.ajaxQuery()});n(window).resize(function(){t.resize()});this.places.parse(this.center,function(n){t.center=n&&n.geometry&&n.geometry.location?{lat:n.geometry.location.lat,lng:n.geometry.location.lng}:null;t.query?t.ajaxQuery(function(){t.initCenter()}):(t.setPois(t.pois),t.initCenter())})}},initCenter:function(){var n=this;this.recenter();this.renderList();this.query&&mappl10n.options.search&&!this.editable&&this.addSearchMove();mappl10n.options.engine=="leaflet"?this.initOpen():mapp.event.addListenerOnce(n.map_,"idle",function(){n.initOpen()})},initOpen:function(){var n=this.pois_.length?this.pois_[0]:null;this.initialOpenDirections?this.openDirections(null,n):n&&this.initialOpenInfo&&n.open()},search:function(n){var i,t,f,u,r;n&&n.geometry&&(i=n.geometry.location?n.geometry.location:null,t=n.geometry.viewport?n.geometry.viewport:null,mappl10n.options.engine=="leaflet"?(f=new L.LatLng(i.lat,i.lng),r=f.toBounds(mappl10n.options.radius*1e3)):(u=new google.maps.Circle({center:i,radius:mappl10n.options.radius*1e3}),r=t?new google.maps.LatLngBounds(new google.maps.LatLng(t.sw.lat,t.sw.lng),new google.maps.LatLng(t.ne.lat,t.ne.lng)).union(u.getBounds()):u.getBounds()),this.fitBounds(r),this.setView(i))},load:function(n){_.extend(this,this.defaults,n,this.settings);this.setMapTypeId(this.mapTypeId,!0);this.setPois(this.pois);this.recenter()},action:function(t,i,r){var f=this,u;switch(t){case"center":this.toggleView("menu",!1);this.close();this.recenter();break;case"dir":this.openDirections(null,this.poi);break;case"dir-from":this.openDirections(this.poi,null);break;case"filters-reset":this.div.filters.find(":input").each(function(){this.type=="checkbox"||this.type=="radio"?n(this).prop("checked",!1):n(this).val("")});this.ajaxQuery();break;case"filters-toggle":this.toggleView("filters");break;case"geolocate":this.places.geolocate(function(n){f.search(n)});break;case"layer":this.toggleLayer(i);this.toggleView("menu",!1);break;case"menu-toggle":this.toggleView("menu");break;case"open":u=r.attr("data-mapp-poi");this.open(this.pois_[u]);break;case"show":this.div.layout.show();this.resize();this.initCenter();break;case"view-map":this.toggleView("list",!1);break;case"view-list":this.toggleView("list",!0);break;default:return!0}},dialog:function(n,t){var i=this;n?(this.div.dialog.html(n),this.div.dialog.show(),t&&(clearTimeout(this.dialog.fade),this.dialog.fade=setTimeout(function(){i.dialog(null)},4e3))):this.div.dialog.hide()},addEvents:function(n,t){n=n.split(" ");for(var i=0;i<n.length;i++)mapp.event.addListener(this.map_,n[i],t)},close:function(){mappl10n.options.engine=="leaflet"?this.map_.closePopup():this.iw.close();this.select(null);n(this).triggerHandler("mapp.close")},openDirections:function(n,t){var i=n?n.getAddress():"",r=t?t.getAddress():"";this.dir_||(this.dir_=new mapp.Directions(this.div.directions,this));this.dir_.open(i,r)},sanity:function(){if(!this.div.canvas.length)return mapp.lib.log("MapPress: Missing map name or container for map: "+this.name);if(mappl10n.options.autoupdate==="tc")return mapp.lib.log("Maps API missing (800001)");if(typeof _=="undefined")return mapp.lib.alert("ERROR: underscore.js not loaded. Check cacheing / optimizing plugins.");if(mappl10n.options.engine=="leaflet"){if(typeof L=="undefined")return mapp.lib.alert("ERROR: Unable to load Leaflet")}else{if(typeof google=="undefined")return mapp.lib.alert("ERROR: Google Maps API not loaded");n(document).ready(function(){n('script[src*="https://maps.googleapis.com/maps/api/js?v=3"]').length>1&&mapp.lib.alert("ERROR: Google Maps API key loaded multiple times, please see MapPress FAQ.")})}return!0},select:function(t){if(n("[data-mapp-poi]",this.div.list).removeClass("mapp-selected"),t){var r=n.inArray(t,this.pois_),i=n('[data-mapp-poi="'+r+'"]',this.div.list);i.addClass("mapp-selected");mapp.lib.scrollTo(this.div.list,i);t.setZIndex(++this.zindex_)}this.poi=t},setHighlight:function(n){this.highlight&&(mappl10n.options.engine=="leaflet"?this.highlight.remove():this.highlight.setMap(null));n&&(mappl10n.options.engine=="leaflet"?this.highlight=new L.Marker(n.getPosition()).addTo(this.map_):(this.highlight=new google.maps.Marker({position:n.getPosition()}),this.highlight.setMap(this.map_)))},getMap:function(){return this.map_},renderList:function(){var i=this.getBounds(),r=0,u=this,t;if(!this.editable)for(t=0;t<this.pois_.length;t++)this.pois_[t].visible=this.pois_[t].type!="kml",this.query&&i&&!i.contains(this.pois_[t].getPosition())&&(this.pois_[t].visible=!1),r+=this.pois_[t].visible;this.div.list.html(mapp.lib.template(this.templates.loop,{map:this,pois:this.pois_,count:r}));this.editable&&n(".mapp-items",u.sel).sortable({axis:"y",cursor:"move",delay:200,update:function(){u.sortPois(n(this).sortable("toArray",{attribute:"data-mapp-poi"}))}})},getPois:function(){return this.pois_},insertPoi:function(n){var t=this;this.pois_.unshift(n);n.setMap(this);t.renderList();this.select(n)},removePoi:function(t){var r=this,i=n.inArray(t,this.pois_);i!=-1&&(this.pois_[i].setMap(null),this.pois_.splice(i,1),r.renderList())},resetPois:function(){for(i=0;i<this.pois_.length;i++)this.pois_[i].setMap(null);this.pois_=[];this.zindex_=0},setPois:function(n){var t,i;if(this.resetPois(),n){for(t=0;t<n.length;t++)i=new mapp.Poi(n[t]),this.pois_.push(i),i.id=this.pois_.length-1,i.setMap(this),i.setZIndex(this.zindex_+n.length-1-t);this.zindex_+=n.length-1}this.renderList()},sortPois:function(n){for(var r,t=Array(),i=0;i<n.length;i++){if(r=parseInt(n[i]),isNaN(r))return!1;t.push(this.pois_[r])}if(t.length!=this.pois_.length)return!1;this.pois_=t;this.renderList()},open:function(t,i){if(this.close(),this.select(t),mappl10n.options.mashupClick!="poi"&&t.postid&&t.url){window.open(t.url);return}if(this.toggleView("list",!1),this.div.iw.html(t.render("popup")),mappl10n.options.engine=="leaflet")this.iw.setLatLng(t.getPosition()),this.iw.options.offset=t.getAnchorPoint(),this.map_.openPopup(this.iw);else{var r=new google.maps.MVCObject;r.setValues({position:t.getPosition(i),anchorPoint:t.getAnchorPoint(i)});this.iw.open(this.map_,r)}n(this).triggerHandler("mapp.open",t)},renderMenu:function(){var t=this;for(layer in this.layers_)this.layers_[layer].getMap()&&n('[data-mapp-layer="'+layer+'"]',this.div.layout).addClass("mapp-active")},addStyles:function(){var u=this,l,f,r,i;if(mappl10n.options.engine=="leaflet"){if(this.editable){for(l=[],f=L.control.layers(),r=0;r<mappl10n.options.baseLayers.length;r++){var o=mappl10n.options.baseLayers[r],s=mappl10n.options.providers[o.provider],h=n.extend({},s,o);f.addBaseLayer(L.tileLayer(s.url,h),h.label)}mappl10n.options.baseLayers.length>1&&f.addTo(this.map_)}this.map_.on("baselayerchange",function(n){u.mapTypeId=n.layer.options.name})}else{var t=mappl10n.options.styles?mappl10n.options.styles:[],e=mappl10n.options.style,c=["roadmap","satellite","terrain","hybrid"];if(e&&typeof t[e]!="undefined"&&this.map_.setOptions({styles:t[e]}),this.editable){for(i in t)this.map_.mapTypes.set(i,new google.maps.StyledMapType(t[i],{name:i})),c.push(i);this.map_.setOptions({mapTypeControlOptions:{mapTypeIds:c,position:google.maps.ControlPosition.TOP_RIGHT,style:google.maps.MapTypeControlStyle.DROPDOWN_MENU}})}else this.mapTypeId&&typeof t[this.mapTypeId]!="undefined"&&this.map_.setOptions({styles:t[this.mapTypeId]});mapp.event.addListener(this.map_,"maptypeid_changed",function(){u.mapTypeId=u.map_.getMapTypeId()})}},addControls:function(){var n=this;this.div.controls.html(mapp.lib.template("map-controls",{map:this}))},addLayers:function(){var u,i,t,r;for(this.layers_={traffic:new google.maps.TrafficLayer,bicycling:new google.maps.BicyclingLayer,transit:new google.maps.TransitLayer},u=n.makeArray(this.layers),i=0;i<u.length;i++)t=n.trim(u[i]),r=t.split(".").pop(),this.layers_[t]?this.toggleLayer(t):r=="kml"||r=="kmz"?this.layers_[t]=new google.maps.KmlLayer({map:this.map_,preserveViewport:!0,url:t}):r=="json"&&(this.layers_[t]=new google.maps.Data({map:this.map_}).loadGeoJson(t))},addMenu:function(){var t=this;n("body").on("click",function(i){var r=n(i.target),u=r.attr("data-mapp-action");r==t.div.filters||u=="filters-toggle"||r.closest(t.div.filters).length||t.toggleView("filters",!1);r==t.div.menu||u=="menu-toggle"||r.closest(t.div.menu).length||t.toggleView("menu",!1)})},toggleLayer:function(t,i){var r=this;i=typeof i!="undefined"?i:this.layers_[t].getMap()==null;n.each(["traffic","bicycling","transit"],function(n,t){r.layers_[t].setMap(null)});i&&this.layers_[t].setMap(this.map_)},togglePois:function(n){n=!!n;for(var t=0;t<this.pois_.length;t++)this.pois_[t].setVisible(n)},toggleView:function(n,t){t=typeof t=="undefined"?!this.div.layout.hasClass("mapp-view-"+n):t;this.div.layout.toggleClass("mapp-view-"+n,t);n=="menu"&&t&&this.renderMenu();n=="directions"&&(this.close(),this.resize())},resize:function(){var n=this.getCenter();this.toggleView("mini",this.div.layout.width()<mappl10n.options.mini);mappl10n.options.engine=="leaflet"?this.map_.invalidateSize():mapp.event.trigger(this.map_,"resize");n&&this.setView(n)},recenter:function(){var t=this.center&&this.center.lat&&this.center.lng?this.center:null,n=this.zoom&&parseInt(this.zoom)?parseInt(this.zoom):null,i,r;if(t&&!n&&this.query){this.search({geometry:{location:{lat:t.lat,lng:t.lng}}});return}if(t){this.setView(t,n?n:1);return}if(this.pois_.length==0){this.setView({lat:0,lng:0},n?n:1);return}if(this.pois_.length==1){this.pois_[0].center(n);return}for(bounds=mappl10n.options.engine=="leaflet"?new L.LatLngBounds:new google.maps.LatLngBounds,i=0;i<this.pois_.length;i++)r=this.pois_[i].getBounds(),bounds=r?mappl10n.options.engine=="leaflet"?bounds.extend(r):bounds.union(r):bounds.extend(this.pois_[i].getPosition());n?this.setView(bounds.getCenter().toJSON(),n):this.fitBounds(bounds)},toJSON:function(){var n;for(this.pois=[],n=0;n<this.pois_.length;n++)this.pois.push(this.pois_[n].toJSON());return{center:this.center,height:this.height,mapid:this.mapid,mapTypeId:this.mapTypeId,metaKey:this.metaKey,pois:this.pois,title:this.title,width:this.width,zoom:this.zoom}},ajaxSave:function(n){var t=this,i=JSON.stringify(this),r=!this.mapid||!this.postid?mappl10n.options.postid:this.postid;mapp.lib.ajax({type:"POST",data:{action:"mapp_save",map:i,postid:r},callback:function(i){i.status=="OK"&&(t.mapid=i.data.mapid,n(i.data))}})},fitBounds:function(n,t){var t=mappl10n.options.engine=="leaflet"&&t?{paddingTopLeft:[t.left,t.top],paddingBottomRight:[t.right,t.bottom]}:t;return this.map_.fitBounds(n,t)},getBounds:function(){try{return this.map_.getBounds()}catch(n){return null}},getCenter:function(){try{return this.map_.getCenter()}catch(n){return null}},getMapTypeId:function(n){return mappl10n.options.engine=="leaflet"?"roadmap":this.map_.getMapTypeId(n)},setMapTypeId:function(t){var s=this,i,r,e,u,o,f;if(mappl10n.options.engine=="leaflet")for(this.map_.eachLayer(function(n){s.map_.removeLayer(n)}),t=!this.editable&&mappl10n.options.style&&t=="streets"?mappl10n.options.style:t,t=_.findIndex(mappl10n.options.baseLayers,{name:t})>=0?t:mappl10n.options.baseLayers[0].name,i=0;i<mappl10n.options.baseLayers.length;i++)r=mappl10n.options.baseLayers[i],e=mappl10n.options.providers[r.provider],r.name==t&&(u=n.extend({},e,r),o=L.tileLayer(u.url,u),o.addTo(this.map_));else f=n.inArray(t,["roadmap","satellite","terrain","hybrid"])!=-1,t=this.editable?f||typeof mappl10n.options.styles[t]!="undefined"?t:"roadmap":f?t:"roadmap",this.map_.setMapTypeId(t)},setView:function(n,t,i){mappl10n.options.engine=="leaflet"?(t==null&&(t=this.map_.getZoom()?this.map_.getZoom():0),this.map_.setView(n,t,i)):(n&&this.map_.setCenter(n),t&&this.map_.setZoom(parseInt(t)))}};mapp.Map.ajaxGet=function(n,t,i){mapp.lib.ajax({type:"GET",data:{action:"mapp_get",mapid:n},callback:function(n){if(n.status=="OK"){var r=new mapp.Map(n.data.map,t);i(r)}}})};mapp.Map.ajaxDelete=function(n,t){mapp.lib.ajax({type:"POST",data:{action:"mapp_delete",mapid:n},callback:function(n){n.status=="OK"&&t&&t()}})}}(jQuery);mapp=window.mapp||{};+function(n){mapp.Directions=function(t,i){this.sel=n(t);this.map=i;this.directionsRenderer=null;this.directionsService=null;this.placesService=null;var r=this;this.sel.on("keydown",function(n){n.which==13?(r.getDirections(),n.preventDefault()):n.which==27&&r.close()});this.sel.on("click","[data-mapp-action]",function(t){var i=n(this).attr("data-mapp-action"),u=n(".mapp-dir-daddr",r.sel).val(),f=n(".mapp-dir-saddr",r.sel).val();t.preventDefault();switch(i){case"dir-cancel":r.close();break;case"dir-get":r.getDirections();break;case"dir-myloc":r.map.places.geolocate(function(t){n(".mapp-dir-saddr",r.sel).val(t.name);r.getDirections()});break;case"dir-swap":n(".mapp-dir-saddr",r.sel).val(u);n(".mapp-dir-daddr",r.sel).val(f);r.getDirections()}});this.open=function(t,i){if(mappl10n.options.directions=="google"){this.openGoogle(t,i);return}this.map.toggleView("directions",!0);n(".mapp-dir-addr",this.sel).removeClass("mapp-error");n(".mapp-dir-saddr",this.sel).val(t);n(".mapp-dir-daddr",this.sel).val(i);n(".mapp-dir-get",this.sel).focus();n(".mapp-dir-saddr",this.sel).focus()};this.close=function(){this.map.toggleView("directions",!1);this.directionsRenderer&&(this.directionsRenderer.setPanel(null),this.directionsRenderer.getMap()&&(this.directionsRenderer.setMap(null),this.map.togglePois(!0)))};this.getDirections=function(){this.map.close();this.openGoogle(n(".mapp-dir-saddr",this.sel).val(),n(".mapp-dir-daddr",this.sel).val());return};this.openGoogle=function(n,t){var i=mappl10n.options.directionsServer;i.toLowerCase().indexOf("http")==-1&&(i="https://"+i);i+="?saddr="+encodeURIComponent(n);i+="&daddr="+encodeURIComponent(t);window.open(i)}}}(jQuery);mapp=window.mapp||{};mapp.geocoders={};+function(){mapp.geocoders.Algolia=function(n){this.map=n;this.places=algoliasearch.initPlaces()};mapp.geocoders.Algolia.prototype={geocode:function(n,t){var i=this;this.getPredictions(n,function(i){i&&i.hits.length?t({formatted_address:i.hits[0].locale_names[0],name:n,geometry:{location:{lat:i.hits[0]._geoloc.lat,lng:i.hits[0]._geoloc.lng}}}):t(null)})},getDetails:function(n,t){t({formatted_address:n.value,name:n.name,geometry:{location:n.latlng}})},getPredictions:function(n,t){this.places.search({query:n,language:mappl10n.options.language},function(n,i){n||!i?t(null):t(i)})}}}(jQuery);+function(n){mapp.geocoders.Google=function(t){this.map=t;this.token=null;this.types=this.map.editable?null:["geocode"];var i=n('<div style="display:none">').appendTo("body");this.placesService=new google.maps.places.PlacesService(i.get(0));this.autocompleteService=new google.maps.places.AutocompleteService;i.remove()};mapp.geocoders.Google.prototype={geocode:function(t,i){var r=this;this.getPredictions(t,function(t){t&&n.isArray(t)?r.getDetails(t[0],function(n){i(n)}):i(null)})},getDetails:function(n,t){this.token=this.token?this.token:new google.maps.places.AutocompleteSessionToken;this.token=null;var i={placeId:n.place_id,sessionToken:this.token};this.placesService.getDetails(i,function(n,i){if(i=="OK"&&n&&n.geometry){if(n.geometry.location&&(n.geometry.location=n.geometry.location.toJSON()),n.geometry.viewport){var r=n.geometry.viewport.toJSON();n.geometry.viewport={sw:{lat:r.south,lng:r.west},ne:{lat:r.north,lng:r.east}}}t(n)}else t(null)})},getPredictions:function(n,t){var i,r;this.token=this.token?this.token:new google.maps.places.AutocompleteSessionToken;i=this.map.getMap().getBounds();i=i?i:new google.maps.LatLngBounds(new google.maps.LatLng(85,-180),new google.maps.LatLng(-85,180));r={input:n,bounds:i,sessionToken:this.token,types:this.types};this.autocompleteService.getPlacePredictions(r,function(n,i){i=="OK"&&n&&n.length?t(n):(i==google.maps.places.PlacesServiceStatus.REQUEST_DENIED?alert("Google Maps API Key error: please enable the Places API in the Google Developer Console."):i==google.maps.places.PlacesServiceStatus.OVER_QUERY_LIMIT&&alert("Google Maps API Key has exceeded its query limit"),t(null))})}}}(jQuery);mapp=window.mapp||{};mapp.Icons={};mapp.Icons.get=function(){var n="https://maps.google.com/intl/en_us/mapfiles/ms/micons/red-dot.png";return mappl10n.options.engine=="leaflet"?L.icon({iconUrl:n,iconAnchor:[16,32],iconSize:[32,32],popupAnchor:[0,-32]}):{url:n}};mapp.Icons.getUrl=function(){return"https://maps.google.com/intl/en_us/mapfiles/ms/micons/red-dot.png"};mapp=window.mapp||{};+function(n){mapp.InfoBox=function(t,i){var f=n.extend({border:20},i),u=null,r=null,o,e=this;r=n('<div class="mapp-ib-wrapper" tabindex="0"><div class="mapp-ib" tabindex="0"><\/div><div class="mapp-ib-tip"><\/div><\/div>').appendTo(t.getMap().getDiv());jQuery(window).resize(function(){e.close()});r.on("keydown",function(n){n.which==27&&e.close()});r.on("click",".mapp-close",function(){e.close()});this.getContent=function(){return n(".mapp-ib",r)};this.setContent=function(t){n(".mapp-ib",r).empty().append(t)};this.open=function(n,t){u=t;this.setMap(n)};this.onAdd=function(){o=!1;var t=n(":input",r);r.show();t.length?t.first().focus():r.focus();google.maps.event.trigger(e,"domready")};this.draw=function(){var l=this.getMap(),a=n(".mapp-ib-body",r),s=this.getProjection().fromLatLngToContainerPixel(u.position),t,h,c,i,e;o||(o=!0,t={width:n(":first-child",l.getDiv()).width(),height:n(":first-child",l.getDiv()).height()},r.css({"max-height":"9999px",left:0,bottom:0,top:"auto",right:"auto"}),h=r.outerWidth(!0),c=r.outerHeight(!0),c>t.height+u.anchorPoint.y-2*f.border&&(c=t.height+u.anchorPoint.y-2*f.border,r.css({"max-height":c+2})),i=s.x,e=s.y,i+h/2>t.width&&(i=t.width-h/2),i-h/2<0&&(i=h/2),e-c+u.anchorPoint.y<f.border&&(e=c-u.anchorPoint.y+f.border),e>t.height&&(e=t.height),(s.x-i||s.y-e)&&l.panBy(s.x-i,s.y-e),r.css({left:i-h/2,bottom:t.height-e-u.anchorPoint.y}))};this.close=function(){r.is(":visible")&&(this.setMap(null),google.maps.event.trigger(this,"closed"))};this.onRemove=function(){r.hide()}};mappl10n.options.engine!="leaflet"&&(mapp.InfoBox.prototype=new google.maps.OverlayView)}(jQuery);mapp=window.mapp||{};+function(n){mapp.lib={ajax:function(t){var r=this,u,i;if(n.extend({type:"GET",cache:!1,data:null,spinner:null,callback:n.noop},t),t.cache)for(typeof mapp.lib.ajax.cache=="undefined"&&(mapp.lib.ajax.cache=[]),u=JSON.stringify(t.data),i=0;i<mapp.lib.ajax.cache.length;i++)if(mapp.lib.ajax.cache[i].hash==u){t.callback(mapp.lib.ajax.cache[i].response);return}return t.spinner&&t.spinner.show(),n.ajax({type:t.type,cache:!1,url:mappl10n.options.ajaxurl,data:t.data,success:function(n,i,u){if(t.spinner&&t.spinner.hide(),n.output){r.alert("AJAX Error\r\n"+n.output);return}if(n.status=="OK"){t.cache&&mapp.lib.ajax.cache.push({hash:JSON.stringify(t.data),response:n});t.callback&&t.callback(n,u);return}var f=typeof n=="object"?n.status:n;r.alert("AJAX ERROR\r\nResponse="+f+" TextStatus="+i+"\r\nResponseText="+u.responseText)},error:function(n,i,u){(t.spinner&&t.spinner.hide(),i!="cancel")&&typeof u!="undefined"&&u!=""&&r.alert("AJAX ERROR\r\nTextStatus="+i+"\r\nError="+u+"\r\nResponseText="+n.responseText)}})},alert:function(n){mappl10n.options.admin||mappl10n.options.debug?alert(n):window.console&&console.error(n)},jqVersionCheck:function(t){if(typeof n=="undefined"||typeof t=="undefined")return!1;for(t=t.split("."),v=n.fn.jquery.split("."),i=0;i<t.length;i++){var r=parseInt(t[i]),u=typeof v[i]!="undefined"?parseInt(v[i]):0;if(u!=r)return u>r}return!0},log:function(n){window.console&&console.error(n)},scrollTo:function(n,t){if(n&&t&&n.length&&t.length){var i=n.scrollTop(),u=n.height(),r=i+t.position().top,f=r+t.outerHeight(!0);r<i?n.scrollTop(r):f>i+u&&n.scrollTop(f-u)}},template:function(t,i){if(mapp.lib.templates=mapp.lib.templates?mapp.lib.templates:{},!mapp.lib.templates[t]){var r=mappl10n.options.templates?mappl10n.options.template[t]:n("#mapp-tmpl-"+t).html();if(r)mapp.lib.templates[t]=_.template(r.replace(/[\n\r\t]/g,""),null,{evaluate:/<#([\s\S]+?)#>/g,interpolate:/\{\{\{([\s\S]+?)\}\}\}/g,escape:/\{\{([^\}]+?)\}\}(?!\})/g});else return""}return mapp.lib.templates[t](i)}};mapp.lib.jqVersionCheck("1.7")||mapp.lib.alert("jQuery version is too old: "+n.fn.jquery);n("body").on("tabsactivate tabsshow",function(t,i){var r=i.newPanel?i.newPanel:i.panel;r&&n(".mapp-layout",r).each(function(){var i=n(this).find(".mapp-canvas").attr("id"),t=window[i];t.resize();t.recenter()})})}(jQuery);+function(){mappl10n.options.engine=="leaflet"&&(L.LatLng.prototype.toJSON=function(){return{lat:this.lat,lng:this.lng}},L.LatLngBounds.prototype.toJSON=function(){return{south:this.getSouth(),west:this.getWest(),north:this.getNorth(),east:this.getEast()}},L.LatLng.prototype.toUrlValue=function(){return Math.round(this.lat*1e6)/1e6+", "+Math.round(this.lng*1e6)/1e6});mapp.event={addListener:function(n,t,i){if(mappl10n.options.engine=="leaflet")n.on(t,i);else google.maps.event.addListener(n,t,i)},addListenerOnce:function(n,t,i){if(mappl10n.options.engine=="leaflet")n.once(t,i);else google.maps.event.addListenerOnce(n,t,i)},clearInstanceListeners:function(n){mappl10n.options.engine=="leaflet"?n.off():google.maps.event.clearInstanceListeners(n)},clearListeners:function(n,t){mappl10n.options.engine=="leaflet"?n.off(t):google.maps.event.clearListeners(n,"rightclick")},trigger:function(n,t,i){mappl10n.options.engine=="leaflet"?n.fire(t,i):google.maps.event.trigger(n,t,i)}}}(jQuery);mapp=window.mapp||{};jQuery.fn.AlgoliaAutocomplete=jQuery.fn.autocomplete.noConflict();+function(n){mapp.Places=function(t,i){var r=this;this.sel=n(t);this.opts=n.extend({map:null},i);this.geocoder=mappl10n.options.engine=="leaflet"?new mapp.geocoders.Algolia(this.opts.map):new mapp.geocoders.Google(this.opts.map);this.sel.on("keydown",function(t){if(t.which==13){t.preventDefault();var i=r.parseLatLng(r.sel.val());i&&(n(r).triggerHandler("search.mapp",i),r.sel.AlgoliaAutocomplete("close"),t.stopImmediatePropagation())}});this.autocomplete();this.sel.focus()};mapp.Places.prototype={parse:function(t,i){var f=this,u=t&&t.name?n.trim(t.name):n.trim(t),r;if(!u){i(null);return}if(u=="user"){this.geolocate(function(n){i(n)});return}if(t&&t.geometry){i(t);return}if(r=this.parseLatLng(t),r){i(r);return}this.geocoder.geocode(t,function(n){i(n)})},parseLatLng:function(t){var i,e,r,u,f;return t.lat&&t.lng?i=t:(e=t&&t.name?n.trim(t.name):n.trim(t),r=e.split(","),r.length==2&&(u=parseFloat(r[0]),f=parseFloat(r[1]),isNaN(u)||isNaN(f)||(i={lat:u,lng:f}))),i?{name:i.lat+", "+i.lng,geometry:{location:i}}:null},geolocate:function(n){var t=this;if(!navigator||!navigator.geolocation){alert(mappl10n.no_geolocate);return}navigator.geolocation.getCurrentPosition(function(t){var i={lat:t.coords.latitude,lng:t.coords.longitude};n({name:i.lat+", "+i.lng,geometry:{location:i}})},function(t){var i=t&&t.message?" : "+t.message:"";alert(mappl10n.no_geolocate+i);n(null)},{timeout:15e3,enableHighAccuracy:!0,maximumAge:3e4})},autocomplete:function(){var t=this,r,i,u;this.sel.on("autocomplete:selected",function(i,r){t.geocoder.getDetails(r,function(i){t.parse(i,function(i){i&&n(t).triggerHandler("search.mapp",i)})})});r={empty:'<div class="list-group search-results-dropdown"><div class="list-group-item">'+mappl10n.no_results+"<\/div><\/div>",header:'<div class="list-group search-results-dropdown">'};mappl10n.options.engine=="leaflet"?(i={algoliasearch:algoliasearch,templates:r},mappl10n.options.country&&(i.countries=[mappl10n.options.country]),mappl10n.options.language&&(i.language=mappl10n.options.language),u=placesAutocompleteDataset(i)):u={display:"description",source:function(n,i){t.geocoder.getPredictions(n,function(n){matches=n;i(matches)})},templates:r};this.sel.AlgoliaAutocomplete({autoselect:!0,cssClasses:{prefix:"mapp-aa"},debug:!1,hint:!0,highlight:!0,minLength:1},u)}}}(jQuery);mapp=window.mapp||{};+function(n){mapp.Poi=function(t){var u,f,r,o,i,e,h,s;if(this.defaults={address:null,body:null,iconid:null,kml:null,map:null,overlay:null,postid:null,title:"",url:null,type:null,viewport:null},n.extend(this,this.defaults,t),t&&t.correctedAddress&&(this.address=t.correctedAddress),mappl10n.options.engine=="leaflet"&&this.isPoly()&&(this.type=null),t.viewport&&t.viewport.sw&&t.viewport.ne&&(u=t.viewport.sw,f=t.viewport.ne,this.viewport=mappl10n.options.engine=="leaflet"?new L.LatLngBounds(L.latLng(u.lat,u.lng),L.latLng(f.lat,f.lng)):new google.maps.LatLngBounds(new google.maps.LatLng(u.lat,u.lng),new google.maps.LatLng(f.lat,f.lng))),r=[],o=[],!t.overlay)switch(this.type){case"polygon":if(t.poly&&t.poly.paths)for(i=0;i<t.poly.paths.length;i++){for(r=[],e=0;e<t.poly.paths[i].length;e++)r.push(new google.maps.LatLng(t.poly.paths[i][e].lat,t.poly.paths[i][e].lng));o.push(new google.maps.MVCArray(r))}this.overlay=new google.maps.Polygon({paths:new google.maps.MVCArray(o)});this.setColors(t.poly);break;case"polyline":if(t.poly&&t.poly.path)for(i=0;i<t.poly.path.length;i++)r.push(new google.maps.LatLng(t.poly.path[i].lat,t.poly.path[i].lng));this.overlay=new google.maps.Polyline({path:new google.maps.MVCArray(r)});this.setColors(t.poly);break;case"circle":h=new google.maps.LatLng(t.point.lat,t.point.lng);this.overlay=new google.maps.Circle({center:h,radius:parseFloat(t.poly.radius)});this.setColors(t.poly);break;case"rectangle":this.overlay=new google.maps.Rectangle({bounds:this.viewport});this.setColors(t.poly);break;case"kml":s=t.kml&&t.kml.url?t.kml.url:"";this.overlay=mappl10n.options.engine=="leaflet"?omnivore.kml(s):new google.maps.KmlLayer(s,{preserveViewport:!0,suppressInfoWindows:!0});break;case"":default:this.overlay=mappl10n.options.engine=="leaflet"?L.marker([t.point.lat,t.point.lng]):new google.maps.Marker({position:new google.maps.LatLng(t.point.lat,t.point.lng)})}t.type||this.setIcon(t.iconid)};mapp.Poi.prototype={toJSON:function(){var n={address:this.address,body:this.body,correctedAddress:this.address,iconid:this.iconid,point:null,poly:null,title:this.title,type:this.type,viewport:null},u=this.getPosition(),i,t,r;if(n.point=u.toJSON(),i=this.viewport?this.viewport:this.getBounds(),i&&(t=i.toJSON(),n.viewport={sw:{lat:t.south,lng:t.west},ne:{lat:t.north,lng:t.east}}),this.type=="kml"&&(n.kml=this.kml),this.isPoly()){n.poly=this.getColors();switch(this.type){case"circle":n.poly.radius=this.overlay.getRadius();break;case"polyline":n.poly.path=[];this.overlay.getPath().forEach(function(t){n.poly.path.push(t.toJSON())});break;case"polygon":n.poly.paths=[];this.overlay.getPaths().forEach(function(t){var i=[];t.forEach(function(n){i.push(n.toJSON())});n.poly.paths.push(i)});break;case"rectangle":r=this.overlay.getBounds();n.viewport={sw:r.getSouthWest().toJSON(),ne:r.getNorthEast().toJSON()}}}return n},setMap:function(t){var i=this;if(this.map=t,mapp.event.clearInstanceListeners(this.overlay),t==null){mappl10n.options.engine=="leaflet"?this.overlay.remove():this.overlay.setMap(null);return}this.type=="kml"&&(mappl10n.options.engine=="leaflet"?(mapp.event.addListenerOnce(this.overlay,"ready",function(){i.viewport=i.overlay.getBounds()}),mapp.event.addListenerOnce(this.overlay,"error",function(){alert(mappl10n.kml_error)})):(mapp.event.addListener(this.overlay,"defaultviewport_changed",function(){i.viewport=i.overlay.getDefaultViewport()}),mapp.event.addListener(this.overlay,"status_changed",function(){var n=i.overlay.getStatus();n!="OK"&&mappl10n.ajaxErrors&&alert(mappl10n.kml_error+":"+n)})));mapp.event.addListener(this.overlay,"click",function(n){i.open(n)});this.setTitle(n("<div>").html(this.title).text());this.setEditable(this.map.editable);mappl10n.options.engine=="leaflet"?this.overlay.addTo(t.getMap()):this.overlay.setMap(t.getMap())},setEditable:function(n){var t=this;this.type!="kml"&&(mappl10n.options.engine=="leaflet"?this.overlay.options.draggable=n:this.overlay.setDraggable(n),this.isPoly()&&this.overlay.setEditable(n),mapp.event.clearListeners(this.overlay,"rightclick"),mapp.event.clearListeners(this.overlay,"dragstart"),n&&(mapp.event.addListener(this.overlay,"dragstart",function(){t.viewport=null;t.map.close()}),(this.type=="polygon"||this.type=="polyline")&&mapp.event.addListener(this.overlay,"rightclick",function(n){n.vertex!=null&&t.overlay.getPath().getLength()>2&&t.overlay.getPath().removeAt(n.vertex)})))},setTitle:function(n){this.type||(mappl10n.options.engine=="leaflet"?this.overlay.title=n:this.overlay.setTitle(n))},setZIndex:function(n){mappl10n.options.engine=="leaflet"?this.type||this.overlay.setZIndexOffset(n):this.overlay.set("zIndex",n)},setIcon:function(n){this.type||typeof mapp.Icons=="undefined"||(this.iconid=n,mappl10n.options.engine=="leaflet"?this.overlay.setIcon(mapp.Icons.get(n)):(this.overlay.setIcon(null),this.overlay.setIcon(mapp.Icons.get(n))))},setVisible:function(n){typeof this.overlay.setVisible!="undefined"&&this.overlay.setVisible(n)},setColors:function(n){var i={};for(var t in{strokeColor:"",strokeOpacity:"",strokeWeight:"",fillColor:"",fillOpacity:""})n&&typeof n[t]!="undefined"&&(i[t]=n[t]);this.overlay.setOptions(i)},setTemplateColors:function(n,t,i){var r=this.type=="polyline"?{strokeColor:n,strokeOpacity:t/100,strokeWeight:i}:{fillColor:n,fillOpacity:t/100,strokeColor:n,strokeWeight:i,strokeOpacity:1};this.setColors(r)},getColors:function(){var t={};for(var n in{strokeColor:"",strokeOpacity:"",strokeWeight:"",fillColor:"",fillOpacity:""})typeof this.overlay[n]!="undefined"&&(t[n]=this.overlay[n]);return t},getTemplateColors:function(){var n=this.getColors();return this.type=="polyline"?{color:n.strokeColor,opacity:n.strokeOpacity*100,weight:n.strokeWeight}:{color:n.fillColor,opacity:n.fillOpacity*100,weight:n.strokeWeight}},center:function(n){var t=this.getBounds();if(typeof n=="number"){this.map.setView(this.getPosition(),n);return}if(!t){this.map.setView(this.getPosition(),parseInt(mappl10n.options.poiZoom));return}this.map.fitBounds(t);this.map.setView(this.getPosition(),n)},open:function(n){this.map.open(this,n)},isPoly:function(){return jQuery.inArray(this.type,["polyline","polygon","circle","rectangle"])!=-1},getBounds:function(){var n;switch(this.type){case"polyline":n=new google.maps.LatLngBounds;this.overlay.getPath().forEach(function(t){n.extend(t)});break;case"polygon":n=new google.maps.LatLngBounds;this.overlay.getPaths().forEach(function(t){t.forEach(function(t){n.extend(t)})});break;case"rectangle":case"circle":n=this.overlay.getBounds();break;case"kml":n=mappl10n.options.engine=="leaflet"?this.overlay.getBounds().isValid()?this.overlay.getBounds():null:this.overlay.getDefaultViewport();n=n?n:this.viewport;break;default:return this.viewport}return n},getPosition:function(n){if(!this.type)return mappl10n.options.engine=="leaflet"?this.overlay.getLatLng():this.overlay.getPosition();if(this.type=="kml"&&n&&n.latLng)return n.latLng;var t=this.getBounds();return t?t.getCenter():mappl10n.options.engine=="leaflet"?new L.latLng(0,0):new google.maps.LatLng(0,0)},getAddress:function(){return this.address?this.address:this.type=="kml"?this.kml.url:this.getPosition().toUrlValue()},getAnchorPoint:function(n){var t=this.isPoly()?"poly":this.type;switch(t){case"kml":return mappl10n.options.engine=="leaflet"?[0,0]:n&&n.pixelOffset?new google.maps.Point(n.pixelOffset.width,n.pixelOffset.height):new google.maps.Point(0,0);case"poly":return mappl10n.options.engine=="leaflet"?[0,0]:new google.maps.Point(0,0);default:return mappl10n.options.engine=="leaflet"?this.overlay.options.icon.options.popupAnchor?this.overlay.options.icon.options.popupAnchor:[0,-32]:typeof this.overlay.anchorPoint!="undefined"?this.overlay.anchorPoint:new google.maps.Point(0,-32)}},render:function(n){return this.icon=mapp.Icons.getUrl(this.iconid),mapp.lib.template(this.map.templates[n],{poi:this,colors:this.getTemplateColors()})}}}(jQuery);mapp=window.mapp||{};mapp.widgets={};+function(n){mapp.widgets.Grid=function(t,i){this.el=n(t);this.options=jQuery.extend({action:null,sortable:!1},i);var r=this;this.table=n("table",this.el);this.template=n("script",this.el).html().replace(new RegExp("'","g"),'"');this.el.on("click",function(t){var u=n(t.target),i=u.attr("data-mapp-action");i&&(r[i](t),t.preventDefault())})};mapp.widgets.Grid.prototype={add:function(){this.table.show();var t=n(this.template).appendTo(this.table);n(":input:eq(0)",t).focus()},remove:function(t){var i=n(t.target).closest("tr").remove();n("tbody > tr",this.table).length||this.table.hide()}}}(jQuery);+function(n){mapp.widgets.Popup=function(t,i){var r,u;if(this.activeToggle=null,this.content=t,this.el=null,r=this,this.options=n.extend({max:!1,modal:!1,position:null,toggle:null},i),this.options.modal?this.el=this.content.addClass("mapp-popup-fixed"):(this.el=n('<div class="mapp-popup">'),this.setContent(t)),this.el.attr("tabindex",0),this.options.max&&this.el.addClass("mapp-popup-max"),this.el.hide(),!this.options.modal)n(document).on("click.mapp.popup",function(t){n.contains(r.el.get(0),t.target)||r.el.get(0)==t.target||r.close()});if(this.options.toggle){u=typeof this.options.toggle=="string"?this.options.toggle:this.options.toggle.selector;n(document).on("click",u,function(t){r.activeToggle=n(this);r.open();t.stopPropagation()})}this.el.on("click",".mapp-close",function(){r.close()});this.el.on("keydown",function(n){n.which==27&&r.close()});return this};mapp.widgets.Popup.prototype={close:function(){this.el&&this.el.is(":visible")&&(this.backdrop&&(this.backdrop.remove(),n("body").removeClass("mapp-popup-modal")),this.el.hide(),this.activeToggle&&this.activeToggle.focus(),this.el.trigger("closed.mapp.popup"))},open:function(){var t=this;this.options.modal||this.el.parent().length||this.el.appendTo("body");this.el.show();this.options.modal?(this.backdrop=n('<div class="mapp-popup-backdrop"><\/div>'),this.el.after(this.backdrop),n("body").addClass("mapp-popup-modal")):this.el.position(n.extend({my:"center bottom",at:"center top-5",of:this.activeToggle,collision:"flipfit"},this.options.position));this.el.focus();this.el.trigger("open.mapp.popup")},setContent:function(n){this.el.empty();this.el.append('<span class="mapp-close">').append(n)},toggle:function(){this.el.is(":visible")?this.close():this.open()}}}(jQuery);+function(){mapp.load=function(){if(typeof mapp!="undefined"&&mapp.data)while(mapp.data.length){var n=mapp.data.pop();window[n.name]=new mapp.Map(n);window[n.name].display()}}}(jQuery);typeof mapp.Media!="undefined"?window.mappEditor=new mapp.Media:mapp.load()
1
+ var mapp=window.mapp||{};+function(n){mapp.Map=function(n,t){this.defaults={center:null,editable:null,height:null,initialOpenDirections:null,initialOpenInfo:null,layers:null,mapid:null,mapTypeId:null,metaKey:null,mapOpts:null,name:null,pois:null,postid:null,query:null,sel:null,title:null,width:null,zoom:null};this.highlight=null;this.iw=null;this.places=null;this.poi=null;this.settings=t?t:{};this.templates=null;this.dir_=null;this.div={};this.layers_={};this.map_=null;this.pois_=[];this.xhr_;this.zindex_=0;_.extend(this,this.defaults,n,this.settings)};mapp.Map.prototype={display:function(){var t=this,i;if(this.div.layout=this.sel?n(".mapp-layout",this.sel):n("#"+this.name+"-layout"),n.each(["canvas","controls","dialog","directions","filters","iw","list","menu","search"],function(i,r){t.div[r]=n(".mapp-"+r,t.div.layout)}),this.sanity()===!0){this.templates=this.editable?{loop:"edit-loop",item:"edit-item",popup:"edit-popup"}:this.query?{loop:"map-loop",item:"mashup-item",popup:"mashup-popup"}:{loop:"map-loop",item:"map-item",popup:"map-popup"};mappl10n.options.engine=="leaflet"?(i=_.extend({attribution:'Map data © <a href="https://openstreetmap.org">OpenStreetMap<\/a>',minZoom:0,scrollWheelZoom:!1,worldCopyJump:!0,zoomControl:null},this.mapOpts),i.minZoom=isNaN(parseInt(i.minZoom))?0:parseInt(i.minZoom),this.map_=new L.Map(this.div.canvas.get(0),i),L.control.zoom({position:"bottomright",zoomInTitle:"",zoomOutTitle:""}).addTo(this.map_),this.iw=L.popup(),this.iw.setContent(this.div.iw.get(0))):(this.map_=new google.maps.Map(this.div.canvas.get(0),{mapTypeId:"roadmap",zoom:1}),i=_.extend({backgroundColor:"transparent",clickableIcons:!1,fullscreenControl:!1,keyboardShortcuts:!1,mapTypeControl:!0,mapTypeControlOptions:{position:google.maps.ControlPosition.TOP_RIGHT,style:google.maps.MapTypeControlStyle.DROPDOWN_MENU},minZoom:0,scaleControl:!0,scrollwheel:!1,streetViewControl:!this.editable&&!this.query},this.mapOpts),i.minZoom=isNaN(parseInt(i.minZoom))?0:parseInt(i.minZoom),this.map_.setOptions(i),this.iw=mappl10n.options.iwType=="ib"||this.editable?new mapp.InfoBox(this):new google.maps.InfoWindow,this.iw.setContent(this.div.iw.get(0)),this.addLayers());this.addStyles();this.addControls();this.addMenu();this.setMapTypeId(this.mapTypeId,!0);this.places=new mapp.Places(n(".mapp-places",this.div.search),{map:t});n(this.places).on("search.mapp",function(n,i){t.search(i)});this.addEvents("click drag",function(){t.close()});this.toggleView("mini",this.div.layout.width()<mappl10n.options.mini);this.div.layout.on("click","[data-mapp-action]",function(i){var r=n(this).attr("data-mapp-action");i.preventDefault();t.action(r,n(this).attr("data-mapp-"+r),n(this))});this.div.filters.on("change",function(){t.ajaxQuery()});n(window).resize(function(){t.resize()});this.places.parse(this.center,function(n){t.center=n&&n.geometry&&n.geometry.location?{lat:n.geometry.location.lat,lng:n.geometry.location.lng}:null;t.query?t.ajaxQuery(function(){t.initCenter()}):(t.setPois(t.pois),t.initCenter())})}},initCenter:function(){var n=this;this.recenter();this.renderList();this.query&&mappl10n.options.search&&!this.editable&&this.addSearchMove();mappl10n.options.engine=="leaflet"?this.initOpen():mapp.event.addListenerOnce(n.map_,"idle",function(){n.initOpen()})},initOpen:function(){var n=this.pois_.length?this.pois_[0]:null;this.initialOpenDirections?this.openDirections(null,n):n&&this.initialOpenInfo&&n.open()},search:function(n){var i,t,f,u,r;n&&n.geometry&&(i=n.geometry.location?n.geometry.location:null,t=n.geometry.viewport?n.geometry.viewport:null,mappl10n.options.engine=="leaflet"?(f=new L.LatLng(i.lat,i.lng),r=f.toBounds(mappl10n.options.radius*1e3)):(u=new google.maps.Circle({center:i,radius:mappl10n.options.radius*1e3}),r=t?new google.maps.LatLngBounds(new google.maps.LatLng(t.sw.lat,t.sw.lng),new google.maps.LatLng(t.ne.lat,t.ne.lng)).union(u.getBounds()):u.getBounds()),this.fitBounds(r),this.setView(i))},load:function(n){_.extend(this,this.defaults,n,this.settings);this.setMapTypeId(this.mapTypeId,!0);this.setPois(this.pois);this.recenter()},action:function(t,i,r){var f=this,u;switch(t){case"center":this.toggleView("menu",!1);this.close();this.recenter();break;case"dir":this.openDirections(null,this.poi);break;case"dir-from":this.openDirections(this.poi,null);break;case"filters-reset":this.div.filters.find(":input").each(function(){this.type=="checkbox"||this.type=="radio"?n(this).prop("checked",!1):n(this).val("")});this.ajaxQuery();break;case"filters-toggle":this.toggleView("filters");break;case"geolocate":this.places.geolocate(function(n){f.search(n)});break;case"layer":this.toggleLayer(i);this.toggleView("menu",!1);break;case"menu-toggle":this.toggleView("menu");break;case"open":u=r.attr("data-mapp-poi");this.open(this.pois_[u]);break;case"show":this.div.layout.show();this.resize();this.initCenter();break;case"view-map":this.toggleView("list",!1);break;case"view-list":this.toggleView("list",!0);break;default:return!0}},dialog:function(n,t){var i=this;n?(this.div.dialog.html(n),this.div.dialog.show(),t&&(clearTimeout(this.dialog.fade),this.dialog.fade=setTimeout(function(){i.dialog(null)},4e3))):this.div.dialog.hide()},addEvents:function(n,t){n=n.split(" ");for(var i=0;i<n.length;i++)mapp.event.addListener(this.map_,n[i],t)},close:function(){mappl10n.options.engine=="leaflet"?this.map_.closePopup():this.iw.close();this.select(null);n(this).triggerHandler("mapp.close")},openDirections:function(n,t){var i=n?n.getAddress():"",r=t?t.getAddress():"";this.dir_||(this.dir_=new mapp.Directions(this.div.directions,this));this.dir_.open(i,r)},sanity:function(){if(!this.div.canvas.length)return mapp.lib.log("MapPress: Missing map name or container for map: "+this.name);if(mappl10n.options.autoupdate==="tc")return mapp.lib.log("Maps API missing (800001)");if(typeof _=="undefined")return mapp.lib.alert("ERROR: underscore.js not loaded. Check cacheing / optimizing plugins.");if(mappl10n.options.engine=="leaflet"){if(typeof L=="undefined")return mapp.lib.alert("ERROR: Unable to load Leaflet")}else{if(typeof google=="undefined")return mapp.lib.alert("ERROR: Google Maps API not loaded");n(document).ready(function(){n('script[src*="https://maps.googleapis.com/maps/api/js?v=3"]').length>1&&mapp.lib.alert("ERROR: Google Maps API key loaded multiple times, please see MapPress FAQ.")})}return!0},select:function(t){if(n("[data-mapp-poi]",this.div.list).removeClass("mapp-selected"),t){var r=n.inArray(t,this.pois_),i=n('[data-mapp-poi="'+r+'"]',this.div.list);i.addClass("mapp-selected");mapp.lib.scrollTo(this.div.list,i);t.setZIndex(++this.zindex_)}this.poi=t},setHighlight:function(n){this.highlight&&(mappl10n.options.engine=="leaflet"?this.highlight.remove():this.highlight.setMap(null));n&&(mappl10n.options.engine=="leaflet"?this.highlight=new L.Marker(n.getPosition()).addTo(this.map_):(this.highlight=new google.maps.Marker({position:n.getPosition()}),this.highlight.setMap(this.map_)))},getMap:function(){return this.map_},renderList:function(){var i=this.getBounds(),r=0,u=this,t;if(!this.editable)for(t=0;t<this.pois_.length;t++)this.pois_[t].visible=this.pois_[t].type!="kml",this.query&&i&&!i.contains(this.pois_[t].getPosition())&&(this.pois_[t].visible=!1),r+=this.pois_[t].visible;this.div.list.html(mapp.lib.template(this.templates.loop,{map:this,pois:this.pois_,count:r}));this.editable&&n(".mapp-items",u.sel).sortable({axis:"y",cursor:"move",delay:200,update:function(){u.sortPois(n(this).sortable("toArray",{attribute:"data-mapp-poi"}))}})},getPois:function(){return this.pois_},insertPoi:function(n){var t=this;this.pois_.unshift(n);n.setMap(this);t.renderList();this.select(n)},removePoi:function(t){var r=this,i=n.inArray(t,this.pois_);i!=-1&&(this.pois_[i].setMap(null),this.pois_.splice(i,1),r.renderList())},resetPois:function(){for(i=0;i<this.pois_.length;i++)this.pois_[i].setMap(null);this.pois_=[];this.zindex_=0},setPois:function(n){var t,i;if(this.resetPois(),n){for(t=0;t<n.length;t++)i=new mapp.Poi(n[t]),this.pois_.push(i),i.id=this.pois_.length-1,i.setMap(this),i.setZIndex(this.zindex_+n.length-1-t);this.zindex_+=n.length-1}this.renderList()},sortPois:function(n){for(var r,t=Array(),i=0;i<n.length;i++){if(r=parseInt(n[i]),isNaN(r))return!1;t.push(this.pois_[r])}if(t.length!=this.pois_.length)return!1;this.pois_=t;this.renderList()},open:function(t,i){var r=null,u;if(this.close(),this.select(t),mappl10n.options.mashupClick!="poi"&&t.postid&&t.url){window.open(t.url);return}this.toggleView("list",!1);i&&i.featureData?r=i.featureData:i&&i.propagatedFrom&&i.propagatedFrom.feature&&i.propagatedFrom.feature.properties&&(r=i.propagatedFrom.feature.properties);this.div.iw.html(t.render("popup",r));mappl10n.options.engine=="leaflet"?(this.iw.setLatLng(t.getPosition()),this.iw.options.offset=t.getAnchorPoint(),this.map_.openPopup(this.iw)):(u=new google.maps.MVCObject,u.setValues({position:t.getPosition(i),anchorPoint:t.getAnchorPoint(i)}),this.iw.open(this.map_,u));n(this).triggerHandler("mapp.open",t)},renderMenu:function(){var t=this;for(layer in this.layers_)this.layers_[layer].getMap()&&n('[data-mapp-layer="'+layer+'"]',this.div.layout).addClass("mapp-active")},addStyles:function(){var u=this,l,f,r,i;if(mappl10n.options.engine=="leaflet"){if(this.editable){for(l=[],f=L.control.layers(),r=0;r<mappl10n.options.baseLayers.length;r++){var o=mappl10n.options.baseLayers[r],s=mappl10n.options.providers[o.provider],h=n.extend({},s,o);f.addBaseLayer(L.tileLayer(s.url,h),h.label)}mappl10n.options.baseLayers.length>1&&f.addTo(this.map_)}this.map_.on("baselayerchange",function(n){u.mapTypeId=n.layer.options.name})}else{var t=mappl10n.options.styles?mappl10n.options.styles:[],e=mappl10n.options.style,c=["roadmap","satellite","terrain","hybrid"];if(e&&typeof t[e]!="undefined"&&this.map_.setOptions({styles:t[e]}),this.editable){for(i in t)this.map_.mapTypes.set(i,new google.maps.StyledMapType(t[i],{name:i})),c.push(i);this.map_.setOptions({mapTypeControlOptions:{mapTypeIds:c,position:google.maps.ControlPosition.TOP_RIGHT,style:google.maps.MapTypeControlStyle.DROPDOWN_MENU}})}else this.mapTypeId&&typeof t[this.mapTypeId]!="undefined"&&this.map_.setOptions({styles:t[this.mapTypeId]});mapp.event.addListener(this.map_,"maptypeid_changed",function(){u.mapTypeId=u.map_.getMapTypeId()})}},addControls:function(){var n=this;this.div.controls.html(mapp.lib.template("map-controls",{map:this}))},addLayers:function(){var u,i,t,r;for(this.layers_={traffic:new google.maps.TrafficLayer,bicycling:new google.maps.BicyclingLayer,transit:new google.maps.TransitLayer},u=n.makeArray(this.layers),i=0;i<u.length;i++)t=n.trim(u[i]),r=t.split(".").pop(),this.layers_[t]?this.toggleLayer(t):r=="kml"||r=="kmz"?this.layers_[t]=new google.maps.KmlLayer({map:this.map_,preserveViewport:!0,url:t}):r=="json"&&(this.layers_[t]=new google.maps.Data({map:this.map_}).loadGeoJson(t))},addMenu:function(){var t=this;n("body").on("click",function(i){var r=n(i.target),u=r.attr("data-mapp-action");r==t.div.filters||u=="filters-toggle"||r.closest(t.div.filters).length||t.toggleView("filters",!1);r==t.div.menu||u=="menu-toggle"||r.closest(t.div.menu).length||t.toggleView("menu",!1)})},toggleLayer:function(t,i){var r=this;i=typeof i!="undefined"?i:this.layers_[t].getMap()==null;n.each(["traffic","bicycling","transit"],function(n,t){r.layers_[t].setMap(null)});i&&this.layers_[t].setMap(this.map_)},togglePois:function(n){n=!!n;for(var t=0;t<this.pois_.length;t++)this.pois_[t].setVisible(n)},toggleView:function(n,t){t=typeof t=="undefined"?!this.div.layout.hasClass("mapp-view-"+n):t;this.div.layout.toggleClass("mapp-view-"+n,t);n=="menu"&&t&&this.renderMenu();n=="directions"&&(this.close(),this.resize())},resize:function(){var n=this.getCenter();this.toggleView("mini",this.div.layout.width()<mappl10n.options.mini);mappl10n.options.engine=="leaflet"?this.map_.invalidateSize():mapp.event.trigger(this.map_,"resize");n&&this.setView(n)},recenter:function(){var t=this.center&&this.center.lat&&this.center.lng?this.center:null,n=this.zoom&&parseInt(this.zoom)?parseInt(this.zoom):null,i,r;if(t&&!n&&this.query){this.search({geometry:{location:{lat:t.lat,lng:t.lng}}});return}if(t){this.setView(t,n?n:1);return}if(this.pois_.length==0){this.setView({lat:0,lng:0},n?n:1);return}if(this.pois_.length==1){this.pois_[0].center(n);return}for(bounds=mappl10n.options.engine=="leaflet"?new L.LatLngBounds:new google.maps.LatLngBounds,i=0;i<this.pois_.length;i++)r=this.pois_[i].getBounds(),bounds=r?mappl10n.options.engine=="leaflet"?bounds.extend(r):bounds.union(r):bounds.extend(this.pois_[i].getPosition());n?this.setView(bounds.getCenter().toJSON(),n):this.fitBounds(bounds)},toJSON:function(){var n;for(this.pois=[],n=0;n<this.pois_.length;n++)this.pois.push(this.pois_[n].toJSON());return{center:this.center,height:this.height,mapid:this.mapid,mapTypeId:this.mapTypeId,metaKey:this.metaKey,pois:this.pois,title:this.title,width:this.width,zoom:this.zoom}},ajaxSave:function(n){var t=this,i=JSON.stringify(this),r=!this.mapid||!this.postid?mappl10n.options.postid:this.postid;mapp.lib.ajax({type:"POST",data:{action:"mapp_save",map:i,postid:r},callback:function(i){i.status=="OK"&&(t.mapid||(t.mapid=i.data.mapid),n())}})},fitBounds:function(n,t){var t=mappl10n.options.engine=="leaflet"&&t?{paddingTopLeft:[t.left,t.top],paddingBottomRight:[t.right,t.bottom]}:t;return this.map_.fitBounds(n,t)},getBounds:function(){try{return this.map_.getBounds()}catch(n){return null}},getCenter:function(){try{return this.map_.getCenter()}catch(n){return null}},getMapTypeId:function(n){return mappl10n.options.engine=="leaflet"?"roadmap":this.map_.getMapTypeId(n)},setMapTypeId:function(t){var s=this,i,r,e,u,o,f;if(mappl10n.options.engine=="leaflet")for(this.map_.eachLayer(function(n){s.map_.removeLayer(n)}),t=!this.editable&&mappl10n.options.style&&t=="streets"?mappl10n.options.style:t,t=_.findIndex(mappl10n.options.baseLayers,{name:t})>=0?t:mappl10n.options.baseLayers[0].name,i=0;i<mappl10n.options.baseLayers.length;i++)r=mappl10n.options.baseLayers[i],e=mappl10n.options.providers[r.provider],r.name==t&&(u=n.extend({},e,r),o=L.tileLayer(u.url,u),o.addTo(this.map_));else f=n.inArray(t,["roadmap","satellite","terrain","hybrid"])!=-1,t=this.editable?f||typeof mappl10n.options.styles[t]!="undefined"?t:"roadmap":f?t:"roadmap",this.map_.setMapTypeId(t)},setView:function(n,t,i){mappl10n.options.engine=="leaflet"?(t==null&&(t=this.map_.getZoom()?this.map_.getZoom():0),this.map_.setView(n,t,i)):(n&&this.map_.setCenter(n),t&&this.map_.setZoom(parseInt(t)))}};mapp.Map.ajaxGet=function(n,t,i){mapp.lib.ajax({type:"GET",data:{action:"mapp_get",mapid:n},callback:function(n){if(n.status=="OK"){var r=new mapp.Map(n.data.map,t);i(r)}}})};mapp.Map.ajaxDelete=function(n,t){mapp.lib.ajax({type:"POST",data:{action:"mapp_delete",mapid:n},callback:function(n){n.status=="OK"&&t&&t()}})}}(jQuery);mapp=window.mapp||{};+function(n){mapp.Directions=function(t,i){this.sel=n(t);this.map=i;this.directionsRenderer=null;this.directionsService=null;this.placesService=null;var r=this;this.sel.on("keydown",function(n){n.which==13?(r.getDirections(),n.preventDefault()):n.which==27&&r.close()});this.sel.on("click","[data-mapp-action]",function(t){var i=n(this).attr("data-mapp-action"),u=n(".mapp-dir-daddr",r.sel).val(),f=n(".mapp-dir-saddr",r.sel).val();t.preventDefault();switch(i){case"dir-cancel":r.close();break;case"dir-get":r.getDirections();break;case"dir-myloc":r.map.places.geolocate(function(t){n(".mapp-dir-saddr",r.sel).val(t.name);r.getDirections()});break;case"dir-swap":n(".mapp-dir-saddr",r.sel).val(u);n(".mapp-dir-daddr",r.sel).val(f);r.getDirections()}});this.open=function(t,i){if(mappl10n.options.directions=="google"){this.openGoogle(t,i);return}this.map.toggleView("directions",!0);n(".mapp-dir-addr",this.sel).removeClass("mapp-error");n(".mapp-dir-saddr",this.sel).val(t);n(".mapp-dir-daddr",this.sel).val(i);n(".mapp-dir-get",this.sel).focus();n(".mapp-dir-saddr",this.sel).focus()};this.close=function(){this.map.toggleView("directions",!1);this.directionsRenderer&&(this.directionsRenderer.setPanel(null),this.directionsRenderer.getMap()&&(this.directionsRenderer.setMap(null),this.map.togglePois(!0)))};this.getDirections=function(){this.map.close();this.openGoogle(n(".mapp-dir-saddr",this.sel).val(),n(".mapp-dir-daddr",this.sel).val());return};this.openGoogle=function(n,t){var i=mappl10n.options.directionsServer;i.toLowerCase().indexOf("http")==-1&&(i="https://"+i);i+="?saddr="+encodeURIComponent(n);i+="&daddr="+encodeURIComponent(t);window.open(i)}}}(jQuery);mapp=window.mapp||{};mapp.geocoders={};+function(){mapp.geocoders.Algolia=function(n){this.map=n;this.places=algoliasearch.initPlaces()};mapp.geocoders.Algolia.prototype={geocode:function(n,t){var i=this;this.getPredictions(n,function(i){i&&i.hits.length?t({formatted_address:i.hits[0].locale_names[0],name:n,geometry:{location:{lat:i.hits[0]._geoloc.lat,lng:i.hits[0]._geoloc.lng}}}):t(null)})},getDetails:function(n,t){t({formatted_address:n.value,name:n.name,geometry:{location:n.latlng}})},getPredictions:function(n,t){this.places.search({query:n,language:mappl10n.options.language},function(n,i){n||!i?t(null):t(i)})}}}(jQuery);+function(n){mapp.geocoders.Google=function(t){this.map=t;this.token=null;this.types=this.map.editable?null:["geocode"];var i=n('<div style="display:none">').appendTo("body");this.placesService=new google.maps.places.PlacesService(i.get(0));this.autocompleteService=new google.maps.places.AutocompleteService;i.remove()};mapp.geocoders.Google.prototype={geocode:function(t,i){var r=this;this.getPredictions(t,function(t){t&&n.isArray(t)?r.getDetails(t[0],function(n){i(n)}):i(null)})},getDetails:function(n,t){this.token=this.token?this.token:new google.maps.places.AutocompleteSessionToken;this.token=null;var i={placeId:n.place_id,sessionToken:this.token};this.placesService.getDetails(i,function(n,i){if(i=="OK"&&n&&n.geometry){if(n.geometry.location&&(n.geometry.location=n.geometry.location.toJSON()),n.geometry.viewport){var r=n.geometry.viewport.toJSON();n.geometry.viewport={sw:{lat:r.south,lng:r.west},ne:{lat:r.north,lng:r.east}}}t(n)}else t(null)})},getPredictions:function(n,t){var i,r;this.token=this.token?this.token:new google.maps.places.AutocompleteSessionToken;i=this.map.getMap().getBounds();i=i?i:new google.maps.LatLngBounds(new google.maps.LatLng(85,-180),new google.maps.LatLng(-85,180));r={input:n,bounds:i,sessionToken:this.token,types:this.types};this.autocompleteService.getPlacePredictions(r,function(n,i){i=="OK"&&n&&n.length?t(n):(i==google.maps.places.PlacesServiceStatus.REQUEST_DENIED?alert("Google Maps API Key error: please enable the Places API in the Google Developer Console."):i==google.maps.places.PlacesServiceStatus.OVER_QUERY_LIMIT&&alert("Google Maps API Key has exceeded its query limit"),t(null))})}}}(jQuery);mapp=window.mapp||{};mapp.Icons={};mapp.Icons.get=function(){var n="https://maps.google.com/intl/en_us/mapfiles/ms/micons/red-dot.png";return mappl10n.options.engine=="leaflet"?L.icon({iconUrl:n,iconAnchor:[16,32],iconSize:[32,32],popupAnchor:[0,-32]}):{url:n}};mapp.Icons.getUrl=function(){return"https://maps.google.com/intl/en_us/mapfiles/ms/micons/red-dot.png"};mapp=window.mapp||{};+function(n){mapp.InfoBox=function(t,i){var f=n.extend({border:20},i),u=null,r=null,o,e=this;r=n('<div class="mapp-ib-wrapper" tabindex="0"><div class="mapp-ib" tabindex="0"><\/div><div class="mapp-ib-tip"><\/div><\/div>').appendTo(t.getMap().getDiv());jQuery(window).resize(function(){e.close()});r.on("keydown",function(n){n.which==27&&e.close()});r.on("click",".mapp-close",function(){e.close()});this.getContent=function(){return n(".mapp-ib",r)};this.setContent=function(t){n(".mapp-ib",r).empty().append(t)};this.open=function(n,t){u=t;this.setMap(n)};this.onAdd=function(){o=!1;var t=n(":input",r);r.show();t.length?t.first().focus():r.focus();google.maps.event.trigger(e,"domready")};this.draw=function(){var l=this.getMap(),a=n(".mapp-ib-body",r),s=this.getProjection().fromLatLngToContainerPixel(u.position),t,h,c,i,e;o||(o=!0,t={width:n(":first-child",l.getDiv()).width(),height:n(":first-child",l.getDiv()).height()},r.css({"max-height":"9999px",left:0,bottom:0,top:"auto",right:"auto"}),h=r.outerWidth(!0),c=r.outerHeight(!0),c>t.height+u.anchorPoint.y-2*f.border&&(c=t.height+u.anchorPoint.y-2*f.border,r.css({"max-height":c+2})),i=s.x,e=s.y,i+h/2>t.width&&(i=t.width-h/2),i-h/2<0&&(i=h/2),e-c+u.anchorPoint.y<f.border&&(e=c-u.anchorPoint.y+f.border),e>t.height&&(e=t.height),(s.x-i||s.y-e)&&l.panBy(s.x-i,s.y-e),r.css({left:i-h/2,bottom:t.height-e-u.anchorPoint.y}))};this.close=function(){r.is(":visible")&&(this.setMap(null),google.maps.event.trigger(this,"closed"))};this.onRemove=function(){r.hide()}};mappl10n.options.engine!="leaflet"&&(mapp.InfoBox.prototype=new google.maps.OverlayView)}(jQuery);mapp=window.mapp||{};+function(n){mapp.lib={ajax:function(t){var i=this;return n.extend({type:"GET",data:null,spinner:null,callback:n.noop},t),t.spinner&&t.spinner.show(),n.ajax({type:t.type,url:mappl10n.options.ajaxurl,data:t.data,success:function(n,r,u){if(t.spinner&&t.spinner.hide(),n.output){i.alert("AJAX Error\r\n"+n.output);return}if(n.status!="OK"){var f=typeof n=="object"?n.status:n;i.alert("AJAX ERROR\r\nResponse="+f+" TextStatus="+r+"\r\nResponseText="+u.responseText)}t.callback&&t.callback(n,u)},error:function(n,r,u){(t.spinner&&t.spinner.hide(),r!="cancel")&&typeof u!="undefined"&&u!=""&&i.alert("AJAX ERROR\r\nTextStatus="+r+"\r\nError="+u+"\r\nResponseText="+n.responseText)}})},alert:function(n){mappl10n.options.admin||mappl10n.options.debug?alert(n):window.console&&console.error(n)},jqVersionCheck:function(t){if(typeof n=="undefined"||typeof t=="undefined")return!1;for(t=t.split("."),v=n.fn.jquery.split("."),i=0;i<t.length;i++){var r=parseInt(t[i]),u=typeof v[i]!="undefined"?parseInt(v[i]):0;if(u!=r)return u>r}return!0},log:function(n){window.console&&console.error(n)},scrollTo:function(n,t){if(n&&t&&n.length&&t.length){var i=n.scrollTop(),u=n.height(),r=i+t.position().top,f=r+t.outerHeight(!0);r<i?n.scrollTop(r):f>i+u&&n.scrollTop(f-u)}},template:function(t,i){if(mapp.lib.templates=mapp.lib.templates?mapp.lib.templates:{},!mapp.lib.templates[t]){var r=mappl10n.options.templates?mappl10n.options.template[t]:n("#mapp-tmpl-"+t).html();if(r)mapp.lib.templates[t]=_.template(r.replace(/[\n\r\t]/g,""),null,{evaluate:/<#([\s\S]+?)#>/g,interpolate:/\{\{\{([\s\S]+?)\}\}\}/g,escape:/\{\{([^\}]+?)\}\}(?!\})/g});else return""}return mapp.lib.templates[t](i)}};mapp.lib.jqVersionCheck("1.7")||mapp.lib.alert("jQuery version is too old: "+n.fn.jquery);n("body").on("tabsactivate tabsshow",function(t,i){var r=i.newPanel?i.newPanel:i.panel;r&&n(".mapp-layout",r).each(function(){var i=n(this).find(".mapp-canvas").attr("id"),t=window[i];t.resize();t.recenter()})})}(jQuery);+function(){mappl10n.options.engine=="leaflet"&&(L.LatLng.prototype.toJSON=function(){return{lat:this.lat,lng:this.lng}},L.LatLngBounds.prototype.toJSON=function(){return{south:this.getSouth(),west:this.getWest(),north:this.getNorth(),east:this.getEast()}},L.LatLng.prototype.toUrlValue=function(){return Math.round(this.lat*1e6)/1e6+", "+Math.round(this.lng*1e6)/1e6});mapp.event={addListener:function(n,t,i){if(mappl10n.options.engine=="leaflet")n.on(t,i);else google.maps.event.addListener(n,t,i)},addListenerOnce:function(n,t,i){if(mappl10n.options.engine=="leaflet")n.once(t,i);else google.maps.event.addListenerOnce(n,t,i)},clearInstanceListeners:function(n){mappl10n.options.engine=="leaflet"?n.off():google.maps.event.clearInstanceListeners(n)},clearListeners:function(n,t){mappl10n.options.engine=="leaflet"?n.off(t):google.maps.event.clearListeners(n,"rightclick")},trigger:function(n,t,i){mappl10n.options.engine=="leaflet"?n.fire(t,i):google.maps.event.trigger(n,t,i)}}}(jQuery);mapp=window.mapp||{};jQuery.fn.AlgoliaAutocomplete=jQuery.fn.autocomplete.noConflict();+function(n){mapp.Places=function(t,i){var r=this;this.sel=n(t);this.opts=n.extend({map:null},i);this.geocoder=mappl10n.options.engine=="leaflet"?new mapp.geocoders.Algolia(this.opts.map):new mapp.geocoders.Google(this.opts.map);this.sel.on("keydown",function(t){if(t.which==13){t.preventDefault();var i=r.parseLatLng(r.sel.val());i&&(n(r).triggerHandler("search.mapp",i),r.sel.AlgoliaAutocomplete("close"),t.stopImmediatePropagation());r.sel.val().substring(0,4)=="http"&&(n(r).triggerHandler("search.mapp",r.sel.val()),r.sel.AlgoliaAutocomplete("close"),t.stopImmediatePropagation())}});this.autocomplete();this.sel.focus()};mapp.Places.prototype={parse:function(t,i){var f=this,u=t&&t.name?n.trim(t.name):n.trim(t),r;if(!u){i(null);return}if(u=="user"){this.geolocate(function(n){i(n)});return}if(t&&t.geometry){i(t);return}if(r=this.parseLatLng(t),r){i(r);return}this.geocoder.geocode(t,function(n){i(n)})},parseLatLng:function(t){var i,e,r,u,f;return t.lat&&t.lng?i=t:(e=t&&t.name?n.trim(t.name):n.trim(t),r=e.split(","),r.length==2&&(u=parseFloat(r[0]),f=parseFloat(r[1]),isNaN(u)||isNaN(f)||(i={lat:u,lng:f}))),i?{name:i.lat+", "+i.lng,geometry:{location:i}}:null},geolocate:function(n){var t=this;if(!navigator||!navigator.geolocation){alert(mappl10n.no_geolocate);return}navigator.geolocation.getCurrentPosition(function(t){var i={lat:t.coords.latitude,lng:t.coords.longitude};n({name:i.lat+", "+i.lng,geometry:{location:i}})},function(t){var i=t&&t.message?" : "+t.message:"";alert(mappl10n.no_geolocate+i);n(null)},{timeout:15e3,enableHighAccuracy:!0,maximumAge:3e4})},autocomplete:function(){var t=this,r,i,u;this.sel.on("autocomplete:selected",function(i,r){t.geocoder.getDetails(r,function(i){t.parse(i,function(i){i&&n(t).triggerHandler("search.mapp",i)})})});r={empty:'<div class="list-group search-results-dropdown"><div class="list-group-item">'+mappl10n.no_results+"<\/div><\/div>",header:'<div class="list-group search-results-dropdown">'};mappl10n.options.engine=="leaflet"?(i={algoliasearch:algoliasearch,templates:r},mappl10n.options.country&&(i.countries=[mappl10n.options.country]),mappl10n.options.language&&(i.language=mappl10n.options.language),u=placesAutocompleteDataset(i)):u={display:"description",source:function(n,i){t.geocoder.getPredictions(n,function(n){matches=n;i(matches)})},templates:r};this.sel.AlgoliaAutocomplete({autoselect:!0,cssClasses:{prefix:"mapp-aa"},debug:!1,hint:!0,highlight:!0,minLength:1},u)}}}(jQuery);mapp=window.mapp||{};+function(n){mapp.Poi=function(t){var u,f,r,o,i,e,h,s;if(this.defaults={address:null,body:null,iconid:null,kml:null,map:null,overlay:null,postid:null,props:null,title:"",url:null,type:null,viewport:null},n.extend(this,this.defaults,t),t&&t.correctedAddress&&(this.address=t.correctedAddress),mappl10n.options.engine=="leaflet"&&this.isPoly()&&(this.type=null),t.viewport&&t.viewport.sw&&t.viewport.ne&&(u=t.viewport.sw,f=t.viewport.ne,this.viewport=mappl10n.options.engine=="leaflet"?new L.LatLngBounds(L.latLng(u.lat,u.lng),L.latLng(f.lat,f.lng)):new google.maps.LatLngBounds(new google.maps.LatLng(u.lat,u.lng),new google.maps.LatLng(f.lat,f.lng))),r=[],o=[],!t.overlay)switch(this.type){case"polygon":if(t.poly&&t.poly.paths)for(i=0;i<t.poly.paths.length;i++){for(r=[],e=0;e<t.poly.paths[i].length;e++)r.push(new google.maps.LatLng(t.poly.paths[i][e].lat,t.poly.paths[i][e].lng));o.push(new google.maps.MVCArray(r))}this.overlay=new google.maps.Polygon({paths:new google.maps.MVCArray(o)});this.setColors(t.poly);break;case"polyline":if(t.poly&&t.poly.path)for(i=0;i<t.poly.path.length;i++)r.push(new google.maps.LatLng(t.poly.path[i].lat,t.poly.path[i].lng));this.overlay=new google.maps.Polyline({path:new google.maps.MVCArray(r)});this.setColors(t.poly);break;case"circle":h=new google.maps.LatLng(t.point.lat,t.point.lng);this.overlay=new google.maps.Circle({center:h,radius:parseFloat(t.poly.radius)});this.setColors(t.poly);break;case"rectangle":this.overlay=new google.maps.Rectangle({bounds:this.viewport});this.setColors(t.poly);break;case"kml":s=t.kml&&t.kml.url?t.kml.url:"";this.overlay=mappl10n.options.engine=="leaflet"?omnivore.kml(s):new google.maps.KmlLayer(s,{preserveViewport:!0,suppressInfoWindows:!0});break;case"":default:this.overlay=mappl10n.options.engine=="leaflet"?L.marker([t.point.lat,t.point.lng],{title:t.title}):new google.maps.Marker({position:new google.maps.LatLng(t.point.lat,t.point.lng),title:t.title})}t.type||this.setIcon(t.iconid)};mapp.Poi.prototype={toJSON:function(){var n={address:this.address,body:this.body,correctedAddress:this.address,iconid:this.iconid,point:null,poly:null,title:this.title,type:this.type,viewport:null},u=this.getPosition(),i,t,r;if(n.point=u.toJSON(),i=this.viewport?this.viewport:this.getBounds(),i&&(t=i.toJSON(),n.viewport={sw:{lat:t.south,lng:t.west},ne:{lat:t.north,lng:t.east}}),this.type=="kml"&&(n.kml=this.kml),this.isPoly()){n.poly=this.getColors();switch(this.type){case"circle":n.poly.radius=this.overlay.getRadius();break;case"polyline":n.poly.path=[];this.overlay.getPath().forEach(function(t){n.poly.path.push(t.toJSON())});break;case"polygon":n.poly.paths=[];this.overlay.getPaths().forEach(function(t){var i=[];t.forEach(function(n){i.push(n.toJSON())});n.poly.paths.push(i)});break;case"rectangle":r=this.overlay.getBounds();n.viewport={sw:r.getSouthWest().toJSON(),ne:r.getNorthEast().toJSON()}}}return n},setMap:function(n){var t=this;if(this.map=n,mapp.event.clearInstanceListeners(this.overlay),n==null){mappl10n.options.engine=="leaflet"?this.overlay.remove():this.overlay.setMap(null);return}this.type=="kml"&&(mappl10n.options.engine=="leaflet"?(mapp.event.addListenerOnce(this.overlay,"ready",function(){t.viewport=t.overlay.getBounds()}),mapp.event.addListenerOnce(this.overlay,"error",function(){alert(mappl10n.kml_error)})):(mapp.event.addListener(this.overlay,"defaultviewport_changed",function(){t.viewport=t.overlay.getDefaultViewport()}),mapp.event.addListener(this.overlay,"status_changed",function(){var n=t.overlay.getStatus();n!="OK"&&mappl10n.ajaxErrors&&alert(mappl10n.kml_error+":"+n)})));mapp.event.addListener(this.overlay,"click",function(n){t.open(n)});this.setEditable(this.map.editable);mappl10n.options.engine=="leaflet"?this.overlay.addTo(n.getMap()):this.overlay.setMap(n.getMap())},setEditable:function(n){var t=this;this.type!="kml"&&(mappl10n.options.engine=="leaflet"?this.overlay.options.draggable=n:this.overlay.setDraggable(n),this.isPoly()&&this.overlay.setEditable(n),mapp.event.clearListeners(this.overlay,"rightclick"),mapp.event.clearListeners(this.overlay,"dragstart"),n&&(mapp.event.addListener(this.overlay,"dragstart",function(){t.viewport=null;t.map.close()}),(this.type=="polygon"||this.type=="polyline")&&mapp.event.addListener(this.overlay,"rightclick",function(n){n.vertex!=null&&t.overlay.getPath().getLength()>2&&t.overlay.getPath().removeAt(n.vertex)})))},setZIndex:function(n){mappl10n.options.engine=="leaflet"?this.type||this.overlay.setZIndexOffset(n):this.overlay.set("zIndex",n)},setIcon:function(n){this.type||typeof mapp.Icons=="undefined"||(this.iconid=n,mappl10n.options.engine=="leaflet"?this.overlay.setIcon(mapp.Icons.get(n)):(this.overlay.setIcon(null),this.overlay.setIcon(mapp.Icons.get(n))))},setVisible:function(n){typeof this.overlay.setVisible!="undefined"&&this.overlay.setVisible(n)},setColors:function(n){var i={};for(var t in{strokeColor:"",strokeOpacity:"",strokeWeight:"",fillColor:"",fillOpacity:""})n&&typeof n[t]!="undefined"&&(i[t]=n[t]);this.overlay.setOptions(i)},setTemplateColors:function(n,t,i){var r=this.type=="polyline"?{strokeColor:n,strokeOpacity:t/100,strokeWeight:i}:{fillColor:n,fillOpacity:t/100,strokeColor:n,strokeWeight:i,strokeOpacity:1};this.setColors(r)},getColors:function(){var t={};for(var n in{strokeColor:"",strokeOpacity:"",strokeWeight:"",fillColor:"",fillOpacity:""})typeof this.overlay[n]!="undefined"&&(t[n]=this.overlay[n]);return t},getTemplateColors:function(){var n=this.getColors();return this.type=="polyline"?{color:n.strokeColor,opacity:n.strokeOpacity*100,weight:n.strokeWeight}:{color:n.fillColor,opacity:n.fillOpacity*100,weight:n.strokeWeight}},center:function(n){var t=this.getBounds();if(typeof n=="number"){this.map.setView(this.getPosition(),n);return}if(!t){this.map.setView(this.getPosition(),parseInt(mappl10n.options.poiZoom));return}this.map.fitBounds(t);this.map.setView(this.getPosition(),n)},open:function(n){this.map.open(this,n)},isPoly:function(){return jQuery.inArray(this.type,["polyline","polygon","circle","rectangle"])!=-1},getBounds:function(){var n;switch(this.type){case"polyline":n=new google.maps.LatLngBounds;this.overlay.getPath().forEach(function(t){n.extend(t)});break;case"polygon":n=new google.maps.LatLngBounds;this.overlay.getPaths().forEach(function(t){t.forEach(function(t){n.extend(t)})});break;case"rectangle":case"circle":n=this.overlay.getBounds();break;case"kml":n=mappl10n.options.engine=="leaflet"?this.overlay.getBounds().isValid()?this.overlay.getBounds():null:this.overlay.getDefaultViewport();n=n?n:this.viewport;break;default:return this.viewport}return n},getPosition:function(n){if(!this.type)return mappl10n.options.engine=="leaflet"?this.overlay.getLatLng():this.overlay.getPosition();if(this.type=="kml"&&n&&n.latLng)return n.latLng;var t=this.getBounds();return t?t.getCenter():mappl10n.options.engine=="leaflet"?new L.latLng(0,0):new google.maps.LatLng(0,0)},getAddress:function(){return this.address?this.address:this.getPosition().toUrlValue()},getAnchorPoint:function(n){var t=this.isPoly()?"poly":this.type;switch(t){case"kml":return mappl10n.options.engine=="leaflet"?[0,0]:n&&n.pixelOffset?new google.maps.Point(n.pixelOffset.width,n.pixelOffset.height):new google.maps.Point(0,0);case"poly":return mappl10n.options.engine=="leaflet"?[0,0]:new google.maps.Point(0,0);default:return mappl10n.options.engine=="leaflet"?this.overlay.options.icon.options.popupAnchor?this.overlay.options.icon.options.popupAnchor:[0,-32]:typeof this.overlay.anchorPoint!="undefined"?this.overlay.anchorPoint:new google.maps.Point(0,-32)}},render:function(n,t){var i=_.extend(this,{icon:mapp.Icons.getUrl(this.iconid)});return t&&(i.body=t.description,i.title=t.name),mapp.lib.template(this.map.templates[n],{poi:i,colors:this.getTemplateColors()})}}}(jQuery);mapp=window.mapp||{};mapp.widgets={};+function(n){mapp.widgets.Grid=function(t,i){this.el=n(t);this.options=jQuery.extend({action:null,sortable:!1},i);var r=this;this.table=n("table",this.el);this.template=n("script",this.el).html().replace(new RegExp("'","g"),'"');this.el.on("click",function(t){var u=n(t.target),i=u.attr("data-mapp-action");i&&(r[i](t),t.preventDefault())})};mapp.widgets.Grid.prototype={add:function(){this.table.show();var t=n(this.template).appendTo(this.table);n(":input:eq(0)",t).focus()},remove:function(t){var i=n(t.target).closest("tr").remove();n("tbody > tr",this.table).length||this.table.hide()}}}(jQuery);+function(n){mapp.widgets.Popup=function(t,i){var r,u;if(this.activeToggle=null,this.content=t,this.el=null,r=this,this.options=n.extend({max:!1,modal:!1,position:null,toggle:null},i),this.options.modal?this.el=this.content.addClass("mapp-popup-fixed"):(this.el=n('<div class="mapp-popup">'),this.setContent(t)),this.el.attr("tabindex",0),this.options.max&&this.el.addClass("mapp-popup-max"),this.el.hide(),!this.options.modal)n(document).on("click.mapp.popup",function(t){n.contains(r.el.get(0),t.target)||r.el.get(0)==t.target||r.close()});if(this.options.toggle){u=typeof this.options.toggle=="string"?this.options.toggle:this.options.toggle.selector;n(document).on("click",u,function(t){r.activeToggle=n(this);r.open();t.stopPropagation()})}this.el.on("click",".mapp-close",function(){r.close()});this.el.on("keydown",function(n){n.which==27&&r.close()});return this};mapp.widgets.Popup.prototype={close:function(){this.el&&this.el.is(":visible")&&(this.backdrop&&(this.backdrop.remove(),n("body").removeClass("mapp-popup-modal")),this.el.hide(),this.activeToggle&&this.activeToggle.focus(),this.el.trigger("closed.mapp.popup"))},open:function(){var t=this;this.options.modal||this.el.parent().length||this.el.appendTo("body");this.el.show();this.options.modal?(this.backdrop=n('<div class="mapp-popup-backdrop"><\/div>'),this.el.after(this.backdrop),n("body").addClass("mapp-popup-modal")):this.el.position(n.extend({my:"center bottom",at:"center top-5",of:this.activeToggle,collision:"flipfit"},this.options.position));this.el.focus();this.el.trigger("open.mapp.popup")},setContent:function(n){this.el.empty();this.el.append('<span class="mapp-close">').append(n)},toggle:function(){this.el.is(":visible")?this.close():this.open()}}}(jQuery);+function(){mapp.load=function(){if(typeof mapp!="undefined"&&mapp.data)while(mapp.data.length){var n=mapp.data.pop();window[n.name]=new mapp.Map(n);window[n.name].display()}}}(jQuery);typeof mapp.Media!="undefined"?window.mappEditor=new mapp.Media:mapp.load()
js/mappress_editor.min.js CHANGED
@@ -1 +1 @@
1
- var mapp=window.mapp||{};+function(n){mapp.Media=function(){this.editor=null;this.map=null;this.settings=null;this.tplEditor=null;this.sel=n(".mapp-media");this.list=[];var t=this;this.initialize=function(){this.find();n(".mapp-media-list-type",this.sel).on("change",function(){var i=n(".mapp-media-list-type",this.sel).val();n(".mapp-media-search").val("");n(".mapp-media-search").toggle(i=="all");t.find()});var i=_.debounce(function(){t.find()});n(".mapp-media-search").keydown(function(){i()});this.settings={editable:!0,name:"mapp0"};this.sel.on("click","[data-mapp-media]",function(i){i.preventDefault();var r=n(this).attr("data-mapp-media");t[r]()});n(".mapp-media-list .mapp-item",this.sel).on("click",function(){n(".mapp-media-list .mapp-item",this.sel).removeClass("mapp-active");n(this).addClass("mapp-active")});n(".mapp-media-list",this.sel).on("click","[data-mapp-media]",function(i){i.preventDefault();var r=n(this).attr("data-mapp-media"),u=n(this).closest(".mapp-item"),f=u.attr("data-mapp-mapid");return t[r](f),!1});this.sel.on("change",".mapp-media-viewport",function(){n(this).is(":checked")||(t.map.center=t.map.zoom=null,t.map.recenter())});n(".mapp-media-size").click(function(t){var i=n(this).data("width"),r=n(this).data("height");n(".mapp-media-width").val(i);n(".mapp-media-height").val(r);t.preventDefault()});n("#publish, #post-preview").click(function(){t.save()});n(".mapp-media-title").keydown(function(n){n.which==13&&(n.preventDefault(),t.save())})};this.add=function(){var n=new mapp.Map(this.settings);n.width=mappl10n.options.sizes[mappl10n.options.size].width;n.height=mappl10n.options.sizes[mappl10n.options.size].height;t.open(n)};this.cancel=function(){t.closeEditor()};this.closeEditor=function(){this.editor.close();this.map=null;this.editor=null;n(".mapp-media-edit-panel").hide();n(".mapp-media-list-panel").show()};this.edit=function(n){mapp.Map.ajaxGet(n,this.settings,function(n){t.open(n)})};this.find=function(t){var i=this,r=n(".mapp-media-list-type",this.sel).val(),u=n(".mapp-media-search").val();n(".spinner",this.sel).css("visibility","visible");mapp.lib.ajax({type:"GET",data:{action:"mapp_find",type:r,page:t,postid:mappl10n.options.postid,search:u},callback:function(t){t.status=="OK"&&(n(".spinner",this.sel).css("visibility","hidden"),i.list=t.data,i.renderList())}})};this.insert=function(n){n=n?n:this.map.mapid;var t='[mappress mapid="'+n+'"]';send_to_editor(t)};this.open=function(t){this.map=t;n(".mapp-edit",this.sel).html(mapp.lib.template("edit-map"));var i=this.map.mapid;i?n(".mapp-media-mapid").text(i):n(".mapp-media-mapid").text("");n(".mapp-media-title").val(this.map.title);n(".mapp-media-width").val(this.map.width);n(".mapp-media-height").val(this.map.height);n(".mapp-media-viewport").prop("checked",!!(this.map.center&&this.map.zoom));n(".mapp-media-edit-panel").show();n(".mapp-media-list-panel").hide();this.editor=new mapp.Editor(this.map)};this.remove=function(n){if(confirm(mappl10n.delete_map_prompt)){var t=_.findIndex(this.list.items,{mapid:n});t>-1&&(this.list.items.splice(t,1),mapp.Map.ajaxDelete(n),this.renderList())}};this.renderList=function(){var t=n(".mapp-media-list-type",this.sel).val();n(".mapp-media-list",this.sel).html(mapp.lib.template("media-list",{list:this.list,type:t}))};this.save=function(){var t=this;this.map&&(this.map.title=n.trim(n(".mapp-media-title").val()),this.map.width=n(".mapp-media-width").val(),this.map.height=n(".mapp-media-height").val(),n(".mapp-media-viewport").prop("checked")?(this.map.center=this.map.getMap().getCenter().toJSON(),this.map.zoom=this.map.getMap().getZoom()):(this.map.center=null,this.map.zoom=null),this.map.ajaxSave(function(n){var i=_.findIndex(t.list.items,{mapid:t.map.mapid});i==-1?t.list.items.unshift(n):t.list.items[i]=n;t.renderList();t.closeEditor()}))};this.initialize.apply(this)}}(jQuery);+function(n){mapp.Editor=function(t){this.drawingManager=null;this.map=t;this.poiEditor=null;this.sel=n(".mapp-edit");var i=this;this.initialize=function(){this.map.display();this.poiEditor=new mapp.PoiEditor(this.map);this.initDrawingManager();n(this.map.places).off("search.mapp");n(this.map.places).on("search.mapp",function(n,t){i.insertPoi(t)});this.sel.on("click","[data-mapp-editor]",function(t){t.preventDefault();var r=n(this).attr("data-mapp-editor");i[r]()})};this.close=function(){this.map.close()};this.insertPoi=function(n){var t;if(n)if(this.drawingManager&&this.drawingManager.setDrawingMode(null),this.map.close(),n.geometry){var i=n.formatted_address?n.formatted_address.replace(/, United States of America/i,"").replace(/, United States/i,"").replace(/, USA/i,""):null,r=n.name==i?"":i,t=new mapp.Poi({address:i,body:r,iconid:this.poiEditor.lastIcon,point:n.geometry.location,title:n.name,viewport:n.geometry.viewport?n.geometry.viewport:null});this.map.insertPoi(t);t.center()}else n.overlay&&(t=new mapp.Poi({body:"",iconid:n.type=="marker"?null:"poly",overlay:n.overlay,title:n.type=="marker"?n.overlay.getPosition().toUrlValue(6):mappl10n.shape,type:n.type=="marker"?null:n.type}),this.map.insertPoi(t))};this.initDrawingManager=function(){};this.layer=function(){var n=window.prompt(mappl10n.layer);n&&i.insertPoi(n)};this.initialize.apply(this)};mapp.PoiEditor=function(t){this.map=t;this.poi=null;this.sel=null;this.lastIcon=null;var i=this;this.initialize=function(){this.sel=n(this.map.iw.getContent());n(this.map).on("mapp.open",function(n,t){i.render(t)});n(this.map).on("mapp.close",function(){i.mce(!1)});this.sel.on("click","[data-mapp-poi]",function(t){t.preventDefault();var r=n(this).attr("data-mapp-poi");i[r]()});this.sel.on("click",".mapp-poi-visual, .mapp-poi-html",function(){var t=n(this).hasClass("mapp-poi-visual");i.mce(t)});this.sel.on("keydown",function(t){t.which==13&&t.target!=n("#mapp-poi-body")&&(t.preventDefault(),i.save())});this.sel.on("change","[data-mapp-iconpicker]",function(){i.poi.setIcon(n("[data-mapp-iconpicker]").attr("data-mapp-iconid"));i.lastIcon=i.poi.iconid;i.map.renderList()});this.sel.on("change","[data-mapp-colorpicker]",function(){i.poi.setTemplateColors(n("[data-mapp-colorpicker]").attr("data-mapp-color"),n("[data-mapp-colorpicker]").attr("data-mapp-opacity"),n("[data-mapp-colorpicker]").attr("data-mapp-weight"));i.map.renderList()})};this.cancel=function(){this.map.close()};this.initMCE=function(){var n,t,i;typeof tinyMCE!="undefined"&&typeof tinyMCE.init!="undefined"&&(n="en",typeof tinyMCEPreInit!="undefined"&&typeof window.tinyMCEPreInit.mceInit!="undefined"&&typeof window.tinyMCEPreInit.mceInit.content!="undefined"&&(t=window.tinyMCEPreInit.mceInit.content,n=typeof t.language!="undefined"?t.language:"en"),i={mode:"none",height:"75px",convert_urls:!1,language:n,menubar:!1,plugins:"wordpress,paste,wplink,textcolor,image",relative_urls:!1,remove_script_host:!1,statusbar:!1,theme:"modern",toolbar1:"bold,italic,link,unlink,image",toolbar2:"",toolbar3:"",toolbar4:""},tinyMCE.init(i),this.mce(!0))};this.mce=function(t){var r=t?"mceAddEditor":"mceRemoveEditor";typeof tinyMCE!="undefined"&&tinyMCE.execCommand(r,!1,"mapp-poi-body");n(".mapp-poi-visual, .mapp-poi-html",i.sel).removeClass("mapp-active");t?n(".mapp-poi-visual",i.sel).addClass("mapp-active"):n(".mapp-poi-html",i.sel).addClass("mapp-active")};this.remove=function(){confirm(mappl10n.delete_prompt)&&(this.map.close(),this.map.removePoi(this.poi))};this.render=function(t){this.poi=t;n("[data-mapp-iconpicker]").trigger("refresh");n("[data-mapp-colorpicker]").trigger("refresh");this.initMCE()};this.save=function(){typeof tinyMCE!="undefined"&&tinyMCE.get("mapp-poi-body")&&tinyMCE.get("mapp-poi-body").save();this.poi.title=n(".mapp-poi-title").val();this.poi.body=n(".mapp-poi-body").val();this.map.renderList();this.map.close()};this.initialize.apply(this)}}(jQuery)
1
+ var mapp=window.mapp||{};+function(n){mapp.Media=function(){this.editor=null;this.map=null;this.settings=null;this.sel=n(".mapp-media");this.items=null;var t=this;this.initialize=function(){this.find();this.sel.on("change",".mapp-media-list-type",function(){var i=n(".mapp-media-list-type",this.sel).val();n(".mapp-media-search").val("");n(".mapp-media-search").toggle(i=="all");t.find()});this.sel.on("keydown",".mapp-media-search",function(n){if(n.which==13)return!1});this.sel.on("input",".mapp-media-search",function(){t.find()});this.settings={editable:!0,name:"mapp0"};this.sel.on("click","[data-mapp-media]",function(i){i.preventDefault();var r=n(this).attr("data-mapp-media");t[r]()});this.sel.on("click",".mapp-media-list .mapp-item",function(){n(".mapp-media-list .mapp-item",this.sel).removeClass("mapp-active");n(this).addClass("mapp-active")});this.sel.on("click",".mapp-media-list [data-mapp-media-list]",function(i){i.preventDefault();var r=n(this).attr("data-mapp-media-list"),u=n(this).closest(".mapp-item"),f=u.attr("data-mapp-mapid");return t[r](f),!1});this.sel.on("change",".mapp-media-viewport",function(){n(this).is(":checked")||(t.map.center=t.map.zoom=null,t.map.recenter())});n(".mapp-media-size").click(function(t){var i=n(this).data("width"),r=n(this).data("height");n(".mapp-media-width").val(i);n(".mapp-media-height").val(r);t.preventDefault()});n("#publish, #post-preview").click(function(){t.save()});n(".mapp-media-title").keydown(function(n){n.which==13&&(n.preventDefault(),t.save())})};this.add=function(){var n=new mapp.Map(this.settings);n.width=mappl10n.options.sizes[mappl10n.options.size].width;n.height=mappl10n.options.sizes[mappl10n.options.size].height;t.open(n)};this.cancel=function(){t.closeEditor()};this.closeEditor=function(){this.editor.close();this.map=null;this.editor=null;n(".mapp-media-edit-panel").hide();n(".mapp-media-list-panel").show()};this.edit=function(n){mapp.Map.ajaxGet(n,this.settings,function(n){t.open(n)})};this.find=function(){var t=this;this.items!==null?this.renderList():(n(".spinner",this.sel).css("visibility","visible"),mapp.lib.ajax({type:"GET",data:{action:"mapp_find"},callback:function(i){i.status=="OK"&&(n(".spinner",this.sel).css("visibility","hidden"),t.items=_.sortBy(i.data,"post_title"),t.renderList())}}))};this.insert=function(n){n=n?n:this.map.mapid;var t='[mappress mapid="'+n+'"]';send_to_editor(t)};this.open=function(t){this.map=t;n(".mapp-edit",this.sel).html(mapp.lib.template("edit-map"));var i=this.map.mapid;i?n(".mapp-media-mapid").text(i):n(".mapp-media-mapid").text("");n(".mapp-media-title").val(this.map.title);n(".mapp-media-width").val(this.map.width);n(".mapp-media-height").val(this.map.height);n(".mapp-media-viewport").prop("checked",!!(this.map.center&&this.map.zoom));n(".mapp-media-edit-panel").show();n(".mapp-media-list-panel").hide();this.editor=new mapp.Editor(this.map)};this.remove=function(n){if(confirm(mappl10n.delete_map_prompt)){var t=_.findIndex(this.items,{mapid:n});t>-1&&(this.items.splice(t,1),mapp.Map.ajaxDelete(n),this.renderList())}};this.renderList=function(){var t=null,i=400,r=null,u=n(".mapp-media-list-type",this.sel).val(),f=n(".mapp-media-search",this.sel).val().toLowerCase();t=u=="all"?_.filter(this.items,function(n){return n.post_title&&n.post_title.toLowerCase().indexOf(f)!=-1||n.map_title&&n.map_title.toLowerCase().indexOf(f)!=-1}):_.filter(this.items,function(n){return n.postid==mappl10n.options.postid});t.length>i?(r=mappl10n.more.replace("%d",i).replace("%d",t.length),t=t.slice(0,i)):r="";n(".mapp-media-list",this.sel).html(mapp.lib.template("media-list",{items:t,type:u,more:r}))};this.save=function(){var t=this;this.map&&(this.map.title=n.trim(n(".mapp-media-title").val()),this.map.width=n(".mapp-media-width").val(),this.map.height=n(".mapp-media-height").val(),n(".mapp-media-viewport").prop("checked")?(this.map.center=this.map.getMap().getCenter().toJSON(),this.map.zoom=this.map.getMap().getZoom()):(this.map.center=null,this.map.zoom=null),this.map.ajaxSave(function(){var i=t.map.mapid?t.map.mapid.toString():null,r=_.findIndex(t.items,function(n){return n.mapid==i});r==-1?t.items.unshift({mapid:i,map_title:t.map.title,postid:mappl10n.options.postid,post_title:n("#title").val()||n("#post-title-0").val()}):t.items[r].map_title=t.map.title;t.renderList();t.closeEditor()}))};this.initialize.apply(this)}}(jQuery);+function(n){mapp.Editor=function(t){this.drawingManager=null;this.map=t;this.poiEditor=null;this.sel=n(".mapp-edit");var i=this;this.initialize=function(){this.map.display();this.poiEditor=new mapp.PoiEditor(this.map);this.initDrawingManager();n(this.map.places).off("search.mapp");n(this.map.places).on("search.mapp",function(n,t){i.insertPoi(t)});this.sel.on("click","[data-mapp-editor]",function(t){t.preventDefault();var r=n(this).attr("data-mapp-editor");i[r]()})};this.close=function(){this.map.close()};this.insertPoi=function(n){var t;if(n)if(this.drawingManager&&this.drawingManager.setDrawingMode(null),this.map.close(),n.geometry){var i=n.formatted_address?n.formatted_address.replace(/, United States of America/i,"").replace(/, United States/i,"").replace(/, USA/i,""):null,r=n.name==i?"":i,t=new mapp.Poi({address:i,body:r,iconid:this.poiEditor.lastIcon,point:n.geometry.location,title:n.name,viewport:n.geometry.viewport?n.geometry.viewport:null});this.map.insertPoi(t);t.center()}else n.overlay&&(t=new mapp.Poi({body:"",iconid:n.type=="marker"?null:"poly",overlay:n.overlay,title:n.type=="marker"?n.overlay.getPosition().toUrlValue(6):mappl10n.shape,type:n.type=="marker"?null:n.type}),this.map.insertPoi(t))};this.initDrawingManager=function(){};this.layer=function(){var n=window.prompt(mappl10n.layer);n&&i.insertPoi(n)};this.initialize.apply(this)};mapp.PoiEditor=function(t){this.map=t;this.poi=null;this.sel=null;this.lastIcon=null;var i=this;this.initialize=function(){this.sel=n(this.map.iw.getContent());n(this.map).on("mapp.open",function(n,t){i.render(t)});n(this.map).on("mapp.close",function(){i.mce(!1)});this.sel.on("click","[data-mapp-poi]",function(t){t.preventDefault();var r=n(this).attr("data-mapp-poi");i[r]()});this.sel.on("click",".mapp-poi-visual, .mapp-poi-html",function(){var t=n(this).hasClass("mapp-poi-visual");i.mce(t)});this.sel.on("keydown",function(t){t.which==13&&t.target!=n("#mapp-poi-body")&&(t.preventDefault(),i.save())});this.sel.on("change","[data-mapp-iconpicker]",function(){i.poi.setIcon(n("[data-mapp-iconpicker]").attr("data-mapp-iconid"));i.lastIcon=i.poi.iconid;i.map.renderList()});this.sel.on("change","[data-mapp-colorpicker]",function(){i.poi.setTemplateColors(n("[data-mapp-colorpicker]").attr("data-mapp-color"),n("[data-mapp-colorpicker]").attr("data-mapp-opacity"),n("[data-mapp-colorpicker]").attr("data-mapp-weight"));i.map.renderList()})};this.cancel=function(){this.map.close()};this.initMCE=function(){var n,t,i;typeof tinyMCE!="undefined"&&typeof tinyMCE.init!="undefined"&&(n="en",typeof tinyMCEPreInit!="undefined"&&typeof window.tinyMCEPreInit.mceInit!="undefined"&&typeof window.tinyMCEPreInit.mceInit.content!="undefined"&&(t=window.tinyMCEPreInit.mceInit.content,n=typeof t.language!="undefined"?t.language:"en"),i={mode:"none",height:"75px",convert_urls:!1,language:n,menubar:!1,plugins:"wordpress,paste,wplink,textcolor,image",relative_urls:!1,remove_script_host:!1,statusbar:!1,theme:"modern",toolbar1:"bold,italic,link,unlink,image",toolbar2:"",toolbar3:"",toolbar4:""},tinyMCE.init(i),this.mce(!0))};this.mce=function(t){var r=t?"mceAddEditor":"mceRemoveEditor";typeof tinyMCE!="undefined"&&tinyMCE.execCommand(r,!1,"mapp-poi-body");n(".mapp-poi-visual, .mapp-poi-html",i.sel).removeClass("mapp-active");t?n(".mapp-poi-visual",i.sel).addClass("mapp-active"):n(".mapp-poi-html",i.sel).addClass("mapp-active")};this.remove=function(){confirm(mappl10n.delete_prompt)&&(this.map.close(),this.map.removePoi(this.poi))};this.render=function(t){this.poi=t;n("[data-mapp-iconpicker]").trigger("refresh");n("[data-mapp-colorpicker]").trigger("refresh");this.initMCE()};this.save=function(){typeof tinyMCE!="undefined"&&tinyMCE.get("mapp-poi-body")&&tinyMCE.get("mapp-poi-body").save();this.poi.title=n(".mapp-poi-title").val();this.poi.body=n(".mapp-poi-body").val();mappl10n.options.engine!="leaflet"&&this.poi.overlay.setTitle(this.poi.title);this.map.renderList();this.map.close()};this.initialize.apply(this)}}(jQuery)
languages/mappress-google-maps-for-wordpress.pot CHANGED
@@ -2,9 +2,9 @@
2
# This file is distributed under the same license as the MapPress Maps for WordPress package.
3
msgid ""
4
msgstr ""
5
- "Project-Id-Version: MapPress Maps for WordPress 2.50.11\n"
6
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/mappress-google-maps-for-wordpress\n"
7
- "POT-Creation-Date: 2019-01-06 19:50:22+00:00\n"
8
"MIME-Version: 1.0\n"
9
"Content-Type: text/plain; charset=UTF-8\n"
10
"Content-Transfer-Encoding: 8bit\n"
@@ -24,15 +24,15 @@ msgstr ""
24
msgid "HTML"
25
msgstr ""
26
27
- #: forms/editor.php:53 forms/media.php:48 forms/settings.php:41
28
msgid "Save"
29
msgstr ""
30
31
- #: forms/editor.php:54 forms/media.php:49 forms/settings.php:42
32
msgid "Cancel"
33
msgstr ""
34
35
- #: forms/editor.php:55 forms/media.php:71 forms/settings.php:44
36
#: mappress_controls.php:102
37
msgid "Delete"
38
msgstr ""
@@ -50,45 +50,41 @@ msgid "All posts"
50
msgstr ""
51
52
#: forms/media.php:12
53
- msgid "Search post title"
54
msgstr ""
55
56
- #: forms/media.php:20
57
msgid "Map ID"
58
msgstr ""
59
60
- #: forms/media.php:25
61
msgid "Map Title"
62
msgstr ""
63
64
- #: forms/media.php:26 forms/media.php:62 forms/media.php:66 mappress.php:631
65
msgid "Untitled"
66
msgstr ""
67
68
- #: forms/media.php:30
69
msgid "Display Size"
70
msgstr ""
71
72
- #: forms/media.php:43
73
msgid "Save center / zoom"
74
msgstr ""
75
76
- #: forms/media.php:50 forms/media.php:70
77
msgid "Insert into post"
78
msgstr ""
79
80
- #: forms/media.php:69 forms/settings.php:4 forms/settings.php:18
81
msgid "Edit"
82
msgstr ""
83
84
- #: forms/media.php:78
85
msgid "No maps found"
86
msgstr ""
87
88
- #: forms/media.php:81
89
- msgid "Load More"
90
- msgstr ""
91
-
92
#: forms/settings.php:24
93
msgid "New"
94
msgstr ""
@@ -106,138 +102,142 @@ msgid "Default"
106
msgstr ""
107
108
#: mappress.php:153
109
- msgid "Settings"
110
- msgstr ""
111
-
112
- #: mappress.php:159
113
- msgid "Version"
114
msgstr ""
115
116
- #: mappress.php:167
117
- msgid "Documentation"
118
msgstr ""
119
120
- #: mappress.php:168
121
- msgid "Support"
122
msgstr ""
123
124
- #: mappress.php:170
125
- msgid "Upgrade to MapPress Pro"
126
msgstr ""
127
128
- #: mappress.php:453
129
- msgid "MapPress database tables are missing. Please deactivate the plugin and activate it again to fix this."
130
msgstr ""
131
132
- #: mappress.php:458
133
- msgid "WARNING: MapPress is not compatible with the WP-Geo plugin. Please deactivate or uninstall WP-Geo before using MapPress."
134
msgstr ""
135
136
- #: mappress.php:463
137
- msgid "A Google Maps API key is required"
138
msgstr ""
139
140
- #: mappress.php:463
141
- msgid "Please update your"
142
msgstr ""
143
144
- #: mappress.php:463
145
- msgid "MapPress Settings"
146
msgstr ""
147
148
- #: mappress.php:621
149
msgid "Are you sure you want to delete?"
150
msgstr ""
151
152
- #: mappress.php:622
153
msgid "Delete this map?"
154
msgstr ""
155
156
- #: mappress.php:623
157
msgid "Google cannot return directions between those addresses. There is no route between them or the routing information is not available."
158
msgstr ""
159
160
- #: mappress.php:624
161
msgid "Error reading KML file"
162
msgstr ""
163
164
- #: mappress.php:625
165
msgid "URL for KML file"
166
msgstr ""
167
168
- #: mappress.php:626
169
msgid "Loading"
170
msgstr ""
171
172
- #: mappress.php:627
173
msgid "Unable to get your location"
174
msgstr ""
175
176
- #: mappress.php:628
177
msgid "No results"
178
msgstr ""
179
180
- #: mappress.php:629
181
msgid "Save changes?"
182
msgstr ""
183
184
- #: mappress.php:630
185
msgid "Shape"
186
msgstr ""
187
188
- #: mappress.php:655
189
msgid "Improve this map"
190
msgstr ""
191
192
- #: mappress.php:671 mappress.php:689
193
msgid "Streets"
194
msgstr ""
195
196
- #: mappress.php:672
197
msgid "Outdoors"
198
msgstr ""
199
200
- #: mappress.php:673
201
msgid "Light"
202
msgstr ""
203
204
- #: mappress.php:674
205
msgid "Dark"
206
msgstr ""
207
208
- #: mappress.php:675
209
msgid "Satellite"
210
msgstr ""
211
212
- #: mappress.php:676
213
msgid "Satellite Streets"
214
msgstr ""
215
216
#: mappress_controls.php:93
217
msgid "Add"
218
msgstr ""
219
220
- #: mappress_map.php:92 mappress_settings.php:306
221
msgid "MapPress"
222
msgstr ""
223
224
- #: mappress_map.php:183
225
msgid "Map not found"
226
msgstr ""
227
228
- #: mappress_map.php:441 pro/mappress_pro_settings.php:33
229
msgid "Filter"
230
msgstr ""
231
232
- #: mappress_map.php:474
233
msgid "Show map"
234
msgstr ""
235
236
- #: mappress_map.php:478
237
msgid "Map"
238
msgstr ""
239
240
- #: mappress_map.php:479
241
msgid "List"
242
msgstr ""
243
2
# This file is distributed under the same license as the MapPress Maps for WordPress package.
3
msgid ""
4
msgstr ""
5
+ "Project-Id-Version: MapPress Maps for WordPress 2.52.1\n"
6
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/mappress-google-maps-for-wordpress\n"
7
+ "POT-Creation-Date: 2019-02-04 20:02:55+00:00\n"
8
"MIME-Version: 1.0\n"
9
"Content-Type: text/plain; charset=UTF-8\n"
10
"Content-Transfer-Encoding: 8bit\n"
24
msgid "HTML"
25
msgstr ""
26
27
+ #: forms/editor.php:53 forms/media.php:49 forms/settings.php:41
28
msgid "Save"
29
msgstr ""
30
31
+ #: forms/editor.php:54 forms/media.php:50 forms/settings.php:42
32
msgid "Cancel"
33
msgstr ""
34
35
+ #: forms/editor.php:55 forms/media.php:72 forms/settings.php:44
36
#: mappress_controls.php:102
37
msgid "Delete"
38
msgstr ""
50
msgstr ""
51
52
#: forms/media.php:12
53
+ msgid "Filter by title"
54
msgstr ""
55
56
+ #: forms/media.php:21
57
msgid "Map ID"
58
msgstr ""
59
60
+ #: forms/media.php:26
61
msgid "Map Title"
62
msgstr ""
63
64
+ #: forms/media.php:27 forms/media.php:63 forms/media.php:67 mappress.php:414
65
msgid "Untitled"
66
msgstr ""
67
68
+ #: forms/media.php:31
69
msgid "Display Size"
70
msgstr ""
71
72
+ #: forms/media.php:44
73
msgid "Save center / zoom"
74
msgstr ""
75
76
+ #: forms/media.php:51 forms/media.php:71
77
msgid "Insert into post"
78
msgstr ""
79
80
+ #: forms/media.php:70 forms/settings.php:4 forms/settings.php:18
81
msgid "Edit"
82
msgstr ""
83
84
+ #: forms/media.php:79
85
msgid "No maps found"
86
msgstr ""
87
88
#: forms/settings.php:24
89
msgid "New"
90
msgstr ""
102
msgstr ""
103
104
#: mappress.php:153
105
+ msgid "MapPress database tables are missing. Please deactivate the plugin and activate it again to fix this."
106
msgstr ""
107
108
+ #: mappress.php:158
109
+ msgid "WARNING: MapPress is not compatible with the WP-Geo plugin. Please deactivate or uninstall WP-Geo before using MapPress."
110
msgstr ""
111
112
+ #: mappress.php:163
113
+ msgid "A Google Maps API key is required"
114
msgstr ""
115
116
+ #: mappress.php:163
117
+ msgid "Please update your"
118
msgstr ""
119
120
+ #: mappress.php:163
121
+ msgid "MapPress Settings"
122
msgstr ""
123
124
+ #: mappress.php:315 mappress.php:770
125
+ msgid "Version"
126
msgstr ""
127
128
+ #: mappress.php:316
129
+ msgid "Documentation"
130
msgstr ""
131
132
+ #: mappress.php:317
133
+ msgid "Support"
134
msgstr ""
135
136
+ #: mappress.php:319
137
+ msgid "Upgrade to MapPress Pro"
138
msgstr ""
139
140
+ #: mappress.php:403
141
msgid "Are you sure you want to delete?"
142
msgstr ""
143
144
+ #: mappress.php:404
145
msgid "Delete this map?"
146
msgstr ""
147
148
+ #: mappress.php:405
149
msgid "Google cannot return directions between those addresses. There is no route between them or the routing information is not available."
150
msgstr ""
151
152
+ #: mappress.php:406
153
msgid "Error reading KML file"
154
msgstr ""
155
156
+ #: mappress.php:407
157
msgid "URL for KML file"
158
msgstr ""
159
160
+ #: mappress.php:408
161
msgid "Loading"
162
msgstr ""
163
164
+ #: mappress.php:409
165
+ msgid "%d of %d shown"
166
+ msgstr ""
167
+
168
+ #: mappress.php:410
169
msgid "Unable to get your location"
170
msgstr ""
171
172
+ #: mappress.php:411
173
msgid "No results"
174
msgstr ""
175
176
+ #: mappress.php:412
177
msgid "Save changes?"
178
msgstr ""
179
180
+ #: mappress.php:413
181
msgid "Shape"
182
msgstr ""
183
184
+ #: mappress.php:438
185
msgid "Improve this map"
186
msgstr ""
187
188
+ #: mappress.php:454 mappress.php:472
189
msgid "Streets"
190
msgstr ""
191
192
+ #: mappress.php:455
193
msgid "Outdoors"
194
msgstr ""
195
196
+ #: mappress.php:456
197
msgid "Light"
198
msgstr ""
199
200
+ #: mappress.php:457
201
msgid "Dark"
202
msgstr ""
203
204
+ #: mappress.php:458
205
msgid "Satellite"
206
msgstr ""
207
208
+ #: mappress.php:459
209
msgid "Satellite Streets"
210
msgstr ""
211
212
+ #: mappress.php:546
213
+ msgid "Settings"
214
+ msgstr ""
215
+
216
#: mappress_controls.php:93
217
msgid "Add"
218
msgstr ""
219
220
+ #: mappress_map.php:91 mappress_settings.php:306
221
msgid "MapPress"
222
msgstr ""
223
224
+ #: mappress_map.php:163
225
msgid "Map not found"
226
msgstr ""
227
228
+ #: mappress_map.php:420 pro/mappress_pro_settings.php:33
229
msgid "Filter"
230
msgstr ""
231
232
+ #: mappress_map.php:453
233
msgid "Show map"
234
msgstr ""
235
236
+ #: mappress_map.php:457
237
msgid "Map"
238
msgstr ""
239
240
+ #: mappress_map.php:458
241
msgid "List"
242
msgstr ""
243
languages/texts.php CHANGED
@@ -8,7 +8,7 @@ __("Delete");
8
__("New Map");
9
__("This post");
10
__("All posts");
11
- __("Search post title");
12
__("Map ID");
13
__("Map Title");
14
__("Untitled");
@@ -17,27 +17,26 @@ __("Save center / zoom");
17
__("Insert into post");
18
__("Edit");
19
__("No maps found");
20
- __("Load More");
21
__("New");
22
__("Custom");
23
__("Editor");
24
__("Default");
25
- __("Settings");
26
- __("Version");
27
- __("Documentation");
28
- __("Support");
29
- __("Upgrade to MapPress Pro");
30
__("MapPress database tables are missing. Please deactivate the plugin and activate it again to fix this.");
31
__("WARNING: MapPress is not compatible with the WP-Geo plugin. Please deactivate or uninstall WP-Geo before using MapPress.");
32
__("A Google Maps API key is required");
33
__("Please update your");
34
__("MapPress Settings");
35
__("Are you sure you want to delete?");
36
__("Delete this map?");
37
__("Google cannot return directions between those addresses. There is no route between them or the routing information is not available.");
38
__("Error reading KML file");
39
__("URL for KML file");
40
__("Loading");
41
__("Unable to get your location");
42
__("No results");
43
__("Save changes?");
@@ -49,6 +48,7 @@ __("Light");
49
__("Dark");
50
__("Satellite");
51
__("Satellite Streets");
52
__("Add");
53
__("MapPress");
54
__("Map not found");
8
__("New Map");
9
__("This post");
10
__("All posts");
11
+ __("Filter by title");
12
__("Map ID");
13
__("Map Title");
14
__("Untitled");
17
__("Insert into post");
18
__("Edit");
19
__("No maps found");
20
__("New");
21
__("Custom");
22
__("Editor");
23
__("Default");
24
__("MapPress database tables are missing. Please deactivate the plugin and activate it again to fix this.");
25
__("WARNING: MapPress is not compatible with the WP-Geo plugin. Please deactivate or uninstall WP-Geo before using MapPress.");
26
__("A Google Maps API key is required");
27
__("Please update your");
28
__("MapPress Settings");
29
+ __("Version");
30
+ __("Documentation");
31
+ __("Support");
32
+ __("Upgrade to MapPress Pro");
33
__("Are you sure you want to delete?");
34
__("Delete this map?");
35
__("Google cannot return directions between those addresses. There is no route between them or the routing information is not available.");
36
__("Error reading KML file");
37
__("URL for KML file");
38
__("Loading");
39
+ __("%d of %d shown");
40
__("Unable to get your location");
41
__("No results");
42
__("Save changes?");
48
__("Dark");
49
__("Satellite");
50
__("Satellite Streets");
51
+ __("Settings");
52
__("Add");
53
__("MapPress");
54
__("Map not found");
mappress.php CHANGED
@@ -4,7 +4,7 @@ Plugin Name: MapPress Maps for WordPress
4
Plugin URI: https://www.mappresspro.com/mappress
5
Author URI: https://www.mappresspro.com/chris-contact
6
Description: MapPress makes it easy to add Google and Leaflet Maps to WordPress
7
- Version: 2.50.11
8
Author: Chris Richardson
9
Text Domain: mappress-google-maps-for-wordpress
10
Thanks to all the translators and to Matthias Stasiak for his wonderful icons (http://code.google.com/p/google-maps-icons/)
@@ -35,7 +35,7 @@ if (is_dir(dirname( __FILE__ ) . '/pro')) {
35
}
36
37
class Mappress {
38
- const VERSION = '2.50.11';
39
40
static
41
$baseurl,
@@ -43,11 +43,11 @@ class Mappress {
43
$basedir,
44
$debug,
45
$loaded,
46
- $notices,
47
$options,
48
$pages,
49
$pro,
50
- $updater
51
;
52
53
function __construct() {
@@ -56,6 +56,9 @@ class Mappress {
56
self::$baseurl = plugins_url('', __FILE__);
57
self::$options = Mappress_Options::get();
58
self::$pro = is_dir(dirname( __FILE__ ) . '/pro');
59
self::debugging();
60
61
// Pro updater
@@ -101,27 +104,111 @@ class Mappress {
101
add_filter( 'heartbeat_settings', array(__CLASS__, 'heartbeat_settings'));
102
}
103
104
- static function deregister() {
105
- if (self::$loaded) {
106
- $wps = wp_scripts();
107
- foreach($wps->registered as $registered) {
108
- if (stripos($registered->src, 'maps.googleapis.com') !== false && stripos($registered->handle, 'mappress') === false) {
109
- $registered->src = self::$baseurl . '/forms/dummy.js';
110
- }
111
}
112
}
113
}
114
115
- static function heartbeat_settings( $settings ) {
116
- $settings['minimalInterval'] = 600;
117
- return $settings;
118
}
119
120
static function debugging() {
121
global $wpdb;
122
123
if (isset($_GET['mp_info'])) {
124
- echo "<b>Plugin version</b> " . self::get_version_string();
125
$posts_table = $wpdb->prefix . 'mappress_posts';
126
$results = $wpdb->get_results("SELECT postid, mapid FROM $posts_table");
127
echo "<br/>postid => mapid";
@@ -149,344 +236,333 @@ class Mappress {
149
}
150
}
151
152
- static function plugin_action_links($links, $file) {
153
- $settings_link = "<a href='" . admin_url("admin.php?page=mappress") . "'>" . __('Settings', 'mappress-google-maps-for-wordpress') . "</a>";
154
- array_unshift( $links, $settings_link );
155
- return $links;
156
}
157
158
- static function get_version_string() {
159
- $version = __('Version', 'mappress-google-maps-for-wordpress') . ":" . self::VERSION;
160
- if (self::$pro)
161
- $version .= " PRO";
162
- return $version;
163
}
164
165
- static function get_support_links($title = 'MapPress') {
166
- $html = "<div class='mapp-support'>" . self::get_version_string();
167
- $html .= " | <a target='_blank' href='https://mappresspro.com/mappress/mappress-documentation'>" . __('Documentation', 'mappress-google-maps-for-wordpress') . "</a>";
168
- $html .= " | <a target='_blank' href='https://mappresspro.com/chris-contact'>" . __('Support', 'mappress-google-maps-for-wordpress') . "</a>";
169
- if (!self::$pro)
170
- $html .= "<a class='button button-primary' href='https://mappresspro.com/mappress' target='_blank'>" . __('Upgrade to MapPress Pro', 'mappress-google-maps-for-wordpress') . "</a>";
171
- $html .= "</div>";
172
- echo $html;
173
- }
174
175
- static function ajax_response($status, $data=null, $gzip = false) {
176
- $output = trim(ob_get_clean()); // Ignore whitespace, any other output is an error
177
- header( "Content-Type: application/json" );
178
179
- if ($gzip && get_site_option('can_compress_scripts'))
180
- ob_start('ob_gzhandler');
181
else
182
- ob_start();
183
-
184
- $response = json_encode(array('status' => $status, 'output' => $output, 'data' => $data));
185
- die ($response);
186
- }
187
188
- static function admin_menu() {
189
- // Settings
190
- $settings = (self::$pro) ? new Mappress_Pro_Settings() : new Mappress_Settings();
191
- self::$pages[] = add_menu_page('MapPress', 'MapPress', 'manage_options', 'mappress', array(&$settings, 'options_page'), 'dashicons-location');
192
}
193
194
/**
195
- * Automatic map display.
196
- * If set, the [mappress] shortcode will be prepended/appended to the post body, once for each map
197
- * The shortcode is used so it can be filtered - for example WordPress will remove it in excerpts by default.
198
*
199
- * @param mixed $content
200
*/
201
- static function the_content($content="") {
202
- global $post;
203
- global $wp_current_filter;
204
-
205
- $autodisplay = self::$options->autodisplay;
206
-
207
- // No auto display
208
- if (!$autodisplay || $autodisplay == 'none')
209
- return $content;
210
-
211
- // Check if in the loop, to prevent conflicts with JetPack - see http://wordpress.org/support/topic/easy-adsense-lite-and-jetpack
212
- if (!in_the_loop())
213
- return $content;
214
215
- // Don't add the shortcode for feeds or admin screens
216
- if (is_feed() || self::is_admin())
217
- return $content;
218
219
- // No shortcode if post is password protected
220
- if (post_password_required())
221
- return $content;
222
223
- // If this is an excerpt don't attempt to add the map to it
224
- if (in_array('get_the_excerpt', $wp_current_filter))
225
- return $content;
226
227
- // Don't auto display if the post already contains a MapPress shortcode
228
- if (stristr($content, '[mappress') !== false || stristr($content, '[mashup') !== false)
229
- return $content;
230
231
- // Get maps associated with post
232
- $mapids = Mappress_Map::get_list($post->ID, 'ids');
233
- if (empty($mapids))
234
- return $content;
235
236
- // Add the shortcode once for each map
237
- $shortcodes = "";
238
- foreach($mapids as $mapid)
239
- $shortcodes .= '<p>[mappress mapid="' . $mapid . '"]</p>';
240
241
- if ($autodisplay == 'top')
242
- return $shortcodes . $content;
243
- else
244
- return $content . $shortcodes;
245
}
246
247
/**
248
- * Map a shortcode in a post.
249
*
250
- * @param mixed $atts - shortcode attributes
251
*/
252
- static function shortcode_map($atts='') {
253
- global $post;
254
255
- // No feeds
256
- if (is_feed())
257
- return;
258
259
- // Try to protect against calls to do_shortcode() in the post editor...
260
- if (self::is_admin())
261
- return;
262
-
263
- $atts = self::scrub_atts($atts);
264
-
265
- // Determine what to show
266
- $mapid = (isset($atts['mapid'])) ? $atts['mapid'] : null;
267
268
- if ($mapid) {
269
- // Show map by mapid
270
- $map = Mappress_Map::get($mapid);
271
- } else {
272
- // Get the first map attached to the post
273
- $maps = Mappress_Map::get_list($post->ID);
274
- $map = (isset ($maps[0]) ? $maps[0] : false);
275
}
276
277
- if (!$map)
278
- return;
279
-
280
- return $map->display($atts);
281
}
282
283
- /**
284
- * Process the mashup shortcode
285
- *
286
- */
287
- static function shortcode_mashup($atts='') {
288
- // No feeds
289
- if (is_feed())
290
- return;
291
-
292
- // Prevent do_shortcode() in the post editor, but allow for AJAX calls from other plugins (which run as admin)
293
- if (self::is_admin())
294
- return;
295
-
296
- $atts = self::scrub_atts($atts);
297
- return self::get_mashup($atts);
298
}
299
300
- /**
301
- * Get a mashup - used by shortcode and widget
302
- *
303
- * @param mixed $atts
304
- */
305
- static function get_mashup($atts) {
306
- global $wp_query;
307
-
308
- $mashup = new Mappress_Map($atts);
309
- $mashup->query = Mappress_Query::parse_query($atts);
310
-
311
- // If parameter test="true", output the query result without using a map
312
- if (isset($_GET['mp_test']) || (isset($atts['test']) && $atts['test'])) {
313
- $wpq = new WP_Query($mashup->query);
314
- return "<pre>" . print_r($wpq, true) . "</pre>";
315
- }
316
-
317
- // If using query 'current' then create a static map for current posts
318
- if (empty($mashup->query))
319
- $mashup->pois = Mappress_Query::get_pois($wp_query);
320
-
321
- // If 'hideEmpty' is set, try to suppress the map if there are no POIs
322
- if ($mashup->hideEmpty) {
323
- // 'current' query - check found pois
324
- if (empty($mashup->query) && empty($mashup->pois))
325
- return "";
326
-
327
- // Other queries - check for at least 1 result
328
- if (Mappress_Query::is_empty($mashup->query))
329
- return "";
330
- }
331
- return $mashup->display();
332
}
333
334
- static function wp_head() {
335
- echo "\r\n<!-- MapPress Easy Google Maps " . self::get_version_string() . " (http://www.mappresspro.com/mappress) -->\r\n";
336
- echo "<script type='text/javascript'>mapp = window.mapp || {}; mapp.data = [];</script>\r\n";
337
}
338
339
- /**
340
- * Scripts & styles for frontend
341
- * CSS is loaded from: child theme, theme, or plugin directory
342
- */
343
- static function wp_enqueue_scripts() {
344
- // Leaflet CSS
345
- if (self::$options->engine == 'leaflet')
346
- wp_enqueue_style('mappress-leaflet', self::$baseurl . '/css/leaflet/leaflet.css', null, '1.3.1');
347
348
- // Mappress CSS from plugin directory
349
- wp_enqueue_style('mappress', self::$baseurl . '/css/mappress.css', null, self::VERSION);
350
351
- // Mappress CSS from theme directory
352
- if ( @file_exists( get_stylesheet_directory() . '/mappress.css' ) )
353
- $file = get_stylesheet_directory_uri() . '/mappress.css';
354
- elseif ( @file_exists( get_template_directory() . '/mappress.css' ) )
355
- $file = get_template_directory_uri() . '/mappress.css';
356
357
- if (isset($file))
358
- wp_enqueue_style('mappress-custom', $file, array('mappress'), self::VERSION);
359
360
- // Load scripts in header
361
- if (!self::footer())
362
- self::load();
363
- }
364
365
- // Scripts & styles for admin
366
- // CSS is always loaded from the plugin directory
367
- static function admin_enqueue_scripts($hook) {
368
- // Some plugins call this without setting $hook
369
- if (empty($hook))
370
- return;
371
372
- // Network admin has no pages
373
- if (empty(self::$pages))
374
- return;
375
376
- $editing = in_array($hook, array('edit.php', 'post.php', 'post-new.php'));
377
378
- // Settings scripts
379
- if ($hook == self::$pages[0]) {
380
- self::load('settings');
381
- if (function_exists('wp_enqueue_code_editor'))
382
- wp_enqueue_code_editor(array( 'type' => 'php' ));
383
}
384
385
- // Leaflet CSS
386
- if (self::$options->engine == 'leaflet')
387
- wp_enqueue_style('mappress-leaflet', self::$baseurl . "/css/leaflet/leaflet.css", null, '1.3.1');
388
-
389
- // Mappress CSS
390
- if (in_array($hook, self::$pages) || $editing) {
391
- wp_enqueue_style('mappress', self::$baseurl . '/css/mappress.css', null, self::VERSION);
392
- wp_enqueue_style('mappress-admin', self::$baseurl . '/css/mappress_admin.css', null, self::VERSION);
393
- }
394
- }
395
396
- static function plugins_loaded() {
397
- load_plugin_textdomain('mappress-google-maps-for-wordpress', false, dirname(self::$basename) . '/languages');
398
}
399
400
401
- /**
402
- * There are several WP bugs that prevent correct activation in multisitie:
403
- * http://core.trac.wordpress.org/ticket/14170
404
- * http://core.trac.wordpress.org/ticket/14718)
405
- *
406
- */
407
- static function init() {
408
- // Register hooks and create database tables
409
- Mappress_Map::register();
410
411
- // Register static classes
412
- if (self::$pro) {
413
- Mappress_Icons::register();
414
- Mappress_Meta::register();
415
- Mappress_Pro_Settings::register();
416
- Mappress_Query::register();
417
- Mappress_Template::register();
418
- Mappress_Widget::register();
419
- }
420
421
- // Check if upgrade is needed
422
- $current_version = get_option('mappress_version');
423
424
- // Convert meta key settings
425
- if ($current_version < '2.45') {
426
- $old = (object) get_option('mappress_options');
427
- foreach(array('address1', 'address2', 'address3', 'address4', 'address5', 'address6', 'lat', 'lng', 'iconid', 'title', 'body', 'zoom') as $i => $key) {
428
- if ($i < 6) {
429
- $value = (isset($old->metaKeyAddress[$i])) ? $old->metaKeyAddress[$i] : null;
430
- } else {
431
- $old_key = 'metaKey' . ucfirst($key);
432
- $value = (isset($old->$old_key)) ? $old->$old_key : null;
433
- }
434
- if ($value)
435
- Mappress::$options->metaKeys[$key] = $value;
436
- }
437
- Mappress::$options->save();
438
}
439
440
- update_option('mappress_version', self::VERSION);
441
- }
442
443
- // Sanity checks via notices
444
- static function admin_notices() {
445
- global $wpdb;
446
- $notices = array();
447
448
- $error = "<div class='notice error'><p>%s</p></div>";
449
- $map_table = $wpdb->prefix . "mappress_maps";
450
- $exists = $wpdb->get_var("show tables like '$map_table'");
451
452
- if (!$exists) {
453
- printf($error, __("MapPress database tables are missing. Please deactivate the plugin and activate it again to fix this.", 'mappress-google-maps-for-wordpress'));
454
- return;
455
- }
456
457
- if (class_exists('WPGeo')) {
458
- printf($error, __("WARNING: MapPress is not compatible with the WP-Geo plugin. Please deactivate or uninstall WP-Geo before using MapPress.", 'mappress-google-maps-for-wordpress'));
459
- return;
460
}
461
462
- if (self::$options->engine != 'leaflet' && !self::get_api_keys()->browser)
463
- printf($error, sprintf("%s. %s <a href='%s'>%s</a>.", __("A Google Maps API key is required", 'mappress-google-maps-for-wordpress'), __("Please update your", 'mappress-google-maps-for-wordpress'), admin_url('admin.php?page=mappress'), __('MapPress Settings', 'mappress-google-maps-for-wordpress')));
464
465
- // Print notices
466
- if (is_super_admin()) {
467
- $dismissed = get_user_meta(get_current_user_id(), 'mappress-notices', true);
468
- $dismissed = (is_array($dismissed)) ? $dismissed : array();
469
- $notices = array_diff_key($notices, $dismissed);
470
- foreach($notices as $key => $msg)
471
- echo "<div class='notice error is-dismissible' data-mapp-dismiss='$key'><p>$msg</p></div>";
472
473
- if ($notices) {
474
- echo Mappress::script("jQuery('[data-mapp-dismiss]').on('click', '.notice-dismiss', function(e) {
475
- jQuery.post(ajaxurl, { action : 'mapp_dismiss', key : jQuery(this).closest('.notice').attr('data-mapp-dismiss') });
476
- });");
477
- }
478
- }
479
}
480
481
- static function ajax_dismiss() {
482
- $key = (isset($_POST['key'])) ? $_POST['key'] : null;
483
- if ($key) {
484
- $user_id = get_current_user_id();
485
- $dismissed = get_user_meta($user_id, 'mappress-notices', true);
486
- $dismissed = (is_array($dismissed)) ? $dismissed : array();
487
- $dismissed[$key] = true;
488
- update_user_meta($user_id, 'mappress-notices', $dismissed);
489
- }
490
}
491
492
/**
@@ -529,7 +605,71 @@ class Mappress {
529
$atts['center'] = ($map && $map->pois) ? $map->pois[0]->point['lat'] . ',' . $map->pois[0]->point['lng'] : null;
530
}
531
532
- return $atts;
533
}
534
535
static function string_to_boolean($data) {
@@ -547,234 +687,90 @@ class Mappress {
547
return $data;
548
}
549
550
- static function load($type = null) {
551
- if (self::$loaded)
552
- return;
553
- else
554
- self::$loaded = true;
555
-
556
- $dev = self::dev();
557
- $version = (self::$pro) ? self::VERSION . 'PRO' : self::VERSION;
558
- $footer = self::footer();
559
-
560
- // Directories
561
- $min = ($dev) ? "" : ".min";
562
- $js = ($dev) ? "http://localhost/$dev/wp-content/plugins/mappress-google-maps-for-wordpress/src" : self::$baseurl . '/js';
563
-
564
- if (self::$options->engine == 'leaflet') {
565
- wp_enqueue_script("mappress-leaflet", $js . "/leaflet/leaflet.js", null, '1.3.1', $footer);
566
- wp_enqueue_script("mappress-omnivore", $js . "/leaflet/leaflet-omnivore.min.js", null, '0.3.1', $footer);
567
- wp_enqueue_script("mappress-algolia-places", $js . "/algolia/placesAutocompleteDataset.min.js", null, '1.7.2', $footer);
568
- wp_enqueue_script("mappress-algolia-search", $js . "/algolia/algoliasearchLite.min.js", null, '3', $footer);
569
-
570
- } else {
571
- $language = self::get_language();
572
- $language = ($language) ? "&language=$language" : '';
573
- $apiversion = ($dev) ? 'v=3.exp' : 'v=3';
574
- $apikey = "&key=" . self::get_api_keys()->browser;
575
- $libs = ($type == 'editor') ? '&libraries=places,drawing' : '&libraries=places';
576
- wp_enqueue_script("mappress-gmaps", "https://maps.googleapis.com/maps/api/js?{$apiversion}{$language}{$libs}{$apikey}", null, null, $footer);
577
- }
578
-
579
- if ($type == 'editor')
580
- wp_enqueue_script('mappress_editor', $js . "/mappress_editor$min.js", array('jquery', 'jquery-ui-position', 'jquery-ui-sortable'), $version, $footer);
581
-
582
- if ($type == 'settings')
583
- wp_enqueue_script('mappress_settings', $js . "/mappress_settings$min.js", array('postbox', 'jquery', 'jquery-ui-position', 'jquery-ui-sortable'), $version, $footer);
584
-
585
- // Autocomplete
586
- wp_enqueue_script('mappress-algolia-autocomplete', $js . "/algolia/autocomplete.jquery.min.js", array('jquery'), $version, $footer);
587
-
588
- // mappress.js includes loader, so must come after editor
589
- wp_enqueue_script('mappress', $js . "/mappress$min.js", array('underscore', 'jquery'), $version, $footer);
590
-
591
- if ($dev) {
592
- foreach(array('directions', 'geocoding', 'icons', 'infobox', 'lib', 'places', 'poi', 'widgets', 'loader') as $script)
593
- wp_enqueue_script($script, $js . "/mappress_{$script}.js", null, $version, $footer);
594
- }
595
-
596
- wp_localize_script('mappress', 'mappl10n', self::l10n());
597
-
598
- // Templates
599
- if ($type != 'editor')
600
- Mappress_Template::load($footer);
601
- }
602
-
603
- static function footer() {
604
- $infinite = class_exists( 'Jetpack' ) && Jetpack::is_module_active( 'infinite-scroll' );
605
- return (is_admin() || self::$options->footer && !$infinite);
606
- }
607
-
608
- static function dev() {
609
- if (defined('MAPPRESS_DEV') && MAPPRESS_DEV)
610
- return MAPPRESS_DEV;
611
- else if (isset($_REQUEST['mp_dev']))
612
- return ($_REQUEST['mp_dev']) ? $_REQUEST['mp_dev'] : 'dev';
613
- else
614
- return false;
615
- }
616
-
617
- static function l10n() {
618
global $post;
619
620
- $l10n = array(
621
- 'delete_prompt' => __('Are you sure you want to delete?', 'mappress-google-maps-for-wordpress'),
622
- 'delete_map_prompt' => __('Delete this map?', 'mappress-google-maps-for-wordpress'),
623
- 'dir_error' => __('Google cannot return directions between those addresses. There is no route between them or the routing information is not available.', 'mappress-google-maps-for-wordpress'),
624
- 'kml_error' => __('Error reading KML file', 'mappress-google-maps-for-wordpress'),
625
- 'layer' => __('URL for KML file', 'mappress-google-maps-for-wordpress'),
626
- 'loading' => "<span class='mapp-spinner'></span>" . __('Loading', 'mappress-google-maps-for-wordpress'),
627
- 'no_geolocate' => __('Unable to get your location', 'mappress-google-maps-for-wordpress'),
628
- 'no_results' => __('No results', 'mappress-google-maps-for-wordpress'),
629
- 'save' => __('Save changes?', 'mappress-google-maps-for-wordpress'),
630
- 'shape' => __('Shape', 'mappress-google-maps-for-wordpress'),
631
- 'untitled' => __('Untitled', 'mappress-google-maps-for-wordpress')
632
- );
633
-
634
- // Globals
635
- $l10n['options'] = array(
636
- 'admin' => current_user_can('administrator'),
637
- 'ajaxurl' => admin_url('admin-ajax.php'),
638
- 'debug' => Mappress::$debug,
639
- 'iconsUrl' => (self::$pro) ? Mappress_Icons::$icons_url : null,
640
- 'language' => self::get_language(),
641
- 'mapbox' => self::get_api_keys()->mapbox,
642
- 'mini' => 350,
643
- 'postid' => ($post) ? $post->ID : null,
644
- 'pro' => self::$pro,
645
- 'siteUrl' => site_url(),
646
- 'standardIconsUrl' => (self::$pro) ? Mappress_Icons::$standard_icons_url : null
647
- );
648
649
- // Leaflet layers for mapbox / OSM
650
- if (self::$options->engine == 'leaflet') {
651
- // Providers
652
- $providers = array(
653
- 'mapbox' => array(
654
- 'accessToken' => self::get_api_keys()->mapbox,
655
- 'attribution' => "<a href='https://www.mapbox.com/about/maps/' target='_blank'>&copy; Mapbox &copy; OpenStreetMap</a> <a class='mapbox-improve-map' href='https://www.mapbox.com/map-feedback/' target='_blank'>" . __('Improve this map', 'mappress-google-maps-for-wordpress') . "</a>",
656
- 'fresh' => true, // Fresh = true in order to provide updated studio styles
657
- 'url' => "https://api.mapbox.com/styles/v1/{user}/{id}/tiles/256/{z}/{x}/{y}{r}?access_token={accessToken}&fresh={fresh}",
658
- 'zoomOffset' => 0
659
- ),
660
- 'osm' => array(
661
- 'attribution' => 'Map data ©<a href="https://openstreetmap.org">OpenStreetMap</a>',
662
- 'url' => 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'
663
- )
664
- );
665
- $l10n['options']['providers'] = apply_filters('mappress_tile_providers', $providers);
666
667
- // Baselayers
668
- $baselayers = array();
669
- if (self::get_api_keys()->mapbox) {
670
- $baselayers = array(
671
- array('provider' => 'mapbox', 'user' => 'mapbox', 'id' => 'streets-v10', 'name' => 'streets', 'label' => __('Streets', 'mappress-google-maps-for-wordpress')),
672
- array('provider' => 'mapbox', 'user' => 'mapbox', 'id' => 'outdoors-v10', 'name' => 'outdoors', 'label' => __('Outdoors', 'mappress-google-maps-for-wordpress')),
673
- array('provider' => 'mapbox', 'user' => 'mapbox', 'id' => 'light-v9', 'name' => 'light', 'label' => __('Light', 'mappress-google-maps-for-wordpress')),
674
- array('provider' => 'mapbox', 'user' => 'mapbox', 'id' => 'dark-v9', 'name' => 'dark', 'label' => __('Dark', 'mappress-google-maps-for-wordpress')),
675
- array('provider' => 'mapbox', 'user' => 'mapbox', 'id' => 'satellite-v9', 'name' => 'satellite', 'label' => __('Satellite', 'mappress-google-maps-for-wordpress')),
676
- array('provider' => 'mapbox', 'user' => 'mapbox', 'id' => 'satellite-streets-v10', 'name' => 'satellite-streets', 'label' => __('Satellite Streets', 'mappress-google-maps-for-wordpress'))
677
- );
678
679
- // Mapbox studio styles (remove base url and everything after '.html', remainder is user/id)
680
- foreach(self::$options->mapboxStyles as $name => $url) {
681
- $url = strstr($url, '.html', true);
682
- $url = str_ireplace('https://api.mapbox.com/styles/v1/', '', $url);
683
- $parts = explode('/', $url);
684
- if (count($parts) == 2)
685
- $baselayers[] = array('provider' => 'mapbox', 'user' => $parts[0], 'id' => $parts[1], 'name' => $name, 'label' => $name);
686
- }
687
- } else {
688
- $baselayers = array(
689
- array('provider' => 'osm', 'id' => 'osm', 'name' => 'osm', 'label' => __('Streets', 'mappress-google-maps-for-wordpress'))
690
- );
691
- }
692
693
- // User-defined baselayers
694
- $l10n['options']['baseLayers'] = apply_filters('mappress_baselayers', $baselayers);
695
- } else {
696
- // Google wizard styles
697
- $l10n['options']['styles'] = array();
698
- foreach(self::$options->styles as $id => &$style)
699
- $l10n['options']['styles'][$id] = json_decode($style);
700
- }
701
702
- // Global settings
703
- $options = array('autoupdate', 'country', 'defaultIcon', 'directions', 'directionsServer', 'engine', 'iconScale', 'iwType', 'mashupBody', 'mashupClick', 'poiZoom', 'radius', 'search', 'size', 'sizes', 'style', 'tiles');
704
- foreach($options as $option)
705
- $l10n['options'][$option] = self::$options->$option;
706
707
- return $l10n;
708
- }
709
710
- /**
711
- * Get language using settings/WPML/qTrans
712
- *
713
- */
714
- static function get_language() {
715
- // WPML
716
- if (defined('ICL_LANGUAGE_CODE'))
717
- $lang = ICL_LANGUAGE_CODE;
718
719
- // qTranslate
720
- else if (function_exists('qtrans_getLanguage'))
721
- $lang = qtrans_getLanguage();
722
723
else
724
- $lang = self::$options->language;
725
-
726
- return ($lang) ? $lang : null;
727
}
728
729
/**
730
- * Switch WPML language during AJAX calls
731
*/
732
- static function set_language() {
733
- global $sitepress;
734
- if ($sitepress && method_exists($sitepress, 'switch_lang')) {
735
- $language = self::get_language();
736
- $sitepress->switch_lang($language);
737
- }
738
- }
739
-
740
- static function get_api_keys() {
741
- $results = (object) array('browser' => self::$options->apiKey, 'server' => self::$options->apiKeyServer, 'mapbox' => self::$options->mapbox);
742
- if (empty($results->browser) && defined('MAPPRESS_APIKEY'))
743
- $results->browser = MAPPRESS_APIKEY;
744
- if (empty($results->server) && defined('MAPPRESS_APIKEY_SERVER'))
745
- $results->server = MAPPRESS_APIKEY_SERVER;
746
- if (empty($results->mapbox) && defined('MAPPRESS_APIKEY_MAPBOX'))
747
- $result->mapbox = MAPPRESS_APIKEY_MAPBOX;
748
- return $results;
749
- }
750
751
- static function script($script, $ready = false) {
752
- $html = "\r\n<script type='text/javascript'>\r\n";
753
- $html .= ($ready) ? "jQuery(document).ready(function() { $script });" : $script;
754
- $html .= "\r\n</script>";
755
- return $html;
756
- }
757
758
- static function script_template($template, $id = null) {
759
- $id = ($id) ? "id='mapp-tmpl-{$id}'" : '';
760
- $html = "\r\n<script type='text/template' $id>\r\n{$template}\r\n</script>\r\n";
761
- return $html;
762
- }
763
764
- static function ssl() {
765
- return (is_ssl() || !filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE));
766
- }
767
768
- static function is_localhost() {
769
- return !filter_var($_SERVER['SERVER_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE);
770
}
771
772
- // WP returns is_admin() = true during AJAX calls, this one returns false in that case
773
- static function is_admin() {
774
- $ajax = defined('DOING_AJAX') && DOING_AJAX;
775
- return is_admin() && !$ajax;
776
}
777
- } // End Mappress class
778
779
$mappress = new Mappress();
780
?>
4
Plugin URI: https://www.mappresspro.com/mappress
5
Author URI: https://www.mappresspro.com/chris-contact
6
Description: MapPress makes it easy to add Google and Leaflet Maps to WordPress
7
+ Version: 2.52.1
8
Author: Chris Richardson
9
Text Domain: mappress-google-maps-for-wordpress
10
Thanks to all the translators and to Matthias Stasiak for his wonderful icons (http://code.google.com/p/google-maps-icons/)
35
}
36
37
class Mappress {
38
+ const VERSION = '2.52.1';
39
40
static
41
$baseurl,
43
$basedir,
44
$debug,
45
$loaded,
46
$options,
47
$pages,
48
$pro,
49
+ $updater,
50
+ $version
51
;
52
53
function __construct() {
56
self::$baseurl = plugins_url('', __FILE__);
57
self::$options = Mappress_Options::get();
58
self::$pro = is_dir(dirname( __FILE__ ) . '/pro');
59
+ self::$version = (self::$pro) ? self::VERSION . " PRO" : self::VERSION;
60
+ self::$version = (defined('MAPPRESS_DEV') && MAPPRESS_DEV) ? self::$version . '-' . rand(0,99999) : self::$version;
61
+
62
self::debugging();
63
64
// Pro updater
104
add_filter( 'heartbeat_settings', array(__CLASS__, 'heartbeat_settings'));
105
}
106
107
+ // Scripts & styles for admin
108
+ // CSS is always loaded from the plugin directory
109
+ static function admin_enqueue_scripts($hook) {
110
+ // Some plugins call this without setting $hook
111
+ if (empty($hook))
112
+ return;
113
+
114
+ // Network admin has no pages
115
+ if (empty(self::$pages))
116
+ return;
117
+
118
+ $editing = in_array($hook, array('edit.php', 'post.php', 'post-new.php'));
119
+
120
+ // Settings scripts
121
+ if ($hook == self::$pages[0]) {
122
+ self::load('settings');
123
+ if (function_exists('wp_enqueue_code_editor'))
124
+ wp_enqueue_code_editor(array( 'type' => 'php' ));
125
+ }
126
+
127
+ // Leaflet CSS
128
+ if (self::$options->engine == 'leaflet')
129
+ wp_enqueue_style('mappress-leaflet', self::$baseurl . "/css/leaflet/leaflet.css", null, '1.3.1');
130
+
131
+ // Mappress CSS
132
+ if (in_array($hook, self::$pages) || $editing) {
133
+ wp_enqueue_style('mappress', self::$baseurl . '/css/mappress.css', null, self::$version);
134
+ wp_enqueue_style('mappress-admin', self::$baseurl . '/css/mappress_admin.css', null, self::$version);
135
+ }
136
+ }
137
+
138
+ static function admin_menu() {
139
+ // Settings
140
+ $settings = (self::$pro) ? new Mappress_Pro_Settings() : new Mappress_Settings();
141
+ self::$pages[] = add_menu_page('MapPress', 'MapPress', 'manage_options', 'mappress', array(&$settings, 'options_page'), 'dashicons-location');
142
+ }
143
+
144
+ static function admin_notices() {
145
+ global $wpdb;
146
+ $notices = array();
147
+
148
+ $error = "<div class='notice error'><p>%s</p></div>";
149
+ $map_table = $wpdb->prefix . "mappress_maps";
150
+ $exists = $wpdb->get_var("show tables like '$map_table'");
151
+
152
+ if (!$exists) {
153
+ printf($error, __("MapPress database tables are missing. Please deactivate the plugin and activate it again to fix this.", 'mappress-google-maps-for-wordpress'));
154
+ return;
155
+ }
156
+
157
+ if (class_exists('WPGeo')) {
158
+ printf($error, __("WARNING: MapPress is not compatible with the WP-Geo plugin. Please deactivate or uninstall WP-Geo before using MapPress.", 'mappress-google-maps-for-wordpress'));
159
+ return;
160
+ }
161
+
162
+ if (self::$options->engine != 'leaflet' && !self::get_api_keys()->browser)
163
+ printf($error, sprintf("%s. %s <a href='%s'>%s</a>.", __("A Google Maps API key is required", 'mappress-google-maps-for-wordpress'), __("Please update your", 'mappress-google-maps-for-wordpress'), admin_url('admin.php?page=mappress'), __('MapPress Settings', 'mappress-google-maps-for-wordpress')));
164
+
165
+ // Print notices
166
+ if (is_super_admin()) {
167
+ $dismissed = get_user_meta(get_current_user_id(), 'mappress-dismissed', true);
168
+ $dismissed = (is_array($dismissed)) ? $dismissed : array();
169
+
170
+ // Print notices
171
+ $notices = array_diff_key($notices, $dismissed);
172
+ foreach($notices as $key => $msg)
173
+ echo "<div class='notice error is-dismissible' data-mapp-dismiss='$key'><p>$msg</p></div>";
174
+
175
+ if ($notices) {
176
+ echo Mappress::script("jQuery('[data-mapp-dismiss]').on('click', '.notice-dismiss', function(e) {
177
+ jQuery.post(ajaxurl, { action : 'mapp_dismiss', key : jQuery(this).closest('.notice').attr('data-mapp-dismiss') });
178
+ });");
179
}
180
}
181
}
182
183
+ static function ajax_dismiss() {
184
+ $key = (isset($_POST['key'])) ? $_POST['key'] : null;
185
+ if ($key) {
186
+ $user_id = get_current_user_id();
187
+ $dismissed = get_user_meta($user_id, 'mappress-dismissed', true);
188
+ $dismissed = (is_array($dismissed)) ? $dismissed : array();
189
+ $dismissed[$key] = true;
190
+ update_user_meta($user_id, 'mappress-dismissed', $dismissed);
191
+ }
192
+ }
193
+
194
+ static function ajax_response($status, $data=null, $gzip = false) {
195
+ $output = trim(ob_get_clean()); // Ignore whitespace, any other output is an error
196
+ header( "Content-Type: application/json" );
197
+
198
+ if ($gzip && get_site_option('can_compress_scripts'))
199
+ ob_start('ob_gzhandler');
200
+ else
201
+ ob_start();
202
+
203
+ $response = json_encode(array('status' => $status, 'output' => $output, 'data' => $data));
204
+ die ($response);
205
}
206
207
static function debugging() {
208
global $wpdb;
209
210
if (isset($_GET['mp_info'])) {
211
+ echo "<b>Plugin</b> " . self::$version;
212
$posts_table = $wpdb->prefix . 'mappress_posts';
213
$results = $wpdb->get_results("SELECT postid, mapid FROM $posts_table");
214
echo "<br/>postid => mapid";
236
}
237
}
238
239
+ static function deregister() {
240
+ if (self::$loaded) {
241
+ $wps = wp_scripts();
242
+ foreach($wps->registered as $registered) {
243
+ if (stripos($registered->src, 'maps.googleapis.com') !== false && stripos($registered->handle, 'mappress') === false) {
244
+ $registered->src = self::$baseurl . '/forms/dummy.js';
245
+ }
246
+ }
247
+ }
248
}
249
250
+ static function get_api_keys() {
251
+ $results = (object) array('browser' => self::$options->apiKey, 'server' => self::$options->apiKeyServer, 'mapbox' => self::$options->mapbox);
252
+ if (empty($results->browser) && defined('MAPPRESS_APIKEY'))
253
+ $results->browser = MAPPRESS_APIKEY;
254
+ if (empty($results->server) && defined('MAPPRESS_APIKEY_SERVER'))
255
+ $results->server = MAPPRESS_APIKEY_SERVER;
256
+ if (empty($results->mapbox) && defined('MAPPRESS_APIKEY_MAPBOX'))
257
+ $result->mapbox = MAPPRESS_APIKEY_MAPBOX;
258
+ return $results;
259
}
260
261
+ /**
262
+ * Get language using settings/WPML/qTrans
263
+ *
264
+ */
265
+ static function get_language() {
266
+ // WPML
267
+ if (defined('ICL_LANGUAGE_CODE'))
268
+ $lang = ICL_LANGUAGE_CODE;
269
270
+ // qTranslate
271
+ else if (function_exists('qtrans_getLanguage'))
272
+ $lang = qtrans_getLanguage();
273
274
else
275
+ $lang = self::$options->language;
276
277
+ return ($lang) ? $lang : null;
278
}
279
280
/**
281
+ * Get a mashup - used by shortcode and widget
282
*
283
+ * @param mixed $atts
284
*/
285
+ static function get_mashup($atts) {
286
+ global $wp_query;
287
288
+ $mashup = new Mappress_Map($atts);
289
+ $mashup->query = Mappress_Query::parse_query($atts);
290
291
+ // If parameter test="true", output the query result without using a map
292
+ if (isset($_GET['mp_test']) || (isset($atts['test']) && $atts['test'])) {
293
+ $wpq = new WP_Query($mashup->query);
294
+ return "<pre>" . print_r($wpq, true) . "</pre>";
295
+ }
296
297
+ // If using query 'current' then create a static map for current posts
298
+ if (empty($mashup->query))
299
+ $mashup->pois = Mappress_Query::get_pois($wp_query);
300
301
+ // If 'hideEmpty' is set, try to suppress the map if there are no POIs
302
+ if ($mashup->hideEmpty) {
303
+ // 'current' query - check found pois
304
+ if (empty($mashup->query) && empty($mashup->pois))
305
+ return "";
306
307
+ // Other queries - check for at least 1 result
308
+ if (Mappress_Query::is_empty($mashup->query))
309
+ return "";
310
+ }
311
+ return $mashup->display();
312
+ }
313
314
+ static function get_support_links($title = 'MapPress') {
315
+ $html = "<div class='mapp-support'>" . __('Version', 'mappress-google-maps-for-wordpress') . ':' . self::$version;
316
+ $html .= " | <a target='_blank' href='https://mappresspro.com/mappress/mappress-documentation'>" . __('Documentation', 'mappress-google-maps-for-wordpress') . "</a>";
317
+ $html .= " | <a target='_blank' href='https://mappresspro.com/chris-contact'>" . __('Support', 'mappress-google-maps-for-wordpress') . "</a>";
318
+ if (!self::$pro)
319
+ $html .= "<a class='button button-primary' href='https://mappresspro.com/mappress' target='_blank'>" . __('Upgrade to MapPress Pro', 'mappress-google-maps-for-wordpress') . "</a>";
320
+ $html .= "</div>";
321
+ echo $html;
322
+ }
323
324
+ static function heartbeat_settings( $settings ) {
325
+ $settings['minimalInterval'] = 600;
326
+ return $settings;
327
}
328
329
/**
330
+ * There are several WP bugs that prevent correct activation in multisitie:
331
+ * http://core.trac.wordpress.org/ticket/14170
332
+ * http://core.trac.wordpress.org/ticket/14718)
333
*
334
*/
335
+ static function init() {
336
+ // Register hooks and create database tables
337
+ Mappress_Map::register();
338
339
+ // Register static classes
340
+ if (self::$pro) {
341
+ Mappress_Icons::register();
342
+ Mappress_Meta::register();
343
+ Mappress_Pro_Settings::register();
344
+ Mappress_Query::register();
345
+ Mappress_Template::register();
346
+ Mappress_Widget::register();
347
+ }
348
349
+ // Check if upgrade is needed
350
+ $current_version = get_option('mappress_version');
351
352
+ // Convert meta key settings
353
+ if ($current_version < '2.45') {
354
+ $old = (object) get_option('mappress_options');
355
+ foreach(array('address1', 'address2', 'address3', 'address4', 'address5', 'address6', 'lat', 'lng', 'iconid', 'title', 'body', 'zoom') as $i => $key) {
356
+ if ($i < 6) {
357
+ $value = (isset($old->metaKeyAddress[$i])) ? $old->metaKeyAddress[$i] : null;
358
+ } else {
359
+ $old_key = 'metaKey' . ucfirst($key);
360
+ $value = (isset($old->$old_key)) ? $old->$old_key : null;
361
+ }
362
+ if ($value)
363
+ Mappress::$options->metaKeys[$key] = $value;
364
+ }
365
+ Mappress::$options->save();
366
}
367
368
+ update_option('mappress_version', self::VERSION);
369
}
370
371
+ // WP returns is_admin() = true during AJAX calls, this one returns false in that case
372
+ static function is_admin() {
373
+ $ajax = defined('DOING_AJAX') && DOING_AJAX;
374
+ return is_admin() && !$ajax;
375
}
376
377
+ static function is_dev() {
378
+ if (defined('MAPPRESS_DEV') && MAPPRESS_DEV)
379
+ return MAPPRESS_DEV;
380
+ else if (isset($_REQUEST['mp_dev']))
381
+ return ($_REQUEST['mp_dev']) ? $_REQUEST['mp_dev'] : 'dev';
382
+ else
383
+ return false;
384
}
385
386
+ static function is_footer() {
387
+ $infinite = class_exists( 'Jetpack' ) && Jetpack::is_module_active( 'infinite-scroll' );
388
+ return (is_admin() || self::$options->footer && !$infinite);
389
}
390
391
+ static function is_localhost() {
392
+ return !filter_var($_SERVER['SERVER_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE);
393
+ }
394
395
+ static function is_ssl() {
396
+ return (is_ssl() || !filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE));
397
+ }
398
399
+ static function l10n() {
400
+ global $post;
401
402
+ $l10n = array(
403
+ 'delete_prompt' => __('Are you sure you want to delete?', 'mappress-google-maps-for-wordpress'),
404
+ 'delete_map_prompt' => __('Delete this map?', 'mappress-google-maps-for-wordpress'),
405
+ 'dir_error' => __('Google cannot return directions between those addresses. There is no route between them or the routing information is not available.', 'mappress-google-maps-for-wordpress'),
406
+ 'kml_error' => __('Error reading KML file', 'mappress-google-maps-for-wordpress'),
407
+ 'layer' => __('URL for KML file', 'mappress-google-maps-for-wordpress'),
408
+ 'loading' => "<span class='mapp-spinner'></span>" . __('Loading', 'mappress-google-maps-for-wordpress'),
409
+ 'more' => __('%d of %d shown', 'mappress-google-maps-for-wordpress'),
410
+ 'no_geolocate' => __('Unable to get your location', 'mappress-google-maps-for-wordpress'),
411
+ 'no_results' => __('No results', 'mappress-google-maps-for-wordpress'),
412
+ 'save' => __('Save changes?', 'mappress-google-maps-for-wordpress'),
413
+ 'shape' => __('Shape', 'mappress-google-maps-for-wordpress'),
414
+ 'untitled' => __('Untitled', 'mappress-google-maps-for-wordpress')
415
+ );
416
417
+ // Globals
418
+ $l10n['options'] = array(
419
+ 'admin' => current_user_can('administrator'),
420
+ 'ajaxurl' => admin_url('admin-ajax.php'),
421
+ 'debug' => self::$debug,
422
+ 'iconsUrl' => (self::$pro) ? Mappress_Icons::$icons_url : null,
423
+ 'language' => self::get_language(),
424
+ 'mapbox' => self::get_api_keys()->mapbox,
425
+ 'mini' => 400,
426
+ 'postid' => ($post) ? $post->ID : null, // Note: GT => numeric, classic => string
427
+ 'pro' => self::$pro,
428
+ 'siteUrl' => site_url(),
429
+ 'standardIconsUrl' => (self::$pro) ? Mappress_Icons::$standard_icons_url : null
430
+ );
431
432
+ // Leaflet layers for mapbox / OSM
433
+ if (self::$options->engine == 'leaflet') {
434
+ // Providers
435
+ $providers = array(
436
+ 'mapbox' => array(
437
+ 'accessToken' => self::get_api_keys()->mapbox,
438
+ 'attribution' => "<a href='https://www.mapbox.com/about/maps/' target='_blank'>&copy; Mapbox &copy; OpenStreetMap</a> <a class='mapbox-improve-map' href='https://www.mapbox.com/map-feedback/' target='_blank'>" . __('Improve this map', 'mappress-google-maps-for-wordpress') . "</a>",
439
+ 'fresh' => true, // Fresh = true in order to provide updated studio styles
440
+ 'url' => "https://api.mapbox.com/styles/v1/{user}/{id}/tiles/256/{z}/{x}/{y}{r}?access_token={accessToken}&fresh={fresh}",
441
+ 'zoomOffset' => 0
442
+ ),
443
+ 'osm' => array(
444
+ 'attribution' => 'Map data (c)<a href="https://openstreetmap.org">OpenStreetMap</a>',
445
+ 'url' => 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'
446
+ )
447
+ );
448
+ $l10n['options']['providers'] = apply_filters('mappress_tile_providers', $providers);
449
450
+ // Baselayers
451
+ $baselayers = array();
452
+ if (self::get_api_keys()->mapbox) {
453
+ $baselayers = array(
454
+ array('provider' => 'mapbox', 'user' => 'mapbox', 'id' => 'streets-v10', 'name' => 'streets', 'label' => __('Streets', 'mappress-google-maps-for-wordpress')),
455
+ array('provider' => 'mapbox', 'user' => 'mapbox', 'id' => 'outdoors-v10', 'name' => 'outdoors', 'label' => __('Outdoors', 'mappress-google-maps-for-wordpress')),
456
+ array('provider' => 'mapbox', 'user' => 'mapbox', 'id' => 'light-v9', 'name' => 'light', 'label' => __('Light', 'mappress-google-maps-for-wordpress')),
457
+ array('provider' => 'mapbox', 'user' => 'mapbox', 'id' => 'dark-v9', 'name' => 'dark', 'label' => __('Dark', 'mappress-google-maps-for-wordpress')),
458
+ array('provider' => 'mapbox', 'user' => 'mapbox', 'id' => 'satellite-v9', 'name' => 'satellite', 'label' => __('Satellite', 'mappress-google-maps-for-wordpress')),
459
+ array('provider' => 'mapbox', 'user' => 'mapbox', 'id' => 'satellite-streets-v10', 'name' => 'satellite-streets', 'label' => __('Satellite Streets', 'mappress-google-maps-for-wordpress'))
460
+ );
461
462
+ // Mapbox studio styles (remove base url and everything after '.html', remainder is user/id)
463
+ foreach(self::$options->mapboxStyles as $name => $url) {
464
+ $url = strstr($url, '.html', true);
465
+ $url = str_ireplace('https://api.mapbox.com/styles/v1/', '', $url);
466
+ $parts = explode('/', $url);
467
+ if (count($parts) == 2)
468
+ $baselayers[] = array('provider' => 'mapbox', 'user' => $parts[0], 'id' => $parts[1], 'name' => $name, 'label' => $name);
469
+ }
470
+ } else {
471
+ $baselayers = array(
472
+ array('provider' => 'osm', 'id' => 'osm', 'name' => 'osm', 'label' => __('Streets', 'mappress-google-maps-for-wordpress'))
473
+ );
474
+ }
475
476
+ // User-defined baselayers
477
+ $l10n['options']['baseLayers'] = apply_filters('mappress_baselayers', $baselayers);
478
+ } else {
479
+ // Google wizard styles
480
+ $l10n['options']['styles'] = array();
481
+ foreach(self::$options->styles as $id => &$style)
482
+ $l10n['options']['styles'][$id] = json_decode($style);
483
}
484
485
+ // Global settings
486
+ $options = array('autoupdate', 'country', 'defaultIcon', 'directions', 'directionsServer', 'engine', 'iconScale', 'iwType', 'mashupBody', 'mashupClick', 'poiZoom', 'radius', 'search', 'size', 'sizes', 'style', 'tiles');
487
+ foreach($options as $option)
488
+ $l10n['options'][$option] = self::$options->$option;
489
490
+ return $l10n;
491
}
492
493
+ static function load($type = null) {
494
+ if (self::$loaded)
495
+ return;
496
+ else
497
+ self::$loaded = true;
498
499
+ $dev = self::is_dev();
500
+ $footer = self::is_footer();
501
502
+ // Directories
503
+ $min = ($dev) ? "" : ".min";
504
+ $js = ($dev) ? "http://localhost/$dev/wp-content/plugins/mappress-google-maps-for-wordpress/src" : self::$baseurl . '/js';
505
506
+ if (self::$options->engine == 'leaflet') {
507
+ wp_enqueue_script("mappress-leaflet", $js . "/leaflet/leaflet.js", null, '1.3.1', $footer);
508
+ wp_enqueue_script("mappress-omnivore", $js . "/leaflet/leaflet-omnivore.min.js", null, '0.3.1', $footer);
509
+ wp_enqueue_script("mappress-algolia-places", $js . "/algolia/placesAutocompleteDataset.min.js", null, '1.7.2', $footer);
510
+ wp_enqueue_script("mappress-algolia-search", $js . "/algolia/algoliasearchLite.min.js", null, '3', $footer);
511
512
+ } else {
513
+ $language = self::get_language();
514
+ $language = ($language) ? "&language=$language" : '';
515
+ $apiversion = ($dev) ? 'v=3.exp' : 'v=3';
516
+ $apikey = "&key=" . self::get_api_keys()->browser;
517
+ $libs = ($type == 'editor') ? '&libraries=places,drawing' : '&libraries=places';
518
+ wp_enqueue_script("mappress-gmaps", "https://maps.googleapis.com/maps/api/js?{$apiversion}{$language}{$libs}{$apikey}", null, null, $footer);
519
}
520
521
+ if ($type == 'editor')
522
+ wp_enqueue_script('mappress_editor', $js . "/mappress_editor$min.js", array('jquery', 'jquery-ui-position', 'jquery-ui-sortable'), self::$version, $footer);
523
524
+ if ($type == 'settings')
525
+ wp_enqueue_script('mappress_settings', $js . "/mappress_settings$min.js", array('postbox', 'jquery', 'jquery-ui-position', 'jquery-ui-sortable'), self::$version, $footer);
526
527
+ // Autocomplete
528
+ wp_enqueue_script('mappress-algolia-autocomplete', $js . "/algolia/autocomplete.jquery.min.js", array('jquery'), self::$version, $footer);
529
530
+ // mappress.js includes loader, so must come after editor
531
+ wp_enqueue_script('mappress', $js . "/mappress$min.js", array('underscore', 'jquery'), self::$version, $footer);
532
533
+ if ($dev) {
534
+ foreach(array('directions', 'geocoding', 'icons', 'infobox', 'lib', 'places', 'poi', 'widgets', 'loader') as $script)
535
+ wp_enqueue_script($script, $js . "/mappress_{$script}.js", null, self::$version, $footer);
536
}
537
538
+ wp_localize_script('mappress', 'mappl10n', self::l10n());
539
540
+ // Templates
541
+ if ($type != 'editor')
542
+ Mappress_Template::load($footer);
543
+ }
544
545
+ static function plugin_action_links($links, $file) {
546
+ $settings_link = "<a href='" . admin_url("admin.php?page=mappress") . "'>" . __('Settings', 'mappress-google-maps-for-wordpress') . "</a>";
547
+ array_unshift( $links, $settings_link );
548
+ return $links;
549
}
550
551
+ static function plugins_loaded() {
552
+ load_plugin_textdomain('mappress-google-maps-for-wordpress', false, dirname(self::$basename) . '/languages');
553
+ }
554
+
555
+ static function script($script, $ready = false) {
556
+ $html = "\r\n<script type='text/javascript'>\r\n";
557
+ $html .= ($ready) ? "jQuery(function() { $script });" : $script;
558
+ $html .= "\r\n</script>";
559
+ return $html;
560
+ }
561
+
562
+ static function script_template($template, $id = null) {
563
+ $id = ($id) ? "id='mapp-tmpl-{$id}'" : '';
564
+ $html = "\r\n<script type='text/template' $id>\r\n{$template}\r\n</script>\r\n";
565
+ return $html;
566
}
567
568
/**
605
$atts['center'] = ($map && $map->pois) ? $map->pois[0]->point['lat'] . ',' . $map->pois[0]->point['lng'] : null;
606
}
607
608
+ return $atts;
609
+ }
610
+
611
+ /**
612
+ * Switch WPML language during AJAX calls
613
+ */
614
+ static function set_language() {
615
+ global $sitepress;
616
+ if ($sitepress && method_exists($sitepress, 'switch_lang')) {
617
+ $language = self::get_language();
618
+ $sitepress->switch_lang($language);
619
+ }
620
+ }
621
+
622
+ /**
623
+ * Map a shortcode in a post.
624
+ *
625
+ * @param mixed $atts - shortcode attributes
626
+ */
627
+ static function shortcode_map($atts='') {
628
+ global $post;
629
+
630
+ // No feeds
631
+ if (is_feed())
632
+ return;
633
+
634
+ // Try to protect against calls to do_shortcode() in the post editor...
635
+ if (self::is_admin())
636
+ return;
637
+
638
+ $atts = self::scrub_atts($atts);
639
+
640
+ // Determine what to show
641
+ $mapid = (isset($atts['mapid'])) ? $atts['mapid'] : null;
642
+
643
+ if ($mapid) {
644
+ // Show map by mapid
645
+ $map = Mappress_Map::get($mapid);
646
+ } else {
647
+ // Get the first map attached to the post
648
+ $maps = Mappress_Map::get_list($post->ID);
649
+ $map = (isset ($maps[0]) ? $maps[0] : false);
650
+ }
651
+
652
+ if (!$map)
653
+ return;
654
+
655
+ return $map->display($atts);
656
+ }
657
+
658
+ /**
659
+ * Process the mashup shortcode
660
+ *
661
+ */
662
+ static function shortcode_mashup($atts='') {
663
+ // No feeds
664
+ if (is_feed())
665
+ return;
666
+
667
+ // Prevent do_shortcode() in the post editor, but allow for AJAX calls from other plugins (which run as admin)
668
+ if (self::is_admin())
669
+ return;
670
+
671
+ $atts = self::scrub_atts($atts);
672
+ return self::get_mashup($atts);
673
}
674
675
static function string_to_boolean($data) {
687
return $data;
688
}
689
690
+ /**
691
+ * Automatic map display.
692
+ * If set, the [mappress] shortcode will be prepended/appended to the post body, once for each map
693
+ * The shortcode is used so it can be filtered - for example WordPress will remove it in excerpts by default.
694
+ *
695
+ * @param mixed $content
696
+ */
697
+ static function the_content($content="") {
698
global $post;
699
+ global $wp_current_filter;
700
701
+ $autodisplay = self::$options->autodisplay;
702
703
+ // No auto display
704
+ if (!$autodisplay || $autodisplay == 'none')
705
+ return $content;
706
707
+ // Check if in the loop, to prevent conflicts with JetPack - see http://wordpress.org/support/topic/easy-adsense-lite-and-jetpack
708
+ if (!in_the_loop())
709
+ return $content;
710
711
+ // Don't add the shortcode for feeds or admin screens
712
+ if (is_feed() || self::is_admin())
713
+ return $content;
714
715
+ // No shortcode if post is password protected
716
+ if (post_password_required())
717
+ return $content;
718
719
+ // If this is an excerpt don't attempt to add the map to it
720
+ if (in_array('get_the_excerpt', $wp_current_filter))
721
+ return $content;
722
723
+ // Don't auto display if the post already contains a MapPress shortcode
724
+ if (stristr($content, '[mappress') !== false || stristr($content, '[mashup') !== false)
725
+ return $content;
726
727
+ // Get maps associated with post
728
+ $mapids = Mappress_Map::get_list($post->ID, 'ids');
729
+ if (empty($mapids))
730
+ return $content;
731
732
+ // Add the shortcode once for each map
733
+ $shortcodes = "";
734
+ foreach($mapids as $mapid)
735
+ $shortcodes .= '<p>[mappress mapid="' . $mapid . '"]</p>';
736
737
+ if ($autodisplay == 'top')
738
+ return $shortcodes . $content;
739
else
740
+ return $content . $shortcodes;
741
}
742
743
/**
744
+ * Scripts & styles for frontend
745
+ * CSS is loaded from: child theme, theme, or plugin directory
746
*/
747
+ static function wp_enqueue_scripts() {
748
+ // Leaflet CSS
749
+ if (self::$options->engine == 'leaflet')
750
+ wp_enqueue_style('mappress-leaflet', self::$baseurl . '/css/leaflet/leaflet.css', null, '1.3.1');
751
752
+ // Mappress CSS from plugin directory
753
+ wp_enqueue_style('mappress', self::$baseurl . '/css/mappress.css', null, self::$version);
754
755
+ // Mappress CSS from theme directory
756
+ if ( @file_exists( get_stylesheet_directory() . '/mappress.css' ) )
757
+ $file = get_stylesheet_directory_uri() . '/mappress.css';
758
+ elseif ( @file_exists( get_template_directory() . '/mappress.css' ) )
759
+ $file = get_template_directory_uri() . '/mappress.css';
760
761
+ if (isset($file))
762
+ wp_enqueue_style('mappress-custom', $file, array('mappress'), self::$version);
763
764
+ // Load scripts in header
765
+ if (!self::is_footer())
766
+ self::load();
767
}
768
769
+ static function wp_head() {
770
+ echo "\r\n<!-- MapPress Easy Google Maps " . __('Version', 'mappress-google-maps-for-wordpress') . ':' . self::$version . " (http://www.mappresspro.com/mappress) -->\r\n";
771
+ echo "<script type='text/javascript'>mapp = window.mapp || {}; mapp.data = [];</script>\r\n";
772
}
773
+ }
774
775
$mappress = new Mappress();
776
?>
mappress_map.php CHANGED
@@ -49,7 +49,6 @@ class Mappress_Map extends Mappress_Obj {
49
static function register() {
50
global $wpdb;
51
52
- // Ajax
53
add_action('deleted_post', array(__CLASS__, 'delete_post_map'));
54
55
add_action('wp_ajax_mapp_delete', array(__CLASS__, 'ajax_delete'));
@@ -86,9 +85,9 @@ class Mappress_Map extends Mappress_Obj {
86
$wpdb->show_errors(false);
87
}
88
89
- static function media_button($editor_id) {
90
if ($editor_id == 'content') {
91
- echo '<button type="button" class="button" id="mapp-pick-button">';
92
echo '<span class="wp-media-buttons-icon dashicons dashicons-location"></span> ' . __('MapPress', 'mappress-google-maps-for-wordpress') . '</button>';
93
}
94
}
@@ -106,33 +105,29 @@ class Mappress_Map extends Mappress_Obj {
106
107
static function find($args) {
108
global $wpdb;
109
- $posts_table = $wpdb->prefix . 'mappress_posts';
110
- $args = (object) wp_parse_args($args, array('type' => 'post', 'output' => 'names', 'page' => 1, 'page_size' => 20, 'postid' => null, 'search' => null));
111
-
112
- $where = array();
113
- if ($args->type == 'post')
114
- $where[] = $wpdb->prepare("postid=%d", $args->postid);
115
-
116
- // Note: $wpdb->prepare uses tokens on % like queries
117
- if ($args->type == 'all' && $args->search)
118
- $where[] = $wpdb->prepare("$wpdb->posts.post_title LIKE %s", '%' . $args->search . '%');
119
120
- $where = ($where) ? " WHERE " . implode(' AND ', $where) : '';
121
-
122
- //$limit = sprintf(" LIMIT %d, %d", ($args->page - 1) * $args->page_size, $args->page_size);
123
- $limit = '';
124
- $sql = "SELECT SQL_CALC_FOUND_ROWS $posts_table.mapid FROM $posts_table INNER JOIN $wpdb->posts ON ($wpdb->posts.ID = $posts_table.postid) $where $limit";
125
126
$results = $wpdb->get_results($sql);
127
- $found = $wpdb->get_var('SELECT FOUND_ROWS()');
128
129
$items = array();
130
- foreach($results as $result)
131
- $items[] = self::get($result->mapid, 'list');
132
133
- $pages = (int) ceil($found / $args->page_size);
134
- $page = (int) min($args->page, $pages);
135
- return (object) array('items' => $items, 'page' => $page, 'pages' => $pages);
136
}
137
138
static function ajax_find() {
@@ -142,7 +137,7 @@ class Mappress_Map extends Mappress_Obj {
142
/**
143
* Get a map. Output is 'raw' or 'object'
144
*/
145
- static function get($mapid, $output = 'object') {
146
global $wpdb;
147
$maps_table = $wpdb->prefix . 'mappress_maps';
148
$posts_table = $wpdb->prefix . 'mappress_posts';
@@ -157,22 +152,7 @@ class Mappress_Map extends Mappress_Obj {
157
$mapdata = unserialize($result->obj);
158
$mapdata->postid = $result->postid;
159
$mapdata->mapid = $result->mapid;
160
-
161
- // Return an object
162
- if ($output == 'object')
163
- return new Mappress_Map($mapdata);
164
-
165
- // Return list item (with post data)
166
- if ($output == 'list') {
167
- $post = get_post($result->postid);
168
- return array(
169
- 'mapid' => $mapdata->mapid,
170
- 'map_title' => $mapdata->title,
171
- 'postid' => $mapdata->postid,
172
- 'post_title' => ($post) ? $post->post_title : null,
173
- 'can_edit' => current_user_can('edit_post', $mapdata->postid)
174
- );
175
- }
176
}
177
178
static function ajax_get() {
@@ -223,7 +203,6 @@ class Mappress_Map extends Mappress_Obj {
223
foreach($this->pois as &$poi)
224
$poi->body = wpautop($poi->body);
225
226
-
227
$map = serialize($this);
228
229
// Update map
@@ -267,8 +246,8 @@ class Mappress_Map extends Mappress_Obj {
267
268
do_action('mappress_map_save', $mapid); // Use for your own developments
269
270
- // Re-read updated object and return it in response
271
- Mappress::ajax_response('OK', self::get($mapid, 'list'));
272
}
273
274
/**
49
static function register() {
50
global $wpdb;
51
52
add_action('deleted_post', array(__CLASS__, 'delete_post_map'));
53
54
add_action('wp_ajax_mapp_delete', array(__CLASS__, 'ajax_delete'));
85
$wpdb->show_errors(false);
86
}
87
88
+ static function media_buttons($editor_id) {
89
if ($editor_id == 'content') {
90
+ echo '<button type="button" class="button mapp-media-button">';
91
echo '<span class="wp-media-buttons-icon dashicons dashicons-location"></span> ' . __('MapPress', 'mappress-google-maps-for-wordpress') . '</button>';
92
}
93
}
105
106
static function find($args) {
107
global $wpdb;
108
109
+ $maps_table = $wpdb->prefix . 'mappress_maps';
110
+ $posts_table = $wpdb->prefix . 'mappress_posts';
111
112
+ $sql = "SELECT SQL_CALC_FOUND_ROWS $maps_table.mapid, $maps_table.obj, $posts_table.postid, $wpdb->posts.post_title "
113
+ . " FROM $maps_table "
114
+ . " INNER JOIN $posts_table ON ($posts_table.mapid = $maps_table.mapid)"
115
+ . " INNER JOIN $wpdb->posts ON ($wpdb->posts.ID = $posts_table.postid)"
116
+ ;
117
$results = $wpdb->get_results($sql);
118
119
$items = array();
120
+ foreach($results as $result) {
121
+ $mapdata = unserialize($result->obj);
122
+ $items[] = array(
123
+ 'mapid' => $result->mapid,
124
+ 'map_title' => $mapdata->title,
125
+ 'postid' => $result->postid,
126
+ 'post_title' => $result->post_title
127
+ );
128
+ }
129
130
+ return $items;
131
}
132
133
static function ajax_find() {
137
/**
138
* Get a map. Output is 'raw' or 'object'
139
*/
140
+ static function get($mapid) {
141
global $wpdb;
142
$maps_table = $wpdb->prefix . 'mappress_maps';
143
$posts_table = $wpdb->prefix . 'mappress_posts';
152
$mapdata = unserialize($result->obj);
153
$mapdata->postid = $result->postid;
154
$mapdata->mapid = $result->mapid;
155
+ return new Mappress_Map($mapdata);
156
}
157
158
static function ajax_get() {
203
foreach($this->pois as &$poi)
204
$poi->body = wpautop($poi->body);
205
206
$map = serialize($this);
207
208
// Update map
246
247
do_action('mappress_map_save', $mapid); // Use for your own developments
248
249
+ // Return saved mapid
250
+ Mappress::ajax_response('OK', array('mapid' => $mapid));
251
}
252
253
/**
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: chrisvrichardson
3
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=4339298
4
Tags: leaflet, openstreetmap, osm, mapbox, map box, google maps,google,map,maps,easy,poi,mapping,mapper,gps,lat,lon,latitude,longitude,geocoder,geocoding,georss,geo rss,geo,v3,marker,mashup,mash,api,v3,buddypress,mashup,geo,wp-geo,geo mashup,simplemap,simple,wpml
5
Requires at least: 4.5
6
- Tested up to: 4.9
7
- Stable tag: 2.50.11
8
9
== Description ==
10
MapPress adds beautiful, interactive Google or Leaflet maps to WordPress.
@@ -86,8 +86,18 @@ Please see the plugin documentation pages:
86
87
== Changelog ==
88
89
- = 2.50.11 =
90
- * Fixed: mashup center and zoom not working
91
* Fixed: mashups not displaying on some servers; updated gzip detection
92
* Changed: internal mashup query and layers control changes
93
3
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=4339298
4
Tags: leaflet, openstreetmap, osm, mapbox, map box, google maps,google,map,maps,easy,poi,mapping,mapper,gps,lat,lon,latitude,longitude,geocoder,geocoding,georss,geo rss,geo,v3,marker,mashup,mash,api,v3,buddypress,mashup,geo,wp-geo,geo mashup,simplemap,simple,wpml
5
Requires at least: 4.5
6
+ Tested up to: 5.1
7
+ Stable tag: 2.52.1
8
9
== Description ==
10
MapPress adds beautiful, interactive Google or Leaflet maps to WordPress.
86
87
== Changelog ==
88
89
+ = 2.52.1 =
90
+ * Fixed: ajax error when opening map for edit
91
+
92
+ = 2.52 =
93
+ * Fixed: prevent enter press in map list search from publishing post
94
+ * Changed: updated map editor search/filter function
95
+ * Changed: internal function Mappress::ssl() renamed Mappress::is_ssl() - please update any custom directions.php or search.php to use the new name
96
+
97
+ = 2.51 =
98
+ * Added: mashups with a center but no zoom will perform a radius search
99
+ * Fixed: KML markers showing POI text instead of text from KML file
100
+ * Fixed: mashup initial center and zoom have been improved
101
* Fixed: mashups not displaying on some servers; updated gzip detection
102
* Changed: internal mashup query and layers control changes
103
templates/map-directions.php CHANGED
@@ -1,6 +1,6 @@
1
<div class='mapp-directions'>
2
<span class='mapp-close' data-mapp-action='dir-cancel'></span>
3
- <?php if (Mappress::ssl()) : ?>
4
<a href='#' class='mapp-myloc' data-mapp-action='dir-myloc'><?php _e('My location', 'mappress-google-maps-for-wordpress'); ?></a>
5
<?php endif; ?>
6
<div>
1
<div class='mapp-directions'>
2
<span class='mapp-close' data-mapp-action='dir-cancel'></span>
3
+ <?php if (Mappress::is_ssl()) : ?>
4
<a href='#' class='mapp-myloc' data-mapp-action='dir-myloc'><?php _e('My location', 'mappress-google-maps-for-wordpress'); ?></a>
5
<?php endif; ?>
6
<div>
templates/map-search.php CHANGED
@@ -1,6 +1,6 @@
1
<div class='mapp-search'>
2
<input class='mapp-places' type='text' placeholder='<?php _e('Search', 'mappress-google-maps-for-wordpress'); ?>'/>
3
- <?php if (Mappress::ssl()) : ?>
4
<div class='mapp-geolocate' data-mapp-action='geolocate' title='<?php _e('Your Location', 'mappress-google-maps-for-wordpress');?>'></div>
5
<?php endif; ?>
6
</div>
1
<div class='mapp-search'>
2
<input class='mapp-places' type='text' placeholder='<?php _e('Search', 'mappress-google-maps-for-wordpress'); ?>'/>
3
+ <?php if (Mappress::is_ssl()) : ?>
4
<div class='mapp-geolocate' data-mapp-action='geolocate' title='<?php _e('Your Location', 'mappress-google-maps-for-wordpress');?>'></div>
5
<?php endif; ?>
6
</div>