WEBVTT

1
00:00:01.460 --> 00:00:04.500
<v ->So in this video we're gonna display a marker</v>

2
00:00:04.500 --> 00:00:07.240
wherever we click on the map.

3
00:00:07.240 --> 00:00:09.940
And for that we are gonna use one more time,

4
00:00:09.940 --> 00:00:11.653
the leaflet library.

5
00:00:13.380 --> 00:00:17.060
And just to make sure that we're following the right path

6
00:00:17.060 --> 00:00:21.840
according to our flow chart here, let's take a look at it.

7
00:00:21.840 --> 00:00:24.770
And so indeed when the page loads,

8
00:00:24.770 --> 00:00:26.970
then we get to current location.

9
00:00:26.970 --> 00:00:30.750
So the coordinates of that, and then after that is done

10
00:00:30.750 --> 00:00:34.170
the map is rendered in the current location.

11
00:00:34.170 --> 00:00:36.220
And so now what we're gonna do next

12
00:00:36.220 --> 00:00:38.320
is to bind an event handler,

13
00:00:38.320 --> 00:00:41.100
so that whenever the user clicks on the map,

14
00:00:41.100 --> 00:00:44.340
we can then display a marker on the map.

15
00:00:44.340 --> 00:00:47.400
So for now we're gonna jump this one and this one,

16
00:00:47.400 --> 00:00:49.670
and continue working with the map.

17
00:00:49.670 --> 00:00:53.060
And so we're gonna basically render a workout on the map,

18
00:00:53.060 --> 00:00:54.870
which is not yet a workout,

19
00:00:54.870 --> 00:00:59.140
but we're simply gonna put a pin or a marker on the map

20
00:00:59.140 --> 00:01:00.870
and then later we can replace that

21
00:01:00.870 --> 00:01:03.543
with the data coming from the workout.

22
00:01:04.920 --> 00:01:06.360
All right?

23
00:01:06.360 --> 00:01:07.723
So let's go do that.

24
00:01:08.570 --> 00:01:10.840
And the first thing that we need to do

25
00:01:10.840 --> 00:01:13.860
is to actually add the event handler to the map

26
00:01:13.860 --> 00:01:17.170
so that we can then handle any incoming clicks.

27
00:01:17.170 --> 00:01:19.163
Now, how are we gonna do that?

28
00:01:20.210 --> 00:01:23.460
I mean, should we simply attach an event listener

29
00:01:23.460 --> 00:01:26.160
to this whole map element here?

30
00:01:26.160 --> 00:01:29.450
That wouldn't really work because then we would have no way

31
00:01:29.450 --> 00:01:34.060
of knowing where exactly the user clicked here on the map.

32
00:01:34.060 --> 00:01:36.820
So basically we would have no way of knowing

33
00:01:36.820 --> 00:01:39.799
the GPS coordinates of whatever location

34
00:01:39.799 --> 00:01:42.660
the user clicked here on the map.

35
00:01:42.660 --> 00:01:47.290
Because that is data that only the map knows, right?

36
00:01:47.290 --> 00:01:50.860
So when I click, let's say here where I am right now,

37
00:01:50.860 --> 00:01:54.680
then I want to handle that click exactly at that position.

38
00:01:54.680 --> 00:01:58.000
And so therefore we need access to the coordinates

39
00:01:58.000 --> 00:02:00.780
of the point that was just clicked.

40
00:02:00.780 --> 00:02:03.180
So in summary, what I'm trying to say

41
00:02:03.180 --> 00:02:07.230
is that we cannot simply use the add event listener method

42
00:02:07.230 --> 00:02:09.360
that we have been using all the time.

43
00:02:09.360 --> 00:02:11.670
Instead, we can use something similar

44
00:02:11.670 --> 00:02:14.390
that is actually available on Leaflet.

45
00:02:14.390 --> 00:02:16.730
So in the leaflet library.

