MapPress Easy Google Maps - Version 2.51.1

Version Description

  • Fixed: prevent enter press in map list search from publishing post
  • Changed: updated map list and map search functions
  • Changed: internal function Mappress::ssl() renamed Mappress::is_ssl()
  • Changed: please update any custom directions.php / search.php templates to use Mappress::is_ssl()
Download this release

Release Info

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

Code changes from version 2.50.10 to 2.51.1

forms/{map_editor.php → editor.php} RENAMED
File without changes
forms/{map_media.php → media.php} RENAMED
@@ -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>
@@ -49,13 +50,13 @@
49
  <input data-mapp-media='cancel' class='button' type='button' value='<?php esc_attr_e('Cancel', 'mappress-google-maps-for-wordpress'); ?>' />
50
  <input data-mapp-media='insert' class='button' type='button' value='<?php esc_attr_e('Insert into post', 'mappress-google-maps-for-wordpress'); ?>' />
51
  </div>
52
- <?php require Mappress::$basedir . "/forms/map_editor.php"; ?>
53
  </div>
54
  </div>
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') { #>
@@ -74,13 +75,10 @@
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>
50
  <input data-mapp-media='cancel' class='button' type='button' value='<?php esc_attr_e('Cancel', 'mappress-google-maps-for-wordpress'); ?>' />
51
  <input data-mapp-media='insert' class='button' type='button' value='<?php esc_attr_e('Insert into post', 'mappress-google-maps-for-wordpress'); ?>' />
52
  </div>
53
+ <?php require Mappress::$basedir . "/forms/editor.php"; ?>
54
  </div>
55
  </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='edit' data-mapp-mapid='{{ item.mapid }}'>
61
 
