@kalisio/kdk 1.4.2 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/.nyc_output/02a7a308-a8d7-4cc6-8e61-6066a0055a96.json +1 -0
  2. package/.nyc_output/1900d596-5e87-433a-8fd6-fb7f7ded35ec.json +1 -0
  3. package/.nyc_output/{2e74ca23-8cf0-4161-9536-f71c2a1a74bb.json → 27401f21-8ccf-42fa-8230-4232189d86b3.json} +0 -0
  4. package/.nyc_output/{81d21e46-766a-46bc-b1b7-143ca577347a.json → 52278ef5-c337-4724-97be-e2e4416847c5.json} +0 -0
  5. package/.nyc_output/{aaf3ebbb-f895-4d7b-9255-bc5dee832570.json → 5dd49b8a-4c84-42f9-a3d5-712247a84775.json} +0 -0
  6. package/.nyc_output/{dbeb2602-0ac2-4e66-978b-0d29548359ca.json → 612b4859-9645-45c1-a41e-1fae420518c4.json} +0 -0
  7. package/.nyc_output/{e47d1e4c-2fff-4dcb-908f-d3081162547c.json → bab87fe9-d99a-4759-99e6-3fc4622eeca0.json} +0 -0
  8. package/.nyc_output/processinfo/02a7a308-a8d7-4cc6-8e61-6066a0055a96.json +1 -0
  9. package/.nyc_output/processinfo/1900d596-5e87-433a-8fd6-fb7f7ded35ec.json +1 -0
  10. package/.nyc_output/processinfo/27401f21-8ccf-42fa-8230-4232189d86b3.json +1 -0
  11. package/.nyc_output/processinfo/52278ef5-c337-4724-97be-e2e4416847c5.json +1 -0
  12. package/.nyc_output/processinfo/5dd49b8a-4c84-42f9-a3d5-712247a84775.json +1 -0
  13. package/.nyc_output/processinfo/612b4859-9645-45c1-a41e-1fae420518c4.json +1 -0
  14. package/.nyc_output/processinfo/bab87fe9-d99a-4759-99e6-3fc4622eeca0.json +1 -0
  15. package/.nyc_output/processinfo/index.json +1 -1
  16. package/CHANGELOG.md +69 -10
  17. package/coverage/core/api/application.js.html +500 -422
  18. package/coverage/core/api/authentication.js.html +119 -119
  19. package/coverage/core/api/db.js.html +172 -172
  20. package/coverage/core/api/hooks/hooks.account.js.html +45 -45
  21. package/coverage/core/api/hooks/hooks.authentication.js.html +71 -71
  22. package/coverage/core/api/hooks/hooks.authorisations.js.html +368 -353
  23. package/coverage/core/api/hooks/hooks.devices.js.html +49 -49
  24. package/coverage/core/api/hooks/hooks.groups.js.html +37 -37
  25. package/coverage/core/api/hooks/hooks.logger.js.html +27 -27
  26. package/coverage/core/api/hooks/hooks.model.js.html +269 -269
  27. package/coverage/core/api/hooks/hooks.organisations.js.html +190 -190
  28. package/coverage/core/api/hooks/hooks.pusher.js.html +114 -114
  29. package/coverage/core/api/hooks/hooks.query.js.html +277 -211
  30. package/coverage/core/api/hooks/hooks.service.js.html +82 -82
  31. package/coverage/core/api/hooks/hooks.storage.js.html +121 -121
  32. package/coverage/core/api/hooks/hooks.tags.js.html +232 -232
  33. package/coverage/core/api/hooks/hooks.users.js.html +263 -263
  34. package/coverage/core/api/hooks/index.html +172 -172
  35. package/coverage/core/api/hooks/index.js.html +24 -24
  36. package/coverage/core/api/index.html +76 -76
  37. package/coverage/core/api/index.js.html +30 -30
  38. package/coverage/core/api/marshall.js.html +57 -57
  39. package/coverage/core/api/models/groups.model.mongodb.js.html +20 -20
  40. package/coverage/core/api/models/index.html +50 -50
  41. package/coverage/core/api/models/organisations.model.mongodb.js.html +12 -12
  42. package/coverage/core/api/models/tags.model.mongodb.js.html +22 -22
  43. package/coverage/core/api/models/users.model.mongodb.js.html +20 -20
  44. package/coverage/core/api/oauth2-handler.js.html +18 -18
  45. package/coverage/core/api/oauth2-verifier.js.html +38 -38
  46. package/coverage/core/api/services/account/account.hooks.js.html +16 -16
  47. package/coverage/core/api/services/account/account.service.js.html +104 -104
  48. package/coverage/core/api/services/account/index.html +32 -32
  49. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
  50. package/coverage/core/api/services/authorisations/authorisations.service.js.html +156 -132
  51. package/coverage/core/api/services/authorisations/index.html +28 -28
  52. package/coverage/core/api/services/databases/databases.hooks.js.html +9 -9
  53. package/coverage/core/api/services/databases/databases.service.js.html +12 -12
  54. package/coverage/core/api/services/databases/index.html +24 -24
  55. package/coverage/core/api/services/devices/devices.hooks.js.html +9 -9
  56. package/coverage/core/api/services/devices/devices.service.js.html +121 -121
  57. package/coverage/core/api/services/devices/index.html +28 -28
  58. package/coverage/core/api/services/groups/groups.hooks.js.html +9 -9
  59. package/coverage/core/api/services/groups/index.html +13 -13
  60. package/coverage/core/api/services/index.html +21 -21
  61. package/coverage/core/api/services/index.js.html +118 -118
  62. package/coverage/core/api/services/mailer/index.html +24 -24
  63. package/coverage/core/api/services/mailer/mailer.hooks.js.html +9 -9
  64. package/coverage/core/api/services/mailer/mailer.service.js.html +19 -19
  65. package/coverage/core/api/services/organisations/index.html +24 -24
  66. package/coverage/core/api/services/organisations/organisations.hooks.js.html +8 -8
  67. package/coverage/core/api/services/organisations/organisations.service.js.html +67 -67
  68. package/coverage/core/api/services/pusher/index.html +34 -34
  69. package/coverage/core/api/services/pusher/pusher.channels.js.html +8 -8
  70. package/coverage/core/api/services/pusher/pusher.hooks.js.html +10 -10
  71. package/coverage/core/api/services/pusher/pusher.service.js.html +414 -414
  72. package/coverage/core/api/services/storage/index.html +21 -21
  73. package/coverage/core/api/services/storage/storage.hooks.js.html +35 -35
  74. package/coverage/core/api/services/tags/index.html +21 -21
  75. package/coverage/core/api/services/tags/tags.hooks.js.html +25 -25
  76. package/coverage/core/api/services/users/index.html +21 -21
  77. package/coverage/core/api/services/users/users.hooks.js.html +33 -33
  78. package/coverage/core/common/errors.js.html +1 -1
  79. package/coverage/core/common/index.html +42 -27
  80. package/coverage/core/common/index.js.html +16 -16
  81. package/coverage/core/common/permissions.js.html +320 -290
  82. package/coverage/index.html +181 -181
  83. package/coverage/lcov-report/core/api/application.js.html +500 -422
  84. package/coverage/lcov-report/core/api/authentication.js.html +119 -119
  85. package/coverage/lcov-report/core/api/db.js.html +172 -172
  86. package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +45 -45
  87. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +71 -71
  88. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +368 -353
  89. package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +49 -49
  90. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +37 -37
  91. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +27 -27
  92. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +269 -269
  93. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +190 -190
  94. package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +114 -114
  95. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +277 -211
  96. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +82 -82
  97. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +121 -121
  98. package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +232 -232
  99. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +263 -263
  100. package/coverage/lcov-report/core/api/hooks/index.html +172 -172
  101. package/coverage/lcov-report/core/api/hooks/index.js.html +24 -24
  102. package/coverage/lcov-report/core/api/index.html +76 -76
  103. package/coverage/lcov-report/core/api/index.js.html +30 -30
  104. package/coverage/lcov-report/core/api/marshall.js.html +57 -57
  105. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +20 -20
  106. package/coverage/lcov-report/core/api/models/index.html +50 -50
  107. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +12 -12
  108. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +22 -22
  109. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +20 -20
  110. package/coverage/lcov-report/core/api/oauth2-handler.js.html +18 -18
  111. package/coverage/lcov-report/core/api/oauth2-verifier.js.html +38 -38
  112. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +16 -16
  113. package/coverage/lcov-report/core/api/services/account/account.service.js.html +104 -104
  114. package/coverage/lcov-report/core/api/services/account/index.html +32 -32
  115. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
  116. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +156 -132
  117. package/coverage/lcov-report/core/api/services/authorisations/index.html +28 -28
  118. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +9 -9
  119. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +12 -12
  120. package/coverage/lcov-report/core/api/services/databases/index.html +24 -24
  121. package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +9 -9
  122. package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +121 -121
  123. package/coverage/lcov-report/core/api/services/devices/index.html +28 -28
  124. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +9 -9
  125. package/coverage/lcov-report/core/api/services/groups/index.html +13 -13
  126. package/coverage/lcov-report/core/api/services/index.html +21 -21
  127. package/coverage/lcov-report/core/api/services/index.js.html +118 -118
  128. package/coverage/lcov-report/core/api/services/mailer/index.html +24 -24
  129. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +9 -9
  130. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +19 -19
  131. package/coverage/lcov-report/core/api/services/organisations/index.html +24 -24
  132. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +8 -8
  133. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +67 -67
  134. package/coverage/lcov-report/core/api/services/pusher/index.html +34 -34
  135. package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +8 -8
  136. package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +10 -10
  137. package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +414 -414
  138. package/coverage/lcov-report/core/api/services/storage/index.html +21 -21
  139. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +35 -35
  140. package/coverage/lcov-report/core/api/services/tags/index.html +21 -21
  141. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +25 -25
  142. package/coverage/lcov-report/core/api/services/users/index.html +21 -21
  143. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +33 -33
  144. package/coverage/lcov-report/core/common/errors.js.html +1 -1
  145. package/coverage/lcov-report/core/common/index.html +42 -27
  146. package/coverage/lcov-report/core/common/index.js.html +16 -16
  147. package/coverage/lcov-report/core/common/permissions.js.html +320 -290
  148. package/coverage/lcov-report/index.html +181 -181
  149. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +1 -1
  150. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +25 -7
  151. package/coverage/lcov-report/map/api/hooks/index.html +7 -7
  152. package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
  153. package/coverage/lcov-report/map/api/index.html +1 -1
  154. package/coverage/lcov-report/map/api/index.js.html +1 -1
  155. package/coverage/lcov-report/map/api/marshall.js.html +1 -1
  156. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
  157. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
  158. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +14 -5
  159. package/coverage/lcov-report/map/api/models/index.html +7 -7
  160. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
  161. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
  162. package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
  163. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +1 -1
  164. package/coverage/lcov-report/map/api/services/catalog/index.html +1 -1
  165. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  166. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  167. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +1 -1
  168. package/coverage/lcov-report/map/api/services/features/index.html +1 -1
  169. package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  170. package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +1 -1
  171. package/coverage/lcov-report/map/api/services/geocoder/index.html +1 -1
  172. package/coverage/lcov-report/map/api/services/index.html +1 -1
  173. package/coverage/lcov-report/map/api/services/index.js.html +1 -1
  174. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
  175. package/coverage/lcov-report/map/common/errors.js.html +1 -1
  176. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +1 -1
  177. package/coverage/lcov-report/map/common/grid.js.html +1 -1
  178. package/coverage/lcov-report/map/common/index.html +1 -1
  179. package/coverage/lcov-report/map/common/index.js.html +1 -1
  180. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
  181. package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
  182. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
  183. package/coverage/lcov-report/map/common/opendap-utils.js.html +1 -1
  184. package/coverage/lcov-report/map/common/permissions.js.html +1 -1
  185. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
  186. package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
  187. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +1 -1
  188. package/coverage/lcov-report/map/common/wcs-utils.js.html +1 -1
  189. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1 -1
  190. package/coverage/lcov-report/map/common/wfs-utils.js.html +1 -1
  191. package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
  192. package/coverage/lcov-report/map/common/wmts-utils.js.html +1 -1
  193. package/coverage/lcov.info +3683 -3825
  194. package/coverage/map/api/hooks/hooks.catalog.js.html +1 -1
  195. package/coverage/map/api/hooks/hooks.query.js.html +25 -7
  196. package/coverage/map/api/hooks/index.html +7 -7
  197. package/coverage/map/api/hooks/index.js.html +1 -1
  198. package/coverage/map/api/index.html +1 -1
  199. package/coverage/map/api/index.js.html +1 -1
  200. package/coverage/map/api/marshall.js.html +1 -1
  201. package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
  202. package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
  203. package/coverage/map/api/models/features.model.mongodb.js.html +14 -5
  204. package/coverage/map/api/models/index.html +7 -7
  205. package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
  206. package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
  207. package/coverage/map/api/services/alerts/index.html +1 -1
  208. package/coverage/map/api/services/catalog/catalog.hooks.js.html +1 -1
  209. package/coverage/map/api/services/catalog/index.html +1 -1
  210. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  211. package/coverage/map/api/services/daptiles/index.html +1 -1
  212. package/coverage/map/api/services/features/features.hooks.js.html +1 -1
  213. package/coverage/map/api/services/features/index.html +1 -1
  214. package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  215. package/coverage/map/api/services/geocoder/geocoder.service.js.html +1 -1
  216. package/coverage/map/api/services/geocoder/index.html +1 -1
  217. package/coverage/map/api/services/index.html +1 -1
  218. package/coverage/map/api/services/index.js.html +1 -1
  219. package/coverage/map/common/dynamic-grid-source.js.html +1 -1
  220. package/coverage/map/common/errors.js.html +1 -1
  221. package/coverage/map/common/geotiff-grid-source.js.html +1 -1
  222. package/coverage/map/common/grid.js.html +1 -1
  223. package/coverage/map/common/index.html +1 -1
  224. package/coverage/map/common/index.js.html +1 -1
  225. package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
  226. package/coverage/map/common/moment-utils.js.html +1 -1
  227. package/coverage/map/common/opendap-grid-source.js.html +1 -1
  228. package/coverage/map/common/opendap-utils.js.html +1 -1
  229. package/coverage/map/common/permissions.js.html +1 -1
  230. package/coverage/map/common/time-based-grid-source.js.html +1 -1
  231. package/coverage/map/common/tms-utils.js.html +1 -1
  232. package/coverage/map/common/wcs-grid-source.js.html +1 -1
  233. package/coverage/map/common/wcs-utils.js.html +1 -1
  234. package/coverage/map/common/weacast-grid-source.js.html +1 -1
  235. package/coverage/map/common/wfs-utils.js.html +1 -1
  236. package/coverage/map/common/wms-utils.js.html +1 -1
  237. package/coverage/map/common/wmts-utils.js.html +1 -1
  238. package/extras/tours/map/navigation-bar.js +49 -1
  239. package/lib/core/api/application.js +35 -9
  240. package/lib/core/api/application.js.map +1 -1
  241. package/lib/core/api/hooks/hooks.authorisations.js +8 -1
  242. package/lib/core/api/hooks/hooks.authorisations.js.map +1 -1
  243. package/lib/core/api/hooks/hooks.query.js +135 -100
  244. package/lib/core/api/hooks/hooks.query.js.map +1 -1
  245. package/lib/core/api/services/authorisations/authorisations.service.js +13 -1
  246. package/lib/core/api/services/authorisations/authorisations.service.js.map +1 -1
  247. package/lib/core/api/services/pusher/pusher.service.js +40 -16
  248. package/lib/core/api/services/pusher/pusher.service.js.map +1 -1
  249. package/lib/core/client/components/collection/KColumn.vue +29 -28
  250. package/lib/core/client/components/collection/KFilter.vue +97 -72
  251. package/lib/core/client/components/editor/KModalEditor.vue +3 -4
  252. package/lib/core/client/components/editor/KSettingsEditor.vue +6 -2
  253. package/lib/core/client/components/form/KFileField.vue +14 -36
  254. package/lib/core/client/components/form/KRoleField.vue +5 -2
  255. package/lib/core/client/components/form/KTextField.vue +12 -2
  256. package/lib/core/client/components/form/KUnitField.vue +57 -0
  257. package/lib/core/client/components/form/KUrlField.vue +1 -1
  258. package/lib/core/client/components/frame/KAction.vue +1 -2
  259. package/lib/core/client/components/frame/KModal.vue +66 -20
  260. package/lib/core/client/components/frame/KScrollArea.vue +65 -0
  261. package/lib/core/client/components/frame/index.js +6 -1
  262. package/lib/core/client/components/frame/index.js.map +1 -1
  263. package/lib/core/client/components/input/KColorChooser.vue +3 -5
  264. package/lib/core/client/components/input/KIconChooser.vue +38 -40
  265. package/lib/core/client/components/input/KOptionsChooser.vue +2 -2
  266. package/lib/core/client/components/layout/KAbout.vue +47 -49
  267. package/lib/core/client/components/team/KAddMember.vue +1 -1
  268. package/lib/core/client/components/team/KChangeRole.vue +11 -14
  269. package/lib/core/client/components/team/KGroupCard.vue +12 -5
  270. package/lib/core/client/components/team/KGroupsActivity.vue +1 -1
  271. package/lib/core/client/components/team/KJoinGroup.vue +22 -22
  272. package/lib/core/client/components/team/KMemberCard.vue +19 -4
  273. package/lib/core/client/components/viewer/KModalViewer.vue +10 -9
  274. package/lib/core/client/i18n/core_en.json +72 -8
  275. package/lib/core/client/i18n/core_fr.json +66 -8
  276. package/lib/core/client/index.js +31 -0
  277. package/lib/core/client/index.js.map +1 -1
  278. package/lib/core/client/layout.js +8 -1
  279. package/lib/core/client/layout.js.map +1 -1
  280. package/lib/core/client/mixins/mixin.base-widget.js +5 -3
  281. package/lib/core/client/mixins/mixin.base-widget.js.map +1 -1
  282. package/lib/core/client/reader.js +85 -0
  283. package/lib/core/client/reader.js.map +1 -0
  284. package/lib/core/client/readers/index.js +30 -0
  285. package/lib/core/client/readers/index.js.map +1 -0
  286. package/lib/core/client/readers/reader.csv.js +54 -0
  287. package/lib/core/client/readers/reader.csv.js.map +1 -0
  288. package/lib/core/client/readers/reader.json.js +49 -0
  289. package/lib/core/client/readers/reader.json.js.map +1 -0
  290. package/lib/core/client/services/index.js +14 -3
  291. package/lib/core/client/services/index.js.map +1 -1
  292. package/lib/core/client/services/local-settings.service.js +6 -4
  293. package/lib/core/client/services/local-settings.service.js.map +1 -1
  294. package/lib/core/client/time.js +4 -3
  295. package/lib/core/client/time.js.map +1 -1
  296. package/lib/core/client/units.js +195 -0
  297. package/lib/core/client/units.js.map +1 -0
  298. package/lib/core/common/permissions.js +44 -34
  299. package/lib/core/common/permissions.js.map +1 -1
  300. package/lib/core/common/schemas/settings.update.json +72 -0
  301. package/lib/map/api/hooks/hooks.query.js +7 -2
  302. package/lib/map/api/hooks/hooks.query.js.map +1 -1
  303. package/lib/map/api/models/features.model.mongodb.js +3 -0
  304. package/lib/map/api/models/features.model.mongodb.js.map +1 -1
  305. package/lib/map/client/components/KCaptureToolbar.vue +151 -0
  306. package/lib/map/client/components/KColorLegend.vue +16 -4
  307. package/lib/map/client/components/KFeaturesChart.vue +10 -11
  308. package/lib/map/client/components/KFeaturesFilter.vue +40 -39
  309. package/lib/map/client/components/KFeaturesTable.vue +15 -16
  310. package/lib/map/client/components/KLayerEditionToolbar.vue +19 -11
  311. package/lib/map/client/components/KLayerStyleEditor.vue +3 -2
  312. package/lib/map/client/components/KLayerStyleForm.vue +38 -27
  313. package/lib/map/client/components/KMeasureTool.vue +337 -0
  314. package/lib/map/client/components/KTimeline.vue +5 -9
  315. package/lib/map/client/components/catalog/KAddLayer.vue +3 -2
  316. package/lib/map/client/components/catalog/KCatalog.vue +26 -7
  317. package/lib/map/client/components/catalog/KImportLayer.vue +8 -35
  318. package/lib/map/client/components/catalog/KLayerCategories.vue +3 -2
  319. package/lib/map/client/components/catalog/KLayersSelector.vue +8 -6
  320. package/lib/map/client/components/catalog/KWeatherLayersSelector.vue +1 -1
  321. package/lib/map/client/components/widget/KInformationBox.vue +8 -17
  322. package/lib/map/client/components/widget/KMapillaryViewer.vue +5 -1
  323. package/lib/map/client/components/widget/KTimeSeries.vue +92 -9
  324. package/lib/map/client/i18n/map_en.json +51 -20
  325. package/lib/map/client/i18n/map_fr.json +51 -20
  326. package/lib/map/client/init.js +7 -1
  327. package/lib/map/client/init.js.map +1 -1
  328. package/lib/map/client/leaflet/MaskLayer.js +9 -0
  329. package/lib/map/client/leaflet/MaskLayer.js.map +1 -1
  330. package/lib/map/client/mixins/globe/mixin.base-globe.js +3 -5
  331. package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
  332. package/lib/map/client/mixins/globe/mixin.geojson-layers.js +16 -21
  333. package/lib/map/client/mixins/globe/mixin.geojson-layers.js.map +1 -1
  334. package/lib/map/client/mixins/globe/mixin.popup.js +7 -1
  335. package/lib/map/client/mixins/globe/mixin.popup.js.map +1 -1
  336. package/lib/map/client/mixins/globe/mixin.tooltip.js +7 -1
  337. package/lib/map/client/mixins/globe/mixin.tooltip.js.map +1 -1
  338. package/lib/map/client/mixins/map/mixin.base-map.js +54 -9
  339. package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
  340. package/lib/map/client/mixins/map/mixin.canvas-layers.js +2 -0
  341. package/lib/map/client/mixins/map/mixin.canvas-layers.js.map +1 -1
  342. package/lib/map/client/mixins/map/mixin.file-layers.js +51 -97
  343. package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
  344. package/lib/map/client/mixins/map/mixin.geojson-layers.js +43 -11
  345. package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
  346. package/lib/map/client/mixins/map/mixin.popup.js +7 -1
  347. package/lib/map/client/mixins/map/mixin.popup.js.map +1 -1
  348. package/lib/map/client/mixins/map/mixin.style.js +1 -1
  349. package/lib/map/client/mixins/map/mixin.style.js.map +1 -1
  350. package/lib/map/client/mixins/map/mixin.tooltip.js +7 -1
  351. package/lib/map/client/mixins/map/mixin.tooltip.js.map +1 -1
  352. package/lib/map/client/mixins/mixin.activity.js +2 -0
  353. package/lib/map/client/mixins/mixin.activity.js.map +1 -1
  354. package/lib/map/client/mixins/mixin.context.js +26 -3
  355. package/lib/map/client/mixins/mixin.context.js.map +1 -1
  356. package/lib/map/client/mixins/mixin.feature-service.js +3 -3
  357. package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
  358. package/lib/map/client/mixins/mixin.infobox.js +4 -0
  359. package/lib/map/client/mixins/mixin.infobox.js.map +1 -1
  360. package/lib/map/client/mixins/mixin.weacast.js +7 -5
  361. package/lib/map/client/mixins/mixin.weacast.js.map +1 -1
  362. package/lib/map/client/readers/index.js +54 -0
  363. package/lib/map/client/readers/index.js.map +1 -0
  364. package/lib/map/client/readers/reader.geojson.js +87 -0
  365. package/lib/map/client/readers/reader.geojson.js.map +1 -0
  366. package/lib/map/client/readers/reader.gpx.js +52 -0
  367. package/lib/map/client/readers/reader.gpx.js.map +1 -0
  368. package/lib/map/client/readers/reader.kml.js +52 -0
  369. package/lib/map/client/readers/reader.kml.js.map +1 -0
  370. package/lib/map/client/readers/reader.shp.js +116 -0
  371. package/lib/map/client/readers/reader.shp.js.map +1 -0
  372. package/lib/map/client/utils.js +0 -7
  373. package/lib/map/client/utils.js.map +1 -1
  374. package/lib/test/client/core/account.js +1 -1
  375. package/lib/test/client/core/account.js.map +1 -1
  376. package/lib/test/client/core/runner.js +1 -2
  377. package/lib/test/client/core/runner.js.map +1 -1
  378. package/lib/test/client/core/screens.js +1 -1
  379. package/lib/test/client/core/screens.js.map +1 -1
  380. package/lib/test/client/core/utils.js +2 -2
  381. package/lib/test/client/core/utils.js.map +1 -1
  382. package/lib/test/client/map/catalog.js +50 -49
  383. package/lib/test/client/map/catalog.js.map +1 -1
  384. package/package.json +3 -3
  385. package/.nyc_output/2c5b7c8e-81db-4d2c-a7a4-02dc640d301f.json +0 -1
  386. package/.nyc_output/a762cb58-70dc-4d39-ab69-928635affa98.json +0 -1
  387. package/.nyc_output/processinfo/2c5b7c8e-81db-4d2c-a7a4-02dc640d301f.json +0 -1
  388. package/.nyc_output/processinfo/2e74ca23-8cf0-4161-9536-f71c2a1a74bb.json +0 -1
  389. package/.nyc_output/processinfo/81d21e46-766a-46bc-b1b7-143ca577347a.json +0 -1
  390. package/.nyc_output/processinfo/a762cb58-70dc-4d39-ab69-928635affa98.json +0 -1
  391. package/.nyc_output/processinfo/aaf3ebbb-f895-4d7b-9255-bc5dee832570.json +0 -1
  392. package/.nyc_output/processinfo/dbeb2602-0ac2-4e66-978b-0d29548359ca.json +0 -1
  393. package/.nyc_output/processinfo/e47d1e4c-2fff-4dcb-908f-d3081162547c.json +0 -1
  394. package/extras/testcafe/Dockerfile +0 -48
  395. package/extras/testcafe/docker-entrypoint.sh +0 -27
  396. package/extras/testcafe/page-models/core/account.js +0 -75
  397. package/extras/testcafe/page-models/core/base-collection.js +0 -41
  398. package/extras/testcafe/page-models/core/base-page.js +0 -25
  399. package/extras/testcafe/page-models/core/groups.js +0 -36
  400. package/extras/testcafe/page-models/core/index.js +0 -140
  401. package/extras/testcafe/page-models/core/layout.js +0 -145
  402. package/extras/testcafe/page-models/core/members.js +0 -98
  403. package/extras/testcafe/page-models/core/organisations.js +0 -76
  404. package/extras/testcafe/page-models/core/screens.js +0 -99
  405. package/extras/testcafe/page-models/core/tags.js +0 -21
  406. package/extras/testcafe/page-models/map/add-layer.js +0 -51
  407. package/extras/testcafe/page-models/map/catalog.js +0 -132
  408. package/extras/testcafe/page-models/map/index.js +0 -36
  409. package/extras/testcafe/page-models/map/map-activity.js +0 -42
  410. package/extras/testcafe/page-models/map/timeline.js +0 -67
