PageSourceSearch

https://dgschell.com/wp-content/themes/homesweet/js/maps/jquery-google-map-custom.js

js dgschell.com collected 2026-10-02 01:27:16 UTC 12,790 bytes, 440 lines download raw bytes

1/*!
2 * jQuery Google Map
3 *
4 * @author Pragmatic Mates, http://pragmaticmates.com
5 * @version 1.2
6 * @license GPL 2
7 * @link https://github.com/PragmaticMates/jquery-google-map
8 */
9
10
11(function ($) {
12	var settings;
13	var element;
14	var map;
15	var markers = new Array();
16	var markerCluster;
17	var clustersOnMap = new Array();
18	var clusterListener;
19
20	var methods = {
21		init: function (options) {
22			element = $(this);
23			var defaults = $.extend({
24				geolocation: false,
25				styles: null,
26				zoom: 14,
27				markers: [],
28				infowindow: {
29					borderBottomSpacing: 6,
30					height: 150,
31					width: 340,
32                    offsetX: -21,
33                    offsetY: -21
34				},
35				marker: {
36					height: 40,
37					width: 40
38				},
39				cluster: {
40					height: 40,
41					width: 40,
42					gridSize: 40
43				}
44			});
45
46			settings = $.extend({}, defaults, options);
47
48			loadMap();
49
50			if (options.callback) {
51				options.callback();
52			}
53
54			return $(this);
55		},
56
57		removeMarkers: function () {
58			for (i = 0; i < markers.length; i++) {
59				markers[i].infobox.close();
60				markers[i].marker.close();
61				markers[i].setMap(null);
62			}
63
64			markerCluster.clearMarkers();
65
66			$.each(clustersOnMap, function (index, cluster) {
67				cluster.cluster.close();
68			});
69
70			clusterListener.remove();
71		},
72
73		addMarkers: function (options) {
74			markers = new Array();
75			settings.locations = options.locations;
76			settings.contents = options.contents;
77			settings.types = options.types;
78			settings.markers = options.markers;
79
80			renderElements();
81
82			if (settings.center === undefined) {
83				if ( settings.markers.length > 1 ) {
84		            var bound = new google.maps.LatLngBounds();
85		            for (var i in settings.markers) {
86		                bound.extend(new google.maps.LatLng(settings.markers[i].latitude, settings.markers[i].longitude));
87		            }
88		            map.fitBounds(bound);
89	            } else {
90		        	for (var i in settings.markers) {
91		                map.setCenter( new google.maps.LatLng(settings.markers[i].latitude, settings.markers[i].longitude) );
92		            }
93		        }
94	        }
95		}
96	}
97
98	$.fn.google_map = function (method) {
99		if (methods[method]) {
100			return methods[ method ].apply(this, Array.prototype.slice.call(arguments, 1));
101		} else if (typeof method === 'object' || !method) {
102			return methods.init.apply(this, arguments);
103		} else {
104			$.error('Method ' + method + ' does not exist on Aviators Map');
105		}
106	};
107
108	function loadMap() {
109		var mapOptions = {
110			zoom: settings.zoom,
111			styles: settings.styles,
112			mapTypeId: google.maps.MapTypeId.ROADMAP,
113			scrollwheel: false,
114			draggable: true,
115			mapTypeControl: false,
116			panControl: false,
117			zoomControl: true,
118			zoomControlOptions: {
119				style: google.maps.ZoomControlStyle.SMALL,
120				position: google.maps.ControlPosition.LEFT_BOTTOM
121			}
122		};
123
124        if (settings.center !== undefined) {
125            mapOptions.center = new google.maps.LatLng(settings.center.latitude, settings.center.longitude);
126        }
127
128		map = new google.maps.Map($(element)[0], mapOptions);
129
130		if (settings.geolocation) {
131			if (navigator.geolocation) {
132				browserSupportFlag = true;
133				navigator.geolocation.getCurrentPosition(function (position) {
134					initialLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
135					map.setCenter(initialLocation);
136				}, function () {
137					map.center = new google.maps.LatLng(settings.center.latitude, settings.center.longitude);
138				});
139			} else {
140				browserSupportFlag = false;
141				map.center = new google.maps.LatLng(settings.center.latitude, settings.center.longitude);
142			}
143		}
144
145        if (settings.center === undefined) {
146        	if ( settings.markers.length > 1 ) {
147	            var bound = new google.maps.LatLngBounds();
148	            for (var i in settings.markers) {
149	                bound.extend(new google.maps.LatLng(settings.markers[i].latitude, settings.markers[i].longitude));
150	            }
151	            map.fitBounds(bound);
152	        } else {
153	        	for (var i in settings.markers) {
154	                map.setCenter( new google.maps.LatLng(settings.markers[i].latitude, settings.markers[i].longitude) );
155	            }
156	        }
157        }
158
159		google.maps.event.addListener(map, 'zoom_changed', function () {
160            $.each(markers, function (index, marker) {
161                if (marker.infobox !== undefined) {
162                    marker.infobox.close();
163                    marker.infobox.isOpen = false;
164                }
165            });
166		});
167
168		renderElements();
169		clickClusterOnMap();
170
171		$('body').on('click', '.marker', function(){
172			var id = $(this).data('id');
173			$.each(markers, function (index, marker) {
174                var marker_content = $(marker.marker.getContent());
175                var marker_id = marker_content.data('id');
176                if ( id == marker_id ) {
177                	if (marker.infobox !== undefined) {
178	                    var curMarker = this;
179
180	                    $.each(markers, function (index, marker) {
181	                        if (marker !== curMarker) {
182	                            marker.infobox.close();
183	                            marker.infobox.isOpen = false;
184	                        }
185	                    });
186	                    // center marker
187	                    map.panTo(curMarker.getPosition());
188
189	                    if (curMarker.infobox) {
190	                        if (curMarker.infobox.isOpen === false) {
191	                            curMarker.infobox.open(map, this);
192	                            curMarker.infobox.isOpen = true;
193	                        } else {
194	                            curMarker.infobox.close();
195	                            curMarker.infobox.isOpen = false;
196	                        }
197	                    }
198	                }
199                }
200            });
201		});
202	}
203
204	function isClusterOnMap(clustersOnMap, cluster) {
205		if (cluster === undefined) {
206			return false;
207		}
208
209		if (clustersOnMap.length == 0) {
210			return false;
211		}
212
213		var val = false;
214
215		$.each(clustersOnMap, function (index, cluster_on_map) {
216			if (cluster_on_map.getCenter() == cluster.getCenter()) {
217				val = cluster_on_map;
218			}
219		});
220
221		return val;
222	}
223
224	function clickClusterOnMap() {
225		$('body').on('click', '.clusterer', function(){
226			var center = $(this).data('center');
227			var cluster = false;
228			$.each(clustersOnMap, function (index, cluster_on_map) {
229				if (cluster_on_map.getCenter() == center) {
230					
231					cluster = cluster_on_map;
232				}
233			});
234
235			if ( cluster ) {
236				map.setCenter(cluster.getCenter());
237				map.fitBounds(cluster.getBounds());
238			}
239		});
240	}
241
242	function addClusterOnMap(cluster) {
243		// Hide all cluster's markers
244		$.each(cluster.getMarkers(), (function () {
245			if (this.marker.isHidden == false) {
246				this.marker.isHidden = true;
247				this.marker.close();
248			}
249		}));
250
251		var newCluster = new InfoBox({
252			markers: cluster.getMarkers(),
253			draggable: true,
254			content: '<div class="clusterer" data-center="'+cluster.getCenter()+'"><div class="clusterer-inner">' + cluster.getMarkers().length + '</div></div>',
255			disableAutoPan: true,
256			pixelOffset: new google.maps.Size(-21, -21),
257			position: cluster.getCenter(),
258			closeBoxURL: "",
259			isHidden: false,
260			enableEventPropagation: true,
261			pane: "floatPane"
262		});
263
264		cluster.cluster = newCluster;
265
266		cluster.markers = cluster.getMarkers();
267		cluster.cluster.open(map, cluster.marker);
268		clustersOnMap.push(cluster);
269	}
270
271	function renderElements() {
272		$.each(settings.markers, function (index, markerObject) {
273			// Create invisible markers on the map
274			var args = {
275				position: new google.maps.LatLng(markerObject.latitude, markerObject.longitude),
276				map: map,
277			};
278
279			if (settings.transparentMarkerImage) {
280				args['icon'] = {
281					url: settings.transparentMarkerImage,
282					size: new google.maps.Size(settings.marker.width, settings.marker.height)
283				};
284			}
285
286			var marker = new google.maps.Marker(args);
287
288			// Create infobox for infowindow
289			if (markerObject.content) {
290				marker.infobox = new InfoBox({
291					content: markerObject.content,
292					disableAutoPan: true,
293					pixelOffset: new google.maps.Size(settings.infowindow.offsetX, settings.infowindow.offsetY, settings.infowindow.offsetX, settings.infowindow.offsetY),
294					position: new google.maps.LatLng(markerObject.latitude, markerObject.longitude),
295					isHidden: false,
296                    closeBoxURL: "",
297					pane: "floatPane",
298					enableEventPropagation: false
299				});
300
301				marker.infobox.isOpen = false;
302			}
303
304 			// Create infobox for marker
305			marker.marker = new InfoBox({
306				draggable: true,
307				content: markerObject.marker_content,
308				disableAutoPan: true,
309				pixelOffset: new google.maps.Size(-settings.marker.width/2, -settings.marker.height),
310				position: new google.maps.LatLng(markerObject.latitude, markerObject.longitude),
311				closeBoxURL: "",
312				isHidden: false,
313				pane: "floatPane",
314				enableEventPropagation: true,
315			});
316
317			// Handle logic for opening/closing info windows
318			marker.marker.isHidden = false;
319			marker.marker.open(map, marker);
320			markers.push(marker);
321
322			google.maps.event.addListener(marker, 'click', function (e) {
323                if (marker.infobox !== undefined) {
324                    var curMarker = this;
325
326                    $.each(markers, function (index, marker) {
327                        if (marker !== curMarker) {
328                            marker.infobox.close();
329                            marker.infobox.isOpen = false;
330                        }
331                    });
332                    // center marker
333                    map.panTo(curMarker.getPosition());
334
335                    if (curMarker.infobox) {
336                        if (curMarker.infobox.isOpen === false) {
337                            curMarker.infobox.open(map, this);
338                            curMarker.infobox.isOpen = true;
339                        } else {
340                            curMarker.infobox.close();
341                            curMarker.infobox.isOpen = false;
342                        }
343                    }
344                }
345			});
346		});
347
348		markerCluster = new MarkerClusterer(map, markers, {
349            gridSize: settings.cluster.gridSize,
350			styles: [
351				{
352					textColor: 'transparent',
353					height: settings.cluster.height,
354					url: settings.transparentClusterImage,
355					width: settings.cluster.width
356				}
357			]
358		});
359
360		clustersOnMap = new Array();
361		clusterListener = google.maps.event.addListener(markerCluster, 'clusteringend', function (clusterer) {
362			var availableClusters = clusterer.getClusters();
363			var activeClusters = new Array();
364
365			$.each(availableClusters, function (index, cluster) {
366				if (cluster.getMarkers().length > 1) {
367					activeClusters.push(cluster);
368				}
369			});
370
371			$.each(availableClusters, function (index, cluster) {
372				if (cluster.getMarkers().length > 1) {
373					var val = isClusterOnMap(clustersOnMap, cluster);
374
375					if (val !== false) {
376						val.cluster.setContent('<div class="clusterer" data-center="'+cluster.getCenter()+'"><div class="clusterer-inner">' + cluster.getMarkers().length + '</div></div>');
377						val.markers = cluster.getMarkers();
378						$.each(cluster.getMarkers(), (function (index, marker) {
379							if (marker.marker.isHidden == false) {
380								marker.marker.isHidden = true;
381								marker.marker.close();
382							}
383						}));
384					} else {
385						addClusterOnMap(cluster);
386					}
387				} else {
388					// Show all markers without the cluster
389					$.each(cluster.getMarkers(), function (index, marker) {
390						if (marker.marker.isHidden == true) {
391							marker.marker.open(map, this);
392							marker.marker.isHidden = false;
393						}
394					});
395
396					// Remove old cluster
397					$.each(clustersOnMap, function (index, cluster_on_map) {
398						if (cluster !== undefined && cluster_on_map !== undefined) {
399							if (cluster_on_map.getCenter() == cluster.getCenter()) {
400								// Show all cluster's markers
401								cluster_on_map.cluster.close();
402								clustersOnMap.splice(index, 1);
403							}
404						}
405					});
406				}
407			});
408
409			var newClustersOnMap = new Array();
410
411			$.each(clustersOnMap, function (index, clusterOnMap) {
412				var remove = true;
413
414				$.each(availableClusters, function (index2, availableCluster) {
415					if (availableCluster.getCenter() == clusterOnMap.getCenter()) {
416						remove = false;
417					}
418				});
419
420				if (!remove) {
421					newClustersOnMap.push(clusterOnMap);
422				} else {
423					clusterOnMap.cluster.close();
424				}
425			});
426			
427			clustersOnMap = newClustersOnMap;
428		});
429		
430
431        $(document).on('click', '.infobox .close', function(e) {
432            e.preventDefault();
433
434            $.each(markers, function(index, marker) {
435                marker.infobox.isHidden = true;
436                marker.infobox.close();
437            });
438        });
439	}
440})(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.