62
  <# if (type == 'all') { #>
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>
forms/{template_editor.php → settings.php} RENAMED
File without changes
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,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,_.pick(n,_.keys(this.defaults)),_.pick(this.settings,_.keys(this.defaults)))};mapp.Map.prototype={display:function(){var t=this,i;if(this.div.layout=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.toggleMapTypeId(this.mapTypeId,!0),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.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.query&&mappl10n.options.search&&!this.editable&&this.addSearchMove();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(t.getBounds())});n(window).resize(function(){t.resize()});this.query||this.setPois(this.pois);this.places.parse(this.center,function(n){t.query?n?t.search(n):t.ajaxQuery():(n&&n.geometry&&n.geometry.location&&(t.center=n.geometry.location),t.recenter())});mappl10n.options.engine=="leaflet"?this.initialOpen():mapp.event.addListenerOnce(this.map_,"idle",function(){t.initialOpen()})}},initialOpen: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=n.geometry.location?n.geometry.location:null,t=n.geometry.viewport?n.geometry.viewport:null,f,u,r;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);this.ajaxQuery(r)},load:function(n){_.extend(this,this.defaults,n,this.settings);this.toggleMapTypeId(this.mapTypeId,!0);this.toggleView("menu",!1);this.toggleLayer();this.close();this.setPois(this.pois_);this.places.set("")},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(this.getBounds());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 e=this,i,o,s,l,a,u,t,h,f;if(mappl10n.options.engine=="leaflet"){for(i=[],o=L.control.layers(),t=0;t<mappl10n.options.baseLayers.length;t++)s=mappl10n.options.baseLayers[t],l=mappl10n.options.providers[s.provider],i.push(n.extend({},l,s));for(a=mappl10n.options.style&&!this.editable&&this.mapTypeId=="streets"?mappl10n.options.style:this.mapTypeId,u=_.findIndex(i,{name:a}),u=u>=0?u:0,t=0;t<i.length;t++)h=L.tileLayer(i[t].url,i[t]),o.addBaseLayer(h,i[t].label),t==u&&h.addTo(this.map_);this.editable&&i.length>1&&o.addTo(this.map_);this.map_.on("baselayerchange",function(n){e.mapTypeId=n.layer.options.name})}else{var r=mappl10n.options.styles?mappl10n.options.styles:[],c=mappl10n.options.style,v=["roadmap","satellite","terrain","hybrid"];if(c&&typeof r[c]!="undefined"&&this.map_.setOptions({styles:r[c]}),this.editable){for(f in r)this.map_.mapTypes.set(f,new google.maps.StyledMapType(r[f],{name:f})),v.push(f);this.map_.setOptions({mapTypeControlOptions:{mapTypeIds:v,position:google.maps.ControlPosition.TOP_RIGHT,style:google.maps.MapTypeControlStyle.DROPDOWN_MENU}})}else this.mapTypeId&&typeof r[this.mapTypeId]!="undefined"&&this.map_.setOptions({styles:r[this.mapTypeId]});mapp.event.addListener(this.map_,"maptypeid_changed",function(){e.mapTypeId=e.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_)},toggleMapTypeId:function(t,i){var u=this,r=n.inArray(t,["roadmap","satellite","terrain","hybrid"])!=-1;i=typeof i!="undefined"?i:!(this.getMapTypeId()==t);t=u.editable?i&&(r||typeof mappl10n.options.styles[t]!="undefined")?t:"roadmap":r?t:"roadmap";this.map_.setMapTypeId(t)},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 r=this.center&&this.center.lat&&this.center.lng?this.center:null,n=this.zoom&&parseInt(this.zoom)?parseInt(this.zoom):null,t,i;if(r){this.setView(r,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,t=0;t<this.pois_.length;t++)i=this.pois_[t].getBounds(),bounds=i?mappl10n.options.engine=="leaflet"?bounds.extend(i):bounds.union(i):bounds.extend(this.pois_[t].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)},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(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]()});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(){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
@@ -1,245 +1,243 @@
1
- # Copyright (C) 2018 MapPress Maps for WordPress
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.10\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/mappress-google-maps-for-wordpress\n"
7
- "POT-Creation-Date: 2018-11-06 18:26:12+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2018-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <LL@li.org>\n"
14
 
15
- #: forms/map_editor.php:11
16
  msgid "Add KML"
17
  msgstr ""
18
 
19
- #: forms/map_editor.php:47
20
  msgid "Visual"
21
  msgstr ""
22
 
23
- #: forms/map_editor.php:47
24
  msgid "HTML"
25
  msgstr ""
26
 
27
- #: forms/map_editor.php:53 forms/map_media.php:48 forms/template_editor.php:41
28
  msgid "Save"
29
  msgstr ""
30
 
31
- #: forms/map_editor.php:54 forms/map_media.php:49 forms/template_editor.php:42
32
  msgid "Cancel"
33
  msgstr ""
34
 
35
- #: forms/map_editor.php:55 forms/map_media.php:71 forms/template_editor.php:44
36
  #: mappress_controls.php:102
37
  msgid "Delete"
38
  msgstr ""
39
 
40
- #: forms/map_media.php:7
41
  msgid "New Map"
42
  msgstr ""
43
 
44
- #: forms/map_media.php:9
45
  msgid "This post"
46
  msgstr ""
47
 
48
- #: forms/map_media.php:10 pro/mappress_widget.php:84
49
  msgid "All posts"
50
  msgstr ""
51
 
52
- #: forms/map_media.php:12
53
- msgid "Search post title"
54
  msgstr ""
55
 
56
- #: forms/map_media.php:20
57
  msgid "Map ID"
58
  msgstr ""
59
 
60
- #: forms/map_media.php:25
61
  msgid "Map Title"
62
  msgstr ""
63
 
64
- #: forms/map_media.php:26 forms/map_media.php:62 forms/map_media.php:66
65
- #: mappress.php:631
66
  msgid "Untitled"
67
  msgstr ""
68
 
69
- #: forms/map_media.php:30
70
  msgid "Display Size"
71
  msgstr ""
72
 
73
- #: forms/map_media.php:43
74
  msgid "Save center / zoom"
75
  msgstr ""
76
 
77
- #: forms/map_media.php:50 forms/map_media.php:70
78
  msgid "Insert into post"
79
  msgstr ""
80
 
81
- #: forms/map_media.php:69 forms/template_editor.php:4
82
- #: forms/template_editor.php:18
83
  msgid "Edit"
84
  msgstr ""
85
 
86
- #: forms/map_media.php:78
87
  msgid "No maps found"
88
  msgstr ""
89
 
90
- #: forms/map_media.php:81
91
- msgid "Load More"
92
- msgstr ""
93
-
94
- #: forms/template_editor.php:24
95
  msgid "New"
96
  msgstr ""
97
 
98
- #: forms/template_editor.php:24
99
  msgid "Custom"
100
  msgstr ""
101
 
102
- #: forms/template_editor.php:27
103
  msgid "Editor"
104
  msgstr ""
105
 
106
- #: forms/template_editor.php:28 mappress_settings.php:182
107
  msgid "Default"
108
  msgstr ""
109
 
110
  #: mappress.php:153
111
- msgid "Settings"
112
- msgstr ""
113
-
114
- #: mappress.php:159
115
- msgid "Version"
116
  msgstr ""
117
 
118
- #: mappress.php:167
119
- msgid "Documentation"
120
  msgstr ""
121
 
122
- #: mappress.php:168
123
- msgid "Support"
124
  msgstr ""
125
 
126
- #: mappress.php:170
127
- msgid "Upgrade to MapPress Pro"
128
  msgstr ""
129
 
130
- #: mappress.php:453
131
- msgid "MapPress database tables are missing. Please deactivate the plugin and activate it again to fix this."
132
  msgstr ""
133
 
134
- #: mappress.php:458
135
- msgid "WARNING: MapPress is not compatible with the WP-Geo plugin. Please deactivate or uninstall WP-Geo before using MapPress."
136
  msgstr ""
137
 
138
- #: mappress.php:463
139
- msgid "A Google Maps API key is required"
140
  msgstr ""
141
 
142
- #: mappress.php:463
143
- msgid "Please update your"
144
  msgstr ""
145
 
146
- #: mappress.php:463
147
- msgid "MapPress Settings"
148
  msgstr ""
149
 
150
- #: mappress.php:621
151
  msgid "Are you sure you want to delete?"
152
  msgstr ""
153
 
154
- #: mappress.php:622
155
  msgid "Delete this map?"
156
  msgstr ""
157
 
158
- #: mappress.php:623
159
  msgid "Google cannot return directions between those addresses. There is no route between them or the routing information is not available."
160
  msgstr ""
161
 
162
- #: mappress.php:624
163
  msgid "Error reading KML file"
164
  msgstr ""
165
 
166
- #: mappress.php:625
167
  msgid "URL for KML file"
168
  msgstr ""
169
 
170
- #: mappress.php:626
171
  msgid "Loading"
172
  msgstr ""
173
 
174
- #: mappress.php:627
 
 
 
 
175
  msgid "Unable to get your location"
176
  msgstr ""
177
 
178
- #: mappress.php:628
179
  msgid "No results"
180
  msgstr ""
181
 
182
- #: mappress.php:629
183
  msgid "Save changes?"
184
  msgstr ""
185
 
186
- #: mappress.php:630
187
  msgid "Shape"
188
  msgstr ""
189
 
190
- #: mappress.php:655
191
  msgid "Improve this map"
192
  msgstr ""
193
 
194
- #: mappress.php:671 mappress.php:689
195
  msgid "Streets"
196
  msgstr ""
197
 
198
- #: mappress.php:672
199
  msgid "Outdoors"
200
  msgstr ""
201
 
202
- #: mappress.php:673
203
  msgid "Light"
204
  msgstr ""
205
 
206
- #: mappress.php:674
207
  msgid "Dark"
208
  msgstr ""
209
 
210
- #: mappress.php:675
211
  msgid "Satellite"
212
  msgstr ""
213
 
214
- #: mappress.php:676
215
  msgid "Satellite Streets"
216
  msgstr ""
217
 
 
 
 
 
218
  #: mappress_controls.php:93
219
  msgid "Add"
220
  msgstr ""
221
 
222
- #: mappress_map.php:92 mappress_settings.php:306
223
  msgid "MapPress"
224
  msgstr ""
225
 
226
- #: mappress_map.php:183
227
  msgid "Map not found"
228
  msgstr ""
229
 
230
- #: mappress_map.php:441 pro/mappress_pro_settings.php:33
231
  msgid "Filter"
232
  msgstr ""
233
 
234
- #: mappress_map.php:474
235
  msgid "Show map"
236
  msgstr ""
237
 
238
- #: mappress_map.php:478
239
  msgid "Map"
240
  msgstr ""
241
 
242
- #: mappress_map.php:479
243
  msgid "List"
244
  msgstr ""
245
 
1
+ # Copyright (C) 2019 MapPress Maps for WordPress
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.51.1\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/mappress-google-maps-for-wordpress\n"
7
+ "POT-Creation-Date: 2019-02-01 04:42:17+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <LL@li.org>\n"
14
 
15
+ #: forms/editor.php:11
16
  msgid "Add KML"
17
  msgstr ""
18
 
19
+ #: forms/editor.php:47
20
  msgid "Visual"
21
  msgstr ""
22
 
23
+ #: forms/editor.php:47
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 ""
39
 
40
+ #: forms/media.php:7
41
  msgid "New Map"
42
  msgstr ""
43
 
44
+ #: forms/media.php:9
45
  msgid "This post"
46
  msgstr ""
47
 
48
+ #: forms/media.php:10 pro/mappress_widget.php:84
49
  msgid "All posts"
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 ""
91
 
92
+ #: forms/settings.php:24
93
  msgid "Custom"
94
  msgstr ""
95
 
96
+ #: forms/settings.php:27
97
  msgid "Editor"
98
  msgstr ""
99
 
100
+ #: forms/settings.php:28 mappress_settings.php:182
101
  msgid "Default"
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.10
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.10';
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,152 +236,45 @@ 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 && (!ini_get('zlib.output_compression')) && (!in_array('ob_gzhandler', ob_list_handlers())) && function_exists('ob_gzhandler'))
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
  /**
@@ -331,73 +311,21 @@ class Mappress {
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
@@ -440,178 +368,32 @@ class Mappress {
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
- /**
493
- * Scrub attributes
494
- * The WordPress shortcode API passes shortcode attributes in lowercase and with boolean values as strings (e.g. "true")
495
- * Converts atts to lowercase, replaces boolean strings with booleans, and creates arrays from comma-separated attributes
496
- *
497
- * Returns empty array if $atts is empty or not an array
498
- */
499
- static function scrub_atts($atts=null) {
500
- if (!$atts || !is_array($atts))
501
- return array();
502
-
503
- $atts = self::string_to_boolean($atts);
504
-
505
- // Shortcode attributes are lowercase so convert everything to lowercase
506
- $atts = array_change_key_case($atts);
507
-
508
- // Map options - includes both leaflet and Google
509
- foreach(array('disableDefaultUI', 'disableDoubleClickZoom', 'draggable', 'fullscreenControl', 'keyboardShortcuts', 'mapTypeControl', 'maxZoom', 'minZoom', 'panControl', 'rotateControl', 'scaleControl', 'scrollwheel', 'scrollWheelZoom', 'streetViewControl', 'zoomControl') as $opt) {
510
- $lcopt = strtolower($opt);
511
- if (isset($atts[$lcopt])) {
512
- $atts['mapopts'][$opt] = $atts[$lcopt];
513
- unset($atts[$lcopt]);
514
- }
515
- }
516
-
517
- // Explode layers
518
- if (isset($atts['layers'])) {
519
- $atts['layers'] = explode(',', $atts['layers']);
520
- foreach($atts['layers'] as &$layer)
521
- $layer = trim($layer);
522
- }
523
-
524
- // Search = 'post', replace with post's location
525
- if (isset($atts['search']) && $atts['search'] == 'post') {
526
- global $post;
527
- $maps = Mappress_Map::get_list($post->ID, 'ids');
528
- $map = ($maps) ? Mappress_Map::get($maps[0]) : null;
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) {
536
- if ($data === 'false')
537
- return false;
538
-
539
- if ($data === 'true')
540
- return true;
541
-
542
- if (is_array($data)) {
543
- foreach($data as &$datum)
544
- $datum = self::string_to_boolean($datum);
545
- }
546
-
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() {
@@ -624,6 +406,7 @@ class Mappress {
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'),
@@ -635,12 +418,12 @@ class Mappress {
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
@@ -658,7 +441,7 @@ class Mappress {
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
  );
@@ -707,23 +490,122 @@ class Mappress {
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
  /**
@@ -737,44 +619,158 @@ class Mappress {
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.51.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.51.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
  /**
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
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() {
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'),
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
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
  );
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
  /**
569
+ * Scrub attributes
570
+ * The WordPress shortcode API passes shortcode attributes in lowercase and with boolean values as strings (e.g. "true")
571
+ * Converts atts to lowercase, replaces boolean strings with booleans, and creates arrays from comma-separated attributes
572
  *
573
+ * Returns empty array if $atts is empty or not an array
574
  */
575
+ static function scrub_atts($atts=null) {
576
+ if (!$atts || !is_array($atts))
577
+ return array();
 
578
 
579
+ $atts = self::string_to_boolean($atts);
 
 
580
 
581
+ // Shortcode attributes are lowercase so convert everything to lowercase
582
+ $atts = array_change_key_case($atts);
583
 
584
+ // Map options - includes both leaflet and Google
585
+ foreach(array('disableDefaultUI', 'disableDoubleClickZoom', 'draggable', 'fullscreenControl', 'keyboardShortcuts', 'mapTypeControl', 'maxZoom', 'minZoom', 'panControl', 'rotateControl', 'scaleControl', 'scrollwheel', 'scrollWheelZoom', 'streetViewControl', 'zoomControl') as $opt) {
586
+ $lcopt = strtolower($opt);
587
+ if (isset($atts[$lcopt])) {
588
+ $atts['mapopts'][$opt] = $atts[$lcopt];
589
+ unset($atts[$lcopt]);
590
+ }
591
+ }
592
+
593
+ // Explode layers
594
+ if (isset($atts['layers'])) {
595
+ $atts['layers'] = explode(',', $atts['layers']);
596
+ foreach($atts['layers'] as &$layer)
597
+ $layer = trim($layer);
598
+ }
599
+
600
+ // Search = 'post', replace with post's location
601
+ if (isset($atts['center']) && $atts['center'] == 'post') {
602
+ global $post;
603
+ $maps = Mappress_Map::get_list($post->ID, 'ids');
604
+ $map = ($maps) ? Mappress_Map::get($maps[0]) : null;
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
  /**
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) {
676
+ if ($data === 'false')
677
+ return false;
678
+
679
+ if ($data === 'true')
680
+ return true;
681
+
682
+ if (is_array($data)) {
683
+ foreach($data as &$datum)
684
+ $datum = self::string_to_boolean($datum);
685
+ }
686
+
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
  }
@@ -101,38 +100,34 @@ class Mappress_Map extends Mappress_Obj {
101
  static function meta_box($post) {
102
  Mappress::load('editor');
103
  $map = new Mappress_Map(array('editable' => true, 'layout' => 'left', 'name' => 'mapp0', 'poiList' => true));
104
- require(Mappress::$basedir . '/forms/map_media.php');
105
  }
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() {
@@ -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
  }
100
  static function meta_box($post) {
101
  Mappress::load('editor');
102
  $map = new Mappress_Map(array('editable' => true, 'layout' => 'left', 'name' => 'mapp0', 'poiList' => true));
103
+ require(Mappress::$basedir . '/forms/media.php');
104
  }
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() {
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.10
8
 
9
  == Description ==
10
  MapPress adds beautiful, interactive Google or Leaflet maps to WordPress.
@@ -86,6 +86,19 @@ Please see the plugin documentation pages:
86
 
87
  == Changelog ==
88
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  = 2.50.10 =
90
  * Fixed: PHP 7.2 notice on widgets_init
91
  * Fixed: blank map when initial centering for mashups using Google engine
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.3
7
+ Stable tag: 2.51.1
8
 
9
  == Description ==
10
  MapPress adds beautiful, interactive Google or Leaflet maps to WordPress.
86
 
87
  == Changelog ==
88
 
89
+ = 2.51.1 =
90
+ * Fixed: prevent enter press in map list search from publishing post
91
+ * Changed: updated map list and map search functions
92
+ * Changed: internal function Mappress::ssl() renamed Mappress::is_ssl()
93
+ * Changed: please update any custom directions.php / search.php templates to use Mappress::is_ssl()
94
+
95
+ = 2.51 =
96
+ * Added: mashups with a center but no zoom will perform a radius search
97
+ * Fixed: KML markers showing POI text instead of text from KML file
98
+ * Fixed: mashup initial center and zoom have been improved
99
+ * Fixed: mashups not displaying on some servers; updated gzip detection
100
+ * Changed: internal mashup query and layers control changes
101
+
102
  = 2.50.10 =
103
  * Fixed: PHP 7.2 notice on widgets_init
104
  * Fixed: blank map when initial centering for mashups using Google engine
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>