46
00:02:16.730 --> 00:02:19.460
And so this is where now this map variable here

47
00:02:19.460 --> 00:02:22.120
comes into play for the first time.

48
00:02:22.120 --> 00:02:25.430
So when we first wrote this coord here

49
00:02:25.430 --> 00:02:29.830
or actually pasted it from the leaflet documentation,

50
00:02:29.830 --> 00:02:33.030
I didn't really explain why we were doing this.

51
00:02:33.030 --> 00:02:35.490
So why we were storing the result

52
00:02:35.490 --> 00:02:38.970
of creating the map into a variable,

53
00:02:38.970 --> 00:02:40.940
but now this is gonna be important

54
00:02:40.940 --> 00:02:43.580
because it's onto this map object here

55
00:02:43.580 --> 00:02:47.540
where we can now basically add an event listener.

56
00:02:47.540 --> 00:02:50.100
So the idea is similar to what we do

57
00:02:50.100 --> 00:02:53.200
using add event listener but on the map,

58
00:02:53.200 --> 00:02:55.430
we can simply do this.

59
00:02:55.430 --> 00:02:58.170
So map.on,

60
00:02:58.170 --> 00:03:00.550
and so again this on method here

61
00:03:00.550 --> 00:03:03.300
is not coming from JavaScript itself.

62
00:03:03.300 --> 00:03:06.820
It is instead of coming from the leaflet library.

63
00:03:06.820 --> 00:03:09.803
So this map object here is in fact an object

64
00:03:09.803 --> 00:03:11.903
that was generated by a leaflet.

65
00:03:13.110 --> 00:03:16.150
So we can see that because of this L here

66
00:03:16.150 --> 00:03:18.950
and so therefore this is gonna be a special object

67
00:03:18.950 --> 00:03:22.580
with a couple of methods and properties on it.

68
00:03:22.580 --> 00:03:24.330
And in fact let's actually start

69
00:03:24.330 --> 00:03:26.623
by taking a look at it in the console.

70
00:03:29.120 --> 00:03:32.983
So map, and let's see what we get here.

71
00:03:36.870 --> 00:03:41.870
So down here it is, let's get some more space here.

72
00:03:42.090 --> 00:03:45.193
And so here you see, there's a lot of stuff in here.

73
00:03:46.650 --> 00:03:50.480
Also, you see that the developers of this library

74
00:03:50.480 --> 00:03:53.930
also use this underscore convention here

75
00:03:53.930 --> 00:03:58.140
basically to make these methods and properties protected.

76
00:03:58.140 --> 00:04:01.290
And so simply by taking a look at this coord here,

77
00:04:01.290 --> 00:04:03.730
we already know that we should not

78
00:04:03.730 --> 00:04:06.453
basically manipulate this here manually.

79
00:04:07.510 --> 00:04:10.980
So let's just look at the ones that don't have this.

80
00:04:10.980 --> 00:04:14.570
So there should be this on method that I'm using,

81
00:04:14.570 --> 00:04:16.643
but maybe it's simply inheriting that.

82
00:04:18.870 --> 00:04:20.223
So let's see.

83
00:04:22.850 --> 00:04:24.480
It's also not here.

84
00:04:24.480 --> 00:04:26.360
It doesn't really matter anyway.

85
00:04:26.360 --> 00:04:30.560
So I was just trying to show you what happens here,

86
00:04:30.560 --> 00:04:32.440
but here it actually is.

87
00:04:32.440 --> 00:04:34.410
So here is the on method

88
00:04:34.410 --> 00:04:37.910
that we are now using basically as an event listener.

89
00:04:37.910 --> 00:04:41.090
So here is the on method that we're now basically gonna use

90
00:04:41.090 --> 00:04:45.133
instead of the standard built-in that event listener method.

91
00:04:45.990 --> 00:04:48.880
Now, right? So, yeah.

