// License: LGPL-3.0-or-later var request = require('../../common/client') var map_options = require('./default_options') var cc_map = {} var info_window = false var map_data // the endpoint is the only required param // see maps_controller for endpoint options cc_map.init = function(endpoint, options_obj, query) { endpoint = window.location.origin + '/maps/' + endpoint request.get(endpoint) .query(query) .end(function(err, resp) { map_data = resp.body.data var has_map = document.getElementById('google_maps') if (app.map_provider === 'google') { if (!has_map) { var script = document.createElement('script') script.type = 'text/javascript' script.id = 'google_maps' let key = "" if (app.map_provider_options && app.map_provider_options.key) { key = `api_key=${app.map_provider_options.key}&` } script.src = `https://maps.googleapis.com/maps/api/js?${key}sensor=false&callback=draw_map` document.body.appendChild(script) set_extra_options(options_obj) } else { set_extra_options(options_obj) draw_map() } } else { if (has_map) { has_map.innerText = "Sorry, no map provider is installed" } else { var map = document.getElementById('googleMap') map.innerText = "Sorry, no map provider is installed" } } }) } function set_extra_options(obj){ if(!obj){ return } if(obj.center && obj.center.lat) { map_options.lat = obj.center.lat map_options.lng = obj.center.lng } map_options.disableDefaultUI = obj.disable_ui ? true : false map_options.zoom = obj.zoom ? obj.zoom : map_options.zoom map_options.fit_all = obj.fit_all ? true : false } window.draw_map = function () { map_options.center = new google.maps.LatLng(map_options.lat, map_options.lng) map_options.mapTypeId = google.maps.MapTypeId.NORMAL var map = new google.maps.Map(document.getElementById('googleMap'), map_options) add_markers(map) } function add_markers(map){ var markers = [] appl.def('map_data_count', map_data.length) map_data.forEach(function(data){ if (!data.latitude) { return } var coordinates = new google.maps.LatLng(data.latitude, data.longitude) var marker = new google.maps.Marker({ position: coordinates, map: map, draggable: false, icon: 'https://raw.githubusercontent.com/CommitChange/public-resources/master/images/cc-map-marker-pick-22.png', data: data }) google.maps.event.addListener(marker, 'click', function() { if (info_window) { info_window.close() } info_window = new google.maps.InfoWindow({ content: this.data.name }) info_window.open(map,this) var map_data = this.data if(map_data.total_raised) { map_data.total_raised = utils.cents_to_dollars(map_data.total_raised) } appl.def('map_data', map_data) }) markers.push(marker) }) if(map_options.fit_all) { var bounds = new google.maps.LatLngBounds(); for(var i = 0; i < markers.length; i++) { bounds.extend(markers[i].getPosition()); } map.fitBounds(bounds); } } module.exports = cc_map