110 lines
3.2 KiB
JavaScript
110 lines
3.2 KiB
JavaScript
// 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 = `key=${app.map_provider_options.key}&`
|
|
}
|
|
script.src = `https://maps.googleapis.com/maps/api/js?${key}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
|