@kalisio/kdk 1.4.0 → 1.5.1

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.
Files changed (356) hide show
  1. package/.nyc_output/{0f1a87aa-d3bb-4c61-8c1e-12294055358d.json → 058fc679-d60a-4501-ac04-71171e5200b8.json} +0 -0
  2. package/.nyc_output/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +1 -0
  3. package/.nyc_output/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +1 -0
  4. package/.nyc_output/{8be4cd9f-124a-41f9-80f4-f267ced63c86.json → 8b1830fa-932e-4a61-9837-4a5b18f83ea9.json} +0 -0
  5. package/.nyc_output/{a63b0924-fd09-4e30-974f-cb4be2243b66.json → afd2d144-3570-4858-b94a-b523dbd023dd.json} +0 -0
  6. package/.nyc_output/processinfo/058fc679-d60a-4501-ac04-71171e5200b8.json +1 -0
  7. package/.nyc_output/processinfo/{27204015-ebfd-456f-a3bb-6a94f71946b8.json → 2226bcce-9d22-4dad-b9fa-46564b5565c7.json} +1 -1
  8. package/.nyc_output/processinfo/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +1 -0
  9. package/.nyc_output/processinfo/8b1830fa-932e-4a61-9837-4a5b18f83ea9.json +1 -0
  10. package/.nyc_output/processinfo/afd2d144-3570-4858-b94a-b523dbd023dd.json +1 -0
  11. package/.nyc_output/processinfo/index.json +1 -1
  12. package/CHANGELOG.md +219 -68
  13. package/coverage/core/api/application.js.html +455 -455
  14. package/coverage/core/api/authentication.js.html +119 -119
  15. package/coverage/core/api/db.js.html +201 -201
  16. package/coverage/core/api/hooks/hooks.account.js.html +48 -48
  17. package/coverage/core/api/hooks/hooks.authentication.js.html +64 -64
  18. package/coverage/core/api/hooks/hooks.authorisations.js.html +353 -353
  19. package/coverage/core/api/hooks/hooks.devices.js.html +22 -22
  20. package/coverage/core/api/hooks/hooks.groups.js.html +37 -37
  21. package/coverage/core/api/hooks/hooks.logger.js.html +27 -27
  22. package/coverage/core/api/hooks/hooks.model.js.html +269 -269
  23. package/coverage/core/api/hooks/hooks.organisations.js.html +183 -231
  24. package/coverage/core/api/hooks/hooks.pusher.js.html +114 -114
  25. package/coverage/core/api/hooks/hooks.query.js.html +200 -200
  26. package/coverage/core/api/hooks/hooks.service.js.html +82 -82
  27. package/coverage/core/api/hooks/hooks.storage.js.html +121 -121
  28. package/coverage/core/api/hooks/hooks.tags.js.html +232 -232
  29. package/coverage/core/api/hooks/hooks.users.js.html +261 -261
  30. package/coverage/core/api/hooks/index.html +167 -167
  31. package/coverage/core/api/hooks/index.js.html +24 -24
  32. package/coverage/core/api/index.html +75 -75
  33. package/coverage/core/api/index.js.html +26 -26
  34. package/coverage/core/api/marshall.js.html +57 -57
  35. package/coverage/core/api/models/groups.model.mongodb.js.html +20 -20
  36. package/coverage/core/api/models/index.html +50 -50
  37. package/coverage/core/api/models/organisations.model.mongodb.js.html +12 -12
  38. package/coverage/core/api/models/tags.model.mongodb.js.html +22 -22
  39. package/coverage/core/api/models/users.model.mongodb.js.html +20 -20
  40. package/coverage/core/api/oauth2-handler.js.html +18 -18
  41. package/coverage/core/api/oauth2-verifier.js.html +38 -38
  42. package/coverage/core/api/services/account/account.hooks.js.html +16 -16
  43. package/coverage/core/api/services/account/account.service.js.html +108 -108
  44. package/coverage/core/api/services/account/index.html +32 -32
  45. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
  46. package/coverage/core/api/services/authorisations/authorisations.service.js.html +132 -132
  47. package/coverage/core/api/services/authorisations/index.html +28 -28
  48. package/coverage/core/api/services/databases/databases.hooks.js.html +9 -9
  49. package/coverage/core/api/services/databases/databases.service.js.html +12 -12
  50. package/coverage/core/api/services/databases/index.html +24 -24
  51. package/coverage/core/api/services/devices/devices.hooks.js.html +9 -9
  52. package/coverage/core/api/services/devices/devices.service.js.html +61 -61
  53. package/coverage/core/api/services/devices/index.html +22 -22
  54. package/coverage/core/api/services/groups/groups.hooks.js.html +9 -9
  55. package/coverage/core/api/services/groups/index.html +13 -13
  56. package/coverage/core/api/services/index.html +21 -21
  57. package/coverage/core/api/services/index.js.html +137 -137
  58. package/coverage/core/api/services/mailer/index.html +24 -24
  59. package/coverage/core/api/services/mailer/mailer.hooks.js.html +9 -9
  60. package/coverage/core/api/services/mailer/mailer.service.js.html +19 -19
  61. package/coverage/core/api/services/organisations/index.html +24 -24
  62. package/coverage/core/api/services/organisations/organisations.hooks.js.html +8 -8
  63. package/coverage/core/api/services/organisations/organisations.service.js.html +67 -67
  64. package/coverage/core/api/services/pusher/index.html +32 -32
  65. package/coverage/core/api/services/pusher/pusher.channels.js.html +8 -8
  66. package/coverage/core/api/services/pusher/pusher.hooks.js.html +10 -10
  67. package/coverage/core/api/services/pusher/pusher.service.js.html +336 -336
  68. package/coverage/core/api/services/storage/index.html +21 -21
  69. package/coverage/core/api/services/storage/storage.hooks.js.html +35 -35
  70. package/coverage/core/api/services/tags/index.html +21 -21
  71. package/coverage/core/api/services/tags/tags.hooks.js.html +25 -25
  72. package/coverage/core/api/services/users/index.html +21 -21
  73. package/coverage/core/api/services/users/users.hooks.js.html +33 -33
  74. package/coverage/core/common/errors.js.html +1 -1
  75. package/coverage/core/common/index.html +42 -27
  76. package/coverage/core/common/index.js.html +16 -16
  77. package/coverage/core/common/permissions.js.html +274 -274
  78. package/coverage/index.html +174 -174
  79. package/coverage/lcov-report/core/api/application.js.html +455 -455
  80. package/coverage/lcov-report/core/api/authentication.js.html +119 -119
  81. package/coverage/lcov-report/core/api/db.js.html +201 -201
  82. package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +48 -48
  83. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +64 -64
  84. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +353 -353
  85. package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +22 -22
  86. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +37 -37
  87. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +27 -27
  88. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +269 -269
  89. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +183 -231
  90. package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +114 -114
  91. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +200 -200
  92. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +82 -82
  93. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +121 -121
  94. package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +232 -232
  95. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +261 -261
  96. package/coverage/lcov-report/core/api/hooks/index.html +167 -167
  97. package/coverage/lcov-report/core/api/hooks/index.js.html +24 -24
  98. package/coverage/lcov-report/core/api/index.html +75 -75
  99. package/coverage/lcov-report/core/api/index.js.html +26 -26
  100. package/coverage/lcov-report/core/api/marshall.js.html +57 -57
  101. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +20 -20
  102. package/coverage/lcov-report/core/api/models/index.html +50 -50
  103. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +12 -12
  104. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +22 -22
  105. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +20 -20
  106. package/coverage/lcov-report/core/api/oauth2-handler.js.html +18 -18
  107. package/coverage/lcov-report/core/api/oauth2-verifier.js.html +38 -38
  108. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +16 -16
  109. package/coverage/lcov-report/core/api/services/account/account.service.js.html +108 -108
  110. package/coverage/lcov-report/core/api/services/account/index.html +32 -32
  111. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
  112. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +132 -132
  113. package/coverage/lcov-report/core/api/services/authorisations/index.html +28 -28
  114. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +9 -9
  115. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +12 -12
  116. package/coverage/lcov-report/core/api/services/databases/index.html +24 -24
  117. package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +9 -9
  118. package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +61 -61
  119. package/coverage/lcov-report/core/api/services/devices/index.html +22 -22
  120. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +9 -9
  121. package/coverage/lcov-report/core/api/services/groups/index.html +13 -13
  122. package/coverage/lcov-report/core/api/services/index.html +21 -21
  123. package/coverage/lcov-report/core/api/services/index.js.html +137 -137
  124. package/coverage/lcov-report/core/api/services/mailer/index.html +24 -24
  125. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +9 -9
  126. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +19 -19
  127. package/coverage/lcov-report/core/api/services/organisations/index.html +24 -24
  128. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +8 -8
  129. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +67 -67
  130. package/coverage/lcov-report/core/api/services/pusher/index.html +32 -32
  131. package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +8 -8
  132. package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +10 -10
  133. package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +336 -336
  134. package/coverage/lcov-report/core/api/services/storage/index.html +21 -21
  135. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +35 -35
  136. package/coverage/lcov-report/core/api/services/tags/index.html +21 -21
  137. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +25 -25
  138. package/coverage/lcov-report/core/api/services/users/index.html +21 -21
  139. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +33 -33
  140. package/coverage/lcov-report/core/common/errors.js.html +1 -1
  141. package/coverage/lcov-report/core/common/index.html +42 -27
  142. package/coverage/lcov-report/core/common/index.js.html +16 -16
  143. package/coverage/lcov-report/core/common/permissions.js.html +274 -274
  144. package/coverage/lcov-report/index.html +174 -174
  145. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +1 -1
  146. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +72 -18
  147. package/coverage/lcov-report/map/api/hooks/index.html +7 -7
  148. package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
  149. package/coverage/lcov-report/map/api/index.html +1 -1
  150. package/coverage/lcov-report/map/api/index.js.html +1 -1
  151. package/coverage/lcov-report/map/api/marshall.js.html +1 -1
  152. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
  153. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
  154. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +1 -1
  155. package/coverage/lcov-report/map/api/models/index.html +1 -1
  156. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
  157. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
  158. package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
  159. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +1 -1
  160. package/coverage/lcov-report/map/api/services/catalog/index.html +1 -1
  161. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  162. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  163. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +1 -1
  164. package/coverage/lcov-report/map/api/services/features/index.html +1 -1
  165. package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  166. package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +1 -1
  167. package/coverage/lcov-report/map/api/services/geocoder/index.html +1 -1
  168. package/coverage/lcov-report/map/api/services/index.html +1 -1
  169. package/coverage/lcov-report/map/api/services/index.js.html +1 -1
  170. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
  171. package/coverage/lcov-report/map/common/errors.js.html +1 -1
  172. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +1 -1
  173. package/coverage/lcov-report/map/common/grid.js.html +1 -1
  174. package/coverage/lcov-report/map/common/index.html +1 -1
  175. package/coverage/lcov-report/map/common/index.js.html +1 -1
  176. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
  177. package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
  178. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
  179. package/coverage/lcov-report/map/common/opendap-utils.js.html +1 -1
  180. package/coverage/lcov-report/map/common/permissions.js.html +1 -1
  181. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
  182. package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
  183. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +1 -1
  184. package/coverage/lcov-report/map/common/wcs-utils.js.html +1 -1
  185. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1 -1
  186. package/coverage/lcov-report/map/common/wfs-utils.js.html +1 -1
  187. package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
  188. package/coverage/lcov-report/map/common/wmts-utils.js.html +1 -1
  189. package/coverage/lcov.info +3289 -3610
  190. package/coverage/map/api/hooks/hooks.catalog.js.html +1 -1
  191. package/coverage/map/api/hooks/hooks.query.js.html +72 -18
  192. package/coverage/map/api/hooks/index.html +7 -7
  193. package/coverage/map/api/hooks/index.js.html +1 -1
  194. package/coverage/map/api/index.html +1 -1
  195. package/coverage/map/api/index.js.html +1 -1
  196. package/coverage/map/api/marshall.js.html +1 -1
  197. package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
  198. package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
  199. package/coverage/map/api/models/features.model.mongodb.js.html +1 -1
  200. package/coverage/map/api/models/index.html +1 -1
  201. package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
  202. package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
  203. package/coverage/map/api/services/alerts/index.html +1 -1
  204. package/coverage/map/api/services/catalog/catalog.hooks.js.html +1 -1
  205. package/coverage/map/api/services/catalog/index.html +1 -1
  206. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  207. package/coverage/map/api/services/daptiles/index.html +1 -1
  208. package/coverage/map/api/services/features/features.hooks.js.html +1 -1
  209. package/coverage/map/api/services/features/index.html +1 -1
  210. package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  211. package/coverage/map/api/services/geocoder/geocoder.service.js.html +1 -1
  212. package/coverage/map/api/services/geocoder/index.html +1 -1
  213. package/coverage/map/api/services/index.html +1 -1
  214. package/coverage/map/api/services/index.js.html +1 -1
  215. package/coverage/map/common/dynamic-grid-source.js.html +1 -1
  216. package/coverage/map/common/errors.js.html +1 -1
  217. package/coverage/map/common/geotiff-grid-source.js.html +1 -1
  218. package/coverage/map/common/grid.js.html +1 -1
  219. package/coverage/map/common/index.html +1 -1
  220. package/coverage/map/common/index.js.html +1 -1
  221. package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
  222. package/coverage/map/common/moment-utils.js.html +1 -1
  223. package/coverage/map/common/opendap-grid-source.js.html +1 -1
  224. package/coverage/map/common/opendap-utils.js.html +1 -1
  225. package/coverage/map/common/permissions.js.html +1 -1
  226. package/coverage/map/common/time-based-grid-source.js.html +1 -1
  227. package/coverage/map/common/tms-utils.js.html +1 -1
  228. package/coverage/map/common/wcs-grid-source.js.html +1 -1
  229. package/coverage/map/common/wcs-utils.js.html +1 -1
  230. package/coverage/map/common/weacast-grid-source.js.html +1 -1
  231. package/coverage/map/common/wfs-utils.js.html +1 -1
  232. package/coverage/map/common/wms-utils.js.html +1 -1
  233. package/coverage/map/common/wmts-utils.js.html +1 -1
  234. package/lib/core/client/components/collection/KBoard.vue +6 -0
  235. package/lib/core/client/components/collection/KColumn.vue +2 -2
  236. package/lib/core/client/components/collection/KHistory.vue +14 -6
  237. package/lib/core/client/components/collection/KHistoryEntry.vue +7 -3
  238. package/lib/core/client/components/form/KFileField.vue +11 -40
  239. package/lib/core/client/components/frame/KChipsPane.vue +2 -2
  240. package/lib/core/client/components/input/KOptionsChooser.vue +2 -2
  241. package/lib/core/client/i18n/core_en.json +7 -1
  242. package/lib/core/client/i18n/core_fr.json +7 -1
  243. package/lib/core/client/index.js +18 -0
  244. package/lib/core/client/index.js.map +1 -1
  245. package/lib/core/client/layout.js +8 -1
  246. package/lib/core/client/layout.js.map +1 -1
  247. package/lib/core/client/mixins/mixin.base-collection.js +8 -2
  248. package/lib/core/client/mixins/mixin.base-collection.js.map +1 -1
  249. package/lib/core/client/reader.js +54 -0
  250. package/lib/core/client/reader.js.map +1 -0
  251. package/lib/core/client/readers/index.js +30 -0
  252. package/lib/core/client/readers/index.js.map +1 -0
  253. package/lib/core/client/readers/reader.csv.js +43 -0
  254. package/lib/core/client/readers/reader.csv.js.map +1 -0
  255. package/lib/core/client/readers/reader.json.js +38 -0
  256. package/lib/core/client/readers/reader.json.js.map +1 -0
  257. package/lib/core/client/services/index.js +1 -3
  258. package/lib/core/client/services/index.js.map +1 -1
  259. package/lib/core/client/time.js +4 -1
  260. package/lib/core/client/time.js.map +1 -1
  261. package/lib/map/api/hooks/hooks.query.js +30 -13
  262. package/lib/map/api/hooks/hooks.query.js.map +1 -1
  263. package/lib/map/client/components/KCaptureToolbar.vue +156 -0
  264. package/lib/map/client/components/KFeaturesFilter.vue +3 -1
  265. package/lib/map/client/components/KLayerEditionToolbar.vue +19 -11
  266. package/lib/map/client/components/KLayerStyleEditor.vue +2 -1
  267. package/lib/map/client/components/KLayerStyleForm.vue +34 -23
  268. package/lib/map/client/components/KLocationMap.vue +3 -1
  269. package/lib/map/client/components/KMeasureTool.vue +340 -0
  270. package/lib/map/client/components/KPositionIndicator.vue +1 -0
  271. package/lib/map/client/components/KTimeline.vue +7 -8
  272. package/lib/map/client/components/catalog/KImportLayer.vue +8 -35
  273. package/lib/map/client/components/catalog/KLayersSelector.vue +13 -11
  274. package/lib/map/client/components/form/KOwsLayerField.vue +7 -0
  275. package/lib/map/client/components/widget/KMapillaryViewer.vue +1 -1
  276. package/lib/map/client/components/widget/KTimeSeries.vue +81 -3
  277. package/lib/map/client/i18n/map_en.json +43 -5
  278. package/lib/map/client/i18n/map_fr.json +43 -5
  279. package/lib/map/client/init.js +6 -1
  280. package/lib/map/client/init.js.map +1 -1
  281. package/lib/map/client/leaflet/MaskLayer.js +12 -3
  282. package/lib/map/client/leaflet/MaskLayer.js.map +1 -1
  283. package/lib/map/client/mixins/globe/mixin.base-globe.js +3 -5
  284. package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
  285. package/lib/map/client/mixins/globe/mixin.geojson-layers.js +0 -4
  286. package/lib/map/client/mixins/globe/mixin.geojson-layers.js.map +1 -1
  287. package/lib/map/client/mixins/globe/mixin.popup.js +4 -0
  288. package/lib/map/client/mixins/globe/mixin.popup.js.map +1 -1
  289. package/lib/map/client/mixins/globe/mixin.tooltip.js +4 -0
  290. package/lib/map/client/mixins/globe/mixin.tooltip.js.map +1 -1
  291. package/lib/map/client/mixins/map/mixin.base-map.js +46 -7
  292. package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
  293. package/lib/map/client/mixins/map/mixin.canvas-layers.js +2 -0
  294. package/lib/map/client/mixins/map/mixin.canvas-layers.js.map +1 -1
  295. package/lib/map/client/mixins/map/mixin.file-layers.js +47 -101
  296. package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
  297. package/lib/map/client/mixins/map/mixin.geojson-layers.js +9 -5
  298. package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
  299. package/lib/map/client/mixins/map/mixin.heatmap-layers.js +0 -4
  300. package/lib/map/client/mixins/map/mixin.heatmap-layers.js.map +1 -1
  301. package/lib/map/client/mixins/map/mixin.popup.js +4 -0
  302. package/lib/map/client/mixins/map/mixin.popup.js.map +1 -1
  303. package/lib/map/client/mixins/map/mixin.tooltip.js +4 -0
  304. package/lib/map/client/mixins/map/mixin.tooltip.js.map +1 -1
  305. package/lib/map/client/mixins/mixin.activity.js +2 -0
  306. package/lib/map/client/mixins/mixin.activity.js.map +1 -1
  307. package/lib/map/client/mixins/mixin.context.js +26 -3
  308. package/lib/map/client/mixins/mixin.context.js.map +1 -1
  309. package/lib/map/client/mixins/mixin.feature-service.js +4 -4
  310. package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
  311. package/lib/map/client/mixins/mixin.infobox.js +4 -0
  312. package/lib/map/client/mixins/mixin.infobox.js.map +1 -1
  313. package/lib/map/client/readers/index.js +42 -0
  314. package/lib/map/client/readers/index.js.map +1 -0
  315. package/lib/map/client/readers/reader.geojson.js +59 -0
  316. package/lib/map/client/readers/reader.geojson.js.map +1 -0
  317. package/lib/map/client/readers/reader.gpx.js +41 -0
  318. package/lib/map/client/readers/reader.gpx.js.map +1 -0
  319. package/lib/map/client/readers/reader.kml.js +41 -0
  320. package/lib/map/client/readers/reader.kml.js.map +1 -0
  321. package/lib/map/client/utils.js +2 -1
  322. package/lib/map/client/utils.js.map +1 -1
  323. package/lib/test/client/core/runner.js +1 -2
  324. package/lib/test/client/core/runner.js.map +1 -1
  325. package/lib/test/client/core/utils.js +58 -38
  326. package/lib/test/client/core/utils.js.map +1 -1
  327. package/lib/test/client/map/catalog.js +50 -49
  328. package/lib/test/client/map/catalog.js.map +1 -1
  329. package/package.json +3 -3
  330. package/.nyc_output/27204015-ebfd-456f-a3bb-6a94f71946b8.json +0 -1
  331. package/.nyc_output/d3d1fa81-57ca-4287-8fbe-96466b0e5aa1.json +0 -1
  332. package/.nyc_output/e921974a-3076-4e89-8dbf-6f37bef10583.json +0 -1
  333. package/.nyc_output/fb790367-ba9f-474f-84c1-f836caf9f50a.json +0 -1
  334. package/.nyc_output/processinfo/0f1a87aa-d3bb-4c61-8c1e-12294055358d.json +0 -1
  335. package/.nyc_output/processinfo/8be4cd9f-124a-41f9-80f4-f267ced63c86.json +0 -1
  336. package/.nyc_output/processinfo/a63b0924-fd09-4e30-974f-cb4be2243b66.json +0 -1
  337. package/.nyc_output/processinfo/d3d1fa81-57ca-4287-8fbe-96466b0e5aa1.json +0 -1
  338. package/.nyc_output/processinfo/e921974a-3076-4e89-8dbf-6f37bef10583.json +0 -1
  339. package/.nyc_output/processinfo/fb790367-ba9f-474f-84c1-f836caf9f50a.json +0 -1
  340. package/extras/testcafe/Dockerfile +0 -48
  341. package/extras/testcafe/docker-entrypoint.sh +0 -27
  342. package/extras/testcafe/page-models/core/account.js +0 -75
  343. package/extras/testcafe/page-models/core/base-collection.js +0 -41
  344. package/extras/testcafe/page-models/core/base-page.js +0 -25
  345. package/extras/testcafe/page-models/core/groups.js +0 -36
  346. package/extras/testcafe/page-models/core/index.js +0 -140
  347. package/extras/testcafe/page-models/core/layout.js +0 -145
  348. package/extras/testcafe/page-models/core/members.js +0 -98
  349. package/extras/testcafe/page-models/core/organisations.js +0 -76
  350. package/extras/testcafe/page-models/core/screens.js +0 -99
  351. package/extras/testcafe/page-models/core/tags.js +0 -21
  352. package/extras/testcafe/page-models/map/add-layer.js +0 -51
  353. package/extras/testcafe/page-models/map/catalog.js +0 -132
  354. package/extras/testcafe/page-models/map/index.js +0 -36
  355. package/extras/testcafe/page-models/map/map-activity.js +0 -42
  356. package/extras/testcafe/page-models/map/timeline.js +0 -67
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.base-map.js"],"names":["window","nezasa","iso8601","L","Icon","Default","prototype","_getIconUrl","mergeOptions","iconRetinaUrl","require","iconUrl","shadowUrl","PM","setOptIn","data","layers","methods","refreshMap","map","invalidateSize","setupMap","domEl","options","viewerOptions","activityOptions","engine","viewer","Object","assign","zoomControl","pm","undefined","pmIgnore","reInitLayer","setLang","i18next","language","LeafletEvents","Map","_","get","setupScaleControl","setupGeolocateControl","$emit","scaleControl","control","scale","addTo","locateControl","locate","locateOptions","maxZoom","watch","setView","timeout","enableHighAccuracy","strings","title","$t","metersUnit","feetUnit","popup","outsideMapBoundsMsg","_container","style","display","processLeafletLayerOptions","processedOptions","cloneDeep","leafletOptions","leaflet","leafletObjectOptions","forEach","option","set","attribution","createLeafletPane","paneOrZIndex","paneName","toString","pane","getPane","createPane","leafletPanes","getLeafletPaneByName","removeLeafletPane","updateLeafletPanesVisibility","panes","zoom","getZoom","forOwn","includes","has","createLeafletLayer","zIndex","paneOptions","name","layer","source","type","registerLeafletConstructor","constructor","leafletFactory","push","createLayer","i","length","createLeafletTimedWmsLayer","timeDimension","timeRange","split","currentTime","Time","getCurrentTime","setCurrentTime","datetime","_timeDimension","hasLayer","isLayerVisible","leafetLayer","getLeafletLayerByName","isLayerDisabled","minZoom","isDisabled","updateLayerDisabled","wasDisabled","getLayerByName","leafletLayers","getLayers","filter","values","hasLayers","showLayer","leafletLayer","error","logger","addLayer","isVisible","bringToBack","hideLayer","removeLayer","$set","renameLayer","previousName","newName","$delete","clearLayers","keys","toGeoJson","toGeoJSON","zoomToLayer","center","getCenter","longitude","latitude","getBounds","fitBounds","zoomToBounds","bounds","zoomToBBox","bbox","zoomLevel","LatLng","lng","lat","viewBounds","south","getSouth","west","getWest","north","getNorth","east","getEast","showUserLocation","position","$geolocation","start","hideUserLocation","stop","isUserLocationVisible","_active","setCursor","className","DomUtil","addClass","isCursor","hasClass","unsetCursor","removeClass","onCurrentMapTimeChanged","onMapZoomChanged","zoomLayers","$or","$exists","created","$on","$events","beforeDestroy","$off","destroyed","remove"],"mappings":";;;;;;AAAA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;AAlBA;AAYwC;;;AAOxCA,OAAOC,MAAP,GAAgB,EAAEC,kCAAF,CAAY;;AAE5B;AAFgB,CAAhB,CAGA,OAAOC,kBAAEC,IAAF,CAAOC,OAAP,CAAeC,SAAf,CAAyBC,WAAhC;AACAJ,kBAAEC,IAAF,CAAOC,OAAP,CAAeG,YAAf,CAA4B;AAC1BC,iBAAeC,QAAQ,wCAAR,CADW;AAE1BC,WAASD,QAAQ,qCAAR,CAFiB;AAG1BE,aAAWF,QAAQ,uCAAR;AAHe,CAA5B;AAKA;AACAP,kBAAEU,EAAF,CAAKC,QAAL,CAAc,IAAd;;kBAEe;AACbC,SAAQ;AACN,WAAO;AACLC,cAAQ;AADH,KAAP;AAGD,GALY;AAMbC,WAAS;AACPC,iBAAc;AACZ,UAAI,KAAKC,GAAT,EAAc,KAAKA,GAAL,CAASC,cAAT;AACf,KAHM;AAIPC,aAAUC,KAAV,EAAiBC,OAAjB,EAA0B;AACxB,YAAMC,gBAAgBD,WAAW,KAAKE,eAAL,CAAqBC,MAArB,CAA4BC,MAA7D;AACA;AACA,WAAKR,GAAL,GAAWhB,kBAAEgB,GAAF,CAAMG,KAAN,EAAaM,OAAOC,MAAP,CAAc,EAAEC,aAAa,KAAf,EAAd,EAAsCN,aAAtC,CAAb,CAAX;AACA;AACA,UAAI,KAAKL,GAAL,CAASY,EAAT,KAAgBC,SAApB,EAA+B;AAC7B,aAAKb,GAAL,CAASI,OAAT,CAAiBU,QAAjB,GAA4B,KAA5B;AACA9B,0BAAEU,EAAF,CAAKqB,WAAL,CAAiB,KAAKf,GAAtB;AACA,aAAKA,GAAL,CAASY,EAAT,CAAYI,OAAZ,CAAoBC,kBAAQC,QAA5B;AACD;AACD,oCAAkB,KAAKlB,GAAvB,EAA4BmB,qBAAcC,GAA1C,EAA+C,IAA/C,EAAqDf,aAArD;AACA,UAAIgB,iBAAEC,GAAF,CAAMjB,aAAN,EAAqB,OAArB,EAA8B,IAA9B,CAAJ,EAAyC,KAAKkB,iBAAL;AACzC,UAAIF,iBAAEC,GAAF,CAAMjB,aAAN,EAAqB,WAArB,EAAkC,IAAlC,CAAJ,EAA6C,KAAKmB,qBAAL;AAC7C,WAAKC,KAAL,CAAW,WAAX;AACD,KAlBM;AAmBPF,wBAAqB;AACnB;AACA,WAAKG,YAAL,GAAoB,IAAI1C,kBAAE2C,OAAF,CAAUC,KAAd,EAApB,CAFmB,CAEyB;AAC5C,WAAKF,YAAL,CAAkBG,KAAlB,CAAwB,KAAK7B,GAA7B;AACD,KAvBM;AAwBPwB,4BAAyB;AACvB,WAAKM,aAAL,GAAqB,IAAI9C,kBAAE2C,OAAF,CAAUI,MAAd,CAAqB,EAAG;AAC3CC,uBAAe;AACbC,mBAAS,EADI;AAEbC,iBAAO,KAFM;AAGbC,mBAAS,KAHI;AAIbC,mBAAS,KAJI;AAKbC,8BAAoB;AALP,SADyB;AAQxCC,iBAAS;AACPC,iBAAO,KAAKC,EAAL,CAAQ,mBAAR,CADA;AAEPC,sBAAY,KAAKD,EAAL,CAAQ,oBAAR,CAFL;AAGPE,oBAAU,KAAKF,EAAL,CAAQ,kBAAR,CAHH;AAIPG,iBAAO,KAAKH,EAAL,CAAQ,mBAAR,CAJA;AAKPI,+BAAqB,KAAKJ,EAAL,CAAQ,gCAAR;AALd;AAR+B,OAArB,CAArB;AAgBA,WAAKV,aAAL,CAAmBD,KAAnB,CAAyB,KAAK7B,GAA9B;AACA;AACA,WAAK8B,aAAL,CAAmBe,UAAnB,CAA8BC,KAA9B,CAAoCC,OAApC,GAA8C,MAA9C;AACD,KA5CM;AA6CPC,+BAA4B5C,OAA5B,EAAqC;AACnC;AACA,YAAM6C,mBAAmB5B,iBAAE6B,SAAF,CAAY9C,OAAZ,CAAzB;AACA,YAAM+C,iBAAiBF,iBAAiBG,OAAxC;AACA;AACA,WAAKC,oBAAL,CAA0BC,OAA1B,CAAkCC,UAAU;AAC1C,YAAI,OAAOlC,iBAAEC,GAAF,CAAM6B,cAAN,EAAsBI,MAAtB,CAAP,KAAyC,QAA7C,EAAuD;AACrD;AACAlC,2BAAEmC,GAAF,CAAML,cAAN,EAAsBI,MAAtB,EAA8BlC,iBAAEC,GAAF,CAAMtC,iBAAN,EAASqC,iBAAEC,GAAF,CAAM6B,cAAN,EAAsBI,MAAtB,CAAT,CAA9B;AACD;AACF,OALD;AAMA;AACAJ,qBAAeM,WAAf,GAA6BR,iBAAiBQ,WAA9C;AACA,aAAOR,gBAAP;AACD,KA3DM;AA4DPS,sBAAmBC,YAAnB,EAAiC;AAC/B;AACA,YAAMC,WAAWD,aAAaE,QAAb,EAAjB;AACA,UAAIC,OAAO,KAAK9D,GAAL,CAAS+D,OAAT,CAAiBH,QAAjB,CAAX;AACA,UAAI,CAACE,IAAL,EAAW;AACTA,eAAO,KAAK9D,GAAL,CAASgE,UAAT,CAAoBJ,QAApB,CAAP;AACA,YAAI,OAAOD,YAAP,KAAwB,QAA5B,EAAsCtC,iBAAEmC,GAAF,CAAMM,IAAN,EAAY,cAAZ,EAA4BH,YAA5B,EAAtC,KACKtC,iBAAEmC,GAAF,CAAMM,IAAN,EAAY,cAAZ,EAA4B,GAA5B,EAHI,CAG6B;AACvC;AACD,WAAKG,YAAL,CAAkBL,QAAlB,IAA8BE,IAA9B;AACA,aAAOA,IAAP;AACD,KAvEM;AAwEPI,yBAAsBP,YAAtB,EAAoC;AAClC,YAAMC,WAAWD,aAAaE,QAAb,EAAjB;AACA,aAAO,KAAKI,YAAL,CAAkBL,QAAlB,CAAP;AACD,KA3EM;AA4EPO,sBAAmBR,YAAnB,EAAiC;AAC/B,YAAMC,WAAWD,aAAaE,QAAb,EAAjB;AACA,YAAMC,OAAO,KAAKI,oBAAL,CAA0BN,QAA1B,CAAb;AACA,UAAI,CAACE,IAAL,EAAW;AACX,aAAO,KAAKG,YAAL,CAAkBL,QAAlB,CAAP;AACD,KAjFM;AAkFPQ,iCAA8BC,KAA9B,EAAqC;AACnC,YAAMC,OAAO,KAAKtE,GAAL,CAASuE,OAAT,EAAb;AACA;AACAlD,uBAAEmD,MAAF,CAAS,KAAKP,YAAd,EAA4B,CAACH,IAAD,EAAOF,QAAP,KAAoB;AAC9C;AACA,YAAIS,SAASA,MAAMI,QAAN,CAAeb,QAAf,CAAb,EAAuC;AACvC,YAAI,CAACvC,iBAAEqD,GAAF,CAAMZ,IAAN,EAAY,SAAZ,CAAD,IAA2B,CAACzC,iBAAEqD,GAAF,CAAMZ,IAAN,EAAY,SAAZ,CAAhC,EAAwD;AACxD,YAAI,CAACA,KAAKhB,KAAV,EAAiBgB,KAAKhB,KAAL,GAAa,EAAb;AACjB,YAAIzB,iBAAEqD,GAAF,CAAMZ,IAAN,EAAY,SAAZ,KAA2BQ,OAAOjD,iBAAEC,GAAF,CAAMwC,IAAN,EAAY,SAAZ,CAAtC,EAA+D;AAC7DA,eAAKhB,KAAL,CAAWC,OAAX,GAAqB,MAArB;AACA;AACD;AACD,YAAI1B,iBAAEqD,GAAF,CAAMZ,IAAN,EAAY,SAAZ,KAA2BQ,OAAOjD,iBAAEC,GAAF,CAAMwC,IAAN,EAAY,SAAZ,CAAtC,EAA+D;AAC7DA,eAAKhB,KAAL,CAAWC,OAAX,GAAqB,MAArB;AACA;AACD;AACDe,aAAKhB,KAAL,CAAWC,OAAX,GAAqB,OAArB;AACD,OAdD;AAeD,KApGM;AAqGP4B,uBAAoBvE,OAApB,EAA6B;AAC3B,YAAM+C,iBAAiB/C,QAAQgD,OAAR,IAAmBhD,OAA1C;AACA;AACA;AACA;AACA;AACA;AACA,UAAIwE,SAASvD,iBAAEqD,GAAF,CAAMvB,cAAN,EAAsB,QAAtB,CAAb;AACA,UAAIyB,MAAJ,EAAY;AACVA,iBAASvD,iBAAEC,GAAF,CAAM6B,cAAN,EAAsB,QAAtB,CAAT;AACA,aAAKO,iBAAL,CAAuBkB,MAAvB;AACA;AACAvD,yBAAEmC,GAAF,CAAML,cAAN,EAAsB,MAAtB,EAA8ByB,OAAOf,QAAP,EAA9B;AACD;AACD;AACA,YAAMQ,QAAQhD,iBAAEC,GAAF,CAAM6B,cAAN,EAAsB,OAAtB,CAAd;AACA,UAAIkB,KAAJ,EAAW;AACTA,cAAMf,OAAN,CAAcuB,eAAe;AAC3B,gBAAMf,OAAO,KAAKJ,iBAAL,CAAuBmB,YAAYC,IAAZ,IAAoBD,YAAYD,MAAvD,CAAb;AACAnE,iBAAOC,MAAP,CAAcoD,IAAd,EAAoBe,WAApB;AACD,SAHD;AAIA,aAAKT,4BAAL,CAAkCC,MAAMrE,GAAN,CAAU6E,eAAeA,YAAYC,IAAZ,IAAoBD,YAAYD,MAAZ,CAAmBf,QAAnB,EAA7C,CAAlC;AACD;;AAED,UAAIkB,KAAJ;AACA;AACA;AACA,UAAI5B,eAAe6B,MAAnB,EAA2B;AACzB,cAAMA,SAAS7B,eAAe6B,MAA9B;AACA;AACA;AACA,eAAO7B,eAAe6B,MAAtB;AACAD,gBAAQ1D,iBAAEC,GAAF,CAAMtC,iBAAN,EAASmE,eAAe8B,IAAxB,EAA8BD,MAA9B,EAAsC7B,cAAtC,CAAR;AACD,OAND,MAMO;AACL4B,gBAAQ1D,iBAAEC,GAAF,CAAMtC,iBAAN,EAASmE,eAAe8B,IAAxB,EAA8B9B,cAA9B,CAAR;AACD;AACD,aAAO4B,KAAP;AACD,KA1IM;AA2IPG,+BAA4BC,WAA5B,EAAyC;AACvC,WAAKC,cAAL,CAAoBC,IAApB,CAAyBF,WAAzB;AACD,KA7IM;AA8IDG,eAAN,CAAmBlF,OAAnB,EAA4B;AAAA;;AAAA;AAC1B,cAAM6C,mBAAmB,MAAKD,0BAAL,CAAgC5C,OAAhC,CAAzB;AACA,YAAI2E,KAAJ;AACA;AACA,aAAK,IAAIQ,IAAI,CAAb,EAAgBA,IAAI,MAAKH,cAAL,CAAoBI,MAAxC,EAAgDD,GAAhD,EAAqD;AACnD,gBAAMJ,cAAc,MAAKC,cAAL,CAAoBG,CAApB,CAApB;AACAR,kBAAQ,MAAMI,YAAYlC,gBAAZ,CAAd;AACA,cAAI8B,KAAJ,EAAW;AACZ;AACD;AACA,eAAQA,SAAS,MAAKJ,kBAAL,CAAwB1B,gBAAxB,CAAjB;AAV0B;AAW3B,KAzJM;AA0JPwC,+BAA4BrF,OAA5B,EAAqC;AACnC,YAAM+C,iBAAiB/C,QAAQgD,OAAR,IAAmBhD,OAA1C;AACA;AACA,UAAI+C,eAAe8B,IAAf,KAAwB,eAA5B,EAA6C;AAC7C,UAAIF,QAAQ,KAAKJ,kBAAL,CAAwBvE,OAAxB,CAAZ;AACA;AACA,YAAMsF,gBAAgBrE,iBAAEC,GAAF,CAAM6B,cAAN,EAAsB,eAAtB,CAAtB;AACA,UAAIuC,aAAJ,EAAmB;AACjB;AACA;AACA,cAAMC,YAAYtE,iBAAEC,GAAF,CAAMoE,aAAN,EAAqB,OAArB,CAAlB;AACA,YAAK,OAAOC,SAAP,KAAqB,QAAtB,IAAoCA,UAAUC,KAAV,CAAgB,GAAhB,EAAqBJ,MAArB,KAAgC,CAAxE,EAA4E;AAC1EnE,2BAAEmC,GAAF,CAAMkC,aAAN,EAAqB,OAArB,EAA+B,GAAEC,SAAU,MAA3C;AACD;AACD;AACAZ,gBAAQ,KAAKJ,kBAAL,CAAwB;AAC9BM,gBAAM,yBADwB;AAE9BD,kBAAQD,KAFsB;AAG9BW,yBAAe1G,kBAAE0G,aAAF,CAAgBA,aAAhB,CAHe;AAI9BG,uBAAaC,WAAKC,cAAL;AAJiB,SAAxB,CAAR;AAMA;AACAhB,cAAMiB,cAAN,GAAwBC,QAAD,IAAc;AAAElB,gBAAMmB,cAAN,CAAqBF,cAArB,CAAoCC,QAApC;AAA+C,SAAtF;AACD;AACD,aAAOlB,KAAP;AACD,KAnLM;AAoLPoB,aAAUrB,IAAV,EAAgB;AACd,aAAOzD,iBAAEqD,GAAF,CAAM,KAAK7E,MAAX,EAAmBiF,IAAnB,CAAP;AACD,KAtLM;AAuLPsB,mBAAgBtB,IAAhB,EAAsB;AACpB,YAAMuB,cAAc,KAAKC,qBAAL,CAA2BxB,IAA3B,CAApB;AACA,aAAOuB,eAAe,KAAKrG,GAAL,CAASmG,QAAT,CAAkBE,WAAlB,CAAtB;AACD,KA1LM;AA2LPE,oBAAiBxB,KAAjB,EAAwB;AACtB,YAAMyB,UAAUnF,iBAAEC,GAAF,CAAMyD,KAAN,EAAa,iBAAb,CAAhB;AACA,YAAM9C,UAAUZ,iBAAEC,GAAF,CAAMyD,KAAN,EAAa,iBAAb,CAAhB;AACA,UAAI0B,aAAa,KAAjB;AACA,UAAID,WAAY,KAAKxG,GAAL,CAASuE,OAAT,KAAqBiC,OAArC,EAA+CC,aAAa,IAAb;AAC/C,UAAIxE,WAAY,KAAKjC,GAAL,CAASuE,OAAT,KAAqBtC,OAArC,EAA+CwE,aAAa,IAAb;AAC/C,aAAOA,UAAP;AACD,KAlMM;AAmMPC,wBAAqB3B,KAArB,EAA4B;AAC1B,YAAM4B,cAAc5B,MAAM0B,UAA1B;AACA1B,YAAM0B,UAAN,GAAmB,KAAKF,eAAL,CAAqBxB,KAArB,CAAnB;AACA,UAAIA,MAAM0B,UAAN,KAAqBE,WAAzB,EAAsC,KAAKlF,KAAL,CAAWkF,cAAc,eAAd,GAAgC,gBAA3C,EAA6D5B,KAA7D;AACvC,KAvMM;AAwMP6B,mBAAgB9B,IAAhB,EAAsB;AACpB,aAAO,KAAKjF,MAAL,CAAYiF,IAAZ,CAAP;AACD,KA1MM;AA2MPwB,0BAAuBxB,IAAvB,EAA6B;AAC3B,aAAO,KAAK+B,aAAL,CAAmB/B,IAAnB,CAAP;AACD,KA7MM;AA8MPgC,cAAWC,SAAS,EAApB,EAAwB;AACtB,aAAO1F,iBAAE2F,MAAF,CAAS,KAAKnH,MAAd,EAAsBkH,MAAtB,CAA6B,oBAAKA,MAAL,CAA7B,CAAP;AACD,KAhNM;AAiNPE,cAAWF,SAAS,EAApB,EAAwB;AACtB,aAAO1F,iBAAE2F,MAAF,CAAS,KAAKnH,MAAd,EAAsBkH,MAAtB,CAA6B,oBAAKA,MAAL,CAA7B,EAA2CvB,MAA3C,GAAoD,CAA3D;AACD,KAnNM;AAoND0B,aAAN,CAAiBpC,IAAjB,EAAuB;AAAA;;AAAA;AACrB;AACA,cAAMC,QAAQ,OAAK6B,cAAL,CAAoB9B,IAApB,CAAd;AACA,YAAI,CAACC,KAAL,EAAY;AACZ;AACA,YAAI,OAAKqB,cAAL,CAAoBtB,IAApB,CAAJ,EAA+B;;AAE/B;AACA,YAAIqC,eAAe,OAAKb,qBAAL,CAA2BxB,IAA3B,CAAnB;AACA,YAAI,CAACqC,YAAL,EAAmB;AACjB,cAAI;AACFA,2BAAe,MAAM,OAAK7B,WAAL,CAAiBP,KAAjB,CAArB;AACD,WAFD,CAEE,OAAOqC,KAAP,EAAc;AACdC,+BAAOD,KAAP,CAAaA,KAAb;AACA;AACD;AACF;AACD;AACA,eAAKP,aAAL,CAAmB/B,IAAnB,IAA2BqC,YAA3B;AACA,eAAKnH,GAAL,CAASsH,QAAT,CAAkBH,YAAlB;AACApC,cAAMwC,SAAN,GAAkB,IAAlB;;AAEA;AACA,YAAIxC,MAAME,IAAN,KAAe,WAAnB,EAAgCkC,aAAaK,WAAb;AAChC;AACA,YAAI,OAAOL,aAAanB,cAApB,KAAuC,UAA3C,EAAuDmB,aAAanB,cAAb,CAA4BF,WAAKC,cAAL,EAA5B;AACvD,eAAKtE,KAAL,CAAW,aAAX,EAA0BsD,KAA1B,EAAiCoC,YAAjC;AA1BqB;AA2BtB,KA/OM;AAgPPM,cAAW3C,IAAX,EAAiB;AACf;AACA,YAAMC,QAAQ,KAAK6B,cAAL,CAAoB9B,IAApB,CAAd;AACA,UAAI,CAACC,KAAL,EAAY;AACZ;AACA,UAAI,CAAC,KAAKqB,cAAL,CAAoBtB,IAApB,CAAL,EAAgC;AAChCC,YAAMwC,SAAN,GAAkB,KAAlB;AACA;AACA,YAAMJ,eAAe,KAAKN,aAAL,CAAmB/B,IAAnB,CAArB;AACA,WAAK9E,GAAL,CAAS0H,WAAT,CAAqBP,YAArB;AACA,YAAM9C,QAAQhD,iBAAEC,GAAF,CAAMyD,KAAN,EAAa,eAAb,CAAd;AACA,UAAIV,KAAJ,EAAWA,MAAMf,OAAN,CAAcQ,QAAQ,KAAKK,iBAAL,CAAuBL,KAAKgB,IAAL,IAAahB,KAAKc,MAAzC,CAAtB;AACX,WAAKnD,KAAL,CAAW,cAAX,EAA2BsD,KAA3B,EAAkCoC,YAAlC;AACD,KA7PM;AA8PDG,YAAN,CAAgBvC,KAAhB,EAAuB;AAAA;;AAAA;AACrB,YAAIA,SAAS,CAAC,OAAKoB,QAAL,CAAcpB,MAAMD,IAApB,CAAd,EAAyC;AACvCC,gBAAMwC,SAAN,GAAkB,KAAlB;AACAxC,gBAAM0B,UAAN,GAAmB,OAAKF,eAAL,CAAqBxB,KAArB,CAAnB;AACA;AACA,iBAAK4C,IAAL,CAAU,OAAK9H,MAAf,EAAuBkF,MAAMD,IAA7B,EAAmCC,KAAnC;AACA,iBAAKtD,KAAL,CAAW,aAAX,EAA0BsD,KAA1B;AACA;AACA,cAAI1D,iBAAEC,GAAF,CAAMyD,KAAN,EAAa,mBAAb,EAAkC,KAAlC,CAAJ,EAA8C,MAAM,OAAKmC,SAAL,CAAenC,MAAMD,IAArB,CAAN;AAC/C;AACD,eAAOC,KAAP;AAVqB;AAWtB,KAzQM;AA0QP6C,gBAAaC,YAAb,EAA2BC,OAA3B,EAAoC;AAClC,YAAM/C,QAAQ,KAAK6B,cAAL,CAAoBiB,YAApB,CAAd;AACA,YAAMV,eAAe,KAAKb,qBAAL,CAA2BuB,YAA3B,CAArB;AACA,UAAI,CAAC9C,KAAL,EAAY;AACZ;AACA,UAAIoC,YAAJ,EAAkB;AAChB,aAAKN,aAAL,CAAmBiB,OAAnB,IAA8BX,YAA9B;AACA,eAAO,KAAKN,aAAL,CAAmBgB,YAAnB,CAAP;AACD;AACD;AACA,WAAKF,IAAL,CAAU,KAAK9H,MAAf,EAAuBiI,OAAvB,EAAgC/C,KAAhC;AACA,WAAKgD,OAAL,CAAa,KAAKlI,MAAlB,EAA0BgI,YAA1B;AACD,KAtRM;AAuRPH,gBAAa5C,IAAb,EAAmB;AACjB,YAAMC,QAAQ,KAAK6B,cAAL,CAAoB9B,IAApB,CAAd;AACA,UAAI,CAACC,KAAL,EAAY;AACZ;AACA,UAAIA,MAAMwC,SAAV,EAAqB,KAAKE,SAAL,CAAe3C,IAAf;AACrB;AACA,WAAKiD,OAAL,CAAa,KAAKlI,MAAlB,EAA0BkF,MAAMD,IAAhC;AACA,aAAO,KAAK+B,aAAL,CAAmB/B,IAAnB,CAAP;AACA,WAAKrD,KAAL,CAAW,eAAX,EAA4BsD,KAA5B;AACD,KAhSM;AAiSPiD,kBAAe;AACbvH,aAAOwH,IAAP,CAAY,KAAKpI,MAAjB,EAAyByD,OAAzB,CAAkCyB,KAAD,IAAW,KAAK2C,WAAL,CAAiB3C,KAAjB,CAA5C;AACD,KAnSM;AAoSPmD,cAAWpD,IAAX,EAAiB;AACf,YAAMC,QAAQ,KAAKuB,qBAAL,CAA2BxB,IAA3B,CAAd;AACA,UAAI,CAACC,KAAD,IAAW,OAAOA,MAAMoD,SAAb,KAA2B,UAA1C,EAAuD;AACvD,aAAOpD,MAAMoD,SAAN,EAAP;AACD,KAxSM;AAySPC,gBAAatD,IAAb,EAAmB1E,OAAnB,EAA4B;AAC1B,YAAM2E,QAAQ,KAAK6B,cAAL,CAAoB9B,IAApB,CAAd;AACA,UAAI,CAACC,KAAL,EAAY;AACZ;AACA;AACA,UAAI,KAAKwB,eAAL,CAAqBxB,KAArB,CAAJ,EAAiC;AAC/B,cAAMyB,UAAUnF,iBAAEC,GAAF,CAAMyD,KAAN,EAAa,iBAAb,CAAhB;AACA,YAAIyB,OAAJ,EAAa;AACX,gBAAM6B,SAAS,KAAKC,SAAL,EAAf;AACA,eAAKD,MAAL,CAAYA,OAAOE,SAAnB,EAA8BF,OAAOG,QAArC,EAA+ChC,OAA/C;AACA;AACD;AACF;AACD,YAAMW,eAAe,KAAKb,qBAAL,CAA2BxB,IAA3B,CAArB;AACA,UAAIqC,gBAAgBA,aAAasB,SAAb,EAApB,EAA8C,KAAKzI,GAAL,CAAS0I,SAAT,CAAmBvB,aAAasB,SAAb,EAAnB,EAA6CrI,OAA7C;AAC/C,KAxTM;AAyTPuI,iBAAcC,MAAd,EAAsB;AACpB,WAAK5I,GAAL,CAAS0I,SAAT,CAAmBE,MAAnB;AACD,KA3TM;AA4TPC,eAAYC,IAAZ,EAAkB;AAChB,WAAKH,YAAL,CAAkB,CAAC,CAACG,KAAK,CAAL,CAAD,EAAUA,KAAK,CAAL,CAAV,CAAD,EAAqB,CAACA,KAAK,CAAL,CAAD,EAAUA,KAAK,CAAL,CAAV,CAArB,CAAlB;AACD,KA9TM;AA+TPT,WAAQE,SAAR,EAAmBC,QAAnB,EAA6BO,SAA7B,EAAwC3I,OAAxC,EAAiD;AAC/C,WAAKJ,GAAL,CAASmC,OAAT,CAAiB,IAAInD,kBAAEgK,MAAN,CAAaR,QAAb,EAAuBD,SAAvB,CAAjB,EAAoDQ,aAAa,KAAK/I,GAAL,CAASuE,OAAT,EAAjE,EAAqFnE,OAArF;AACD,KAjUM;AAkUPkI,gBAAa;AACX,YAAMD,SAAS,KAAKrI,GAAL,CAASsI,SAAT,EAAf;AACA,YAAMhE,OAAO,KAAKtE,GAAL,CAASuE,OAAT,EAAb;AACA,aAAO;AACLgE,mBAAWF,OAAOY,GADb;AAELT,kBAAUH,OAAOa,GAFZ;AAGLH,mBAAWzE;AAHN,OAAP;AAKD,KA1UM;AA2UPmE,gBAAa;AACX,WAAKU,UAAL,GAAkB,KAAKnJ,GAAL,CAASyI,SAAT,EAAlB;AACA,YAAMW,QAAQ,KAAKD,UAAL,CAAgBE,QAAhB,EAAd;AACA,YAAMC,OAAO,KAAKH,UAAL,CAAgBI,OAAhB,EAAb;AACA,YAAMC,QAAQ,KAAKL,UAAL,CAAgBM,QAAhB,EAAd;AACA,YAAMC,OAAO,KAAKP,UAAL,CAAgBQ,OAAhB,EAAb;AACA,aAAO,CAAC,CAACP,KAAD,EAAQE,IAAR,CAAD,EAAgB,CAACE,KAAD,EAAQE,IAAR,CAAhB,CAAP;AACD,KAlVM;AAmVPE,uBAAoB;AAClB,YAAMC,WAAW,KAAKC,YAAL,CAAkBxI,GAAlB,GAAwBuI,QAAzC;AACA,UAAI,KAAK/H,aAAT,EAAwB;AACtB,aAAKA,aAAL,CAAmBiI,KAAnB;AACD,OAFD,MAEO,IAAIF,QAAJ,EAAc;AACnB,aAAKxB,MAAL,CAAYwB,SAAStB,SAArB,EAAgCsB,SAASrB,QAAzC;AACD;AACF,KA1VM;AA2VPwB,uBAAoB;AAClB,UAAI,KAAKlI,aAAT,EAAwB;AACtB,aAAKA,aAAL,CAAmBmI,IAAnB;AACD;AACF,KA/VM;AAgWPC,4BAAyB;AACvB,aAAQ,KAAKpI,aAAL,IAAsB,KAAKA,aAAL,CAAmBqI,OAAjD;AACD,KAlWM;AAmWPC,cAAWC,SAAX,EAAsB;AACpBrL,wBAAEsL,OAAF,CAAUC,QAAV,CAAmB,KAAKvK,GAAL,CAAS6C,UAA5B,EAAwCwH,SAAxC;AACD,KArWM;AAsWPG,aAAUH,SAAV,EAAqB;AACnB,aAAOrL,kBAAEsL,OAAF,CAAUG,QAAV,CAAmB,KAAKzK,GAAL,CAAS6C,UAA5B,EAAwCwH,SAAxC,CAAP;AACD,KAxWM;AAyWPK,gBAAaL,SAAb,EAAwB;AACtBrL,wBAAEsL,OAAF,CAAUK,WAAV,CAAsB,KAAK3K,GAAL,CAAS6C,UAA/B,EAA2CwH,SAA3C;AACD,KA3WM;AA4WPO,4BAAyB3E,QAAzB,EAAmC;AACjC5E,uBAAEiC,OAAF,CAAU,KAAKuD,aAAf,EAA8BM,gBAAgB;AAC5C,YAAI,OAAOA,aAAanB,cAApB,KAAuC,UAA3C,EAAuDmB,aAAanB,cAAb,CAA4BC,QAA5B;AACxD,OAFD;AAGD,KAhXM;AAiXP4E,uBAAoB;AAAA;;AAClB,WAAKzG,4BAAL;AACA;AACA,YAAM0G,aAAazJ,iBAAE2F,MAAF,CAAS,KAAKnH,MAAd,EAAsBkH,MAAtB,CAA6B,oBAAK;AACnDgE,aAAK,CAAC,EAAE,mBAAmB,EAAEC,SAAS,IAAX,EAArB,EAAD,EAA2C,EAAE,mBAAmB,EAAEA,SAAS,IAAX,EAArB,EAA3C;AAD8C,OAAL,CAA7B,CAAnB;AAGAF,iBAAWxH,OAAX;AAAA,qCAAmB,WAAMyB,KAAN,EAAe;AAAE,iBAAK2B,mBAAL,CAAyB3B,KAAzB;AAAiC,SAArE;;AAAA;AAAA;AAAA;AAAA;AACD;AAxXM,GANI;AAgYbkG,YAAW;AACT,SAAKpE,aAAL,GAAqB,EAArB;AACA,SAAK5C,YAAL,GAAoB,EAApB;AACA,SAAKmB,cAAL,GAAsB,EAAtB;AACA;AACA,SAAK/B,oBAAL,GAA4B,CAAC,KAAD,EAAQ,iBAAR,CAA5B;AACA;AACA,SAAK6B,0BAAL,CAAgC,KAAKO,0BAArC;AACA,SAAKyF,GAAL,CAAS,SAAT,EAAoB,KAAKL,gBAAzB;AACA,SAAKM,OAAL,CAAaD,GAAb,CAAiB,2BAAjB,EAA8C,KAAKN,uBAAnD;AACD,GA1YY;AA2YbQ,kBAAiB;AACf,SAAKpD,WAAL;AACA,SAAKqD,IAAL,CAAU,SAAV,EAAqB,KAAKR,gBAA1B;AACA,SAAKM,OAAL,CAAaE,IAAb,CAAkB,2BAAlB,EAA+C,KAAKT,uBAApD;AACD,GA/YY;AAgZbU,cAAa;AACX,QAAI,KAAKtL,GAAT,EAAc,KAAKA,GAAL,CAASuL,MAAT;AACf;AAlZY,C","file":"mixin.base-map.js","sourcesContent":["import _ from 'lodash'\r\nimport sift from 'sift'\r\nimport logger from 'loglevel'\r\nimport L from 'leaflet'\r\nimport i18next from 'i18next'\r\nimport 'leaflet/dist/leaflet.css'\r\n// This ensure we have all required plugins\r\nimport 'leaflet-fa-markers/L.Icon.FontAwesome.css'\r\nimport 'leaflet-fa-markers/L.Icon.FontAwesome.js'\r\nimport 'leaflet-fullscreen'\r\nimport 'leaflet-fullscreen/dist/leaflet.fullscreen.css'\r\nimport 'leaflet.markercluster/dist/MarkerCluster.css'\r\nimport 'leaflet.markercluster/dist/MarkerCluster.Default.css'\r\nimport 'leaflet.markercluster'\r\nimport 'leaflet.vectorgrid/dist/Leaflet.VectorGrid.bundled.js'\r\nimport 'Leaflet.Geodesic'\r\nimport 'leaflet.locatecontrol'\r\nimport 'leaflet.locatecontrol/dist/L.Control.Locate.css'\r\nimport iso8601 from 'iso8601-js-period' // Required by leaflet.timedimension\r\nimport 'leaflet-timedimension/dist/leaflet.timedimension.src.js'\r\nimport 'leaflet-timedimension/dist/leaflet.timedimension.control.css'\r\nimport '@geoman-io/leaflet-geoman-free'\r\nimport '@geoman-io/leaflet-geoman-free/dist/leaflet-geoman.css'\r\nimport { Time } from '../../../../core/client/time'\r\nimport { LeafletEvents, bindLeafletEvents } from '../../utils'\r\nwindow.nezasa = { iso8601 } // https://github.com/socib/Leaflet.TimeDimension/issues/124\r\n\r\n// Fix to make Leaflet assets be correctly inserted by webpack\r\ndelete L.Icon.Default.prototype._getIconUrl\r\nL.Icon.Default.mergeOptions({\r\n iconRetinaUrl: require('leaflet/dist/images/marker-icon-2x.png'),\r\n iconUrl: require('leaflet/dist/images/marker-icon.png'),\r\n shadowUrl: require('leaflet/dist/images/marker-shadow.png')\r\n})\r\n// Do not create geoman structs everywhere\r\nL.PM.setOptIn(true)\r\n\r\nexport default {\r\n data () {\r\n return {\r\n layers: {}\r\n }\r\n },\r\n methods: {\r\n refreshMap () {\r\n if (this.map) this.map.invalidateSize()\r\n },\r\n setupMap (domEl, options) {\r\n const viewerOptions = options || this.activityOptions.engine.viewer\r\n // Initialize the map\r\n this.map = L.map(domEl, Object.assign({ zoomControl: false }, viewerOptions))\r\n // Make sure geoman is initialized on the map\r\n if (this.map.pm === undefined) {\r\n this.map.options.pmIgnore = false\r\n L.PM.reInitLayer(this.map)\r\n this.map.pm.setLang(i18next.language)\r\n }\r\n bindLeafletEvents(this.map, LeafletEvents.Map, this, viewerOptions)\r\n if (_.get(viewerOptions, 'scale', true)) this.setupScaleControl()\r\n if (_.get(viewerOptions, 'geolocate', true)) this.setupGeolocateControl()\r\n this.$emit('map-ready')\r\n },\r\n setupScaleControl () {\r\n // Add a scale control\r\n this.scaleControl = new L.control.scale() // eslint-disable-line\r\n this.scaleControl.addTo(this.map)\r\n },\r\n setupGeolocateControl () {\r\n this.locateControl = new L.control.locate({ // eslint-disable-line\r\n locateOptions: {\r\n maxZoom: 16,\r\n watch: false,\r\n setView: false,\r\n timeout: 30000,\r\n enableHighAccuracy: true\r\n },\r\n strings: {\r\n title: this.$t('geolocation.TITLE'),\r\n metersUnit: this.$t('geolocation.METERS'),\r\n feetUnit: this.$t('geolocation.FEET'),\r\n popup: this.$t('geolocation.POPUP'),\r\n outsideMapBoundsMsg: this.$t('geolocation.OUTSIDE_MAP_BOUNDS')\r\n }\r\n })\r\n this.locateControl.addTo(this.map)\r\n // We'd like to use control features but without actually displaying it\r\n this.locateControl._container.style.display = 'none'\r\n },\r\n processLeafletLayerOptions (options) {\r\n // Because we update objects in place and don't want leaflet internal objects to be reactive\r\n const processedOptions = _.cloneDeep(options)\r\n const leafletOptions = processedOptions.leaflet\r\n // Transform from string to actual objects when required in some of the layer options\r\n this.leafletObjectOptions.forEach(option => {\r\n if (typeof _.get(leafletOptions, option) === 'string') {\r\n // Jump from string to object, eg { crs: 'CRS.EPSGXXX' } will become { crs: L.CRS.EPSGXXX }\r\n _.set(leafletOptions, option, _.get(L, _.get(leafletOptions, option)))\r\n }\r\n })\r\n // Copy generic options\r\n leafletOptions.attribution = processedOptions.attribution\r\n return processedOptions\r\n },\r\n createLeafletPane (paneOrZIndex) {\r\n // Create pane if required\r\n const paneName = paneOrZIndex.toString()\r\n let pane = this.map.getPane(paneName)\r\n if (!pane) {\r\n pane = this.map.createPane(paneName)\r\n if (typeof paneOrZIndex === 'number') _.set(pane, 'style.zIndex', paneOrZIndex)\r\n else _.set(pane, 'style.zIndex', 400) // Defaults for overlay in Leaflet\r\n }\r\n this.leafletPanes[paneName] = pane\r\n return pane\r\n },\r\n getLeafletPaneByName (paneOrZIndex) {\r\n const paneName = paneOrZIndex.toString()\r\n return this.leafletPanes[paneName]\r\n },\r\n removeLeafletPane (paneOrZIndex) {\r\n const paneName = paneOrZIndex.toString()\r\n const pane = this.getLeafletPaneByName(paneName)\r\n if (!pane) return\r\n delete this.leafletPanes[paneName]\r\n },\r\n updateLeafletPanesVisibility (panes) {\r\n const zoom = this.map.getZoom()\r\n // Check if we need to hide/show some panes based on current zoom level\r\n _.forOwn(this.leafletPanes, (pane, paneName) => {\r\n // Filter only some panes ?\r\n if (panes && panes.includes(paneName)) return\r\n if (!_.has(pane, 'minZoom') && !_.has(pane, 'maxZoom')) return\r\n if (!pane.style) pane.style = {}\r\n if (_.has(pane, 'minZoom') && (zoom < _.get(pane, 'minZoom'))) {\r\n pane.style.display = 'none'\r\n return\r\n }\r\n if (_.has(pane, 'maxZoom') && (zoom > _.get(pane, 'maxZoom'))) {\r\n pane.style.display = 'none'\r\n return\r\n }\r\n pane.style.display = 'block'\r\n })\r\n },\r\n createLeafletLayer (options) {\r\n const leafletOptions = options.leaflet || options\r\n // Manage panes to make z-index work for all types of layers\r\n // Indeed, although DOM-based layers can use setZIndex() to manage rendering order\r\n // SVG/Canvas-based layers provide no mean to manage render order except using bringToFront() or bringToBack()\r\n // This is why Leaflet 1.0 introduced panes: https://leafletjs.com/reference.html#map-pane & https://leafletjs.com/examples/map-panes/\r\n // By implicitely create a pane for each provided z-index makes this transparent for the user\r\n let zIndex = _.has(leafletOptions, 'zIndex')\r\n if (zIndex) {\r\n zIndex = _.get(leafletOptions, 'zIndex')\r\n this.createLeafletPane(zIndex)\r\n // Set layer to use target pane\r\n _.set(leafletOptions, 'pane', zIndex.toString())\r\n }\r\n // Different panes inside a layer can be used to manage visibility according to zoom level\r\n const panes = _.get(leafletOptions, 'panes')\r\n if (panes) {\r\n panes.forEach(paneOptions => {\r\n const pane = this.createLeafletPane(paneOptions.name || paneOptions.zIndex)\r\n Object.assign(pane, paneOptions)\r\n })\r\n this.updateLeafletPanesVisibility(panes.map(paneOptions => paneOptions.name || paneOptions.zIndex.toString()))\r\n }\r\n\r\n let layer\r\n // We use the source option as the first parameter of leaflet layer constructors,\r\n // which is usually the base URL\r\n if (leafletOptions.source) {\r\n const source = leafletOptions.source\r\n // Remove it from options to avoid sending it twice\r\n // and side effects like https://github.com/kalisio/kdk/issues/219\r\n delete leafletOptions.source\r\n layer = _.get(L, leafletOptions.type)(source, leafletOptions)\r\n } else {\r\n layer = _.get(L, leafletOptions.type)(leafletOptions)\r\n }\r\n return layer\r\n },\r\n registerLeafletConstructor (constructor) {\r\n this.leafletFactory.push(constructor)\r\n },\r\n async createLayer (options) {\r\n const processedOptions = this.processLeafletLayerOptions(options)\r\n let layer\r\n // Iterate over all registered constructors until we find one\r\n for (let i = 0; i < this.leafletFactory.length; i++) {\r\n const constructor = this.leafletFactory[i]\r\n layer = await constructor(processedOptions)\r\n if (layer) break\r\n }\r\n // Use default Leaflet layer constructor if none found\r\n return (layer || this.createLeafletLayer(processedOptions))\r\n },\r\n createLeafletTimedWmsLayer (options) {\r\n const leafletOptions = options.leaflet || options\r\n // Check for valid type\r\n if (leafletOptions.type !== 'tileLayer.wms') return\r\n let layer = this.createLeafletLayer(options)\r\n // Specific case of time dimension layer where we embed the underlying WMS layer\r\n const timeDimension = _.get(leafletOptions, 'timeDimension')\r\n if (timeDimension) {\r\n // It appears that sometimes the time resolution is missing, default as 1 day\r\n // Please refer to https://www.mapserver.org/ogc/wms_time.html#specifying-time-extents\r\n const timeRange = _.get(timeDimension, 'times')\r\n if ((typeof timeRange === 'string') && (timeRange.split('/').length === 2)) {\r\n _.set(timeDimension, 'times', `${timeRange}/P1D`)\r\n }\r\n // As we'd like to control time on a per-layer basis create a specific time dimension object\r\n layer = this.createLeafletLayer({\r\n type: 'timeDimension.layer.wms',\r\n source: layer,\r\n timeDimension: L.timeDimension(timeDimension),\r\n currentTime: Time.getCurrentTime()\r\n })\r\n // This allow the layer to conform our internal time interface\r\n layer.setCurrentTime = (datetime) => { layer._timeDimension.setCurrentTime(datetime) }\r\n }\r\n return layer\r\n },\r\n hasLayer (name) {\r\n return _.has(this.layers, name)\r\n },\r\n isLayerVisible (name) {\r\n const leafetLayer = this.getLeafletLayerByName(name)\r\n return leafetLayer && this.map.hasLayer(leafetLayer)\r\n },\r\n isLayerDisabled (layer) {\r\n const minZoom = _.get(layer, 'leaflet.minZoom')\r\n const maxZoom = _.get(layer, 'leaflet.maxZoom')\r\n let isDisabled = false\r\n if (minZoom && (this.map.getZoom() < minZoom)) isDisabled = true\r\n if (maxZoom && (this.map.getZoom() > maxZoom)) isDisabled = true\r\n return isDisabled\r\n },\r\n updateLayerDisabled (layer) {\r\n const wasDisabled = layer.isDisabled\r\n layer.isDisabled = this.isLayerDisabled(layer)\r\n if (layer.isDisabled !== wasDisabled) this.$emit(wasDisabled ? 'layer-enabled' : 'layer-disabled', layer)\r\n },\r\n getLayerByName (name) {\r\n return this.layers[name]\r\n },\r\n getLeafletLayerByName (name) {\r\n return this.leafletLayers[name]\r\n },\r\n getLayers (filter = {}) {\r\n return _.values(this.layers).filter(sift(filter))\r\n },\r\n hasLayers (filter = {}) {\r\n return _.values(this.layers).filter(sift(filter)).length > 0\r\n },\r\n async showLayer (name) {\r\n // Retrieve the layer\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n // Check the visibility state\r\n if (this.isLayerVisible(name)) return\r\n\r\n // Create the leaflet layer on show\r\n let leafletLayer = this.getLeafletLayerByName(name)\r\n if (!leafletLayer) {\r\n try {\r\n leafletLayer = await this.createLayer(layer)\r\n } catch (error) {\r\n logger.error(error)\r\n return\r\n }\r\n }\r\n // Add the leaflet layer to the map\r\n this.leafletLayers[name] = leafletLayer\r\n this.map.addLayer(leafletLayer)\r\n layer.isVisible = true\r\n\r\n // Ensure base layer will not pop on top of others\r\n if (layer.type === 'BaseLayer') leafletLayer.bringToBack()\r\n // Apply the current time if needed\r\n if (typeof leafletLayer.setCurrentTime === 'function') leafletLayer.setCurrentTime(Time.getCurrentTime())\r\n this.$emit('layer-shown', layer, leafletLayer)\r\n },\r\n hideLayer (name) {\r\n // Retrieve the layer\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n // Check the visibility state\r\n if (!this.isLayerVisible(name)) return\r\n layer.isVisible = false\r\n // Remove the leaflet layer from map\r\n const leafletLayer = this.leafletLayers[name]\r\n this.map.removeLayer(leafletLayer)\r\n const panes = _.get(layer, 'leaflet.panes')\r\n if (panes) panes.forEach(pane => this.removeLeafletPane(pane.name || pane.zIndex))\r\n this.$emit('layer-hidden', layer, leafletLayer)\r\n },\r\n async addLayer (layer) {\r\n if (layer && !this.hasLayer(layer.name)) {\r\n layer.isVisible = false\r\n layer.isDisabled = this.isLayerDisabled(layer)\r\n // Store the layer and make it reactive\r\n this.$set(this.layers, layer.name, layer)\r\n this.$emit('layer-added', layer)\r\n // Handle the visibility state\r\n if (_.get(layer, 'leaflet.isVisible', false)) await this.showLayer(layer.name)\r\n }\r\n return layer\r\n },\r\n renameLayer (previousName, newName) {\r\n const layer = this.getLayerByName(previousName)\r\n const leafletLayer = this.getLeafletLayerByName(previousName)\r\n if (!layer) return\r\n // Update underlying layer map if layer has been already shown\r\n if (leafletLayer) {\r\n this.leafletLayers[newName] = leafletLayer\r\n delete this.leafletLayers[previousName]\r\n }\r\n // Update underlying layer map, this one is reactive\r\n this.$set(this.layers, newName, layer)\r\n this.$delete(this.layers, previousName)\r\n },\r\n removeLayer (name) {\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n // If it was visible remove it from map\r\n if (layer.isVisible) this.hideLayer(name)\r\n // Delete the layer and make it reactive\r\n this.$delete(this.layers, layer.name)\r\n delete this.leafletLayers[name]\r\n this.$emit('layer-removed', layer)\r\n },\r\n clearLayers () {\r\n Object.keys(this.layers).forEach((layer) => this.removeLayer(layer))\r\n },\r\n toGeoJson (name) {\r\n const layer = this.getLeafletLayerByName(name)\r\n if (!layer || (typeof layer.toGeoJSON !== 'function')) return\r\n return layer.toGeoJSON()\r\n },\r\n zoomToLayer (name, options) {\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n // Check for layers only visible at a given zoom level\r\n // If so simply jump to that level in order to show some data\r\n if (this.isLayerDisabled(layer)) {\r\n const minZoom = _.get(layer, 'leaflet.minZoom')\r\n if (minZoom) {\r\n const center = this.getCenter()\r\n this.center(center.longitude, center.latitude, minZoom)\r\n return\r\n }\r\n }\r\n const leafletLayer = this.getLeafletLayerByName(name)\r\n if (leafletLayer && leafletLayer.getBounds()) this.map.fitBounds(leafletLayer.getBounds(), options)\r\n },\r\n zoomToBounds (bounds) {\r\n this.map.fitBounds(bounds)\r\n },\r\n zoomToBBox (bbox) {\r\n this.zoomToBounds([[bbox[0], bbox[1]], [bbox[2], bbox[3]]])\r\n },\r\n center (longitude, latitude, zoomLevel, options) {\r\n this.map.setView(new L.LatLng(latitude, longitude), zoomLevel || this.map.getZoom(), options)\r\n },\r\n getCenter () {\r\n const center = this.map.getCenter()\r\n const zoom = this.map.getZoom()\r\n return {\r\n longitude: center.lng,\r\n latitude: center.lat,\r\n zoomLevel: zoom\r\n }\r\n },\r\n getBounds () {\r\n this.viewBounds = this.map.getBounds()\r\n const south = this.viewBounds.getSouth()\r\n const west = this.viewBounds.getWest()\r\n const north = this.viewBounds.getNorth()\r\n const east = this.viewBounds.getEast()\r\n return [[south, west], [north, east]]\r\n },\r\n showUserLocation () {\r\n const position = this.$geolocation.get().position\r\n if (this.locateControl) {\r\n this.locateControl.start()\r\n } else if (position) {\r\n this.center(position.longitude, position.latitude)\r\n }\r\n },\r\n hideUserLocation () {\r\n if (this.locateControl) {\r\n this.locateControl.stop()\r\n }\r\n },\r\n isUserLocationVisible () {\r\n return (this.locateControl && this.locateControl._active)\r\n },\r\n setCursor (className) {\r\n L.DomUtil.addClass(this.map._container, className)\r\n },\r\n isCursor (className) {\r\n return L.DomUtil.hasClass(this.map._container, className)\r\n },\r\n unsetCursor (className) {\r\n L.DomUtil.removeClass(this.map._container, className)\r\n },\r\n onCurrentMapTimeChanged (datetime) {\r\n _.forEach(this.leafletLayers, leafletLayer => {\r\n if (typeof leafletLayer.setCurrentTime === 'function') leafletLayer.setCurrentTime(datetime)\r\n })\r\n },\r\n onMapZoomChanged () {\r\n this.updateLeafletPanesVisibility()\r\n // Update disable state\r\n const zoomLayers = _.values(this.layers).filter(sift({\r\n $or: [{ 'leaflet.minZoom': { $exists: true } }, { 'leaflet.maxZoom': { $exists: true } }]\r\n }))\r\n zoomLayers.forEach(async layer => { this.updateLayerDisabled(layer) })\r\n }\r\n },\r\n created () {\r\n this.leafletLayers = {}\r\n this.leafletPanes = {}\r\n this.leafletFactory = []\r\n // Default Leaflet layer options requiring conversion from string to actual Leaflet objects\r\n this.leafletObjectOptions = ['crs', 'rendererFactory']\r\n // Register support for WMS-T\r\n this.registerLeafletConstructor(this.createLeafletTimedWmsLayer)\r\n this.$on('zoomend', this.onMapZoomChanged)\r\n this.$events.$on('time-current-time-changed', this.onCurrentMapTimeChanged)\r\n },\r\n beforeDestroy () {\r\n this.clearLayers()\r\n this.$off('zoomend', this.onMapZoomChanged)\r\n this.$events.$off('time-current-time-changed', this.onCurrentMapTimeChanged)\r\n },\r\n destroyed () {\r\n if (this.map) this.map.remove()\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.base-map.js"],"names":["window","nezasa","iso8601","L","Icon","Default","prototype","_getIconUrl","mergeOptions","iconRetinaUrl","require","iconUrl","shadowUrl","PM","setOptIn","data","layers","methods","refreshMap","map","invalidateSize","setupMap","domEl","options","viewerOptions","activityOptions","engine","viewer","Object","assign","zoomControl","pm","undefined","pmIgnore","reInitLayer","setLang","i18next","language","LeafletEvents","Map","_","get","setupScaleControl","setupGeolocateControl","$emit","scaleControl","control","scale","addTo","locateControl","locate","locateOptions","maxZoom","watch","setView","timeout","enableHighAccuracy","strings","title","$t","metersUnit","feetUnit","popup","outsideMapBoundsMsg","_container","style","display","processLeafletLayerOptions","processedOptions","cloneDeep","leafletOptions","leaflet","leafletObjectOptions","forEach","option","set","attribution","createLeafletPane","paneOrZIndex","paneName","toString","pane","getPane","createPane","leafletPanes","getLeafletPaneByName","removeLeafletPane","updateLeafletPanesVisibility","panes","zoom","getZoom","forOwn","includes","has","createLeafletLayer","zIndex","paneOptions","name","layer","source","type","registerLeafletConstructor","constructor","leafletFactory","push","createLayer","i","length","createLeafletTimedWmsLayer","timeDimension","timeRange","split","currentTime","Time","getCurrentTime","setCurrentTime","datetime","_timeDimension","hasLayer","isLayerVisible","leafetLayer","getLeafletLayerByName","isLayerDisabled","minZoom","isDisabled","updateLayerDisabled","wasDisabled","getLayerByName","leafletLayers","getLayers","filter","values","hasLayers","showLayer","leafletLayer","error","logger","addLayer","isVisible","bringToBack","hideLayer","removeLayer","$set","addGeoJsonLayer","layerSpec","geoJson","realtime","defaultLayer","scope","isDataEditable","cesium","defaults","schema","content","featureId","features","feature","_id","updateLayer","bbox","zoomToBBox","zoomToLayer","renameLayer","previousName","newName","$delete","clearLayers","keys","toGeoJson","toGeoJSON","center","getCenter","longitude","latitude","getBounds","fitBounds","zoomToBounds","bounds","zoomLevel","LatLng","lng","lat","viewBounds","south","getSouth","west","getWest","north","getNorth","east","getEast","showUserLocation","position","$geolocation","start","hideUserLocation","stop","isUserLocationVisible","_active","setCursor","className","DomUtil","addClass","isCursor","hasClass","unsetCursor","removeClass","onCurrentMapTimeChanged","onMapZoomChanged","zoomLayers","$or","$exists","created","$on","$events","beforeDestroy","$off","destroyed","remove"],"mappings":";;;;;;AAAA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;AAnBA;AAYwC;;;AAQxCA,OAAOC,MAAP,GAAgB,EAAEC,kCAAF,CAAY;;AAE5B;AAFgB,CAAhB,CAGA,OAAOC,kBAAEC,IAAF,CAAOC,OAAP,CAAeC,SAAf,CAAyBC,WAAhC;AACAJ,kBAAEC,IAAF,CAAOC,OAAP,CAAeG,YAAf,CAA4B;AAC1BC,iBAAeC,QAAQ,wCAAR,CADW;AAE1BC,WAASD,QAAQ,qCAAR,CAFiB;AAG1BE,aAAWF,QAAQ,uCAAR;AAHe,CAA5B;AAKA;AACAP,kBAAEU,EAAF,CAAKC,QAAL,CAAc,IAAd;;kBAEe;AACbC,SAAQ;AACN,WAAO;AACLC,cAAQ;AADH,KAAP;AAGD,GALY;AAMbC,WAAS;AACPC,iBAAc;AACZ,UAAI,KAAKC,GAAT,EAAc,KAAKA,GAAL,CAASC,cAAT;AACf,KAHM;AAIPC,aAAUC,KAAV,EAAiBC,OAAjB,EAA0B;AACxB,YAAMC,gBAAgBD,WAAW,KAAKE,eAAL,CAAqBC,MAArB,CAA4BC,MAA7D;AACA;AACA,WAAKR,GAAL,GAAWhB,kBAAEgB,GAAF,CAAMG,KAAN,EAAaM,OAAOC,MAAP,CAAc,EAAEC,aAAa,KAAf,EAAd,EAAsCN,aAAtC,CAAb,CAAX;AACA;AACA,UAAI,KAAKL,GAAL,CAASY,EAAT,KAAgBC,SAApB,EAA+B;AAC7B,aAAKb,GAAL,CAASI,OAAT,CAAiBU,QAAjB,GAA4B,KAA5B;AACA9B,0BAAEU,EAAF,CAAKqB,WAAL,CAAiB,KAAKf,GAAtB;AACA,aAAKA,GAAL,CAASY,EAAT,CAAYI,OAAZ,CAAoBC,kBAAQC,QAA5B;AACD;AACD,oCAAkB,KAAKlB,GAAvB,EAA4BmB,qBAAcC,GAA1C,EAA+C,IAA/C,EAAqDf,aAArD;AACA,UAAIgB,iBAAEC,GAAF,CAAMjB,aAAN,EAAqB,OAArB,EAA8B,IAA9B,CAAJ,EAAyC,KAAKkB,iBAAL;AACzC,UAAIF,iBAAEC,GAAF,CAAMjB,aAAN,EAAqB,WAArB,EAAkC,IAAlC,CAAJ,EAA6C,KAAKmB,qBAAL;AAC7C,WAAKC,KAAL,CAAW,WAAX;AACD,KAlBM;AAmBPF,wBAAqB;AACnB;AACA,WAAKG,YAAL,GAAoB,IAAI1C,kBAAE2C,OAAF,CAAUC,KAAd,EAApB,CAFmB,CAEyB;AAC5C,WAAKF,YAAL,CAAkBG,KAAlB,CAAwB,KAAK7B,GAA7B;AACD,KAvBM;AAwBPwB,4BAAyB;AACvB,WAAKM,aAAL,GAAqB,IAAI9C,kBAAE2C,OAAF,CAAUI,MAAd,CAAqB,EAAG;AAC3CC,uBAAe;AACbC,mBAAS,EADI;AAEbC,iBAAO,KAFM;AAGbC,mBAAS,KAHI;AAIbC,mBAAS,KAJI;AAKbC,8BAAoB;AALP,SADyB;AAQxCC,iBAAS;AACPC,iBAAO,KAAKC,EAAL,CAAQ,mBAAR,CADA;AAEPC,sBAAY,KAAKD,EAAL,CAAQ,oBAAR,CAFL;AAGPE,oBAAU,KAAKF,EAAL,CAAQ,kBAAR,CAHH;AAIPG,iBAAO,KAAKH,EAAL,CAAQ,mBAAR,CAJA;AAKPI,+BAAqB,KAAKJ,EAAL,CAAQ,gCAAR;AALd;AAR+B,OAArB,CAArB;AAgBA,WAAKV,aAAL,CAAmBD,KAAnB,CAAyB,KAAK7B,GAA9B;AACA;AACA,WAAK8B,aAAL,CAAmBe,UAAnB,CAA8BC,KAA9B,CAAoCC,OAApC,GAA8C,MAA9C;AACD,KA5CM;AA6CPC,+BAA4B5C,OAA5B,EAAqC;AACnC;AACA,YAAM6C,mBAAmB5B,iBAAE6B,SAAF,CAAY9C,OAAZ,CAAzB;AACA,YAAM+C,iBAAiBF,iBAAiBG,OAAxC;AACA;AACA,WAAKC,oBAAL,CAA0BC,OAA1B,CAAkCC,UAAU;AAC1C,YAAI,OAAOlC,iBAAEC,GAAF,CAAM6B,cAAN,EAAsBI,MAAtB,CAAP,KAAyC,QAA7C,EAAuD;AACrD;AACAlC,2BAAEmC,GAAF,CAAML,cAAN,EAAsBI,MAAtB,EAA8BlC,iBAAEC,GAAF,CAAMtC,iBAAN,EAASqC,iBAAEC,GAAF,CAAM6B,cAAN,EAAsBI,MAAtB,CAAT,CAA9B;AACD;AACF,OALD;AAMA;AACAJ,qBAAeM,WAAf,GAA6BR,iBAAiBQ,WAA9C;AACA,aAAOR,gBAAP;AACD,KA3DM;AA4DPS,sBAAmBC,YAAnB,EAAiC;AAC/B;AACA,YAAMC,WAAWD,aAAaE,QAAb,EAAjB;AACA,UAAIC,OAAO,KAAK9D,GAAL,CAAS+D,OAAT,CAAiBH,QAAjB,CAAX;AACA,UAAI,CAACE,IAAL,EAAW;AACTA,eAAO,KAAK9D,GAAL,CAASgE,UAAT,CAAoBJ,QAApB,CAAP;AACA,YAAI,OAAOD,YAAP,KAAwB,QAA5B,EAAsCtC,iBAAEmC,GAAF,CAAMM,IAAN,EAAY,cAAZ,EAA4BH,YAA5B,EAAtC,KACKtC,iBAAEmC,GAAF,CAAMM,IAAN,EAAY,cAAZ,EAA4B,GAA5B,EAHI,CAG6B;AACvC;AACD,WAAKG,YAAL,CAAkBL,QAAlB,IAA8BE,IAA9B;AACA,aAAOA,IAAP;AACD,KAvEM;AAwEPI,yBAAsBP,YAAtB,EAAoC;AAClC,YAAMC,WAAWD,aAAaE,QAAb,EAAjB;AACA,aAAO,KAAKI,YAAL,CAAkBL,QAAlB,CAAP;AACD,KA3EM;AA4EPO,sBAAmBR,YAAnB,EAAiC;AAC/B,YAAMC,WAAWD,aAAaE,QAAb,EAAjB;AACA,YAAMC,OAAO,KAAKI,oBAAL,CAA0BN,QAA1B,CAAb;AACA,UAAI,CAACE,IAAL,EAAW;AACX,aAAO,KAAKG,YAAL,CAAkBL,QAAlB,CAAP;AACD,KAjFM;AAkFPQ,iCAA8BC,KAA9B,EAAqC;AACnC,YAAMC,OAAO,KAAKtE,GAAL,CAASuE,OAAT,EAAb;AACA;AACAlD,uBAAEmD,MAAF,CAAS,KAAKP,YAAd,EAA4B,CAACH,IAAD,EAAOF,QAAP,KAAoB;AAC9C;AACA,YAAIS,SAASA,MAAMI,QAAN,CAAeb,QAAf,CAAb,EAAuC;AACvC,YAAI,CAACvC,iBAAEqD,GAAF,CAAMZ,IAAN,EAAY,SAAZ,CAAD,IAA2B,CAACzC,iBAAEqD,GAAF,CAAMZ,IAAN,EAAY,SAAZ,CAAhC,EAAwD;AACxD,YAAI,CAACA,KAAKhB,KAAV,EAAiBgB,KAAKhB,KAAL,GAAa,EAAb;AACjB,YAAIzB,iBAAEqD,GAAF,CAAMZ,IAAN,EAAY,SAAZ,KAA2BQ,OAAOjD,iBAAEC,GAAF,CAAMwC,IAAN,EAAY,SAAZ,CAAtC,EAA+D;AAC7DA,eAAKhB,KAAL,CAAWC,OAAX,GAAqB,MAArB;AACA;AACD;AACD,YAAI1B,iBAAEqD,GAAF,CAAMZ,IAAN,EAAY,SAAZ,KAA2BQ,OAAOjD,iBAAEC,GAAF,CAAMwC,IAAN,EAAY,SAAZ,CAAtC,EAA+D;AAC7DA,eAAKhB,KAAL,CAAWC,OAAX,GAAqB,MAArB;AACA;AACD;AACDe,aAAKhB,KAAL,CAAWC,OAAX,GAAqB,OAArB;AACD,OAdD;AAeD,KApGM;AAqGP4B,uBAAoBvE,OAApB,EAA6B;AAC3B,YAAM+C,iBAAiB/C,QAAQgD,OAAR,IAAmBhD,OAA1C;AACA;AACA;AACA;AACA;AACA;AACA,UAAIwE,SAASvD,iBAAEqD,GAAF,CAAMvB,cAAN,EAAsB,QAAtB,CAAb;AACA,UAAIyB,MAAJ,EAAY;AACVA,iBAASvD,iBAAEC,GAAF,CAAM6B,cAAN,EAAsB,QAAtB,CAAT;AACA,aAAKO,iBAAL,CAAuBkB,MAAvB;AACA;AACAvD,yBAAEmC,GAAF,CAAML,cAAN,EAAsB,MAAtB,EAA8ByB,OAAOf,QAAP,EAA9B;AACD;AACD;AACA,YAAMQ,QAAQhD,iBAAEC,GAAF,CAAM6B,cAAN,EAAsB,OAAtB,CAAd;AACA,UAAIkB,KAAJ,EAAW;AACTA,cAAMf,OAAN,CAAcuB,eAAe;AAC3B,gBAAMf,OAAO,KAAKJ,iBAAL,CAAuBmB,YAAYC,IAAZ,IAAoBD,YAAYD,MAAvD,CAAb;AACAnE,iBAAOC,MAAP,CAAcoD,IAAd,EAAoBe,WAApB;AACD,SAHD;AAIA,aAAKT,4BAAL,CAAkCC,MAAMrE,GAAN,CAAU6E,eAAeA,YAAYC,IAAZ,IAAoBD,YAAYD,MAAZ,CAAmBf,QAAnB,EAA7C,CAAlC;AACD;;AAED,UAAIkB,KAAJ;AACA;AACA;AACA,UAAI5B,eAAe6B,MAAnB,EAA2B;AACzB,cAAMA,SAAS7B,eAAe6B,MAA9B;AACA;AACA;AACA,eAAO7B,eAAe6B,MAAtB;AACAD,gBAAQ1D,iBAAEC,GAAF,CAAMtC,iBAAN,EAASmE,eAAe8B,IAAxB,EAA8BD,MAA9B,EAAsC7B,cAAtC,CAAR;AACD,OAND,MAMO;AACL4B,gBAAQ1D,iBAAEC,GAAF,CAAMtC,iBAAN,EAASmE,eAAe8B,IAAxB,EAA8B9B,cAA9B,CAAR;AACD;AACD,aAAO4B,KAAP;AACD,KA1IM;AA2IPG,+BAA4BC,WAA5B,EAAyC;AACvC,WAAKC,cAAL,CAAoBC,IAApB,CAAyBF,WAAzB;AACD,KA7IM;AA8IDG,eAAN,CAAmBlF,OAAnB,EAA4B;AAAA;;AAAA;AAC1B,cAAM6C,mBAAmB,MAAKD,0BAAL,CAAgC5C,OAAhC,CAAzB;AACA,YAAI2E,KAAJ;AACA;AACA,aAAK,IAAIQ,IAAI,CAAb,EAAgBA,IAAI,MAAKH,cAAL,CAAoBI,MAAxC,EAAgDD,GAAhD,EAAqD;AACnD,gBAAMJ,cAAc,MAAKC,cAAL,CAAoBG,CAApB,CAApB;AACAR,kBAAQ,MAAMI,YAAYlC,gBAAZ,CAAd;AACA,cAAI8B,KAAJ,EAAW;AACZ;AACD;AACA,eAAQA,SAAS,MAAKJ,kBAAL,CAAwB1B,gBAAxB,CAAjB;AAV0B;AAW3B,KAzJM;AA0JPwC,+BAA4BrF,OAA5B,EAAqC;AACnC,YAAM+C,iBAAiB/C,QAAQgD,OAAR,IAAmBhD,OAA1C;AACA;AACA,UAAI+C,eAAe8B,IAAf,KAAwB,eAA5B,EAA6C;AAC7C,UAAIF,QAAQ,KAAKJ,kBAAL,CAAwBvE,OAAxB,CAAZ;AACA;AACA,YAAMsF,gBAAgBrE,iBAAEC,GAAF,CAAM6B,cAAN,EAAsB,eAAtB,CAAtB;AACA,UAAIuC,aAAJ,EAAmB;AACjB;AACA;AACA,cAAMC,YAAYtE,iBAAEC,GAAF,CAAMoE,aAAN,EAAqB,OAArB,CAAlB;AACA,YAAK,OAAOC,SAAP,KAAqB,QAAtB,IAAoCA,UAAUC,KAAV,CAAgB,GAAhB,EAAqBJ,MAArB,KAAgC,CAAxE,EAA4E;AAC1EnE,2BAAEmC,GAAF,CAAMkC,aAAN,EAAqB,OAArB,EAA+B,GAAEC,SAAU,MAA3C;AACD;AACD;AACAZ,gBAAQ,KAAKJ,kBAAL,CAAwB;AAC9BM,gBAAM,yBADwB;AAE9BD,kBAAQD,KAFsB;AAG9BW,yBAAe1G,kBAAE0G,aAAF,CAAgBA,aAAhB,CAHe;AAI9BG,uBAAaC,aAAKC,cAAL;AAJiB,SAAxB,CAAR;AAMA;AACAhB,cAAMiB,cAAN,GAAwBC,QAAD,IAAc;AAAElB,gBAAMmB,cAAN,CAAqBF,cAArB,CAAoCC,QAApC;AAA+C,SAAtF;AACD;AACD,aAAOlB,KAAP;AACD,KAnLM;AAoLPoB,aAAUrB,IAAV,EAAgB;AACd,aAAOzD,iBAAEqD,GAAF,CAAM,KAAK7E,MAAX,EAAmBiF,IAAnB,CAAP;AACD,KAtLM;AAuLPsB,mBAAgBtB,IAAhB,EAAsB;AACpB,YAAMuB,cAAc,KAAKC,qBAAL,CAA2BxB,IAA3B,CAApB;AACA,aAAOuB,eAAe,KAAKrG,GAAL,CAASmG,QAAT,CAAkBE,WAAlB,CAAtB;AACD,KA1LM;AA2LPE,oBAAiBxB,KAAjB,EAAwB;AACtB,YAAMyB,UAAUnF,iBAAEC,GAAF,CAAMyD,KAAN,EAAa,iBAAb,CAAhB;AACA,YAAM9C,UAAUZ,iBAAEC,GAAF,CAAMyD,KAAN,EAAa,iBAAb,CAAhB;AACA,UAAI0B,aAAa,KAAjB;AACA,UAAID,WAAY,KAAKxG,GAAL,CAASuE,OAAT,KAAqBiC,OAArC,EAA+CC,aAAa,IAAb;AAC/C,UAAIxE,WAAY,KAAKjC,GAAL,CAASuE,OAAT,KAAqBtC,OAArC,EAA+CwE,aAAa,IAAb;AAC/C,aAAOA,UAAP;AACD,KAlMM;AAmMPC,wBAAqB3B,KAArB,EAA4B;AAC1B,YAAM4B,cAAc5B,MAAM0B,UAA1B;AACA1B,YAAM0B,UAAN,GAAmB,KAAKF,eAAL,CAAqBxB,KAArB,CAAnB;AACA,UAAIA,MAAM0B,UAAN,KAAqBE,WAAzB,EAAsC,KAAKlF,KAAL,CAAWkF,cAAc,eAAd,GAAgC,gBAA3C,EAA6D5B,KAA7D;AACvC,KAvMM;AAwMP6B,mBAAgB9B,IAAhB,EAAsB;AACpB,aAAO,KAAKjF,MAAL,CAAYiF,IAAZ,CAAP;AACD,KA1MM;AA2MPwB,0BAAuBxB,IAAvB,EAA6B;AAC3B,aAAO,KAAK+B,aAAL,CAAmB/B,IAAnB,CAAP;AACD,KA7MM;AA8MPgC,cAAWC,SAAS,EAApB,EAAwB;AACtB,aAAO1F,iBAAE2F,MAAF,CAAS,KAAKnH,MAAd,EAAsBkH,MAAtB,CAA6B,oBAAKA,MAAL,CAA7B,CAAP;AACD,KAhNM;AAiNPE,cAAWF,SAAS,EAApB,EAAwB;AACtB,aAAO1F,iBAAE2F,MAAF,CAAS,KAAKnH,MAAd,EAAsBkH,MAAtB,CAA6B,oBAAKA,MAAL,CAA7B,EAA2CvB,MAA3C,GAAoD,CAA3D;AACD,KAnNM;AAoND0B,aAAN,CAAiBpC,IAAjB,EAAuB;AAAA;;AAAA;AACrB;AACA,cAAMC,QAAQ,OAAK6B,cAAL,CAAoB9B,IAApB,CAAd;AACA,YAAI,CAACC,KAAL,EAAY;AACZ;AACA,YAAI,OAAKqB,cAAL,CAAoBtB,IAApB,CAAJ,EAA+B;;AAE/B;AACA,YAAIqC,eAAe,OAAKb,qBAAL,CAA2BxB,IAA3B,CAAnB;AACA,YAAI,CAACqC,YAAL,EAAmB;AACjB,cAAI;AACFA,2BAAe,MAAM,OAAK7B,WAAL,CAAiBP,KAAjB,CAArB;AACD,WAFD,CAEE,OAAOqC,KAAP,EAAc;AACdC,+BAAOD,KAAP,CAAaA,KAAb;AACA;AACD;AACF;AACD;AACA,eAAKP,aAAL,CAAmB/B,IAAnB,IAA2BqC,YAA3B;AACA,eAAKnH,GAAL,CAASsH,QAAT,CAAkBH,YAAlB;AACApC,cAAMwC,SAAN,GAAkB,IAAlB;;AAEA;AACA,YAAIxC,MAAME,IAAN,KAAe,WAAnB,EAAgCkC,aAAaK,WAAb;AAChC;AACA,YAAI,OAAOL,aAAanB,cAApB,KAAuC,UAA3C,EAAuDmB,aAAanB,cAAb,CAA4BF,aAAKC,cAAL,EAA5B;AACvD,eAAKtE,KAAL,CAAW,aAAX,EAA0BsD,KAA1B,EAAiCoC,YAAjC;AA1BqB;AA2BtB,KA/OM;AAgPPM,cAAW3C,IAAX,EAAiB;AACf;AACA,YAAMC,QAAQ,KAAK6B,cAAL,CAAoB9B,IAApB,CAAd;AACA,UAAI,CAACC,KAAL,EAAY;AACZ;AACA,UAAI,CAAC,KAAKqB,cAAL,CAAoBtB,IAApB,CAAL,EAAgC;AAChCC,YAAMwC,SAAN,GAAkB,KAAlB;AACA;AACA,YAAMJ,eAAe,KAAKN,aAAL,CAAmB/B,IAAnB,CAArB;AACA,WAAK9E,GAAL,CAAS0H,WAAT,CAAqBP,YAArB;AACA,YAAM9C,QAAQhD,iBAAEC,GAAF,CAAMyD,KAAN,EAAa,eAAb,CAAd;AACA,UAAIV,KAAJ,EAAWA,MAAMf,OAAN,CAAcQ,QAAQ,KAAKK,iBAAL,CAAuBL,KAAKgB,IAAL,IAAahB,KAAKc,MAAzC,CAAtB;AACX,WAAKnD,KAAL,CAAW,cAAX,EAA2BsD,KAA3B,EAAkCoC,YAAlC;AACD,KA7PM;AA8PDG,YAAN,CAAgBvC,KAAhB,EAAuB;AAAA;;AAAA;AACrB,YAAIA,SAAS,CAAC,OAAKoB,QAAL,CAAcpB,MAAMD,IAApB,CAAd,EAAyC;AACvCC,gBAAMwC,SAAN,GAAkB,KAAlB;AACAxC,gBAAM0B,UAAN,GAAmB,OAAKF,eAAL,CAAqBxB,KAArB,CAAnB;AACA;AACA,iBAAK4C,IAAL,CAAU,OAAK9H,MAAf,EAAuBkF,MAAMD,IAA7B,EAAmCC,KAAnC;AACA,iBAAKtD,KAAL,CAAW,aAAX,EAA0BsD,KAA1B;AACA;AACA,cAAI1D,iBAAEC,GAAF,CAAMyD,KAAN,EAAa,mBAAb,EAAkC,KAAlC,CAAJ,EAA8C,MAAM,OAAKmC,SAAL,CAAenC,MAAMD,IAArB,CAAN;AAC/C;AACD,eAAOC,KAAP;AAVqB;AAWtB,KAzQM;AA0QD6C,mBAAN,CAAuBC,SAAvB,EAAkCC,OAAlC,EAA2C;AAAA;;AAAA;AACzC,cAAMvH,SAAS;AACb0E,gBAAM,SADO;AAEbsC,qBAAW,IAFE;AAGbQ,oBAAU;AAHG,SAAf;AAKA,cAAMC,eAAe;AACnB/C,gBAAM,cADa;AAEnBgD,iBAAO,MAFY;AAGnBC,0BAAgB,IAHG;AAInB9E,mBAAS7C,MAJU;AAKnB;AACA;AACA4H,kBAAQ1H,OAAOC,MAAP,CAAc,EAAd,EAAkBH,MAAlB;AAPW,SAArB;AASAc,yBAAE+G,QAAF,CAAWP,SAAX,EAAsBG,YAAtB;AACA,YAAI,CAACH,UAAUQ,MAAf,EAAuB;AACrB,gBAAMA,SAAS,qCAAyBP,OAAzB,EAAkCD,UAAU/C,IAA5C,CAAf;AACA+C,oBAAUQ,MAAV,GAAmB,EAAEvD,MAAM+C,UAAU/C,IAAlB,EAAwBwD,SAASD,MAAjC,EAAnB;AACD;AACD,YAAI,CAACR,UAAUU,SAAf,EAA0B;AACxBV,oBAAUU,SAAV,GAAsB,KAAtB;AACAlH,2BAAEiC,OAAF,CAAUwE,QAAQU,QAAlB,EAA4B,mBAAW;AAAEC,oBAAQC,GAAR,GAAc,mBAAM7E,QAAN,EAAd;AAAgC,WAAzE;AACD;AACD;AACA,cAAM,OAAKyD,QAAL,CAAcO,SAAd,CAAN;AACA;AACA,cAAM,OAAKc,WAAL,CAAiBd,UAAU/C,IAA3B,EAAiCgD,OAAjC,CAAN;AACA;AACA,YAAIA,QAAQc,IAAZ,EAAkB,OAAKC,UAAL,CAAgBf,QAAQc,IAAxB,EAAlB,KACK,OAAKE,WAAL,CAAiBjB,UAAU/C,IAA3B;AA9BoC;AA+B1C,KAzSM;AA0SPiE,gBAAaC,YAAb,EAA2BC,OAA3B,EAAoC;AAClC,YAAMlE,QAAQ,KAAK6B,cAAL,CAAoBoC,YAApB,CAAd;AACA,YAAM7B,eAAe,KAAKb,qBAAL,CAA2B0C,YAA3B,CAArB;AACA,UAAI,CAACjE,KAAL,EAAY;AACZ;AACA,UAAIoC,YAAJ,EAAkB;AAChB,aAAKN,aAAL,CAAmBoC,OAAnB,IAA8B9B,YAA9B;AACA,eAAO,KAAKN,aAAL,CAAmBmC,YAAnB,CAAP;AACD;AACD;AACA,WAAKrB,IAAL,CAAU,KAAK9H,MAAf,EAAuBoJ,OAAvB,EAAgClE,KAAhC;AACA,WAAKmE,OAAL,CAAa,KAAKrJ,MAAlB,EAA0BmJ,YAA1B;AACD,KAtTM;AAuTPtB,gBAAa5C,IAAb,EAAmB;AACjB,YAAMC,QAAQ,KAAK6B,cAAL,CAAoB9B,IAApB,CAAd;AACA,UAAI,CAACC,KAAL,EAAY;AACZ;AACA,UAAIA,MAAMwC,SAAV,EAAqB,KAAKE,SAAL,CAAe3C,IAAf;AACrB;AACA,WAAKoE,OAAL,CAAa,KAAKrJ,MAAlB,EAA0BkF,MAAMD,IAAhC;AACA,aAAO,KAAK+B,aAAL,CAAmB/B,IAAnB,CAAP;AACA,WAAKrD,KAAL,CAAW,eAAX,EAA4BsD,KAA5B;AACD,KAhUM;AAiUPoE,kBAAe;AACb1I,aAAO2I,IAAP,CAAY,KAAKvJ,MAAjB,EAAyByD,OAAzB,CAAkCyB,KAAD,IAAW,KAAK2C,WAAL,CAAiB3C,KAAjB,CAA5C;AACD,KAnUM;AAoUPsE,cAAWvE,IAAX,EAAiB;AACf,YAAMC,QAAQ,KAAKuB,qBAAL,CAA2BxB,IAA3B,CAAd;AACA,UAAI,CAACC,KAAD,IAAW,OAAOA,MAAMuE,SAAb,KAA2B,UAA1C,EAAuD;AACvD,aAAOvE,MAAMuE,SAAN,EAAP;AACD,KAxUM;AAyUPR,gBAAahE,IAAb,EAAmB1E,OAAnB,EAA4B;AAC1B,YAAM2E,QAAQ,KAAK6B,cAAL,CAAoB9B,IAApB,CAAd;AACA,UAAI,CAACC,KAAL,EAAY;AACZ;AACA;AACA,UAAI,KAAKwB,eAAL,CAAqBxB,KAArB,CAAJ,EAAiC;AAC/B,cAAMyB,UAAUnF,iBAAEC,GAAF,CAAMyD,KAAN,EAAa,iBAAb,CAAhB;AACA,YAAIyB,OAAJ,EAAa;AACX,gBAAM+C,SAAS,KAAKC,SAAL,EAAf;AACA,eAAKD,MAAL,CAAYA,OAAOE,SAAnB,EAA8BF,OAAOG,QAArC,EAA+ClD,OAA/C;AACA;AACD;AACF;AACD,YAAMW,eAAe,KAAKb,qBAAL,CAA2BxB,IAA3B,CAArB;AACA,UAAIqC,gBAAiB,OAAOA,aAAawC,SAApB,KAAkC,UAAvD,EAAoE,KAAK3J,GAAL,CAAS4J,SAAT,CAAmBzC,aAAawC,SAAb,EAAnB,EAA6CvJ,OAA7C;AACrE,KAxVM;AAyVPyJ,iBAAcC,MAAd,EAAsB;AACpB,WAAK9J,GAAL,CAAS4J,SAAT,CAAmBE,MAAnB;AACD,KA3VM;AA4VPjB,eAAYD,IAAZ,EAAkB;AAChB,WAAKiB,YAAL,CAAkB,CAAC,CAACjB,KAAK,CAAL,CAAD,EAAUA,KAAK,CAAL,CAAV,CAAD,EAAqB,CAACA,KAAK,CAAL,CAAD,EAAUA,KAAK,CAAL,CAAV,CAArB,CAAlB;AACD,KA9VM;AA+VPW,WAAQE,SAAR,EAAmBC,QAAnB,EAA6BK,SAA7B,EAAwC3J,OAAxC,EAAiD;AAC/C,WAAKJ,GAAL,CAASmC,OAAT,CAAiB,IAAInD,kBAAEgL,MAAN,CAAaN,QAAb,EAAuBD,SAAvB,CAAjB,EAAoDM,aAAa,KAAK/J,GAAL,CAASuE,OAAT,EAAjE,EAAqFnE,OAArF;AACD,KAjWM;AAkWPoJ,gBAAa;AACX,YAAMD,SAAS,KAAKvJ,GAAL,CAASwJ,SAAT,EAAf;AACA,YAAMlF,OAAO,KAAKtE,GAAL,CAASuE,OAAT,EAAb;AACA,aAAO;AACLkF,mBAAWF,OAAOU,GADb;AAELP,kBAAUH,OAAOW,GAFZ;AAGLH,mBAAWzF;AAHN,OAAP;AAKD,KA1WM;AA2WPqF,gBAAa;AACX,WAAKQ,UAAL,GAAkB,KAAKnK,GAAL,CAAS2J,SAAT,EAAlB;AACA,YAAMS,QAAQ,KAAKD,UAAL,CAAgBE,QAAhB,EAAd;AACA,YAAMC,OAAO,KAAKH,UAAL,CAAgBI,OAAhB,EAAb;AACA,YAAMC,QAAQ,KAAKL,UAAL,CAAgBM,QAAhB,EAAd;AACA,YAAMC,OAAO,KAAKP,UAAL,CAAgBQ,OAAhB,EAAb;AACA,aAAO,CAAC,CAACP,KAAD,EAAQE,IAAR,CAAD,EAAgB,CAACE,KAAD,EAAQE,IAAR,CAAhB,CAAP;AACD,KAlXM;AAmXPE,uBAAoB;AAClB,YAAMC,WAAW,KAAKC,YAAL,CAAkBxJ,GAAlB,GAAwBuJ,QAAzC;AACA,UAAI,KAAK/I,aAAT,EAAwB;AACtB,aAAKA,aAAL,CAAmBiJ,KAAnB;AACD,OAFD,MAEO,IAAIF,QAAJ,EAAc;AACnB,aAAKtB,MAAL,CAAYsB,SAASpB,SAArB,EAAgCoB,SAASnB,QAAzC;AACD;AACF,KA1XM;AA2XPsB,uBAAoB;AAClB,UAAI,KAAKlJ,aAAT,EAAwB;AACtB,aAAKA,aAAL,CAAmBmJ,IAAnB;AACD;AACF,KA/XM;AAgYPC,4BAAyB;AACvB,aAAQ,KAAKpJ,aAAL,IAAsB,KAAKA,aAAL,CAAmBqJ,OAAjD;AACD,KAlYM;AAmYPC,cAAWC,SAAX,EAAsB;AACpBrM,wBAAEsM,OAAF,CAAUC,QAAV,CAAmB,KAAKvL,GAAL,CAAS6C,UAA5B,EAAwCwI,SAAxC;AACD,KArYM;AAsYPG,aAAUH,SAAV,EAAqB;AACnB,aAAOrM,kBAAEsM,OAAF,CAAUG,QAAV,CAAmB,KAAKzL,GAAL,CAAS6C,UAA5B,EAAwCwI,SAAxC,CAAP;AACD,KAxYM;AAyYPK,gBAAaL,SAAb,EAAwB;AACtBrM,wBAAEsM,OAAF,CAAUK,WAAV,CAAsB,KAAK3L,GAAL,CAAS6C,UAA/B,EAA2CwI,SAA3C;AACD,KA3YM;AA4YPO,4BAAyB3F,QAAzB,EAAmC;AACjC5E,uBAAEiC,OAAF,CAAU,KAAKuD,aAAf,EAA8BM,gBAAgB;AAC5C,YAAI,OAAOA,aAAanB,cAApB,KAAuC,UAA3C,EAAuDmB,aAAanB,cAAb,CAA4BC,QAA5B;AACxD,OAFD;AAGD,KAhZM;AAiZP4F,uBAAoB;AAAA;;AAClB,WAAKzH,4BAAL;AACA;AACA,YAAM0H,aAAazK,iBAAE2F,MAAF,CAAS,KAAKnH,MAAd,EAAsBkH,MAAtB,CAA6B,oBAAK;AACnDgF,aAAK,CAAC,EAAE,mBAAmB,EAAEC,SAAS,IAAX,EAArB,EAAD,EAA2C,EAAE,mBAAmB,EAAEA,SAAS,IAAX,EAArB,EAA3C;AAD8C,OAAL,CAA7B,CAAnB;AAGAF,iBAAWxI,OAAX;AAAA,qCAAmB,WAAMyB,KAAN,EAAe;AAAE,iBAAK2B,mBAAL,CAAyB3B,KAAzB;AAAiC,SAArE;;AAAA;AAAA;AAAA;AAAA;AACD;AAxZM,GANI;AAgabkH,YAAW;AACT,SAAKpF,aAAL,GAAqB,EAArB;AACA,SAAK5C,YAAL,GAAoB,EAApB;AACA,SAAKmB,cAAL,GAAsB,EAAtB;AACA;AACA,SAAK/B,oBAAL,GAA4B,CAAC,KAAD,EAAQ,iBAAR,CAA5B;AACA;AACA,SAAK6B,0BAAL,CAAgC,KAAKO,0BAArC;AACA,SAAKyG,GAAL,CAAS,SAAT,EAAoB,KAAKL,gBAAzB;AACA,SAAKM,OAAL,CAAaD,GAAb,CAAiB,2BAAjB,EAA8C,KAAKN,uBAAnD;AACD,GA1aY;AA2abQ,kBAAiB;AACf,SAAKjD,WAAL;AACA,SAAKkD,IAAL,CAAU,SAAV,EAAqB,KAAKR,gBAA1B;AACA,SAAKM,OAAL,CAAaE,IAAb,CAAkB,2BAAlB,EAA+C,KAAKT,uBAApD;AACD,GA/aY;AAgbbU,cAAa;AACX,QAAI,KAAKtM,GAAT,EAAc,KAAKA,GAAL,CAASuM,MAAT;AACf;AAlbY,C","file":"mixin.base-map.js","sourcesContent":["import _ from 'lodash'\r\nimport sift from 'sift'\r\nimport logger from 'loglevel'\r\nimport L from 'leaflet'\r\nimport i18next from 'i18next'\r\nimport 'leaflet/dist/leaflet.css'\r\n// This ensure we have all required plugins\r\nimport 'leaflet-fa-markers/L.Icon.FontAwesome.css'\r\nimport 'leaflet-fa-markers/L.Icon.FontAwesome.js'\r\nimport 'leaflet-fullscreen'\r\nimport 'leaflet-fullscreen/dist/leaflet.fullscreen.css'\r\nimport 'leaflet.markercluster/dist/MarkerCluster.css'\r\nimport 'leaflet.markercluster/dist/MarkerCluster.Default.css'\r\nimport 'leaflet.markercluster'\r\nimport 'leaflet.vectorgrid/dist/Leaflet.VectorGrid.bundled.js'\r\nimport 'Leaflet.Geodesic'\r\nimport 'leaflet.locatecontrol'\r\nimport 'leaflet.locatecontrol/dist/L.Control.Locate.css'\r\nimport iso8601 from 'iso8601-js-period' // Required by leaflet.timedimension\r\nimport 'leaflet-timedimension/dist/leaflet.timedimension.src.js'\r\nimport 'leaflet-timedimension/dist/leaflet.timedimension.control.css'\r\nimport '@geoman-io/leaflet-geoman-free'\r\nimport '@geoman-io/leaflet-geoman-free/dist/leaflet-geoman.css'\r\nimport { Time } from '../../../../core/client'\r\nimport { uid } from 'quasar'\r\nimport { LeafletEvents, bindLeafletEvents, generatePropertiesSchema } from '../../utils'\r\nwindow.nezasa = { iso8601 } // https://github.com/socib/Leaflet.TimeDimension/issues/124\r\n\r\n// Fix to make Leaflet assets be correctly inserted by webpack\r\ndelete L.Icon.Default.prototype._getIconUrl\r\nL.Icon.Default.mergeOptions({\r\n iconRetinaUrl: require('leaflet/dist/images/marker-icon-2x.png'),\r\n iconUrl: require('leaflet/dist/images/marker-icon.png'),\r\n shadowUrl: require('leaflet/dist/images/marker-shadow.png')\r\n})\r\n// Do not create geoman structs everywhere\r\nL.PM.setOptIn(true)\r\n\r\nexport default {\r\n data () {\r\n return {\r\n layers: {}\r\n }\r\n },\r\n methods: {\r\n refreshMap () {\r\n if (this.map) this.map.invalidateSize()\r\n },\r\n setupMap (domEl, options) {\r\n const viewerOptions = options || this.activityOptions.engine.viewer\r\n // Initialize the map\r\n this.map = L.map(domEl, Object.assign({ zoomControl: false }, viewerOptions))\r\n // Make sure geoman is initialized on the map\r\n if (this.map.pm === undefined) {\r\n this.map.options.pmIgnore = false\r\n L.PM.reInitLayer(this.map)\r\n this.map.pm.setLang(i18next.language)\r\n }\r\n bindLeafletEvents(this.map, LeafletEvents.Map, this, viewerOptions)\r\n if (_.get(viewerOptions, 'scale', true)) this.setupScaleControl()\r\n if (_.get(viewerOptions, 'geolocate', true)) this.setupGeolocateControl()\r\n this.$emit('map-ready')\r\n },\r\n setupScaleControl () {\r\n // Add a scale control\r\n this.scaleControl = new L.control.scale() // eslint-disable-line\r\n this.scaleControl.addTo(this.map)\r\n },\r\n setupGeolocateControl () {\r\n this.locateControl = new L.control.locate({ // eslint-disable-line\r\n locateOptions: {\r\n maxZoom: 16,\r\n watch: false,\r\n setView: false,\r\n timeout: 30000,\r\n enableHighAccuracy: true\r\n },\r\n strings: {\r\n title: this.$t('geolocation.TITLE'),\r\n metersUnit: this.$t('geolocation.METERS'),\r\n feetUnit: this.$t('geolocation.FEET'),\r\n popup: this.$t('geolocation.POPUP'),\r\n outsideMapBoundsMsg: this.$t('geolocation.OUTSIDE_MAP_BOUNDS')\r\n }\r\n })\r\n this.locateControl.addTo(this.map)\r\n // We'd like to use control features but without actually displaying it\r\n this.locateControl._container.style.display = 'none'\r\n },\r\n processLeafletLayerOptions (options) {\r\n // Because we update objects in place and don't want leaflet internal objects to be reactive\r\n const processedOptions = _.cloneDeep(options)\r\n const leafletOptions = processedOptions.leaflet\r\n // Transform from string to actual objects when required in some of the layer options\r\n this.leafletObjectOptions.forEach(option => {\r\n if (typeof _.get(leafletOptions, option) === 'string') {\r\n // Jump from string to object, eg { crs: 'CRS.EPSGXXX' } will become { crs: L.CRS.EPSGXXX }\r\n _.set(leafletOptions, option, _.get(L, _.get(leafletOptions, option)))\r\n }\r\n })\r\n // Copy generic options\r\n leafletOptions.attribution = processedOptions.attribution\r\n return processedOptions\r\n },\r\n createLeafletPane (paneOrZIndex) {\r\n // Create pane if required\r\n const paneName = paneOrZIndex.toString()\r\n let pane = this.map.getPane(paneName)\r\n if (!pane) {\r\n pane = this.map.createPane(paneName)\r\n if (typeof paneOrZIndex === 'number') _.set(pane, 'style.zIndex', paneOrZIndex)\r\n else _.set(pane, 'style.zIndex', 400) // Defaults for overlay in Leaflet\r\n }\r\n this.leafletPanes[paneName] = pane\r\n return pane\r\n },\r\n getLeafletPaneByName (paneOrZIndex) {\r\n const paneName = paneOrZIndex.toString()\r\n return this.leafletPanes[paneName]\r\n },\r\n removeLeafletPane (paneOrZIndex) {\r\n const paneName = paneOrZIndex.toString()\r\n const pane = this.getLeafletPaneByName(paneName)\r\n if (!pane) return\r\n delete this.leafletPanes[paneName]\r\n },\r\n updateLeafletPanesVisibility (panes) {\r\n const zoom = this.map.getZoom()\r\n // Check if we need to hide/show some panes based on current zoom level\r\n _.forOwn(this.leafletPanes, (pane, paneName) => {\r\n // Filter only some panes ?\r\n if (panes && panes.includes(paneName)) return\r\n if (!_.has(pane, 'minZoom') && !_.has(pane, 'maxZoom')) return\r\n if (!pane.style) pane.style = {}\r\n if (_.has(pane, 'minZoom') && (zoom < _.get(pane, 'minZoom'))) {\r\n pane.style.display = 'none'\r\n return\r\n }\r\n if (_.has(pane, 'maxZoom') && (zoom > _.get(pane, 'maxZoom'))) {\r\n pane.style.display = 'none'\r\n return\r\n }\r\n pane.style.display = 'block'\r\n })\r\n },\r\n createLeafletLayer (options) {\r\n const leafletOptions = options.leaflet || options\r\n // Manage panes to make z-index work for all types of layers\r\n // Indeed, although DOM-based layers can use setZIndex() to manage rendering order\r\n // SVG/Canvas-based layers provide no mean to manage render order except using bringToFront() or bringToBack()\r\n // This is why Leaflet 1.0 introduced panes: https://leafletjs.com/reference.html#map-pane & https://leafletjs.com/examples/map-panes/\r\n // By implicitely create a pane for each provided z-index makes this transparent for the user\r\n let zIndex = _.has(leafletOptions, 'zIndex')\r\n if (zIndex) {\r\n zIndex = _.get(leafletOptions, 'zIndex')\r\n this.createLeafletPane(zIndex)\r\n // Set layer to use target pane\r\n _.set(leafletOptions, 'pane', zIndex.toString())\r\n }\r\n // Different panes inside a layer can be used to manage visibility according to zoom level\r\n const panes = _.get(leafletOptions, 'panes')\r\n if (panes) {\r\n panes.forEach(paneOptions => {\r\n const pane = this.createLeafletPane(paneOptions.name || paneOptions.zIndex)\r\n Object.assign(pane, paneOptions)\r\n })\r\n this.updateLeafletPanesVisibility(panes.map(paneOptions => paneOptions.name || paneOptions.zIndex.toString()))\r\n }\r\n\r\n let layer\r\n // We use the source option as the first parameter of leaflet layer constructors,\r\n // which is usually the base URL\r\n if (leafletOptions.source) {\r\n const source = leafletOptions.source\r\n // Remove it from options to avoid sending it twice\r\n // and side effects like https://github.com/kalisio/kdk/issues/219\r\n delete leafletOptions.source\r\n layer = _.get(L, leafletOptions.type)(source, leafletOptions)\r\n } else {\r\n layer = _.get(L, leafletOptions.type)(leafletOptions)\r\n }\r\n return layer\r\n },\r\n registerLeafletConstructor (constructor) {\r\n this.leafletFactory.push(constructor)\r\n },\r\n async createLayer (options) {\r\n const processedOptions = this.processLeafletLayerOptions(options)\r\n let layer\r\n // Iterate over all registered constructors until we find one\r\n for (let i = 0; i < this.leafletFactory.length; i++) {\r\n const constructor = this.leafletFactory[i]\r\n layer = await constructor(processedOptions)\r\n if (layer) break\r\n }\r\n // Use default Leaflet layer constructor if none found\r\n return (layer || this.createLeafletLayer(processedOptions))\r\n },\r\n createLeafletTimedWmsLayer (options) {\r\n const leafletOptions = options.leaflet || options\r\n // Check for valid type\r\n if (leafletOptions.type !== 'tileLayer.wms') return\r\n let layer = this.createLeafletLayer(options)\r\n // Specific case of time dimension layer where we embed the underlying WMS layer\r\n const timeDimension = _.get(leafletOptions, 'timeDimension')\r\n if (timeDimension) {\r\n // It appears that sometimes the time resolution is missing, default as 1 day\r\n // Please refer to https://www.mapserver.org/ogc/wms_time.html#specifying-time-extents\r\n const timeRange = _.get(timeDimension, 'times')\r\n if ((typeof timeRange === 'string') && (timeRange.split('/').length === 2)) {\r\n _.set(timeDimension, 'times', `${timeRange}/P1D`)\r\n }\r\n // As we'd like to control time on a per-layer basis create a specific time dimension object\r\n layer = this.createLeafletLayer({\r\n type: 'timeDimension.layer.wms',\r\n source: layer,\r\n timeDimension: L.timeDimension(timeDimension),\r\n currentTime: Time.getCurrentTime()\r\n })\r\n // This allow the layer to conform our internal time interface\r\n layer.setCurrentTime = (datetime) => { layer._timeDimension.setCurrentTime(datetime) }\r\n }\r\n return layer\r\n },\r\n hasLayer (name) {\r\n return _.has(this.layers, name)\r\n },\r\n isLayerVisible (name) {\r\n const leafetLayer = this.getLeafletLayerByName(name)\r\n return leafetLayer && this.map.hasLayer(leafetLayer)\r\n },\r\n isLayerDisabled (layer) {\r\n const minZoom = _.get(layer, 'leaflet.minZoom')\r\n const maxZoom = _.get(layer, 'leaflet.maxZoom')\r\n let isDisabled = false\r\n if (minZoom && (this.map.getZoom() < minZoom)) isDisabled = true\r\n if (maxZoom && (this.map.getZoom() > maxZoom)) isDisabled = true\r\n return isDisabled\r\n },\r\n updateLayerDisabled (layer) {\r\n const wasDisabled = layer.isDisabled\r\n layer.isDisabled = this.isLayerDisabled(layer)\r\n if (layer.isDisabled !== wasDisabled) this.$emit(wasDisabled ? 'layer-enabled' : 'layer-disabled', layer)\r\n },\r\n getLayerByName (name) {\r\n return this.layers[name]\r\n },\r\n getLeafletLayerByName (name) {\r\n return this.leafletLayers[name]\r\n },\r\n getLayers (filter = {}) {\r\n return _.values(this.layers).filter(sift(filter))\r\n },\r\n hasLayers (filter = {}) {\r\n return _.values(this.layers).filter(sift(filter)).length > 0\r\n },\r\n async showLayer (name) {\r\n // Retrieve the layer\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n // Check the visibility state\r\n if (this.isLayerVisible(name)) return\r\n\r\n // Create the leaflet layer on show\r\n let leafletLayer = this.getLeafletLayerByName(name)\r\n if (!leafletLayer) {\r\n try {\r\n leafletLayer = await this.createLayer(layer)\r\n } catch (error) {\r\n logger.error(error)\r\n return\r\n }\r\n }\r\n // Add the leaflet layer to the map\r\n this.leafletLayers[name] = leafletLayer\r\n this.map.addLayer(leafletLayer)\r\n layer.isVisible = true\r\n\r\n // Ensure base layer will not pop on top of others\r\n if (layer.type === 'BaseLayer') leafletLayer.bringToBack()\r\n // Apply the current time if needed\r\n if (typeof leafletLayer.setCurrentTime === 'function') leafletLayer.setCurrentTime(Time.getCurrentTime())\r\n this.$emit('layer-shown', layer, leafletLayer)\r\n },\r\n hideLayer (name) {\r\n // Retrieve the layer\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n // Check the visibility state\r\n if (!this.isLayerVisible(name)) return\r\n layer.isVisible = false\r\n // Remove the leaflet layer from map\r\n const leafletLayer = this.leafletLayers[name]\r\n this.map.removeLayer(leafletLayer)\r\n const panes = _.get(layer, 'leaflet.panes')\r\n if (panes) panes.forEach(pane => this.removeLeafletPane(pane.name || pane.zIndex))\r\n this.$emit('layer-hidden', layer, leafletLayer)\r\n },\r\n async addLayer (layer) {\r\n if (layer && !this.hasLayer(layer.name)) {\r\n layer.isVisible = false\r\n layer.isDisabled = this.isLayerDisabled(layer)\r\n // Store the layer and make it reactive\r\n this.$set(this.layers, layer.name, layer)\r\n this.$emit('layer-added', layer)\r\n // Handle the visibility state\r\n if (_.get(layer, 'leaflet.isVisible', false)) await this.showLayer(layer.name)\r\n }\r\n return layer\r\n },\r\n async addGeoJsonLayer (layerSpec, geoJson) {\r\n const engine = {\r\n type: 'geoJson',\r\n isVisible: true,\r\n realtime: true\r\n }\r\n const defaultLayer = {\r\n type: 'OverlayLayer',\r\n scope: 'user',\r\n isDataEditable: true,\r\n leaflet: engine,\r\n // Avoid sharing reference to the same object although options are similar\r\n // otherwise updating one will automatically update the other one\r\n cesium: Object.assign({}, engine)\r\n }\r\n _.defaults(layerSpec, defaultLayer)\r\n if (!layerSpec.schema) {\r\n const schema = generatePropertiesSchema(geoJson, layerSpec.name)\r\n layerSpec.schema = { name: layerSpec.name, content: schema }\r\n }\r\n if (!layerSpec.featureId) {\r\n layerSpec.featureId = '_id'\r\n _.forEach(geoJson.features, feature => { feature._id = uid().toString() })\r\n }\r\n // Create an empty layer used as a container\r\n await this.addLayer(layerSpec)\r\n // Set the content\r\n await this.updateLayer(layerSpec.name, geoJson)\r\n // Zoom to it\r\n if (geoJson.bbox) this.zoomToBBox(geoJson.bbox)\r\n else this.zoomToLayer(layerSpec.name)\r\n },\r\n renameLayer (previousName, newName) {\r\n const layer = this.getLayerByName(previousName)\r\n const leafletLayer = this.getLeafletLayerByName(previousName)\r\n if (!layer) return\r\n // Update underlying layer map if layer has been already shown\r\n if (leafletLayer) {\r\n this.leafletLayers[newName] = leafletLayer\r\n delete this.leafletLayers[previousName]\r\n }\r\n // Update underlying layer map, this one is reactive\r\n this.$set(this.layers, newName, layer)\r\n this.$delete(this.layers, previousName)\r\n },\r\n removeLayer (name) {\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n // If it was visible remove it from map\r\n if (layer.isVisible) this.hideLayer(name)\r\n // Delete the layer and make it reactive\r\n this.$delete(this.layers, layer.name)\r\n delete this.leafletLayers[name]\r\n this.$emit('layer-removed', layer)\r\n },\r\n clearLayers () {\r\n Object.keys(this.layers).forEach((layer) => this.removeLayer(layer))\r\n },\r\n toGeoJson (name) {\r\n const layer = this.getLeafletLayerByName(name)\r\n if (!layer || (typeof layer.toGeoJSON !== 'function')) return\r\n return layer.toGeoJSON()\r\n },\r\n zoomToLayer (name, options) {\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n // Check for layers only visible at a given zoom level\r\n // If so simply jump to that level in order to show some data\r\n if (this.isLayerDisabled(layer)) {\r\n const minZoom = _.get(layer, 'leaflet.minZoom')\r\n if (minZoom) {\r\n const center = this.getCenter()\r\n this.center(center.longitude, center.latitude, minZoom)\r\n return\r\n }\r\n }\r\n const leafletLayer = this.getLeafletLayerByName(name)\r\n if (leafletLayer && (typeof leafletLayer.getBounds === 'function')) this.map.fitBounds(leafletLayer.getBounds(), options)\r\n },\r\n zoomToBounds (bounds) {\r\n this.map.fitBounds(bounds)\r\n },\r\n zoomToBBox (bbox) {\r\n this.zoomToBounds([[bbox[1], bbox[0]], [bbox[3], bbox[2]]])\r\n },\r\n center (longitude, latitude, zoomLevel, options) {\r\n this.map.setView(new L.LatLng(latitude, longitude), zoomLevel || this.map.getZoom(), options)\r\n },\r\n getCenter () {\r\n const center = this.map.getCenter()\r\n const zoom = this.map.getZoom()\r\n return {\r\n longitude: center.lng,\r\n latitude: center.lat,\r\n zoomLevel: zoom\r\n }\r\n },\r\n getBounds () {\r\n this.viewBounds = this.map.getBounds()\r\n const south = this.viewBounds.getSouth()\r\n const west = this.viewBounds.getWest()\r\n const north = this.viewBounds.getNorth()\r\n const east = this.viewBounds.getEast()\r\n return [[south, west], [north, east]]\r\n },\r\n showUserLocation () {\r\n const position = this.$geolocation.get().position\r\n if (this.locateControl) {\r\n this.locateControl.start()\r\n } else if (position) {\r\n this.center(position.longitude, position.latitude)\r\n }\r\n },\r\n hideUserLocation () {\r\n if (this.locateControl) {\r\n this.locateControl.stop()\r\n }\r\n },\r\n isUserLocationVisible () {\r\n return (this.locateControl && this.locateControl._active)\r\n },\r\n setCursor (className) {\r\n L.DomUtil.addClass(this.map._container, className)\r\n },\r\n isCursor (className) {\r\n return L.DomUtil.hasClass(this.map._container, className)\r\n },\r\n unsetCursor (className) {\r\n L.DomUtil.removeClass(this.map._container, className)\r\n },\r\n onCurrentMapTimeChanged (datetime) {\r\n _.forEach(this.leafletLayers, leafletLayer => {\r\n if (typeof leafletLayer.setCurrentTime === 'function') leafletLayer.setCurrentTime(datetime)\r\n })\r\n },\r\n onMapZoomChanged () {\r\n this.updateLeafletPanesVisibility()\r\n // Update disable state\r\n const zoomLayers = _.values(this.layers).filter(sift({\r\n $or: [{ 'leaflet.minZoom': { $exists: true } }, { 'leaflet.maxZoom': { $exists: true } }]\r\n }))\r\n zoomLayers.forEach(async layer => { this.updateLayerDisabled(layer) })\r\n }\r\n },\r\n created () {\r\n this.leafletLayers = {}\r\n this.leafletPanes = {}\r\n this.leafletFactory = []\r\n // Default Leaflet layer options requiring conversion from string to actual Leaflet objects\r\n this.leafletObjectOptions = ['crs', 'rendererFactory']\r\n // Register support for WMS-T\r\n this.registerLeafletConstructor(this.createLeafletTimedWmsLayer)\r\n this.$on('zoomend', this.onMapZoomChanged)\r\n this.$events.$on('time-current-time-changed', this.onCurrentMapTimeChanged)\r\n },\r\n beforeDestroy () {\r\n this.clearLayers()\r\n this.$off('zoomend', this.onMapZoomChanged)\r\n this.$events.$off('time-current-time-changed', this.onCurrentMapTimeChanged)\r\n },\r\n destroyed () {\r\n if (this.map) this.map.remove()\r\n }\r\n}\r\n"]}
@@ -520,6 +520,8 @@ with(this.proxy) { ${d.code} }
520
520
  this.canvasLayerDrawContext = Object.assign({
521
521
  proxy: this.canvasLayerDrawProxy,
522
522
  // log: console.log,
523
+ // Math constants
524
+ Math: Math,
523
525
  // a few handy helpers for draw code
524
526
  vec2: (pointA, pointB) => {
525
527
  return { x: pointA.x - pointB.x, y: pointA.y - pointB.y };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.canvas-layers.js"],"names":["forwardEventBehindPane","e","pane","removed","node","target","display","style","document","elementFromPoint","clientX","clientY","ev","MouseEvent","type","stopped","dispatchEvent","_stopped","L","DomEvent","stop","KanvasLayer","Layer","Class","extend","initialize","options","_map","_canvas","_frame","_delegate","setOptions","clickableFeatures","mousePosition","highlighting","autoRedraw","tooltip","_tooltip","_tooltipContent","html","_getTooltipContent","feature","property","val","_","get","template","compiler","properties","delegate","del","setAutoRedraw","enable","needRedraw","Util","requestAnimFrame","drawLayer","redrawNow","frame","latLonToCanvas","coords","a","latLngToLayerPoint","latLng","lat","lon","b","DomUtil","getPosition","subtract","clearClickableFeatures","length","addClickableFeature","clickablePath","clickableStrokeWidth","highlightPath","undefined","highlightAsStroke","highlightStyle","push","click","path","strokeWidth","highlight","asStroke","hasClickableFeaturesAt","latlng","pt","lng","ctx","getContext","inFeature","save","lineWidth","isPointInStroke","x","y","isPointInPath","restore","getClickableFeaturesAt","indexes","forEach","index","_onLayerDidResize","resizeEvent","width","newSize","height","_onLayerDidMove","topLeft","containerPointToLayerPoint","setPosition","_onLayerClick","event","originalEvent","fire","Object","assign","clickThroughEnabled","_panes","overlayPane","_onLayerContextMenu","_onMouseMove","hoveringFeatures","hasLayer","closeTooltip","content","setLatLng","setContent","openTooltip","getEvents","events","resize","moveend","zoom","zoomAnimation","Browser","any3d","zoomanim","_animateZoom","pointerEventsEnabled","contextmenu","mousemove","onAdd","map","create","pointerEvents","size","getSize","animated","addClass","appendChild","on","onLayerDidMount","onRemove","onLayerWillUnmount","cancelAnimFrame","removeChild","off","addTo","addLayer","LatLonToMercator","latlon","Math","PI","log","tan","bounds","getBounds","getZoom","center","getCenter","corner","containerPointToLatLng","onDrawLayer","layer","canvas","highlightIndexes","globalAlpha","prop","stroke","fill","_setTransform","el","offset","scale","pos","Point","TRANSFORM","ie3d","getZoomScale","_latLngBoundsToNewLayerBounds","min","_getCenterOffset","_multiplyBy","_getMapPanePos","setTransform","kanvasLayer","methods","createLeafletCanvasLayer","layerOptions","leaflet","createLeafletLayer","setCanvasLayerDrawCode","draw","userData","setCanvasLayerUserData","setCanvasLayerAutoRedraw","drawCode","leafletLayer","getLeafletLayerByName","updateListeners","canvasLayer","listen","layerName","listenedLayers","state","listenedLayer","drawCalls","compatContext","d","Function","code","srcLayer","srcFeature","split","context","_features","call","has","values","info","now","Date","bind","canvasLayerDrawContext","clearRect","updateCanvasLayerDrawCode","newDrawCode","setCanvasLayerContext","created","canvasLayerDrawProxy","Proxy","window","receiver","proxy","vec2","pointA","pointB","len2","sqrt","scale2","value","norm2","len","CanvasDrawContext","registerLeafletConstructor","beforeDestroy"],"mappings":"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","file":"mixin.canvas-layers.js","sourcesContent":["import _ from 'lodash'\r\nimport { CanvasDrawContext } from '../../canvas-draw-context'\r\nimport { bindLeafletEvents } from '../../utils'\r\nimport L from 'leaflet'\r\n\r\n// Helper function to forward events when click through is enabled\r\n// on canvas layers\r\nfunction forwardEventBehindPane (e, pane) {\r\n // backup original event target and display mode\r\n const removed = { node: e.target, display: e.target.style.display }\r\n // make event target hidden\r\n removed.node.style.display = 'none'\r\n // query element at position now that our canvas is hidden\r\n const target = document.elementFromPoint(e.clientX, e.clientY)\r\n\r\n if (target && target !== pane) {\r\n // synthetize a new event on the element\r\n const ev = new MouseEvent(e.type, e)\r\n const stopped = !target.dispatchEvent(ev)\r\n if (stopped || ev._stopped) L.DomEvent.stop(e)\r\n }\r\n\r\n // restore display mode on original event target\r\n removed.node.style.display = removed.display\r\n}\r\n\r\nL.KanvasLayer = (L.Layer ? L.Layer : L.Class).extend({\r\n // -- initialized is called on prototype\r\n initialize: function (options) {\r\n this._map = null\r\n this._canvas = null\r\n this._frame = null\r\n this._delegate = null\r\n L.setOptions(this, options)\r\n\r\n this.clickableFeatures = []\r\n this.mousePosition = null\r\n this.highlighting = false\r\n this.autoRedraw = false\r\n\r\n if (options.tooltip) {\r\n this._tooltip = L.tooltip({})\r\n this._tooltipContent = ''\r\n // html | property | template\r\n if (options.tooltip.html) {\r\n this._getTooltipContent = (feature) => { return options.tooltip.html }\r\n } else if (options.tooltip.property) {\r\n this._getTooltipContent = (feature) => {\r\n const val = _.get(feature, options.tooltip.property)\r\n return `${val}`\r\n }\r\n } else if (options.tooltip.template) {\r\n const compiler = _.template(options.tooltip.template)\r\n this._getTooltipContent = (feature) => {\r\n return compiler({ feature, properties: feature.properties })\r\n }\r\n }\r\n }\r\n },\r\n\r\n delegate: function (del) {\r\n this._delegate = del\r\n },\r\n\r\n setAutoRedraw: function (enable) {\r\n this.autoRedraw = enable\r\n if (enable && this._frame === null) this.needRedraw()\r\n },\r\n\r\n needRedraw: function () {\r\n if (this._frame !== null || this._canvas === null) return\r\n this._frame = L.Util.requestAnimFrame(this.drawLayer, this)\r\n },\r\n\r\n redrawNow: function () {\r\n const frame = this._frame\r\n const autoRedraw = this.autoRedraw\r\n this.autoRedraw = false\r\n this.drawLayer()\r\n this._frame = frame\r\n this.autoRedraw = autoRedraw\r\n },\r\n\r\n latLonToCanvas: function (coords) {\r\n const a = this._map.latLngToLayerPoint(L.latLng(coords.lat, coords.lon))\r\n const b = L.DomUtil.getPosition(this._canvas)\r\n return a.subtract(b)\r\n },\r\n\r\n clearClickableFeatures: function () {\r\n this.clickableFeatures.length = 0\r\n },\r\n\r\n addClickableFeature: function (feature, clickablePath, { clickableStrokeWidth = 0, highlightPath = undefined, highlightAsStroke = false, highlightStyle = {} }) {\r\n this.clickableFeatures.push({\r\n feature,\r\n click: { path: clickablePath, strokeWidth: clickableStrokeWidth }\r\n })\r\n if (highlightPath) {\r\n this.clickableFeatures[this.clickableFeatures.length - 1].highlight = {\r\n path: highlightPath,\r\n asStroke: highlightAsStroke,\r\n style: highlightStyle\r\n }\r\n }\r\n },\r\n\r\n hasClickableFeaturesAt: function (latlng) {\r\n if (!latlng || this.clickableFeatures.length === 0) return false\r\n\r\n const pt = this.latLonToCanvas({ lat: latlng.lat, lon: latlng.lng })\r\n const ctx = this._canvas.getContext('2d')\r\n let inFeature = false\r\n for (const feature of this.clickableFeatures) {\r\n ctx.save()\r\n if (feature.click.strokeWidth) {\r\n ctx.lineWidth = feature.click.strokeWidth\r\n inFeature = ctx.isPointInStroke(feature.click.path, pt.x, pt.y)\r\n } else {\r\n inFeature = ctx.isPointInPath(feature.click.path, pt.x, pt.y)\r\n }\r\n ctx.restore()\r\n if (inFeature) return true\r\n }\r\n return false\r\n },\r\n\r\n getClickableFeaturesAt: function (latlng) {\r\n if (!latlng || this.clickableFeatures.length === 0) return []\r\n\r\n const pt = this.latLonToCanvas({ lat: latlng.lat, lon: latlng.lng })\r\n\r\n const indexes = []\r\n const ctx = this._canvas.getContext('2d')\r\n this.clickableFeatures.forEach((feature, index) => {\r\n ctx.save()\r\n if (feature.click.strokeWidth) {\r\n ctx.lineWidth = feature.click.strokeWidth\r\n if (ctx.isPointInStroke(feature.click.path, pt.x, pt.y)) indexes.push(index)\r\n } else {\r\n if (ctx.isPointInPath(feature.click.path, pt.x, pt.y)) indexes.push(index)\r\n }\r\n ctx.restore()\r\n })\r\n return indexes\r\n },\r\n\r\n // -------------------------------------------------------------\r\n _onLayerDidResize: function (resizeEvent) {\r\n this._canvas.width = resizeEvent.newSize.x\r\n this._canvas.height = resizeEvent.newSize.y\r\n },\r\n // -------------------------------------------------------------\r\n _onLayerDidMove: function () {\r\n var topLeft = this._map.containerPointToLayerPoint([0, 0])\r\n L.DomUtil.setPosition(this._canvas, topLeft)\r\n this.redrawNow()\r\n },\r\n // -------------------------------------------------------------\r\n _onLayerClick: function (event) {\r\n if (event.originalEvent.target !== this._canvas) return\r\n\r\n const indexes = this.getClickableFeaturesAt(event.latlng)\r\n if (indexes.length) {\r\n this.fire('click', Object.assign({}, event, { feature: this.clickableFeatures[indexes[0]].feature }))\r\n } else if (this.options.clickThroughEnabled) {\r\n // let click pass through our canvas when there's no hit\r\n const pane = this.options.pane ? this._map._panes[this.options.pane] : this._map._panes.overlayPane\r\n forwardEventBehindPane(event.originalEvent, pane)\r\n }\r\n },\r\n // -------------------------------------------------------------\r\n _onLayerContextMenu: function (event) {\r\n if (event.originalEvent.target !== this._canvas) return\r\n\r\n const indexes = this.getClickableFeaturesAt(event.latlng)\r\n if (indexes.length === 0) return\r\n this.fire('contextmenu', Object.assign({}, event, { feature: this.clickableFeatures[indexes[0]].feature }))\r\n },\r\n // -------------------------------------------------------------\r\n _onMouseMove: function (event) {\r\n if (event.originalEvent.target !== this._canvas) return\r\n\r\n this.mousePosition = event.latlng\r\n\r\n let hoveringFeatures = false\r\n if (this._tooltip) {\r\n // User requires a tooltip, check if we need to close, update or open it\r\n const indexes = this.getClickableFeaturesAt(event.latlng)\r\n if (indexes.length === 0 && this._map.hasLayer(this._tooltip)) {\r\n // Close tooltip\r\n this._map.closeTooltip(this._tooltip)\r\n this._tooltipContent = ''\r\n } else if (indexes.length) {\r\n // Open or update\r\n const content = this._getTooltipContent(this.clickableFeatures[indexes[0]].feature)\r\n if (content !== this._tooltipContent) {\r\n this._tooltip.setLatLng(event.latlng)\r\n this._tooltip.setContent(content)\r\n this._tooltipContent = content\r\n }\r\n if (!this._map.hasLayer(this._tooltip)) this._map.openTooltip(this._tooltip)\r\n hoveringFeatures = true\r\n }\r\n } else {\r\n hoveringFeatures = this.hasClickableFeaturesAt(event.latlng)\r\n }\r\n\r\n // Skip redraw when no feature hovered and we're not highlighting\r\n if (!hoveringFeatures && !this.highlighting) return\r\n this.needRedraw()\r\n },\r\n // -------------------------------------------------------------\r\n getEvents: function () {\r\n const events = {\r\n resize: this._onLayerDidResize,\r\n moveend: this._onLayerDidMove,\r\n zoom: this._onLayerDidMove\r\n }\r\n if (this._map.options.zoomAnimation && L.Browser.any3d) {\r\n events.zoomanim = this._animateZoom\r\n }\r\n if (this.options.pointerEventsEnabled) {\r\n events.click = this._onLayerClick\r\n events.contextmenu = this._onLayerContextMenu\r\n events.mousemove = this._onMouseMove\r\n }\r\n\r\n return events\r\n },\r\n // -------------------------------------------------------------\r\n onAdd: function (map) {\r\n this._map = map\r\n this._canvas = L.DomUtil.create('canvas', 'leaflet-layer')\r\n // disable pointer events if not explicitely enabled\r\n if (!this.options.pointerEventsEnabled) this._canvas.style.pointerEvents = 'none'\r\n\r\n var size = this._map.getSize()\r\n this._canvas.width = size.x\r\n this._canvas.height = size.y\r\n\r\n var topLeft = this._map.containerPointToLayerPoint([0, 0])\r\n L.DomUtil.setPosition(this._canvas, topLeft)\r\n\r\n var animated = this._map.options.zoomAnimation && L.Browser.any3d\r\n L.DomUtil.addClass(this._canvas, 'leaflet-zoom-' + (animated ? 'animated' : 'hide'))\r\n\r\n const pane = this.options.pane ? map._panes[this.options.pane] : map._panes.overlayPane\r\n pane.appendChild(this._canvas)\r\n\r\n map.on(this.getEvents(), this)\r\n\r\n var del = this._delegate || this\r\n del.onLayerDidMount && del.onLayerDidMount() // -- callback\r\n this.needRedraw()\r\n },\r\n\r\n // -------------------------------------------------------------\r\n onRemove: function (map) {\r\n var del = this._delegate || this\r\n del.onLayerWillUnmount && del.onLayerWillUnmount() // -- callback\r\n\r\n if (this._frame !== null) {\r\n L.Util.cancelAnimFrame(this._frame)\r\n }\r\n\r\n const pane = this.options.pane ? map._panes[this.options.pane] : map._panes.overlayPane\r\n pane.removeChild(this._canvas)\r\n\r\n map.off(this.getEvents(), this)\r\n\r\n this._canvas = null\r\n this._frame = null\r\n },\r\n\r\n // ---------- --------------------------------------------------\r\n addTo: function (map) {\r\n map.addLayer(this)\r\n return this\r\n },\r\n // --------------------------------------------------------------------------------\r\n LatLonToMercator: function (latlon) {\r\n return {\r\n x: latlon.lng * 6378137 * Math.PI / 180,\r\n y: Math.log(Math.tan((90 + latlon.lat) * Math.PI / 360)) * 6378137\r\n }\r\n },\r\n\r\n // ------------------------------------------------------------------------------\r\n drawLayer: function () {\r\n // -- todo make the viewInfo properties flat objects.\r\n var size = this._map.getSize()\r\n var bounds = this._map.getBounds()\r\n var zoom = this._map.getZoom()\r\n\r\n var center = this.LatLonToMercator(this._map.getCenter())\r\n var corner = this.LatLonToMercator(this._map.containerPointToLatLng(this._map.getSize()))\r\n\r\n var del = this._delegate || this\r\n del.onDrawLayer && del.onDrawLayer({\r\n layer: this,\r\n canvas: this._canvas,\r\n bounds: bounds,\r\n size: size,\r\n zoom: zoom,\r\n center: center,\r\n corner: corner\r\n })\r\n const highlightIndexes = this.getClickableFeaturesAt(this.mousePosition)\r\n this.highlighting = highlightIndexes.length > 0\r\n if (this.highlighting) {\r\n const ctx = this._canvas.getContext('2d')\r\n for (const index of highlightIndexes) {\r\n const feature = this.clickableFeatures[index]\r\n\r\n ctx.save()\r\n ctx.globalAlpha = 0.5\r\n for (const prop in feature.highlight.style) ctx[prop] = feature.highlight.style[prop]\r\n if (feature.highlight.asStroke) ctx.stroke(feature.highlight.path)\r\n else ctx.fill(feature.highlight.path)\r\n ctx.restore()\r\n }\r\n }\r\n\r\n this._frame = null\r\n // schedule a new draw if autoRedraw is enabled\r\n if (this.autoRedraw) this.needRedraw()\r\n },\r\n // -- L.DomUtil.setTransform from leaflet 1.0.0 to work on 0.0.7\r\n // ------------------------------------------------------------------------------\r\n _setTransform: function (el, offset, scale) {\r\n var pos = offset || new L.Point(0, 0)\r\n\r\n el.style[L.DomUtil.TRANSFORM] =\r\n (L.Browser.ie3d\r\n ? 'translate(' + pos.x + 'px,' + pos.y + 'px)'\r\n : 'translate3d(' + pos.x + 'px,' + pos.y + 'px,0)') +\r\n (scale ? ' scale(' + scale + ')' : '')\r\n },\r\n\r\n // ------------------------------------------------------------------------------\r\n _animateZoom: function (e) {\r\n var scale = this._map.getZoomScale(e.zoom)\r\n // -- different calc of animation zoom in leaflet 1.0.3 thanks @peterkarabinovic, @jduggan1\r\n var offset = L.Layer ? this._map._latLngBoundsToNewLayerBounds(this._map.getBounds(), e.zoom, e.center).min\r\n : this._map._getCenterOffset(e.center)._multiplyBy(-scale).subtract(this._map._getMapPanePos())\r\n\r\n L.DomUtil.setTransform(this._canvas, offset, scale)\r\n }\r\n})\r\n\r\nL.kanvasLayer = function (options) {\r\n return new L.KanvasLayer(options)\r\n}\r\n\r\nexport default {\r\n methods: {\r\n createLeafletCanvasLayer (options) {\r\n const layerOptions = options.leaflet || options\r\n\r\n // Check for valid type\r\n if (layerOptions.type !== 'kanvasLayer') return\r\n\r\n const layer = this.createLeafletLayer(options)\r\n this.setCanvasLayerDrawCode(layer, layerOptions.draw)\r\n if (layerOptions.userData) this.setCanvasLayerUserData(layer, layerOptions.userData)\r\n if (layerOptions.autoRedraw) this.setCanvasLayerAutoRedraw(layer, layerOptions.autoRedraw)\r\n bindLeafletEvents(layer, ['click', 'contextmenu'], this, options)\r\n return layer\r\n },\r\n\r\n setCanvasLayerDrawCode (layer, drawCode, autoRedraw = false) {\r\n const leafletLayer = typeof layer === 'string' ? this.getLeafletLayerByName(layer) : layer\r\n if (!leafletLayer) return\r\n\r\n // helper function to manage listened layers states\r\n // since canvas layer draw stuff related to geojson layers\r\n // we listen to geojson layers 'update' event to mark our\r\n // canvas layer with needRedraw\r\n const updateListeners = (canvasLayer, listen) => {\r\n for (const layerName in canvasLayer.listenedLayers) {\r\n const state = canvasLayer.listenedLayers[layerName]\r\n if (state === listen) continue\r\n const listenedLayer = this.getLeafletLayerByName(layerName)\r\n if (!listenedLayer) continue\r\n if (listen) listenedLayer.on('update', canvasLayer.needRedraw, canvasLayer)\r\n else listenedLayer.off('update', canvasLayer.needRedraw, canvasLayer)\r\n canvasLayer.listenedLayers[layerName] = listen\r\n }\r\n }\r\n\r\n // disconnect from previous geojson layers\r\n updateListeners(leafletLayer, false)\r\n\r\n leafletLayer.listenedLayers = {}\r\n leafletLayer.drawCalls = []\r\n if (leafletLayer.userData === undefined) leafletLayer.userData = {}\r\n if (leafletLayer.compatContext === undefined) leafletLayer.compatContext = {}\r\n\r\n leafletLayer.clearClickableFeatures()\r\n\r\n for (const d of drawCode) {\r\n /* eslint no-new-func: 0 */\r\n const drawCode = Function(`\r\n// define visible variables\r\nconst ctx = this;\r\nwith(this.proxy) { ${d.code} }\r\n`)\r\n\r\n if (d.feature) {\r\n const [srcLayer, srcFeature] = d.feature.split('?')\r\n leafletLayer.drawCalls.push((context) => {\r\n const layer = this.getLeafletLayerByName(srcLayer)\r\n if (!layer) return\r\n const feature = layer._features ? layer._features[srcFeature] : undefined\r\n if (!feature) return\r\n context.feature = feature\r\n drawCode.call(context)\r\n })\r\n // we'll have to listen source geojson layer 'update' event\r\n if (!_.has(leafletLayer.listenedLayers, srcLayer)) leafletLayer.listenedLayers[srcLayer] = false\r\n } else if (d.layer) {\r\n leafletLayer.drawCalls.push((context) => {\r\n const layer = this.getLeafletLayerByName(d.layer)\r\n if (!layer) return\r\n for (const feature of Object.values(layer._features)) {\r\n context.feature = feature\r\n drawCode.call(context)\r\n }\r\n })\r\n // we'll have to listen source geojson layer 'update' event\r\n if (!_.has(leafletLayer.listenedLayers, d.layer)) leafletLayer.listenedLayers[d.layer] = false\r\n }\r\n }\r\n\r\n if (!leafletLayer.onDrawLayer) {\r\n // build draw function for the layer\r\n leafletLayer.onDrawLayer = (info) => {\r\n // update listener states\r\n updateListeners(leafletLayer, true)\r\n\r\n const ctx = info.canvas.getContext('2d')\r\n // build context for draw code\r\n // here we merge global canvas layer context,\r\n // user defined context and current state context\r\n const context = Object.assign(\r\n // current state context\r\n {\r\n canvas: ctx,\r\n now: Date.now(),\r\n zoom: info.zoom,\r\n latLonToCanvas: leafletLayer.latLonToCanvas.bind(leafletLayer),\r\n clearClickableFeatures: leafletLayer.clearClickableFeatures.bind(leafletLayer),\r\n addClickableFeature: leafletLayer.addClickableFeature.bind(leafletLayer),\r\n userData: leafletLayer.userData\r\n },\r\n leafletLayer.compatContext,\r\n // global context\r\n this.canvasLayerDrawContext)\r\n\r\n // draw\r\n ctx.save()\r\n ctx.clearRect(0, 0, info.canvas.width, info.canvas.height)\r\n for (const draw of leafletLayer.drawCalls) draw(context)\r\n ctx.restore()\r\n }\r\n }\r\n\r\n leafletLayer.setAutoRedraw(autoRedraw)\r\n leafletLayer.needRedraw()\r\n },\r\n\r\n setCanvasLayerUserData (layer, userData) {\r\n const leafletLayer = typeof layer === 'string' ? this.getLeafletLayerByName(layer) : layer\r\n if (!leafletLayer) return\r\n\r\n leafletLayer.userData = Object.assign(leafletLayer.userData, userData)\r\n leafletLayer.needRedraw()\r\n },\r\n\r\n setCanvasLayerAutoRedraw (layer, autoRedraw) {\r\n const leafletLayer = typeof layer === 'string' ? this.getLeafletLayerByName(layer) : layer\r\n if (!leafletLayer) return\r\n\r\n leafletLayer.setAutoRedraw(autoRedraw)\r\n },\r\n\r\n /* Compatibility methods */\r\n\r\n updateCanvasLayerDrawCode (layerName, newDrawCode, autoRedraw = false) {\r\n this.setCanvasLayerDrawCode(layerName, newDrawCode, autoRedraw)\r\n },\r\n\r\n setCanvasLayerContext (layerName, context) {\r\n const leafletLayer = this.getLeafletLayerByName(layerName)\r\n if (!leafletLayer) return\r\n\r\n leafletLayer.compatContext = context\r\n leafletLayer.needRedraw()\r\n }\r\n },\r\n\r\n created () {\r\n // a proxy to limit access to variables not defined in draw code scope\r\n this.canvasLayerDrawProxy = new Proxy(window, {\r\n get: (target, prop, receiver) => { return undefined }\r\n })\r\n // the base context we'll make available in draw code\r\n this.canvasLayerDrawContext = Object.assign({\r\n proxy: this.canvasLayerDrawProxy,\r\n // log: console.log,\r\n // a few handy helpers for draw code\r\n vec2: (pointA, pointB) => { return { x: pointA.x - pointB.x, y: pointA.y - pointB.y } },\r\n len2: (vec2) => { return Math.sqrt(vec2.x * vec2.x + vec2.y * vec2.y) },\r\n scale2: (vec2, value) => { return { x: vec2.x * value, y: vec2.y * value } },\r\n norm2: (vec2) => {\r\n const len = Math.sqrt(vec2.x * vec2.x + vec2.y * vec2.y)\r\n return { x: vec2.x / len, y: vec2.y / len }\r\n }\r\n }, CanvasDrawContext.get())\r\n\r\n this.registerLeafletConstructor(this.createLeafletCanvasLayer)\r\n },\r\n\r\n beforeDestroy () {\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.canvas-layers.js"],"names":["forwardEventBehindPane","e","pane","removed","node","target","display","style","document","elementFromPoint","clientX","clientY","ev","MouseEvent","type","stopped","dispatchEvent","_stopped","L","DomEvent","stop","KanvasLayer","Layer","Class","extend","initialize","options","_map","_canvas","_frame","_delegate","setOptions","clickableFeatures","mousePosition","highlighting","autoRedraw","tooltip","_tooltip","_tooltipContent","html","_getTooltipContent","feature","property","val","_","get","template","compiler","properties","delegate","del","setAutoRedraw","enable","needRedraw","Util","requestAnimFrame","drawLayer","redrawNow","frame","latLonToCanvas","coords","a","latLngToLayerPoint","latLng","lat","lon","b","DomUtil","getPosition","subtract","clearClickableFeatures","length","addClickableFeature","clickablePath","clickableStrokeWidth","highlightPath","undefined","highlightAsStroke","highlightStyle","push","click","path","strokeWidth","highlight","asStroke","hasClickableFeaturesAt","latlng","pt","lng","ctx","getContext","inFeature","save","lineWidth","isPointInStroke","x","y","isPointInPath","restore","getClickableFeaturesAt","indexes","forEach","index","_onLayerDidResize","resizeEvent","width","newSize","height","_onLayerDidMove","topLeft","containerPointToLayerPoint","setPosition","_onLayerClick","event","originalEvent","fire","Object","assign","clickThroughEnabled","_panes","overlayPane","_onLayerContextMenu","_onMouseMove","hoveringFeatures","hasLayer","closeTooltip","content","setLatLng","setContent","openTooltip","getEvents","events","resize","moveend","zoom","zoomAnimation","Browser","any3d","zoomanim","_animateZoom","pointerEventsEnabled","contextmenu","mousemove","onAdd","map","create","pointerEvents","size","getSize","animated","addClass","appendChild","on","onLayerDidMount","onRemove","onLayerWillUnmount","cancelAnimFrame","removeChild","off","addTo","addLayer","LatLonToMercator","latlon","Math","PI","log","tan","bounds","getBounds","getZoom","center","getCenter","corner","containerPointToLatLng","onDrawLayer","layer","canvas","highlightIndexes","globalAlpha","prop","stroke","fill","_setTransform","el","offset","scale","pos","Point","TRANSFORM","ie3d","getZoomScale","_latLngBoundsToNewLayerBounds","min","_getCenterOffset","_multiplyBy","_getMapPanePos","setTransform","kanvasLayer","methods","createLeafletCanvasLayer","layerOptions","leaflet","createLeafletLayer","setCanvasLayerDrawCode","draw","userData","setCanvasLayerUserData","setCanvasLayerAutoRedraw","drawCode","leafletLayer","getLeafletLayerByName","updateListeners","canvasLayer","listen","layerName","listenedLayers","state","listenedLayer","drawCalls","compatContext","d","Function","code","srcLayer","srcFeature","split","context","_features","call","has","values","info","now","Date","bind","canvasLayerDrawContext","clearRect","updateCanvasLayerDrawCode","newDrawCode","setCanvasLayerContext","created","canvasLayerDrawProxy","Proxy","window","receiver","proxy","vec2","pointA","pointB","len2","sqrt","scale2","value","norm2","len","CanvasDrawContext","registerLeafletConstructor","beforeDestroy"],"mappings":"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","file":"mixin.canvas-layers.js","sourcesContent":["import _ from 'lodash'\r\nimport { CanvasDrawContext } from '../../canvas-draw-context'\r\nimport { bindLeafletEvents } from '../../utils'\r\nimport L from 'leaflet'\r\n\r\n// Helper function to forward events when click through is enabled\r\n// on canvas layers\r\nfunction forwardEventBehindPane (e, pane) {\r\n // backup original event target and display mode\r\n const removed = { node: e.target, display: e.target.style.display }\r\n // make event target hidden\r\n removed.node.style.display = 'none'\r\n // query element at position now that our canvas is hidden\r\n const target = document.elementFromPoint(e.clientX, e.clientY)\r\n\r\n if (target && target !== pane) {\r\n // synthetize a new event on the element\r\n const ev = new MouseEvent(e.type, e)\r\n const stopped = !target.dispatchEvent(ev)\r\n if (stopped || ev._stopped) L.DomEvent.stop(e)\r\n }\r\n\r\n // restore display mode on original event target\r\n removed.node.style.display = removed.display\r\n}\r\n\r\nL.KanvasLayer = (L.Layer ? L.Layer : L.Class).extend({\r\n // -- initialized is called on prototype\r\n initialize: function (options) {\r\n this._map = null\r\n this._canvas = null\r\n this._frame = null\r\n this._delegate = null\r\n L.setOptions(this, options)\r\n\r\n this.clickableFeatures = []\r\n this.mousePosition = null\r\n this.highlighting = false\r\n this.autoRedraw = false\r\n\r\n if (options.tooltip) {\r\n this._tooltip = L.tooltip({})\r\n this._tooltipContent = ''\r\n // html | property | template\r\n if (options.tooltip.html) {\r\n this._getTooltipContent = (feature) => { return options.tooltip.html }\r\n } else if (options.tooltip.property) {\r\n this._getTooltipContent = (feature) => {\r\n const val = _.get(feature, options.tooltip.property)\r\n return `${val}`\r\n }\r\n } else if (options.tooltip.template) {\r\n const compiler = _.template(options.tooltip.template)\r\n this._getTooltipContent = (feature) => {\r\n return compiler({ feature, properties: feature.properties })\r\n }\r\n }\r\n }\r\n },\r\n\r\n delegate: function (del) {\r\n this._delegate = del\r\n },\r\n\r\n setAutoRedraw: function (enable) {\r\n this.autoRedraw = enable\r\n if (enable && this._frame === null) this.needRedraw()\r\n },\r\n\r\n needRedraw: function () {\r\n if (this._frame !== null || this._canvas === null) return\r\n this._frame = L.Util.requestAnimFrame(this.drawLayer, this)\r\n },\r\n\r\n redrawNow: function () {\r\n const frame = this._frame\r\n const autoRedraw = this.autoRedraw\r\n this.autoRedraw = false\r\n this.drawLayer()\r\n this._frame = frame\r\n this.autoRedraw = autoRedraw\r\n },\r\n\r\n latLonToCanvas: function (coords) {\r\n const a = this._map.latLngToLayerPoint(L.latLng(coords.lat, coords.lon))\r\n const b = L.DomUtil.getPosition(this._canvas)\r\n return a.subtract(b)\r\n },\r\n\r\n clearClickableFeatures: function () {\r\n this.clickableFeatures.length = 0\r\n },\r\n\r\n addClickableFeature: function (feature, clickablePath, { clickableStrokeWidth = 0, highlightPath = undefined, highlightAsStroke = false, highlightStyle = {} }) {\r\n this.clickableFeatures.push({\r\n feature,\r\n click: { path: clickablePath, strokeWidth: clickableStrokeWidth }\r\n })\r\n if (highlightPath) {\r\n this.clickableFeatures[this.clickableFeatures.length - 1].highlight = {\r\n path: highlightPath,\r\n asStroke: highlightAsStroke,\r\n style: highlightStyle\r\n }\r\n }\r\n },\r\n\r\n hasClickableFeaturesAt: function (latlng) {\r\n if (!latlng || this.clickableFeatures.length === 0) return false\r\n\r\n const pt = this.latLonToCanvas({ lat: latlng.lat, lon: latlng.lng })\r\n const ctx = this._canvas.getContext('2d')\r\n let inFeature = false\r\n for (const feature of this.clickableFeatures) {\r\n ctx.save()\r\n if (feature.click.strokeWidth) {\r\n ctx.lineWidth = feature.click.strokeWidth\r\n inFeature = ctx.isPointInStroke(feature.click.path, pt.x, pt.y)\r\n } else {\r\n inFeature = ctx.isPointInPath(feature.click.path, pt.x, pt.y)\r\n }\r\n ctx.restore()\r\n if (inFeature) return true\r\n }\r\n return false\r\n },\r\n\r\n getClickableFeaturesAt: function (latlng) {\r\n if (!latlng || this.clickableFeatures.length === 0) return []\r\n\r\n const pt = this.latLonToCanvas({ lat: latlng.lat, lon: latlng.lng })\r\n\r\n const indexes = []\r\n const ctx = this._canvas.getContext('2d')\r\n this.clickableFeatures.forEach((feature, index) => {\r\n ctx.save()\r\n if (feature.click.strokeWidth) {\r\n ctx.lineWidth = feature.click.strokeWidth\r\n if (ctx.isPointInStroke(feature.click.path, pt.x, pt.y)) indexes.push(index)\r\n } else {\r\n if (ctx.isPointInPath(feature.click.path, pt.x, pt.y)) indexes.push(index)\r\n }\r\n ctx.restore()\r\n })\r\n return indexes\r\n },\r\n\r\n // -------------------------------------------------------------\r\n _onLayerDidResize: function (resizeEvent) {\r\n this._canvas.width = resizeEvent.newSize.x\r\n this._canvas.height = resizeEvent.newSize.y\r\n },\r\n // -------------------------------------------------------------\r\n _onLayerDidMove: function () {\r\n var topLeft = this._map.containerPointToLayerPoint([0, 0])\r\n L.DomUtil.setPosition(this._canvas, topLeft)\r\n this.redrawNow()\r\n },\r\n // -------------------------------------------------------------\r\n _onLayerClick: function (event) {\r\n if (event.originalEvent.target !== this._canvas) return\r\n\r\n const indexes = this.getClickableFeaturesAt(event.latlng)\r\n if (indexes.length) {\r\n this.fire('click', Object.assign({}, event, { feature: this.clickableFeatures[indexes[0]].feature }))\r\n } else if (this.options.clickThroughEnabled) {\r\n // let click pass through our canvas when there's no hit\r\n const pane = this.options.pane ? this._map._panes[this.options.pane] : this._map._panes.overlayPane\r\n forwardEventBehindPane(event.originalEvent, pane)\r\n }\r\n },\r\n // -------------------------------------------------------------\r\n _onLayerContextMenu: function (event) {\r\n if (event.originalEvent.target !== this._canvas) return\r\n\r\n const indexes = this.getClickableFeaturesAt(event.latlng)\r\n if (indexes.length === 0) return\r\n this.fire('contextmenu', Object.assign({}, event, { feature: this.clickableFeatures[indexes[0]].feature }))\r\n },\r\n // -------------------------------------------------------------\r\n _onMouseMove: function (event) {\r\n if (event.originalEvent.target !== this._canvas) return\r\n\r\n this.mousePosition = event.latlng\r\n\r\n let hoveringFeatures = false\r\n if (this._tooltip) {\r\n // User requires a tooltip, check if we need to close, update or open it\r\n const indexes = this.getClickableFeaturesAt(event.latlng)\r\n if (indexes.length === 0 && this._map.hasLayer(this._tooltip)) {\r\n // Close tooltip\r\n this._map.closeTooltip(this._tooltip)\r\n this._tooltipContent = ''\r\n } else if (indexes.length) {\r\n // Open or update\r\n const content = this._getTooltipContent(this.clickableFeatures[indexes[0]].feature)\r\n if (content !== this._tooltipContent) {\r\n this._tooltip.setLatLng(event.latlng)\r\n this._tooltip.setContent(content)\r\n this._tooltipContent = content\r\n }\r\n if (!this._map.hasLayer(this._tooltip)) this._map.openTooltip(this._tooltip)\r\n hoveringFeatures = true\r\n }\r\n } else {\r\n hoveringFeatures = this.hasClickableFeaturesAt(event.latlng)\r\n }\r\n\r\n // Skip redraw when no feature hovered and we're not highlighting\r\n if (!hoveringFeatures && !this.highlighting) return\r\n this.needRedraw()\r\n },\r\n // -------------------------------------------------------------\r\n getEvents: function () {\r\n const events = {\r\n resize: this._onLayerDidResize,\r\n moveend: this._onLayerDidMove,\r\n zoom: this._onLayerDidMove\r\n }\r\n if (this._map.options.zoomAnimation && L.Browser.any3d) {\r\n events.zoomanim = this._animateZoom\r\n }\r\n if (this.options.pointerEventsEnabled) {\r\n events.click = this._onLayerClick\r\n events.contextmenu = this._onLayerContextMenu\r\n events.mousemove = this._onMouseMove\r\n }\r\n\r\n return events\r\n },\r\n // -------------------------------------------------------------\r\n onAdd: function (map) {\r\n this._map = map\r\n this._canvas = L.DomUtil.create('canvas', 'leaflet-layer')\r\n // disable pointer events if not explicitely enabled\r\n if (!this.options.pointerEventsEnabled) this._canvas.style.pointerEvents = 'none'\r\n\r\n var size = this._map.getSize()\r\n this._canvas.width = size.x\r\n this._canvas.height = size.y\r\n\r\n var topLeft = this._map.containerPointToLayerPoint([0, 0])\r\n L.DomUtil.setPosition(this._canvas, topLeft)\r\n\r\n var animated = this._map.options.zoomAnimation && L.Browser.any3d\r\n L.DomUtil.addClass(this._canvas, 'leaflet-zoom-' + (animated ? 'animated' : 'hide'))\r\n\r\n const pane = this.options.pane ? map._panes[this.options.pane] : map._panes.overlayPane\r\n pane.appendChild(this._canvas)\r\n\r\n map.on(this.getEvents(), this)\r\n\r\n var del = this._delegate || this\r\n del.onLayerDidMount && del.onLayerDidMount() // -- callback\r\n this.needRedraw()\r\n },\r\n\r\n // -------------------------------------------------------------\r\n onRemove: function (map) {\r\n var del = this._delegate || this\r\n del.onLayerWillUnmount && del.onLayerWillUnmount() // -- callback\r\n\r\n if (this._frame !== null) {\r\n L.Util.cancelAnimFrame(this._frame)\r\n }\r\n\r\n const pane = this.options.pane ? map._panes[this.options.pane] : map._panes.overlayPane\r\n pane.removeChild(this._canvas)\r\n\r\n map.off(this.getEvents(), this)\r\n\r\n this._canvas = null\r\n this._frame = null\r\n },\r\n\r\n // ---------- --------------------------------------------------\r\n addTo: function (map) {\r\n map.addLayer(this)\r\n return this\r\n },\r\n // --------------------------------------------------------------------------------\r\n LatLonToMercator: function (latlon) {\r\n return {\r\n x: latlon.lng * 6378137 * Math.PI / 180,\r\n y: Math.log(Math.tan((90 + latlon.lat) * Math.PI / 360)) * 6378137\r\n }\r\n },\r\n\r\n // ------------------------------------------------------------------------------\r\n drawLayer: function () {\r\n // -- todo make the viewInfo properties flat objects.\r\n var size = this._map.getSize()\r\n var bounds = this._map.getBounds()\r\n var zoom = this._map.getZoom()\r\n\r\n var center = this.LatLonToMercator(this._map.getCenter())\r\n var corner = this.LatLonToMercator(this._map.containerPointToLatLng(this._map.getSize()))\r\n\r\n var del = this._delegate || this\r\n del.onDrawLayer && del.onDrawLayer({\r\n layer: this,\r\n canvas: this._canvas,\r\n bounds: bounds,\r\n size: size,\r\n zoom: zoom,\r\n center: center,\r\n corner: corner\r\n })\r\n const highlightIndexes = this.getClickableFeaturesAt(this.mousePosition)\r\n this.highlighting = highlightIndexes.length > 0\r\n if (this.highlighting) {\r\n const ctx = this._canvas.getContext('2d')\r\n for (const index of highlightIndexes) {\r\n const feature = this.clickableFeatures[index]\r\n\r\n ctx.save()\r\n ctx.globalAlpha = 0.5\r\n for (const prop in feature.highlight.style) ctx[prop] = feature.highlight.style[prop]\r\n if (feature.highlight.asStroke) ctx.stroke(feature.highlight.path)\r\n else ctx.fill(feature.highlight.path)\r\n ctx.restore()\r\n }\r\n }\r\n\r\n this._frame = null\r\n // schedule a new draw if autoRedraw is enabled\r\n if (this.autoRedraw) this.needRedraw()\r\n },\r\n // -- L.DomUtil.setTransform from leaflet 1.0.0 to work on 0.0.7\r\n // ------------------------------------------------------------------------------\r\n _setTransform: function (el, offset, scale) {\r\n var pos = offset || new L.Point(0, 0)\r\n\r\n el.style[L.DomUtil.TRANSFORM] =\r\n (L.Browser.ie3d\r\n ? 'translate(' + pos.x + 'px,' + pos.y + 'px)'\r\n : 'translate3d(' + pos.x + 'px,' + pos.y + 'px,0)') +\r\n (scale ? ' scale(' + scale + ')' : '')\r\n },\r\n\r\n // ------------------------------------------------------------------------------\r\n _animateZoom: function (e) {\r\n var scale = this._map.getZoomScale(e.zoom)\r\n // -- different calc of animation zoom in leaflet 1.0.3 thanks @peterkarabinovic, @jduggan1\r\n var offset = L.Layer ? this._map._latLngBoundsToNewLayerBounds(this._map.getBounds(), e.zoom, e.center).min\r\n : this._map._getCenterOffset(e.center)._multiplyBy(-scale).subtract(this._map._getMapPanePos())\r\n\r\n L.DomUtil.setTransform(this._canvas, offset, scale)\r\n }\r\n})\r\n\r\nL.kanvasLayer = function (options) {\r\n return new L.KanvasLayer(options)\r\n}\r\n\r\nexport default {\r\n methods: {\r\n createLeafletCanvasLayer (options) {\r\n const layerOptions = options.leaflet || options\r\n\r\n // Check for valid type\r\n if (layerOptions.type !== 'kanvasLayer') return\r\n\r\n const layer = this.createLeafletLayer(options)\r\n this.setCanvasLayerDrawCode(layer, layerOptions.draw)\r\n if (layerOptions.userData) this.setCanvasLayerUserData(layer, layerOptions.userData)\r\n if (layerOptions.autoRedraw) this.setCanvasLayerAutoRedraw(layer, layerOptions.autoRedraw)\r\n bindLeafletEvents(layer, ['click', 'contextmenu'], this, options)\r\n return layer\r\n },\r\n\r\n setCanvasLayerDrawCode (layer, drawCode, autoRedraw = false) {\r\n const leafletLayer = typeof layer === 'string' ? this.getLeafletLayerByName(layer) : layer\r\n if (!leafletLayer) return\r\n\r\n // helper function to manage listened layers states\r\n // since canvas layer draw stuff related to geojson layers\r\n // we listen to geojson layers 'update' event to mark our\r\n // canvas layer with needRedraw\r\n const updateListeners = (canvasLayer, listen) => {\r\n for (const layerName in canvasLayer.listenedLayers) {\r\n const state = canvasLayer.listenedLayers[layerName]\r\n if (state === listen) continue\r\n const listenedLayer = this.getLeafletLayerByName(layerName)\r\n if (!listenedLayer) continue\r\n if (listen) listenedLayer.on('update', canvasLayer.needRedraw, canvasLayer)\r\n else listenedLayer.off('update', canvasLayer.needRedraw, canvasLayer)\r\n canvasLayer.listenedLayers[layerName] = listen\r\n }\r\n }\r\n\r\n // disconnect from previous geojson layers\r\n updateListeners(leafletLayer, false)\r\n\r\n leafletLayer.listenedLayers = {}\r\n leafletLayer.drawCalls = []\r\n if (leafletLayer.userData === undefined) leafletLayer.userData = {}\r\n if (leafletLayer.compatContext === undefined) leafletLayer.compatContext = {}\r\n\r\n leafletLayer.clearClickableFeatures()\r\n\r\n for (const d of drawCode) {\r\n /* eslint no-new-func: 0 */\r\n const drawCode = Function(`\r\n// define visible variables\r\nconst ctx = this;\r\nwith(this.proxy) { ${d.code} }\r\n`)\r\n\r\n if (d.feature) {\r\n const [srcLayer, srcFeature] = d.feature.split('?')\r\n leafletLayer.drawCalls.push((context) => {\r\n const layer = this.getLeafletLayerByName(srcLayer)\r\n if (!layer) return\r\n const feature = layer._features ? layer._features[srcFeature] : undefined\r\n if (!feature) return\r\n context.feature = feature\r\n drawCode.call(context)\r\n })\r\n // we'll have to listen source geojson layer 'update' event\r\n if (!_.has(leafletLayer.listenedLayers, srcLayer)) leafletLayer.listenedLayers[srcLayer] = false\r\n } else if (d.layer) {\r\n leafletLayer.drawCalls.push((context) => {\r\n const layer = this.getLeafletLayerByName(d.layer)\r\n if (!layer) return\r\n for (const feature of Object.values(layer._features)) {\r\n context.feature = feature\r\n drawCode.call(context)\r\n }\r\n })\r\n // we'll have to listen source geojson layer 'update' event\r\n if (!_.has(leafletLayer.listenedLayers, d.layer)) leafletLayer.listenedLayers[d.layer] = false\r\n }\r\n }\r\n\r\n if (!leafletLayer.onDrawLayer) {\r\n // build draw function for the layer\r\n leafletLayer.onDrawLayer = (info) => {\r\n // update listener states\r\n updateListeners(leafletLayer, true)\r\n\r\n const ctx = info.canvas.getContext('2d')\r\n // build context for draw code\r\n // here we merge global canvas layer context,\r\n // user defined context and current state context\r\n const context = Object.assign(\r\n // current state context\r\n {\r\n canvas: ctx,\r\n now: Date.now(),\r\n zoom: info.zoom,\r\n latLonToCanvas: leafletLayer.latLonToCanvas.bind(leafletLayer),\r\n clearClickableFeatures: leafletLayer.clearClickableFeatures.bind(leafletLayer),\r\n addClickableFeature: leafletLayer.addClickableFeature.bind(leafletLayer),\r\n userData: leafletLayer.userData\r\n },\r\n leafletLayer.compatContext,\r\n // global context\r\n this.canvasLayerDrawContext)\r\n\r\n // draw\r\n ctx.save()\r\n ctx.clearRect(0, 0, info.canvas.width, info.canvas.height)\r\n for (const draw of leafletLayer.drawCalls) draw(context)\r\n ctx.restore()\r\n }\r\n }\r\n\r\n leafletLayer.setAutoRedraw(autoRedraw)\r\n leafletLayer.needRedraw()\r\n },\r\n\r\n setCanvasLayerUserData (layer, userData) {\r\n const leafletLayer = typeof layer === 'string' ? this.getLeafletLayerByName(layer) : layer\r\n if (!leafletLayer) return\r\n\r\n leafletLayer.userData = Object.assign(leafletLayer.userData, userData)\r\n leafletLayer.needRedraw()\r\n },\r\n\r\n setCanvasLayerAutoRedraw (layer, autoRedraw) {\r\n const leafletLayer = typeof layer === 'string' ? this.getLeafletLayerByName(layer) : layer\r\n if (!leafletLayer) return\r\n\r\n leafletLayer.setAutoRedraw(autoRedraw)\r\n },\r\n\r\n /* Compatibility methods */\r\n\r\n updateCanvasLayerDrawCode (layerName, newDrawCode, autoRedraw = false) {\r\n this.setCanvasLayerDrawCode(layerName, newDrawCode, autoRedraw)\r\n },\r\n\r\n setCanvasLayerContext (layerName, context) {\r\n const leafletLayer = this.getLeafletLayerByName(layerName)\r\n if (!leafletLayer) return\r\n\r\n leafletLayer.compatContext = context\r\n leafletLayer.needRedraw()\r\n }\r\n },\r\n\r\n created () {\r\n // a proxy to limit access to variables not defined in draw code scope\r\n this.canvasLayerDrawProxy = new Proxy(window, {\r\n get: (target, prop, receiver) => { return undefined }\r\n })\r\n // the base context we'll make available in draw code\r\n this.canvasLayerDrawContext = Object.assign({\r\n proxy: this.canvasLayerDrawProxy,\r\n // log: console.log,\r\n // Math constants\r\n Math: Math,\r\n // a few handy helpers for draw code\r\n vec2: (pointA, pointB) => { return { x: pointA.x - pointB.x, y: pointA.y - pointB.y } },\r\n len2: (vec2) => { return Math.sqrt(vec2.x * vec2.x + vec2.y * vec2.y) },\r\n scale2: (vec2, value) => { return { x: vec2.x * value, y: vec2.y * value } },\r\n norm2: (vec2) => {\r\n const len = Math.sqrt(vec2.x * vec2.x + vec2.y * vec2.y)\r\n return { x: vec2.x / len, y: vec2.y / len }\r\n }\r\n }, CanvasDrawContext.get())\r\n\r\n this.registerLeafletConstructor(this.createLeafletCanvasLayer)\r\n },\r\n\r\n beforeDestroy () {\r\n }\r\n}\r\n"]}
@@ -4,128 +4,74 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
 
7
- var _lodash = require('lodash');
8
-
9
- var _lodash2 = _interopRequireDefault(_lodash);
10
-
11
- var _leaflet = require('leaflet');
12
-
13
- var _leaflet2 = _interopRequireDefault(_leaflet);
14
-
15
7
  var _path = require('path');
16
8
 
17
9
  var _path2 = _interopRequireDefault(_path);
18
10
 
19
- var _loglevel = require('loglevel');
20
-
21
- var _loglevel2 = _interopRequireDefault(_loglevel);
22
-
23
- var _togeojson = require('togeojson');
24
-
25
- var _togeojson2 = _interopRequireDefault(_togeojson);
26
-
27
- var _leafletFilelayer = require('leaflet-filelayer');
28
-
29
- var _leafletFilelayer2 = _interopRequireDefault(_leafletFilelayer);
30
-
31
- var _quasar = require('quasar');
32
-
33
- var _utils = require('../../utils');
11
+ var _client = require('../../../../core/client');
34
12
 
35
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
36
14
 
37
15
  function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
38
16
 
39
- (0, _leafletFilelayer2.default)(null, _leaflet2.default, _togeojson2.default);
40
-
41
17
  exports.default = {
18
+ methods: {
19
+ importFiles(files) {
20
+ var _this = this;
21
+
22
+ return _asyncToGenerator(function* () {
23
+ for (let i = 0; i < files.length; ++i) {
24
+ const file = files.item(i);
25
+ try {
26
+ const content = yield _client.Reader.read(file);
27
+ const name = _path2.default.basename(file.name, _path2.default.extname(file.name));
28
+ yield _this.addGeoJsonLayer({ name, description: file.name }, content);
29
+ } catch (error) {
30
+ // nothing to do
31
+ }
32
+ }
33
+ })();
34
+ }
35
+ },
42
36
  mounted() {
43
- var _this = this;
37
+ var _this2 = this;
44
38
 
45
39
  this.$on('map-ready', () => {
46
- // Instanciate the control to enable the access to the input element.
47
- // This is required to let Puppeteer upload a file
48
- // See https://github.com/kalisio/kdk/issues/472
49
- this.loaderControl = _leaflet2.default.Control.fileLayerLoad(Object.assign({
50
- // Allows you to use a customized version of L.geoJson.
51
- // For example if you are using the Proj4Leaflet leaflet plugin,
52
- // you can pass L.Proj.geoJson and load the files into the
53
- // L.Proj.GeoJson instead of the L.geoJson.
54
- layer: _leaflet2.default.geoJson,
55
- // See http://leafletjs.com/reference.html#geojson-options
56
- layerOptions: this.getGeoJsonOptions(),
57
- // Add to map after loading
58
- addToMap: false,
59
- // File size limit in kb
60
- fileSizeLimit: 1024 * 1024,
61
- // Restrict accepted file formats (default: .geojson, .kml, and .gpx)
62
- formats: ['.geojson', '.json', '.kml', '.gpx']
63
- }, this.activityOptions.engine.fileLayers));
64
- this.loaderControl.addTo(this.map);
65
- // Hide the contoler
66
- const loaderControlElements = document.getElementsByClassName('leaflet-control-filelayer');
67
- if (loaderControlElements.length > 0) loaderControlElements[0].style.visibility = 'hidden';
68
- /*
69
- // Required to support drag'n'drop when not using built-in control
70
- this.map._container.addEventListener('dragenter', () => this.map.scrollWheelZoom.disable(), false)
71
- this.map._container.addEventListener('dragleave', () => this.map.scrollWheelZoom.enable(), false)
72
- this.map._container.addEventListener('dragover', (event) => {
73
- event.stopPropagation()
74
- event.preventDefault()
75
- }, false)
76
- this.map._container.addEventListener('drop', (event) => {
77
- event.stopPropagation()
78
- event.preventDefault()
79
- this.loaderControl.loader.loadMultiple(event.dataTransfer.files)
80
- this.map.scrollWheelZoom.enable()
81
- }, false)
82
- */
83
- this.loaderControl.loader.on('data:loaded', (() => {
40
+ // Create a dummy dropFileInput element to enable puppeteer
41
+ const container = document.getElementById('q-app');
42
+ const dropFileInput = document.createElement('input');
43
+ dropFileInput.setAttribute('id', 'dropFileInput');
44
+ dropFileInput.type = 'file';
45
+ dropFileInput.style.display = 'none';
46
+ dropFileInput.addEventListener('change', (() => {
84
47
  var _ref = _asyncToGenerator(function* (event) {
85
- const name = event.filename ? _path2.default.basename(event.filename, _path2.default.extname(event.filename)) : _this.$t('mixins.fileLayers.IMPORTED_DATA_NAME');
86
- const engine = {
87
- type: 'geoJson',
88
- isVisible: true,
89
- realtime: true
90
- };
91
- const layer = {
92
- name,
93
- type: 'OverlayLayer',
94
- icon: 'insert_drive_file',
95
- scope: 'user',
96
- featureId: '_id',
97
- leaflet: engine,
98
- // Avoid sharing reference to the same object although options are similar
99
- // otherwise updating one will automatically update the other one
100
- cesium: Object.assign({}, engine)
101
- };
102
- const geoJson = event.layer.toGeoJSON();
103
- // Generate schema for properties
104
- const schema = (0, _utils.generatePropertiesSchema)(geoJson, name);
105
- _lodash2.default.set(layer, 'schema', { name, content: schema });
106
- // Generate temporary IDs for features
107
- const features = geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson];
108
- features.forEach(function (feature) {
109
- feature._id = (0, _quasar.uid)().toString();
110
- });
111
- // Create an empty layer used as a container
112
- yield _this.addLayer(layer);
113
- // Set data
114
- yield _this.updateLayer(name, geoJson);
115
- // Zoom to it
116
- _this.zoomToLayer(name);
48
+ yield _this2.importFiles(event.target.files);
117
49
  });
118
50
 
119
51
  return function (_x) {
120
52
  return _ref.apply(this, arguments);
121
53
  };
122
54
  })());
123
- this.loaderControl.loader.on('data:error', event => {
124
- _loglevel2.default.error(event.error);
125
- this.$events.$emit('error', {
126
- message: this.$t('errors.FILE_IMPORT_ERROR')
55
+ container.appendChild(dropFileInput);
56
+ // Setup drag & drop
57
+ this.map._container.addEventListener('dragenter', () => this.map.scrollWheelZoom.disable(), false);
58
+ this.map._container.addEventListener('dragleave', () => this.map.scrollWheelZoom.enable(), false);
59
+ this.map._container.addEventListener('dragover', event => {
60
+ event.stopPropagation();
61
+ event.preventDefault();
62
+ }, false);
63
+ this.map._container.addEventListener('drop', (() => {
64
+ var _ref2 = _asyncToGenerator(function* (event) {
65
+ event.stopPropagation();
66
+ event.preventDefault();
67
+ yield _this2.importFiles(event.dataTransfer.files);
68
+ _this2.map.scrollWheelZoom.enable();
127
69
  });
128
- });
70
+
71
+ return function (_x2) {
72
+ return _ref2.apply(this, arguments);
73
+ };
74
+ })(), false);
129
75
  });
130
76
  }
131
77
  };