@abi-software/flatmapvuer 0.6.3-vue.3.9 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -201
- package/README.md +120 -120
- package/cypress.config.js +23 -23
- package/dist/flatmapvuer.js +15894 -16259
- package/dist/flatmapvuer.umd.cjs +132 -145
- package/dist/index.html +17 -17
- package/dist/style.css +1 -1
- package/package.json +95 -95
- package/public/index.html +17 -17
- package/reporter-config.json +9 -9
- package/src/App.vue +310 -310
- package/src/assets/_variables.scss +43 -43
- package/src/assets/styles.scss +5 -5
- package/src/components/AnnotationTool.vue +450 -446
- package/src/components/EventBus.js +3 -3
- package/src/components/ExternalResourceCard.vue +107 -107
- package/src/components/FlatmapVuer.vue +2600 -2531
- package/src/components/MultiFlatmapVuer.vue +731 -731
- package/src/components/ProvenancePopup.vue +503 -495
- package/src/components/SelectionsGroup.vue +255 -255
- package/src/components/Tooltip.vue +50 -50
- package/src/components/TreeControls.vue +231 -231
- package/src/components/index.js +7 -7
- package/src/components/legends/DynamicLegends.vue +106 -106
- package/src/components/legends/SvgLegends.vue +112 -112
- package/src/icons/flatmap-marker.js +1 -1
- package/src/icons/fonts/mapicon-species.svg +14 -14
- package/src/icons/fonts/mapicon-species.ttf +0 -0
- package/src/icons/fonts/mapicon-species.woff +0 -0
- package/src/icons/mapicon-species-style.css +42 -42
- package/src/icons/yellowstar.js +5 -5
- package/src/legends/legend.svg +25 -25
- package/src/main.js +19 -19
- package/src/services/flatmapQueries.js +453 -453
- package/src/store/index.js +23 -23
- package/vite.config.js +73 -73
- package/vite.static-build.js +12 -12
- package/vuese-generator.js +64 -64
|
@@ -1,2532 +1,2601 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div
|
|
3
|
-
class="flatmap-container"
|
|
4
|
-
ref="flatmapContainer"
|
|
5
|
-
v-loading="loading"
|
|
6
|
-
element-loading-text="Loading..."
|
|
7
|
-
element-loading-background="rgba(0, 0, 0, 0.3)"
|
|
8
|
-
>
|
|
9
|
-
<map-svg-sprite-color />
|
|
10
|
-
<div
|
|
11
|
-
style="height: 100%; width: 100%; position: relative; overflow-y: none"
|
|
12
|
-
>
|
|
13
|
-
<div style="height: 100%; width: 100%" ref="display"></div>
|
|
14
|
-
<div class="beta-popovers" v-show="!disableUI">
|
|
15
|
-
<div>
|
|
16
|
-
<el-popover
|
|
17
|
-
placement="right"
|
|
18
|
-
popper-class="warning-popper flatmap-popper"
|
|
19
|
-
:teleported="false"
|
|
20
|
-
:visible="hoverVisibilities[6].value"
|
|
21
|
-
ref="warningPopover"
|
|
22
|
-
>
|
|
23
|
-
<p
|
|
24
|
-
v-if="isLegacy"
|
|
25
|
-
@mouseover="showToolitip(6)"
|
|
26
|
-
@mouseout="hideToolitip(6)"
|
|
27
|
-
>
|
|
28
|
-
This is a legacy map, you may view the latest map instead.
|
|
29
|
-
</p>
|
|
30
|
-
<p
|
|
31
|
-
v-else-if="isFC"
|
|
32
|
-
@mouseover="showToolitip(6)"
|
|
33
|
-
@mouseout="hideToolitip(6)"
|
|
34
|
-
>
|
|
35
|
-
This map displays the connectivity of individual neurons.
|
|
36
|
-
Specifically, those which align with (parts of) the neuron
|
|
37
|
-
populations from the
|
|
38
|
-
<a
|
|
39
|
-
href="https://sparc.science/resources/1ZUKXU2YmLcn2reCyXjlew"
|
|
40
|
-
target="_blank"
|
|
41
|
-
>
|
|
42
|
-
ApiNATOMY
|
|
43
|
-
</a>
|
|
44
|
-
models available in
|
|
45
|
-
<a
|
|
46
|
-
href="https://sparc.science/resources/6eg3VpJbwQR4B84CjrvmyD"
|
|
47
|
-
target="_blank"
|
|
48
|
-
>
|
|
49
|
-
SCKAN </a
|
|
50
|
-
>.
|
|
51
|
-
</p>
|
|
52
|
-
<p v-else @mouseover="showToolitip(6)" @mouseout="hideToolitip(6)">
|
|
53
|
-
This map displays the connectivity of neuron populations.
|
|
54
|
-
Specifically, those from the primarily rat-based
|
|
55
|
-
<a
|
|
56
|
-
href="https://sparc.science/resources/1ZUKXU2YmLcn2reCyXjlew"
|
|
57
|
-
target="_blank"
|
|
58
|
-
>
|
|
59
|
-
ApiNATOMY
|
|
60
|
-
</a>
|
|
61
|
-
models available in
|
|
62
|
-
<a
|
|
63
|
-
href="https://sparc.science/resources/6eg3VpJbwQR4B84CjrvmyD"
|
|
64
|
-
target="_blank"
|
|
65
|
-
>
|
|
66
|
-
SCKAN </a
|
|
67
|
-
>. New connectivity and species specificity will be added as the
|
|
68
|
-
SPARC program progresses.
|
|
69
|
-
</p>
|
|
70
|
-
<template #reference>
|
|
71
|
-
<div
|
|
72
|
-
class="warning-icon"
|
|
73
|
-
v-if="displayWarning"
|
|
74
|
-
@mouseover="showToolitip(6)"
|
|
75
|
-
@mouseout="hideToolitip(6)"
|
|
76
|
-
>
|
|
77
|
-
<el-icon><el-icon-warning-filled /></el-icon>
|
|
78
|
-
<template v-if="isLegacy">
|
|
79
|
-
<span class="warning-text">Legacy Map</span>
|
|
80
|
-
<div class="latest-map-text" @click="viewLatestMap">
|
|
81
|
-
Click here for the latest map
|
|
82
|
-
</div>
|
|
83
|
-
</template>
|
|
84
|
-
<template v-else>
|
|
85
|
-
<span class="warning-text">Beta</span>
|
|
86
|
-
</template>
|
|
87
|
-
</div>
|
|
88
|
-
</template>
|
|
89
|
-
</el-popover>
|
|
90
|
-
</div>
|
|
91
|
-
<el-popover
|
|
92
|
-
placement="right"
|
|
93
|
-
v-if="displayLatestChanges"
|
|
94
|
-
:teleported="false"
|
|
95
|
-
trigger="manual"
|
|
96
|
-
popper-class="warning-popper flatmap-popper"
|
|
97
|
-
:visible="hoverVisibilities[7].value"
|
|
98
|
-
>
|
|
99
|
-
<template #reference>
|
|
100
|
-
<div
|
|
101
|
-
class="latest-changesicon"
|
|
102
|
-
v-if="displayLatestChanges"
|
|
103
|
-
@mouseover="showToolitip(7)"
|
|
104
|
-
@mouseout="hideToolitip(7)"
|
|
105
|
-
>
|
|
106
|
-
<el-icon><el-icon-warning-filled /></el-icon>
|
|
107
|
-
<span class="warning-text">What's new?</span>
|
|
108
|
-
</div>
|
|
109
|
-
</template>
|
|
110
|
-
<template #default>
|
|
111
|
-
<b>Network discovery mode</b>
|
|
112
|
-
<p>
|
|
113
|
-
You can now view the network of neurons connected to a selected
|
|
114
|
-
neuron. This mode is located in the settings at the bottom right.
|
|
115
|
-
Once discovery mode is on, click on a neuron to see its
|
|
116
|
-
connections.
|
|
117
|
-
</p>
|
|
118
|
-
<b>Now can display up to 6 panes</b>
|
|
119
|
-
<p>
|
|
120
|
-
You can now display up to 6 panes in the flatmap. This allows you
|
|
121
|
-
to compare between different datasets and/or different views of
|
|
122
|
-
the same dataset.
|
|
123
|
-
</p>
|
|
124
|
-
</template>
|
|
125
|
-
</el-popover>
|
|
126
|
-
</div>
|
|
127
|
-
|
|
128
|
-
<!-- The element below is placed onto the flatmap when it is ready -->
|
|
129
|
-
<el-icon
|
|
130
|
-
class="minimap-resize"
|
|
131
|
-
:class="{ enlarge: minimapSmall, shrink: !minimapSmall }"
|
|
132
|
-
ref="minimapResize"
|
|
133
|
-
v-show="minimapResizeShow"
|
|
134
|
-
@click="closeMinimap"
|
|
135
|
-
>
|
|
136
|
-
<el-icon-arrow-down />
|
|
137
|
-
</el-icon>
|
|
138
|
-
|
|
139
|
-
<div class="bottom-right-control" v-show="!disableUI">
|
|
140
|
-
<el-popover
|
|
141
|
-
content="Zoom in"
|
|
142
|
-
placement="left"
|
|
143
|
-
:teleported="false"
|
|
144
|
-
trigger="manual"
|
|
145
|
-
width="70"
|
|
146
|
-
popper-class="flatmap-popper"
|
|
147
|
-
:visible="hoverVisibilities[0].value"
|
|
148
|
-
>
|
|
149
|
-
<template #reference>
|
|
150
|
-
<map-svg-icon
|
|
151
|
-
icon="zoomIn"
|
|
152
|
-
class="icon-button zoomIn"
|
|
153
|
-
@click="zoomIn()"
|
|
154
|
-
@mouseover="showToolitip(0)"
|
|
155
|
-
@mouseout="hideToolitip(0)"
|
|
156
|
-
/>
|
|
157
|
-
</template>
|
|
158
|
-
</el-popover>
|
|
159
|
-
<el-popover
|
|
160
|
-
content="Zoom out"
|
|
161
|
-
placement="top-end"
|
|
162
|
-
:teleported="false"
|
|
163
|
-
trigger="manual"
|
|
164
|
-
width="70"
|
|
165
|
-
popper-class="flatmap-popper popper-zoomout"
|
|
166
|
-
:visible="hoverVisibilities[1].value"
|
|
167
|
-
>
|
|
168
|
-
<template #reference>
|
|
169
|
-
<map-svg-icon
|
|
170
|
-
icon="zoomOut"
|
|
171
|
-
class="icon-button zoomOut"
|
|
172
|
-
@click="zoomOut()"
|
|
173
|
-
@mouseover="showToolitip(1)"
|
|
174
|
-
@mouseout="hideToolitip(1)"
|
|
175
|
-
/>
|
|
176
|
-
</template>
|
|
177
|
-
</el-popover>
|
|
178
|
-
<el-popover
|
|
179
|
-
content="Reset"
|
|
180
|
-
placement="top"
|
|
181
|
-
:teleported="false"
|
|
182
|
-
trigger="manual"
|
|
183
|
-
width="70"
|
|
184
|
-
popper-class="flatmap-popper"
|
|
185
|
-
:visible="hoverVisibilities[2].value"
|
|
186
|
-
>
|
|
187
|
-
<div>
|
|
188
|
-
Fit to
|
|
189
|
-
<br />
|
|
190
|
-
window
|
|
191
|
-
</div>
|
|
192
|
-
<template #reference>
|
|
193
|
-
<map-svg-icon
|
|
194
|
-
icon="fitWindow"
|
|
195
|
-
class="icon-button fitWindow"
|
|
196
|
-
@click="resetView()"
|
|
197
|
-
@mouseover="showToolitip(2)"
|
|
198
|
-
@mouseout="hideToolitip(2)"
|
|
199
|
-
/>
|
|
200
|
-
</template>
|
|
201
|
-
</el-popover>
|
|
202
|
-
</div>
|
|
203
|
-
<el-popover
|
|
204
|
-
content="Change pathway visibility"
|
|
205
|
-
placement="right"
|
|
206
|
-
:teleported="false"
|
|
207
|
-
trigger="manual"
|
|
208
|
-
popper-class="flatmap-popper"
|
|
209
|
-
:visible="hoverVisibilities[4].value"
|
|
210
|
-
ref="checkBoxPopover"
|
|
211
|
-
>
|
|
212
|
-
<template #reference>
|
|
213
|
-
<div
|
|
214
|
-
class="pathway-location"
|
|
215
|
-
:class="{ open: drawerOpen, close: !drawerOpen }"
|
|
216
|
-
v-show="!disableUI"
|
|
217
|
-
>
|
|
218
|
-
<div
|
|
219
|
-
class="pathway-container"
|
|
220
|
-
:class="{ open: drawerOpen, close: !drawerOpen }"
|
|
221
|
-
:style="{ 'max-height': pathwaysMaxHeight + 'px' }"
|
|
222
|
-
v-popover:checkBoxPopover
|
|
223
|
-
>
|
|
224
|
-
<svg-legends v-if="!isFC" class="svg-legends-container" />
|
|
225
|
-
<el-popover
|
|
226
|
-
content="Location of the featured dataset"
|
|
227
|
-
placement="right"
|
|
228
|
-
:teleported="false"
|
|
229
|
-
trigger="hover"
|
|
230
|
-
popper-class="flatmap-popper popper-bump-right"
|
|
231
|
-
:visible="hoverVisibilities[9].value"
|
|
232
|
-
ref="featuredMarkerPopover"
|
|
233
|
-
>
|
|
234
|
-
<template #reference>
|
|
235
|
-
<div
|
|
236
|
-
v-show="showStarInLegend"
|
|
237
|
-
v-popover:featuredMarkerPopover
|
|
238
|
-
class="yellow-star-legend"
|
|
239
|
-
v-html="yellowstar"
|
|
240
|
-
></div>
|
|
241
|
-
</template>
|
|
242
|
-
</el-popover>
|
|
243
|
-
<!-- The line below places the yellowstar svg on the left, and the text "Featured markers on the right" with css so they are both centered in the div -->
|
|
244
|
-
<el-popover
|
|
245
|
-
content="Find these markers for data"
|
|
246
|
-
placement="right"
|
|
247
|
-
:teleported="false"
|
|
248
|
-
trigger="manual"
|
|
249
|
-
popper-class="flatmap-popper popper-bump-right"
|
|
250
|
-
:visible="hoverVisibilities[5].value"
|
|
251
|
-
ref="markerPopover"
|
|
252
|
-
>
|
|
253
|
-
<template #reference>
|
|
254
|
-
<div
|
|
255
|
-
v-show="hoverVisibilities[5].value"
|
|
256
|
-
class="flatmap-marker-help"
|
|
257
|
-
v-html="flatmapMarker"
|
|
258
|
-
v-popover:markerPopover
|
|
259
|
-
></div>
|
|
260
|
-
</template>
|
|
261
|
-
</el-popover>
|
|
262
|
-
<tree-controls
|
|
263
|
-
v-if="isFC && systems && systems.length > 0"
|
|
264
|
-
:active="currentActive"
|
|
265
|
-
:hover="currentHover"
|
|
266
|
-
:tree-data="systems"
|
|
267
|
-
ref="treeControls"
|
|
268
|
-
@changed="systemSelected"
|
|
269
|
-
@checkAll="checkAllSystems"
|
|
270
|
-
@change-active="ftuSelected"
|
|
271
|
-
/>
|
|
272
|
-
<selections-group
|
|
273
|
-
v-if="!isFC && centreLines && centreLines.length > 0"
|
|
274
|
-
title="Nerves"
|
|
275
|
-
labelKey="label"
|
|
276
|
-
identifierKey="key"
|
|
277
|
-
:selections="centreLines"
|
|
278
|
-
@changed="centreLinesSelected"
|
|
279
|
-
ref="centrelinesSelection"
|
|
280
|
-
key="centrelinesSelection"
|
|
281
|
-
/>
|
|
282
|
-
<!--
|
|
283
|
-
<selections-group
|
|
284
|
-
v-if="isFC && sckanDisplay && sckanDisplay.length > 0"
|
|
285
|
-
title="SCKAN"
|
|
286
|
-
labelKey="label"
|
|
287
|
-
identifierKey="key"
|
|
288
|
-
:selections="sckanDisplay"
|
|
289
|
-
@changed="sckanSelected"
|
|
290
|
-
@checkAll="checkAllSCKAN"
|
|
291
|
-
ref="skcanSelection"
|
|
292
|
-
key="skcanSelection"
|
|
293
|
-
/>
|
|
294
|
-
<selections-group
|
|
295
|
-
v-if="layers && layers.length > 0"
|
|
296
|
-
title="Layers"
|
|
297
|
-
labelKey="description"
|
|
298
|
-
identifierKey="id"
|
|
299
|
-
:selections="layers"
|
|
300
|
-
@changed="layersSelected"
|
|
301
|
-
@checkAll="checkAllLayers"
|
|
302
|
-
ref="layersSelection"
|
|
303
|
-
key="layersSelection"
|
|
304
|
-
/>
|
|
305
|
-
-->
|
|
306
|
-
<selections-group
|
|
307
|
-
v-if="!isFC && taxonConnectivity && taxonConnectivity.length > 0"
|
|
308
|
-
title="Observed in"
|
|
309
|
-
labelKey="label"
|
|
310
|
-
identifierKey="taxon"
|
|
311
|
-
:selections="taxonConnectivity"
|
|
312
|
-
@changed="taxonsSelected"
|
|
313
|
-
@checkAll="checkAllTaxons"
|
|
314
|
-
ref="taxonSelection"
|
|
315
|
-
key="taxonSelection"
|
|
316
|
-
/>
|
|
317
|
-
<selections-group
|
|
318
|
-
v-if="pathways && pathways.length > 0"
|
|
319
|
-
title="Pathways"
|
|
320
|
-
labelKey="label"
|
|
321
|
-
identifierKey="type"
|
|
322
|
-
colourStyle="line"
|
|
323
|
-
:selections="pathways"
|
|
324
|
-
@changed="pathwaysSelected"
|
|
325
|
-
@checkAll="checkAllPathways"
|
|
326
|
-
ref="pathwaysSelection"
|
|
327
|
-
key="pathwaysSelection"
|
|
328
|
-
/>
|
|
329
|
-
</div>
|
|
330
|
-
<div
|
|
331
|
-
@click="toggleDrawer"
|
|
332
|
-
class="drawer-button"
|
|
333
|
-
:class="{ open: drawerOpen, close: !drawerOpen }"
|
|
334
|
-
>
|
|
335
|
-
<el-icon><el-icon-arrow-left /></el-icon>
|
|
336
|
-
</div>
|
|
337
|
-
</div>
|
|
338
|
-
</template>
|
|
339
|
-
</el-popover>
|
|
340
|
-
<el-popover
|
|
341
|
-
v-if="openMapRef"
|
|
342
|
-
ref="open-map-popover"
|
|
343
|
-
:virtual-ref="openMapRef"
|
|
344
|
-
placement="top-start"
|
|
345
|
-
width="136"
|
|
346
|
-
:teleported="false"
|
|
347
|
-
trigger="click"
|
|
348
|
-
popper-class="open-map-popper non-selectable"
|
|
349
|
-
virtual-triggering
|
|
350
|
-
>
|
|
351
|
-
<el-row v-for="item in openMapOptions" :key="item.key">
|
|
352
|
-
<el-button type="primary" plain
|
|
353
|
-
@click="/**
|
|
354
|
-
* This event is emitted when the user chooses a different map option
|
|
355
|
-
* from ``openMapOptions`` props.
|
|
356
|
-
* @arg mapOption.key
|
|
357
|
-
* */
|
|
358
|
-
$emit('open-map', item.key)"
|
|
359
|
-
>
|
|
360
|
-
{{ item.display }}
|
|
361
|
-
</el-button>
|
|
362
|
-
</el-row>
|
|
363
|
-
</el-popover>
|
|
364
|
-
<el-popover
|
|
365
|
-
ref="backgroundPopover"
|
|
366
|
-
:virtual-ref="backgroundIconRef"
|
|
367
|
-
placement="top-start"
|
|
368
|
-
width="200"
|
|
369
|
-
:teleported="false"
|
|
370
|
-
trigger="click"
|
|
371
|
-
popper-class="background-popper h-auto"
|
|
372
|
-
virtual-triggering
|
|
373
|
-
>
|
|
374
|
-
<div>
|
|
375
|
-
<el-row class="backgroundText">Viewing Mode</el-row>
|
|
376
|
-
<el-row class="backgroundControl">
|
|
377
|
-
<el-select
|
|
378
|
-
:teleported="false"
|
|
379
|
-
v-model="viewingMode"
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
:
|
|
388
|
-
:
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
<el-row class="
|
|
398
|
-
<el-row class="
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
<el-radio :label="
|
|
406
|
-
</el-radio
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
<el-row class="
|
|
410
|
-
<el-row class="
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
<el-radio :label="
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
<el-row class="
|
|
422
|
-
<el-row class="
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
<el-radio :label="
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
<el-row class="
|
|
434
|
-
<el-row class="
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
:
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
item
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
@
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
:
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
@
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
:
|
|
500
|
-
:
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
</
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
import {
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
import
|
|
516
|
-
import
|
|
517
|
-
import
|
|
518
|
-
import
|
|
519
|
-
import
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
import
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
import
|
|
535
|
-
import
|
|
536
|
-
import
|
|
537
|
-
import {
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
this.
|
|
626
|
-
|
|
627
|
-
//
|
|
628
|
-
//
|
|
629
|
-
this.
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
*
|
|
635
|
-
*
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
*
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
*
|
|
666
|
-
*
|
|
667
|
-
*
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
*
|
|
678
|
-
*
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
*
|
|
702
|
-
*
|
|
703
|
-
*
|
|
704
|
-
* @arg
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
*
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
*
|
|
725
|
-
*
|
|
726
|
-
*
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
*
|
|
737
|
-
*
|
|
738
|
-
*
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
*
|
|
749
|
-
*
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
*
|
|
774
|
-
*
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
*
|
|
784
|
-
*
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
*
|
|
794
|
-
*
|
|
795
|
-
* ``payload
|
|
796
|
-
*
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
*
|
|
806
|
-
*
|
|
807
|
-
*
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
*
|
|
817
|
-
*
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
*
|
|
829
|
-
*
|
|
830
|
-
*
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
let
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
*
|
|
851
|
-
*
|
|
852
|
-
*
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
*
|
|
862
|
-
*
|
|
863
|
-
*
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
*
|
|
875
|
-
*
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
*
|
|
883
|
-
*
|
|
884
|
-
*
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
*
|
|
894
|
-
*
|
|
895
|
-
*
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
*
|
|
907
|
-
*
|
|
908
|
-
*
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
*
|
|
918
|
-
*
|
|
919
|
-
*
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
*
|
|
931
|
-
*
|
|
932
|
-
*
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
*
|
|
942
|
-
*
|
|
943
|
-
*
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
*
|
|
955
|
-
*
|
|
956
|
-
*
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
*
|
|
964
|
-
*
|
|
965
|
-
*
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
const
|
|
972
|
-
const
|
|
973
|
-
const
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
if
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
data
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
*
|
|
1017
|
-
*
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
*
|
|
1024
|
-
*
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
*
|
|
1033
|
-
*
|
|
1034
|
-
*
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
*
|
|
1092
|
-
*
|
|
1093
|
-
*/
|
|
1094
|
-
|
|
1095
|
-
this.
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
* @
|
|
1102
|
-
*
|
|
1103
|
-
* @arg
|
|
1104
|
-
*/
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
*
|
|
1131
|
-
*
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
)
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
this.
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
* @
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
* @
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
* @
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
* @
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
},
|
|
1268
|
-
/**
|
|
1269
|
-
* @vuese
|
|
1270
|
-
* Function to
|
|
1271
|
-
*/
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
*
|
|
1337
|
-
*
|
|
1338
|
-
*
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
this.
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
// @
|
|
1377
|
-
//
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
//
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
this.
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
this.restoreMapState(this._stateToBeSet)
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
}
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
this.
|
|
1490
|
-
this.
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
this.
|
|
1494
|
-
this.
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
this
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
*
|
|
1514
|
-
*
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
*
|
|
1523
|
-
*
|
|
1524
|
-
*
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
*
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
{
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
.
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
}
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
}
|
|
1911
|
-
|
|
1912
|
-
.
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
}
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
.
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
:
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
&::
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
:
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
}
|
|
2082
|
-
|
|
2083
|
-
:
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
}
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
}
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
:
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
}
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
.
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
background:
|
|
2163
|
-
|
|
2164
|
-
color:
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
}
|
|
2180
|
-
|
|
2181
|
-
.
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
&.
|
|
2191
|
-
|
|
2192
|
-
}
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
}
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
:
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2228
|
-
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
2278
|
-
|
|
2279
|
-
|
|
2280
|
-
|
|
2281
|
-
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
}
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
|
|
2292
|
-
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2302
|
-
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
|
|
2306
|
-
|
|
2307
|
-
|
|
2308
|
-
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
|
-
.
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
:
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
2321
|
-
|
|
2322
|
-
:
|
|
2323
|
-
|
|
2324
|
-
|
|
2325
|
-
|
|
2326
|
-
|
|
2327
|
-
|
|
2328
|
-
:
|
|
2329
|
-
|
|
2330
|
-
|
|
2331
|
-
|
|
2332
|
-
|
|
2333
|
-
|
|
2334
|
-
|
|
2335
|
-
|
|
2336
|
-
|
|
2337
|
-
|
|
2338
|
-
:
|
|
2339
|
-
|
|
2340
|
-
|
|
2341
|
-
|
|
2342
|
-
|
|
2343
|
-
|
|
2344
|
-
|
|
2345
|
-
|
|
2346
|
-
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
|
|
2359
|
-
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
|
|
2366
|
-
}
|
|
2367
|
-
|
|
2368
|
-
.
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
|
|
2373
|
-
|
|
2374
|
-
font-
|
|
2375
|
-
|
|
2376
|
-
color:
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
}
|
|
2383
|
-
}
|
|
2384
|
-
|
|
2385
|
-
|
|
2386
|
-
|
|
2387
|
-
|
|
2388
|
-
|
|
2389
|
-
}
|
|
2390
|
-
|
|
2391
|
-
:deep(.
|
|
2392
|
-
|
|
2393
|
-
|
|
2394
|
-
}
|
|
2395
|
-
}
|
|
2396
|
-
|
|
2397
|
-
.
|
|
2398
|
-
|
|
2399
|
-
|
|
2400
|
-
|
|
2401
|
-
|
|
2402
|
-
|
|
2403
|
-
:
|
|
2404
|
-
|
|
2405
|
-
|
|
2406
|
-
|
|
2407
|
-
|
|
2408
|
-
|
|
2409
|
-
:
|
|
2410
|
-
|
|
2411
|
-
|
|
2412
|
-
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
|
|
2416
|
-
|
|
2417
|
-
|
|
2418
|
-
|
|
2419
|
-
|
|
2420
|
-
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
|
|
2424
|
-
|
|
2425
|
-
:
|
|
2426
|
-
|
|
2427
|
-
|
|
2428
|
-
|
|
2429
|
-
|
|
2430
|
-
|
|
2431
|
-
|
|
2432
|
-
|
|
2433
|
-
|
|
2434
|
-
|
|
2435
|
-
|
|
2436
|
-
|
|
2437
|
-
|
|
2438
|
-
|
|
2439
|
-
|
|
2440
|
-
|
|
2441
|
-
|
|
2442
|
-
|
|
2443
|
-
|
|
2444
|
-
|
|
2445
|
-
|
|
2446
|
-
|
|
2447
|
-
|
|
2448
|
-
|
|
2449
|
-
|
|
2450
|
-
|
|
2451
|
-
|
|
2452
|
-
|
|
2453
|
-
|
|
2454
|
-
|
|
2455
|
-
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
|
|
2459
|
-
|
|
2460
|
-
|
|
2461
|
-
|
|
2462
|
-
|
|
2463
|
-
|
|
2464
|
-
|
|
2465
|
-
|
|
2466
|
-
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
2476
|
-
|
|
2477
|
-
|
|
2478
|
-
|
|
2479
|
-
|
|
2480
|
-
|
|
2481
|
-
|
|
2482
|
-
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2488
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
:
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
.
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
class="flatmap-container"
|
|
4
|
+
ref="flatmapContainer"
|
|
5
|
+
v-loading="loading"
|
|
6
|
+
element-loading-text="Loading..."
|
|
7
|
+
element-loading-background="rgba(0, 0, 0, 0.3)"
|
|
8
|
+
>
|
|
9
|
+
<map-svg-sprite-color />
|
|
10
|
+
<div
|
|
11
|
+
style="height: 100%; width: 100%; position: relative; overflow-y: none"
|
|
12
|
+
>
|
|
13
|
+
<div style="height: 100%; width: 100%" ref="display"></div>
|
|
14
|
+
<div class="beta-popovers" v-show="!disableUI">
|
|
15
|
+
<div>
|
|
16
|
+
<el-popover
|
|
17
|
+
placement="right"
|
|
18
|
+
popper-class="warning-popper flatmap-popper"
|
|
19
|
+
:teleported="false"
|
|
20
|
+
:visible="hoverVisibilities[6].value"
|
|
21
|
+
ref="warningPopover"
|
|
22
|
+
>
|
|
23
|
+
<p
|
|
24
|
+
v-if="isLegacy"
|
|
25
|
+
@mouseover="showToolitip(6)"
|
|
26
|
+
@mouseout="hideToolitip(6)"
|
|
27
|
+
>
|
|
28
|
+
This is a legacy map, you may view the latest map instead.
|
|
29
|
+
</p>
|
|
30
|
+
<p
|
|
31
|
+
v-else-if="isFC"
|
|
32
|
+
@mouseover="showToolitip(6)"
|
|
33
|
+
@mouseout="hideToolitip(6)"
|
|
34
|
+
>
|
|
35
|
+
This map displays the connectivity of individual neurons.
|
|
36
|
+
Specifically, those which align with (parts of) the neuron
|
|
37
|
+
populations from the
|
|
38
|
+
<a
|
|
39
|
+
href="https://sparc.science/resources/1ZUKXU2YmLcn2reCyXjlew"
|
|
40
|
+
target="_blank"
|
|
41
|
+
>
|
|
42
|
+
ApiNATOMY
|
|
43
|
+
</a>
|
|
44
|
+
models available in
|
|
45
|
+
<a
|
|
46
|
+
href="https://sparc.science/resources/6eg3VpJbwQR4B84CjrvmyD"
|
|
47
|
+
target="_blank"
|
|
48
|
+
>
|
|
49
|
+
SCKAN </a
|
|
50
|
+
>.
|
|
51
|
+
</p>
|
|
52
|
+
<p v-else @mouseover="showToolitip(6)" @mouseout="hideToolitip(6)">
|
|
53
|
+
This map displays the connectivity of neuron populations.
|
|
54
|
+
Specifically, those from the primarily rat-based
|
|
55
|
+
<a
|
|
56
|
+
href="https://sparc.science/resources/1ZUKXU2YmLcn2reCyXjlew"
|
|
57
|
+
target="_blank"
|
|
58
|
+
>
|
|
59
|
+
ApiNATOMY
|
|
60
|
+
</a>
|
|
61
|
+
models available in
|
|
62
|
+
<a
|
|
63
|
+
href="https://sparc.science/resources/6eg3VpJbwQR4B84CjrvmyD"
|
|
64
|
+
target="_blank"
|
|
65
|
+
>
|
|
66
|
+
SCKAN </a
|
|
67
|
+
>. New connectivity and species specificity will be added as the
|
|
68
|
+
SPARC program progresses.
|
|
69
|
+
</p>
|
|
70
|
+
<template #reference>
|
|
71
|
+
<div
|
|
72
|
+
class="warning-icon"
|
|
73
|
+
v-if="displayWarning"
|
|
74
|
+
@mouseover="showToolitip(6)"
|
|
75
|
+
@mouseout="hideToolitip(6)"
|
|
76
|
+
>
|
|
77
|
+
<el-icon><el-icon-warning-filled /></el-icon>
|
|
78
|
+
<template v-if="isLegacy">
|
|
79
|
+
<span class="warning-text">Legacy Map</span>
|
|
80
|
+
<div class="latest-map-text" @click="viewLatestMap">
|
|
81
|
+
Click here for the latest map
|
|
82
|
+
</div>
|
|
83
|
+
</template>
|
|
84
|
+
<template v-else>
|
|
85
|
+
<span class="warning-text">Beta</span>
|
|
86
|
+
</template>
|
|
87
|
+
</div>
|
|
88
|
+
</template>
|
|
89
|
+
</el-popover>
|
|
90
|
+
</div>
|
|
91
|
+
<el-popover
|
|
92
|
+
placement="right"
|
|
93
|
+
v-if="displayLatestChanges"
|
|
94
|
+
:teleported="false"
|
|
95
|
+
trigger="manual"
|
|
96
|
+
popper-class="warning-popper flatmap-popper"
|
|
97
|
+
:visible="hoverVisibilities[7].value"
|
|
98
|
+
>
|
|
99
|
+
<template #reference>
|
|
100
|
+
<div
|
|
101
|
+
class="latest-changesicon"
|
|
102
|
+
v-if="displayLatestChanges"
|
|
103
|
+
@mouseover="showToolitip(7)"
|
|
104
|
+
@mouseout="hideToolitip(7)"
|
|
105
|
+
>
|
|
106
|
+
<el-icon><el-icon-warning-filled /></el-icon>
|
|
107
|
+
<span class="warning-text">What's new?</span>
|
|
108
|
+
</div>
|
|
109
|
+
</template>
|
|
110
|
+
<template #default>
|
|
111
|
+
<b>Network discovery mode</b>
|
|
112
|
+
<p>
|
|
113
|
+
You can now view the network of neurons connected to a selected
|
|
114
|
+
neuron. This mode is located in the settings at the bottom right.
|
|
115
|
+
Once discovery mode is on, click on a neuron to see its
|
|
116
|
+
connections.
|
|
117
|
+
</p>
|
|
118
|
+
<b>Now can display up to 6 panes</b>
|
|
119
|
+
<p>
|
|
120
|
+
You can now display up to 6 panes in the flatmap. This allows you
|
|
121
|
+
to compare between different datasets and/or different views of
|
|
122
|
+
the same dataset.
|
|
123
|
+
</p>
|
|
124
|
+
</template>
|
|
125
|
+
</el-popover>
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
<!-- The element below is placed onto the flatmap when it is ready -->
|
|
129
|
+
<el-icon
|
|
130
|
+
class="minimap-resize"
|
|
131
|
+
:class="{ enlarge: minimapSmall, shrink: !minimapSmall }"
|
|
132
|
+
ref="minimapResize"
|
|
133
|
+
v-show="minimapResizeShow"
|
|
134
|
+
@click="closeMinimap"
|
|
135
|
+
>
|
|
136
|
+
<el-icon-arrow-down />
|
|
137
|
+
</el-icon>
|
|
138
|
+
|
|
139
|
+
<div class="bottom-right-control" v-show="!disableUI">
|
|
140
|
+
<el-popover
|
|
141
|
+
content="Zoom in"
|
|
142
|
+
placement="left"
|
|
143
|
+
:teleported="false"
|
|
144
|
+
trigger="manual"
|
|
145
|
+
width="70"
|
|
146
|
+
popper-class="flatmap-popper"
|
|
147
|
+
:visible="hoverVisibilities[0].value"
|
|
148
|
+
>
|
|
149
|
+
<template #reference>
|
|
150
|
+
<map-svg-icon
|
|
151
|
+
icon="zoomIn"
|
|
152
|
+
class="icon-button zoomIn"
|
|
153
|
+
@click="zoomIn()"
|
|
154
|
+
@mouseover="showToolitip(0)"
|
|
155
|
+
@mouseout="hideToolitip(0)"
|
|
156
|
+
/>
|
|
157
|
+
</template>
|
|
158
|
+
</el-popover>
|
|
159
|
+
<el-popover
|
|
160
|
+
content="Zoom out"
|
|
161
|
+
placement="top-end"
|
|
162
|
+
:teleported="false"
|
|
163
|
+
trigger="manual"
|
|
164
|
+
width="70"
|
|
165
|
+
popper-class="flatmap-popper popper-zoomout"
|
|
166
|
+
:visible="hoverVisibilities[1].value"
|
|
167
|
+
>
|
|
168
|
+
<template #reference>
|
|
169
|
+
<map-svg-icon
|
|
170
|
+
icon="zoomOut"
|
|
171
|
+
class="icon-button zoomOut"
|
|
172
|
+
@click="zoomOut()"
|
|
173
|
+
@mouseover="showToolitip(1)"
|
|
174
|
+
@mouseout="hideToolitip(1)"
|
|
175
|
+
/>
|
|
176
|
+
</template>
|
|
177
|
+
</el-popover>
|
|
178
|
+
<el-popover
|
|
179
|
+
content="Reset"
|
|
180
|
+
placement="top"
|
|
181
|
+
:teleported="false"
|
|
182
|
+
trigger="manual"
|
|
183
|
+
width="70"
|
|
184
|
+
popper-class="flatmap-popper"
|
|
185
|
+
:visible="hoverVisibilities[2].value"
|
|
186
|
+
>
|
|
187
|
+
<div>
|
|
188
|
+
Fit to
|
|
189
|
+
<br />
|
|
190
|
+
window
|
|
191
|
+
</div>
|
|
192
|
+
<template #reference>
|
|
193
|
+
<map-svg-icon
|
|
194
|
+
icon="fitWindow"
|
|
195
|
+
class="icon-button fitWindow"
|
|
196
|
+
@click="resetView()"
|
|
197
|
+
@mouseover="showToolitip(2)"
|
|
198
|
+
@mouseout="hideToolitip(2)"
|
|
199
|
+
/>
|
|
200
|
+
</template>
|
|
201
|
+
</el-popover>
|
|
202
|
+
</div>
|
|
203
|
+
<el-popover
|
|
204
|
+
content="Change pathway visibility"
|
|
205
|
+
placement="right"
|
|
206
|
+
:teleported="false"
|
|
207
|
+
trigger="manual"
|
|
208
|
+
popper-class="flatmap-popper"
|
|
209
|
+
:visible="hoverVisibilities[4].value"
|
|
210
|
+
ref="checkBoxPopover"
|
|
211
|
+
>
|
|
212
|
+
<template #reference>
|
|
213
|
+
<div
|
|
214
|
+
class="pathway-location"
|
|
215
|
+
:class="{ open: drawerOpen, close: !drawerOpen }"
|
|
216
|
+
v-show="!disableUI"
|
|
217
|
+
>
|
|
218
|
+
<div
|
|
219
|
+
class="pathway-container"
|
|
220
|
+
:class="{ open: drawerOpen, close: !drawerOpen }"
|
|
221
|
+
:style="{ 'max-height': pathwaysMaxHeight + 'px' }"
|
|
222
|
+
v-popover:checkBoxPopover
|
|
223
|
+
>
|
|
224
|
+
<svg-legends v-if="!isFC" class="svg-legends-container" />
|
|
225
|
+
<el-popover
|
|
226
|
+
content="Location of the featured dataset"
|
|
227
|
+
placement="right"
|
|
228
|
+
:teleported="false"
|
|
229
|
+
trigger="hover"
|
|
230
|
+
popper-class="flatmap-popper popper-bump-right"
|
|
231
|
+
:visible="hoverVisibilities[9].value"
|
|
232
|
+
ref="featuredMarkerPopover"
|
|
233
|
+
>
|
|
234
|
+
<template #reference>
|
|
235
|
+
<div
|
|
236
|
+
v-show="showStarInLegend"
|
|
237
|
+
v-popover:featuredMarkerPopover
|
|
238
|
+
class="yellow-star-legend"
|
|
239
|
+
v-html="yellowstar"
|
|
240
|
+
></div>
|
|
241
|
+
</template>
|
|
242
|
+
</el-popover>
|
|
243
|
+
<!-- The line below places the yellowstar svg on the left, and the text "Featured markers on the right" with css so they are both centered in the div -->
|
|
244
|
+
<el-popover
|
|
245
|
+
content="Find these markers for data"
|
|
246
|
+
placement="right"
|
|
247
|
+
:teleported="false"
|
|
248
|
+
trigger="manual"
|
|
249
|
+
popper-class="flatmap-popper popper-bump-right"
|
|
250
|
+
:visible="hoverVisibilities[5].value"
|
|
251
|
+
ref="markerPopover"
|
|
252
|
+
>
|
|
253
|
+
<template #reference>
|
|
254
|
+
<div
|
|
255
|
+
v-show="hoverVisibilities[5].value"
|
|
256
|
+
class="flatmap-marker-help"
|
|
257
|
+
v-html="flatmapMarker"
|
|
258
|
+
v-popover:markerPopover
|
|
259
|
+
></div>
|
|
260
|
+
</template>
|
|
261
|
+
</el-popover>
|
|
262
|
+
<tree-controls
|
|
263
|
+
v-if="isFC && systems && systems.length > 0"
|
|
264
|
+
:active="currentActive"
|
|
265
|
+
:hover="currentHover"
|
|
266
|
+
:tree-data="systems"
|
|
267
|
+
ref="treeControls"
|
|
268
|
+
@changed="systemSelected"
|
|
269
|
+
@checkAll="checkAllSystems"
|
|
270
|
+
@change-active="ftuSelected"
|
|
271
|
+
/>
|
|
272
|
+
<selections-group
|
|
273
|
+
v-if="!isFC && centreLines && centreLines.length > 0"
|
|
274
|
+
title="Nerves"
|
|
275
|
+
labelKey="label"
|
|
276
|
+
identifierKey="key"
|
|
277
|
+
:selections="centreLines"
|
|
278
|
+
@changed="centreLinesSelected"
|
|
279
|
+
ref="centrelinesSelection"
|
|
280
|
+
key="centrelinesSelection"
|
|
281
|
+
/>
|
|
282
|
+
<!--
|
|
283
|
+
<selections-group
|
|
284
|
+
v-if="isFC && sckanDisplay && sckanDisplay.length > 0"
|
|
285
|
+
title="SCKAN"
|
|
286
|
+
labelKey="label"
|
|
287
|
+
identifierKey="key"
|
|
288
|
+
:selections="sckanDisplay"
|
|
289
|
+
@changed="sckanSelected"
|
|
290
|
+
@checkAll="checkAllSCKAN"
|
|
291
|
+
ref="skcanSelection"
|
|
292
|
+
key="skcanSelection"
|
|
293
|
+
/>
|
|
294
|
+
<selections-group
|
|
295
|
+
v-if="layers && layers.length > 0"
|
|
296
|
+
title="Layers"
|
|
297
|
+
labelKey="description"
|
|
298
|
+
identifierKey="id"
|
|
299
|
+
:selections="layers"
|
|
300
|
+
@changed="layersSelected"
|
|
301
|
+
@checkAll="checkAllLayers"
|
|
302
|
+
ref="layersSelection"
|
|
303
|
+
key="layersSelection"
|
|
304
|
+
/>
|
|
305
|
+
-->
|
|
306
|
+
<selections-group
|
|
307
|
+
v-if="!isFC && taxonConnectivity && taxonConnectivity.length > 0"
|
|
308
|
+
title="Observed in"
|
|
309
|
+
labelKey="label"
|
|
310
|
+
identifierKey="taxon"
|
|
311
|
+
:selections="taxonConnectivity"
|
|
312
|
+
@changed="taxonsSelected"
|
|
313
|
+
@checkAll="checkAllTaxons"
|
|
314
|
+
ref="taxonSelection"
|
|
315
|
+
key="taxonSelection"
|
|
316
|
+
/>
|
|
317
|
+
<selections-group
|
|
318
|
+
v-if="pathways && pathways.length > 0"
|
|
319
|
+
title="Pathways"
|
|
320
|
+
labelKey="label"
|
|
321
|
+
identifierKey="type"
|
|
322
|
+
colourStyle="line"
|
|
323
|
+
:selections="pathways"
|
|
324
|
+
@changed="pathwaysSelected"
|
|
325
|
+
@checkAll="checkAllPathways"
|
|
326
|
+
ref="pathwaysSelection"
|
|
327
|
+
key="pathwaysSelection"
|
|
328
|
+
/>
|
|
329
|
+
</div>
|
|
330
|
+
<div
|
|
331
|
+
@click="toggleDrawer"
|
|
332
|
+
class="drawer-button"
|
|
333
|
+
:class="{ open: drawerOpen, close: !drawerOpen }"
|
|
334
|
+
>
|
|
335
|
+
<el-icon><el-icon-arrow-left /></el-icon>
|
|
336
|
+
</div>
|
|
337
|
+
</div>
|
|
338
|
+
</template>
|
|
339
|
+
</el-popover>
|
|
340
|
+
<el-popover
|
|
341
|
+
v-if="openMapRef"
|
|
342
|
+
ref="open-map-popover"
|
|
343
|
+
:virtual-ref="openMapRef"
|
|
344
|
+
placement="top-start"
|
|
345
|
+
width="136"
|
|
346
|
+
:teleported="false"
|
|
347
|
+
trigger="click"
|
|
348
|
+
popper-class="open-map-popper non-selectable"
|
|
349
|
+
virtual-triggering
|
|
350
|
+
>
|
|
351
|
+
<el-row v-for="item in openMapOptions" :key="item.key">
|
|
352
|
+
<el-button type="primary" plain
|
|
353
|
+
@click="/**
|
|
354
|
+
* This event is emitted when the user chooses a different map option
|
|
355
|
+
* from ``openMapOptions`` props.
|
|
356
|
+
* @arg mapOption.key
|
|
357
|
+
* */
|
|
358
|
+
$emit('open-map', item.key)"
|
|
359
|
+
>
|
|
360
|
+
{{ item.display }}
|
|
361
|
+
</el-button>
|
|
362
|
+
</el-row>
|
|
363
|
+
</el-popover>
|
|
364
|
+
<el-popover
|
|
365
|
+
ref="backgroundPopover"
|
|
366
|
+
:virtual-ref="backgroundIconRef"
|
|
367
|
+
placement="top-start"
|
|
368
|
+
width="200"
|
|
369
|
+
:teleported="false"
|
|
370
|
+
trigger="click"
|
|
371
|
+
popper-class="background-popper h-auto"
|
|
372
|
+
virtual-triggering
|
|
373
|
+
>
|
|
374
|
+
<div>
|
|
375
|
+
<el-row class="backgroundText">Viewing Mode</el-row>
|
|
376
|
+
<el-row class="backgroundControl">
|
|
377
|
+
<el-select
|
|
378
|
+
:teleported="false"
|
|
379
|
+
v-model="viewingMode"
|
|
380
|
+
@change="changeViewingMode"
|
|
381
|
+
placeholder="Select"
|
|
382
|
+
class="select-box"
|
|
383
|
+
popper-class="flatmap_dropdown"
|
|
384
|
+
>
|
|
385
|
+
<el-option
|
|
386
|
+
v-for="(item, i) in viewingModes"
|
|
387
|
+
:key="item + i"
|
|
388
|
+
:label="item"
|
|
389
|
+
:value="item"
|
|
390
|
+
>
|
|
391
|
+
<el-row>
|
|
392
|
+
<el-col :span="12">{{ item }}</el-col>
|
|
393
|
+
</el-row>
|
|
394
|
+
</el-option>
|
|
395
|
+
</el-select>
|
|
396
|
+
</el-row>
|
|
397
|
+
<el-row class="backgroundSpacer" v-if="displayFlightPathOption"></el-row>
|
|
398
|
+
<el-row class="backgroundText" v-if="displayFlightPathOption">Flight path display</el-row>
|
|
399
|
+
<el-row class="backgroundControl" v-if="displayFlightPathOption">
|
|
400
|
+
<el-radio-group
|
|
401
|
+
v-model="flightPath3DRadio"
|
|
402
|
+
class="flatmap-radio"
|
|
403
|
+
@change="setFlightPath3D"
|
|
404
|
+
>
|
|
405
|
+
<el-radio :label="false">2D</el-radio>
|
|
406
|
+
<el-radio :label="true">3D</el-radio>
|
|
407
|
+
</el-radio-group>
|
|
408
|
+
</el-row>
|
|
409
|
+
<el-row class="backgroundSpacer"></el-row>
|
|
410
|
+
<el-row class="backgroundText">Organs display</el-row>
|
|
411
|
+
<el-row class="backgroundControl">
|
|
412
|
+
<el-radio-group
|
|
413
|
+
v-model="colourRadio"
|
|
414
|
+
class="flatmap-radio"
|
|
415
|
+
@change="setColour"
|
|
416
|
+
>
|
|
417
|
+
<el-radio :label="true">Colour</el-radio>
|
|
418
|
+
<el-radio :label="false">Greyscale</el-radio>
|
|
419
|
+
</el-radio-group>
|
|
420
|
+
</el-row>
|
|
421
|
+
<el-row class="backgroundSpacer"></el-row>
|
|
422
|
+
<el-row class="backgroundText">Outlines display</el-row>
|
|
423
|
+
<el-row class="backgroundControl">
|
|
424
|
+
<el-radio-group
|
|
425
|
+
v-model="outlinesRadio"
|
|
426
|
+
class="flatmap-radio"
|
|
427
|
+
@change="setOutlines"
|
|
428
|
+
>
|
|
429
|
+
<el-radio :label="true">Show</el-radio>
|
|
430
|
+
<el-radio :label="false">Hide</el-radio>
|
|
431
|
+
</el-radio-group>
|
|
432
|
+
</el-row>
|
|
433
|
+
<el-row class="backgroundSpacer"></el-row>
|
|
434
|
+
<el-row class="backgroundText">Change background</el-row>
|
|
435
|
+
<el-row class="backgroundControl">
|
|
436
|
+
<div
|
|
437
|
+
v-for="item in availableBackground"
|
|
438
|
+
:key="item"
|
|
439
|
+
:class="[
|
|
440
|
+
'backgroundChoice',
|
|
441
|
+
item,
|
|
442
|
+
item == currentBackground ? 'active' : '',
|
|
443
|
+
]"
|
|
444
|
+
@click="backgroundChangeCallback(item)"
|
|
445
|
+
/>
|
|
446
|
+
</el-row>
|
|
447
|
+
</div>
|
|
448
|
+
</el-popover>
|
|
449
|
+
<div
|
|
450
|
+
class="settings-group"
|
|
451
|
+
:class="{ open: drawerOpen, close: !drawerOpen }"
|
|
452
|
+
v-show="!disableUI"
|
|
453
|
+
>
|
|
454
|
+
<el-row>
|
|
455
|
+
<el-popover
|
|
456
|
+
:visible="hoverVisibilities[8].value"
|
|
457
|
+
content="Open new map"
|
|
458
|
+
placement="right"
|
|
459
|
+
:teleported="false"
|
|
460
|
+
popper-class="flatmap-popper"
|
|
461
|
+
>
|
|
462
|
+
<template #reference>
|
|
463
|
+
<map-svg-icon
|
|
464
|
+
v-if="enableOpenMapUI && openMapOptions.length > 0"
|
|
465
|
+
ref="openMapRef"
|
|
466
|
+
icon="openMap"
|
|
467
|
+
class="icon-button open-map-button"
|
|
468
|
+
@mouseover="showToolitip(8)"
|
|
469
|
+
@mouseout="hideToolitip(8)"
|
|
470
|
+
/>
|
|
471
|
+
</template>
|
|
472
|
+
</el-popover>
|
|
473
|
+
</el-row>
|
|
474
|
+
<el-row>
|
|
475
|
+
<el-popover
|
|
476
|
+
content="Change settings"
|
|
477
|
+
placement="right"
|
|
478
|
+
:visible="hoverVisibilities[3].value"
|
|
479
|
+
:teleported="false"
|
|
480
|
+
trigger="manual"
|
|
481
|
+
popper-class="flatmap-popper"
|
|
482
|
+
>
|
|
483
|
+
<template #reference>
|
|
484
|
+
<map-svg-icon
|
|
485
|
+
ref="backgroundIconRef"
|
|
486
|
+
icon="changeBckgd"
|
|
487
|
+
class="icon-button"
|
|
488
|
+
@mouseover="showToolitip(3)"
|
|
489
|
+
@mouseout="hideToolitip(3)"
|
|
490
|
+
/>
|
|
491
|
+
</template>
|
|
492
|
+
</el-popover>
|
|
493
|
+
</el-row>
|
|
494
|
+
</div>
|
|
495
|
+
<Tooltip
|
|
496
|
+
ref="tooltip"
|
|
497
|
+
class="tooltip"
|
|
498
|
+
v-show="tooltipDisplay"
|
|
499
|
+
:annotationEntry="annotationEntry"
|
|
500
|
+
:entry="tooltipEntry"
|
|
501
|
+
:annotationDisplay="viewingMode === 'Annotation'"
|
|
502
|
+
/>
|
|
503
|
+
</div>
|
|
504
|
+
</div>
|
|
505
|
+
</template>
|
|
506
|
+
|
|
507
|
+
<script>
|
|
508
|
+
import { shallowRef } from 'vue'
|
|
509
|
+
import {
|
|
510
|
+
WarningFilled as ElIconWarningFilled,
|
|
511
|
+
ArrowDown as ElIconArrowDown,
|
|
512
|
+
ArrowLeft as ElIconArrowLeft,
|
|
513
|
+
} from '@element-plus/icons-vue'
|
|
514
|
+
/* eslint-disable no-alert, no-console */
|
|
515
|
+
import Tooltip from './Tooltip.vue'
|
|
516
|
+
import SelectionsGroup from './SelectionsGroup.vue'
|
|
517
|
+
import TreeControls from './TreeControls.vue'
|
|
518
|
+
import { MapSvgIcon, MapSvgSpriteColor } from '@abi-software/svg-sprite'
|
|
519
|
+
import SvgLegends from './legends/SvgLegends.vue'
|
|
520
|
+
import {
|
|
521
|
+
ElButton as Button,
|
|
522
|
+
ElCol as Col,
|
|
523
|
+
ElLoading as Loading,
|
|
524
|
+
ElRadio as Radio,
|
|
525
|
+
ElRadioGroup as RadioGroup,
|
|
526
|
+
ElRow as Row,
|
|
527
|
+
ElSelect as Select,
|
|
528
|
+
} from 'element-plus'
|
|
529
|
+
import flatmapMarker from '../icons/flatmap-marker'
|
|
530
|
+
import {
|
|
531
|
+
FlatmapQueries,
|
|
532
|
+
findTaxonomyLabel,
|
|
533
|
+
} from '../services/flatmapQueries.js'
|
|
534
|
+
import yellowstar from '../icons/yellowstar'
|
|
535
|
+
import ResizeSensor from 'css-element-queries/src/ResizeSensor'
|
|
536
|
+
import * as flatmap from '@abi-software/flatmap-viewer'
|
|
537
|
+
import { mapState } from 'pinia'
|
|
538
|
+
import { useMainStore } from '@/store/index'
|
|
539
|
+
|
|
540
|
+
|
|
541
|
+
const processFTUs = (parent, key) => {
|
|
542
|
+
const ftus = []
|
|
543
|
+
let items = parent.organs ? parent.organs : parent.ftus
|
|
544
|
+
const children = items
|
|
545
|
+
? items.filter(
|
|
546
|
+
(obj, index) =>
|
|
547
|
+
items.findIndex((item) => item.label === obj.label) === index
|
|
548
|
+
)
|
|
549
|
+
: undefined
|
|
550
|
+
if (children) {
|
|
551
|
+
children.forEach((child) => {
|
|
552
|
+
const data = {
|
|
553
|
+
label: child.label,
|
|
554
|
+
models: child.models,
|
|
555
|
+
key: `${key}.${child.label}`,
|
|
556
|
+
}
|
|
557
|
+
const grandChildren = processFTUs(child, data.key)
|
|
558
|
+
if (grandChildren.length > 0) {
|
|
559
|
+
data.children = grandChildren
|
|
560
|
+
}
|
|
561
|
+
ftus.push(data)
|
|
562
|
+
})
|
|
563
|
+
}
|
|
564
|
+
return ftus
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
const processSystems = (systems) => {
|
|
568
|
+
const allSystems = []
|
|
569
|
+
if (systems && systems.length > 0) {
|
|
570
|
+
const data = { label: 'All', key: 'All', children: [] }
|
|
571
|
+
systems.forEach((system) => {
|
|
572
|
+
const child = {
|
|
573
|
+
colour: system.colour,
|
|
574
|
+
enabled: system.enabled,
|
|
575
|
+
label: system.id,
|
|
576
|
+
key: system.id,
|
|
577
|
+
}
|
|
578
|
+
const children = processFTUs(system, child.key)
|
|
579
|
+
if (children.length > 0) child.children = children
|
|
580
|
+
data.children.push(child)
|
|
581
|
+
})
|
|
582
|
+
|
|
583
|
+
allSystems.push(data)
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
return allSystems
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
const createUnfilledTooltipData = function () {
|
|
590
|
+
return {
|
|
591
|
+
destinations: [],
|
|
592
|
+
origins: [],
|
|
593
|
+
components: [],
|
|
594
|
+
destinationsWithDatasets: [],
|
|
595
|
+
originsWithDatasets: [],
|
|
596
|
+
componentsWithDatasets: [],
|
|
597
|
+
resource: undefined,
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
/**
|
|
602
|
+
* A vue component of the flatmap viewer.
|
|
603
|
+
*/
|
|
604
|
+
export default {
|
|
605
|
+
name: 'FlatmapVuer',
|
|
606
|
+
components: {
|
|
607
|
+
Button,
|
|
608
|
+
Col,
|
|
609
|
+
Loading,
|
|
610
|
+
Radio,
|
|
611
|
+
RadioGroup,
|
|
612
|
+
Row,
|
|
613
|
+
Select,
|
|
614
|
+
MapSvgIcon,
|
|
615
|
+
MapSvgSpriteColor,
|
|
616
|
+
Tooltip,
|
|
617
|
+
TreeControls,
|
|
618
|
+
SelectionsGroup,
|
|
619
|
+
SvgLegends,
|
|
620
|
+
ElIconWarningFilled,
|
|
621
|
+
ElIconArrowDown,
|
|
622
|
+
ElIconArrowLeft,
|
|
623
|
+
},
|
|
624
|
+
beforeCreate: function () {
|
|
625
|
+
this.mapManager = undefined
|
|
626
|
+
this.mapImp = undefined
|
|
627
|
+
//The state watcher may triggered before
|
|
628
|
+
//created causing issue, This flag will
|
|
629
|
+
//resolve this issue.
|
|
630
|
+
this.setStateRequired = false
|
|
631
|
+
},
|
|
632
|
+
methods: {
|
|
633
|
+
/**
|
|
634
|
+
* @vuese
|
|
635
|
+
* Function to switch from 2D to 3D
|
|
636
|
+
* @arg flag
|
|
637
|
+
*/
|
|
638
|
+
setFlightPath3D: function (flag) {
|
|
639
|
+
this.flightPath3DRadio = flag
|
|
640
|
+
if (this.mapImp) {
|
|
641
|
+
this.mapImp.enableFlightPaths(flag)
|
|
642
|
+
}
|
|
643
|
+
},
|
|
644
|
+
/**
|
|
645
|
+
* @vuese
|
|
646
|
+
* Function to view the latest map (example when you are on legacy map).
|
|
647
|
+
*/
|
|
648
|
+
viewLatestMap: function () {
|
|
649
|
+
let biologicalSex = this.biologicalSex ? this.biologicalSex : undefined
|
|
650
|
+
//Human requires special handling
|
|
651
|
+
if (this.entry === 'NCBITaxon:9606') {
|
|
652
|
+
biologicalSex = 'PATO:0000384'
|
|
653
|
+
}
|
|
654
|
+
const state = {
|
|
655
|
+
entry: this.entry,
|
|
656
|
+
biologicalSex,
|
|
657
|
+
viewport: this.mapImp.getState(),
|
|
658
|
+
}
|
|
659
|
+
/**
|
|
660
|
+
* The event emitted by ``viewLatestMap`` method.
|
|
661
|
+
*/
|
|
662
|
+
this.$emit('view-latest-map', state)
|
|
663
|
+
},
|
|
664
|
+
/**
|
|
665
|
+
* @vuese
|
|
666
|
+
* Function to change the background colour of the map
|
|
667
|
+
* by providing the ``colour``.
|
|
668
|
+
* @arg colour
|
|
669
|
+
*/
|
|
670
|
+
backgroundChangeCallback: function (colour) {
|
|
671
|
+
this.currentBackground = colour
|
|
672
|
+
if (this.mapImp) {
|
|
673
|
+
this.mapImp.setBackgroundColour(this.currentBackground, 1)
|
|
674
|
+
}
|
|
675
|
+
},
|
|
676
|
+
/**
|
|
677
|
+
* @vuese
|
|
678
|
+
* Function to process a list of a FC flatmap's systems.
|
|
679
|
+
* @arg systems
|
|
680
|
+
*/
|
|
681
|
+
processSystems: function (systems) {
|
|
682
|
+
this.systems.length = 0
|
|
683
|
+
if (systems && systems.length > 0) {
|
|
684
|
+
const data = { label: 'All', key: 'All', children: [] }
|
|
685
|
+
systems.forEach((system) => {
|
|
686
|
+
const child = {
|
|
687
|
+
colour: system.colour,
|
|
688
|
+
enabled: system.enabled,
|
|
689
|
+
label: system.id,
|
|
690
|
+
key: system.id,
|
|
691
|
+
}
|
|
692
|
+
const children = processFTUs(system, child.key)
|
|
693
|
+
if (children.length > 0) child.children = children
|
|
694
|
+
data.children.push(child)
|
|
695
|
+
})
|
|
696
|
+
|
|
697
|
+
this.systems.push(data)
|
|
698
|
+
}
|
|
699
|
+
},
|
|
700
|
+
/**
|
|
701
|
+
* @vuese
|
|
702
|
+
* Function to add taxon identifiers into the taxon connectivity array,
|
|
703
|
+
* by retrieving their corresponding labels using the flatmap API.
|
|
704
|
+
* @arg flatmapAPI,
|
|
705
|
+
* @arg taxonIdentifiers
|
|
706
|
+
*/
|
|
707
|
+
processTaxon: function (flatmapAPI, taxonIdentifiers) {
|
|
708
|
+
this.taxonConnectivity.length = 0
|
|
709
|
+
taxonIdentifiers.forEach((taxon) => {
|
|
710
|
+
findTaxonomyLabel(flatmapAPI, taxon).then((value) => {
|
|
711
|
+
const item = { taxon, label: value }
|
|
712
|
+
this.taxonConnectivity.push(item)
|
|
713
|
+
})
|
|
714
|
+
})
|
|
715
|
+
},
|
|
716
|
+
/**
|
|
717
|
+
* @vuese
|
|
718
|
+
* Function to show or hide the display of the bottom-left drawer container.
|
|
719
|
+
*/
|
|
720
|
+
toggleDrawer: function () {
|
|
721
|
+
this.drawerOpen = !this.drawerOpen
|
|
722
|
+
},
|
|
723
|
+
/**
|
|
724
|
+
* @vuese
|
|
725
|
+
* Function to toggle colour/greyscale of organs.
|
|
726
|
+
* The parameter ``flag`` is a boolean, ``true`` (colour) and ``false`` (greyscale).
|
|
727
|
+
* @arg flag
|
|
728
|
+
*/
|
|
729
|
+
setColour: function (flag) {
|
|
730
|
+
this.colourRadio = flag
|
|
731
|
+
if (this.mapImp) {
|
|
732
|
+
this.mapImp.setColour({ colour: flag, outline: this.outlinesRadio })
|
|
733
|
+
}
|
|
734
|
+
},
|
|
735
|
+
/**
|
|
736
|
+
* @vuese
|
|
737
|
+
* Function to toggle outlines f organs.
|
|
738
|
+
* The parameter ``flag`` is a boolean, ``true`` to show outlines, ``false`` to hide outlines.
|
|
739
|
+
* @arg flag
|
|
740
|
+
*/
|
|
741
|
+
setOutlines: function (flag) {
|
|
742
|
+
this.outlineRadio = flag
|
|
743
|
+
if (this.mapImp) {
|
|
744
|
+
this.mapImp.setColour({ colour: this.colourRadio, outline: flag })
|
|
745
|
+
}
|
|
746
|
+
},
|
|
747
|
+
/**
|
|
748
|
+
* @vuese
|
|
749
|
+
* Function to toggle paths to default.
|
|
750
|
+
* Also called when the associated button is pressed.
|
|
751
|
+
*/
|
|
752
|
+
resetView: function () {
|
|
753
|
+
if (this.mapImp) {
|
|
754
|
+
this.mapImp.resetMap()
|
|
755
|
+
if (this.$refs.centrelinesSelection) {
|
|
756
|
+
this.$refs.centrelinesSelection.reset()
|
|
757
|
+
}
|
|
758
|
+
if (this.$refs.skcanSelection) {
|
|
759
|
+
this.$refs.skcanSelection.reset()
|
|
760
|
+
}
|
|
761
|
+
if (this.$refs.layersSelection) {
|
|
762
|
+
this.$refs.layersSelection.reset()
|
|
763
|
+
}
|
|
764
|
+
if (this.$refs.systemsSelection) {
|
|
765
|
+
this.$refs.pathwaysSelection.reset()
|
|
766
|
+
}
|
|
767
|
+
if (this.$refs.pathwaysSelection) {
|
|
768
|
+
this.$refs.pathwaysSelection.reset()
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
},
|
|
772
|
+
/**
|
|
773
|
+
* @vuese
|
|
774
|
+
* Function to zoom in.
|
|
775
|
+
* Also called when the associated button is pressed.
|
|
776
|
+
*/
|
|
777
|
+
zoomIn: function () {
|
|
778
|
+
if (this.mapImp) {
|
|
779
|
+
this.mapImp.zoomIn()
|
|
780
|
+
}
|
|
781
|
+
},
|
|
782
|
+
/**
|
|
783
|
+
* @vuese
|
|
784
|
+
* Function to zoom out.
|
|
785
|
+
* Also called when the associated button is pressed.
|
|
786
|
+
*/
|
|
787
|
+
zoomOut: function () {
|
|
788
|
+
if (this.mapImp) {
|
|
789
|
+
this.mapImp.zoomOut()
|
|
790
|
+
}
|
|
791
|
+
},
|
|
792
|
+
/**
|
|
793
|
+
* @vuese
|
|
794
|
+
* Function to show or hide centrelines and nodes.
|
|
795
|
+
* The parameter ``payload`` is an object with a boolean property, ``value``,
|
|
796
|
+
* ``payload.value = true/false``.
|
|
797
|
+
* @arg payload
|
|
798
|
+
*/
|
|
799
|
+
centreLinesSelected: function (payload) {
|
|
800
|
+
if (this.mapImp) {
|
|
801
|
+
this.mapImp.enableCentrelines(payload.value)
|
|
802
|
+
}
|
|
803
|
+
},
|
|
804
|
+
/**
|
|
805
|
+
* // Currently not in use
|
|
806
|
+
* Function to show or hide paths valid in SCKAN
|
|
807
|
+
* by providing ``{key, value}`` pair in ``payload``.
|
|
808
|
+
* @arg payload
|
|
809
|
+
*/
|
|
810
|
+
sckanSelected: function (payload) {
|
|
811
|
+
if (this.mapImp) {
|
|
812
|
+
this.mapImp.enableSckanPath(payload.key, payload.value)
|
|
813
|
+
}
|
|
814
|
+
},
|
|
815
|
+
/**
|
|
816
|
+
* // Currently not in use
|
|
817
|
+
* Function to show or hide all paths valid in SCKAN.
|
|
818
|
+
* @arg payload
|
|
819
|
+
*/
|
|
820
|
+
checkAllSCKAN: function (payload) {
|
|
821
|
+
if (this.mapImp) {
|
|
822
|
+
payload.keys.forEach((key) =>
|
|
823
|
+
this.mapImp.enableSckanPath(key, payload.value)
|
|
824
|
+
)
|
|
825
|
+
}
|
|
826
|
+
},
|
|
827
|
+
/**
|
|
828
|
+
* @vuese
|
|
829
|
+
* Function to highlight the connected paths
|
|
830
|
+
* by providing path model identifier, ``pathId``.
|
|
831
|
+
* @arg pathId
|
|
832
|
+
*/
|
|
833
|
+
highlightConnectedPaths: function (payload) {
|
|
834
|
+
if (this.mapImp) {
|
|
835
|
+
let paths = [...this.mapImp.pathModelNodes(payload)]
|
|
836
|
+
// The line below matches the paths to the annIdToFeatureId map to get the feature ids
|
|
837
|
+
|
|
838
|
+
let pathFeatures = paths.map((p) => this.mapImp.featureProperties(p))
|
|
839
|
+
let toHighlight = []
|
|
840
|
+
pathFeatures.forEach((p) => {
|
|
841
|
+
this.mapImp.nodePathModels(p.featureId).forEach((f) => {
|
|
842
|
+
toHighlight.push(f)
|
|
843
|
+
})
|
|
844
|
+
})
|
|
845
|
+
// display connected paths
|
|
846
|
+
this.mapImp.zoomToFeatures(toHighlight, { noZoomIn: true })
|
|
847
|
+
}
|
|
848
|
+
},
|
|
849
|
+
/**
|
|
850
|
+
* @vuese
|
|
851
|
+
* Function to enable/disable (show/hide) the system
|
|
852
|
+
* by providing ``kay, value`` ``payload`` object ``{systemId, true/false}``.
|
|
853
|
+
* @arg payload
|
|
854
|
+
*/
|
|
855
|
+
systemSelected: function (payload) {
|
|
856
|
+
if (this.mapImp) {
|
|
857
|
+
this.mapImp.enableSystem(payload.key, payload.value)
|
|
858
|
+
}
|
|
859
|
+
},
|
|
860
|
+
/**
|
|
861
|
+
* @vuese
|
|
862
|
+
* Function to enable/disable (show/hide) all systems
|
|
863
|
+
* by providing ``flag`` (true/false).
|
|
864
|
+
* @arg flag
|
|
865
|
+
*/
|
|
866
|
+
checkAllSystems: function (flag) {
|
|
867
|
+
if (this.mapImp) {
|
|
868
|
+
this.systems[0].children.forEach((key) =>
|
|
869
|
+
this.mapImp.enableSystem(key.label, flag)
|
|
870
|
+
)
|
|
871
|
+
}
|
|
872
|
+
},
|
|
873
|
+
/**
|
|
874
|
+
* @vuese
|
|
875
|
+
* Function to display features with annotation matching the provided term.
|
|
876
|
+
* @arg models
|
|
877
|
+
*/
|
|
878
|
+
ftuSelected: function (models) {
|
|
879
|
+
this.searchAndShowResult(models, true)
|
|
880
|
+
},
|
|
881
|
+
/**
|
|
882
|
+
* @vuese
|
|
883
|
+
* Function to show or hide the layer
|
|
884
|
+
* by providing ``{layerId, true/false}`` in ``payload``.
|
|
885
|
+
* @arg payload
|
|
886
|
+
*/
|
|
887
|
+
layersSelected: function (payload) {
|
|
888
|
+
if (this.mapImp) {
|
|
889
|
+
this.mapImp.enableLayer(payload.key, payload.value)
|
|
890
|
+
}
|
|
891
|
+
},
|
|
892
|
+
/**
|
|
893
|
+
* @vuese
|
|
894
|
+
* Function to show or hide all layers
|
|
895
|
+
* by providing ``payload`` with ``payload.keys`` array and ``payload.value`` flag.
|
|
896
|
+
* @arg payload
|
|
897
|
+
*/
|
|
898
|
+
checkAllLayers: function (payload) {
|
|
899
|
+
if (this.mapImp) {
|
|
900
|
+
payload.keys.forEach((key) =>
|
|
901
|
+
this.mapImp.enableLayer(key, payload.value)
|
|
902
|
+
)
|
|
903
|
+
}
|
|
904
|
+
},
|
|
905
|
+
/**
|
|
906
|
+
* @vuese
|
|
907
|
+
* Function to show or hide connectivity features observed in particular species
|
|
908
|
+
* by providing ``{taxonId, true/false}`` in ``payload.key, payload.value``.
|
|
909
|
+
* @arg payload
|
|
910
|
+
*/
|
|
911
|
+
taxonsSelected: function (payload) {
|
|
912
|
+
if (this.mapImp) {
|
|
913
|
+
this.mapImp.enableConnectivityByTaxonIds(payload.key, payload.value)
|
|
914
|
+
}
|
|
915
|
+
},
|
|
916
|
+
/**
|
|
917
|
+
* @vuese
|
|
918
|
+
* Function to show or hide connectivity features observed in particular species
|
|
919
|
+
* by providing ``payload`` with ``payload.keys`` array and ``payload.value`` flag.
|
|
920
|
+
* @arg payload
|
|
921
|
+
*/
|
|
922
|
+
checkAllTaxons: function (payload) {
|
|
923
|
+
if (this.mapImp) {
|
|
924
|
+
payload.keys.forEach((key) =>
|
|
925
|
+
this.mapImp.enableConnectivityByTaxonIds(key, payload.value)
|
|
926
|
+
)
|
|
927
|
+
}
|
|
928
|
+
},
|
|
929
|
+
/**
|
|
930
|
+
* @vuese
|
|
931
|
+
* Function to hide or show paths of a given type
|
|
932
|
+
* by providing ``{pathType, true/false}`` in ``payload.key, payload.value``.
|
|
933
|
+
* @arg payload
|
|
934
|
+
*/
|
|
935
|
+
pathwaysSelected: function (payload) {
|
|
936
|
+
if (this.mapImp) {
|
|
937
|
+
this.mapImp.enablePath(payload.key, payload.value)
|
|
938
|
+
}
|
|
939
|
+
},
|
|
940
|
+
/**
|
|
941
|
+
* @vuese
|
|
942
|
+
* Function to hide or show paths of a given type
|
|
943
|
+
* by providing ``payload`` with ``payload.keys`` array and ``payload.value`` flag.
|
|
944
|
+
* @arg payload
|
|
945
|
+
*/
|
|
946
|
+
checkAllPathways: function (payload) {
|
|
947
|
+
if (this.mapImp) {
|
|
948
|
+
payload.keys.forEach((key) =>
|
|
949
|
+
this.mapImp.enablePath(key, payload.value)
|
|
950
|
+
)
|
|
951
|
+
}
|
|
952
|
+
},
|
|
953
|
+
/**
|
|
954
|
+
* @vuese
|
|
955
|
+
* Function to generate callbacks as a result of panning/zooming the map.
|
|
956
|
+
* ``flag`` (boolean) - generate callbacks when ``true``, otherwise disable them.
|
|
957
|
+
* @arg flag
|
|
958
|
+
*/
|
|
959
|
+
enablePanZoomEvents: function (flag) {
|
|
960
|
+
this.mapImp.enablePanZoomEvents(flag)
|
|
961
|
+
},
|
|
962
|
+
/**
|
|
963
|
+
* @vuese
|
|
964
|
+
* A callback function, invoked when events occur with the map.
|
|
965
|
+
* The first parameter gives the type of event, the second provides details about the event.
|
|
966
|
+
* _(This is the ``callback`` function from ``MapManager.loadMap()``)_.
|
|
967
|
+
*/
|
|
968
|
+
eventCallback: function () {
|
|
969
|
+
return (eventType, data, ...args) => {
|
|
970
|
+
if (eventType !== 'pan-zoom') {
|
|
971
|
+
const label = data.label
|
|
972
|
+
const resource = [data.models]
|
|
973
|
+
const taxonomy = this.entry
|
|
974
|
+
const biologicalSex = this.biologicalSex
|
|
975
|
+
let taxons = undefined
|
|
976
|
+
if (data.taxons) {
|
|
977
|
+
// check if data.taxons is string or array
|
|
978
|
+
if (typeof data.taxons !== 'object') {
|
|
979
|
+
taxons = JSON.parse(data.taxons)
|
|
980
|
+
} else {
|
|
981
|
+
taxons = data.taxons
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
const payload = {
|
|
985
|
+
dataset: data.dataset,
|
|
986
|
+
biologicalSex: biologicalSex,
|
|
987
|
+
taxonomy: taxonomy,
|
|
988
|
+
resource: resource,
|
|
989
|
+
label: label,
|
|
990
|
+
feature: data,
|
|
991
|
+
userData: args,
|
|
992
|
+
eventType: eventType,
|
|
993
|
+
provenanceTaxonomy: taxons,
|
|
994
|
+
}
|
|
995
|
+
if (eventType === 'click') {
|
|
996
|
+
if (this.viewingMode === 'Network Discovery') {
|
|
997
|
+
this.highlightConnectedPaths([data.models])
|
|
998
|
+
} else {
|
|
999
|
+
this.currentActive = data.models ? data.models : ''
|
|
1000
|
+
}
|
|
1001
|
+
} else if (
|
|
1002
|
+
eventType === 'mouseenter' &&
|
|
1003
|
+
!(this.viewingMode === 'Network Discovery')
|
|
1004
|
+
) {
|
|
1005
|
+
this.currentHover = data.models ? data.models : ''
|
|
1006
|
+
}
|
|
1007
|
+
if (
|
|
1008
|
+
data &&
|
|
1009
|
+
data.type !== 'marker' &&
|
|
1010
|
+
eventType === 'click' &&
|
|
1011
|
+
!(this.viewingMode === 'Network Discovery')
|
|
1012
|
+
) {
|
|
1013
|
+
this.checkAndCreatePopups(payload)
|
|
1014
|
+
}
|
|
1015
|
+
/**
|
|
1016
|
+
* The event emitted from the mouse event callbacks that come from flatmap-viewer. The payload
|
|
1017
|
+
* argument provides an object with information on the feature where the mouse event takes place.
|
|
1018
|
+
* @arg payload
|
|
1019
|
+
*/
|
|
1020
|
+
this.$emit('resource-selected', payload)
|
|
1021
|
+
} else {
|
|
1022
|
+
/**
|
|
1023
|
+
* The event emitted in ``callback`` function from ``MapManager.loadMap()``
|
|
1024
|
+
* if ``eventType`` is ``pan-zoom``.
|
|
1025
|
+
* @arg data
|
|
1026
|
+
*/
|
|
1027
|
+
this.$emit('pan-zoom-callback', data)
|
|
1028
|
+
}
|
|
1029
|
+
}
|
|
1030
|
+
},
|
|
1031
|
+
/**
|
|
1032
|
+
* @vuese
|
|
1033
|
+
* Function triggered by viewing mode change.
|
|
1034
|
+
* (e.g., from 'Exploration' to 'Annotation')
|
|
1035
|
+
* All tooltips and popups currently showing on map will be closed
|
|
1036
|
+
* when this function is triggered.
|
|
1037
|
+
*/
|
|
1038
|
+
changeViewingMode: function () {
|
|
1039
|
+
this.closeTooltip()
|
|
1040
|
+
},
|
|
1041
|
+
/**
|
|
1042
|
+
* @vuese
|
|
1043
|
+
* Function to create/display tooltips from the provided ``data``.
|
|
1044
|
+
* _checkNeuronClicked shows a neuron path pop up if a path was recently clicked._
|
|
1045
|
+
* @arg data
|
|
1046
|
+
*/
|
|
1047
|
+
checkAndCreatePopups: async function (data) {
|
|
1048
|
+
// Call flatmap database to get the connection data
|
|
1049
|
+
if (this.viewingMode === 'Annotation') {
|
|
1050
|
+
if (data.feature && data.feature.featureId && data.feature.models) {
|
|
1051
|
+
this.annotationEntry = {
|
|
1052
|
+
...data.feature,
|
|
1053
|
+
resource: this.serverURL,
|
|
1054
|
+
resourceId: this.serverUUID,
|
|
1055
|
+
}
|
|
1056
|
+
this.displayTooltip(data.feature.models)
|
|
1057
|
+
} else {
|
|
1058
|
+
this.annotation = {}
|
|
1059
|
+
}
|
|
1060
|
+
} else {
|
|
1061
|
+
let results =
|
|
1062
|
+
await this.flatmapQueries.retrieveFlatmapKnowledgeForEvent(data)
|
|
1063
|
+
// The line below only creates the tooltip if some data was found on the path
|
|
1064
|
+
// result 0 is the connection, result 1 is the pubmed results from flatmap
|
|
1065
|
+
if (
|
|
1066
|
+
results[0] ||
|
|
1067
|
+
results[1] ||
|
|
1068
|
+
(data.feature.hyperlinks && data.feature.hyperlinks.length > 0)
|
|
1069
|
+
) {
|
|
1070
|
+
this.resourceForTooltip = data.resource[0]
|
|
1071
|
+
data.resourceForTooltip = this.resourceForTooltip
|
|
1072
|
+
this.createTooltipFromNeuronCuration(data)
|
|
1073
|
+
}
|
|
1074
|
+
}
|
|
1075
|
+
},
|
|
1076
|
+
/**
|
|
1077
|
+
* A hack to remove flatmap tooltips while popup is open
|
|
1078
|
+
*/
|
|
1079
|
+
popUpCssHacks: function () {
|
|
1080
|
+
// Below is a hack to remove flatmap tooltips while popup is open
|
|
1081
|
+
const ftooltip = document.querySelector('.flatmap-tooltip-popup')
|
|
1082
|
+
const popupCloseButton = document.querySelector('.maplibregl-popup-close-button')
|
|
1083
|
+
if (ftooltip) ftooltip.style.display = 'none'
|
|
1084
|
+
popupCloseButton.style.display = 'block'
|
|
1085
|
+
this.$refs.tooltip.$el.style.display = 'flex'
|
|
1086
|
+
popupCloseButton.onclick = () => {
|
|
1087
|
+
if (ftooltip) ftooltip.style.display = 'block'
|
|
1088
|
+
}
|
|
1089
|
+
},
|
|
1090
|
+
/**
|
|
1091
|
+
* @vuese
|
|
1092
|
+
* Function to close tooltip.
|
|
1093
|
+
*/
|
|
1094
|
+
closeTooltip: function () {
|
|
1095
|
+
this.$refs.tooltip.$el.style.display = 'none'
|
|
1096
|
+
document.querySelectorAll('.maplibregl-popup').forEach((item) => {
|
|
1097
|
+
item.style.display = 'none'
|
|
1098
|
+
})
|
|
1099
|
+
},
|
|
1100
|
+
/**
|
|
1101
|
+
* @vuese
|
|
1102
|
+
* Function to create tooltip from Neuron Curation ``data``.
|
|
1103
|
+
* @arg data
|
|
1104
|
+
*/
|
|
1105
|
+
createTooltipFromNeuronCuration: async function (data) {
|
|
1106
|
+
this.tooltipEntry = await this.flatmapQueries.createTooltipData(data)
|
|
1107
|
+
this.displayTooltip(data.resource[0])
|
|
1108
|
+
},
|
|
1109
|
+
/**
|
|
1110
|
+
* @vuese
|
|
1111
|
+
* Function to show popup on map.
|
|
1112
|
+
* @arg featureId,
|
|
1113
|
+
* @arg node,
|
|
1114
|
+
* @arg options
|
|
1115
|
+
*/
|
|
1116
|
+
showPopup: function (featureId, node, options) {
|
|
1117
|
+
// Keeping this as an API
|
|
1118
|
+
let myOptions = options
|
|
1119
|
+
if (this.mapImp) {
|
|
1120
|
+
if (myOptions) {
|
|
1121
|
+
if (!myOptions.className) myOptions.className = 'custom-popup'
|
|
1122
|
+
} else {
|
|
1123
|
+
myOptions = { className: 'custom-popup', positionAtLastClick: true }
|
|
1124
|
+
}
|
|
1125
|
+
this.mapImp.showPopup(featureId, node, myOptions)
|
|
1126
|
+
}
|
|
1127
|
+
},
|
|
1128
|
+
/**
|
|
1129
|
+
* @vuese
|
|
1130
|
+
* Function to show marker popup.
|
|
1131
|
+
* @arg featureId,
|
|
1132
|
+
* @arg node,
|
|
1133
|
+
* @arg options
|
|
1134
|
+
*/
|
|
1135
|
+
showMarkerPopup: function (featureId, node, options) {
|
|
1136
|
+
if (this.mapImp) {
|
|
1137
|
+
this.mapImp.showMarkerPopup(featureId, node, options)
|
|
1138
|
+
}
|
|
1139
|
+
},
|
|
1140
|
+
/**
|
|
1141
|
+
* @vuese
|
|
1142
|
+
* Function to close minimap.
|
|
1143
|
+
*/
|
|
1144
|
+
closeMinimap: function () {
|
|
1145
|
+
let minimapEl = this.$refs.flatmapContainer.querySelector(
|
|
1146
|
+
'.maplibregl-ctrl-minimap'
|
|
1147
|
+
) // find minimap
|
|
1148
|
+
if (this.minimapSmall) {
|
|
1149
|
+
//switch the classes on the minimap
|
|
1150
|
+
minimapEl.classList.add('enlarge')
|
|
1151
|
+
minimapEl.classList.remove('shrink')
|
|
1152
|
+
} else {
|
|
1153
|
+
minimapEl.classList.add('shrink')
|
|
1154
|
+
minimapEl.classList.remove('enlarge')
|
|
1155
|
+
}
|
|
1156
|
+
this.minimapSmall = !this.minimapSmall
|
|
1157
|
+
},
|
|
1158
|
+
/**
|
|
1159
|
+
* Function to add resize button to minimap.
|
|
1160
|
+
*/
|
|
1161
|
+
addResizeButtonToMinimap: function () {
|
|
1162
|
+
let minimapEl = this.$refs.flatmapContainer.querySelector(
|
|
1163
|
+
'.maplibregl-ctrl-minimap'
|
|
1164
|
+
)
|
|
1165
|
+
if (minimapEl) {
|
|
1166
|
+
if (this.$refs.minimapResize &&
|
|
1167
|
+
this.$refs.minimapResize.$el.parentNode) {
|
|
1168
|
+
this.$refs.minimapResize.$el.parentNode.removeChild(
|
|
1169
|
+
this.$refs.minimapResize.$el)
|
|
1170
|
+
}
|
|
1171
|
+
minimapEl.appendChild(this.$refs.minimapResize.$el)
|
|
1172
|
+
this.minimapResizeShow = true
|
|
1173
|
+
}
|
|
1174
|
+
},
|
|
1175
|
+
/**
|
|
1176
|
+
* @vuese
|
|
1177
|
+
* Function to set help mode
|
|
1178
|
+
* by providing flag ``helpMode`` (true/false).
|
|
1179
|
+
* @arg helpMode
|
|
1180
|
+
*/
|
|
1181
|
+
setHelpMode: function (helpMode) {
|
|
1182
|
+
if (helpMode) {
|
|
1183
|
+
this.inHelp = true
|
|
1184
|
+
this.hoverVisibilities.forEach((item) => {
|
|
1185
|
+
item.value = true
|
|
1186
|
+
})
|
|
1187
|
+
this.openFlatmapHelpPopup()
|
|
1188
|
+
} else {
|
|
1189
|
+
this.inHelp = false
|
|
1190
|
+
this.hoverVisibilities.forEach((item) => {
|
|
1191
|
+
item.value = false
|
|
1192
|
+
})
|
|
1193
|
+
this.closeFlatmapHelpPopup()
|
|
1194
|
+
}
|
|
1195
|
+
},
|
|
1196
|
+
/**
|
|
1197
|
+
* @vuese
|
|
1198
|
+
* Function to show tooltip
|
|
1199
|
+
* by providing ``tooltipNumber``.
|
|
1200
|
+
* @arg tooltipNumber
|
|
1201
|
+
*/
|
|
1202
|
+
showToolitip: function (tooltipNumber) {
|
|
1203
|
+
if (!this.inHelp) {
|
|
1204
|
+
clearTimeout(this.tooltipWait[tooltipNumber])
|
|
1205
|
+
this.tooltipWait[tooltipNumber] = setTimeout(() => {
|
|
1206
|
+
this.hoverVisibilities[tooltipNumber].value = true
|
|
1207
|
+
}, 500)
|
|
1208
|
+
}
|
|
1209
|
+
},
|
|
1210
|
+
/**
|
|
1211
|
+
* @vuese
|
|
1212
|
+
* Function to hide tooltip
|
|
1213
|
+
* by providing ``tooltipNumber``.
|
|
1214
|
+
* @arg tooltipNumber
|
|
1215
|
+
*/
|
|
1216
|
+
hideToolitip: function (tooltipNumber) {
|
|
1217
|
+
if (!this.inHelp) {
|
|
1218
|
+
clearTimeout(this.tooltipWait[tooltipNumber])
|
|
1219
|
+
this.tooltipWait[tooltipNumber] = setTimeout(() => {
|
|
1220
|
+
this.hoverVisibilities[tooltipNumber].value = false
|
|
1221
|
+
}, 500)
|
|
1222
|
+
}
|
|
1223
|
+
},
|
|
1224
|
+
/**
|
|
1225
|
+
* @vuese
|
|
1226
|
+
* Function to display tooltip
|
|
1227
|
+
* by providing featureId (``feature``).
|
|
1228
|
+
* @arg feature
|
|
1229
|
+
*/
|
|
1230
|
+
displayTooltip: function (feature) {
|
|
1231
|
+
this.tooltipDisplay = true
|
|
1232
|
+
if (!this.disableUI) {
|
|
1233
|
+
this.$nextTick(() => {
|
|
1234
|
+
this.displayPopup(feature)
|
|
1235
|
+
});
|
|
1236
|
+
}
|
|
1237
|
+
},
|
|
1238
|
+
/**
|
|
1239
|
+
* @vuese
|
|
1240
|
+
* Function to display popup
|
|
1241
|
+
* by providing featureId (``feature``).
|
|
1242
|
+
* @arg feature
|
|
1243
|
+
*/
|
|
1244
|
+
displayPopup: function (feature) {
|
|
1245
|
+
this.mapImp.showPopup(
|
|
1246
|
+
this.mapImp.modelFeatureIds(feature)[0],
|
|
1247
|
+
this.$refs.tooltip.$el,
|
|
1248
|
+
{ className: 'flatmapvuer-popover', positionAtLastClick: true }
|
|
1249
|
+
)
|
|
1250
|
+
this.popUpCssHacks()
|
|
1251
|
+
},
|
|
1252
|
+
/**
|
|
1253
|
+
* @vuese
|
|
1254
|
+
* Function to open Flatmap Help Popup.
|
|
1255
|
+
*/
|
|
1256
|
+
openFlatmapHelpPopup: function () {
|
|
1257
|
+
if (this.mapImp) {
|
|
1258
|
+
let heartId = this.mapImp.modelFeatureIds('UBERON:0000948')
|
|
1259
|
+
if (heartId && heartId.length > 0) {
|
|
1260
|
+
const elm = 'Click for more information'
|
|
1261
|
+
this.mapImp.showPopup(heartId[0], elm, {
|
|
1262
|
+
anchor: 'top',
|
|
1263
|
+
className: 'flatmap-popup-popper',
|
|
1264
|
+
})
|
|
1265
|
+
}
|
|
1266
|
+
}
|
|
1267
|
+
},
|
|
1268
|
+
/**
|
|
1269
|
+
* @vuese
|
|
1270
|
+
* Function to close Flatmap Help Popup.
|
|
1271
|
+
*/
|
|
1272
|
+
closeFlatmapHelpPopup: function () {
|
|
1273
|
+
this.$el
|
|
1274
|
+
.querySelectorAll('.maplibregl-popup-close-button')
|
|
1275
|
+
.forEach((item) => {
|
|
1276
|
+
item.click()
|
|
1277
|
+
})
|
|
1278
|
+
},
|
|
1279
|
+
/**
|
|
1280
|
+
* @vuese
|
|
1281
|
+
* Function to get annotation labels.
|
|
1282
|
+
*/
|
|
1283
|
+
getLabels: function () {
|
|
1284
|
+
let labels = []
|
|
1285
|
+
if (this.mapImp) {
|
|
1286
|
+
let annotations = this.mapImp.annotations
|
|
1287
|
+
for (let value of annotations.values()) {
|
|
1288
|
+
if (value.label) labels.push(value.label)
|
|
1289
|
+
}
|
|
1290
|
+
return Array.from(new Set(labels))
|
|
1291
|
+
}
|
|
1292
|
+
},
|
|
1293
|
+
/**
|
|
1294
|
+
* @vuese
|
|
1295
|
+
* Function to get the state (object) of the map.
|
|
1296
|
+
*/
|
|
1297
|
+
getState: function () {
|
|
1298
|
+
if (this.mapImp) {
|
|
1299
|
+
let state = {
|
|
1300
|
+
entry: this.entry,
|
|
1301
|
+
viewport: this.mapImp.getState(),
|
|
1302
|
+
}
|
|
1303
|
+
const identifier = this.mapImp.getIdentifier()
|
|
1304
|
+
if (this.biologicalSex) state['biologicalSex'] = this.biologicalSex
|
|
1305
|
+
else if (identifier && identifier.biologicalSex)
|
|
1306
|
+
state['biologicalSex'] = identifier.biologicalSex
|
|
1307
|
+
if (identifier && identifier.uuid) state['uuid'] = identifier.uuid
|
|
1308
|
+
return state
|
|
1309
|
+
}
|
|
1310
|
+
return undefined
|
|
1311
|
+
},
|
|
1312
|
+
/**
|
|
1313
|
+
* @vuese
|
|
1314
|
+
* Function to set state (object) for the map.
|
|
1315
|
+
* @arg state
|
|
1316
|
+
*/
|
|
1317
|
+
setState: function (state) {
|
|
1318
|
+
if (state) {
|
|
1319
|
+
if (
|
|
1320
|
+
this.mapImp &&
|
|
1321
|
+
state.entry &&
|
|
1322
|
+
this.entry == state.entry &&
|
|
1323
|
+
(!state.biologicalSex || state.biologicalSex === this.biologicalSex)
|
|
1324
|
+
) {
|
|
1325
|
+
if (state.viewport) {
|
|
1326
|
+
this.mapImp.setState(state.viewport)
|
|
1327
|
+
}
|
|
1328
|
+
} else {
|
|
1329
|
+
this.createFlatmap(state)
|
|
1330
|
+
}
|
|
1331
|
+
this.setStateRequired = false
|
|
1332
|
+
}
|
|
1333
|
+
},
|
|
1334
|
+
/**
|
|
1335
|
+
* @vuese
|
|
1336
|
+
* Function to restore map's state
|
|
1337
|
+
* from the ``state`` provided.
|
|
1338
|
+
* @arg state
|
|
1339
|
+
*/
|
|
1340
|
+
restoreMapState: function (state) {
|
|
1341
|
+
if (state) {
|
|
1342
|
+
if (state.viewport) this.mapImp.setState(state.viewport)
|
|
1343
|
+
if (state.searchTerm) this.searchAndShowResult(state.searchTerm, true)
|
|
1344
|
+
}
|
|
1345
|
+
},
|
|
1346
|
+
/**
|
|
1347
|
+
* @vuese
|
|
1348
|
+
* Function to show flight path option
|
|
1349
|
+
* (3D option)
|
|
1350
|
+
* based on the map version (currently 1.6 and above).
|
|
1351
|
+
* @arg mapVersion
|
|
1352
|
+
*/
|
|
1353
|
+
setFlightPathInfo: function (mapVersion) {
|
|
1354
|
+
const mapVersionForFlightPath = 1.6
|
|
1355
|
+
if (mapVersion === mapVersionForFlightPath || mapVersion > mapVersionForFlightPath) {
|
|
1356
|
+
// Show flight path option UI
|
|
1357
|
+
this.displayFlightPathOption = true
|
|
1358
|
+
// Show 2D as default on FC type
|
|
1359
|
+
this.setFlightPath3D(false)
|
|
1360
|
+
}
|
|
1361
|
+
},
|
|
1362
|
+
/**
|
|
1363
|
+
* @vuese
|
|
1364
|
+
* Function to create Flatmap
|
|
1365
|
+
* by providing the ``state``.
|
|
1366
|
+
* @arg state
|
|
1367
|
+
*/
|
|
1368
|
+
createFlatmap: function (state) {
|
|
1369
|
+
if (!this.mapImp && !this.loading) {
|
|
1370
|
+
this.loading = true
|
|
1371
|
+
let minimap = false
|
|
1372
|
+
if (this.displayMinimap) {
|
|
1373
|
+
minimap = { position: 'top-right' }
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1376
|
+
//As for flatmap-viewer@2.2.7, see below for the documentation
|
|
1377
|
+
//for the identifier:
|
|
1378
|
+
|
|
1379
|
+
//@arg identifier {string|Object}
|
|
1380
|
+
// A string or object identifying the map to load. If a string its
|
|
1381
|
+
// value can be either the map's ``uuid``, assigned at generation time,
|
|
1382
|
+
// or taxon and biological sex identifiers of the species that the map
|
|
1383
|
+
// represents. The latest version of a map is loaded unless it has been
|
|
1384
|
+
// identified using a ``uuid`` (see below).
|
|
1385
|
+
// @arg identifier.taxon {string} The taxon identifier of the species
|
|
1386
|
+
// represented by the map. This is specified as metadata in the map's source file.
|
|
1387
|
+
// @arg identifier.biologicalSex {string} The biological sex of the species
|
|
1388
|
+
// represented by the map. This is specified as metadatain the map's source file.
|
|
1389
|
+
// @arg identifier.uuid {string} The unique uuid the flatmap. If given then this exact map will
|
|
1390
|
+
// be loaded, overriding ``taxon`` and ``biologicalSex``.
|
|
1391
|
+
|
|
1392
|
+
let identifier = { taxon: this.entry }
|
|
1393
|
+
if (this.uuid) {
|
|
1394
|
+
identifier.uuid = this.uuid
|
|
1395
|
+
}
|
|
1396
|
+
//This now handle the uses of uuid when resuming states
|
|
1397
|
+
if (state) {
|
|
1398
|
+
if (state.uuid) {
|
|
1399
|
+
identifier = { uuid: state.uuid }
|
|
1400
|
+
} else if (state.entry) {
|
|
1401
|
+
identifier.taxon = state.entry
|
|
1402
|
+
if (state.biologicalSex) {
|
|
1403
|
+
identifier['biologicalSex'] = state.biologicalSex
|
|
1404
|
+
} else if (identifier.taxon === 'NCBITaxon:9606') {
|
|
1405
|
+
//For backward compatibility
|
|
1406
|
+
identifier['biologicalSex'] = 'PATO:0000384'
|
|
1407
|
+
}
|
|
1408
|
+
}
|
|
1409
|
+
} else {
|
|
1410
|
+
// Set the bioloicalSex now if map is not resumed from
|
|
1411
|
+
// a saved state
|
|
1412
|
+
if (this.biologicalSex) {
|
|
1413
|
+
identifier['biologicalSex'] = this.biologicalSex
|
|
1414
|
+
}
|
|
1415
|
+
}
|
|
1416
|
+
|
|
1417
|
+
let promise1 = this.mapManager.loadMap(
|
|
1418
|
+
identifier,
|
|
1419
|
+
this.$refs.display,
|
|
1420
|
+
this.eventCallback(),
|
|
1421
|
+
{
|
|
1422
|
+
//fullscreenControl: false,
|
|
1423
|
+
//annotatable: false,
|
|
1424
|
+
//debug: true,
|
|
1425
|
+
minZoom: this.minZoom,
|
|
1426
|
+
tooltips: this.tooltips,
|
|
1427
|
+
minimap: minimap,
|
|
1428
|
+
}
|
|
1429
|
+
)
|
|
1430
|
+
promise1.then((returnedObject) => {
|
|
1431
|
+
this.mapImp = returnedObject
|
|
1432
|
+
this.serverUUID = this.mapImp.getIdentifier().uuid
|
|
1433
|
+
this.serverURL = this.mapImp.makeServerUrl('').slice(0, -1)
|
|
1434
|
+
let mapVersion = this.mapImp.details.version
|
|
1435
|
+
this.setFlightPathInfo(mapVersion)
|
|
1436
|
+
this.onFlatmapReady()
|
|
1437
|
+
if (this._stateToBeSet) this.restoreMapState(this._stateToBeSet)
|
|
1438
|
+
else {
|
|
1439
|
+
this.restoreMapState(state)
|
|
1440
|
+
}
|
|
1441
|
+
})
|
|
1442
|
+
} else if (state) {
|
|
1443
|
+
this._stateToBeSet = {
|
|
1444
|
+
viewport: state.viewport,
|
|
1445
|
+
searchTerm: state.searchTerm,
|
|
1446
|
+
}
|
|
1447
|
+
if (this.mapImp && !this.loading)
|
|
1448
|
+
this.restoreMapState(this._stateToBeSet)
|
|
1449
|
+
}
|
|
1450
|
+
},
|
|
1451
|
+
/**
|
|
1452
|
+
* @vuese
|
|
1453
|
+
* Function to compute path controls maximum height.
|
|
1454
|
+
*/
|
|
1455
|
+
computePathControlsMaximumHeight() {
|
|
1456
|
+
const elem = this.$refs.display
|
|
1457
|
+
if (elem) {
|
|
1458
|
+
const computed = getComputedStyle(elem)
|
|
1459
|
+
const padding =
|
|
1460
|
+
parseInt(computed.paddingTop) + parseInt(computed.paddingBottom)
|
|
1461
|
+
const height = elem.clientHeight - padding
|
|
1462
|
+
this.pathwaysMaxHeight = height - 170
|
|
1463
|
+
}
|
|
1464
|
+
},
|
|
1465
|
+
/**
|
|
1466
|
+
* @vuese
|
|
1467
|
+
* Function to resize the map.
|
|
1468
|
+
*/
|
|
1469
|
+
mapResize: function () {
|
|
1470
|
+
try {
|
|
1471
|
+
this.computePathControlsMaximumHeight()
|
|
1472
|
+
if (this.mapImp) {
|
|
1473
|
+
this.mapImp.resize()
|
|
1474
|
+
this.showMinimap(this.displayMinimap)
|
|
1475
|
+
if (this.mapImp._minimap) {
|
|
1476
|
+
this.mapImp._minimap._miniMap.resize()
|
|
1477
|
+
}
|
|
1478
|
+
}
|
|
1479
|
+
} catch {
|
|
1480
|
+
console.error('Map resize error')
|
|
1481
|
+
}
|
|
1482
|
+
},
|
|
1483
|
+
/**
|
|
1484
|
+
* @vuese
|
|
1485
|
+
* This function is used for functions that need to run immediately after the flatmap is loaded.
|
|
1486
|
+
*/
|
|
1487
|
+
onFlatmapReady: function () {
|
|
1488
|
+
// onFlatmapReady is used for functions that need to run immediately after the flatmap is loaded
|
|
1489
|
+
this.sensor = new ResizeSensor(this.$refs.display, this.mapResize)
|
|
1490
|
+
if (this.mapImp.options && this.mapImp.options.style === 'functional') {
|
|
1491
|
+
this.isFC = true
|
|
1492
|
+
}
|
|
1493
|
+
this.mapImp.setBackgroundOpacity(1)
|
|
1494
|
+
this.backgroundChangeCallback(this.currentBackground)
|
|
1495
|
+
this.pathways = this.mapImp.pathTypes()
|
|
1496
|
+
this.mapImp.enableCentrelines(false)
|
|
1497
|
+
//Disable layers for now
|
|
1498
|
+
//this.layers = this.mapImp.getLayers();
|
|
1499
|
+
this.processSystems(this.mapImp.getSystems())
|
|
1500
|
+
this.processTaxon(this.flatmapAPI, this.mapImp.taxonIdentifiers)
|
|
1501
|
+
this.addResizeButtonToMinimap()
|
|
1502
|
+
this.loading = false
|
|
1503
|
+
this.computePathControlsMaximumHeight()
|
|
1504
|
+
this.drawerOpen = true
|
|
1505
|
+
this.mapResize()
|
|
1506
|
+
/**
|
|
1507
|
+
* This is ``onFlatmapReady`` event.
|
|
1508
|
+
* @arg ``this`` (Component Vue Instance)
|
|
1509
|
+
*/
|
|
1510
|
+
this.$emit('ready', this)
|
|
1511
|
+
},
|
|
1512
|
+
/**
|
|
1513
|
+
* @vuese
|
|
1514
|
+
* Function to show or hide the minimap
|
|
1515
|
+
* by providing ``flag`` (boolean) value.
|
|
1516
|
+
* @arg flag
|
|
1517
|
+
*/
|
|
1518
|
+
showMinimap: function (flag) {
|
|
1519
|
+
if (this.mapImp) this.mapImp.showMinimap(flag)
|
|
1520
|
+
},
|
|
1521
|
+
/**
|
|
1522
|
+
* @vuese
|
|
1523
|
+
* Function to show or hide the pathways drawer
|
|
1524
|
+
* by providing ``flag`` (boolean) value.
|
|
1525
|
+
* @arg flag
|
|
1526
|
+
*/
|
|
1527
|
+
showPathwaysDrawer: function (flag) {
|
|
1528
|
+
this.drawerOpen = flag
|
|
1529
|
+
},
|
|
1530
|
+
/**
|
|
1531
|
+
* @vuese
|
|
1532
|
+
* Function to display features with annotation matching the provided term,
|
|
1533
|
+
* with the option to display the label using displayLabel flag.
|
|
1534
|
+
* @arg term,
|
|
1535
|
+
* @arg displayLabel
|
|
1536
|
+
*/
|
|
1537
|
+
searchAndShowResult: function (term, displayLabel) {
|
|
1538
|
+
if (this.mapImp) {
|
|
1539
|
+
if (term === undefined || term === '') {
|
|
1540
|
+
this.mapImp.clearSearchResults()
|
|
1541
|
+
return true
|
|
1542
|
+
} else {
|
|
1543
|
+
const searchResults = this.mapImp.search(term)
|
|
1544
|
+
if (
|
|
1545
|
+
searchResults &&
|
|
1546
|
+
searchResults.results &&
|
|
1547
|
+
searchResults.results.length > 0
|
|
1548
|
+
) {
|
|
1549
|
+
this.mapImp.showSearchResults(searchResults)
|
|
1550
|
+
if (
|
|
1551
|
+
displayLabel &&
|
|
1552
|
+
searchResults.results[0].featureId &&
|
|
1553
|
+
searchResults.results[0].text
|
|
1554
|
+
) {
|
|
1555
|
+
const annotation = this.mapImp.annotation(
|
|
1556
|
+
searchResults.results[0].featureId
|
|
1557
|
+
)
|
|
1558
|
+
this.mapImp.showPopup(
|
|
1559
|
+
searchResults.results[0].featureId,
|
|
1560
|
+
annotation.label,
|
|
1561
|
+
{
|
|
1562
|
+
className: 'custom-popup',
|
|
1563
|
+
positionAtLastClick: false,
|
|
1564
|
+
preserveSelection: true,
|
|
1565
|
+
}
|
|
1566
|
+
)
|
|
1567
|
+
}
|
|
1568
|
+
return true
|
|
1569
|
+
} else this.mapImp.clearSearchResults()
|
|
1570
|
+
}
|
|
1571
|
+
}
|
|
1572
|
+
return false
|
|
1573
|
+
},
|
|
1574
|
+
/**
|
|
1575
|
+
* @vuese
|
|
1576
|
+
* Function to show search suggestions
|
|
1577
|
+
* from the ``term`` provided.
|
|
1578
|
+
* @arg term
|
|
1579
|
+
*/
|
|
1580
|
+
searchSuggestions: function (term) {
|
|
1581
|
+
if (this.mapImp) return this.mapImp.search(term)
|
|
1582
|
+
return []
|
|
1583
|
+
},
|
|
1584
|
+
},
|
|
1585
|
+
props: {
|
|
1586
|
+
/**
|
|
1587
|
+
* The taxon identifier of the species represented by the map.
|
|
1588
|
+
*/
|
|
1589
|
+
entry: {
|
|
1590
|
+
type: String,
|
|
1591
|
+
required: true,
|
|
1592
|
+
},
|
|
1593
|
+
/**
|
|
1594
|
+
* The unique ``uuid`` of the flatmap.
|
|
1595
|
+
* If given then this exact map will be loaded,
|
|
1596
|
+
* overriding ``taxon`` and ``biologicalSex``.
|
|
1597
|
+
*/
|
|
1598
|
+
uuid: String,
|
|
1599
|
+
/**
|
|
1600
|
+
* The biological sex of the species represented by the map.
|
|
1601
|
+
* This is specified as metadata in the map's source file.
|
|
1602
|
+
*/
|
|
1603
|
+
biologicalSex: {
|
|
1604
|
+
type: String,
|
|
1605
|
+
default: '',
|
|
1606
|
+
},
|
|
1607
|
+
/**
|
|
1608
|
+
* The minimum zoom level of the map.
|
|
1609
|
+
*/
|
|
1610
|
+
minZoom: {
|
|
1611
|
+
type: Number,
|
|
1612
|
+
default: 4,
|
|
1613
|
+
},
|
|
1614
|
+
/**
|
|
1615
|
+
* The option to add another feature label _(`FeatureSmallSymbolLayer`)_
|
|
1616
|
+
* when this `tooltips` is set to `false`.
|
|
1617
|
+
*/
|
|
1618
|
+
tooltips: {
|
|
1619
|
+
type: Boolean,
|
|
1620
|
+
default: true,
|
|
1621
|
+
},
|
|
1622
|
+
/**
|
|
1623
|
+
* The option to show tooltips for help mode.
|
|
1624
|
+
*/
|
|
1625
|
+
helpMode: {
|
|
1626
|
+
type: Boolean,
|
|
1627
|
+
default: false,
|
|
1628
|
+
},
|
|
1629
|
+
/**
|
|
1630
|
+
* The option to create map on component mounted.
|
|
1631
|
+
*/
|
|
1632
|
+
renderAtMounted: {
|
|
1633
|
+
type: Boolean,
|
|
1634
|
+
default: true,
|
|
1635
|
+
},
|
|
1636
|
+
/**
|
|
1637
|
+
* The option to display minimap at the top-right corner of the map.
|
|
1638
|
+
*/
|
|
1639
|
+
displayMinimap: {
|
|
1640
|
+
type: Boolean,
|
|
1641
|
+
default: false,
|
|
1642
|
+
},
|
|
1643
|
+
/**
|
|
1644
|
+
* The option to show warning. Example for legacy or beta maps.
|
|
1645
|
+
*/
|
|
1646
|
+
displayWarning: {
|
|
1647
|
+
type: Boolean,
|
|
1648
|
+
default: false,
|
|
1649
|
+
},
|
|
1650
|
+
/**
|
|
1651
|
+
* Flag to determine rather open map UI should be
|
|
1652
|
+
* presented or not.
|
|
1653
|
+
*/
|
|
1654
|
+
enableOpenMapUI: {
|
|
1655
|
+
type: Boolean,
|
|
1656
|
+
default: false,
|
|
1657
|
+
},
|
|
1658
|
+
/**
|
|
1659
|
+
* The data to show different map options.
|
|
1660
|
+
* Available at the bottom-left corner ("Open new map" tooltip).
|
|
1661
|
+
*/
|
|
1662
|
+
openMapOptions: {
|
|
1663
|
+
type: Array,
|
|
1664
|
+
/**
|
|
1665
|
+
* ```[
|
|
1666
|
+
{
|
|
1667
|
+
display: 'Open AC Map',
|
|
1668
|
+
key: 'AC',
|
|
1669
|
+
},
|
|
1670
|
+
{
|
|
1671
|
+
display: 'Open FC Map',
|
|
1672
|
+
key: 'FC',
|
|
1673
|
+
},
|
|
1674
|
+
{
|
|
1675
|
+
display: 'Open 3D Human Map',
|
|
1676
|
+
key: '3D',
|
|
1677
|
+
},
|
|
1678
|
+
]```
|
|
1679
|
+
*/
|
|
1680
|
+
default: function () {
|
|
1681
|
+
return [
|
|
1682
|
+
{
|
|
1683
|
+
display: 'Open AC Map',
|
|
1684
|
+
key: 'AC',
|
|
1685
|
+
},
|
|
1686
|
+
{
|
|
1687
|
+
display: 'Open FC Map',
|
|
1688
|
+
key: 'FC',
|
|
1689
|
+
},
|
|
1690
|
+
{
|
|
1691
|
+
display: 'Open 3D Human Map',
|
|
1692
|
+
key: '3D',
|
|
1693
|
+
},
|
|
1694
|
+
]
|
|
1695
|
+
},
|
|
1696
|
+
},
|
|
1697
|
+
/**
|
|
1698
|
+
* The option to show star in legend area.
|
|
1699
|
+
*/
|
|
1700
|
+
showStarInLegend: {
|
|
1701
|
+
type: Boolean,
|
|
1702
|
+
default: false,
|
|
1703
|
+
},
|
|
1704
|
+
/**
|
|
1705
|
+
* Flag to determine whether this is legacy map or not.
|
|
1706
|
+
* ``displayWarning`` should be shown for legacy map.
|
|
1707
|
+
*/
|
|
1708
|
+
isLegacy: {
|
|
1709
|
+
type: Boolean,
|
|
1710
|
+
default: false,
|
|
1711
|
+
},
|
|
1712
|
+
/**
|
|
1713
|
+
* The option to show the latest changes.
|
|
1714
|
+
*/
|
|
1715
|
+
displayLatestChanges: {
|
|
1716
|
+
type: Boolean,
|
|
1717
|
+
default: false,
|
|
1718
|
+
},
|
|
1719
|
+
/**
|
|
1720
|
+
* State containing state of the flatmap.
|
|
1721
|
+
*/
|
|
1722
|
+
state: {
|
|
1723
|
+
type: Object,
|
|
1724
|
+
default: undefined,
|
|
1725
|
+
},
|
|
1726
|
+
/**
|
|
1727
|
+
* Specify the endpoint of the flatmap server.
|
|
1728
|
+
*/
|
|
1729
|
+
flatmapAPI: {
|
|
1730
|
+
type: String,
|
|
1731
|
+
default: 'https://mapcore-demo.org/current/flatmap/v3/',
|
|
1732
|
+
},
|
|
1733
|
+
/**
|
|
1734
|
+
* Specify the endpoint of the SPARC API.
|
|
1735
|
+
*/
|
|
1736
|
+
sparcAPI: {
|
|
1737
|
+
type: String,
|
|
1738
|
+
default: 'https://api.sparc.science/',
|
|
1739
|
+
},
|
|
1740
|
+
/**
|
|
1741
|
+
* Flag to disable UIs on Map
|
|
1742
|
+
*/
|
|
1743
|
+
disableUI: {
|
|
1744
|
+
type: Boolean,
|
|
1745
|
+
default: false,
|
|
1746
|
+
}
|
|
1747
|
+
},
|
|
1748
|
+
provide() {
|
|
1749
|
+
return {
|
|
1750
|
+
flatmapAPI: this.flatmapAPI,
|
|
1751
|
+
sparcAPI: this.sparcAPI,
|
|
1752
|
+
userApiKey: this.userToken
|
|
1753
|
+
}
|
|
1754
|
+
},
|
|
1755
|
+
data: function () {
|
|
1756
|
+
return {
|
|
1757
|
+
annotationEntry: {},
|
|
1758
|
+
//tooltip display has to be set to false until it is rendered
|
|
1759
|
+
//for the first time, otherwise it may display an arrow at a
|
|
1760
|
+
//undesired location.
|
|
1761
|
+
tooltipDisplay: false,
|
|
1762
|
+
serverUUID: undefined,
|
|
1763
|
+
serverURL: undefined,
|
|
1764
|
+
layers: [],
|
|
1765
|
+
pathways: [],
|
|
1766
|
+
sckanDisplay: [
|
|
1767
|
+
{
|
|
1768
|
+
label: 'Display Path with SCKAN',
|
|
1769
|
+
key: 'VALID',
|
|
1770
|
+
},
|
|
1771
|
+
],
|
|
1772
|
+
centreLines: [
|
|
1773
|
+
{
|
|
1774
|
+
label: 'Display Nerves',
|
|
1775
|
+
key: 'centrelines',
|
|
1776
|
+
enabled: false,
|
|
1777
|
+
},
|
|
1778
|
+
],
|
|
1779
|
+
systems: [],
|
|
1780
|
+
taxonConnectivity: [],
|
|
1781
|
+
pathwaysMaxHeight: 1000,
|
|
1782
|
+
hoverVisibilities: [
|
|
1783
|
+
{ value: false },
|
|
1784
|
+
{ value: false },
|
|
1785
|
+
{ value: false },
|
|
1786
|
+
{ value: false },
|
|
1787
|
+
{ value: false },
|
|
1788
|
+
{ value: false },
|
|
1789
|
+
{ value: false },
|
|
1790
|
+
{ value: false },
|
|
1791
|
+
{ value: false },
|
|
1792
|
+
{ value: false },
|
|
1793
|
+
],
|
|
1794
|
+
yellowstar: yellowstar,
|
|
1795
|
+
isFC: false,
|
|
1796
|
+
inHelp: false,
|
|
1797
|
+
currentBackground: 'white',
|
|
1798
|
+
availableBackground: ['white', 'lightskyblue', 'black'],
|
|
1799
|
+
loading: false,
|
|
1800
|
+
flatmapMarker: flatmapMarker,
|
|
1801
|
+
tooltipEntry: createUnfilledTooltipData(),
|
|
1802
|
+
connectivityTooltipVisible: false,
|
|
1803
|
+
drawerOpen: false,
|
|
1804
|
+
annotationRadio: false,
|
|
1805
|
+
flightPath3DRadio: false,
|
|
1806
|
+
displayFlightPathOption: false,
|
|
1807
|
+
colourRadio: true,
|
|
1808
|
+
outlinesRadio: true,
|
|
1809
|
+
minimapResizeShow: false,
|
|
1810
|
+
minimapSmall: false,
|
|
1811
|
+
currentActive: '',
|
|
1812
|
+
currentHover: '',
|
|
1813
|
+
viewingMode: 'Exploration',
|
|
1814
|
+
viewingModes: ['Annotation', 'Exploration', 'Network Discovery'],
|
|
1815
|
+
openMapRef: undefined,
|
|
1816
|
+
backgroundIconRef: undefined,
|
|
1817
|
+
}
|
|
1818
|
+
},
|
|
1819
|
+
computed: {
|
|
1820
|
+
...mapState(useMainStore, ['userToken']),
|
|
1821
|
+
},
|
|
1822
|
+
watch: {
|
|
1823
|
+
entry: function () {
|
|
1824
|
+
if (!this.state) this.createFlatmap()
|
|
1825
|
+
},
|
|
1826
|
+
helpMode: function (newVal, oldVal) {
|
|
1827
|
+
if (newVal !== oldVal) {
|
|
1828
|
+
this.setHelpMode(val)
|
|
1829
|
+
}
|
|
1830
|
+
},
|
|
1831
|
+
state: {
|
|
1832
|
+
handler: function (state, oldVal) {
|
|
1833
|
+
if (state !== oldVal) {
|
|
1834
|
+
if (this.mapManager) {
|
|
1835
|
+
this.setState(state)
|
|
1836
|
+
} else {
|
|
1837
|
+
//this component has not been mounted yet
|
|
1838
|
+
this.setStateRequired = true
|
|
1839
|
+
}
|
|
1840
|
+
}
|
|
1841
|
+
},
|
|
1842
|
+
immediate: true,
|
|
1843
|
+
deep: true,
|
|
1844
|
+
},
|
|
1845
|
+
disableUI: function (isUIDisabled) {
|
|
1846
|
+
if (isUIDisabled) {
|
|
1847
|
+
this.closeTooltip()
|
|
1848
|
+
}
|
|
1849
|
+
}
|
|
1850
|
+
},
|
|
1851
|
+
mounted: function () {
|
|
1852
|
+
this.openMapRef = shallowRef(this.$refs.openMapRef)
|
|
1853
|
+
this.backgroundIconRef = shallowRef(this.$refs.backgroundIconRef)
|
|
1854
|
+
this.tooltipWait = []
|
|
1855
|
+
this.tooltipWait.length = this.hoverVisibilities.length
|
|
1856
|
+
this.mapManager = new flatmap.MapManager(this.flatmapAPI)
|
|
1857
|
+
this.flatmapQueries = new FlatmapQueries()
|
|
1858
|
+
this.flatmapQueries.initialise(this.flatmapAPI)
|
|
1859
|
+
if (this.state) {
|
|
1860
|
+
//State is set and require to set the state
|
|
1861
|
+
if (this.setStateRequired) {
|
|
1862
|
+
this.setState(this.state)
|
|
1863
|
+
}
|
|
1864
|
+
} else if (this.renderAtMounted) {
|
|
1865
|
+
this.createFlatmap()
|
|
1866
|
+
}
|
|
1867
|
+
},
|
|
1868
|
+
}
|
|
1869
|
+
</script>
|
|
1870
|
+
|
|
1871
|
+
<style lang="scss" scoped>
|
|
1872
|
+
|
|
1873
|
+
.beta-popovers {
|
|
1874
|
+
position: absolute;
|
|
1875
|
+
top: 90px;
|
|
1876
|
+
left: 16px;
|
|
1877
|
+
text-align: left;
|
|
1878
|
+
font-size: 25px;
|
|
1879
|
+
}
|
|
1880
|
+
|
|
1881
|
+
.warning-icon {
|
|
1882
|
+
color: $warning;
|
|
1883
|
+
|
|
1884
|
+
&:hover {
|
|
1885
|
+
cursor: pointer;
|
|
1886
|
+
}
|
|
1887
|
+
}
|
|
1888
|
+
|
|
1889
|
+
.warning-text {
|
|
1890
|
+
font-family: Asap, sans-serif;
|
|
1891
|
+
font-size: 15px;
|
|
1892
|
+
vertical-align: 5px;
|
|
1893
|
+
}
|
|
1894
|
+
|
|
1895
|
+
.latest-map-text {
|
|
1896
|
+
color: $app-primary-color;
|
|
1897
|
+
font-family: Asap, sans-serif;
|
|
1898
|
+
font-size: 12px;
|
|
1899
|
+
margin-top: 5px;
|
|
1900
|
+
vertical-align: 10px;
|
|
1901
|
+
cursor: pointer;
|
|
1902
|
+
}
|
|
1903
|
+
|
|
1904
|
+
.latest-changesicon {
|
|
1905
|
+
color: $success;
|
|
1906
|
+
|
|
1907
|
+
&:hover {
|
|
1908
|
+
cursor: pointer;
|
|
1909
|
+
}
|
|
1910
|
+
}
|
|
1911
|
+
|
|
1912
|
+
.latest-changestext {
|
|
1913
|
+
font-family: Asap, sans-serif;
|
|
1914
|
+
font-size: 15px;
|
|
1915
|
+
vertical-align: 5px;
|
|
1916
|
+
}
|
|
1917
|
+
|
|
1918
|
+
.flatmap-container {
|
|
1919
|
+
height: 100%;
|
|
1920
|
+
width: 100%;
|
|
1921
|
+
}
|
|
1922
|
+
|
|
1923
|
+
.pathway-location {
|
|
1924
|
+
position: absolute;
|
|
1925
|
+
bottom: 0px;
|
|
1926
|
+
transition: all 1s ease;
|
|
1927
|
+
&.open {
|
|
1928
|
+
left: 0px;
|
|
1929
|
+
}
|
|
1930
|
+
&.close {
|
|
1931
|
+
left: -298px;
|
|
1932
|
+
}
|
|
1933
|
+
}
|
|
1934
|
+
|
|
1935
|
+
.svg-legends-container {
|
|
1936
|
+
width: 70%;
|
|
1937
|
+
height: auto;
|
|
1938
|
+
position: relative;
|
|
1939
|
+
max-height: 140px;
|
|
1940
|
+
}
|
|
1941
|
+
|
|
1942
|
+
.pathway-container {
|
|
1943
|
+
float: left;
|
|
1944
|
+
padding-left: 16px;
|
|
1945
|
+
padding-right: 18px;
|
|
1946
|
+
text-align: left;
|
|
1947
|
+
overflow: auto;
|
|
1948
|
+
border: 1px solid rgb(220, 223, 230);
|
|
1949
|
+
padding-bottom: 16px;
|
|
1950
|
+
background: #ffffff;
|
|
1951
|
+
overflow-x: hidden;
|
|
1952
|
+
scrollbar-width: thin;
|
|
1953
|
+
|
|
1954
|
+
transition: all 1s ease;
|
|
1955
|
+
&.open {
|
|
1956
|
+
opacity: 1;
|
|
1957
|
+
position: relative;
|
|
1958
|
+
z-index: 2;
|
|
1959
|
+
}
|
|
1960
|
+
&.close {
|
|
1961
|
+
opacity: 0;
|
|
1962
|
+
}
|
|
1963
|
+
|
|
1964
|
+
&::-webkit-scrollbar {
|
|
1965
|
+
width: 4px;
|
|
1966
|
+
}
|
|
1967
|
+
|
|
1968
|
+
&::-webkit-scrollbar-thumb {
|
|
1969
|
+
border-radius: 10px;
|
|
1970
|
+
box-shadow: inset 0 0 6px #c0c4cc;
|
|
1971
|
+
}
|
|
1972
|
+
}
|
|
1973
|
+
|
|
1974
|
+
.flatmap-marker-help {
|
|
1975
|
+
display: inline-block;
|
|
1976
|
+
}
|
|
1977
|
+
|
|
1978
|
+
:deep(.popper-bump-right) {
|
|
1979
|
+
left: 30px;
|
|
1980
|
+
}
|
|
1981
|
+
|
|
1982
|
+
.el-dropdown-link {
|
|
1983
|
+
cursor: pointer;
|
|
1984
|
+
color: #409eff;
|
|
1985
|
+
}
|
|
1986
|
+
.el-icon-arrow-down {
|
|
1987
|
+
font-size: 12px;
|
|
1988
|
+
}
|
|
1989
|
+
.demonstration {
|
|
1990
|
+
display: block;
|
|
1991
|
+
color: #8492a6;
|
|
1992
|
+
font-size: 14px;
|
|
1993
|
+
margin-bottom: 20px;
|
|
1994
|
+
}
|
|
1995
|
+
|
|
1996
|
+
.tooltip {
|
|
1997
|
+
display: none;
|
|
1998
|
+
}
|
|
1999
|
+
|
|
2000
|
+
:deep(.maplibregl-popup) {
|
|
2001
|
+
max-width: 300px !important;
|
|
2002
|
+
}
|
|
2003
|
+
|
|
2004
|
+
:deep(.flatmap-tooltip-popup) {
|
|
2005
|
+
&.maplibregl-popup-anchor-bottom {
|
|
2006
|
+
.maplibregl-popup-content {
|
|
2007
|
+
margin-bottom: 12px;
|
|
2008
|
+
&::after,
|
|
2009
|
+
&::before {
|
|
2010
|
+
top: 100%;
|
|
2011
|
+
border-width: 12px;
|
|
2012
|
+
}
|
|
2013
|
+
/* this border color controlls the color of the triangle (what looks like the fill of the triangle) */
|
|
2014
|
+
&::after {
|
|
2015
|
+
margin-top: -1px;
|
|
2016
|
+
border-color: rgb(255, 255, 255) transparent transparent transparent;
|
|
2017
|
+
}
|
|
2018
|
+
/* this border color controlls the outside, thin border */
|
|
2019
|
+
&::before {
|
|
2020
|
+
margin: 0 auto;
|
|
2021
|
+
border-color: $app-primary-color transparent transparent transparent;
|
|
2022
|
+
}
|
|
2023
|
+
}
|
|
2024
|
+
}
|
|
2025
|
+
&.maplibregl-popup-anchor-top {
|
|
2026
|
+
.maplibregl-popup-content {
|
|
2027
|
+
margin-top: 12px;
|
|
2028
|
+
&::after,
|
|
2029
|
+
&::before {
|
|
2030
|
+
top: auto;
|
|
2031
|
+
bottom: 100%;
|
|
2032
|
+
border-width: 12px;
|
|
2033
|
+
}
|
|
2034
|
+
/* this border color controlls the color of the triangle (what looks like the fill of the triangle) */
|
|
2035
|
+
&::after {
|
|
2036
|
+
border-color: transparent transparent rgb(255, 255, 255) transparent;
|
|
2037
|
+
}
|
|
2038
|
+
&::before {
|
|
2039
|
+
margin: 0 auto;
|
|
2040
|
+
margin-bottom: 1px;
|
|
2041
|
+
border-color: transparent transparent $app-primary-color transparent;
|
|
2042
|
+
}
|
|
2043
|
+
}
|
|
2044
|
+
}
|
|
2045
|
+
&.maplibregl-popup-anchor-left {
|
|
2046
|
+
margin-left: 8px;
|
|
2047
|
+
.maplibregl-popup-content {
|
|
2048
|
+
&::after,
|
|
2049
|
+
&::before {
|
|
2050
|
+
top: 50%;
|
|
2051
|
+
left: 0;
|
|
2052
|
+
border-width: 8px;
|
|
2053
|
+
margin-top: -8px;
|
|
2054
|
+
margin-left: -16px;
|
|
2055
|
+
}
|
|
2056
|
+
/* this border color controlls the color of the triangle (what looks like the fill of the triangle) */
|
|
2057
|
+
&::after {
|
|
2058
|
+
transform: translateX(1px);
|
|
2059
|
+
border-color: transparent rgb(255, 255, 255) transparent transparent;
|
|
2060
|
+
}
|
|
2061
|
+
&::before {
|
|
2062
|
+
border-color: transparent $app-primary-color transparent transparent;
|
|
2063
|
+
}
|
|
2064
|
+
}
|
|
2065
|
+
}
|
|
2066
|
+
&.maplibregl-popup-anchor-right {
|
|
2067
|
+
margin-right: 8px;
|
|
2068
|
+
.maplibregl-popup-content {
|
|
2069
|
+
&::after,
|
|
2070
|
+
&::before {
|
|
2071
|
+
top: 50%;
|
|
2072
|
+
right: 0;
|
|
2073
|
+
border-width: 8px;
|
|
2074
|
+
margin-top: -8px;
|
|
2075
|
+
margin-right: -16px;
|
|
2076
|
+
}
|
|
2077
|
+
/* this border color controlls the color of the triangle (what looks like the fill of the triangle) */
|
|
2078
|
+
&::after {
|
|
2079
|
+
transform: translateX(-1px);
|
|
2080
|
+
border-color: transparent transparent transparent rgb(255, 255, 255);
|
|
2081
|
+
}
|
|
2082
|
+
&::before {
|
|
2083
|
+
border-color: transparent transparent transparent $app-primary-color;
|
|
2084
|
+
}
|
|
2085
|
+
}
|
|
2086
|
+
}
|
|
2087
|
+
&.maplibregl-popup-anchor-top-left,
|
|
2088
|
+
&.maplibregl-popup-anchor-top-right,
|
|
2089
|
+
&.maplibregl-popup-anchor-bottom-left,
|
|
2090
|
+
&.maplibregl-popup-anchor-bottom-right {
|
|
2091
|
+
.maplibregl-popup-content {
|
|
2092
|
+
&::after,
|
|
2093
|
+
&::before {
|
|
2094
|
+
display: none;
|
|
2095
|
+
}
|
|
2096
|
+
}
|
|
2097
|
+
}
|
|
2098
|
+
.maplibregl-popup-content {
|
|
2099
|
+
border-radius: 4px;
|
|
2100
|
+
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
|
|
2101
|
+
pointer-events: none;
|
|
2102
|
+
display: none;
|
|
2103
|
+
background: #fff;
|
|
2104
|
+
border: 1px solid $app-primary-color;
|
|
2105
|
+
padding-left: 6px;
|
|
2106
|
+
padding-right: 6px;
|
|
2107
|
+
display: flex;
|
|
2108
|
+
justify-content: center;
|
|
2109
|
+
align-items: center;
|
|
2110
|
+
&::after,
|
|
2111
|
+
&::before {
|
|
2112
|
+
content: '';
|
|
2113
|
+
display: block;
|
|
2114
|
+
position: absolute;
|
|
2115
|
+
width: 0;
|
|
2116
|
+
height: 0;
|
|
2117
|
+
border-style: solid;
|
|
2118
|
+
flex-shrink: 0;
|
|
2119
|
+
}
|
|
2120
|
+
}
|
|
2121
|
+
.maplibregl-popup-tip {
|
|
2122
|
+
display: none;
|
|
2123
|
+
}
|
|
2124
|
+
}
|
|
2125
|
+
|
|
2126
|
+
:deep(.maplibregl-popup) {
|
|
2127
|
+
&.flatmap-marker-popup {
|
|
2128
|
+
box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1);
|
|
2129
|
+
pointer-events: auto;
|
|
2130
|
+
background: #fff;
|
|
2131
|
+
}
|
|
2132
|
+
}
|
|
2133
|
+
|
|
2134
|
+
/* Fix for chrome bug where under triangle pops up above one on top of it */
|
|
2135
|
+
.selector:not(*:root),
|
|
2136
|
+
:deep(.flatmap-tooltip-popup) {
|
|
2137
|
+
.maplibregl-popup-content::after {
|
|
2138
|
+
top: 99.9%;
|
|
2139
|
+
}
|
|
2140
|
+
}
|
|
2141
|
+
|
|
2142
|
+
:deep(.flatmap-tooltip-dialog) {
|
|
2143
|
+
.maplibregl-popup-tip {
|
|
2144
|
+
display: none;
|
|
2145
|
+
}
|
|
2146
|
+
}
|
|
2147
|
+
|
|
2148
|
+
:deep(.flatmap-marker-popup){
|
|
2149
|
+
.maplibregl-popup-content {
|
|
2150
|
+
padding: 0px;
|
|
2151
|
+
}
|
|
2152
|
+
}
|
|
2153
|
+
|
|
2154
|
+
:deep(.flatmapvuer-popover) {
|
|
2155
|
+
.maplibregl-popup-close-button {
|
|
2156
|
+
position: absolute;
|
|
2157
|
+
right: 0;
|
|
2158
|
+
top: 0;
|
|
2159
|
+
border: 0;
|
|
2160
|
+
border-radius: 0 3px 0 0;
|
|
2161
|
+
cursor: pointer;
|
|
2162
|
+
background-color: transparent;
|
|
2163
|
+
font-size: 2.5em;
|
|
2164
|
+
color: grey;
|
|
2165
|
+
transition: color 0.3s ease;
|
|
2166
|
+
|
|
2167
|
+
&:hover {
|
|
2168
|
+
color: $app-primary-color;
|
|
2169
|
+
}
|
|
2170
|
+
}
|
|
2171
|
+
}
|
|
2172
|
+
|
|
2173
|
+
.zoomOut {
|
|
2174
|
+
padding-left: 8px;
|
|
2175
|
+
}
|
|
2176
|
+
|
|
2177
|
+
.fitWindow {
|
|
2178
|
+
padding-left: 8px;
|
|
2179
|
+
}
|
|
2180
|
+
|
|
2181
|
+
.yellow-star-legend {
|
|
2182
|
+
width: 130px;
|
|
2183
|
+
cursor: pointer;
|
|
2184
|
+
}
|
|
2185
|
+
|
|
2186
|
+
.settings-group {
|
|
2187
|
+
bottom: 16px;
|
|
2188
|
+
position: absolute;
|
|
2189
|
+
transition: all 1s ease;
|
|
2190
|
+
&.open {
|
|
2191
|
+
left: 322px;
|
|
2192
|
+
}
|
|
2193
|
+
&.close {
|
|
2194
|
+
left: 24px;
|
|
2195
|
+
}
|
|
2196
|
+
}
|
|
2197
|
+
|
|
2198
|
+
:deep(.background-popper.el-popover.el-popper) {
|
|
2199
|
+
padding: 5px 12px;
|
|
2200
|
+
background-color: #ffffff;
|
|
2201
|
+
border: 1px solid $app-primary-color;
|
|
2202
|
+
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.06);
|
|
2203
|
+
height: 290px;
|
|
2204
|
+
min-width: 200px;
|
|
2205
|
+
.el-popper__arrow {
|
|
2206
|
+
&:before {
|
|
2207
|
+
border-color: $app-primary-color;
|
|
2208
|
+
}
|
|
2209
|
+
}
|
|
2210
|
+
}
|
|
2211
|
+
|
|
2212
|
+
:deep(.background-popper.el-popover.el-popper.h-auto) {
|
|
2213
|
+
height: auto !important;
|
|
2214
|
+
}
|
|
2215
|
+
|
|
2216
|
+
:deep(.open-map-popper.el-popover.el-popper) {
|
|
2217
|
+
padding-top: 5px;
|
|
2218
|
+
padding-bottom: 5px;
|
|
2219
|
+
background-color: #ffffff;
|
|
2220
|
+
border: 1px solid $app-primary-color;
|
|
2221
|
+
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.06);
|
|
2222
|
+
min-width: 188px;
|
|
2223
|
+
|
|
2224
|
+
.el-row ~ .el-row {
|
|
2225
|
+
margin-top: 8px;
|
|
2226
|
+
}
|
|
2227
|
+
|
|
2228
|
+
.el-button {
|
|
2229
|
+
padding-top: 5px;
|
|
2230
|
+
padding-bottom: 5px;
|
|
2231
|
+
background: #f3e6f9;
|
|
2232
|
+
border-color: $app-primary-color;
|
|
2233
|
+
color: $app-primary-color;
|
|
2234
|
+
}
|
|
2235
|
+
|
|
2236
|
+
.el-popper__arrow {
|
|
2237
|
+
&:before {
|
|
2238
|
+
border-color: $app-primary-color;
|
|
2239
|
+
}
|
|
2240
|
+
}
|
|
2241
|
+
}
|
|
2242
|
+
|
|
2243
|
+
.backgroundText {
|
|
2244
|
+
color: rgb(48, 49, 51);
|
|
2245
|
+
font-size: 14px;
|
|
2246
|
+
font-weight: normal;
|
|
2247
|
+
line-height: 20px;
|
|
2248
|
+
}
|
|
2249
|
+
|
|
2250
|
+
.backgroundControl {
|
|
2251
|
+
display: flex;
|
|
2252
|
+
}
|
|
2253
|
+
|
|
2254
|
+
.backgroundChoice {
|
|
2255
|
+
width: 20px;
|
|
2256
|
+
height: 20px;
|
|
2257
|
+
border: 1px solid rgb(144, 147, 153);
|
|
2258
|
+
margin-left: 20px;
|
|
2259
|
+
&.active {
|
|
2260
|
+
border: 2px solid $app-primary-color;
|
|
2261
|
+
}
|
|
2262
|
+
&:hover {
|
|
2263
|
+
cursor: pointer;
|
|
2264
|
+
}
|
|
2265
|
+
&.white {
|
|
2266
|
+
background-color: white;
|
|
2267
|
+
margin-left: 10px;
|
|
2268
|
+
}
|
|
2269
|
+
&.black {
|
|
2270
|
+
background-color: black;
|
|
2271
|
+
}
|
|
2272
|
+
&.lightskyblue {
|
|
2273
|
+
background-color: lightskyblue;
|
|
2274
|
+
}
|
|
2275
|
+
}
|
|
2276
|
+
|
|
2277
|
+
.icon-button {
|
|
2278
|
+
height: 24px !important;
|
|
2279
|
+
width: 24px !important;
|
|
2280
|
+
color: $app-primary-color;
|
|
2281
|
+
|
|
2282
|
+
&.open-map-button {
|
|
2283
|
+
margin-bottom:4px;
|
|
2284
|
+
}
|
|
2285
|
+
|
|
2286
|
+
&:hover {
|
|
2287
|
+
cursor: pointer;
|
|
2288
|
+
}
|
|
2289
|
+
}
|
|
2290
|
+
|
|
2291
|
+
:deep(.maplibregl-ctrl-minimap) {
|
|
2292
|
+
transform-origin: top right;
|
|
2293
|
+
@media (max-width: 1250px) {
|
|
2294
|
+
height: 125px !important; // important is needed here as we are over-riding the style set by the flatmap
|
|
2295
|
+
width: 180px !important;
|
|
2296
|
+
:deep(.maplibregl-canvas .maplibregl-canvas) {
|
|
2297
|
+
height: 125px !important;
|
|
2298
|
+
width: 180px !important;
|
|
2299
|
+
}
|
|
2300
|
+
}
|
|
2301
|
+
@media (min-width: 1251px) {
|
|
2302
|
+
height: 190px !important;
|
|
2303
|
+
width: 300px !important;
|
|
2304
|
+
:deep(.maplibregl-canvas .maplibregl-canvas) {
|
|
2305
|
+
height: 190px !important;
|
|
2306
|
+
width: 300px !important;
|
|
2307
|
+
}
|
|
2308
|
+
}
|
|
2309
|
+
transition: all 1s ease;
|
|
2310
|
+
&.shrink {
|
|
2311
|
+
transform: scale(0.5);
|
|
2312
|
+
transform: scale(0.5);
|
|
2313
|
+
}
|
|
2314
|
+
}
|
|
2315
|
+
|
|
2316
|
+
.minimap-resize {
|
|
2317
|
+
position: absolute;
|
|
2318
|
+
pointer-events: all;
|
|
2319
|
+
cursor: pointer;
|
|
2320
|
+
top: 0;
|
|
2321
|
+
right: 0;
|
|
2322
|
+
padding-top: 3px; // needed as icon is offset
|
|
2323
|
+
width: 20px;
|
|
2324
|
+
height: 14px;
|
|
2325
|
+
z-index: 9;
|
|
2326
|
+
transition: all 1s ease;
|
|
2327
|
+
&.shrink {
|
|
2328
|
+
transform: rotate(0deg);
|
|
2329
|
+
}
|
|
2330
|
+
&.enlarge {
|
|
2331
|
+
transform: rotate(180deg) scale(2);
|
|
2332
|
+
padding-bottom: 5px; // note padding is added to the opposite side since it is rotated
|
|
2333
|
+
padding-left: 5px;
|
|
2334
|
+
}
|
|
2335
|
+
}
|
|
2336
|
+
|
|
2337
|
+
:deep(.flatmap-popper.el-popper) {
|
|
2338
|
+
padding: 6px 4px;
|
|
2339
|
+
font-size: 12px;
|
|
2340
|
+
color: rgb(48, 49, 51);
|
|
2341
|
+
background-color: #f3ecf6;
|
|
2342
|
+
border: 1px solid $app-primary-color;
|
|
2343
|
+
white-space: nowrap;
|
|
2344
|
+
min-width: unset;
|
|
2345
|
+
&.warning-popper {
|
|
2346
|
+
min-width: 150px;
|
|
2347
|
+
max-width: 400px;
|
|
2348
|
+
word-break: keep-all;
|
|
2349
|
+
white-space: unset;
|
|
2350
|
+
}
|
|
2351
|
+
.el-popper__arrow {
|
|
2352
|
+
&:before {
|
|
2353
|
+
border-color: $app-primary-color;
|
|
2354
|
+
background-color: #f3ecf6;
|
|
2355
|
+
}
|
|
2356
|
+
}
|
|
2357
|
+
}
|
|
2358
|
+
|
|
2359
|
+
:deep(.el-loading-spinner) {
|
|
2360
|
+
.path {
|
|
2361
|
+
stroke: $app-primary-color;
|
|
2362
|
+
}
|
|
2363
|
+
.el-loading-text {
|
|
2364
|
+
color: $app-primary-color;
|
|
2365
|
+
}
|
|
2366
|
+
}
|
|
2367
|
+
|
|
2368
|
+
:deep(.flatmap-popup-popper) {
|
|
2369
|
+
.maplibregl-popup-tip {
|
|
2370
|
+
border-bottom-color: $app-primary-color;
|
|
2371
|
+
}
|
|
2372
|
+
.maplibregl-popup-content {
|
|
2373
|
+
padding: 6px 4px;
|
|
2374
|
+
font-size: 12px;
|
|
2375
|
+
color: rgb(48, 49, 51);
|
|
2376
|
+
background-color: #f3ecf6;
|
|
2377
|
+
border: 1px solid $app-primary-color;
|
|
2378
|
+
white-space: nowrap;
|
|
2379
|
+
min-width: unset;
|
|
2380
|
+
.maplibregl-popup-close-button {
|
|
2381
|
+
display: none;
|
|
2382
|
+
}
|
|
2383
|
+
}
|
|
2384
|
+
}
|
|
2385
|
+
|
|
2386
|
+
:deep(.popper-zoomout) {
|
|
2387
|
+
padding-right: 13px !important;
|
|
2388
|
+
left: -21px !important;
|
|
2389
|
+
}
|
|
2390
|
+
|
|
2391
|
+
:deep(.popper-zoomout) {
|
|
2392
|
+
.popper__arrow {
|
|
2393
|
+
left: 53px !important;
|
|
2394
|
+
}
|
|
2395
|
+
}
|
|
2396
|
+
|
|
2397
|
+
:deep(.maplibregl-popup-content) {
|
|
2398
|
+
padding: 0px;
|
|
2399
|
+
}
|
|
2400
|
+
|
|
2401
|
+
.bottom-right-control {
|
|
2402
|
+
position: absolute;
|
|
2403
|
+
right: 16px;
|
|
2404
|
+
bottom: 16px;
|
|
2405
|
+
}
|
|
2406
|
+
|
|
2407
|
+
:deep(.my-drawer) {
|
|
2408
|
+
background: rgba(0, 0, 0, 0);
|
|
2409
|
+
box-shadow: none;
|
|
2410
|
+
}
|
|
2411
|
+
|
|
2412
|
+
.drawer {
|
|
2413
|
+
:deep(.el-drawer:focus) {
|
|
2414
|
+
outline: none;
|
|
2415
|
+
}
|
|
2416
|
+
}
|
|
2417
|
+
|
|
2418
|
+
.open-drawer,
|
|
2419
|
+
.drawer-button {
|
|
2420
|
+
z-index: 8;
|
|
2421
|
+
width: 20px;
|
|
2422
|
+
height: 40px;
|
|
2423
|
+
border: solid 1px $app-primary-color;
|
|
2424
|
+
text-align: center;
|
|
2425
|
+
vertical-align: middle;
|
|
2426
|
+
cursor: pointer;
|
|
2427
|
+
pointer-events: auto;
|
|
2428
|
+
}
|
|
2429
|
+
|
|
2430
|
+
.open-drawer {
|
|
2431
|
+
position: absolute;
|
|
2432
|
+
left: 0px;
|
|
2433
|
+
background-color: #f7faff;
|
|
2434
|
+
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.06);
|
|
2435
|
+
}
|
|
2436
|
+
|
|
2437
|
+
.drawer-button {
|
|
2438
|
+
float: left;
|
|
2439
|
+
margin-top: calc(50% - 36px);
|
|
2440
|
+
background-color: #f9f2fc;
|
|
2441
|
+
|
|
2442
|
+
i {
|
|
2443
|
+
font-weight: 600;
|
|
2444
|
+
margin-top: 12px;
|
|
2445
|
+
color: $app-primary-color;
|
|
2446
|
+
transition-delay: 0.9s;
|
|
2447
|
+
}
|
|
2448
|
+
&.open {
|
|
2449
|
+
i {
|
|
2450
|
+
transform: rotate(0deg) scaleY(2);
|
|
2451
|
+
}
|
|
2452
|
+
}
|
|
2453
|
+
&.close {
|
|
2454
|
+
i {
|
|
2455
|
+
transform: rotate(180deg) scaleY(2);
|
|
2456
|
+
}
|
|
2457
|
+
}
|
|
2458
|
+
}
|
|
2459
|
+
|
|
2460
|
+
:deep(.maplibregl-canvas-container) {
|
|
2461
|
+
canvas {
|
|
2462
|
+
outline: none;
|
|
2463
|
+
}
|
|
2464
|
+
}
|
|
2465
|
+
|
|
2466
|
+
.backgroundSpacer {
|
|
2467
|
+
border-bottom: 1px solid #e4e7ed;
|
|
2468
|
+
margin-bottom: 10px;
|
|
2469
|
+
}
|
|
2470
|
+
|
|
2471
|
+
.flatmap-radio {
|
|
2472
|
+
:deep(label) {
|
|
2473
|
+
margin-right: 20px;
|
|
2474
|
+
&:last-child {
|
|
2475
|
+
margin-right: 0px;
|
|
2476
|
+
}
|
|
2477
|
+
}
|
|
2478
|
+
:deep(.el-radio__input) {
|
|
2479
|
+
&.is-checked {
|
|
2480
|
+
& + .el-radio__label {
|
|
2481
|
+
color: $app-primary-color;
|
|
2482
|
+
}
|
|
2483
|
+
.el-radio__inner {
|
|
2484
|
+
border-color: $app-primary-color;
|
|
2485
|
+
background: $app-primary-color;
|
|
2486
|
+
}
|
|
2487
|
+
}
|
|
2488
|
+
.el-radio__inner:hover {
|
|
2489
|
+
border-color: $app-primary-color;
|
|
2490
|
+
}
|
|
2491
|
+
}
|
|
2492
|
+
}
|
|
2493
|
+
|
|
2494
|
+
:deep(.custom-popup) {
|
|
2495
|
+
.maplibregl-popup-tip {
|
|
2496
|
+
display: none;
|
|
2497
|
+
}
|
|
2498
|
+
.maplibregl-popup-content {
|
|
2499
|
+
border-radius: 4px;
|
|
2500
|
+
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
|
|
2501
|
+
pointer-events: none;
|
|
2502
|
+
display: none;
|
|
2503
|
+
background: #fff;
|
|
2504
|
+
font-family: 'Asap', sans-serif;
|
|
2505
|
+
font-size: 12pt;
|
|
2506
|
+
color: $app-primary-color;
|
|
2507
|
+
border: 1px solid $app-primary-color;
|
|
2508
|
+
padding-left: 6px;
|
|
2509
|
+
padding-right: 6px;
|
|
2510
|
+
padding-top: 6px;
|
|
2511
|
+
padding-bottom: 6px;
|
|
2512
|
+
display: flex;
|
|
2513
|
+
justify-content: center;
|
|
2514
|
+
align-items: center;
|
|
2515
|
+
&::after,
|
|
2516
|
+
&::before {
|
|
2517
|
+
content: '';
|
|
2518
|
+
display: block;
|
|
2519
|
+
position: absolute;
|
|
2520
|
+
width: 0;
|
|
2521
|
+
height: 0;
|
|
2522
|
+
border-style: solid;
|
|
2523
|
+
flex-shrink: 0;
|
|
2524
|
+
}
|
|
2525
|
+
.maplibregl-popup-close-button {
|
|
2526
|
+
display: none;
|
|
2527
|
+
}
|
|
2528
|
+
}
|
|
2529
|
+
&.maplibregl-popup-anchor-bottom {
|
|
2530
|
+
.maplibregl-popup-content {
|
|
2531
|
+
margin-bottom: 12px;
|
|
2532
|
+
&::after,
|
|
2533
|
+
&::before {
|
|
2534
|
+
top: 100%;
|
|
2535
|
+
border-width: 12px;
|
|
2536
|
+
}
|
|
2537
|
+
/* this border color controlls the color of the triangle (what looks like the fill of the triangle) */
|
|
2538
|
+
&::after {
|
|
2539
|
+
margin-top: -1px;
|
|
2540
|
+
border-color: rgb(255, 255, 255) transparent transparent transparent;
|
|
2541
|
+
}
|
|
2542
|
+
/* this border color controlls the outside, thin border */
|
|
2543
|
+
&::before {
|
|
2544
|
+
margin: 0 auto;
|
|
2545
|
+
border-color: $app-primary-color transparent transparent transparent;
|
|
2546
|
+
}
|
|
2547
|
+
}
|
|
2548
|
+
}
|
|
2549
|
+
&.maplibregl-popup-anchor-top {
|
|
2550
|
+
.maplibregl-popup-content {
|
|
2551
|
+
margin-top: 18px;
|
|
2552
|
+
&::after,
|
|
2553
|
+
&::before {
|
|
2554
|
+
top: calc(-100% + 6px);
|
|
2555
|
+
border-width: 12px;
|
|
2556
|
+
}
|
|
2557
|
+
/* this border color controlls the color of the triangle (what looks like the fill of the triangle) */
|
|
2558
|
+
&::after {
|
|
2559
|
+
margin-top: 1px;
|
|
2560
|
+
border-color: transparent transparent rgb(255, 255, 255) transparent;
|
|
2561
|
+
}
|
|
2562
|
+
&::before {
|
|
2563
|
+
margin: 0 auto;
|
|
2564
|
+
border-color: transparent transparent $app-primary-color transparent;
|
|
2565
|
+
}
|
|
2566
|
+
}
|
|
2567
|
+
}
|
|
2568
|
+
}
|
|
2569
|
+
|
|
2570
|
+
.select-box {
|
|
2571
|
+
border-radius: 4px;
|
|
2572
|
+
border: 1px solid rgb(144, 147, 153);
|
|
2573
|
+
background-color: var(--white);
|
|
2574
|
+
font-weight: 500;
|
|
2575
|
+
color: rgb(48, 49, 51);
|
|
2576
|
+
width: 150px!important;
|
|
2577
|
+
}
|
|
2578
|
+
|
|
2579
|
+
:deep(.flatmap_dropdown) {
|
|
2580
|
+
min-width: 160px !important;
|
|
2581
|
+
.el-select-dropdown__item {
|
|
2582
|
+
white-space: nowrap;
|
|
2583
|
+
text-align: left;
|
|
2584
|
+
&.is-selected {
|
|
2585
|
+
color: $app-primary-color;
|
|
2586
|
+
font-weight: normal;
|
|
2587
|
+
}
|
|
2588
|
+
}
|
|
2589
|
+
}
|
|
2590
|
+
</style>
|
|
2591
|
+
|
|
2592
|
+
<style lang="scss">
|
|
2593
|
+
|
|
2594
|
+
.flatmap-container {
|
|
2595
|
+
--el-color-primary: #8300BF;
|
|
2596
|
+
--el-color-primary-light-5: #CD99E5;
|
|
2597
|
+
--el-color-primary-light-9: #F3E6F9;
|
|
2598
|
+
--el-color-primary-dark-2: var(--el-color-primary);
|
|
2599
|
+
}
|
|
2600
|
+
|
|
2532
2601
|
</style>
|