92
00:04:48.880 --> 00:04:50.700
This was really just to show you a little bit

93
00:04:50.700 --> 00:04:53.570
the internals of the leaflet library,

94
00:04:53.570 --> 00:04:55.840
because I think that it's important that

95
00:04:55.840 --> 00:04:59.440
you can also take a look at coord written by other people.

96
00:04:59.440 --> 00:05:02.600
And so you saw that they also use the prototype chain

97
00:05:02.600 --> 00:05:04.720
and very heavily in fact,

98
00:05:04.720 --> 00:05:07.860
you saw that they also use the underscore convention.

99
00:05:07.860 --> 00:05:10.310
And if you wanna dig really deep into that coord,

100
00:05:11.200 --> 00:05:12.640
I'm sure there's gonna be a lot

101
00:05:12.640 --> 00:05:14.173
of interesting stuff in there.

102
00:05:15.030 --> 00:05:19.740
But anyway, let's not add here the event listener basically.

103
00:05:19.740 --> 00:05:23.260
And here we can also specify the type of event

104
00:05:23.260 --> 00:05:25.113
and then here or call back function.

105
00:05:27.360 --> 00:05:31.410
So again, the idea here is indeed very similar.

106
00:05:31.410 --> 00:05:34.810
Now when leaflet calls this function here,

107
00:05:34.810 --> 00:05:38.633
it will do so with a special map event. Okay?

108
00:05:39.650 --> 00:05:42.120
So again, just like in standard JavaScript,

109
00:05:42.120 --> 00:05:43.920
we get access to an event,

110
00:05:43.920 --> 00:05:47.180
but this one is an event created by leaflet.

111
00:05:47.180 --> 00:05:49.003
So let's just call it mapEvent.

112
00:05:52.820 --> 00:05:55.610
And then let's actually simply take a look

113
00:05:55.610 --> 00:05:56.923
at this event for now.

114
00:05:58.320 --> 00:06:01.090
And so this console.log here should now happen

115
00:06:01.090 --> 00:06:04.020
whenever we click on the map.

116
00:06:04.020 --> 00:06:06.400
And so again, map is that variable here,

117
00:06:06.400 --> 00:06:11.233
which is the result of calling leaflet, So L.map.

118
00:06:12.810 --> 00:06:15.454
So let's see, and it always takes

119
00:06:15.454 --> 00:06:18.013
a little bit of time to loading this map.

120
00:06:19.500 --> 00:06:21.130
So let's just click here somewhere,

121
00:06:21.130 --> 00:06:26.130
and you'll see that immediately we got this event down here.

122
00:06:26.800 --> 00:06:31.490
Right? And then actually right here in lat lng,

123
00:06:31.490 --> 00:06:35.660
we then get the coordinates of the point that was clicked.

124
00:06:35.660 --> 00:06:38.660
Great. Let's try another one just to see

125
00:06:38.660 --> 00:06:40.593
if the coordinates are different.

126
00:06:43.050 --> 00:06:46.343
And you see, they are a little bit different indeed.

127
00:06:47.710 --> 00:06:50.500
And so now we can take this event object,

128
00:06:50.500 --> 00:06:53.520
take the coordinates of latitude and longitude,

129
00:06:53.520 --> 00:06:56.623
and then add a marker at exactly that point.

130
00:06:59.040 --> 00:07:02.010
So we already know how to create a marker,

131
00:07:02.010 --> 00:07:04.470
even though this is a very simplistic one.

132
00:07:04.470 --> 00:07:06.800
And so we're gonna improve it a little bit.

133
00:07:06.800 --> 00:07:08.700
But for now let's just take this coord

134
00:07:10.380 --> 00:07:12.980
and then here let's take the latitude

135
00:07:12.980 --> 00:07:14.943
and longitude from this object.

136
00:07:16.150 --> 00:07:19.430
So we can destructure it because remember there was

137
00:07:19.430 --> 00:07:24.430
a lat and a lng variable inside of mapEvent.lat,

