PageSourceSearch

https://sbschool.org/js/frontend/interactive-map.js

js sbschool.org collected 2026-10-03 21:38:45 UTC 11,324 bytes, 336 lines download raw bytes

1function im_supports_history_api() {
2	var ua = window.navigator.userAgent;
3	var msie = ua.indexOf("MSIE ");
4	if(msie>0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) return false;
5	return !!(window.history && history.pushState);
6}
7
8var all_markers_lat_lng = [],
9	category_markers = [],
10	category_layer_groups = [],
11	markers = [],
12	all_markers_arr = (records_json?records_json:[]);
13
14if(map_settings.map_image_url && map_settings.image_height && map_settings.image_width) {
15	if($(window).width() <= 500 && typeof map_settings.use_mobile_specific_zoom_level !== 'undefined' && map_settings.use_mobile_specific_zoom_level == 1) {
16		if(typeof map_settings.mobile_default_latitude !== 'undefined' && map_settings.mobile_default_latitude) map_settings.default_latitude = map_settings.mobile_default_latitude;
17		if(typeof map_settings.mobile_default_longitude !== 'undefined' && map_settings.mobile_default_longitude) map_settings.default_longitude = map_settings.mobile_default_longitude;
18		if(typeof map_settings.mobile_default_zoom !== 'undefined' && map_settings.mobile_default_zoom) map_settings.default_zoom = map_settings.mobile_default_zoom;
19	}
20
21	var map = new L.Map("map", {
22		minZoom : (map_settings.min_zoom?map_settings.min_zoom:1),
23		maxZoom : (map_settings.max_zoom?map_settings.max_zoom:4),
24		center: [(map_settings.default_latitude?map_settings.default_latitude:0),(map_settings.default_longitude?map_settings.default_longitude:0)],
25		zoom : (map_settings.default_zoom?map_settings.default_zoom:2),
26		zoomSnap: 0.5,
27		zoomDelta: 0.5,
28		crs: L.CRS.Simple,
29		scrollWheelZoom: (map_settings.mousewheel_behavior && map_settings.mousewheel_behavior == 'off'?false:true),
30		maxBoundsViscosity: 1.0
31	});
32
33	var map_center = map.getCenter();
34
35	var southWest = map.unproject([0, map_settings.image_height], map.getMaxZoom());
36	var northEast = map.unproject([map_settings.image_width, 0], map.getMaxZoom());
37	var bounds = new L.LatLngBounds(southWest, northEast);
38
39	L.imageOverlay(map_settings.map_image_url, bounds).addTo(map);
40
41	map.setMaxBounds(bounds);
42
43	if(map_settings.default_latitude && map_settings.default_longitude) {
44		map.setView([map_settings.default_latitude,map_settings.default_longitude],map_settings.default_zoom)
45	} else {
46		map.setView(bounds.getCenter());
47	}
48
49	for(b=0;b<all_markers_arr.length;b++) {
50		data = all_markers_arr[b];
51		add_marker(data);
52	}
53
54	map.on('popupopen', function(e) {
55		map.setMaxBounds(null);
56		var px = map.project(e.popup._latlng); // find the pixel location on the map where the popup anchor is
57		px.y -= e.popup._container.clientHeight/2 // find the height of the popup container, divide by 2, subtract from the Y axis of marker location
58		map.panTo(map.unproject(px),{animate: true}); // pan to new center
59	});
60	map.on('popupclose', function(e) {
61		if(im_supports_history_api()) history.pushState(null, null, base_url);
62		map.setMaxBounds(bounds);
63	});
64
65	if(map_settings.pin_behavior == 'hover') {
66		map.on("zoomstart",function(e) {
67			if(all_markers_arr.length) {
68				for(i=0;i<all_markers_arr.length;i++) markers[i].closePopup(false);
69			}
70		});
71	}
72
73	do_filters();
74}
75
76$('body').on('sosimple-overlay-closed',function() {
77	if(im_supports_history_api()) history.pushState(null, null, base_url);
78});
79
80function add_marker(data) {
81	if(!data.latitude || !data.latitude) {
82		data.latitude = map_center.lat;
83		data.longitude = map_center.lng;
84	}
85
86	if(data.latitude && data.latitude) {
87		all_markers_lat_lng.push([data.latitude,data.longitude]);
88
89		var icon = L.divIcon({
90			className: 'interactive-map-marker',
91			iconSize: [30,30],
92			iconAnchor: [15,15],
93			popupAnchor: [0,-15],
94			html:'<div class="interactive-map-icon'+(map_settings.pin_behavior != 'hover'?' showtip" data-marker-id="'+data.content_id+'" title="'+data.title:'')+'" style="background-color: '+data.pin_color+'">'+data.pin_label+'</div>'
95		});
96
97		var marker = L.marker([data.latitude,data.longitude],{icon: icon}).addTo(map);
98		marker.content_id = data.content_id;
99
100		var images = '';
101		for(i=0;i<data.images.length;i++) {
102			images += '<div class="img-wrap" style="background-image: url(\''+data.images[i]+'\');">
102'+(data.image_captions[i]?'<div class="caption">'+data.image_captions[i]+'</div>':'')+'<img src="'+data.images[i]+'" /></div>';
103		}
104
105		marker.infobox =	'<div class="interactive-map-infobox-content" data-marker-id="'+data.content_id+'">' +
106					(images?'<div class="image popup-image-stage loading">'+images+'</div>':'') +
107					'<div class="title">'+data.title+'</div>' +
108					'<div class="interactive-map-icon" style="background-color: '+data.pin_color+'">'+data.pin_label+'</div>' +
109					(data.popup_content?'<div class="popup-desc">'+data.popup_content+'</div>':'') +
110					'	<div class="address">'+data.friendly_address+'</div>' +
111					(data.categories_list?'	<div class="categories"><ul>'+data.categories_list+'</ul></div>':"") +
112					(data.show_directions_button?'<div class="button-wrap"><a href="https://www.google.com/maps?saddr=&daddr='+data.latitude+','+data.longitude+'" class="button" target="_blank">Get Directions</a></div>':"") +
113					'<div class="cb"></div>'+
114					'</div>';
115
116		// all_markers_arr.push(marker);
117
118		if(map_settings.pin_behavior == 'hover') {
119			marker.bindPopup(marker.infobox);
120		}
121
122		$(marker).on("click",function(e) {
123			if(im_supports_history_api()) history.pushState(null, null, base_url+'?i='+data.content_id);
124
125			showSoSimpleOverlay(this.infobox);
126
127			if(typeof is_iframe_embed !== 'undefined' && is_iframe_embed) {
128				$('.popup-desc a').each(function() {
129					if(!$(this).attr('target')) {
130						$(this).attr('target','_parent');
131					}
132				});
133			}
134
135			if($('.popup-image-stage').find('img').length > 1) {
136				$('.popup-image-stage').waitForImages(function() {
137					var shortest = 0;
138					$('.popup-image-stage').find('img').each(function() {
139						var thisheight = $(this).height();
140						if(thisheight>0 && (thisheight < shortest || !shortest)) shortest = thisheight;
141					});
142					$('.popup-image-stage').find('.img-wrap').css({'max-height':shortest+'px'});
143					$('.popup-image-stage').slick().removeClass('loading');
144					$(window).resize();
145				});
146			} else {
147				$('.popup-image-stage').slick().removeClass('loading');
148				$(window).resize();
149			}
150
151			// marker.openPopup(false);
152			// map.panTo([e.target._latlng.lat, e.target._latlng.lng]);
153		});
154
155		markers.push(marker);
156
157		if(map_settings.pin_behavior == 'hover') {
158			var ct;
159			marker.on("mouseover",function(e) {
160				clearTimeout(ct);
161				ct = setTimeout(function() {
162					marker.openPopup(false);
163				},350);
164			});
165			marker.on("mouseout",function(e) {
166				clearTimeout(ct);
167				setTimeout(function() {
168					//marker.closePopup(false);
169				},500);
170			});
171		}
172	}
173}
174
175// do click if url set
176if(window.location.href.indexOf('?i=') > 0) {
177	var tmp = window.location.href.split('?i=');
178	for(i=0;i<markers.length;i++) {
179		if(markers[i].content_id == parseInt(tmp[1])) {
180			$(markers[i]).click();
181		}
182	}
183}
184
185
186$('#interactive-map-categories-list .checkbox').change(function() {
187	do_filters();
188});
189
190function do_filters() {
191	var selected_categories_arr = [];
192	$('#interactive-map-categories-list .checkbox:checked').each(function() {
193		selected_categories_arr.push($(this).val());
194	});
195
196	if(selected_categories_arr.length) {
197		var markers_to_display_arr = [];
198
199		for(x=0;x<selected_categories_arr.length;x++) {
200			cat_id = selected_categories_arr[x];
201
202			for(i=0;i<all_markers_arr.length;i++) {
203				if(typeof markers[i] === 'undefined' || typeof markers[i]._icon === 'undefined') continue;
204
205				$(markers[i]._icon).hide();
206
207				data = all_markers_arr[i];
208				for(j=0;j<data.categories.length;j++) {
209					marker_cat_id = data.categories[j];
210					if(marker_cat_id == cat_id) {
211						markers_to_display_arr.push(markers[i]._icon);
212						break;
213					}
214				}
215			}
216		}
217
218		for(z=0;z<markers_to_display_arr.length;z++) {
219			$(markers_to_display_arr[z]).show();
220		}
221
222	} else {
223		for(i=0;i<all_markers_arr.length;i++) {
224			if(typeof markers[i] !== 'undefined') {
225				$(markers[i]._icon).show();
226			}
227		}
228	}
229}
230
231
232if(map_settings.pin_behavior != 'hover') {
233	add_css(shared_root+'/js/jquery/jquery.tipsy/jquery.tipsy.css');
234	$.when(
235		add_js(shared_root+'/js/jquery/jquery.tipsy/jquery.tipsy.js',1)
236	).done(function() {
237		$(".showtip").tipsy({
238			live: true,
239			html: true,
240			gravity: 's'
241		});
242	});
243}
244
245
246/*
247var latitude = $('#interactive-map-map-settings').attr('data-latitude');
248var longitude = $('#interactive-map-map-settings').attr('data-longitude');
249var pin_behavior = $('#interactive-map-map-settings').attr('data-pin-behavior')
250
251var map = new L.map("map").setView([0,0], 2);
252
253L.tileLayer(cloudmadeUrl, {
254	attribution: cloudmadeAttribution,
255	maxZoom: 18
256}).addTo(map);
257
258if(typeof raw_markers_arr !== 'undefined' && raw_markers_arr.length) {
259	for(i=0;i<raw_markers_arr.length;i++) {
260		addMarker(raw_markers_arr[i][0],raw_markers_arr[i][1],raw_markers_arr[i][2],raw_markers_arr[i][3],raw_markers_arr[i][4],raw_markers_arr[i][5],raw_markers_arr[i][6],raw_markers_arr[i][7],raw_markers_arr[i][8]);
261	}
262}
263
264function addMarker(lat,lng,name,id,address,icon,categories,url,show_directions_button) {
265	all_markers_lat_lng.push([lat,lng]);
266
267	var marker = new L.marker(
268		[lat,lng],
269		{
270			icon: L.icon({
271				iconUrl: icon,
272				iconSize:     [29, 43], // size of the icon
273				//shadowSize:   [30, 36], // size of the shadow
274				iconAnchor:   [15, 43], // point of the icon which will correspond to markers location
275				//shadowAnchor: [15, 36],  // the same for the shadow
276				popupAnchor:  [0, -30] // point from which the popup should open relative to the iconAnchor
277			})
278		}
279	);
280
281	marker.lat = lat;
282	marker.lng = lng;
283	// marker.categories = el.categories;
284	marker.name = name;
285	marker.id = id;
286	marker.address = address;
287
288	var infobox =	'<div class="infobox-content">' +
289					'	<a href="'+url+'" class="title">'+marker.name+'</a>' +
290					'	<div class="address">'+marker.address+'</div>' +
291					(categories?'	<div class="categories"><ul>'+categories+'</ul></div>':"") +
292					(show_directions_button?'<div class="button-wrap"><a href="https://www.google.com/maps?saddr=&daddr='+lat+','+lng+'" class="button" target="_blank">Get Directions</a></div>':"") +
293					'</div>';
294
295	all_markers_arr.push(marker);
296
297	markers.addLayer(marker);
298	marker.bindPopup(infobox);
299
300	marker.on("click",function(e) {
301		marker.openPopup(false);
302		map.panTo([e.target.lat, e.target.lng]);
303	});
304
305	if(pin_behavior == 'hover') {
306		var ct;
307		marker.on("mouseover",function(e) {
308			clearTimeout(ct);
309			ct = setTimeout(function() {
310				marker.openPopup(false);
311			},350);
312		});
313		marker.on("mouseout",function(e) {
314			clearTimeout(ct);
315			setTimeout(function() {
316				//marker.closePopup(false);
317			},500);
318		});
319	}
320}
321
322if(pin_behavior == 'hover') {
323	map.on("zoomstart",function(e) {
324		if(all_markers_arr.length) {
325			for(i=0;i<all_markers_arr.length;i++) all_markers_arr[i].closePopup(false);
326		}
327	});
328}
329
330if(all_markers_arr.length) {
331	setTimeout(function() {
332		// map.fitBounds(all_markers_lat_lng);
333	},50);
334}
335
336*/

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.