1// MEC GOOGLE MAPS PLUGIN 2(function ($) { 3 $.fn.mecGoogleMaps = function (options) { 4 // Default Options 5 var settings = $.extend({ 6 // These are the defaults. 7 latitude: 0, 8 longitude: 0, 9 autoinit: true, 10 fullscreen_button: false, 11 zoom: 14, 12 icon: '../img/m-01.png', 13 markers: {}, 14 sf: {}, 15 geolocation: 0, 16 getDirection: 0, 17 directionOptions: { 18 form: '#mec_get_direction_form', 19 reset: '.mec-map-get-direction-reset', 20 addr: '#mec_get_direction_addr', 21 destination: {} 22 }, 23 month_navigator: 0, 24 sf:{}, 25 }, options); 26 27 var getMarkersLock = false; 28 29 // Initialize Month Navigator 30 if (settings.month_navigator) initMonthNavigator(); 31 32 var bounds; 33 var map; 34 var infowindow; 35 var loadedMarkers = []; 36 var markerCluster; 37 38 var canvas = this; 39 var DOM = canvas[0]; 40 41 // Init the Map 42 if (settings.autoinit) init(); 43 44 function init() { 45 // Search Widget 46 if (settings.sf.container !== '' && false == $(settings.sf.container).hasClass('mec-skin-map-search-init') ) { 47 48 $(settings.sf.container).mecSearchForm({ 49 id: settings.id, 50 atts: settings.atts, 51 callback: function (atts) { 52 settings.atts = atts; 53 getMarkers(); 54 } 55 }); 56 57 $(settings.sf.container).addClass('mec-skin-map-search-init'); 58 } 59 60 if(typeof google === 'undefined') { 61 setTimeout(init, 1000); 62 return; 63 } 64 65 // Create the options 66 bounds = new google.maps.LatLngBounds(); 67 var center = new google.maps.LatLng(settings.latitude, settings.longitude); 68 69 var mapOptions = { 70 scrollwheel: false, 71 mapTypeId: google.maps.MapTypeId.ROADMAP, 72 center: center, 73 zoom: settings.zoom, 74 styles: settings.styles, 75 fullscreenControl: settings.fullscreen_button 76 }; 77 78 // Init map 79 map = new google.maps.Map(DOM, mapOptions); 80 81 // Init Infowindow 82 infowindow = new google.maps.InfoWindow({ 83 pixelOffset: new google.maps.Size(0, -37) 84 }); 85 86 // Load Markers 87 loadMarkers(settings.markers); 88 89 var clusterCalculator = function (markers, numStyles) { 90 var weight = 0; 91 92 for (var i = 0; i < markers.length; ++i) { 93 weight += markers[i].weight; 94 } 95 96 return { 97 text: weight, 98 index: Math.min(String(weight).length, numStyles) 99 }; 100 }; 101 102 var markerClusterOptions = { 103 styles: [{ 104 height: 53, 105 url: settings.clustering_images + '1.png', 106 width: 53, 107 textColor: '#fff' 108 }, 109 { 110 height: 56, 111 url: settings.clustering_images + '2.png', 112 width: 56, 113 textColor: '#000' 114 }, 115 { 116 height: 66, 117 url: settings.clustering_images + '3.png', 118 width: 66, 119 textColor: '#fff' 120 }, 121 { 122 height: 78, 123 url: settings.clustering_images + '4.png', 124 width: 78, 125 textColor: '#fff' 126 }, 127 { 128 height: 90, 129 url: settings.clustering_images + '5.png', 130 width: 90, 131 textColor: '#fff' 132 } 133 ] 134 }; 135 136 markerCluster = new MarkerClusterer(map, null, markerClusterOptions); 137 138 markerCluster.setCalculator(clusterCalculator); 139 markerCluster.addMarkers(loadedMarkers); 140 141 // Initialize get direction feature 142 if (settings.getDirection === 1) initSimpleGetDirection(); 143 else if (settings.getDirection === 2) initAdvancedGetDirection(); 144 145 // Geolocation focus. 146 var permission = false; 147 148 if(typeof navigator.permissions !== 'undefined') 149 { 150 navigator.permissions.query({ 151 name : 'geolocation' 152 }).then(function(result) 153 { 154 if(!settings.geolocation_focus) permission = true; 155 156 result.onchange = function() 157 { 158 if(result.state === 'granted') permission = true; 159 } 160 }); 161 } 162 163 // Geolocation 164 if((settings.geolocation !== 'undefined' && settings.geolocation) && navigator.geolocation) 165 { 166 navigator.geolocation.getCurrentPosition(function (position) 167 { 168 if(permission) 169 { 170 var center = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); 171 var zoom = map.getZoom(); 172 173 if (zoom <= 6) zoom = zoom + 5; 174 else if (zoom <= 10) zoom = zoom + 3; 175 else if (zoom <= 14) zoom = zoom + 2; 176 else if (zoom <= 18) zoom = zoom + 1; 177 178 map.panTo(center); 179 map.setZoom(zoom); 180 } 181 }); 182 } 183 } 184 185 function initMonthNavigator() { 186 // Remove the onclick event 187 $("#mec_skin_" + settings.id + " .mec-load-month").off("
187click"); 188 189 // Add onclick event 190 $("#mec_skin_" + settings.id + " .mec-load-month").on("click", function () { 191 var year = $(this).data("mec-year"); 192 var month = $(this).data("mec-month"); 193 194 getMarkers(year, month); 195 }); 196 } 197 198 function loadMarkers(markers) { 199 var f = 0; 200 for (var i in markers) { 201 f++; 202 var dataMarker = markers[i]; 203 204 var marker = new RichMarker({ 205 position: new google.maps.LatLng(dataMarker.latitude, dataMarker.longitude), 206 map: map, 207 event_ids: dataMarker.event_ids, 208 infowindow: dataMarker.infowindow, 209 lightbox: dataMarker.lightbox, 210 icon: (dataMarker.icon ? dataMarker.icon : settings.icon), 211 content: '<div class="mec-marker-container"><span class="mec-marker-wrap"><span class="mec-marker">' + dataMarker.count + '</span><span class="mec-marker-pulse-wrap"><span class="mec-marker-pulse"></span></span></span></div>', 212 shadow: 'none', 213 weight: dataMarker.count 214 }); 215 216 // Marker Info-Window 217 if (Math.max(document.documentElement.clientWidth, window.innerWidth || 0) > 960) { 218 google.maps.event.addListener(marker, 'mouseover', function (event) { 219 infowindow.close(); 220 infowindow.setContent(this.infowindow); 221 infowindow.open(map, this); 222 }); 223 224 // Marker Lightbox 225 google.maps.event.addListener(marker, 'click', function (event) { 226 lity(this.lightbox); 227 }); 228 } else if (Math.max(document.documentElement.clientWidth, window.innerWidth || 0) <= 960){ 229 google.maps.event.addListener(marker, 'click', function (event) { 230 infowindow.close(); 231 infowindow.setContent(this.infowindow); 232 infowindow.open(map, this); 233 lity(this.lightbox); 234 }); 235 } 236 237 // extend the bounds to include each marker's position 238 bounds.extend(marker.position); 239 240 // Added to Markers 241 loadedMarkers.push(marker); 242 } 243 244 if (f > 1) map.fitBounds(bounds); 245 246 // Set map center if only 1 marker found 247 if (f === 1) { 248 map.setCenter(new google.maps.LatLng(dataMarker.latitude, dataMarker.longitude)); 249 } 250 251 $(document).trigger( 'mec_map_load_markers', [ markers, settings ] ); 252 } 253 254 function renderMarkers(markers){ 255 // Remove Markers 256 removeMarkers(); 257 258 // Load Markers 259 loadMarkers(markers); 260 261 markerCluster.clearMarkers(); 262 markerCluster.addMarkers(loadedMarkers, false); 263 markerCluster.redraw(); 264 } 265 266 function getMarkers( year = null, month = null ) { 267 268 // Already Locked 269 if(getMarkersLock) return; 270 271 // Lock it 272 getMarkersLock = true; 273 274 // Add loader 275 $("#mec_googlemap_canvas" + settings.id).addClass("mec-loading"); 276 277 // Add Loading Class 278 if($('.mec-modal-result').length === 0) $('.mec-wrap').append('<div class="mec-modal-result"></div>'); 279 $('.mec-modal-result').addClass('mec-month-navigator-loading'); 280 281 $.ajax({
282 url: settings.ajax_url, 283 data: "action=mec_map_get_markers&mec_year="+ year + "&mec_month=" + month + "&" + settings.atts, 284 dataType: "json", 285 type: "post", 286 success: function (response) { 287 288 renderMarkers( response.markers ); 289 290 // Append Month 291 $("#mec_skin_events_" + settings.id).append('<div class="mec-month-container" id="mec_monthly_view_month_' + settings.id + '_' + response.current_month + '" data-month-id="' + response.current_month + '">' + response.month + '</div>'); 292 293 // Append Month Navigator 294 $("#mec_skin_" + settings.id + " .mec-skin-map-view-month-navigator-container").append('<div class="mec-month-navigator" id="mec_month_navigator_' + settings.id + '_' + response.current_month + '">' + response.navigator + '</div>'); 295 296 // Remove loader 297 $("#mec_googlemap_canvas" + settings.id).removeClass("mec-loading"); 298 299 $('.mec-modal-result').removeClass('mec-month-navigator-loading'); 300 301 // Release the Lock 302 getMarkersLock = false; 303 }, 304 error: function () { 305 // Remove loader 306 $("#mec_googlemap_canvas" + settings.id).removeClass("mec-loading"); 307 $('.mec-modal-result').removeClass('mec-month-navigator-loading'); 308 309 // Release the Lock 310 getMarkersLock = false; 311 } 312 }); 313 } 314 315 function removeMarkers() { 316 bounds = new google.maps.LatLngBounds(); 317 318 if (loadedMarkers) { 319 for (i = 0; i < loadedMarkers.length; i++) loadedMarkers[i].setMap(null); 320 loadedMarkers.length = 0; 321 } 322 } 323 324 var directionsDisplay; 325 var directionsService; 326 var startMarker; 327 var endMarker; 328 329 function initSimpleGetDirection() { 330 $(settings.directionOptions.form).on('submit', function (event) { 331 event.preventDefault(); 332 333 var from = $(settings.directionOptions.addr).val(); 334 var dest = new google.maps.LatLng(settings.directionOptions.destination.latitude, settings.directionOptions.destination.longitude); 335 336 // Reset the direction 337 if (typeof directionsDisplay !== 'undefined') { 338 directionsDisplay.setMap(null); 339 startMarker.setMap(null); 340 endMarker.setMap(null); 341 } 342 343 // Fade Google Maps canvas 344 $(canvas).fadeTo(300, .4); 345 346 directionsDisplay = new google.maps.DirectionsRenderer({ 347 suppressMarkers: true 348 }); 349 directionsService = new google.maps.DirectionsService(); 350 351 var request = { 352 origin: from, 353 destination: dest, 354 travelMode: google.maps.DirectionsTravelMode.DRIVING 355 }; 356 357 directionsService.route(request, function (response, status) { 358 if (status === google.maps.DirectionsStatus.OK) { 359 directionsDisplay.setDirections(response); 360 directionsDisplay.setMap(map); 361 362 var leg = response.routes[0].legs[0]; 363 startMarker = new google.maps.Marker({ 364 position: leg.start_location, 365 map: map, 366 icon: settings.directionOptions.startMarker, 367 }); 368 369 endMarker = new google.maps.Marker({ 370 position: leg.end_location, 371 map: map, 372 icon: settings.directionOptions.endMarker, 373 }); 374 } 375 376 // Fade Google Maps canvas 377 $(canvas).fadeTo(300, 1); 378 }); 379 380 // Show reset button 381 $(settings.directionOptions.reset).removeClass('mec-util-hidden'); 382 }); 383 384 $(settings.directionOptions.reset).on('click', function (event) { 385 $(settings.directionOptions.addr).val(''); 386 $(settings.directionOptions.form).submit(); 387 388 // Hide reset button 389 $(settings.directionOptions.reset).addClass('mec-util-hidden'); 390 }); 391 } 392 393 function initAdvancedGetDirection() { 394 $(settings.directionOptions.form).on('submit', function (event) { 395 event.preventDefault(); 396 397 var from = $(settings.directionOptions.addr).val(); 398 var url = 'https://maps.google.com/?saddr=' + encodeURIComponent(from) + '&daddr=' + settings.directionOptions.destination.latitude + ',' + settings.directionOptions.destination.longitude; 399 400 window.open(url); 401 }); 402 } 403 404 return { 405 init: function () { 406 init(); 407 } 408 }; 409 }; 410 411}(jQuery));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.