138
00:07:28.315 --> 00:07:30.393
I think lng like this,

139
00:07:31.510 --> 00:07:33.920
but let's check again just to make sure

140
00:07:33.920 --> 00:07:35.670
because I don't really remember it.

141
00:07:37.040 --> 00:07:40.320
So the pin from the beginning here is now gone indeed.

142
00:07:40.320 --> 00:07:42.580
Let's now click somewhere here.

143
00:07:42.580 --> 00:07:45.890
And now we got this pin right here in the center

144
00:07:45.890 --> 00:07:48.243
and that's because we didn't fix our coord yet,

145
00:07:50.130 --> 00:07:52.330
but for now I just wanted to take a look.

146
00:07:52.330 --> 00:07:55.640
So that's the lat lng object right there.

147
00:07:55.640 --> 00:07:59.460
And then in there, there is an object with lat lng.

148
00:07:59.460 --> 00:08:01.010
So these are the two values

149
00:08:01.010 --> 00:08:03.663
that we just took out of this object.

150
00:08:05.750 --> 00:08:09.130
Okay. But now let's actually then put this pin exactly

151
00:08:09.130 --> 00:08:12.170
where we click instead of putting it in the center,

152
00:08:12.170 --> 00:08:14.223
like we are doing it right now.

153
00:08:15.390 --> 00:08:18.483
So this coords here is of course the center of the map

154
00:08:18.483 --> 00:08:20.760
that we specified before.

155
00:08:20.760 --> 00:08:23.180
So that is coming from geolocation.

156
00:08:23.180 --> 00:08:26.063
And now we want to use this lat and lng.

157
00:08:26.920 --> 00:08:31.660
So let's specify in URL, lat lng,

158
00:08:31.660 --> 00:08:36.383
and therefore now let's just write like Workout.

159
00:08:38.010 --> 00:08:39.610
And again, we're gonna change this in a minute

160
00:08:39.610 --> 00:08:40.933
to make it a bit better.

161
00:08:42.500 --> 00:08:44.830
But now I'm just interested in seeing

162
00:08:44.830 --> 00:08:48.590
if the popup is appearing in the right place

163
00:08:48.590 --> 00:08:50.600
and let's wait for it.

164
00:08:50.600 --> 00:08:51.673
And there you go.

165
00:08:52.600 --> 00:08:57.450
Now I click this one then to here and indeed it works.

166
00:08:57.450 --> 00:08:59.930
So great, that's beautiful already,

167
00:08:59.930 --> 00:09:04.470
but now watch what happens whenever I click.

168
00:09:04.470 --> 00:09:06.930
So whenever I add a new marker,

169
00:09:06.930 --> 00:09:11.930
you see that this popup here always closes, right?

170
00:09:12.010 --> 00:09:14.550
But in our demo, I actually have it so

171
00:09:14.550 --> 00:09:16.870
that they always keep open.

172
00:09:16.870 --> 00:09:19.230
So if I click here and add another one,

173
00:09:19.230 --> 00:09:21.273
and the data doesn't matter here now.

174
00:09:22.210 --> 00:09:24.910
Then you see that all the others remain open.

175
00:09:24.910 --> 00:09:28.303
And I think that that is actually a better option.

176
00:09:29.620 --> 00:09:31.820
And all right, now you also see

177
00:09:31.820 --> 00:09:35.480
that I added some custom formatting to these popups.

178
00:09:35.480 --> 00:09:39.510
So for example the running one always has this green border

179
00:09:39.510 --> 00:09:43.590
while the cycling one has this orange border.

180
00:09:43.590 --> 00:09:45.160
And that's because in leaflet,

181
00:09:45.160 --> 00:09:49.860
we are able to add our own class names to the popup.

182
00:09:49.860 --> 00:09:51.260
So there's a lot of stuff

