1var hugeitMaps = []; 2 3function hugeitMapsBindInfoWindow(marker, map, infowindow, description, infoType, openOnload) { 4 if (openOnload) { 5 /* Temporarily unnecessary google.maps.event.addListenerOnce(map, 'tilesloaded', function() { 6 infowindow.setContent(description); 7 infowindow.open(map, marker); 8 });*/ 9 } 10 11 google.maps.event.addListener(marker, 'click', function () { 12 infowindow.setContent(description); 13 infowindow.open(map, marker); 14 }); 15} 16 17function hugeitMapsAttachInstructionText(stepDisplay, marker, text, map) { 18 google.maps.event.addListener(marker, 'click', function () { 19 /*Open an info window when the marker is clicked on, containing the text of the step.*/ 20 stepDisplay.setContent(text); 21 stepDisplay.open(map, marker); 22 }); 23} 24 25 26jQuery(document).ready(function () { 27 function hugeitMapsInitializeMap(elementId) { 28 var element = jQuery("#" + elementId), 29 marker = [], 30 polygone = [], 31 polyline = [], 32 polylinepoints, 33 newpolylinecoords = [], 34 polygonpoints, 35 polygoncoords = [], 36 directions = [], 37 directionMarkers = [], 38 newcircle = [], 39 infowindow = new google.maps.InfoWindow, 40 infowindows = [], 41 newcirclemarker = [], 42 circlepoint, 43 locatorEnabled = element.data('locator-enabled'), 44 width = element.width(), 45 height = element.height(), 46 div = parseInt(width) / parseInt(height), 47 dataMapId = element.data('map_id'), 48 dataZoom = element.data('zoom'), 49 dataMinZoom = element.data('min-zoom'), 50 dataMaxZoom = element.data('max-zoom'), 51 dataCenterLat = element.data('center-lat'), 52 dataCenterLng = element.data('center-lng'), 53 dataPanController = parseInt(element.data('pan-controller')), 54 dataZoomController = parseInt(element.data('zoom-controller')), 55 dataTypeController = parseInt(element.data('type-controller')), 56 dataScaleController = parseInt(element.data('scale-controller')), 57 imgurl = element.data('img-url'), 58 dataStreetViewController = parseInt(element.data('street-view-controller')), 59 dataOverviewMapController = parseInt(element.data('overview-map-controller')), 60 dataInfoType = element.data('info-type'), 61 dataOpenInfowindowsOnload = element.data('open-infowindows-onload'); 62 63 var center_coords = new google.maps.LatLng(dataCenterLat, dataCenterLng); 64 65 var frontEndMapOptions = { 66 zoom: parseInt(dataZoom), 67 center: center_coords, 68 disableDefaultUI: true, 69 panControl: dataPanController, 70 zoomControl: dataZoomController, 71 mapTypeControl: dataTypeController, 72 scaleControl: dataScaleController, 73 streetViewControl: dataStreetViewController, 74 overviewMapControl: dataOverviewMapController, 75 mapTypeId: google['maps']['MapTypeId']['ROADMAP'], 76 minZoom: dataMinZoom, 77 maxZoom: dataMaxZoom, 78 fullscreenControl: true 79 }; 80 var front_end_map = new google.maps.Map(document.getElementById(elementId), frontEndMapOptions); 81 82 83 function hugeitMapsFrontRefresh() { 84 google.maps.event.trigger(front_end_map, 'resize'); 85 } 86 87 jQuery(document).on('click',function () { 88 setTimeout(function () { 89 hugeitMapsFrontRefresh(); 90 }, 500); 91 }) 92 93 var front_end_data = { 94 action: 'hugeit_maps_get_info', 95 map_id: dataMapId 96 }; 97 jQuery.ajax({ 98 url: ajaxurl, 99 dataType: 'json', 100 method: 'post', 101 data: front_end_data, 102 beforeSend: function () { 103 } 104 }).done(function (response) { 105 hugeitMapsInitializeMap(response); 106 locStores = response.success.locators; 107 }).fail(function () { 108 console.log('Failed to load response from database'); 109 }); 110 function hugeitMapsInitializeMap(response) { 111 if (response.success) { 112 var mapInfo = response.success; 113 var markers = mapInfo.markers; 114 for (var i = 0; i < markers.length; i++) { 115 var name = markers[i].name; 116 var address = markers[i].address; 117 var anim = markers[i].animation; 118 var description = markers[i].description; 119 var point = new google.maps.LatLng( 120 parseFloat(markers[i].lat), 121 parseFloat(markers[i].lng)); 122 marker[i] = new google.maps.Marker({ 123 map: front_end_map, 124 position: point, 125 title: name, 126 content: description, 127 animation: google['maps']['Animation'][anim] 128 }); 129 var currentInfoWindow; 130 131 if (dataOpenInfowindowsOnload) { 132 currentInfoWindow = infowindows[i] = new google.maps.InfoWindow; 133 } else { 134 currentInfoWindow = infowindow; 135 } 136 hugeitMapsBindInfoWindow(marker[i], front_end_map, currentInfoWindow, description, dataInfoType, dataOpenInfowindowsOnload); 137 } 138 var polygones = mapInfo.polygons; 139 for (var i = 0; i < polygones.length; i++) { 140 var name = polygones[i].name; 141 var line_opacity = polygones[i].line_opacity; 142 var line_color = "#" + polygones[i].line_color; 143 var fill_opacity = polygones[i].fill_opacity; 144 var line_width = polygones[i].line_width; 145 var fill_color = "#" + polygones[i].fill_color; 146 var latlngs = polygones[i].latlng; 147 polygoncoords = []; 148 for (var j = 0; j < latlngs.length; j++) { 149 polygonpoints = new google.maps.LatLng(parseFloat(latlngs[j].lat), 150 parseFloat(latlngs[j].lng)) 151 polygoncoords.push(polygonpoints) 152 } 153 polygone[i] = new google.maps.Polygon({ 154 paths: polygoncoords, 155 map: front_end_map, 156 strokeOpacity: line_opacity, 157 strokeColor: line_color, 158 strokeWeight: line_width, 159 fillOpacity: fill_opacity, 160 fillColor: fill_color, 161 draggable: false 162 }); 163 } 164 var polylines = mapInfo.polylines; 165 for (var i = 0; i < polylines.length; i++) { 166 var name = polylines[i].name; 167 var line_opacity = polylines[i].line_opacity; 168 var line_color = polylines[i].line_color; 169 var line_width = polylines[i].line_width; 170 var latlngs = polylines[i].latlng; 171 newpolylinecoords = []; 172 for (var j = 0; j < latlngs.length; j++) { 173 polylinepoints = new google.maps.LatLng(parseFloat(latlngs[j].lat), 174 parseFloat(latlngs[j].lng)); 175 newpolylinecoords.push(polylinepoints) 176 } 177 polyline[i] = new google.maps.Polyline({ 178 path: newpolylinecoords, 179 map: front_end_map, 180 strokeColor: "#" + line_color, 181 strokeOpacity: line_opacity, 182 strokeWeight: line_width 183 }); 184 } 185 var circles = mapInfo.circles; 186 for (var i = 0; i < circles.length; i++) { 187 var circle_name = circles[i].name; 188 var circle_center_lat = circles[i].center_lat; 189 var circle_center_lng = circles[i].center_lng; 190 var circle_radius = circles[i].radius; 191 var circle_line_width = circles[i].line_width; 192 var circle_line_color = circles[i].line_color; 193 var circle_line_opacity = circles[i].line_opacity; 194 var circle_fill_color = circles[i].fill_color; 195 var circle_fill_opacity = circles[i].fill_opacity; 196 var circle_show_marker = parseInt(circles[i].show_marker); 197 circlepoint = new google.maps.LatLng(parseFloat(circles[i].center_lat), 198 parseFloat(circles[i].center_lng)); 199 newcircle[i] = new google.maps.Circle({ 200 map: front_end_map, 201 center: circlepoint, 202 title: name, 203 radius: parseInt(circle_radius), 204 strokeColor: "#" + circle_line_color, 205 strokeOpacity: circle_line_opacity, 206 strokeWeight: circle_line_width, 207 fillColor: "#" + circle_fill_color, 208 fillOpacity: circle_fill_opacity 209 }); 210 if (circle_show_marker) { 211 newcirclemarker[i] = new google.maps.Marker({ 212 position: circlepoint, 213 map: front_end_map, 214 title: circle_name 215 }); 216 } 217 } 218 } 219 } 220 221 /* locator start */ 222 if (locatorEnabled != 0) { 223 var locpOptions = { 224 map: front_end_map, 225 strokeColor: "#00FF00", 226 strokeOpacity: 0.9, 227 strokeWeight: 4 228 }; 229 var locDirectionsService = new google.maps.DirectionsService; 230 var locDirectionsDisplay = new google.maps.DirectionsRenderer({ 231 suppressMarkers: true, 232 polylineOptions: locpOptions 233 }); 234 var locRouteInfowindow = new google.maps.InfoWindow; 235 var locClosest, locClosetPosition, def, locClosetAddress, locInfoWindow, locCurrent,fromLatLng, locMarker, finalStores = [], locClosetArr = [], locMarkers = []; 236 var locBounds = new google.maps.LatLngBounds(); 237 var locMap_id = dataMapId; 238 var input = document.getElementById('searchLocator_' + locMap_id); 239 var autocomplete = new google.maps.places.Autocomplete(input); 240 var searchBox = new google.maps.places.SearchBox(input); 241 var LocatorIcon = { 242 url: imgurl + "/str-marker-icon.png", 243 labelOrigin: new google.maps.Point(22, 20) 244 }; 245 var labels = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 246 var labelIndex = 1; 247 248 function calcDistance(pointA, pointB) { 249 250 return (google.maps.geometry.spherical.computeDistanceBetween(pointA, pointB) / 1000).toFixed(2); 251 252 } 253 254 function clearDistance() { 255 for (var i in locMarkers) { 256 if (locMarkers[i].get('name') == 'closest') { 257 locMarkers[i].setMap(null); 258 locMarkers[i].length = 0; 259 } 260 261 if (locCurrent) { 262 locCurrent.setMap(null); 263 locCurrent.length = 0; 264 } 265 266 } 267 } 268 269 function clearLocations() { 270 for (var i in locMarkers) { 271 locMarkers[i].setMap(null); 272 } 273 locMarkers.length = 0; 274 } 275 276 function clearDirections() { 277 locDirectionsDisplay.setMap(null); 278 } 279 280 281 282 var oldRadius; 283 var hgCounter=0; 284 var hgTheSame; 285 jQuery(document).on("click", "#submitLocator_" + locMap_id, function () { 286 if(oldRadius!=jQuery("#locatorRadius_" + locMap_id).val()){ 287 oldRadius = jQuery("#locatorRadius_" + locMap_id).val(); 288 hgTheSame=false; 289 } 290 else { 291 hgTheSame=true; 292 } 293 294 var locAddress = jQuery("#searchLocator_" + locMap_id).val(); 295 var locRadius = jQuery("#locatorRadius_" + locMap_id).val(); 296 var testGetDist = function (lp1, lp2) { 297 var deferred = jQuery.Deferred(); 298 var tLocRoute, tLocContent; 299 locDirectionsService.route({ 300 origin: lp1, 301 destination: lp2, 302 travelMode: 'DRIVING' 303 }, function (response, status) { 304 if (status === google.maps.DirectionsStatus.OK) { 305 tLocRoute = response.routes[0]; 306 deferred.resolve(tLocContent = Number(tLocRoute.legs[0].distance.value / 1000).toFixed(1)); 307 } 308 else { 309 deferred.reject(status); 310 } 311 }); 312 return deferred.promise(); 313 }; 314 315 316 function getFinalStores(locStores) { 317 var dfd = jQuery.Deferred(); 318 for (var i in locStores) { 319 (function(i){ 320 321 locStores[i].latLng = new google.maps.LatLng(locStores[i].locator_lat, locStores[i].locator_lng); 322 323 324 testGetDist(fromLatLng, locStores[i].latLng).then(function (resp) { 325 if(locRadius && jQuery.isNumeric(locRadius)){ 326 if (resp < parseInt(locRadius)) { 327 locStores[i].distance = resp; 328 finalStores.push(locStores[i]); 329 } 330 } 331 332 }, 333 function (err) { 334 335 console.log(err); 336 337 }).always(function () { 338 if (i == locStores.length - 1) { 339 dfd.resolve(); 340 } 341 }); 342 }(i)); 343 344 } 345 346 return dfd.promise(); 347 } 348 if (locAddress != "" && locRadius != "") { 349 finalStores = []; 350 var geocoder = new google.maps.Geocoder(); 351 geocoder.geocode({'address': locAddress}, function (result, status) { 352 if (status == google.maps.GeocoderStatus.OK) {
353 /* Compare old with new value */ 354 if(!!fromLatLng){ 355 var oldLatLng = fromLatLng; 356 } 357 fromLatLng = new google.maps.LatLng(result[0].geometry.location.lat(), result[0].geometry.location.lng()); 358 if(!!oldLatLng){ 359 if(oldLatLng.lat()===fromLatLng.lat() && oldLatLng.lng()===fromLatLng.lng() && hgTheSame ){ 360 return false; 361 } 362 } 363 364 /* Compare old with new value */ 365 getFinalStores(locStores).then(function () { 366 if (finalStores.length > 0) { 367 labels = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 368 labelIndex = 1; 369 jQuery(document).find("#huge_main_store_block").remove(); 370 jQuery(".huge_it_google_map_container").after("<div id='huge_main_store_block'></div>"); 371 var StoreBlock = ""; 372 StoreBlock += "<div class='str-block'>"; 373 StoreBlock += " <div class='addr-info'>"; 374 StoreBlock += " <div class='str-img'>"; 375 StoreBlock += " <img src='" + imgurl + "\/str-marker.png' alt=''>"; 376 StoreBlock += " <\/div>"; 377 StoreBlock += " <div class='addr_block'>"; 378 StoreBlock += " <p class='str-name'><\/p>"; 379 StoreBlock += " <p class='str-dir'><a href='' target='_blank'>Get Directions<\/a><\/p>"; 380 StoreBlock += " <div class='str-phone'>"; 381 StoreBlock += " <img src='" + imgurl + "\/phone.png' alt=''><p class='str-number'><\/p>"; 382 StoreBlock += " <\/div>"; 383 StoreBlock += ""; 384 StoreBlock += " <\/div>"; 385 StoreBlock += ""; 386 StoreBlock += " <p class='str-addr'><\/p>"; 387 StoreBlock += " <\/div>"; 388 StoreBlock += ""; 389 StoreBlock += " <div class='a_info'>"; 390 StoreBlock += " <table>"; 391 StoreBlock += " <tr>"; 392 StoreBlock += " <td>Sun<\/td>"; 393 StoreBlock += " <td name='sun'><\/td>"; 394 StoreBlock += " <\/tr>"; 395 StoreBlock += " <tr>"; 396 StoreBlock += " <td>Mon<\/td>"; 397 StoreBlock += " <td name='mon'><\/td>"; 398 StoreBlock += " <\/tr>"; 399 StoreBlock += " <tr>"; 400 StoreBlock += " <td>Tue<\/td>"; 401 StoreBlock += " <td name='tue'><\/td>"; 402 StoreBlock += " <\/tr>"; 403 StoreBlock += " <tr>"; 404 StoreBlock += " <td>Wed<\/td>"; 405 StoreBlock += " <td name='wed'><\/td>"; 406 StoreBlock += " <\/tr>"; 407 StoreBlock += " <tr>"; 408 StoreBlock += " <td>Thu<\/td>"; 409 StoreBlock += " <td name='thu'><\/td>"; 410 StoreBlock += " <\/tr>"; 411 StoreBlock += " <tr>"; 412 StoreBlock += " <td>Fri<\/td>"; 413 StoreBlock += " <td name='fri'><\/td>"; 414 StoreBlock += " <\/tr>"; 415 StoreBlock += " <tr>"; 416 StoreBlock += " <td>Sat<\/td>"; 417 StoreBlock += " <td name='sat'><\/td>"; 418 StoreBlock += " <\/tr>"; 419 StoreBlock += ""; 420 StoreBlock += " <\/table>"; 421 StoreBlock += ""; 422 StoreBlock += " <\/div>"; 423 StoreBlock += " <\/div>"; 424 locClosetArr = []; 425 clearDistance(); 426 clearLocations(); 427 clearDirections(); 428 locClosest = parseInt(locRadius); 429 430 for (var i in finalStores) { 431 locClosetArr.push(finalStores[i].distance); 432 } 433 locClosest = Math.min.apply(null, locClosetArr); 434 for (var i in finalStores) { 435 436 if (typeof(finalStores[i].locator_days) != "object" && finalStores[i].locator_days != "") { 437 finalStores[i].locator_days = JSON.parse(finalStores[i].locator_days); 438 } 439 else { 440 441 if(typeof(finalStores[i].locator_days) != "object" && finalStores[i].locator_days == ""){ 442 finalStores[i].locator_days = JSON.parse(null); 443 } 444 445 } 446 447 locMarker = new google.maps.Marker({ 448 map: front_end_map, 449 position: { 450 lat: finalStores[i].locator_lat, 451 lng: finalStores[i].locator_lng 452 }, 453 id: i, 454 icon: LocatorIcon, 455 label: labels[labelIndex++ % labels.length] 456 457 }); 458 locInfoWindow = new google.maps.InfoWindow; 459 460 if (parseFloat(finalStores[i].distance) <= parseFloat(locClose
460st)) { 461 locClosest = finalStores[i].distance; 462 locClosetPosition = { 463 lat: parseFloat(finalStores[i].locator_lat), 464 lng: parseFloat(finalStores[i].locator_lng) 465 }; 466 locClosetAddress = finalStores[i].locator_addr; 467 locMarker.set('name', 'closest'); 468 } 469 470 locBounds.extend(locMarker.getPosition()); 471 google.maps.event.addListener(locMarker, 'click', function (i) { 472 return function () { 473 testGetDist(fromLatLng, this.position).then(function (resp) { 474 locInfoWindow.setContent("<b>" + finalStores[i].name + "</b><br/>" + finalStores[i].locator_addr + "<br/>" + resp+" km"); 475 }, function (err) { 476 console.log(err); 477 }); 478 locInfoWindow.open(front_end_map, this); 479 } 480 }(i)); 481 482 locMarkers.push(locMarker); 483 jQuery("#huge_main_store_block").append(StoreBlock); 484 if (finalStores[i].locator_phone == "") { 485 jQuery(document).find(".str-phone").last().css("visibility", 'hidden'); 486 } 487 else { 488 jQuery(document).find(".str-phone").last().css("visibility", 'visible'); 489 } 490 var gDirQuery = finalStores[i].locator_addr; 491 gDirQuery = gDirQuery.replace(/ /g, '+'); 492 jQuery(document).find("#huge_main_store_block .str-name").last().text(finalStores[i].name); 493 jQuery(document).find("#huge_main_store_block .str-addr").last().text(finalStores[i].locator_addr); 494 jQuery(document).find("#huge_main_store_block .str-number").last().text(finalStores[i].locator_phone); 495 jQuery(document).find("#huge_main_store_block .str-dir a").last().prop('href', 'https://www.google.com/maps/dir//' + gDirQuery); 496 jQuery(document).find("#huge_main_store_block .str-img img").last().before("<p class='markerLabel'>" + locMarker.label + "</p>"); 497 jQuery(document).find("#huge_main_store_block .a_info").last().find("table tr td:last-child").each(function () { 498 var nameDayOfWeek = jQuery(this).attr('name'); 499 if (finalStores[i].locator_days[nameDayOfWeek].start != "" && finalStores[i].locator_days[nameDayOfWeek].end != "") { 500 jQuery(this).text(finalStores[i].locator_days[nameDayOfWeek].start + " - " + finalStores[i].locator_days[nameDayOfWeek].end); 501 } 502 else { 503 jQuery(this).text("Closed"); 504 } 505 }); 506 } 507 locCurrent = new google.maps.Marker({ 508 map: front_end_map, 509 icon: LocatorIcon, 510 label: 'A', 511 position: fromLatLng 512 }); 513 google.maps.event.addListener(locCurrent, "click", function () { 514 locInfoWindow.setContent(locAddress); 515 locInfoWindow.open(front_end_map, this); 516 }); 517 518 locBounds.extend(locCurrent.getPosition()); 519 front_end_map.fitBounds(locBounds); 520 center_coords = locBounds; 521 var locRoute, locContent; 522 locDirectionsDisplay.setMap(front_end_map
522); 523 locDirectionsService.route({ 524 origin: locCurrent.getPosition(), 525 destination: locClosetPosition, 526 travelMode: 'DRIVING' 527 }, function (response, status) { 528 if (status === google.maps.DirectionsStatus.OK) { 529 locDirectionsDisplay.setDirections(response); 530 locRoute = response.routes[0]; 531 locContent = "<b>Total distance: </b>" + locRoute.legs[0].distance.text; 532 front_end_map.fitBounds(locBounds); 533 } 534 else { 535 window.alert('Directions request failed due to ' + status); 536 } 537 }); 538 locRouteInfowindow.close(); 539 google.maps.event.clearListeners(locpOptions, 'click'); 540 google.maps.event.addListener(locpOptions, "click", function (e) { 541 locRouteInfowindow.close(); 542 locRouteInfowindow.setPosition(e.latLng); 543 locRouteInfowindow.setContent(locContent); 544 locRouteInfowindow.open(front_end_map); 545 }); 546 547 } 548 else { 549 clearDistance(); 550 clearLocations(); 551 clearDirections(); 552 jQuery(document).find("#huge_main_store_block").remove(); 553 alert("Sorry, but there are not available stores in certain radius!"); 554 555 } 556 }); 557 } else { 558 alert('Geocode was not successful for the following reason: ' + status); 559 } 560 561 }); 562 } 563 }); 564 } 565 566 /* locator end */ 567 } 568 569 var allMaps = jQuery('.huge_it_google_map'); 570 571 if (allMaps.length) { 572 573 allMaps.each(function (i) { 574 575 var id = jQuery(this).attr('id'); 576 577 hugeitMaps[i] = hugeitMapsInitializeMap(id); 578 579 580 }); 581 582 } 583 584 585});
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.