@@ -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"]}
@@ -8,124 +8,78 @@ var _lodash = require('lodash');
8
8
 
9
9
  var _lodash2 = _interopRequireDefault(_lodash);
10
10
 
11
- var _leaflet = require('leaflet');
12
-
13
- var _leaflet2 = _interopRequireDefault(_leaflet);
14
-
15
11
  var _path = require('path');
16
12
 
17
13
  var _path2 = _interopRequireDefault(_path);
18
14
 
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');
15
+ var _client = require('../../../../core/client');
34
16
 
35
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
36
18
 
37
19
  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
20
 
39
- (0, _leafletFilelayer2.default)(null, _leaflet2.default, _togeojson2.default);
40
-
41
21
  exports.default = {
22
+ methods: {
23
+ importFiles(filelist) {
24
+ var _this = this;
25
+
26
+ return _asyncToGenerator(function* () {
27
+ const acceptedFiles = yield _client.Reader.filter(filelist);
28
+ for (let i = 0; i < acceptedFiles.length; i++) {
29
+ const file = acceptedFiles[i];
30
+ try {
31
+ const content = yield _client.Reader.read(file);
32
+ const name = _path2.default.basename(file.name, _path2.default.extname(file.name));
33
+ const description = _lodash2.default.join(_lodash2.default.map(file.files, function (subfile) {
34
+ return subfile.name;
35
+ }), ',');
36
+ yield _this.addGeoJsonLayer({ name, description }, content);
37
+ } catch (error) {
38
+ // nothing to do
39
+ }
40
+ }
41
+ })();
42
+ }
43
+ },
42
44
  mounted() {
43
- var _this = this;
45
+ var _this2 = this;
44
46
 
45
47
  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', (() => {
48
+ // Create a dummy dropFileInput element to enable puppeteer
49
+ const container = this.$refs.map;
50
+ const dropFileInput = document.createElement('input');
51
+ dropFileInput.setAttribute('id', 'dropFileInput');
52
+ dropFileInput.type = 'file';
53
+ dropFileInput.style.display = 'none';
54
+ dropFileInput.addEventListener('change', (() => {
84
55
  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);
56
+ yield _this2.importFiles(event.target.files);
117
57
  });
118
58
 
119
59
  return function (_x) {
120
60
  return _ref.apply(this, arguments);
121
61
  };
122
62
  })());
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')
63
+ container.appendChild(dropFileInput);
64
+ // Setup drag & drop
65
+ this.map._container.addEventListener('dragenter', () => this.map.scrollWheelZoom.disable(), false);
66
+ this.map._container.addEventListener('dragleave', () => this.map.scrollWheelZoom.enable(), false);
67
+ this.map._container.addEventListener('dragover', event => {
68
+ event.stopPropagation();
69
+ event.preventDefault();
70
+ }, false);
71
+ this.map._container.addEventListener('drop', (() => {
72
+ var _ref2 = _asyncToGenerator(function* (event) {
73
+ event.stopPropagation();
74
+ event.preventDefault();
75
+ yield _this2.importFiles(event.dataTransfer.files);
76
+ _this2.map.scrollWheelZoom.enable();
127
77
  });
128
- });
78
+
79
+ return function (_x2) {
80
+ return _ref2.apply(this, arguments);
81
+ };
82
+ })(), false);
129
83
  });