183
00:09:51.260 --> 00:09:54.410
that we can do with popups in leaflet.

184
00:09:54.410 --> 00:09:58.463
And so let's now try to experiment with a couple of them.

185
00:09:59.420 --> 00:10:02.263
So it starts here with L.marker.

186
00:10:03.210 --> 00:10:05.430
And so this is basically the coord

187
00:10:05.430 --> 00:10:07.640
that adds the marker to the map.

188
00:10:07.640 --> 00:10:10.150
And this one is all still correct.

189
00:10:10.150 --> 00:10:11.950
There's nothing to change here.

190
00:10:11.950 --> 00:10:15.320
Then here we add .marker to the map.

191
00:10:15.320 --> 00:10:17.890
So essentially .marker creates the marker

192
00:10:17.890 --> 00:10:20.860
and then .addTo adds it to the map.

193
00:10:20.860 --> 00:10:23.460
And so that's similar to here,

194
00:10:23.460 --> 00:10:25.820
where we first select a title layer

195
00:10:25.820 --> 00:10:28.540
and then we add that tile layer

196
00:10:28.540 --> 00:10:30.993
to the map again, using .addTo.

197
00:10:31.900 --> 00:10:33.030
And all of these methods,

198
00:10:33.030 --> 00:10:35.530
they are in the documentation of leaflet

199
00:10:35.530 --> 00:10:39.003
and we're actually gonna go there in a minute, okay?

200
00:10:40.100 --> 00:10:42.920
Next we then have bindPopup,

201
00:10:42.920 --> 00:10:45.250
which will basically create a popup

202
00:10:45.250 --> 00:10:47.500
and bind it to the marker.

203
00:10:47.500 --> 00:10:50.430
And so here, we simply pass in this string.

204
00:10:50.430 --> 00:10:54.070
Now, so that's why we get to work out in all of the markers.

205
00:10:54.070 --> 00:10:56.740
But here, instead of specifying a string,

206
00:10:56.740 --> 00:11:00.170
we can also create a brand new popup object,

207
00:11:00.170 --> 00:11:03.010
which will then contain a couple of options.

208
00:11:03.010 --> 00:11:06.000
And so that is what I'm gonna do here now.

209
00:11:06.000 --> 00:11:10.380
So instead of this, I will do L.pop up

210
00:11:11.850 --> 00:11:14.543
and then here I can pass in a couple of options,

211
00:11:15.440 --> 00:11:19.210
but now let's actually go to the leaflet documentation

212
00:11:19.210 --> 00:11:20.860
because otherwise all of this

213
00:11:20.860 --> 00:11:24.580
will simply appear like magic to you.

214
00:11:24.580 --> 00:11:27.040
So I don't want to just write the coord here

215
00:11:27.040 --> 00:11:29.730
and you copying it, instead I want to show you

216
00:11:29.730 --> 00:11:33.250
where I'm getting it from in the documentation

217
00:11:33.250 --> 00:11:35.620
because reading documentation will be something

218
00:11:35.620 --> 00:11:39.430
really really important in your job as a developer.

219
00:11:39.430 --> 00:11:42.000
Because as I just mentioned previously

220
00:11:42.000 --> 00:11:43.990
every library that you're gonna use

221
00:11:43.990 --> 00:11:45.710
will have some documentation,

222
00:11:45.710 --> 00:11:48.180
so that you can actually know how to use it.

223
00:11:48.180 --> 00:11:52.560
Cause otherwise you would have no idea, right?

224
00:11:52.560 --> 00:11:54.160
And so reading documentation

225
00:11:54.160 --> 00:11:57.433
will certainly become part of the job.

226
00:11:58.690 --> 00:12:01.640
So let's just go here to leaflet.

227
00:12:01.640 --> 00:12:04.850
And then basically on every page of every library,

228
00:12:04.850 --> 00:12:06.620
you will always find something called

229
00:12:06.620 --> 00:12:08.793
like docs or documentation.

