atravelblog/js/page-pins-map.js

154 lines
5 KiB
JavaScript
Raw Normal View History

2017-02-20 23:06:13 +01:00
var places = page_pins_map.places;
var map;
var map_center = {lat: parseFloat(places[0]['lat']), lng: parseFloat(places[0]['lng']) };
var traveler = page_pins_map.traveler;
2017-02-20 23:14:13 +01:00
jQuery('document').ready(function(){
for(var i=0; i<traveler.length; i++){
var opt = jQuery('<li>');
opt.addClass('ui-widget-content');
opt.text(traveler[i]);
jQuery('#travelers-select').append(opt);
}
jQuery( "#travelers-select" ).selectable({
2017-02-25 15:19:21 +01:00
stop: applyFilters
});
2017-02-20 23:39:07 +01:00
if(typeof google !== 'undefined'){
// reinit map in case google maps loaded before this script did
initMap();
}
2017-02-21 00:51:05 +01:00
jQuery('#travelers-reset-button').on('click', resetFilter);
2017-02-23 01:14:53 +01:00
jQuery('#toggle-and-or').toggleSwitch({
2017-02-23 01:18:12 +01:00
width: "140px",
height: "20px",
2017-02-23 01:14:53 +01:00
onLabel: "Insgesamt",
offLabel: "Zusammen",
2017-02-25 15:19:21 +01:00
onToggle: applyFilters
2017-02-23 01:14:53 +01:00
});
jQuery('#travelers-extend-button').on('click', toggleExtendTravelers);
2017-02-25 09:16:22 +01:00
toggleExtendTravelers();
2017-02-25 09:41:16 +01:00
initTimeRangeSlider();
});
2017-02-20 23:06:13 +01:00
var markers = [];
function initMap() {
markers = [];
map = new google.maps.Map(document.getElementById('map-stats'), {
center: map_center,
2017-02-25 10:05:14 +01:00
zoom: 15,
mapTypeId: google.maps.MapTypeId.SATELLITE
2017-02-20 23:06:13 +01:00
});
var bounds = new google.maps.LatLngBounds();
for(var i = 0; i < places.length; i++){
var marker = new google.maps.Marker({
position: {lat: parseFloat(places[i]['lat']), lng: parseFloat(places[i]['lng']) },
title: places[i]['title'],
url: "/?p="+places[i]['post'],
traveler: places[i]['traveler'],
2017-02-25 09:41:16 +01:00
startYear: parseInt(places[i]['start'].substr(0,4)),
endYear: parseInt(places[i]['end'].substr(0,4)),
2017-02-20 23:06:13 +01:00
map: map
});
marker.setVisible(true);
markers.push(marker);
google.maps.event.addListener(marker, 'click', function() {
window.location.href = this.url;
});
bounds.extend(marker.getPosition());
}
map.fitBounds(bounds);
window.setTimeout(function(){
if(map.getZoom() > 15){
map.setZoom(15);
}
}, 500);
}
2017-02-25 09:41:16 +01:00
function initTimeRangeSlider(){
var minYear = 3000;
var maxYear = 0;
for(var i=0; i<places.length; i++){
var start = parseInt(places[i].start.substr(0,4));
var end = parseInt(places[i].end.substr(0,4));
minYear = (minYear < start ? minYear : start);
maxYear = (maxYear > end ? maxYear : end);
}
jQuery('#time-range-slider').slider({
range: true,
min: minYear,
max: maxYear,
values: [ minYear, maxYear ],
slide: function( event, ui ) {
jQuery( "#time-range" ).val( ui.values[ 0 ] + " - " + ui.values[ 1 ] );
},
change: applyFilters
2017-02-25 09:41:16 +01:00
});
jQuery( "#time-range" ).val( jQuery( "#time-range-slider" ).slider( "values", 0 ) +
2017-02-25 09:58:32 +01:00
" - " + jQuery( "#time-range-slider" ).slider( "values", 1 ) );
2017-02-25 09:41:16 +01:00
}
2017-02-25 15:19:21 +01:00
function applyFilters(){
2017-02-20 23:06:13 +01:00
var travelers = [];
2017-02-21 00:46:22 +01:00
jQuery('#travelers-select .ui-selected').each(function (i, elem) {
travelers.push(jQuery(elem).text());
});
2017-02-23 00:52:41 +01:00
if(jQuery('#toggle-and-or')[0].checked){
2017-02-23 00:46:20 +01:00
filterMarkersByTravelersOr(travelers);
} else {
2017-02-23 00:56:11 +01:00
filterMarkersByTravelersAnd(travelers);
2017-02-23 00:46:20 +01:00
}
2017-02-25 10:36:12 +01:00
hideOutOfRangePins(jQuery( "#time-range-slider" ).slider( "values", 0 ), jQuery( "#time-range-slider" ).slider( "values", 1 ) );
2017-02-20 23:06:13 +01:00
}
2017-02-21 00:51:05 +01:00
function resetFilter(){
2017-02-21 01:05:39 +01:00
jQuery('#travelers-select .ui-selected').each(function (i, elem) {
jQuery(elem).removeClass('ui-selected');
});
2017-02-25 17:55:56 +01:00
var minYear = jQuery('#time-range-slider').slider("option", "min");
var maxYear = jQuery('#time-range-slider').slider("option", "max");
jQuery('#time-range-slider').slider( "values", [ minYear, maxYear ] );
2017-02-25 17:57:38 +01:00
jQuery('#toggle-and-or').prop( "checked", false );
2017-02-25 10:16:26 +01:00
filterMarkersByTravelersAnd([]);
2017-02-21 00:51:05 +01:00
}
2017-02-23 00:56:11 +01:00
function filterMarkersByTravelersAnd(travelers){
2017-02-20 23:06:13 +01:00
for(var i=0; i<markers.length; i++){
markers[i].setVisible(false);
var all_there = true;
for(var j=0; j<travelers.length; j++){
if(markers[i]['traveler'].indexOf(travelers[j]) == -1){
all_there = false;
break;
}
}
if(all_there){
markers[i].setVisible(true);
}
}
}
function filterMarkersByTravelersOr(travelers){
for(var i=0; i<markers.length; i++){
markers[i].setVisible(false);
for(var j=0; j<travelers.length; j++){
if(markers[i]['traveler'].indexOf(travelers[j]) > -1){
markers[i].setVisible(true);
break;
}
}
}
}
2017-02-25 10:36:12 +01:00
function hideOutOfRangePins(start, end){
for(var i=0; i<markers.length; i++){
2017-02-25 10:39:42 +01:00
if(markers[i].endYear < start || markers[i].startYear > end){
2017-02-25 10:36:12 +01:00
markers[i].setVisible(false);
}
}
}
function toggleExtendTravelers() {
jQuery('#travelers-select li').filter(function(i){
return jQuery(this).text().indexOf(' ') !== -1;
}).each(function(i){
jQuery(this).toggle();
});
2017-02-20 23:06:13 +01:00
}