130
84
  }
131
85
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.file-layers.js"],"names":["L","togeojson","mounted","$on","loaderControl","Control","fileLayerLoad","Object","assign","layer","geoJson","layerOptions","getGeoJsonOptions","addToMap","fileSizeLimit","formats","activityOptions","engine","fileLayers","addTo","map","loaderControlElements","document","getElementsByClassName","length","style","visibility","loader","on","event","name","filename","path","basename","extname","$t","type","isVisible","realtime","icon","scope","featureId","leaflet","cesium","toGeoJSON","schema","_","set","content","features","forEach","feature","_id","toString","addLayer","updateLayer","zoomToLayer","logger","error","$events","$emit","message"],"mappings":";;;;;;AAAA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;AACA;;;;;;AAEA,gCAAU,IAAV,EAAgBA,iBAAhB,EAAmBC,mBAAnB;;kBAEe;AACbC,YAAW;AAAA;;AACT,SAAKC,GAAL,CAAS,WAAT,EAAsB,MAAM;AAC1B;AACA;AACA;AACA,WAAKC,aAAL,GAAqBJ,kBAAEK,OAAF,CAAUC,aAAV,CAAwBC,OAAOC,MAAP,CAAc;AACzD;AACA;AACA;AACA;AACAC,eAAOT,kBAAEU,OALgD;AAMzD;AACAC,sBAAc,KAAKC,iBAAL,EAP2C;AAQzD;AACAC,kBAAU,KAT+C;AAUzD;AACAC,uBAAe,OAAO,IAXmC;AAYzD;AACAC,iBAAS,CACP,UADO,EAEP,OAFO,EAGP,MAHO,EAIP,MAJO;AAbgD,OAAd,EAmB1C,KAAKC,eAAL,CAAqBC,MAArB,CAA4BC,UAnBc,CAAxB,CAArB;AAoBA,WAAKd,aAAL,CAAmBe,KAAnB,CAAyB,KAAKC,GAA9B;AACA;AACA,YAAMC,wBAAwBC,SAASC,sBAAT,CAAgC,2BAAhC,CAA9B;AACA,UAAIF,sBAAsBG,MAAtB,GAA+B,CAAnC,EAAsCH,sBAAsB,CAAtB,EAAyBI,KAAzB,CAA+BC,UAA/B,GAA4C,QAA5C;AACtC;;;;;;;;;;;;;;;AAeA,WAAKtB,aAAL,CAAmBuB,MAAnB,CAA0BC,EAA1B,CAA6B,aAA7B;AAAA,qCAA4C,WAAMC,KAAN,EAAe;AACzD,gBAAMC,OAAQD,MAAME,QAAN,GACVC,eAAKC,QAAL,CAAcJ,MAAME,QAApB,EAA8BC,eAAKE,OAAL,CAAaL,MAAME,QAAnB,CAA9B,CADU,GAEV,MAAKI,EAAL,CAAQ,sCAAR,CAFJ;AAGA,gBAAMlB,SAAS;AACbmB,kBAAM,SADO;AAEbC,uBAAW,IAFE;AAGbC,sBAAU;AAHG,WAAf;AAKA,gBAAM7B,QAAQ;AACZqB,gBADY;AAEZM,kBAAM,cAFM;AAGZG,kBAAM,mBAHM;AAIZC,mBAAO,MAJK;AAKZC,uBAAW,KALC;AAMZC,qBAASzB,MANG;AAOZ;AACA;AACA0B,oBAAQpC,OAAOC,MAAP,CAAc,EAAd,EAAkBS,MAAlB;AATI,WAAd;AAWA,gBAAMP,UAAUmB,MAAMpB,KAAN,CAAYmC,SAAZ,EAAhB;AACA;AACA,gBAAMC,SAAS,qCAAyBnC,OAAzB,EAAkCoB,IAAlC,CAAf;AACAgB,2BAAEC,GAAF,CAAMtC,KAAN,EAAa,QAAb,EAAuB,EAAEqB,IAAF,EAAQkB,SAASH,MAAjB,EAAvB;AACA;AACA,gBAAMI,WAAYvC,QAAQ0B,IAAR,KAAiB,mBAAjB,GAAuC1B,QAAQuC,QAA/C,GAA0D,CAACvC,OAAD,CAA5E;AACAuC,mBAASC,OAAT,CAAiB,mBAAW;AAAEC,oBAAQC,GAAR,GAAc,mBAAMC,QAAN,EAAd;AAAgC,WAA9D;AACA;AACA,gBAAM,MAAKC,QAAL,CAAc7C,KAAd,CAAN;AACA;AACA,gBAAM,MAAK8C,WAAL,CAAiBzB,IAAjB,EAAuBpB,OAAvB,CAAN;AACA;AACA,gBAAK8C,WAAL,CAAiB1B,IAAjB;AACD,SAjCD;;AAAA;AAAA;AAAA;AAAA;AAkCA,WAAK1B,aAAL,CAAmBuB,MAAnB,CAA0BC,EAA1B,CAA6B,YAA7B,EAA2CC,SAAS;AAClD4B,2BAAOC,KAAP,CAAa7B,MAAM6B,KAAnB;AACA,aAAKC,OAAL,CAAaC,KAAb,CAAmB,OAAnB,EAA4B;AAC1BC,mBAAS,KAAK1B,EAAL,CAAQ,0BAAR;AADiB,SAA5B;AAGD,OALD;AAMD,KAnFD;AAoFD;AAtFY,C","file":"mixin.file-layers.js","sourcesContent":["import _ from 'lodash'\r\nimport L from 'leaflet'\r\nimport path from 'path'\r\nimport logger from 'loglevel'\r\nimport togeojson from 'togeojson'\r\nimport fileLayer from 'leaflet-filelayer'\r\nimport { uid } from 'quasar'\r\nimport { generatePropertiesSchema } from '../../utils'\r\n\r\nfileLayer(null, L, togeojson)\r\n\r\nexport default {\r\n mounted () {\r\n this.$on('map-ready', () => {\r\n // Instanciate the control to enable the access to the input element.\r\n // This is required to let Puppeteer upload a file\r\n // See https://github.com/kalisio/kdk/issues/472\r\n this.loaderControl = L.Control.fileLayerLoad(Object.assign({\r\n // Allows you to use a customized version of L.geoJson.\r\n // For example if you are using the Proj4Leaflet leaflet plugin,\r\n // you can pass L.Proj.geoJson and load the files into the\r\n // L.Proj.GeoJson instead of the L.geoJson.\r\n layer: L.geoJson,\r\n // See http://leafletjs.com/reference.html#geojson-options\r\n layerOptions: this.getGeoJsonOptions(),\r\n // Add to map after loading\r\n addToMap: false,\r\n // File size limit in kb\r\n fileSizeLimit: 1024 * 1024,\r\n // Restrict accepted file formats (default: .geojson, .kml, and .gpx)\r\n formats: [\r\n '.geojson',\r\n '.json',\r\n '.kml',\r\n '.gpx'\r\n ]\r\n }, this.activityOptions.engine.fileLayers))\r\n this.loaderControl.addTo(this.map)\r\n // Hide the contoler\r\n const loaderControlElements = document.getElementsByClassName('leaflet-control-filelayer')\r\n if (loaderControlElements.length > 0) loaderControlElements[0].style.visibility = 'hidden'\r\n /*\r\n // Required to support drag'n'drop when not using built-in control\r\n this.map._container.addEventListener('dragenter', () => this.map.scrollWheelZoom.disable(), false)\r\n this.map._container.addEventListener('dragleave', () => this.map.scrollWheelZoom.enable(), false)\r\n this.map._container.addEventListener('dragover', (event) => {\r\n event.stopPropagation()\r\n event.preventDefault()\r\n }, false)\r\n this.map._container.addEventListener('drop', (event) => {\r\n event.stopPropagation()\r\n event.preventDefault()\r\n this.loaderControl.loader.loadMultiple(event.dataTransfer.files)\r\n this.map.scrollWheelZoom.enable()\r\n }, false)\r\n */\r\n this.loaderControl.loader.on('data:loaded', async event => {\r\n const name = (event.filename\r\n ? path.basename(event.filename, path.extname(event.filename))\r\n : this.$t('mixins.fileLayers.IMPORTED_DATA_NAME'))\r\n const engine = {\r\n type: 'geoJson',\r\n isVisible: true,\r\n realtime: true\r\n }\r\n const layer = {\r\n name,\r\n type: 'OverlayLayer',\r\n icon: 'insert_drive_file',\r\n scope: 'user',\r\n featureId: '_id',\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 const geoJson = event.layer.toGeoJSON()\r\n // Generate schema for properties\r\n const schema = generatePropertiesSchema(geoJson, name)\r\n _.set(layer, 'schema', { name, content: schema })\r\n // Generate temporary IDs for features\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n features.forEach(feature => { feature._id = uid().toString() })\r\n // Create an empty layer used as a container\r\n await this.addLayer(layer)\r\n // Set data\r\n await this.updateLayer(name, geoJson)\r\n // Zoom to it\r\n this.zoomToLayer(name)\r\n })\r\n this.loaderControl.loader.on('data:error', event => {\r\n logger.error(event.error)\r\n this.$events.$emit('error', {\r\n message: this.$t('errors.FILE_IMPORT_ERROR')\r\n })\r\n })\r\n })\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.file-layers.js"],"names":["methods","importFiles","filelist","acceptedFiles","Reader","filter","i","length","file","content","read","name","path","basename","extname","description","_","join","map","files","subfile","addGeoJsonLayer","error","mounted","$on","container","$refs","dropFileInput","document","createElement","setAttribute","type","style","display","addEventListener","event","target","appendChild","_container","scrollWheelZoom","disable","enable","stopPropagation","preventDefault","dataTransfer"],"mappings":";;;;;;AAAA;;;;AACA;;;;AACA;;;;;;kBAEe;AACbA,WAAS;AACDC,eAAN,CAAmBC,QAAnB,EAA6B;AAAA;;AAAA;AAC3B,cAAMC,gBAAgB,MAAMC,eAAOC,MAAP,CAAcH,QAAd,CAA5B;AACA,aAAK,IAAII,IAAI,CAAb,EAAgBA,IAAIH,cAAcI,MAAlC,EAA0CD,GAA1C,EAA+C;AAC7C,gBAAME,OAAOL,cAAcG,CAAd,CAAb;AACA,cAAI;AACF,kBAAMG,UAAU,MAAML,eAAOM,IAAP,CAAYF,IAAZ,CAAtB;AACA,kBAAMG,OAAOC,eAAKC,QAAL,CAAcL,KAAKG,IAAnB,EAAyBC,eAAKE,OAAL,CAAaN,KAAKG,IAAlB,CAAzB,CAAb;AACA,kBAAMI,cAAcC,iBAAEC,IAAF,CAAOD,iBAAEE,GAAF,CAAMV,KAAKW,KAAX,EAAkB;AAAA,qBAAWC,QAAQT,IAAnB;AAAA,aAAlB,CAAP,EAAmD,GAAnD,CAApB;AACA,kBAAM,MAAKU,eAAL,CAAqB,EAAEV,IAAF,EAAQI,WAAR,EAArB,EAA4CN,OAA5C,CAAN;AACD,WALD,CAKE,OAAOa,KAAP,EAAc;AACd;AACD;AACF;AAZ0B;AAa5B;AAdM,GADI;AAiBbC,YAAW;AAAA;;AACT,SAAKC,GAAL,CAAS,WAAT,EAAsB,MAAM;AAC1B;AACA,YAAMC,YAAY,KAAKC,KAAL,CAAWR,GAA7B;AACA,YAAMS,gBAAgBC,SAASC,aAAT,CAAuB,OAAvB,CAAtB;AACAF,oBAAcG,YAAd,CAA2B,IAA3B,EAAiC,eAAjC;AACAH,oBAAcI,IAAd,GAAqB,MAArB;AACAJ,oBAAcK,KAAd,CAAoBC,OAApB,GAA8B,MAA9B;AACAN,oBAAcO,gBAAd,CAA+B,QAA/B;AAAA,qCAAyC,WAAOC,KAAP,EAAiB;AACxD,gBAAM,OAAKlC,WAAL,CAAiBkC,MAAMC,MAAN,CAAajB,KAA9B,CAAN;AACD,SAFD;;AAAA;AAAA;AAAA;AAAA;AAGAM,gBAAUY,WAAV,CAAsBV,aAAtB;AACA;AACA,WAAKT,GAAL,CAASoB,UAAT,CAAoBJ,gBAApB,CAAqC,WAArC,EAAkD,MAAM,KAAKhB,GAAL,CAASqB,eAAT,CAAyBC,OAAzB,EAAxD,EAA4F,KAA5F;AACA,WAAKtB,GAAL,CAASoB,UAAT,CAAoBJ,gBAApB,CAAqC,WAArC,EAAkD,MAAM,KAAKhB,GAAL,CAASqB,eAAT,CAAyBE,MAAzB,EAAxD,EAA2F,KAA3F;AACA,WAAKvB,GAAL,CAASoB,UAAT,CAAoBJ,gBAApB,CAAqC,UAArC,EAAiDC,SAAS;AACxDA,cAAMO,eAAN;AACAP,cAAMQ,cAAN;AACD,OAHD,EAGG,KAHH;AAIA,WAAKzB,GAAL,CAASoB,UAAT,CAAoBJ,gBAApB,CAAqC,MAArC;AAAA,sCAA6C,WAAOC,KAAP,EAAiB;AAC5DA,gBAAMO,eAAN;AACAP,gBAAMQ,cAAN;AACA,gBAAM,OAAK1C,WAAL,CAAiBkC,MAAMS,YAAN,CAAmBzB,KAApC,CAAN;AACA,iBAAKD,GAAL,CAASqB,eAAT,CAAyBE,MAAzB;AACD,SALD;;AAAA;AAAA;AAAA;AAAA,YAKG,KALH;AAMD,KAxBD;AAyBD;AA3CY,C","file":"mixin.file-layers.js","sourcesContent":["import _ from 'lodash'\r\nimport path from 'path'\r\nimport { Reader } from '../../../../core/client'\r\n\r\nexport default {\r\n methods: {\r\n async importFiles (filelist) {\r\n const acceptedFiles = await Reader.filter(filelist)\r\n for (let i = 0; i < acceptedFiles.length; i++) {\r\n const file = acceptedFiles[i]\r\n try {\r\n const content = await Reader.read(file)\r\n const name = path.basename(file.name, path.extname(file.name))\r\n const description = _.join(_.map(file.files, subfile => subfile.name), ',')\r\n await this.addGeoJsonLayer({ name, description }, content)\r\n } catch (error) {\r\n // nothing to do\r\n }\r\n }\r\n }\r\n },\r\n mounted () {\r\n this.$on('map-ready', () => {\r\n // Create a dummy dropFileInput element to enable puppeteer\r\n const container = this.$refs.map\r\n const dropFileInput = document.createElement('input')\r\n dropFileInput.setAttribute('id', 'dropFileInput')\r\n dropFileInput.type = 'file'\r\n dropFileInput.style.display = 'none'\r\n dropFileInput.addEventListener('change', async (event) => {\r\n await this.importFiles(event.target.files)\r\n })\r\n container.appendChild(dropFileInput)\r\n // Setup drag & drop\r\n this.map._container.addEventListener('dragenter', () => this.map.scrollWheelZoom.disable(), false)\r\n this.map._container.addEventListener('dragleave', () => this.map.scrollWheelZoom.enable(), false)\r\n this.map._container.addEventListener('dragover', event => {\r\n event.stopPropagation()\r\n event.preventDefault()\r\n }, false)\r\n this.map._container.addEventListener('drop', async (event) => {\r\n event.stopPropagation()\r\n event.preventDefault()\r\n await this.importFiles(event.dataTransfer.files)\r\n this.map.scrollWheelZoom.enable()\r\n }, false)\r\n })\r\n }\r\n}\r\n"]}
@@ -90,7 +90,7 @@ exports.default = {
90
90
  leafletOptions.updateFeature = function (feature, oldLayer) {
91
91
  // A new feature is coming, create it
92
92
  if (!oldLayer) return;
93
- // An existing one is found, simply update styling, etc.
93
+ // An existing one is found, simply update styling, properties, etc.
94
94
  leafletOptions.onEachFeature(feature, oldLayer);
95
95
  if (oldLayer.setStyle) {
96
96
  // Some vector layers can be used for points, eg circleMarker,
@@ -103,6 +103,14 @@ exports.default = {
103
103
  oldLayer.setStyle(leafletOptions.style(feature));
104
104
  }
105
105
  }
106
+ const oldProperties = _lodash2.default.get(oldLayer, 'feature.properties');
107
+ const properties = _lodash2.default.get(feature, 'properties');
108
+ // Keep track of old properties
109
+ if (oldProperties && properties) {
110
+ _lodash2.default.forOwn(oldProperties, (value, key) => {
111
+ if (!_lodash2.default.has(properties, key)) _lodash2.default.set(properties, key, value);
112
+ });
113
+ }
106
114
  if (oldLayer.setIcon) {
107
115
  // FIXME: updating icon in place requires to recreate it anyway, so for now we recreate the whole marker
108
116
  // oldLayer.setIcon(_.get(leafletOptions.pointToLayer(feature, oldLayer.getLatLng()), 'options.icon'))
@@ -154,7 +162,6 @@ exports.default = {
154
162
  } else {
155
163
  leafletOptions.removeMissing = !options.probeService;
156
164
  let initialized = !options.probeService; // If no probe reference, nothing to be initialized
157
- let lastUpdateTime;
158
165
  _lodash2.default.set(leafletOptions, 'source', (() => {
159
166
  var _ref2 = _asyncToGenerator(function* (successCallback, errorCallback) {
160
167
  // If the probe location is given by another service use it on initialization
@@ -168,11 +175,8 @@ exports.default = {
168
175
  }
169
176
  }
170
177
  try {
171
- // Update only the first time or when required according to data update interval
172
- if (!lastUpdateTime || !_this.shouldSkipFeaturesUpdate(lastUpdateTime, options)) {
173
- lastUpdateTime = _time.Time.getCurrentTime().clone();
174
- successCallback((yield _this.getFeatures(options)));
175
- }
178
+ // Then update features
179
+ successCallback((yield _this.getFeatures(options)));
176
180
  } catch (error) {
177
181
  errorCallback(error);
178
182
  }
@@ -266,7 +270,10 @@ exports.default = {
266
270
  },
267
271
  processClusterLayerOptions(options) {
268
272
  const leafletOptions = options.leaflet || options;
269
- leafletOptions.container = this.createLeafletLayer(Object.assign({ type: 'markerClusterGroup' }, leafletOptions.cluster));
273
+ const clusterOptions = Object.assign({ type: 'markerClusterGroup' }, leafletOptions.cluster);
274
+ // Transfer pane if any
275
+ if (leafletOptions.pane) clusterOptions.clusterPane = leafletOptions.pane;
276
+ leafletOptions.container = this.createLeafletLayer(clusterOptions);
270
277
  },
271
278
  createLeafletGeoJsonLayer(options) {
272
279
  var _this3 = this;
@@ -277,6 +284,17 @@ exports.default = {
277
284
  if (leafletOptions.type !== 'geoJson') return;
278
285
 
279
286
  try {
287
+ // min/max zoom are automatically managed on tiled layers by inheriting GridLayer
288
+ // on non-tiled layers we need to use a pane to manage it
289
+ const hasMinZoom = !!_lodash2.default.get(leafletOptions, 'minZoom');
290
+ const hasMaxZoom = !!_lodash2.default.get(leafletOptions, 'maxZoom');
291
+ if (!leafletOptions.tiled && (hasMinZoom || hasMaxZoom)) {
292
+ let pane = { name: options.name };
293
+ if (hasMinZoom) pane.minZoom = _lodash2.default.get(leafletOptions, 'minZoom');
294
+ if (hasMaxZoom) pane.maxZoom = _lodash2.default.get(leafletOptions, 'maxZoom');
295
+ leafletOptions.panes = [pane];
296
+ leafletOptions.pane = options.name;
297
+ }
280
298
  // If not explicitely disable use defaults for clustering
281
299
  if (!_lodash2.default.has(leafletOptions, 'cluster') && _this3.activityOptions.engine.cluster) {
282
300
  // Merge existing config or create a new one on layer
@@ -323,7 +341,14 @@ exports.default = {
323
341
  if (leafletOptions.realtime) {
324
342
  // Build associated tile layer and bind required events
325
343
  if (leafletOptions.tiled) {
326
- const tiledLayer = new _TiledFeatureLayer.TiledFeatureLayer(leafletOptions);
344
+ // In our options minZoom/maxZoom can be set to false
345
+ // but Leaflet only expect it if fixed to a given number
346
+ const hasMinZoom = !!_lodash2.default.get(leafletOptions, 'minZoom');
347
+ const hasMaxZoom = !!_lodash2.default.get(leafletOptions, 'maxZoom');
348
+ let zoomLevelsToOmit = [];
349
+ if (!hasMinZoom) zoomLevelsToOmit.push('minZoom');
350
+ if (!hasMaxZoom) zoomLevelsToOmit.push('maxZoom');
351
+ const tiledLayer = new _TiledFeatureLayer.TiledFeatureLayer(_lodash2.default.omit(leafletOptions, zoomLevelsToOmit));
327
352
  tiledLayer.setup(_this3, options);
328
353
  layer.tiledLayer = tiledLayer;
329
354
  layer.on('add', function () {
@@ -448,8 +473,15 @@ exports.default = {
448
473
  var _ref6 = _asyncToGenerator(function* (geoJsonlayer) {
449
474
  // Retrieve the layer
450
475
  const layer = _this4.getLeafletLayerByName(geoJsonlayer.name);
451
- // Then update
452
- if (layer.tiledLayer) layer.tiledLayer.redraw();else layer.update();
476
+ // Update only the first time or when required according to data update interval
477
+ if (!layer.lastUpdateTime || !_this4.shouldSkipFeaturesUpdate(layer.lastUpdateTime, geoJsonlayer)) {
478
+ layer.lastUpdateTime = _time.Time.getCurrentTime().clone();
479
+ if (layer.tiledLayer) {
480
+ layer.tiledLayer.redraw();
481
+ } else {
482
+ layer.update();
483
+ }
484
+ }
453
485
  });
454
486
 
455
487
  return function (_x11) {