230
00:12:09.820 --> 00:12:13.463
And so here is a bunch of stuff that you can take a look at.

231
00:12:14.440 --> 00:12:18.010
Now here, I will just take a look at the UI layers,

232
00:12:18.010 --> 00:12:20.803
which are the markers, popup and tool tip.

233
00:12:21.920 --> 00:12:26.090
So as for the marker, this is basically what we did before.

234
00:12:26.090 --> 00:12:29.480
So L.marker then add to map.

235
00:12:29.480 --> 00:12:32.400
And so this is exactly what we already have.

236
00:12:32.400 --> 00:12:35.300
So this is an example, as we can see here,

237
00:12:35.300 --> 00:12:38.130
but down here is how we should actually do it.

238
00:12:38.130 --> 00:12:41.820
So how exactly this marker function should be called.

239
00:12:41.820 --> 00:12:46.820
So we can pass in or have to pass in the latitude longitude.

240
00:12:47.050 --> 00:12:51.600
And we can also pass in an object of options.

241
00:12:51.600 --> 00:12:53.600
And so here are then all the options

242
00:12:53.600 --> 00:12:56.240
that are available for the marker,

243
00:12:56.240 --> 00:12:58.690
but in this case we don't have any.

244
00:12:58.690 --> 00:13:01.090
So I'm keeping it fairly simple here,

245
00:13:01.090 --> 00:13:04.690
but even on a marker, we can change all kinds of stuff.

246
00:13:04.690 --> 00:13:08.520
For example, we could change opacity, as you see here

247
00:13:08.520 --> 00:13:12.220
we could also like riseOnHover.

248
00:13:12.220 --> 00:13:14.960
So then the marker will get on top of others

249
00:13:14.960 --> 00:13:17.770
when you hover the mouse over it.

250
00:13:17.770 --> 00:13:20.820
And so now you see there's all kinds of stuff

251
00:13:20.820 --> 00:13:21.913
that we can do here,

252
00:13:22.750 --> 00:13:24.583
But let's not go actually to the popup.

253
00:13:25.460 --> 00:13:27.700
So you see there's a lot of stuff here.

254
00:13:27.700 --> 00:13:30.563
And as always, I encourage you to take a look at it.

255
00:13:32.010 --> 00:13:36.340
But now again, let's talk about the popup itself.

256
00:13:36.340 --> 00:13:38.290
And so again, here you see that L.popup

257
00:13:39.410 --> 00:13:42.570
can take in an object of options.

258
00:13:42.570 --> 00:13:44.920
And so this is what we will do now.

259
00:13:44.920 --> 00:13:48.870
And that's the popup that we will then use on the marker

260
00:13:50.735 --> 00:13:53.433
to create a popup that is attached to the marker.

261
00:13:54.300 --> 00:13:56.460
So the first two that I want to specify

262
00:13:56.460 --> 00:13:59.330
is the maxWidth and the minWidth,

263
00:13:59.330 --> 00:14:02.410
so that the popup always has a nice size.

264
00:14:02.410 --> 00:14:05.180
And so basically we will now create an object

265
00:14:05.180 --> 00:14:07.323
with these two properties.

266
00:14:10.930 --> 00:14:13.540
So let's set this one to 250

267
00:14:16.060 --> 00:14:21.060
and the minWidth to let's say just 100 pixels, all right.

268
00:14:23.990 --> 00:14:26.720
Now, next up, I want to change that behavior

269
00:14:26.720 --> 00:14:29.260
where the popup of one macro closes

270
00:14:29.260 --> 00:14:31.120
when we create a new one.

271
00:14:31.120 --> 00:14:33.403
And so that's this autoClose here.

272
00:14:34.980 --> 00:14:37.260
So we use this one when we want to override

273
00:14:37.260 --> 00:14:39.970
the default behavior of the popup closing

274
00:14:39.970 --> 00:14:42.123
when another popup is opened.

