From 1f3cf58ef470a106ce05e9c006151813cdb97157 Mon Sep 17 00:00:00 2001 From: fwolf Date: Wed, 24 Jun 2020 15:17:56 +0200 Subject: [PATCH] Added custom icons, updated Geocoder, and added custom settings for leaflet extensions --- assets/extensions/Control.Geocoder.js | 154 +++---- assets/extensions/Control.Geocoder.min.js | 58 +-- assets/fontello/LICENSE.txt | 75 ++++ assets/fontello/README.txt | 75 ++++ assets/fontello/config.json | 370 +++++++++++++++++ assets/fontello/css/animation.css | 85 ++++ assets/fontello/css/ui-custom-icons.css | 310 ++++++++++++++ .../css/ui-leaflet-custom-icons-codes.css | 61 +++ .../css/ui-leaflet-custom-icons-embedded.css | 114 +++++ .../css/ui-leaflet-custom-icons-ie7-codes.css | 61 +++ .../css/ui-leaflet-custom-icons-ie7.css | 72 ++++ .../fontello/css/ui-leaflet-custom-icons.css | 117 ++++++ assets/fontello/demo.html | 393 ++++++++++++++++++ .../fontello/font/ui-leaflet-custom-icons.eot | Bin 0 -> 20868 bytes .../fontello/font/ui-leaflet-custom-icons.svg | 130 ++++++ .../fontello/font/ui-leaflet-custom-icons.ttf | Bin 0 -> 20640 bytes .../font/ui-leaflet-custom-icons.woff | Bin 0 -> 12712 bytes .../font/ui-leaflet-custom-icons.woff2 | Bin 0 -> 10552 bytes assets/fontello/sass/_fixed-width.scss | 6 + assets/fontello/sass/_larger.scss | 13 + assets/fontello/sass/ui-custom-icons.scss | 15 + assets/plugin.js | 82 +++- includes/admin.class.php | 2 +- includes/leaflet-map.class.php | 114 ++++- plugin.php | 2 +- readme.txt | 12 + 26 files changed, 2191 insertions(+), 130 deletions(-) create mode 100644 assets/fontello/LICENSE.txt create mode 100644 assets/fontello/README.txt create mode 100644 assets/fontello/config.json create mode 100644 assets/fontello/css/animation.css create mode 100644 assets/fontello/css/ui-custom-icons.css create mode 100644 assets/fontello/css/ui-leaflet-custom-icons-codes.css create mode 100644 assets/fontello/css/ui-leaflet-custom-icons-embedded.css create mode 100644 assets/fontello/css/ui-leaflet-custom-icons-ie7-codes.css create mode 100644 assets/fontello/css/ui-leaflet-custom-icons-ie7.css create mode 100644 assets/fontello/css/ui-leaflet-custom-icons.css create mode 100644 assets/fontello/demo.html create mode 100644 assets/fontello/font/ui-leaflet-custom-icons.eot create mode 100644 assets/fontello/font/ui-leaflet-custom-icons.svg create mode 100644 assets/fontello/font/ui-leaflet-custom-icons.ttf create mode 100644 assets/fontello/font/ui-leaflet-custom-icons.woff create mode 100644 assets/fontello/font/ui-leaflet-custom-icons.woff2 create mode 100644 assets/fontello/sass/_fixed-width.scss create mode 100644 assets/fontello/sass/_larger.scss create mode 100644 assets/fontello/sass/ui-custom-icons.scss diff --git a/assets/extensions/Control.Geocoder.js b/assets/extensions/Control.Geocoder.js index 69b4881..dcbd4b7 100644 --- a/assets/extensions/Control.Geocoder.js +++ b/assets/extensions/Control.Geocoder.js @@ -1,5 +1,5 @@ /* @preserve - * Leaflet Control Geocoder 1.11.0 + * Leaflet Control Geocoder 1.13.0 * https://github.com/perliedman/leaflet-control-geocoder * * Copyright (c) 2012 sa3m (https://github.com/sa3m) @@ -412,6 +412,7 @@ this.L.Control.Geocoder = (function (L) { ); results[i] = { name: loc.address.label, + properties: loc.address, bbox: latLngBounds, center: latLng }; @@ -570,6 +571,11 @@ this.L.Control.Geocoder = (function (L) { for (var j = 0; j < (loc.context || []).length; j++) { var id = loc.context[j].id.split('.')[0]; properties[id] = loc.context[j].text; + + // Get country code when available + if (loc.context[j].short_code) { + properties['countryShortCode'] = loc.context[j].short_code; + } } results[i] = { @@ -806,25 +812,22 @@ this.L.Control.Geocoder = (function (L) { reverseQueryParams: {}, htmlTemplate: function(r) { var a = r.address, + className, parts = []; if (a.road || a.building) { parts.push('{building} {road} {house_number}'); } if (a.city || a.town || a.village || a.hamlet) { + className = parts.length > 0 ? 'leaflet-control-geocoder-address-detail' : ''; parts.push( - '{postcode} {city} {town} {village} {hamlet}' + '{postcode} {city} {town} {village} {hamlet}' ); } if (a.state || a.country) { - parts.push( - '{state} {country}' - ); + className = parts.length > 0 ? 'leaflet-control-geocoder-address-context' : ''; + parts.push('{state} {country}'); } return template(parts.join('
'), a, true); @@ -960,47 +963,48 @@ this.L.Control.Geocoder = (function (L) { var OpenCage = L.Class.extend({ options: { - serviceUrl: 'https://api.opencagedata.com/geocode/v1/json' + serviceUrl: 'https://api.opencagedata.com/geocode/v1/json', + geocodingQueryParams: {}, + reverseQueryParams: {} }, - initialize: function(apiKey) { + initialize: function(apiKey, options) { + L.setOptions(this, options); this._accessToken = apiKey; }, geocode: function(query, cb, context) { - getJSON( - this.options.serviceUrl, - { - key: this._accessToken, - q: query - }, - function(data) { - var results = [], - latLng, - latLngBounds, - loc; - if (data.results && data.results.length) { - for (var i = 0; i < data.results.length; i++) { - loc = data.results[i]; - latLng = L.latLng(loc.geometry); - if (loc.annotations && loc.annotations.bounds) { - latLngBounds = L.latLngBounds( - L.latLng(loc.annotations.bounds.northeast), - L.latLng(loc.annotations.bounds.southwest) - ); - } else { - latLngBounds = L.latLngBounds(latLng, latLng); - } - results.push({ - name: loc.formatted, - bbox: latLngBounds, - center: latLng - }); + var params = { + key: this._accessToken, + q: query + }; + params = L.extend(params, this.options.geocodingQueryParams); + getJSON(this.options.serviceUrl, params, function(data) { + var results = [], + latLng, + latLngBounds, + loc; + if (data.results && data.results.length) { + for (var i = 0; i < data.results.length; i++) { + loc = data.results[i]; + latLng = L.latLng(loc.geometry); + if (loc.annotations && loc.annotations.bounds) { + latLngBounds = L.latLngBounds( + L.latLng(loc.annotations.bounds.northeast), + L.latLng(loc.annotations.bounds.southwest) + ); + } else { + latLngBounds = L.latLngBounds(latLng, latLng); } + results.push({ + name: loc.formatted, + bbox: latLngBounds, + center: latLng + }); } - cb.call(context, results); } - ); + cb.call(context, results); + }); }, suggest: function(query, cb, context) { @@ -1008,44 +1012,42 @@ this.L.Control.Geocoder = (function (L) { }, reverse: function(location, scale, cb, context) { - getJSON( - this.options.serviceUrl, - { - key: this._accessToken, - q: [location.lat, location.lng].join(',') - }, - function(data) { - var results = [], - latLng, - latLngBounds, - loc; - if (data.results && data.results.length) { - for (var i = 0; i < data.results.length; i++) { - loc = data.results[i]; - latLng = L.latLng(loc.geometry); - if (loc.annotations && loc.annotations.bounds) { - latLngBounds = L.latLngBounds( - L.latLng(loc.annotations.bounds.northeast), - L.latLng(loc.annotations.bounds.southwest) - ); - } else { - latLngBounds = L.latLngBounds(latLng, latLng); - } - results.push({ - name: loc.formatted, - bbox: latLngBounds, - center: latLng - }); + var params = { + key: this._accessToken, + q: [location.lat, location.lng].join(',') + }; + params = L.extend(params, this.options.reverseQueryParams); + getJSON(this.options.serviceUrl, params, function(data) { + var results = [], + latLng, + latLngBounds, + loc; + if (data.results && data.results.length) { + for (var i = 0; i < data.results.length; i++) { + loc = data.results[i]; + latLng = L.latLng(loc.geometry); + if (loc.annotations && loc.annotations.bounds) { + latLngBounds = L.latLngBounds( + L.latLng(loc.annotations.bounds.northeast), + L.latLng(loc.annotations.bounds.southwest) + ); + } else { + latLngBounds = L.latLngBounds(latLng, latLng); } + results.push({ + name: loc.formatted, + bbox: latLngBounds, + center: latLng + }); } - cb.call(context, results); } - ); + cb.call(context, results); + }); } }); - function opencage(apiKey) { - return new OpenCage(apiKey); + function opencage(apiKey, options) { + return new OpenCage(apiKey, options); } var Pelias = L.Class.extend({ @@ -1473,10 +1475,10 @@ this.L.Control.Geocoder = (function (L) { }, this ); - } else if (L.Browser.touch && this.options.expand === 'touch') { + } else if (this.options.expand === 'touch') { L.DomEvent.addListener( container, - 'touchstart mousedown', + L.Browser.touch ? 'touchstart mousedown' : 'mousedown', function(e) { this._toggle(); e.preventDefault(); // mobile: clicking focuses the icon, so UI expands and immediately collapses @@ -1646,7 +1648,7 @@ this.L.Control.Geocoder = (function (L) { this._geocodeResultSelected(result); L.DomEvent.on( li, - 'click', + 'click touchend', function() { if (this.options.collapsed) { this._collapse(); diff --git a/assets/extensions/Control.Geocoder.min.js b/assets/extensions/Control.Geocoder.min.js index 3247835..2e53dbb 100644 --- a/assets/extensions/Control.Geocoder.min.js +++ b/assets/extensions/Control.Geocoder.min.js @@ -2,43 +2,43 @@ this.L=this.L||{};this.L.Control=this.L.Control||{}; this.L.Control.Geocoder=function(b){function K(a){return M[a]}function N(a){if(null==a)return"";if(!a)return a+"";a=""+a;return O.test(a)?a.replace(P,K):a}function u(a,d,e,c,f){var h="_l_geocoder_"+Q++;d[f||"callback"]=h;window[h]=b.Util.bind(e,c);e=document.createElement("script");e.type="text/javascript";e.src=a+v(d);e.id=h;document.getElementsByTagName("head")[0].appendChild(e)}function l(a,b,e){var c=new XMLHttpRequest;c.onreadystatechange=function(){if(4===c.readyState){if(200!==c.status&&304!== c.status)var a="";else if("string"===typeof c.response)try{a=JSON.parse(c.response)}catch(h){a=c.response}else a=c.response;e(a)}};c.open("GET",a+v(b),!0);c.responseType="json";c.setRequestHeader("Accept","application/json");c.send(null)}function R(a,b){return a.replace(/\{ *([\w_]+) *\}/g,function(a,c){a=b[c];void 0===a?a="":"function"===typeof a&&(a=a(b));return N(a)})}function v(a,d,e){var c=[],f;for(f in a){var h=encodeURIComponent(e?f.toUpperCase():f),k=a[f];if(b.Util.isArray(k))for(var g=0;g< k.length;g++)c.push(h+"="+encodeURIComponent(k[g]));else c.push(h+"="+encodeURIComponent(k))}return(d&&-1!==d.indexOf("?")?"&":"?")+c.join("&")}function q(a,b){return new p(a,b)}b=b&&b.hasOwnProperty("default")?b["default"]:b;var Q=0,P=/[&<>"'`]/g,O=/[&<>"'`]/,M={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},w=b.Class.extend({options:{service_url:"https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer"},initialize:function(a,d){b.setOptions(this,d);this._accessToken= -a},geocode:function(a,d,e){a={SingleLine:a,outFields:"Addr_Type",forStorage:!1,maxLocations:10,f:"json"};this._key&&this._key.length&&(a.token=this._key);l(this.options.service_url+"/findAddressCandidates",b.extend(a,this.options.geocodingQueryParams),function(a){var c=[];if(a.candidates&&a.candidates.length)for(var h=0;h<=a.candidates.length-1;h++){var k=a.candidates[h];var g=b.latLng(k.location.y,k.location.x);var m=b.latLngBounds(b.latLng(k.extent.ymax,k.extent.xmax),b.latLng(k.extent.ymin,k.extent.xmin)); +a},geocode:function(a,d,e){a={SingleLine:a,outFields:"Addr_Type",forStorage:!1,maxLocations:10,f:"json"};this._key&&this._key.length&&(a.token=this._key);l(this.options.service_url+"/findAddressCandidates",b.extend(a,this.options.geocodingQueryParams),function(a){var c=[];if(a.candidates&&a.candidates.length)for(var h=0;h<=a.candidates.length-1;h++){var k=a.candidates[h],g=b.latLng(k.location.y,k.location.x),m=b.latLngBounds(b.latLng(k.extent.ymax,k.extent.xmax),b.latLng(k.extent.ymin,k.extent.xmin)); c[h]={name:k.address,bbox:m,center:g}}d.call(e,c)})},suggest:function(a,b,e){return this.geocode(a,b,e)},reverse:function(a,d,e,c){a={location:encodeURIComponent(a.lng)+","+encodeURIComponent(a.lat),distance:100,f:"json"};l(this.options.service_url+"/reverseGeocode",a,function(a){var d=[];if(a&&!a.error){var f=b.latLng(a.location.y,a.location.x);d.push({name:a.address.Match_addr,center:f,bounds:b.latLngBounds(f,f)})}e.call(c,d)})}}),x=b.Class.extend({initialize:function(a){this.key=a},geocode:function(a, d,e){u("https://dev.virtualearth.net/REST/v1/Locations",{query:a,key:this.key},function(a){var c=[];if(0",app_code:"",geocodingQueryParams:{},reverseQueryParams:{},reverseGeocodeProxRadius:null},initialize:function(a){b.setOptions(this,a)},geocode:function(a,d,e){a={searchtext:a,gen:9,app_id:this.options.app_id,app_code:this.options.app_code,jsonattributes:1};a=b.Util.extend(a, -this.options.geocodingQueryParams);this.getJSON(this.options.geocodeUrl,a,d,e)},reverse:function(a,d,e,c){d=(d=this.options.reverseGeocodeProxRadius?this.options.reverseGeocodeProxRadius:null)?","+encodeURIComponent(d):"";a={prox:encodeURIComponent(a.lat)+","+encodeURIComponent(a.lng)+d,mode:"retrieveAddresses",app_id:this.options.app_id,app_code:this.options.app_code,gen:9,jsonattributes:1};a=b.Util.extend(a,this.options.reverseQueryParams);this.getJSON(this.options.reverseGeocodeUrl,a,e,c)},getJSON:function(a, -d,e,c){l(a,d,function(a){var d=[];if(a.response.view&&a.response.view.length)for(var f=0;f<=a.response.view[0].result.length-1;f++){var g=a.response.view[0].result[f].location;var m=b.latLng(g.displayPosition.latitude,g.displayPosition.longitude);var l=b.latLngBounds(b.latLng(g.mapView.topLeft.latitude,g.mapView.topLeft.longitude),b.latLng(g.mapView.bottomRight.latitude,g.mapView.bottomRight.longitude));d[f]={name:g.address.label,bbox:l,center:m}}e.call(c,d)})}}),A=b.Class.extend({options:{next:void 0, -sizeInMeters:1E4},initialize:function(a){b.Util.setOptions(this,a)},geocode:function(a,d,e){var c;if(c=a.match(/^([NS])\s*(\d{1,3}(?:\.\d*)?)\W*([EW])\s*(\d{1,3}(?:\.\d*)?)$/))var f=b.latLng((/N/i.test(c[1])?1:-1)*parseFloat(c[2]),(/E/i.test(c[3])?1:-1)*parseFloat(c[4]));else if(c=a.match(/^(\d{1,3}(?:\.\d*)?)\s*([NS])\W*(\d{1,3}(?:\.\d*)?)\s*([EW])$/))f=b.latLng((/N/i.test(c[2])?1:-1)*parseFloat(c[1]),(/E/i.test(c[4])?1:-1)*parseFloat(c[3]));else if(c=a.match(/^([NS])\s*(\d{1,3})\u00b0?\s*(\d{1,3}(?:\.\d*)?)?['\u2032]?\W*([EW])\s*(\d{1,3})\u00b0?\s*(\d{1,3}(?:\.\d*)?)?['\u2032]?$/))f= +this._key.length&&(a.key=this._key);a=b.Util.extend(a,this.options.geocodingQueryParams);l(this.options.serviceUrl,a,function(a){var c=[];if(a.results&&a.results.length)for(var h=0;h<=a.results.length-1;h++){var k=a.results[h],g=b.latLng(k.geometry.location),m=b.latLngBounds(b.latLng(k.geometry.viewport.northeast),b.latLng(k.geometry.viewport.southwest));c[h]={name:k.formatted_address,bbox:m,center:g,properties:k.address_components}}d.call(e,c)})},reverse:function(a,d,e,c){a={latlng:encodeURIComponent(a.lat)+ +","+encodeURIComponent(a.lng)};a=b.Util.extend(a,this.options.reverseQueryParams);this._key&&this._key.length&&(a.key=this._key);l(this.options.serviceUrl,a,function(a){var d=[];if(a.results&&a.results.length)for(var f=0;f<=a.results.length-1;f++){var g=a.results[f],m=b.latLng(g.geometry.location),l=b.latLngBounds(b.latLng(g.geometry.viewport.northeast),b.latLng(g.geometry.viewport.southwest));d[f]={name:g.formatted_address,bbox:l,center:m,properties:g.address_components}}e.call(c,d)})}}),z=b.Class.extend({options:{geocodeUrl:"https://geocoder.api.here.com/6.2/geocode.json", +reverseGeocodeUrl:"https://reverse.geocoder.api.here.com/6.2/reversegeocode.json",app_id:"",app_code:"",geocodingQueryParams:{},reverseQueryParams:{},reverseGeocodeProxRadius:null},initialize:function(a){b.setOptions(this,a)},geocode:function(a,d,e){a={searchtext:a,gen:9,app_id:this.options.app_id,app_code:this.options.app_code,jsonattributes:1};a=b.Util.extend(a,this.options.geocodingQueryParams);this.getJSON(this.options.geocodeUrl,a,d,e)},reverse:function(a, +d,e,c){d=(d=this.options.reverseGeocodeProxRadius?this.options.reverseGeocodeProxRadius:null)?","+encodeURIComponent(d):"";a={prox:encodeURIComponent(a.lat)+","+encodeURIComponent(a.lng)+d,mode:"retrieveAddresses",app_id:this.options.app_id,app_code:this.options.app_code,gen:9,jsonattributes:1};a=b.Util.extend(a,this.options.reverseQueryParams);this.getJSON(this.options.reverseGeocodeUrl,a,e,c)},getJSON:function(a,d,e,c){l(a,d,function(a){var d=[];if(a.response.view&&a.response.view.length)for(var f= +0;f<=a.response.view[0].result.length-1;f++){var g=a.response.view[0].result[f].location,m=b.latLng(g.displayPosition.latitude,g.displayPosition.longitude),l=b.latLngBounds(b.latLng(g.mapView.topLeft.latitude,g.mapView.topLeft.longitude),b.latLng(g.mapView.bottomRight.latitude,g.mapView.bottomRight.longitude));d[f]={name:g.address.label,bbox:l,center:m}}e.call(c,d)})}}),A=b.Class.extend({options:{next:void 0,sizeInMeters:1E4},initialize:function(a){b.Util.setOptions(this,a)},geocode:function(a,d, +e){var c;if(c=a.match(/^([NS])\s*(\d{1,3}(?:\.\d*)?)\W*([EW])\s*(\d{1,3}(?:\.\d*)?)$/))var f=b.latLng((/N/i.test(c[1])?1:-1)*parseFloat(c[2]),(/E/i.test(c[3])?1:-1)*parseFloat(c[4]));else if(c=a.match(/^(\d{1,3}(?:\.\d*)?)\s*([NS])\W*(\d{1,3}(?:\.\d*)?)\s*([EW])$/))f=b.latLng((/N/i.test(c[2])?1:-1)*parseFloat(c[1]),(/E/i.test(c[4])?1:-1)*parseFloat(c[3]));else if(c=a.match(/^([NS])\s*(\d{1,3})\u00b0?\s*(\d{1,3}(?:\.\d*)?)?['\u2032]?\W*([EW])\s*(\d{1,3})\u00b0?\s*(\d{1,3}(?:\.\d*)?)?['\u2032]?$/))f= b.latLng((/N/i.test(c[1])?1:-1)*(parseFloat(c[2])+parseFloat(c[3]/60)),(/E/i.test(c[4])?1:-1)*(parseFloat(c[5])+parseFloat(c[6]/60)));else if(c=a.match(/^(\d{1,3})\u00b0?\s*(\d{1,3}(?:\.\d*)?)?['\u2032]?\s*([NS])\W*(\d{1,3})\u00b0?\s*(\d{1,3}(?:\.\d*)?)?['\u2032]?\s*([EW])$/))f=b.latLng((/N/i.test(c[3])?1:-1)*(parseFloat(c[1])+parseFloat(c[2]/60)),(/E/i.test(c[6])?1:-1)*(parseFloat(c[4])+parseFloat(c[5]/60)));else if(c=a.match(/^([NS])\s*(\d{1,3})\u00b0?\s*(\d{1,2})['\u2032]?\s*(\d{1,3}(?:\.\d*)?)?["\u2033]?\W*([EW])\s*(\d{1,3})\u00b0?\s*(\d{1,2})['\u2032]?\s*(\d{1,3}(?:\.\d*)?)?["\u2033]?$/))f= b.latLng((/N/i.test(c[1])?1:-1)*(parseFloat(c[2])+parseFloat(c[3]/60+parseFloat(c[4]/3600))),(/E/i.test(c[5])?1:-1)*(parseFloat(c[6])+parseFloat(c[7]/60)+parseFloat(c[8]/3600)));else if(c=a.match(/^(\d{1,3})\u00b0?\s*(\d{1,2})['\u2032]?\s*(\d{1,3}(?:\.\d*)?)?["\u2033]\s*([NS])\W*(\d{1,3})\u00b0?\s*(\d{1,2})['\u2032]?\s*(\d{1,3}(?:\.\d*)?)?["\u2033]?\s*([EW])$/))f=b.latLng((/N/i.test(c[4])?1:-1)*(parseFloat(c[1])+parseFloat(c[2]/60+parseFloat(c[3]/3600))),(/E/i.test(c[8])?1:-1)*(parseFloat(c[5])+parseFloat(c[6]/ 60)+parseFloat(c[7]/3600)));else if(c=a.match(/^\s*([+-]?\d+(?:\.\d*)?)\s*[\s,]\s*([+-]?\d+(?:\.\d*)?)\s*$/))f=b.latLng(parseFloat(c[1]),parseFloat(c[2]));f?(a=[{name:a,center:f,bbox:f.toBounds(this.options.sizeInMeters)}],d.call(e,a)):this.options.next&&this.options.next.geocode(a,d,e)}}),B=b.Class.extend({options:{serviceUrl:"https://api.mapbox.com/geocoding/v5/mapbox.places/",geocodingQueryParams:{},reverseQueryParams:{}},initialize:function(a,d){b.setOptions(this,d);this.options.geocodingQueryParams.access_token= -a;this.options.reverseQueryParams.access_token=a},geocode:function(a,d,e){var c=this.options.geocodingQueryParams;void 0!==c.proximity&&void 0!==c.proximity.lat&&void 0!==c.proximity.lng&&(c.proximity=c.proximity.lng+","+c.proximity.lat);l(this.options.serviceUrl+encodeURIComponent(a)+".json",c,function(a){var c=[];if(a.features&&a.features.length)for(var f=0;f<=a.features.length-1;f++){var g=a.features[f];var m=b.latLng(g.center.reverse());var l=g.bbox?b.latLngBounds(b.latLng(g.bbox.slice(0,2).reverse()), -b.latLng(g.bbox.slice(2,4).reverse())):b.latLngBounds(m,m);for(var p={text:g.text,address:g.address},n=0;n<(g.context||[]).length;n++){var q=g.context[n].id.split(".")[0];p[q]=g.context[n].text}c[f]={name:g.place_name,bbox:l,center:m,properties:p}}d.call(e,c)})},suggest:function(a,b,e){return this.geocode(a,b,e)},reverse:function(a,d,e,c){l(this.options.serviceUrl+encodeURIComponent(a.lng)+","+encodeURIComponent(a.lat)+".json",this.options.reverseQueryParams,function(a){var d=[];if(a.features&&a.features.length)for(var f= -0;f<=a.features.length-1;f++){var g=a.features[f];var m=b.latLng(g.center.reverse());var l=g.bbox?b.latLngBounds(b.latLng(g.bbox.slice(0,2).reverse()),b.latLng(g.bbox.slice(2,4).reverse())):b.latLngBounds(m,m);d[f]={name:g.place_name,bbox:l,center:m}}e.call(c,d)})}}),C=b.Class.extend({options:{serviceUrl:"https://www.mapquestapi.com/geocoding/v1"},initialize:function(a,d){this._key=decodeURIComponent(a);b.Util.setOptions(this,d)},_formatName:function(){var a=[],b;for(b=0;b",apiKey:"",serviceUrl:"https://neutrinoapi.com/"}, -initialize:function(a){b.Util.setOptions(this,a)},geocode:function(a,d,e){l(this.options.serviceUrl+"geocode-address",{apiKey:this.options.apiKey,userId:this.options.userId,address:a.split(/\s+/).join(".")},function(a){var c=[];if(a.locations){a.geometry=a.locations[0];var h=b.latLng(a.geometry.latitude,a.geometry.longitude);var k=b.latLngBounds(h,h);c[0]={name:a.geometry.address,bbox:k,center:h}}d.call(e,c)})},suggest:function(a,b,e){return this.geocode(a,b,e)},reverse:function(a,d,e,c){l(this.options.serviceUrl+ -"geocode-reverse",{apiKey:this.options.apiKey,userId:this.options.userId,latitude:a.lat,longitude:a.lng},function(d){var f=[];if(200==d.status.status&&d.found){var k=b.latLng(a.lat,a.lng);var g=b.latLngBounds(k,k);f[0]={name:d.address,bbox:g,center:k}}e.call(c,f)})}}),r=b.Class.extend({options:{serviceUrl:"https://nominatim.openstreetmap.org/",geocodingQueryParams:{},reverseQueryParams:{},htmlTemplate:function(a){a=a.address;var b=[];(a.road||a.building)&&b.push("{building} {road} {house_number}"); -(a.city||a.town||a.village||a.hamlet)&&b.push('{postcode} {city} {town} {village} {hamlet}');(a.state||a.country)&&b.push('{state} {country}');return R(b.join("
"),a,!0)}},initialize:function(a){b.Util.setOptions(this,a)},geocode:function(a,d,e){l(this.options.serviceUrl+"search",b.extend({q:a,limit:5,format:"json",addressdetails:1}, -this.options.geocodingQueryParams),b.bind(function(a){for(var c=[],h=a.length-1;0<=h;h--){for(var k=a[h].boundingbox,g=0;4>g;g++)k[g]=parseFloat(k[g]);c[h]={icon:a[h].icon,name:a[h].display_name,html:this.options.htmlTemplate?this.options.htmlTemplate(a[h]):void 0,bbox:b.latLngBounds([k[0],k[2]],[k[1],k[3]]),center:b.latLng(a[h].lat,a[h].lon),properties:a[h]}}d.call(e,c)},this))},reverse:function(a,d,e,c){l(this.options.serviceUrl+"reverse",b.extend({lat:a.lat,lon:a.lng,zoom:Math.round(Math.log(d/ -256)/Math.log(2)),addressdetails:1,format:"json"},this.options.reverseQueryParams),b.bind(function(a){var d=[];if(a&&a.lat&&a.lon){var f=b.latLng(a.lat,a.lon);d.push({name:a.display_name,html:this.options.htmlTemplate?this.options.htmlTemplate(a):void 0,center:f,bounds:b.latLngBounds(f,f),properties:a})}e.call(c,d)},this))}}),E=b.Class.extend({options:{OpenLocationCode:void 0,codeLength:void 0},initialize:function(a){b.setOptions(this,a)},geocode:function(a,d,e){try{var c=this.options.OpenLocationCode.decode(a), -f={name:a,center:b.latLng(c.latitudeCenter,c.longitudeCenter),bbox:b.latLngBounds(b.latLng(c.latitudeLo,c.longitudeLo),b.latLng(c.latitudeHi,c.longitudeHi))};d.call(e,[f])}catch(h){console.warn(h),d.call(e,[])}},reverse:function(a,d,e,c){try{var f={name:this.options.OpenLocationCode.encode(a.lat,a.lng,this.options.codeLength),center:b.latLng(a.lat,a.lng),bbox:b.latLngBounds(b.latLng(a.lat,a.lng),b.latLng(a.lat,a.lng))};e.call(c,[f])}catch(h){console.warn(h),e.call(c,[])}}}),F=b.Class.extend({options:{serviceUrl:"https://api.opencagedata.com/geocode/v1/json"}, -initialize:function(a){this._accessToken=a},geocode:function(a,d,e){l(this.options.serviceUrl,{key:this._accessToken,q:a},function(a){var c=[];if(a.results&&a.results.length)for(var h=0;h",apiKey:"",serviceUrl:"https://neutrinoapi.com/"}, +initialize:function(a){b.Util.setOptions(this,a)},geocode:function(a,d,e){l(this.options.serviceUrl+"geocode-address",{apiKey:this.options.apiKey,userId:this.options.userId,address:a.split(/\s+/).join(".")},function(a){var c=[];if(a.locations){a.geometry=a.locations[0];var h=b.latLng(a.geometry.latitude,a.geometry.longitude),k=b.latLngBounds(h,h);c[0]={name:a.geometry.address,bbox:k,center:h}}d.call(e,c)})},suggest:function(a,b,e){return this.geocode(a,b,e)},reverse:function(a,d,e,c){l(this.options.serviceUrl+ +"geocode-reverse",{apiKey:this.options.apiKey,userId:this.options.userId,latitude:a.lat,longitude:a.lng},function(d){var f=[];if(200==d.status.status&&d.found){var k=b.latLng(a.lat,a.lng),g=b.latLngBounds(k,k);f[0]={name:d.address,bbox:g,center:k}}e.call(c,f)})}}),r=b.Class.extend({options:{serviceUrl:"https://nominatim.openstreetmap.org/",geocodingQueryParams:{},reverseQueryParams:{},htmlTemplate:function(a){a=a.address;var b=[];(a.road||a.building)&&b.push("{building} {road} {house_number}");(a.city|| +a.town||a.village||a.hamlet)&&b.push('{postcode} {city} {town} {village} {hamlet}');(a.state||a.country)&&b.push('{state} {country}');return R(b.join("
"),a,!0)}},initialize:function(a){b.Util.setOptions(this,a)},geocode:function(a,d,e){l(this.options.serviceUrl+"search",b.extend({q:a,limit:5,format:"json",addressdetails:1},this.options.geocodingQueryParams), +b.bind(function(a){for(var c=[],h=a.length-1;0<=h;h--){for(var k=a[h].boundingbox,g=0;4>g;g++)k[g]=parseFloat(k[g]);c[h]={icon:a[h].icon,name:a[h].display_name,html:this.options.htmlTemplate?this.options.htmlTemplate(a[h]):void 0,bbox:b.latLngBounds([k[0],k[2]],[k[1],k[3]]),center:b.latLng(a[h].lat,a[h].lon),properties:a[h]}}d.call(e,c)},this))},reverse:function(a,d,e,c){l(this.options.serviceUrl+"reverse",b.extend({lat:a.lat,lon:a.lng,zoom:Math.round(Math.log(d/256)/Math.log(2)),addressdetails:1, +format:"json"},this.options.reverseQueryParams),b.bind(function(a){var d=[];if(a&&a.lat&&a.lon){var f=b.latLng(a.lat,a.lon);d.push({name:a.display_name,html:this.options.htmlTemplate?this.options.htmlTemplate(a):void 0,center:f,bounds:b.latLngBounds(f,f),properties:a})}e.call(c,d)},this))}}),E=b.Class.extend({options:{OpenLocationCode:void 0,codeLength:void 0},initialize:function(a){b.setOptions(this,a)},geocode:function(a,d,e){try{var c=this.options.OpenLocationCode.decode(a),f={name:a,center:b.latLng(c.latitudeCenter, +c.longitudeCenter),bbox:b.latLngBounds(b.latLng(c.latitudeLo,c.longitudeLo),b.latLng(c.latitudeHi,c.longitudeHi))};d.call(e,[f])}catch(h){console.warn(h),d.call(e,[])}},reverse:function(a,d,e,c){try{var f={name:this.options.OpenLocationCode.encode(a.lat,a.lng,this.options.codeLength),center:b.latLng(a.lat,a.lng),bbox:b.latLngBounds(b.latLng(a.lat,a.lng),b.latLng(a.lat,a.lng))};e.call(c,[f])}catch(h){console.warn(h),e.call(c,[])}}}),F=b.Class.extend({options:{serviceUrl:"https://api.opencagedata.com/geocode/v1/json"}, +initialize:function(a){this._accessToken=a},geocode:function(a,d,e){l(this.options.serviceUrl,{key:this._accessToken,q:a},function(a){var c=[];if(a.results&&a.results.length)for(var h=0;h -this._lastSuggest&&(this._lastSuggest=a.geocoding.timestamp,d.call(e,c._parseResults(a,"bbox")))},this))},reverse:function(a,d,e,c){var f=this;l(this.options.serviceUrl+"/reverse",b.extend({api_key:this._apiKey,"point.lat":a.lat,"point.lon":a.lng},this.options.reverseQueryParams),function(a){e.call(c,f._parseResults(a,"bounds"))})},_parseResults:function(a,d){var e=[];b.geoJson(a,{pointToLayer:function(a,d){return b.circleMarker(d)},onEachFeature:function(a,f){a={};if(f.getBounds){var c=f.getBounds(); -var k=c.getCenter()}else f.feature.bbox?(k=f.getLatLng(),c=b.latLngBounds(b.GeoJSON.coordsToLatLng(f.feature.bbox.slice(0,2)),b.GeoJSON.coordsToLatLng(f.feature.bbox.slice(2,4)))):(k=f.getLatLng(),c=b.latLngBounds(k,k));a.name=f.feature.properties.label;a.center=k;a[d]=c;a.properties=f.feature.properties;e.push(a)}});return e}}),t=p,G=p,H=G.extend({options:{serviceUrl:"https://api.openrouteservice.org/geocode"}}),I=b.Class.extend({options:{serviceUrl:"https://photon.komoot.de/api/",reverseUrl:"https://photon.komoot.de/reverse/", +this._lastSuggest&&(this._lastSuggest=a.geocoding.timestamp,d.call(e,c._parseResults(a,"bbox")))},this))},reverse:function(a,d,e,c){var f=this;l(this.options.serviceUrl+"/reverse",b.extend({api_key:this._apiKey,"point.lat":a.lat,"point.lon":a.lng},this.options.reverseQueryParams),function(a){e.call(c,f._parseResults(a,"bounds"))})},_parseResults:function(a,d){var e=[];b.geoJson(a,{pointToLayer:function(a,d){return b.circleMarker(d)},onEachFeature:function(a,f){a={};if(f.getBounds)var c=f.getBounds(), +k=c.getCenter();else f.feature.bbox?(k=f.getLatLng(),c=b.latLngBounds(b.GeoJSON.coordsToLatLng(f.feature.bbox.slice(0,2)),b.GeoJSON.coordsToLatLng(f.feature.bbox.slice(2,4)))):(k=f.getLatLng(),c=b.latLngBounds(k,k));a.name=f.feature.properties.label;a.center=k;a[d]=c;a.properties=f.feature.properties;e.push(a)}});return e}}),t=p,G=p,H=G.extend({options:{serviceUrl:"https://api.openrouteservice.org/geocode"}}),I=b.Class.extend({options:{serviceUrl:"https://photon.komoot.de/api/",reverseUrl:"https://photon.komoot.de/reverse/", nameProperties:"name street suburb hamlet town city state country".split(" ")},initialize:function(a){b.setOptions(this,a)},geocode:function(a,d,e){a=b.extend({q:a},this.options.geocodingQueryParams);l(this.options.serviceUrl,a,b.bind(function(a){d.call(e,this._decodeFeatures(a))},this))},suggest:function(a,b,e){return this.geocode(a,b,e)},reverse:function(a,d,e,c){a=b.extend({lat:a.lat,lon:a.lng},this.options.reverseQueryParams);l(this.options.reverseUrl,a,b.bind(function(a){e.call(c,this._decodeFeatures(a))}, -this))},_decodeFeatures:function(a){var d=[],e;if(a&&a.features)for(e=0;e style and assign icon classes + directly to text elements, if you don't mind about IE7. + +- demo.html - demo file, to show your webfont content + +- LICENSE.txt - license info about source fonts, used to build your one. + +- config.json - keeps your settings. You can import it back into fontello + anytime, to continue your work + + +Why so many CSS files ? +----------------------- + +Because we like to fit all your needs :) + +- basic file, .css - is usually enough, it contains @font-face + and character code definitions + +- *-ie7.css - if you need IE7 support, but still don't wish to put char codes + directly into html + +- *-codes.css and *-ie7-codes.css - if you like to use your own @font-face + rules, but still wish to benefit from css generation. That can be very + convenient for automated asset build systems. When you need to update font - + no need to manually edit files, just override old version with archive + content. See fontello source code for examples. + +- *-embedded.css - basic css file, but with embedded WOFF font, to avoid + CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain. + We strongly recommend to resolve this issue by `Access-Control-Allow-Origin` + server headers. But if you ok with dirty hack - this file is for you. Note, + that data url moved to separate @font-face to avoid problems with + + + + + + + +
+

ui-leaflet-custom-icons font demo

+ +
+
+
+
uil-location0xe800
+
uil-location-10xe801
+
uil-pin0xe802
+
uil-pin-10xe803
+
+
+
uil-login0xe804
+
uil-cog-alt0xe805
+
uil-cog0xe806
+
uil-cog-circled0xe807
+
+
+
uil-params0xe808
+
uil-wrench0xe809
+
uil-wrench-10xe80a
+
uil-wrench-20xe80b
+
+
+
uil-wrench-circled0xe80c
+
uil-warning0xe80d
+
uil-attention-circled0xe80e
+
uil-bell0xe80f
+
+
+
uil-info-circled0xe810
+
uil-help-circled0xe811
+
uil-help-circled-alt0xe812
+
uil-check0xe813
+
+
+
uil-ok-circled20xe814
+
uil-ok-circled0xe815
+
uil-tools0xe816
+
uil-user-add0xe817
+
+
+
uil-th-large0xe818
+
uil-th0xe819
+
uil-right-outline0xe81a
+
uil-right0xe81b
+
+
+
uil-right-open0xe81c
+
uil-right-open-outline0xe81d
+
uil-left-outline0xe81e
+
uil-left0xe81f
+
+
+
uil-left-open0xe820
+
uil-left-open-outline0xe821
+
uil-down0xe822
+
uil-download0xe823
+
+
+
uil-down-circled20xe824
+
uil-down-open0xf004
+
uil-up-open0xf005
+
uil-menu0xf008
+
+
+
uil-logout0xf02d
+
uil-upload0xf02f
+
uil-link0xf07b
+
uil-zoom-in0xf07e
+
+
+
uil-zoom-out0xf07f
+
uil-up-circled0xf0aa
+
uil-bell-alt0xf0f3
+
uil-angle-circled-left0xf137
+
+
+
uil-angle-circled-right0xf138
+
uil-angle-circled-up0xf139
+
uil-angle-circled-down0xf13a
+
uil-right-circled20xf18e
+
+
+
uil-paper-plane0xf1d8
+
uil-paper-plane-empty0xf1d9
+
uil-sliders0xf1de
+
uil-user-plus0xf234
+
+
+
uil-map-pin0xf276
+
uil-map-o0xf278
+
uil-map0xf279
+
uil-search0xf50d
+
+
+ + + \ No newline at end of file diff --git a/assets/fontello/font/ui-leaflet-custom-icons.eot b/assets/fontello/font/ui-leaflet-custom-icons.eot new file mode 100644 index 0000000000000000000000000000000000000000..5b148a270492ecfc426134d340d5b057bd7a9c1d GIT binary patch literal 20868 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 + + +Copyright (C) 2020 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/fontello/font/ui-leaflet-custom-icons.ttf b/assets/fontello/font/ui-leaflet-custom-icons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7747d56dc454cae6fc4797a02a754c41ef620c30 GIT binary patch literal 20640 zcmd^ndwg8Qb^pxV$KHLvA9}6!p+uf=tHqvP;(J!;F@i9skZ3$TE_TR zl(+BNKRSE-*VczoKFyd?z3cE?NPQ)jW32OD+z;)Z-LwDH?>#t#GVYsa_lzE#MZE*% zFizg)Nz zWoqY*shM4)pZ@ya%rmxr4CUMQj~yvdxg)|-CbiWGtYiy zmHHRbnJ~BY7ya z`raRoUZ>df(s!28_b|Rk3SZ(b4l+o$Uo0)}KnGL+?U{2;@ZsuWL=3{;q zU`3dd5?0E}Sdf)tRACljQS=mJaaPHy*eX`dYB2skTCabzL3BLY`&1d4{W}Wz!_}5kia8szK}?}%oh^)hRqie zIEc*`5_pNt7ZSLN%@-2*i_I4jIE~F05_pcy7ZSLS%@-2*kj)noIFij55_pr%7ZSLX z%@-2*mCY9tIG4>A5_p)+7ZSLc%@-2*n#~syIGoKF5_p}>7ZSLh%@-2*A5xo7kOX!C zb3q9*!7hO2lpr1K0yH=!$O*epmrsxwcH!21g6yyh$MT7^%Y_f*6Xc0qcp{%5S?t2= z`2-nbueRh9q>a70I-ekS?A0~-1PNrXuFWUNB761ze1cT6SHGK2kWcpN_wosn%3l3( zK0#*LYk;E!>1D4S&L_w*d+kU*L894fNAn4?4Xv3^B;~}r3wyUQM&IV)NvGq^m!;+d$f*|^w`Zl+0UqyZ*L)S<-s{C>Af zRsuDgdZ3hk$qJX^W`@afZqG2V&3&6u0UOuYf)W4wnMG*vKeU?WCFaG48K68 zq|xhjo0PH|-b9#`al%FMsFhJ*V~9p7r6_PpH#a&XN#5KNPWf=p3G^%`hY5fDW}oes zW!$84yQul8-NOf4%Bn@OgpZe1SC_R6^4YgElS!kWFWP)O_nJZDc5e6ByQX=tdTljN ztWNOU%hQ+zj(Pf`)GH~FrqWE2K>^~tN97EY#rO;$c2~KC;;V^y)JPpy+?DZ`=EhV@ zb4wd9=RVbduUH?faeONGwV$63SZt9$egF0Ajm`dVdTm7?s9hcN2OXdKIbZiFe>k+J z_E^B-{g%JkxM7I;CLZ~3X-J&M%w^ct%+(eS0``Q_aW|9DvZP`fRjvxYpK(Ry%0AdU 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 i1cEa6?tbLIj6g4 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 literal 0 HcmV?d00001 diff --git a/assets/fontello/font/ui-leaflet-custom-icons.woff2 b/assets/fontello/font/ui-leaflet-custom-icons.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b2b8ab24187993cab3f2335eb2715ccbd13ba375 GIT binary patch literal 10552 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 G5q4+$EK0%v literal 0 HcmV?d00001 diff --git a/assets/fontello/sass/_fixed-width.scss b/assets/fontello/sass/_fixed-width.scss new file mode 100644 index 0000000..b221c98 --- /dev/null +++ b/assets/fontello/sass/_fixed-width.scss @@ -0,0 +1,6 @@ +// Fixed Width Icons +// ------------------------- +.#{$fa-css-prefix}-fw { + width: (18em / 14); + text-align: center; +} diff --git a/assets/fontello/sass/_larger.scss b/assets/fontello/sass/_larger.scss new file mode 100644 index 0000000..41e9a81 --- /dev/null +++ b/assets/fontello/sass/_larger.scss @@ -0,0 +1,13 @@ +// Icon Sizes +// ------------------------- + +/* makes the font 33% larger relative to the icon container */ +.#{$fa-css-prefix}-lg { + font-size: (4em / 3); + line-height: (3em / 4); + vertical-align: -15%; +} +.#{$fa-css-prefix}-2x { font-size: 2em; } +.#{$fa-css-prefix}-3x { font-size: 3em; } +.#{$fa-css-prefix}-4x { font-size: 4em; } +.#{$fa-css-prefix}-5x { font-size: 5em; } diff --git a/assets/fontello/sass/ui-custom-icons.scss b/assets/fontello/sass/ui-custom-icons.scss new file mode 100644 index 0000000..2317e8b --- /dev/null +++ b/assets/fontello/sass/ui-custom-icons.scss @@ -0,0 +1,15 @@ +/** + * Custom icon set for UI Leaflet Integration + * @since v0.9.5 + */ + +@import "../css/ui-leaflet-custom-icons"; + +// variables +$fa-css-prefix: "uil"; + + +// add sizing options, similar to font / fork awesome + +@import "larger"; +@import "fixed-width"; diff --git a/assets/plugin.js b/assets/plugin.js index e6ea5b8..0f5cf71 100644 --- a/assets/plugin.js +++ b/assets/plugin.js @@ -1,10 +1,22 @@ /** * Leaflet handler (theoretically requires no jQuery, but we use it anyway, just because ;) :P ) * - * @version 0.6.2 + * @version 0.7 + * * Changelog: + * + * v0.7: + * - added custom options for zoom control and geocoder via global script object (ui_leaflet_extension_options) + * + * v0.6.4: + * - added customizable location detection error messages + * + * v0.6.3: + * - changed default marker HTML to use our own custom font icon set + * * v0.6.2: * - set zoom control position + * * v0.6.1: * - bugfix for search control position * @@ -14,6 +26,7 @@ * v0.5: * - enhanced custom events with useful information * - event data always include the map ID + * * v0.4: * - added custom events */ @@ -96,9 +109,36 @@ jQuery( function() { if( _use_zoom_control == false ) { //console.log( 'zoom_position:', config.zoom_position ); + var _zoom_control_options = { + position: config.zoom_position, + }; + /** + * Add options for the custom zoom control via global JS object + * + * @since 0.9.6 + */ + + if( typeof( ui_leaflet_extension_options ) != 'undefined' && typeof( ui_leaflet_extension_options.zoom_control ) != 'undefined' ) { + var _default_zoom_control_options = _zoom_control_options; + + _zoom_control_options = Object.assign( _zoom_control_options, ui_leaflet_extension_options.zoom_control ); + + /* + _zoom_control_options = ui_leaflet_extension_options.zoom_control; + + if( typeof( _zoom_control_options.position ) == 'undefined' ) { + _zoom_control_options.position = config.zoom_position; + }*/ + } + console.log( 'current zoom control options:', _zoom_control_options ); + + L.control.zoom( _zoom_control_options ).addTo( _ui_leaflet_maps[ strMapID ] ); + + /* L.control.zoom({ position: config.zoom_position, }).addTo( _ui_leaflet_maps[ strMapID ] ); + */ } // focus @@ -110,7 +150,7 @@ jQuery( function() { if( typeof( config.use_search ) != 'undefined' && typeof( L.Control.geocoder ) != 'undefined' ) { // enabled and geocoder lib loaded - _search_position = 'topleft'; + _search_position = 'topright'; if( typeof( config.search_position ) != 'undefined' ) { _search_position = config.search_position; @@ -118,10 +158,29 @@ jQuery( function() { //console.log( 'position:', _search_position ); + /** + * Custom geocoder options + * @since v0.9.6 + */ + + _ui_leaflet_geocoder_options = { + collapsed: false, + position: _search_position, + }; + + if( typeof( ui_leaflet_extension_options.ui_leaflet_geocoder_js ) != 'undefined' ) { + _ui_leaflet_geocoder_options = Object.assign( _ui_leaflet_geocoder_options, ui_leaflet_extension_options.ui_leaflet_geocoder_js ); + } + + + L.Control.geocoder( _ui_leaflet_geocoder_options ).addTo( _ui_leaflet_maps[ strMapID ] ); + + /* L.Control.geocoder({ collapsed: false, position: _search_position, }).addTo( _ui_leaflet_maps[ strMapID ] ); + */ } @@ -142,14 +201,24 @@ jQuery( function() { //if( typeof( config.locate_popup ) != 'undefined' ) { var popup = L.popup(); + var strLocDecErrorMsg = 'Error: The Geolocation service failed.'; // supported, but failed + var strLocDecUnsupportedMsg = 'Error: This browser doesn\'t support geolocation.'; // not supported by device + if( typeof( config.msg_locate_error ) != 'undefined' ) { + strLocDecErrorMsg = config.msg_locate_error; + } + if( typeof( config.msg_locate_unsupported ) != 'undefined' ) { + strLocDecUnsupportedMsg = config.msg_locate_unsupported; + } + function geolocationErrorOccurred(geolocationSupported, popup, latLng) { popup.setLatLng(latLng); popup.setContent(geolocationSupported ? - 'Error: The Geolocation service failed.' : - 'Error: This browser doesn\'t support geolocation.'); + strLocDecErrorMsg : + strLocDecUnsupportedMsg + ); //popup.openOn(geolocationMap); popup.openOn( _ui_leaflet_maps[ strMapID ] ); @@ -232,7 +301,8 @@ jQuery( function() { * @since 0.9.4 */ - var strMarkerIcon = ''; + //var strMarkerIcon = ''; + var strMarkerIcon = ''; if( typeof( config.marker_fa_icon ) != 'undefined' && config.marker_fa_icon != '' ) { var strMarkerIcon = ''; @@ -244,7 +314,7 @@ jQuery( function() { */ if( typeof( config.marker_far_icon ) != 'undefined' && config.marker_far_icon != '' ) { - var strMarkerIcon = ''; + var strMarkerIcon = ''; } /** diff --git a/includes/admin.class.php b/includes/admin.class.php index f2cdd24..8022e95 100644 --- a/includes/admin.class.php +++ b/includes/admin.class.php @@ -4,7 +4,7 @@ * * Adds a simple settings page plus some base methods for further extension * - * @since 0.5 + * @since 0.9.5 */ class _ui_LeafletAdmin { diff --git a/includes/leaflet-map.class.php b/includes/leaflet-map.class.php index 51d67d7..f9c6d03 100644 --- a/includes/leaflet-map.class.php +++ b/includes/leaflet-map.class.php @@ -2,17 +2,16 @@ /** * Insert leaflet map plus options into post (or anywhere else) * - * @version 0.9.5 + * @version 0.9.6 */ class _ui_LeafletIntegration extends _ui_LeafletBase { public $pluginPrefix = 'ui_leaflet_', $pluginPath = '', $pluginURL = '', - $pluginVersion = '0.9.5'; + $pluginVersion = '0.9.6'; protected $bPreloadAssets = false; - public static function init() { new self( true ); @@ -160,7 +159,7 @@ function init_assets() { * Change the version number (string!) to load a different version of the leaflet map library, eg. for backward compatiblity. * @hook ui_leaflet_load_leaflet_version */ - $leaflet_version = apply_filters( $this->pluginPrefix . 'load_leaflet_version', '0.7.7' ); + $leaflet_version = apply_filters( $this->pluginPrefix . 'load_leaflet_version', '0.7.7' ); // legacy version $leaflet_version = apply_filters( $this->pluginPrefix . 'load_leaflet_version', '1.0.1' ); $leaflet_version = apply_filters( $this->pluginPrefix . 'load_leaflet_version', '1.2' ); $leaflet_version = apply_filters( $this->pluginPrefix . 'load_leaflet_version', '1.3' ); @@ -181,11 +180,7 @@ function init_assets() { $leaflet_js_url = apply_filters( $this->pluginPrefix . 'js_url', trailingslashit( $this->pluginURL ). "assets/leaflet/$leaflet_version/leaflet.js"); $leaflet_css_url = apply_filters( $this->pluginPrefix . 'css_url', trailingslashit( $this->pluginURL ) . "assets/leaflet/$leaflet_version/leaflet.css"); - //$leaflet_geocoder_version = '1.10.0'; - //$leaflet_geocoder_js_url = apply_filters( $this->pluginPrefix . 'geocoder_js_url', trailingslashit( $this->pluginURL ) . 'assets/extensions/Control.Geocoder.js' ); - //$leaflet_geocoder_css_url = apply_filters( $this->pluginPrefix . 'geocoder_css_url', trailingslashit( $this->pluginURL ) . 'assets/extensions/Control.Geocoder.css' ); - - + //new __debug( array( 'url' => $this->pluginURL, 'path' => $this->pluginPath ), 'plugin path settings' ); $load_in_footer = apply_filters( $this->pluginPrefix . 'load_in_footer', true ); @@ -213,12 +208,38 @@ function init_assets() { $plugin_js_deps = wp_parse_args( $plugin_js_deps, $extension_js_handles ); } + /** + * Add additional options and settings to be available for the extensions using this filter. By default, uses additional options for the Geocoder Control (primarly for string translation) + * @hook ui_leaflet_add_extension_options + * + * @param array $extension_options + * + * + */ + + $extension_options = apply_filters( $this->pluginPrefix . 'add_extension_options', array( + $this->pluginPrefix . 'geocoder_js' => array( + 'errorMessage' => __('Nothing found.', 'ui-leaflet-integration' ), + 'placeholder' => __('Search ..', 'ui-leaflet-integration' ), + 'iconLabel' => __('Initiate a new search', 'ui-leaflet-integration' ), + ), + /* + 'zoom_control' => array( + + ),*/ + ) ); + //new __debug( $plugin_js_deps, 'plugin_js_deps' ); // full wp_register_script( $this->pluginPrefix . 'plugin', trailingslashit( $this->pluginURL ). 'assets/plugin.js', $plugin_js_deps, $this->pluginVersion, $load_in_footer ); + // add additional options using wp_localize_script + if( !empty( $extension_options ) ) { + wp_localize_script( $this->pluginPrefix . 'plugin', $this->pluginPrefix . 'extension_options', $extension_options ); + } + /** * NOTE: DO _NOT_ attempt to load the CSS in the footer - it will fuck up the map display! @@ -230,6 +251,10 @@ function init_assets() { wp_register_style( $this->pluginPrefix . 'geocoder_css', trailingslashit( $this->pluginURL ) . 'assets/extensions/Control.Geocoder.css', array(), '1.10.0' ); + //wp_register_style( $this->pluginPrefix . 'fork-awesome', trailingslashit ( $this->pluginURL ) . 'assets/fork-awesome/css/fork-awesome.min.css', array(), '1.1.7' ); + + wp_register_style( $this->pluginPrefix . 'custom-icons', trailingslashit( $this->pluginURL ) . 'assets/fontello/css/ui-leaflet-custom-icons.css', array(), $this->pluginVersion ); + /** * Enqueue additional Leaflet extensions (Javascript files). Default array includes the Geocoder Control (v1.10.0) supplied with this plugin. * @hook ui_leaflet_add_extensions_css @@ -240,6 +265,15 @@ function init_assets() { $extension_css_handles = apply_filters( $this->pluginPrefix . 'add_extensions_css', array( $this->pluginPrefix . 'geocoder_css' ) ); + $load_custom_icons = apply_filters( $this->pluginPrefix . 'load_icons', false ); + + + + if( !empty( $load_custom_icons ) && !in_array( $this->pluginPrefix . 'custom-icons', $extension_css_handles, true ) ) { + $extension_css_handles[] = $this->pluginPrefix . 'custom-icons'; + } + + $plugin_css_deps = array( $this->pluginPrefix . 'base_css' ); if( !empty( $extension_css_handles ) ) { @@ -251,10 +285,6 @@ function init_assets() { wp_register_style( $this->pluginPrefix . 'css', $this->pluginURL . 'assets/plugin.css', $plugin_css_deps, $this->pluginVersion ); - //wp_register_style( $this->pluginPrefix . 'plugin_simple', trailingslashit( $this->pluginURL ) . 'assets/plugin.css', array( $this->pluginPrefix . 'css' ), $this->pluginVersion, false ); - - //wp_register_style( $this->pluginPrefix . 'plugin', trailingslashit( $this->pluginURL ) . 'assets/plugin.css', array( $this->pluginPrefix . 'geocoder_css' ), $this->pluginVersion, false ); - // dont load CSS in footer $this->load_assets('css'); @@ -311,6 +341,8 @@ function _setup() { // for the future //$arrOptions = get_option( $this->pluginPrefix . 'settings', array() ); + + if( !empty( $arrOptions ) && is_array( $arrOptions ) ) { $this->config = wp_parse_args( $this->_get_default_params(), $arrOptions ); } else { @@ -330,6 +362,8 @@ function _setup() { $this->pluginPath = _UI_LEAFLET_MAP_PATH; } + + //add_action('wp_footer', array( $this, 'reset_queue' ), 9999 ); } @@ -344,12 +378,29 @@ function reset_queue() { protected function _get_default_params() { - return array( + $return = array( 'enable_map_shortcode' => false, 'enable_marker_shortcode' => false, 'tile_server' => 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', 'map_height' => '400px', /* default height */ + 'mapquest_key' => '', ); + + /** + * @since v0.9.6 + * + * NOTE Not very useful for the tile server, because MQ apparently doesnt offer direct access to its tile server anymore (only with the help of Leaflet plugins), but its certainly a big help for any kind of geocoder :) + */ + + $strMapQuestKey = ''; + + if( defined( '_UI_LEAFLET_MAPQUEST_KEY' ) ) { + $strMapQuestKey = _UI_LEAFLET_MAPQUEST_KEY; + } + + $return[ 'mapquest_key' ] = apply_filters( $this->add_plugin_prefix( 'get_mapquest_key' ), $strMapQuestKey ); + + return $return; } @@ -438,8 +489,7 @@ function get_tile_server( $handle = '' ) { /** * List from @link https://josm.openstreetmap.de/wiki/Maps - */ - + */ switch( $handle ) { case 'default': case 'standard': @@ -462,13 +512,13 @@ function get_tile_server( $handle = '' ) { case 'osm_blank': $return = 'https://www.toolserver.org/tiles/osm-no-labels/{z}/{x}/{y}.png'; break; - case 'mapnik': case 'mapnick': default: $return = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; break; + case 'skobbler': $return = ''; break; @@ -487,6 +537,7 @@ function get_tile_server( $handle = '' ) { * @param string $position Format: "$longitude, $latitude". Alternative to using the longitude and latitude parameters. * @param int $zoom Zoom level. Optional. * @param string $routing Possible routing apps: google (Google Maps) + * @param bool|string $autoload_fa Autoload Fork Awesome CSS. Enable by adding '1' or 'true' as attribute value. Defaults to false. In later stages, one may also use a string to load specific variations of Font Awesome ('fork-awesome' = Fork Awesome 1.x, 'font-awesome' = Font Awesome 4.x, 'font-awesome-pro' = Font Awesome (Pro) 5.x). * * 48.1372568,11.5759285 <= fischbrunnen = base coordinates * lat=48.13733&lon=11.57599 (acc. to OSM) => https://openstreetmap.de/karte.html?zoom=18&lat=48.13733&lon=11.57599&layers=000BTT @@ -526,6 +577,7 @@ function shortcode_map( $attr = array(), $content = '' ) { 'use_locate' => '', 'locate_marker' => '', 'markers' => '', + 'load_icons' => true, ), $attr ); @@ -624,6 +676,9 @@ function shortcode_map( $attr = array(), $content = '' ) { } } + if( !empty( $load_icons ) ) { + add_filter( $this->pluginPrefix . 'load_icons', '__return_true' ); + } if( !empty( $longitude ) && !empty( $latitude ) ) { @@ -667,6 +722,22 @@ function shortcode_map( $attr = array(), $content = '' ) { if( !empty( $routing ) || !empty( $route_service) ) { $strRoutingService = ( !empty( $routing ) ? $routing : $route_service ); + /** + * Filter: Custom routing service + * + * @hook _ui_leaflet_custom_routing_service + * @param array $parameters + * @param string $slug Slug / ID to select the service via the routing / route_service shortcode attribute. + * @param string $title Title of the service to display inside the popup. + * @param string $url + * @param string $text Custom text (instead of the default "Open in %s"). Supports sprintf parameters. + * + * @since 0.9.6 + */ + + $arrCustomRoutingService = apply_filters( $this->add_plugin_prefix( 'custom_routing_service' ), array() ); + + switch( $strRoutingService ) { case 'google': @@ -692,6 +763,15 @@ function shortcode_map( $attr = array(), $content = '' ) { break; } + /** + * @since 0.9.6 + */ + + if( !empty( $arrCustomRoutingService ) ) { + + } + + $strRoutingText = sprintf( __('Open in %s', '_ui-leaflet-integration'), $strRoutingTitle ); if( !empty( $routing_text ) || !empty( $route_service_text ) ) { $strRoutingText = ( !empty( $routing_text ) ? $routing_text : $route_service_text ); diff --git a/plugin.php b/plugin.php index c6c9615..ee6693f 100644 --- a/plugin.php +++ b/plugin.php @@ -4,7 +4,7 @@ Plugin URI: https://github.com/ginsterbusch/ui-leaflet-integration Description: The most less excessive Leaflet map integration. Keeping it simple with a shortcode (and in the future, a shortcode generator interface). Uses the latest Leaflet libary (1.6). Compatible with ClassicPress 1.x. Tags: map, maps, Leaflet, OpenStreetMap, location, geocoding, geolocation, OpenLayers, geotagging, position, google maps, classicpress -Version: 0.9.3 +Version: 0.9.6 Author: Fabian Wolf Author URI: https://usability-idealist.net License: GNU GPL v2 diff --git a/readme.txt b/readme.txt index 43d5985..7698fa9 100644 --- a/readme.txt +++ b/readme.txt @@ -166,6 +166,18 @@ https://github.com/ginsterbusch/ui-leaflet-integration/issues == Changelog == += 0.9.6 = + +* Tweak: Added custom extension options via filter hook (`ui_leaflet_add_extension_options`), exposed in JS as global object `ui_leaflet_extension_options` + += 0.9.5 = + +* Tweak: Added marker extraction routine for the main shortcode (in preparation for future versions) +* Tweak: Use filter hook to enforce assets loading (`_ui_leaflet_load_assets`) +* Added experimental custom icons (SVG / CSS) +* Several bugfixes + + = 0.9.4 = * SSL-related bugfixes * Improved icon classes (use Fork/FontAwesome, Fort Awesome icons, your custom icon library OR replace the complete icon HTML code with your own)