aboutsummaryrefslogtreecommitdiff
path: root/web/public/javascripts/map.js
blob: 2ca45d04d861a572f8ea648d02a90930aff0c1e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// different basemap
// L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
//     attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
// }).addTo(map);

// different basemap
L.tileLayer('https://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}{r}.{ext}', {
	attribution: 'Map tiles by <a href="http://stamen.com">Stamen Design</a>, <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> &mdash; Map data &copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
	subdomains: 'abcd',
	minZoom: 0,
	maxZoom: 18,
	ext: 'png'
}).addTo(map);

L.geoJson(points, {
	pointToLayer: function (feature, latlng) {
		//return L.circleMarker(latlng);
		return L.marker(latlng);
	}
}).bindPopup(function (layer) {
	// layer.feature.geometry gives you access to all the fields
	showDetails(layer)

	return "<p>" + JSON.stringify(layer.feature.geometry) + "</p>";
}).addTo(map)


function showDetails(layer) {
	let sideBar

	if (document.getElementById('sidebar') === null) {
		sideBar = document.createElement('div')
		let notificationsHeaderElement = document.createElement('h1')
		notificationsHeaderElement.appendChild(document.createTextNode('Details'))
		sideBar.appendChild(notificationsHeaderElement)
		sideBar.id = "sidebar"
	}
	else {
		sideBar = document.getElementById('sidebar')
	}

	let point

	if (document.getElementById('point') !== null) {
		point = document.getElementById('point')
		point.parentNode.removeChild(point)
	}

	point = document.createElement('div')
	point.id = 'point'

	let strongElement = document.createElement('strong')
	let ageRangeText = document.createTextNode('Age range: ')
	strongElement.appendChild(ageRangeText)
	point.appendChild(strongElement)
	point.appendChild(document.createTextNode(layer.feature.geometry['ageRange']))
	point.appendChild(document.createElement('br'))

	let strongElement2 = document.createElement('strong')
	let clothingDescText = document.createTextNode('Clothing description: ')
	strongElement2.appendChild(clothingDescText)
	point.appendChild(strongElement2)
	point.appendChild(document.createTextNode(layer.feature.geometry['clothingDescription']))
	point.appendChild(document.createElement('br'))

	let strongElement3 = document.createElement('strong')
	let injuryStatusText = document.createTextNode('Injury status: ')
	strongElement3.appendChild(injuryStatusText)
	point.appendChild(strongElement3)

	let isInjured = layer.feature.geometry['isInjured']
	let injurySpan = document.createElement('span')
	if (isInjured) {
		injurySpan.appendChild(document.createTextNode('Injured'))
		injurySpan.style.color = 'red'
	}
	else {
		injurySpan.appendChild(document.createTextNode('Not injured'))
		injurySpan.style.color = 'green'
	}
	point.appendChild(injurySpan)
	point.appendChild(document.createElement('br'))

	let strongElement4 = document.createElement('strong')
	let helpReasonText = document.createTextNode('Reason for help: ')
	strongElement4.appendChild(helpReasonText)
	point.appendChild(strongElement4)
	point.appendChild(document.createTextNode(layer.feature.geometry['reasonForHelp']))

	sideBar.appendChild(point)

	let closeBtn = document.createElement('button')
	let closeBtnText = document.createTextNode('Close')
	closeBtn.id = 'close-btn'
	closeBtn.appendChild(closeBtnText)

	sideBar.appendChild(closeBtn)

	let insertBefore = document.getElementById('map')
	insertBefore.parentNode.insertBefore(sideBar, insertBefore)

	closeBtn.addEventListener('click', closeDetails)
}

function closeDetails(e) {
	let details = document.getElementById('sidebar')
	details.parentNode.removeChild(details)
}