275
00:14:43.020 --> 00:14:45.770
And so this is exactly the one we are looking for.

276
00:14:45.770 --> 00:14:47.550
And so by default, it is true.

277
00:14:47.550 --> 00:14:49.453
And so let's set that to false.

278
00:14:51.250 --> 00:14:56.250
So autoClose set it to false.

279
00:15:00.310 --> 00:15:03.400
And then finally, there's also closeOnClick,

280
00:15:03.400 --> 00:15:06.990
which again will prevent popups from closing

281
00:15:06.990 --> 00:15:10.910
but this time, whenever the user clicks on the map.

282
00:15:10.910 --> 00:15:13.450
So as we see here, that's the default behavior.

283
00:15:13.450 --> 00:15:16.653
And so let's put this one here, to false as well.

284
00:15:20.343 --> 00:15:22.200
And again, I'm doing all this

285
00:15:22.200 --> 00:15:23.800
so that I can show you a little bit

286
00:15:23.800 --> 00:15:26.033
how we work with documentation.

287
00:15:27.460 --> 00:15:30.605
So finally we have also the className.

288
00:15:30.605 --> 00:15:32.195
And so, as I mentioned before,

289
00:15:32.195 --> 00:15:36.096
we can use this one to assign any CSS class name

290
00:15:36.096 --> 00:15:38.366
that we want to the popup.

291
00:15:38.366 --> 00:15:39.970
And so this is gonna be useful

292
00:15:39.970 --> 00:15:43.150
to style it according to our needs.

293
00:15:43.150 --> 00:15:48.124
And so in our CSS, I already have a class for popups,

294
00:15:48.124 --> 00:15:50.153
so let's just search for popup.

295
00:15:51.430 --> 00:15:53.363
So here is a lot of stuff,

296
00:15:55.120 --> 00:15:56.960
but the ones that we are interested in

297
00:15:56.960 --> 00:15:59.693
is running-popup and cycling-popup.

298
00:16:00.660 --> 00:16:03.520
So these here are basically styles

299
00:16:03.520 --> 00:16:07.930
that I assigned automatically to all the popups in leaflet.

300
00:16:07.930 --> 00:16:11.630
So that's why they have this dark background color

301
00:16:11.630 --> 00:16:13.890
and why they have the font size that they have.

302
00:16:13.890 --> 00:16:18.720
So all of that, I actually already styled here using CSS.

303
00:16:18.720 --> 00:16:22.900
But now I want to be able to add a custom class as well

304
00:16:22.900 --> 00:16:26.380
so that I can style the running activities, with this green

305
00:16:26.380 --> 00:16:28.763
and the cycling ones, with this orange.

306
00:16:30.890 --> 00:16:34.020
So later we will identify in this class here dynamically,

307
00:16:34.020 --> 00:16:38.473
but for now let's put all of them to running pop up.

308
00:16:40.400 --> 00:16:43.870
And so that's actually already it.

309
00:16:43.870 --> 00:16:47.940
Now, finally, we also need to set then the text back

310
00:16:47.940 --> 00:16:50.030
because right now we don't have any texts

311
00:16:52.760 --> 00:16:54.443
here in our markers.

312
00:16:55.360 --> 00:16:58.950
So if I click here, can you see, we indeed get a marker

313
00:16:58.950 --> 00:17:00.683
and it even has this class here.

314
00:17:01.720 --> 00:17:05.380
And let's just see what happens when I click another one.

315
00:17:05.380 --> 00:17:07.770
And yeah, that works.

316
00:17:07.770 --> 00:17:12.360
So all of them stay open just as we wanted.

317
00:17:12.360 --> 00:17:16.280
But as I was saying before, they don't have any content yet.

318
00:17:16.280 --> 00:17:17.893
And so we need to set that.

319
00:17:19.080 --> 00:17:22.773
And that is actually again on the marker, I believe.

320
00:17:24.820 --> 00:17:27.103
So it's a method that's on the marker.

321
00:17:29.980 --> 00:17:31.763
So let's see where it is.

322
00:17:36.910 --> 00:17:39.800
Maybe it's one of these ones inherited from layer.

323
00:17:39.800 --> 00:17:41.730
So you see that these are basically classes

324
00:17:41.730 --> 00:17:43.670
that leaflet uses

325
00:17:43.670 --> 00:17:46.050
and so then the marker can inherit methods

326
00:17:47.110 --> 00:17:49.253
from other classes, essentially.

327
00:17:50.990 --> 00:17:54.290
And so here is the method that I was actually looking for

328
00:17:54.290 --> 00:17:58.580
and so setPopupContent is the one that we're looking for

329
00:17:58.580 --> 00:18:01.200
because here we can then specify a string

330
00:18:01.200 --> 00:18:03.110
or even an HTMLElement

331
00:18:03.110 --> 00:18:06.870
in order to give the popup some content.

332
00:18:06.870 --> 00:18:08.440
Now, another thing that's interesting

333
00:18:08.440 --> 00:18:10.620
to see here in the documentation

334
00:18:10.620 --> 00:18:14.470
is that all these methods always returned this.

335
00:18:14.470 --> 00:18:16.330
So basically the current object

336
00:18:16.330 --> 00:18:19.270
which then makes all of these methods chainable.

337
00:18:19.270 --> 00:18:21.760
So remember how we did exactly that

338
00:18:21.760 --> 00:18:23.580
by the end of the previous section

339
00:18:23.580 --> 00:18:26.770
to also make methods in our own classes chainable.

340
00:18:26.770 --> 00:18:29.500
And so you'll see that the leaflet developers

341
00:18:29.500 --> 00:18:32.533
are here indeed using the exact same technique.

342
00:18:33.540 --> 00:18:36.440
So again, I think that's pretty interesting to see.

343
00:18:36.440 --> 00:18:41.440
But now let's copy this method here and add a tier.

344
00:18:42.820 --> 00:18:47.020
So before we actually open the popup here in the next line,

345
00:18:47.020 --> 00:18:50.630
and for now, let's just set it back to work out

346
00:18:52.460 --> 00:18:55.053
and then let's go back and see.

347
00:18:56.820 --> 00:18:59.170
So for some reason, this always takes some time.

348
00:18:59.170 --> 00:19:00.233
Now, here we are.

349
00:19:01.150 --> 00:19:03.680
And yeah, now it says workout.

350
00:19:03.680 --> 00:19:07.960
They all stay opened and you see that when we click here,

351
00:19:07.960 --> 00:19:12.960
then the map even pans so that it can fit the new popup.

352
00:19:13.530 --> 00:19:16.199
Great, So this works really fine,

353
00:19:16.199 --> 00:19:18.707
but in the final application,

354
00:19:18.707 --> 00:19:22.230
obviously the marker is not put on the map immediately

355
00:19:22.230 --> 00:19:23.760
because the popup itself,

356
00:19:23.760 --> 00:19:26.060
will contain data about the workout.

357
00:19:26.060 --> 00:19:28.170
And so we first needed that data.

358
00:19:28.170 --> 00:19:31.370
And so here in the real application, when we click,

359
00:19:31.370 --> 00:19:35.390
what happens is that this form here opens,right?

360
00:19:35.390 --> 00:19:38.570
And so if we take a look at our flow chart

361
00:19:38.570 --> 00:19:42.090
that's also then gonna be the next step.

362
00:19:42.090 --> 00:19:45.010
So basically we have the render workout form

363
00:19:45.010 --> 00:19:47.640
whenever the user clicks on a map.

364
00:19:47.640 --> 00:19:49.420
And so in the next lecture,

365
00:19:49.420 --> 00:19:51.963
this year is what we're gonna implement.

