@kalisio/kdk 1.5.0 → 1.7.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 (487) 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/{058fc679-d60a-4501-ac04-71171e5200b8.json → 27401f21-8ccf-42fa-8230-4232189d86b3.json} +0 -0
  4. package/.nyc_output/{8b1830fa-932e-4a61-9837-4a5b18f83ea9.json → 52278ef5-c337-4724-97be-e2e4416847c5.json} +0 -0
  5. package/.nyc_output/{afd2d144-3570-4858-b94a-b523dbd023dd.json → 5dd49b8a-4c84-42f9-a3d5-712247a84775.json} +0 -0
  6. package/.nyc_output/612b4859-9645-45c1-a41e-1fae420518c4.json +1 -0
  7. package/.nyc_output/bab87fe9-d99a-4759-99e6-3fc4622eeca0.json +1 -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/.travis.test.sh +1 -1
  17. package/CHANGELOG.md +107 -11
  18. package/coverage/core/api/application.js.html +323 -245
  19. package/coverage/core/api/authentication.js.html +1 -1
  20. package/coverage/core/api/db.js.html +108 -108
  21. package/coverage/core/api/hooks/hooks.account.js.html +1 -1
  22. package/coverage/core/api/hooks/hooks.authentication.js.html +1 -1
  23. package/coverage/core/api/hooks/hooks.authorisations.js.html +21 -6
  24. package/coverage/core/api/hooks/hooks.devices.js.html +1 -1
  25. package/coverage/core/api/hooks/hooks.groups.js.html +1 -1
  26. package/coverage/core/api/hooks/hooks.logger.js.html +1 -1
  27. package/coverage/core/api/hooks/hooks.model.js.html +1 -1
  28. package/coverage/core/api/hooks/hooks.organisations.js.html +1 -1
  29. package/coverage/core/api/hooks/hooks.pusher.js.html +1 -1
  30. package/coverage/core/api/hooks/hooks.query.js.html +114 -48
  31. package/coverage/core/api/hooks/hooks.service.js.html +1 -1
  32. package/coverage/core/api/hooks/hooks.storage.js.html +1 -1
  33. package/coverage/core/api/hooks/hooks.tags.js.html +1 -1
  34. package/coverage/core/api/hooks/hooks.users.js.html +1 -1
  35. package/coverage/core/api/hooks/index.html +12 -12
  36. package/coverage/core/api/hooks/index.js.html +1 -1
  37. package/coverage/core/api/index.html +34 -34
  38. package/coverage/core/api/index.js.html +26 -26
  39. package/coverage/core/api/marshall.js.html +1 -1
  40. package/coverage/core/api/models/groups.model.mongodb.js.html +1 -1
  41. package/coverage/core/api/models/index.html +1 -1
  42. package/coverage/core/api/models/organisations.model.mongodb.js.html +1 -1
  43. package/coverage/core/api/models/tags.model.mongodb.js.html +1 -1
  44. package/coverage/core/api/models/users.model.mongodb.js.html +1 -1
  45. package/coverage/core/api/oauth2-handler.js.html +1 -1
  46. package/coverage/core/api/oauth2-verifier.js.html +1 -1
  47. package/coverage/core/api/services/account/account.hooks.js.html +1 -1
  48. package/coverage/core/api/services/account/account.service.js.html +1 -1
  49. package/coverage/core/api/services/account/index.html +1 -1
  50. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
  51. package/coverage/core/api/services/authorisations/authorisations.service.js.html +31 -7
  52. package/coverage/core/api/services/authorisations/index.html +9 -9
  53. package/coverage/core/api/services/databases/databases.hooks.js.html +1 -1
  54. package/coverage/core/api/services/databases/databases.service.js.html +1 -1
  55. package/coverage/core/api/services/databases/index.html +1 -1
  56. package/coverage/core/api/services/devices/devices.hooks.js.html +1 -1
  57. package/coverage/core/api/services/devices/devices.service.js.html +1 -1
  58. package/coverage/core/api/services/devices/index.html +1 -1
  59. package/coverage/core/api/services/groups/groups.hooks.js.html +1 -1
  60. package/coverage/core/api/services/groups/index.html +1 -1
  61. package/coverage/core/api/services/index.html +11 -11
  62. package/coverage/core/api/services/index.js.html +66 -66
  63. package/coverage/core/api/services/mailer/index.html +1 -1
  64. package/coverage/core/api/services/mailer/mailer.hooks.js.html +1 -1
  65. package/coverage/core/api/services/mailer/mailer.service.js.html +1 -1
  66. package/coverage/core/api/services/organisations/index.html +1 -1
  67. package/coverage/core/api/services/organisations/organisations.hooks.js.html +1 -1
  68. package/coverage/core/api/services/organisations/organisations.service.js.html +1 -1
  69. package/coverage/core/api/services/pusher/index.html +1 -1
  70. package/coverage/core/api/services/pusher/pusher.channels.js.html +1 -1
  71. package/coverage/core/api/services/pusher/pusher.hooks.js.html +1 -1
  72. package/coverage/core/api/services/pusher/pusher.service.js.html +1 -1
  73. package/coverage/core/api/services/storage/index.html +1 -1
  74. package/coverage/core/api/services/storage/storage.hooks.js.html +1 -1
  75. package/coverage/core/api/services/tags/index.html +1 -1
  76. package/coverage/core/api/services/tags/tags.hooks.js.html +1 -1
  77. package/coverage/core/api/services/users/index.html +1 -1
  78. package/coverage/core/api/services/users/users.hooks.js.html +1 -1
  79. package/coverage/core/common/errors.js.html +1 -1
  80. package/coverage/core/common/index.html +7 -7
  81. package/coverage/core/common/index.js.html +1 -1
  82. package/coverage/core/common/permissions.js.html +81 -51
  83. package/coverage/index.html +39 -39
  84. package/coverage/lcov-report/core/api/application.js.html +323 -245
  85. package/coverage/lcov-report/core/api/authentication.js.html +1 -1
  86. package/coverage/lcov-report/core/api/db.js.html +108 -108
  87. package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +1 -1
  88. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +1 -1
  89. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +21 -6
  90. package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +1 -1
  91. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +1 -1
  92. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +1 -1
  93. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +1 -1
  94. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +1 -1
  95. package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +1 -1
  96. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +114 -48
  97. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +1 -1
  98. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +1 -1
  99. package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +1 -1
  100. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +1 -1
  101. package/coverage/lcov-report/core/api/hooks/index.html +12 -12
  102. package/coverage/lcov-report/core/api/hooks/index.js.html +1 -1
  103. package/coverage/lcov-report/core/api/index.html +34 -34
  104. package/coverage/lcov-report/core/api/index.js.html +26 -26
  105. package/coverage/lcov-report/core/api/marshall.js.html +1 -1
  106. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +1 -1
  107. package/coverage/lcov-report/core/api/models/index.html +1 -1
  108. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +1 -1
  109. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +1 -1
  110. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +1 -1
  111. package/coverage/lcov-report/core/api/oauth2-handler.js.html +1 -1
  112. package/coverage/lcov-report/core/api/oauth2-verifier.js.html +1 -1
  113. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +1 -1
  114. package/coverage/lcov-report/core/api/services/account/account.service.js.html +1 -1
  115. package/coverage/lcov-report/core/api/services/account/index.html +1 -1
  116. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
  117. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +31 -7
  118. package/coverage/lcov-report/core/api/services/authorisations/index.html +9 -9
  119. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
  120. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
  121. package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
  122. package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +1 -1
  123. package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +1 -1
  124. package/coverage/lcov-report/core/api/services/devices/index.html +1 -1
  125. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +1 -1
  126. package/coverage/lcov-report/core/api/services/groups/index.html +1 -1
  127. package/coverage/lcov-report/core/api/services/index.html +11 -11
  128. package/coverage/lcov-report/core/api/services/index.js.html +66 -66
  129. package/coverage/lcov-report/core/api/services/mailer/index.html +1 -1
  130. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +1 -1
  131. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +1 -1
  132. package/coverage/lcov-report/core/api/services/organisations/index.html +1 -1
  133. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +1 -1
  134. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +1 -1
  135. package/coverage/lcov-report/core/api/services/pusher/index.html +1 -1
  136. package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +1 -1
  137. package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +1 -1
  138. package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +1 -1
  139. package/coverage/lcov-report/core/api/services/storage/index.html +1 -1
  140. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +1 -1
  141. package/coverage/lcov-report/core/api/services/tags/index.html +1 -1
  142. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +1 -1
  143. package/coverage/lcov-report/core/api/services/users/index.html +1 -1
  144. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +1 -1
  145. package/coverage/lcov-report/core/common/errors.js.html +1 -1
  146. package/coverage/lcov-report/core/common/index.html +7 -7
  147. package/coverage/lcov-report/core/common/index.js.html +1 -1
  148. package/coverage/lcov-report/core/common/permissions.js.html +81 -51
  149. package/coverage/lcov-report/index.html +39 -39
  150. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +1 -1
  151. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +1 -1
  152. package/coverage/lcov-report/map/api/hooks/index.html +1 -1
  153. package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
  154. package/coverage/lcov-report/map/api/index.html +1 -1
  155. package/coverage/lcov-report/map/api/index.js.html +1 -1
  156. package/coverage/lcov-report/map/api/marshall.js.html +1 -1
  157. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
  158. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
  159. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +14 -5
  160. package/coverage/lcov-report/map/api/models/index.html +7 -7
  161. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
  162. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
  163. package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
  164. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +1 -1
  165. package/coverage/lcov-report/map/api/services/catalog/index.html +1 -1
  166. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  167. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  168. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +1 -1
  169. package/coverage/lcov-report/map/api/services/features/index.html +1 -1
  170. package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  171. package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +1 -1
  172. package/coverage/lcov-report/map/api/services/geocoder/index.html +1 -1
  173. package/coverage/lcov-report/map/api/services/index.html +1 -1
  174. package/coverage/lcov-report/map/api/services/index.js.html +1 -1
  175. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
  176. package/coverage/lcov-report/map/common/errors.js.html +1 -1
  177. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +1 -1
  178. package/coverage/lcov-report/map/common/grid.js.html +1 -1
  179. package/coverage/lcov-report/map/common/index.html +1 -1
  180. package/coverage/lcov-report/map/common/index.js.html +1 -1
  181. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
  182. package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
  183. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
  184. package/coverage/lcov-report/map/common/opendap-utils.js.html +1 -1
  185. package/coverage/lcov-report/map/common/permissions.js.html +1 -1
  186. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
  187. package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
  188. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +1 -1
  189. package/coverage/lcov-report/map/common/wcs-utils.js.html +1 -1
  190. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1 -1
  191. package/coverage/lcov-report/map/common/wfs-utils.js.html +1 -1
  192. package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
  193. package/coverage/lcov-report/map/common/wmts-utils.js.html +1 -1
  194. package/coverage/lcov.info +948 -769
  195. package/coverage/map/api/hooks/hooks.catalog.js.html +1 -1
  196. package/coverage/map/api/hooks/hooks.query.js.html +1 -1
  197. package/coverage/map/api/hooks/index.html +1 -1
  198. package/coverage/map/api/hooks/index.js.html +1 -1
  199. package/coverage/map/api/index.html +1 -1
  200. package/coverage/map/api/index.js.html +1 -1
  201. package/coverage/map/api/marshall.js.html +1 -1
  202. package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
  203. package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
  204. package/coverage/map/api/models/features.model.mongodb.js.html +14 -5
  205. package/coverage/map/api/models/index.html +7 -7
  206. package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
  207. package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
  208. package/coverage/map/api/services/alerts/index.html +1 -1
  209. package/coverage/map/api/services/catalog/catalog.hooks.js.html +1 -1
  210. package/coverage/map/api/services/catalog/index.html +1 -1
  211. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  212. package/coverage/map/api/services/daptiles/index.html +1 -1
  213. package/coverage/map/api/services/features/features.hooks.js.html +1 -1
  214. package/coverage/map/api/services/features/index.html +1 -1
  215. package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  216. package/coverage/map/api/services/geocoder/geocoder.service.js.html +1 -1
  217. package/coverage/map/api/services/geocoder/index.html +1 -1
  218. package/coverage/map/api/services/index.html +1 -1
  219. package/coverage/map/api/services/index.js.html +1 -1
  220. package/coverage/map/common/dynamic-grid-source.js.html +1 -1
  221. package/coverage/map/common/errors.js.html +1 -1
  222. package/coverage/map/common/geotiff-grid-source.js.html +1 -1
  223. package/coverage/map/common/grid.js.html +1 -1
  224. package/coverage/map/common/index.html +1 -1
  225. package/coverage/map/common/index.js.html +1 -1
  226. package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
  227. package/coverage/map/common/moment-utils.js.html +1 -1
  228. package/coverage/map/common/opendap-grid-source.js.html +1 -1
  229. package/coverage/map/common/opendap-utils.js.html +1 -1
  230. package/coverage/map/common/permissions.js.html +1 -1
  231. package/coverage/map/common/time-based-grid-source.js.html +1 -1
  232. package/coverage/map/common/tms-utils.js.html +1 -1
  233. package/coverage/map/common/wcs-grid-source.js.html +1 -1
  234. package/coverage/map/common/wcs-utils.js.html +1 -1
  235. package/coverage/map/common/weacast-grid-source.js.html +1 -1
  236. package/coverage/map/common/wfs-utils.js.html +1 -1
  237. package/coverage/map/common/wms-utils.js.html +1 -1
  238. package/coverage/map/common/wmts-utils.js.html +1 -1
  239. package/extras/tours/map/catalog-panel.js +61 -10
  240. package/extras/tours/map/create-view.js +25 -0
  241. package/extras/tours/map/fab.js +10 -1
  242. package/extras/tours/map/navigation-bar.js +56 -10
  243. package/lib/core/api/application.js +44 -10
  244. package/lib/core/api/application.js.map +1 -1
  245. package/lib/core/api/hooks/hooks.authorisations.js +8 -1
  246. package/lib/core/api/hooks/hooks.authorisations.js.map +1 -1
  247. package/lib/core/api/hooks/hooks.query.js +135 -100
  248. package/lib/core/api/hooks/hooks.query.js.map +1 -1
  249. package/lib/core/api/services/authorisations/authorisations.service.js +13 -1
  250. package/lib/core/api/services/authorisations/authorisations.service.js.map +1 -1
  251. package/lib/core/api/services/pusher/pusher.service.js +40 -16
  252. package/lib/core/api/services/pusher/pusher.service.js.map +1 -1
  253. package/lib/core/client/components/chart/KChart.vue +115 -0
  254. package/lib/core/client/components/chart/KStatsChart.vue +76 -0
  255. package/lib/core/client/components/chart/index.js +20 -0
  256. package/lib/core/client/components/chart/index.js.map +1 -0
  257. package/lib/core/client/components/collection/KColumn.vue +29 -28
  258. package/lib/core/client/components/collection/KFilter.vue +103 -72
  259. package/lib/core/client/components/collection/KHistoryEntry.vue +1 -1
  260. package/lib/core/client/components/collection/KItem.vue +4 -4
  261. package/lib/core/client/components/editor/KModalEditor.vue +3 -4
  262. package/lib/core/client/components/editor/KSettingsEditor.vue +6 -2
  263. package/lib/core/client/components/form/KChipsField.vue +4 -4
  264. package/lib/core/client/components/form/KFileField.vue +13 -6
  265. package/lib/core/client/components/form/KRoleField.vue +5 -2
  266. package/lib/core/client/components/form/KTextField.vue +12 -2
  267. package/lib/core/client/components/form/KUnitField.vue +57 -0
  268. package/lib/core/client/components/form/KUrlField.vue +1 -1
  269. package/lib/core/client/components/form/KView.vue +1 -1
  270. package/lib/core/client/components/frame/KAction.vue +41 -7
  271. package/lib/core/client/components/frame/KBlock.vue +7 -7
  272. package/lib/core/client/components/frame/KContent.vue +1 -1
  273. package/lib/core/client/components/frame/KModal.vue +66 -20
  274. package/lib/core/client/components/frame/KOpener.vue +1 -1
  275. package/lib/core/client/components/frame/KPanel.vue +8 -7
  276. package/lib/core/client/components/frame/KPopupAction.vue +6 -0
  277. package/lib/core/client/components/frame/KScreen.vue +1 -1
  278. package/lib/core/client/components/frame/KScrollArea.vue +65 -0
  279. package/lib/core/client/components/frame/KStamp.vue +4 -2
  280. package/lib/core/client/components/frame/index.js +6 -6
  281. package/lib/core/client/components/frame/index.js.map +1 -1
  282. package/lib/core/client/components/input/KColorChooser.vue +3 -5
  283. package/lib/core/client/components/input/KIconChooser.vue +41 -40
  284. package/lib/core/client/components/input/KPalette.vue +1 -1
  285. package/lib/core/client/components/input/index.js +14 -4
  286. package/lib/core/client/components/input/index.js.map +1 -1
  287. package/lib/core/client/components/layout/KAbout.vue +47 -49
  288. package/lib/core/client/components/layout/KFab.vue +1 -1
  289. package/lib/core/client/components/layout/KLayout.vue +10 -2
  290. package/lib/core/client/components/layout/KPage.vue +19 -18
  291. package/lib/core/client/components/layout/KTour.vue +5 -3
  292. package/lib/core/client/components/layout/KWindow.vue +211 -59
  293. package/lib/core/client/components/media/KMediaBrowser.vue +6 -6
  294. package/lib/core/client/components/menu/KMenu.vue +13 -5
  295. package/lib/core/client/components/menu/KRadialFab.vue +22 -24
  296. package/lib/core/client/components/menu/KRadialFabItem.vue +17 -18
  297. package/lib/core/client/components/team/KAddMember.vue +1 -1
  298. package/lib/core/client/components/team/KChangeRole.vue +11 -14
  299. package/lib/core/client/components/team/KGroupCard.vue +12 -5
  300. package/lib/core/client/components/team/KJoinGroup.vue +22 -22
  301. package/lib/core/client/components/team/KMemberCard.vue +19 -4
  302. package/lib/core/client/components/time/KAbsoluteTimeRange.vue +190 -0
  303. package/lib/core/client/components/time/KRelativeTimeRanges.vue +192 -0
  304. package/lib/core/client/components/time/index.js +20 -0
  305. package/lib/core/client/components/time/index.js.map +1 -0
  306. package/lib/core/client/components/viewer/KModalViewer.vue +10 -9
  307. package/lib/core/client/i18n/core_en.json +99 -17
  308. package/lib/core/client/i18n/core_fr.json +94 -18
  309. package/lib/core/client/index.js +16 -3
  310. package/lib/core/client/index.js.map +1 -1
  311. package/lib/core/client/mixins/mixin.base-collection.js +11 -1
  312. package/lib/core/client/mixins/mixin.base-collection.js.map +1 -1
  313. package/lib/core/client/mixins/mixin.base-widget.js +26 -12
  314. package/lib/core/client/mixins/mixin.base-widget.js.map +1 -1
  315. package/lib/core/client/reader.js +46 -15
  316. package/lib/core/client/reader.js.map +1 -1
  317. package/lib/core/client/readers/reader.csv.js +33 -22
  318. package/lib/core/client/readers/reader.csv.js.map +1 -1
  319. package/lib/core/client/readers/reader.json.js +31 -20
  320. package/lib/core/client/readers/reader.json.js.map +1 -1
  321. package/lib/core/client/services/index.js +16 -4
  322. package/lib/core/client/services/index.js.map +1 -1
  323. package/lib/core/client/services/local-settings.service.js +10 -4
  324. package/lib/core/client/services/local-settings.service.js.map +1 -1
  325. package/lib/core/client/time.js +29 -18
  326. package/lib/core/client/time.js.map +1 -1
  327. package/lib/core/client/units.js +207 -0
  328. package/lib/core/client/units.js.map +1 -0
  329. package/lib/core/client/utils.js +11 -0
  330. package/lib/core/client/utils.js.map +1 -1
  331. package/lib/core/common/permissions.js +44 -34
  332. package/lib/core/common/permissions.js.map +1 -1
  333. package/lib/core/common/schemas/settings.update.json +86 -4
  334. package/lib/map/api/hooks/hooks.catalog.js +20 -0
  335. package/lib/map/api/hooks/hooks.catalog.js.map +1 -1
  336. package/lib/map/api/models/catalog.model.mongodb.js +6 -1
  337. package/lib/map/api/models/catalog.model.mongodb.js.map +1 -1
  338. package/lib/map/api/models/features.model.mongodb.js +8 -0
  339. package/lib/map/api/models/features.model.mongodb.js.map +1 -1
  340. package/lib/map/api/services/catalog/catalog.hooks.js +3 -1
  341. package/lib/map/api/services/catalog/catalog.hooks.js.map +1 -1
  342. package/lib/map/client/components/KCaptureToolbar.vue +2 -7
  343. package/lib/map/client/components/KColorLegend.vue +38 -25
  344. package/lib/map/client/components/KFeaturesChart.vue +84 -114
  345. package/lib/map/client/components/KFeaturesFilter.vue +37 -38
  346. package/lib/map/client/components/KFeaturesTable.vue +15 -16
  347. package/lib/map/client/components/KLayerStyleEditor.vue +1 -1
  348. package/lib/map/client/components/KLayerStyleForm.vue +123 -51
  349. package/lib/map/client/components/KLevelSlider.vue +30 -29
  350. package/lib/map/client/components/KLocationMap.vue +2 -2
  351. package/lib/map/client/components/KMeasureTool.vue +49 -28
  352. package/lib/map/client/components/KPositionIndicator.vue +4 -4
  353. package/lib/map/client/components/KTimeline.vue +30 -35
  354. package/lib/map/client/components/KTimezoneMap.vue +156 -0
  355. package/lib/map/client/components/KUrlLegend.vue +11 -10
  356. package/lib/map/client/components/catalog/KAddLayer.vue +3 -2
  357. package/lib/map/client/components/catalog/KBaseLayersSelector.vue +1 -1
  358. package/lib/map/client/components/catalog/KCatalogLayersPanel.vue +56 -0
  359. package/lib/map/client/components/catalog/KCreateView.vue +91 -0
  360. package/lib/map/client/components/catalog/KLayerCategories.vue +5 -3
  361. package/lib/map/client/components/catalog/{KCatalog.vue → KLayersPanel.vue} +23 -22
  362. package/lib/map/client/components/catalog/KLayersSelector.vue +3 -3
  363. package/lib/map/client/components/catalog/KUserLayersPanel.vue +40 -0
  364. package/lib/map/client/components/catalog/KViewSelector.vue +46 -0
  365. package/lib/map/client/components/catalog/KViewsPanel.vue +110 -0
  366. package/lib/map/client/components/catalog/KWeatherLayersSelector.vue +5 -14
  367. package/lib/map/client/components/form/KTimezoneField.vue +135 -0
  368. package/lib/map/client/components/widget/KElevationProfile.vue +488 -0
  369. package/lib/map/client/components/widget/KInformationBox.vue +53 -37
  370. package/lib/map/client/components/widget/KMapillaryViewer.vue +26 -16
  371. package/lib/map/client/components/widget/KTimeSeries.vue +283 -358
  372. package/lib/map/client/i18n/map_en.json +73 -56
  373. package/lib/map/client/i18n/map_fr.json +75 -58
  374. package/lib/map/client/init.js +4 -3
  375. package/lib/map/client/init.js.map +1 -1
  376. package/lib/map/client/leaflet/GradientPath.js +40 -19
  377. package/lib/map/client/leaflet/GradientPath.js.map +1 -1
  378. package/lib/map/client/leaflet/TiledFeatureLayer.js +527 -93
  379. package/lib/map/client/leaflet/TiledFeatureLayer.js.map +1 -1
  380. package/lib/map/client/leaflet/TiledMeshLayer.js +58 -35
  381. package/lib/map/client/leaflet/TiledMeshLayer.js.map +1 -1
  382. package/lib/map/client/leaflet/utils.js +44 -3
  383. package/lib/map/client/leaflet/utils.js.map +1 -1
  384. package/lib/map/client/mixins/globe/mixin.base-globe.js +16 -1
  385. package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
  386. package/lib/map/client/mixins/globe/mixin.file-layers.js +12 -2
  387. package/lib/map/client/mixins/globe/mixin.file-layers.js.map +1 -1
  388. package/lib/map/client/mixins/globe/mixin.geojson-layers.js +23 -27
  389. package/lib/map/client/mixins/globe/mixin.geojson-layers.js.map +1 -1
  390. package/lib/map/client/mixins/globe/mixin.popup.js +7 -3
  391. package/lib/map/client/mixins/globe/mixin.popup.js.map +1 -1
  392. package/lib/map/client/mixins/globe/mixin.style.js +8 -4
  393. package/lib/map/client/mixins/globe/mixin.style.js.map +1 -1
  394. package/lib/map/client/mixins/globe/mixin.tooltip.js +7 -3
  395. package/lib/map/client/mixins/globe/mixin.tooltip.js.map +1 -1
  396. package/lib/map/client/mixins/index.js +23 -18
  397. package/lib/map/client/mixins/index.js.map +1 -1
  398. package/lib/map/client/mixins/map/mixin.base-map.js +32 -8
  399. package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
  400. package/lib/map/client/mixins/map/mixin.edit-layers.js +8 -4
  401. package/lib/map/client/mixins/map/mixin.edit-layers.js.map +1 -1
  402. package/lib/map/client/mixins/map/mixin.file-layers.js +13 -5
  403. package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
  404. package/lib/map/client/mixins/map/mixin.geojson-layers.js +65 -14
  405. package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
  406. package/lib/map/client/mixins/map/mixin.heatmap-layers.js +6 -1
  407. package/lib/map/client/mixins/map/mixin.heatmap-layers.js.map +1 -1
  408. package/lib/map/client/mixins/map/mixin.popup.js +4 -2
  409. package/lib/map/client/mixins/map/mixin.popup.js.map +1 -1
  410. package/lib/map/client/mixins/map/mixin.style.js +9 -5
  411. package/lib/map/client/mixins/map/mixin.style.js.map +1 -1
  412. package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js +4 -11
  413. package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js.map +1 -1
  414. package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js +0 -11
  415. package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js.map +1 -1
  416. package/lib/map/client/mixins/map/mixin.tooltip.js +4 -2
  417. package/lib/map/client/mixins/map/mixin.tooltip.js.map +1 -1
  418. package/lib/map/client/mixins/mixin.activity.js +150 -150
  419. package/lib/map/client/mixins/mixin.activity.js.map +1 -1
  420. package/lib/map/client/mixins/mixin.catalog-panel.js +36 -0
  421. package/lib/map/client/mixins/mixin.catalog-panel.js.map +1 -0
  422. package/lib/map/client/mixins/mixin.feature-selection.js +17 -8
  423. package/lib/map/client/mixins/mixin.feature-selection.js.map +1 -1
  424. package/lib/map/client/mixins/mixin.feature-service.js +36 -16
  425. package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
  426. package/lib/map/client/mixins/mixin.infobox.js +1 -1
  427. package/lib/map/client/mixins/mixin.infobox.js.map +1 -1
  428. package/lib/map/client/mixins/mixin.levels.js +26 -12
  429. package/lib/map/client/mixins/mixin.levels.js.map +1 -1
  430. package/lib/map/client/mixins/mixin.style.js +1 -0
  431. package/lib/map/client/mixins/mixin.style.js.map +1 -1
  432. package/lib/map/client/mixins/mixin.weacast.js +22 -28
  433. package/lib/map/client/mixins/mixin.weacast.js.map +1 -1
  434. package/lib/map/client/pixi-utils.js +8 -177
  435. package/lib/map/client/pixi-utils.js.map +1 -1
  436. package/lib/map/client/readers/index.js +12 -0
  437. package/lib/map/client/readers/index.js.map +1 -1
  438. package/lib/map/client/readers/reader.geojson.js +62 -34
  439. package/lib/map/client/readers/reader.geojson.js.map +1 -1
  440. package/lib/map/client/readers/reader.gpx.js +32 -21
  441. package/lib/map/client/readers/reader.gpx.js.map +1 -1
  442. package/lib/map/client/readers/reader.kml.js +32 -21
  443. package/lib/map/client/readers/reader.kml.js.map +1 -1
  444. package/lib/map/client/readers/reader.shp.js +116 -0
  445. package/lib/map/client/readers/reader.shp.js.map +1 -0
  446. package/lib/map/client/utils.js +1 -8
  447. package/lib/map/client/utils.js.map +1 -1
  448. package/lib/map/common/grid.js +131 -0
  449. package/lib/map/common/grid.js.map +1 -1
  450. package/lib/map/common/index.js +22 -11
  451. package/lib/map/common/index.js.map +1 -1
  452. package/lib/map/common/meteo-model-grid-source.js +5 -2
  453. package/lib/map/common/meteo-model-grid-source.js.map +1 -1
  454. package/lib/map/common/time-based-grid-source.js +5 -2
  455. package/lib/map/common/time-based-grid-source.js.map +1 -1
  456. package/lib/test/client/core/account.js +1 -1
  457. package/lib/test/client/core/account.js.map +1 -1
  458. package/lib/test/client/core/collection.js +31 -13
  459. package/lib/test/client/core/collection.js.map +1 -1
  460. package/lib/test/client/core/layout.js +137 -49
  461. package/lib/test/client/core/layout.js.map +1 -1
  462. package/lib/test/client/core/screens.js +1 -1
  463. package/lib/test/client/core/screens.js.map +1 -1
  464. package/lib/test/client/core/utils.js +89 -22
  465. package/lib/test/client/core/utils.js.map +1 -1
  466. package/lib/test/client/map/catalog.js +134 -41
  467. package/lib/test/client/map/catalog.js.map +1 -1
  468. package/lib/test/client/map/controls.js +7 -4
  469. package/lib/test/client/map/controls.js.map +1 -1
  470. package/lib/test/client/map/index.js +12 -0
  471. package/lib/test/client/map/index.js.map +1 -1
  472. package/lib/test/client/map/utils.js +67 -0
  473. package/lib/test/client/map/utils.js.map +1 -0
  474. package/package.json +5 -6
  475. package/.nyc_output/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +0 -1
  476. package/.nyc_output/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +0 -1
  477. package/.nyc_output/processinfo/058fc679-d60a-4501-ac04-71171e5200b8.json +0 -1
  478. package/.nyc_output/processinfo/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +0 -1
  479. package/.nyc_output/processinfo/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +0 -1
  480. package/.nyc_output/processinfo/8b1830fa-932e-4a61-9837-4a5b18f83ea9.json +0 -1
  481. package/.nyc_output/processinfo/afd2d144-3570-4858-b94a-b523dbd023dd.json +0 -1
  482. package/extras/tours/map/favorite-views.js +0 -53
  483. package/lib/core/client/components/frame/KChart.vue +0 -60
  484. package/lib/core/client/components/input/KCodeInput.vue +0 -50
  485. package/lib/core/client/components/input/KTimeRangeChooser.vue +0 -109
  486. package/lib/core/client/components/time/KTimeRange.vue +0 -144
  487. package/lib/map/client/components/KFavoriteViews.vue +0 -217
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.geojson-layers.js"],"names":["wfs","geometryToLayer","L","GeoJSON","geojson","options","geometry","properties","geodesic","type","Geodesic","coordsToLatLngs","coordinates","Object","assign","steps","style","layer","fill","createCircle","coordsToLatLng","radius","gradient","GradientPath","mask","MaskLayer","methods","processRealtimeGeoJsonLayerOptions","leafletOptions","leaflet","id","_","get","set","feature","container","createLeafletLayer","has","updateFeature","oldLayer","onEachFeature","setStyle","oldProperties","setIcon","staticGeometry","oldType","setLatLng","setData","setLatLngs","service","tiled","removeMissing","successCallback","errorCallback","featureSource","baseQuery","getFeatures","merge","probeService","initialized","lastUpdateTime","getProbeFeatures","error","shouldSkipFeaturesUpdate","Time","getCurrentTime","clone","query","searchParams","OUTPUTFORMAT","outputFormat","SRSNAME","BBOX","south","west","north","east","GetFeature","url","version","xml2json","sourceCompiler","template","lastFetchedSource","sourceToFetch","time","processGeoJsonLayerOptions","dataSource","isNil","features","data","processClusterLayerOptions","cluster","createLeafletGeoJsonLayer","activityOptions","engine","realtime","layerStyleTemplate","map","property","compiler","popupTemplate","popup","tooltipTemplate","tooltip","geoJsonOptions","getGeoJsonOptions","keys","forEach","key","layerStyle","convertFromSimpleStyleSpec","tiledLayer","TiledFeatureLayer","setup","on","addTo","removeFrom","$emit","leafletLayer","once","toGeoJSON","values","_features","clearLayers","_onNewData","addLayer","geoJsonLayer","update","timeDimension","source","logger","geojsonOptions","LeafletEvents","Feature","onLeafletFeature","getPopup","unbindPopup","generateStyle","wasOpen","isPopupOpen","bindPopup","Popup","openPopup","getTooltip","unbindTooltip","isTooltipOpen","bindTooltip","Tooltip","openTooltip","pointToLayer","latlng","updateLayer","name","geoJson","remove","getLeafletLayerByName","getLayers","find","_container","filter","getLayer","getFeatureId","toGeoJson","onCurrentTimeChangedGeoJsonLayers","geoJsonlayers","layers","$or","$exists","variables","isVisible","geoJsonlayer","redraw","created","registerLeafletConstructor","$events","$on","beforeDestroy","$off","onCurrentTimeChangedHeatmapLayers"],"mappings":"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","file":"mixin.geojson-layers.js","sourcesContent":["import L from 'leaflet'\r\nimport _ from 'lodash'\r\nimport sift from 'sift'\r\nimport logger from 'loglevel'\r\nimport 'leaflet-realtime'\r\nimport { Time } from '../../../../core/client/time'\r\nimport { GradientPath } from '../../leaflet/GradientPath'\r\nimport { MaskLayer } from '../../leaflet/MaskLayer'\r\nimport { TiledFeatureLayer } from '../../leaflet/TiledFeatureLayer'\r\nimport { fetchGeoJson, LeafletEvents, bindLeafletEvents, unbindLeafletEvents } from '../../utils'\r\nimport * as wfs from '../../../common/wfs-utils'\r\n\r\n// Override default Leaflet GeoJson utility to manage some specific use cases\r\nconst geometryToLayer = L.GeoJSON.geometryToLayer\r\nL.GeoJSON.geometryToLayer = function (geojson, options) {\r\n const geometry = geojson.geometry\r\n const properties = geojson.properties\r\n if (geometry && properties && properties.geodesic) {\r\n if (geometry.type === 'LineString') {\r\n return new L.Geodesic([L.GeoJSON.coordsToLatLngs(geometry.coordinates, 0)],\r\n Object.assign({ steps: 100 }, options.style(geojson)))\r\n } else if (geometry.type === 'Point') {\r\n const layer = new L.Geodesic([], Object.assign({ fill: true, steps: 360 }, options.style(geojson)))\r\n layer.createCircle(L.GeoJSON.coordsToLatLng(geometry.coordinates), properties.radius)\r\n return layer\r\n }\r\n }\r\n if (geometry && properties && properties.gradient) {\r\n if (geometry.type === 'LineString') {\r\n return new GradientPath(geojson, options.style(geojson))\r\n }\r\n }\r\n if (geometry && properties && properties.mask) {\r\n if (geometry.type === 'Polygon' || geometry.type === 'MultiPolygon') {\r\n return new MaskLayer(geojson, options.style(geojson))\r\n }\r\n }\r\n return geometryToLayer(geojson, options)\r\n}\r\n\r\nexport default {\r\n methods: {\r\n processRealtimeGeoJsonLayerOptions (options) {\r\n const leafletOptions = options.leaflet || options\r\n // Alter type as required by the plugin\r\n leafletOptions.type = 'realtime'\r\n // We first need to create an underlying container or setup Id function\r\n const id = _.get(options, 'featureId', _.get(leafletOptions, 'id', '_id'))\r\n if (id) _.set(leafletOptions, 'getFeatureId', (feature) => _.get(feature, 'properties.' + id, _.get(feature, id)))\r\n const container = _.get(leafletOptions, 'container')\r\n // If container given and not already instanciated, do it\r\n if (typeof container === 'string') {\r\n leafletOptions.container = this.createLeafletLayer({ type: container })\r\n }\r\n // Custom update function to ensure dynamic styling works as expected\r\n if (!_.has(leafletOptions, 'updateFeature')) {\r\n leafletOptions.updateFeature = function (feature, oldLayer) {\r\n // A new feature is coming, create it\r\n if (!oldLayer) return\r\n // An existing one is found, simply update styling, properties, etc.\r\n leafletOptions.onEachFeature(feature, oldLayer)\r\n if (oldLayer.setStyle) {\r\n // Some vector layers can be used for points, eg circleMarker,\r\n // in this case we use marker styling instead of lines/polygons styling\r\n if (feature.geometry.type === 'Point') {\r\n // FIXME: updating style in place does not seem to work, so for now we recreate the whole marker\r\n // oldLayer.setStyle(leafletOptions.pointToLayer(feature))\r\n return\r\n } else {\r\n oldLayer.setStyle(leafletOptions.style(feature))\r\n }\r\n }\r\n const oldProperties = _.get(oldLayer, 'feature.properties')\r\n const properties = _.get(feature, 'properties')\r\n if (oldProperties && properties) Object.assign(properties, oldProperties)\r\n if (oldLayer.setIcon) {\r\n // FIXME: updating icon in place requires to recreate it anyway, so for now we recreate the whole marker\r\n // oldLayer.setIcon(_.get(leafletOptions.pointToLayer(feature, oldLayer.getLatLng()), 'options.icon'))\r\n return\r\n }\r\n // And coordinates if not static\r\n const staticGeometry = _.get(leafletOptions, 'staticGeometry', false)\r\n if (staticGeometry) return oldLayer\r\n // The feature is changing its geometry type, recreate it\r\n const oldType = _.get(oldLayer, 'feature.geometry.type')\r\n const type = _.get(feature, 'geometry.type')\r\n if (type !== oldType) return\r\n const coordinates = feature.geometry.coordinates\r\n // FIXME: support others geometry types ?\r\n switch (type) {\r\n case 'Point':\r\n oldLayer.setLatLng(L.GeoJSON.coordsToLatLngs(coordinates))\r\n break\r\n case 'LineString':\r\n case 'MultiLineString':\r\n // Support Gradient Path\r\n if (typeof oldLayer.setData === 'function') oldLayer.setData(feature)\r\n else oldLayer.setLatLngs(L.GeoJSON.coordsToLatLngs(coordinates, type === 'LineString' ? 0 : 1))\r\n break\r\n case 'Polygon':\r\n case 'MultiPolygon':\r\n oldLayer.setLatLngs(L.GeoJSON.coordsToLatLngs(coordinates, type === 'Polygon' ? 1 : 2))\r\n break\r\n }\r\n return oldLayer\r\n }\r\n }\r\n // Check for feature service layers\r\n if (options.service) {\r\n // We perform manual update\r\n _.set(leafletOptions, 'start', false)\r\n // Tell realtime plugin how to update/load data\r\n if (leafletOptions.tiled) {\r\n leafletOptions.removeMissing = false\r\n // Fetching is managed by tiles but even for manual update leaflet realtime require a src\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {})\r\n // Generate fetch function for tiled feature layer\r\n leafletOptions.featureSource = (baseQuery) => this.getFeatures(_.merge({ baseQuery }, options))\r\n } else {\r\n leafletOptions.removeMissing = !options.probeService\r\n let initialized = !options.probeService // If no probe reference, nothing to be initialized\r\n let lastUpdateTime\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {\r\n // If the probe location is given by another service use it on initialization\r\n if (!initialized) {\r\n try {\r\n // Use probes as reference\r\n successCallback(await this.getProbeFeatures(options))\r\n initialized = true\r\n } catch (error) {\r\n errorCallback(error)\r\n }\r\n }\r\n try {\r\n // Update only the first time or when required according to data update interval\r\n if (!lastUpdateTime || !this.shouldSkipFeaturesUpdate(lastUpdateTime, options)) {\r\n lastUpdateTime = Time.getCurrentTime().clone()\r\n successCallback(await this.getFeatures(options))\r\n }\r\n } catch (error) {\r\n errorCallback(error)\r\n }\r\n })\r\n }\r\n } else if (options.wfs) {\r\n // Features are fetched from a WFS connection\r\n _.set(leafletOptions, 'start', false)\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {})\r\n\r\n if (leafletOptions.tiled) {\r\n leafletOptions.removeMissing = false\r\n // Generate fetch function for tiled feature layer\r\n leafletOptions.featureSource = (query) => {\r\n const searchParams = Object.assign({\r\n OUTPUTFORMAT: options.wfs.outputFormat, // request as geojson\r\n SRSNAME: 'EPSG:4326', // result in 4326\r\n BBOX: `${query.south},${query.west},${query.north},${query.east},urn:ogc:def:crs:EPSG::4326` // request bbox\r\n }, options.wfs.searchParams)\r\n return wfs.GetFeature(options.wfs.url, options.wfs.version, options.wfs.layer, searchParams, { xml2json: false })\r\n }\r\n } else {\r\n }\r\n } else if (_.has(leafletOptions, 'sourceTemplate')) {\r\n const sourceCompiler = _.template(_.get(leafletOptions, 'sourceTemplate'))\r\n let lastFetchedSource\r\n // Tell realtime plugin how to update/load data\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {\r\n try {\r\n const sourceToFetch = sourceCompiler({ time: Time.getCurrentTime() })\r\n if (!lastFetchedSource || (lastFetchedSource !== sourceToFetch)) {\r\n lastFetchedSource = sourceToFetch\r\n successCallback(await fetchGeoJson(sourceToFetch))\r\n }\r\n } catch (error) {\r\n errorCallback(error)\r\n }\r\n })\r\n // We perform manual update\r\n _.set(leafletOptions, 'start', false)\r\n } else if (!_.has(leafletOptions, 'source')) {\r\n _.set(leafletOptions, 'start', false)\r\n // Even for manual update leaflet realtime require a src\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {})\r\n }\r\n },\r\n async processGeoJsonLayerOptions (options) {\r\n const leafletOptions = options.leaflet || options\r\n const dataSource = _.get(leafletOptions, 'source')\r\n if (_.isNil(dataSource)) {\r\n // Empty valid GeoJson\r\n _.set(leafletOptions, 'source', { type: 'FeatureCollection', features: [] })\r\n } else if (typeof dataSource === 'string') { // URL ? If so load data\r\n let data\r\n // Check for feature service layers\r\n if (options.service) {\r\n data = await this.getFeatures(options)\r\n } else { // Otherwise standard HTTP\r\n data = await fetchGeoJson(dataSource)\r\n }\r\n _.set(leafletOptions, 'source', data)\r\n }\r\n },\r\n processClusterLayerOptions (options) {\r\n const leafletOptions = options.leaflet || options\r\n leafletOptions.container = this.createLeafletLayer(Object.assign({ type: 'markerClusterGroup' }, leafletOptions.cluster))\r\n },\r\n async createLeafletGeoJsonLayer (options) {\r\n const leafletOptions = options.leaflet || options\r\n // Check for valid type\r\n if (leafletOptions.type !== 'geoJson') return\r\n\r\n try {\r\n // If not explicitely disable use defaults for clustering\r\n if (!_.has(leafletOptions, 'cluster') && this.activityOptions.engine.cluster) {\r\n // Merge existing config or create a new one on layer\r\n if (leafletOptions.cluster) Object.assign(leafletOptions.cluster, this.activityOptions.engine.cluster)\r\n else leafletOptions.cluster = Object.assign({}, this.activityOptions.engine.cluster)\r\n }\r\n // Specific case of clustered layer where we first need to create an underlying group\r\n if (leafletOptions.cluster) {\r\n this.processClusterLayerOptions(options)\r\n }\r\n // Specific case of realtime layer\r\n if (leafletOptions.realtime) {\r\n this.processRealtimeGeoJsonLayerOptions(options)\r\n } else {\r\n await this.processGeoJsonLayerOptions(options)\r\n }\r\n // Optimize templating by creating compilers up-front\r\n const layerStyleTemplate = _.get(leafletOptions, 'template')\r\n if (layerStyleTemplate) {\r\n // We allow to template style properties according to feature, because it can be slow you have to specify a subset of properties\r\n leafletOptions.template = layerStyleTemplate.map(property => ({\r\n property, compiler: _.template(_.get(leafletOptions, property))\r\n }))\r\n }\r\n const popupTemplate = _.get(leafletOptions, 'popup.template')\r\n if (popupTemplate) {\r\n leafletOptions.popup.compiler = _.template(popupTemplate)\r\n }\r\n const tooltipTemplate = _.get(leafletOptions, 'tooltip.template')\r\n if (tooltipTemplate) {\r\n leafletOptions.tooltip.compiler = _.template(tooltipTemplate)\r\n }\r\n // Merge generic GeoJson options and layer options\r\n const geoJsonOptions = this.getGeoJsonOptions(options)\r\n Object.keys(geoJsonOptions).forEach(key => {\r\n // If layer provided do not override\r\n if (!_.has(leafletOptions, key)) _.set(leafletOptions, key, _.get(geoJsonOptions, key))\r\n })\r\n leafletOptions.layerStyle = this.convertFromSimpleStyleSpec(leafletOptions)\r\n let layer = this.createLeafletLayer(options)\r\n\r\n // Specific case of realtime layer where the underlying container also need to be added to map\r\n if (leafletOptions.realtime) {\r\n // Build associated tile layer and bind required events\r\n if (leafletOptions.tiled) {\r\n const tiledLayer = new TiledFeatureLayer(leafletOptions)\r\n tiledLayer.setup(this, options)\r\n layer.tiledLayer = tiledLayer\r\n layer.on('add', () => tiledLayer.addTo(this.map))\r\n layer.on('remove', () => tiledLayer.removeFrom(this.map))\r\n }\r\n // Bind event\r\n layer.on('update', (data) => this.$emit('layer-updated', Object.assign({ layer: options, leafletLayer: layer }, data)))\r\n if (leafletOptions.container) layer.once('add', () => leafletOptions.container.addTo(this.map))\r\n // Add FeatureGroup interface so that layer edition works as well\r\n layer.toGeoJSON = () => ({ type: 'FeatureCollection', features: _.values(layer._features) })\r\n layer.clearLayers = () => layer._onNewData(true, { type: 'FeatureCollection', features: [] })\r\n layer.addLayer = (geoJsonLayer) => layer._onNewData(true, geoJsonLayer.toGeoJSON())\r\n // We launch a first update to initialize data\r\n layer.update()\r\n } else {\r\n // Specific case of clustered layer where the group is added instead of the geojson layer\r\n if (leafletOptions.cluster && leafletOptions.container) {\r\n leafletOptions.container.addLayer(layer)\r\n layer = leafletOptions.container\r\n }\r\n }\r\n // Specific case of time dimension layer where we embed the underlying geojson layer\r\n if (leafletOptions.timeDimension) {\r\n layer = this.createLeafletLayer(Object.assign({ type: 'timeDimension.layer.geoJson', source: layer }, leafletOptions.timeDimension))\r\n }\r\n return layer\r\n } catch (error) {\r\n logger.error(error)\r\n return null\r\n }\r\n },\r\n getGeoJsonOptions (options = {}) {\r\n const geojsonOptions = {\r\n onEachFeature: (feature, layer) => {\r\n // Need to restone event listeners as context has changed\r\n unbindLeafletEvents(layer, LeafletEvents.Feature)\r\n // Check for custom onEachFeature function\r\n if (typeof this.onLeafletFeature === 'function') this.onLeafletFeature(feature, layer, options)\r\n // Then for tooltip/popup\r\n // First remove previous popup if any\r\n if (layer.getPopup()) layer.unbindPopup()\r\n const popup = this.generateStyle('popup', feature, layer, options)\r\n if (popup) {\r\n // Because we build a new popup we need to restore previous state\r\n const wasOpen = (layer.getPopup() && layer.isPopupOpen())\r\n layer.bindPopup(popup)\r\n bindLeafletEvents(layer.getPopup(), LeafletEvents.Popup, this, options)\r\n if (wasOpen) layer.openPopup()\r\n }\r\n // First remove previous tooltip if any\r\n if (layer.getTooltip()) layer.unbindTooltip()\r\n const tooltip = this.generateStyle('tooltip', feature, layer, options)\r\n if (tooltip) {\r\n // Because we build a new tooltip we need to restore previous state\r\n const wasOpen = (layer.getTooltip() && layer.isTooltipOpen())\r\n layer.bindTooltip(tooltip)\r\n bindLeafletEvents(layer.getTooltip(), LeafletEvents.Tooltip, this, options)\r\n if (wasOpen) layer.openTooltip()\r\n }\r\n bindLeafletEvents(layer, LeafletEvents.Feature, this, options)\r\n },\r\n style: (feature) => {\r\n return this.generateStyle('featureStyle', feature, options)\r\n },\r\n pointToLayer: (feature, latlng) => {\r\n return this.generateStyle('markerStyle', feature, latlng, options)\r\n }\r\n }\r\n\r\n return geojsonOptions\r\n },\r\n updateLayer (name, geoJson, remove) {\r\n // Retrieve the layer\r\n let layer = this.getLeafletLayerByName(name)\r\n if (!layer) return // Cannot update invisible layer\r\n // Check if clustering on top of a realtime layer, in this case we have a top-level container\r\n let container\r\n if (typeof layer.getLayers === 'function') {\r\n container = layer\r\n layer = container.getLayers().find(layer => layer._container === container)\r\n }\r\n /* By default leaflet-realtime only performs add with manual update\r\n (see https://github.com/perliedman/leaflet-realtime/issues/136)\r\n but we'd like to perform similarly to automated updates\r\n */\r\n if (remove && (typeof layer.remove === 'function')) {\r\n let features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n // Filter features to ensure some have not been already removed\r\n // FIXME: indeed it seems to causes a bug with clustering, see https://github.com/kalisio/kdk/issues/140\r\n features = features.filter(feature => layer.getLayer(layer.options.getFeatureId(feature)))\r\n layer.remove(features)\r\n } else if (typeof layer._onNewData === 'function') {\r\n layer._onNewData(layer.options.removeMissing, geoJson || this.toGeoJson(name))\r\n }\r\n },\r\n onCurrentTimeChangedGeoJsonLayers (time) {\r\n const geoJsonlayers = _.values(this.layers).filter(sift({\r\n 'leaflet.type': 'geoJson',\r\n 'leaflet.realtime': true,\r\n $or: [ // Supported by template URL or time-based features\r\n { 'leaflet.sourceTemplate': { $exists: true } },\r\n { service: { $exists: true }, variables: { $exists: true } }\r\n ],\r\n isVisible: true\r\n }))\r\n geoJsonlayers.forEach(async geoJsonlayer => {\r\n // Retrieve the layer\r\n const layer = this.getLeafletLayerByName(geoJsonlayer.name)\r\n // Then update\r\n if (layer.tiledLayer) layer.tiledLayer.redraw()\r\n else layer.update()\r\n })\r\n }\r\n },\r\n created () {\r\n this.registerLeafletConstructor(this.createLeafletGeoJsonLayer)\r\n this.$events.$on('time-current-time-changed', this.onCurrentTimeChangedGeoJsonLayers)\r\n },\r\n beforeDestroy () {\r\n this.$events.$off('time-current-time-changed', this.onCurrentTimeChangedHeatmapLayers)\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.geojson-layers.js"],"names":["wfs","geometryToLayer","L","GeoJSON","geojson","options","geometry","properties","geodesic","type","Geodesic","coordsToLatLngs","coordinates","Object","assign","steps","style","coords","map","lineString","layer","fill","createCircle","coordsToLatLng","radius","gradient","GradientPath","mask","MaskLayer","methods","processRealtimeGeoJsonLayerOptions","leafletOptions","leaflet","id","_","get","set","feature","container","createLeafletLayer","has","updateFeature","oldLayer","onEachFeature","setStyle","oldProperties","forOwn","value","key","setIcon","staticGeometry","oldType","setLatLng","setData","setLatLngs","service","tiled","removeMissing","successCallback","errorCallback","featureSource","baseQuery","getFeatures","merge","probeService","initialized","getProbeFeatures","error","query","searchParams","OUTPUTFORMAT","outputFormat","SRSNAME","BBOX","south","west","north","east","GetFeature","url","version","xml2json","sourceCompiler","template","lastFetchedSource","sourceToFetch","time","Time","getCurrentTime","processGeoJsonLayerOptions","dataSource","isNil","features","data","processClusterLayerOptions","clusterOptions","cluster","pane","clusterPane","createLeafletGeoJsonLayer","hasMinZoom","hasMaxZoom","name","minZoom","maxZoom","panes","realtime","layerStyleTemplate","property","compiler","popupTemplate","popup","tooltipTemplate","tooltip","geoJsonOptions","getGeoJsonOptions","keys","forEach","layerStyle","convertFromSimpleStyleSpec","zoomLevelsToOmit","push","tiledLayer","TiledFeatureLayer","omit","setup","on","addTo","removeFrom","$emit","leafletLayer","once","toGeoJSON","values","_features","clearLayers","_onNewData","addLayer","geoJsonLayer","update","timeDimension","source","logger","geojsonOptions","LeafletEvents","Feature","onLeafletFeature","getPopup","unbindPopup","generateStyle","wasOpen","isPopupOpen","bindPopup","Popup","openPopup","getTooltip","unbindTooltip","isTooltipOpen","bindTooltip","Tooltip","openTooltip","pointToLayer","latlng","updateLayer","geoJson","remove","getLeafletLayerByName","getLayers","find","_container","filter","getLayer","getFeatureId","toGeoJson","onCurrentTimeChangedGeoJsonLayers","geoJsonlayers","layers","$or","$exists","isVisible","geoJsonlayer","lastUpdateTime","shouldSkipFeaturesUpdate","clone","redraw","onCurrentLevelChangedGeoJsonLayers","level","selectableLevelsLayer","engine","created","registerLeafletConstructor","$events","$on","beforeDestroy","$off","onCurrentTimeChangedHeatmapLayers"],"mappings":"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","file":"mixin.geojson-layers.js","sourcesContent":["import L from 'leaflet'\r\nimport _ from 'lodash'\r\nimport sift from 'sift'\r\nimport logger from 'loglevel'\r\nimport 'leaflet-realtime'\r\nimport { Time } from '../../../../core/client/time'\r\nimport { GradientPath } from '../../leaflet/GradientPath'\r\nimport { MaskLayer } from '../../leaflet/MaskLayer'\r\nimport { TiledFeatureLayer } from '../../leaflet/TiledFeatureLayer'\r\nimport { fetchGeoJson, LeafletEvents, bindLeafletEvents, unbindLeafletEvents } from '../../utils'\r\nimport * as wfs from '../../../common/wfs-utils'\r\n\r\n// Override default Leaflet GeoJson utility to manage some specific use cases\r\nconst geometryToLayer = L.GeoJSON.geometryToLayer\r\nL.GeoJSON.geometryToLayer = function (geojson, options) {\r\n const geometry = geojson.geometry\r\n const properties = geojson.properties\r\n if (geometry && properties && properties.geodesic) {\r\n if (geometry.type === 'LineString') {\r\n return new L.Geodesic([L.GeoJSON.coordsToLatLngs(geometry.coordinates, 0)],\r\n Object.assign({ steps: 100 }, options.style(geojson)))\r\n } else if (geometry.type === 'MultiLineString') {\r\n const coords = geometry.coordinates.map((lineString) => L.GeoJSON.coordsToLatLngs(lineString, 0))\r\n return new L.Geodesic(coords, Object.assign({ steps: 100 }, options.style(geojson)))\r\n } else if (geometry.type === 'Point') {\r\n const layer = new L.Geodesic([], Object.assign({ fill: true, steps: 360 }, options.style(geojson)))\r\n layer.createCircle(L.GeoJSON.coordsToLatLng(geometry.coordinates), properties.radius)\r\n return layer\r\n }\r\n }\r\n if (geometry && properties && properties.gradient) {\r\n if (geometry.type === 'LineString') {\r\n return new GradientPath(geojson, options.style(geojson))\r\n }\r\n }\r\n if (geometry && properties && properties.mask) {\r\n if (geometry.type === 'Polygon' || geometry.type === 'MultiPolygon') {\r\n return new MaskLayer(geojson, options.style(geojson))\r\n }\r\n }\r\n return geometryToLayer(geojson, options)\r\n}\r\n\r\nexport default {\r\n methods: {\r\n processRealtimeGeoJsonLayerOptions (options) {\r\n const leafletOptions = options.leaflet || options\r\n // Alter type as required by the plugin\r\n leafletOptions.type = 'realtime'\r\n // We first need to create an underlying container or setup Id function\r\n const id = _.get(options, 'featureId', _.get(leafletOptions, 'id', '_id'))\r\n if (id) _.set(leafletOptions, 'getFeatureId', (feature) => _.get(feature, 'properties.' + id, _.get(feature, id)))\r\n const container = _.get(leafletOptions, 'container')\r\n // If container given and not already instanciated, do it\r\n if (typeof container === 'string') {\r\n leafletOptions.container = this.createLeafletLayer({ type: container })\r\n }\r\n // Custom update function to ensure dynamic styling works as expected\r\n if (!_.has(leafletOptions, 'updateFeature')) {\r\n leafletOptions.updateFeature = function (feature, oldLayer) {\r\n // A new feature is coming, create it\r\n if (!oldLayer) return\r\n // An existing one is found, simply update styling, properties, etc.\r\n leafletOptions.onEachFeature(feature, oldLayer)\r\n if (oldLayer.setStyle) {\r\n // Some vector layers can be used for points, eg circleMarker,\r\n // in this case we use marker styling instead of lines/polygons styling\r\n if (feature.geometry.type === 'Point') {\r\n // FIXME: updating style in place does not seem to work, so for now we recreate the whole marker\r\n // oldLayer.setStyle(leafletOptions.pointToLayer(feature))\r\n return\r\n } else {\r\n oldLayer.setStyle(leafletOptions.style(feature))\r\n }\r\n }\r\n const oldProperties = _.get(oldLayer, 'feature.properties')\r\n const properties = _.get(feature, 'properties')\r\n // Keep track of old properties\r\n if (oldProperties && properties) {\r\n _.forOwn(oldProperties, (value, key) => {\r\n if (!_.has(properties, key)) _.set(properties, key, value)\r\n })\r\n }\r\n if (oldLayer.setIcon) {\r\n // FIXME: updating icon in place requires to recreate it anyway, so for now we recreate the whole marker\r\n // oldLayer.setIcon(_.get(leafletOptions.pointToLayer(feature, oldLayer.getLatLng()), 'options.icon'))\r\n return\r\n }\r\n // And coordinates if not static\r\n const staticGeometry = _.get(leafletOptions, 'staticGeometry', false)\r\n if (staticGeometry) return oldLayer\r\n // The feature is changing its geometry type, recreate it\r\n const oldType = _.get(oldLayer, 'feature.geometry.type')\r\n const type = _.get(feature, 'geometry.type')\r\n if (type !== oldType) return\r\n const coordinates = feature.geometry.coordinates\r\n // FIXME: support others geometry types ?\r\n switch (type) {\r\n case 'Point':\r\n oldLayer.setLatLng(L.GeoJSON.coordsToLatLngs(coordinates))\r\n break\r\n case 'LineString':\r\n case 'MultiLineString':\r\n // Support Gradient Path\r\n if (typeof oldLayer.setData === 'function') oldLayer.setData(feature)\r\n else oldLayer.setLatLngs(L.GeoJSON.coordsToLatLngs(coordinates, type === 'LineString' ? 0 : 1))\r\n break\r\n case 'Polygon':\r\n case 'MultiPolygon':\r\n oldLayer.setLatLngs(L.GeoJSON.coordsToLatLngs(coordinates, type === 'Polygon' ? 1 : 2))\r\n break\r\n }\r\n return oldLayer\r\n }\r\n }\r\n // Check for feature service layers\r\n if (options.service) {\r\n // We perform manual update\r\n _.set(leafletOptions, 'start', false)\r\n // Tell realtime plugin how to update/load data\r\n if (leafletOptions.tiled) {\r\n leafletOptions.removeMissing = false\r\n // Fetching is managed by tiles but even for manual update leaflet realtime require a src\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {})\r\n // Generate fetch function for tiled feature layer\r\n leafletOptions.featureSource = (baseQuery) => this.getFeatures(_.merge({ baseQuery }, options))\r\n } else {\r\n leafletOptions.removeMissing = !options.probeService\r\n let initialized = !options.probeService // If no probe reference, nothing to be initialized\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {\r\n // If the probe location is given by another service use it on initialization\r\n if (!initialized) {\r\n try {\r\n // Use probes as reference\r\n successCallback(await this.getProbeFeatures(options))\r\n initialized = true\r\n } catch (error) {\r\n errorCallback(error)\r\n }\r\n }\r\n try {\r\n // Then update features\r\n successCallback(await this.getFeatures(options))\r\n } catch (error) {\r\n errorCallback(error)\r\n }\r\n })\r\n }\r\n } else if (options.wfs) {\r\n // Features are fetched from a WFS connection\r\n _.set(leafletOptions, 'start', false)\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {})\r\n\r\n if (leafletOptions.tiled) {\r\n leafletOptions.removeMissing = false\r\n // Generate fetch function for tiled feature layer\r\n leafletOptions.featureSource = (query) => {\r\n const searchParams = Object.assign({\r\n OUTPUTFORMAT: options.wfs.outputFormat, // request as geojson\r\n SRSNAME: 'EPSG:4326', // result in 4326\r\n BBOX: `${query.south},${query.west},${query.north},${query.east},urn:ogc:def:crs:EPSG::4326` // request bbox\r\n }, options.wfs.searchParams)\r\n return wfs.GetFeature(options.wfs.url, options.wfs.version, options.wfs.layer, searchParams, { xml2json: false })\r\n }\r\n } else {\r\n }\r\n } else if (_.has(leafletOptions, 'sourceTemplate')) {\r\n const sourceCompiler = _.template(_.get(leafletOptions, 'sourceTemplate'))\r\n let lastFetchedSource\r\n // Tell realtime plugin how to update/load data\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {\r\n try {\r\n const sourceToFetch = sourceCompiler({ time: Time.getCurrentTime() })\r\n if (!lastFetchedSource || (lastFetchedSource !== sourceToFetch)) {\r\n lastFetchedSource = sourceToFetch\r\n successCallback(await fetchGeoJson(sourceToFetch))\r\n }\r\n } catch (error) {\r\n errorCallback(error)\r\n }\r\n })\r\n // We perform manual update\r\n _.set(leafletOptions, 'start', false)\r\n } else if (!_.has(leafletOptions, 'source')) {\r\n _.set(leafletOptions, 'start', false)\r\n // Even for manual update leaflet realtime require a src\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {})\r\n }\r\n },\r\n async processGeoJsonLayerOptions (options) {\r\n const leafletOptions = options.leaflet || options\r\n const dataSource = _.get(leafletOptions, 'source')\r\n if (_.isNil(dataSource)) {\r\n // Empty valid GeoJson\r\n _.set(leafletOptions, 'source', { type: 'FeatureCollection', features: [] })\r\n } else if (typeof dataSource === 'string') { // URL ? If so load data\r\n let data\r\n // Check for feature service layers\r\n if (options.service) {\r\n data = await this.getFeatures(options)\r\n } else { // Otherwise standard HTTP\r\n data = await fetchGeoJson(dataSource)\r\n }\r\n _.set(leafletOptions, 'source', data)\r\n }\r\n },\r\n processClusterLayerOptions (options) {\r\n const leafletOptions = options.leaflet || options\r\n const clusterOptions = Object.assign({ type: 'markerClusterGroup' }, leafletOptions.cluster)\r\n // Transfer pane if any\r\n if (leafletOptions.pane) clusterOptions.clusterPane = leafletOptions.pane\r\n leafletOptions.container = this.createLeafletLayer(clusterOptions)\r\n },\r\n async createLeafletGeoJsonLayer (options) {\r\n const leafletOptions = options.leaflet || options\r\n // Check for valid type\r\n if (leafletOptions.type !== 'geoJson') return\r\n\r\n try {\r\n // min/max zoom are automatically managed on tiled layers by inheriting GridLayer\r\n // on non-tiled layers we need to use a pane to manage it\r\n const hasMinZoom = !!_.get(leafletOptions, 'minZoom')\r\n const hasMaxZoom = !!_.get(leafletOptions, 'maxZoom')\r\n if (!leafletOptions.tiled && (hasMinZoom || hasMaxZoom)) {\r\n const pane = { name: options.name }\r\n if (hasMinZoom) pane.minZoom = _.get(leafletOptions, 'minZoom')\r\n if (hasMaxZoom) pane.maxZoom = _.get(leafletOptions, 'maxZoom')\r\n leafletOptions.panes = [pane]\r\n leafletOptions.pane = options.name\r\n }\r\n // If not explicitely disable use defaults for clustering\r\n if (!_.has(leafletOptions, 'cluster') && _.get(this, 'activityOptions.engine.cluster')) {\r\n // Merge existing config or create a new one on layer\r\n if (leafletOptions.cluster) Object.assign(leafletOptions.cluster, _.get(this, 'activityOptions.engine.cluster'))\r\n else leafletOptions.cluster = Object.assign({}, _.get(this, 'activityOptions.engine.cluster'))\r\n }\r\n // Specific case of clustered layer where we first need to create an underlying group\r\n if (leafletOptions.cluster) {\r\n this.processClusterLayerOptions(options)\r\n }\r\n // Specific case of realtime layer\r\n if (leafletOptions.realtime) {\r\n this.processRealtimeGeoJsonLayerOptions(options)\r\n } else {\r\n await this.processGeoJsonLayerOptions(options)\r\n }\r\n // Optimize templating by creating compilers up-front\r\n const layerStyleTemplate = _.get(leafletOptions, 'template')\r\n if (layerStyleTemplate) {\r\n // We allow to template style properties according to feature, because it can be slow you have to specify a subset of properties\r\n leafletOptions.template = layerStyleTemplate.map(property => ({\r\n property, compiler: _.template(_.get(leafletOptions, property))\r\n }))\r\n }\r\n const popupTemplate = _.get(leafletOptions, 'popup.template')\r\n if (popupTemplate) {\r\n leafletOptions.popup.compiler = _.template(popupTemplate)\r\n }\r\n const tooltipTemplate = _.get(leafletOptions, 'tooltip.template')\r\n if (tooltipTemplate) {\r\n leafletOptions.tooltip.compiler = _.template(tooltipTemplate)\r\n }\r\n // Merge generic GeoJson options and layer options\r\n const geoJsonOptions = this.getGeoJsonOptions(options)\r\n Object.keys(geoJsonOptions).forEach(key => {\r\n // If layer provided do not override\r\n if (!_.has(leafletOptions, key)) _.set(leafletOptions, key, _.get(geoJsonOptions, key))\r\n })\r\n leafletOptions.layerStyle = this.convertFromSimpleStyleSpec(leafletOptions)\r\n let layer = this.createLeafletLayer(options)\r\n\r\n // Specific case of realtime layer where the underlying container also need to be added to map\r\n if (leafletOptions.realtime) {\r\n // Build associated tile layer and bind required events\r\n if (leafletOptions.tiled) {\r\n // In our options minZoom/maxZoom can be set to false\r\n // but Leaflet only expect it if fixed to a given number\r\n const hasMinZoom = !!_.get(leafletOptions, 'minZoom')\r\n const hasMaxZoom = !!_.get(leafletOptions, 'maxZoom')\r\n const zoomLevelsToOmit = []\r\n if (!hasMinZoom) zoomLevelsToOmit.push('minZoom')\r\n if (!hasMaxZoom) zoomLevelsToOmit.push('maxZoom')\r\n const tiledLayer = new TiledFeatureLayer(_.omit(leafletOptions, zoomLevelsToOmit))\r\n tiledLayer.setup(this, options)\r\n layer.tiledLayer = tiledLayer\r\n layer.on('add', () => tiledLayer.addTo(this.map))\r\n layer.on('remove', () => tiledLayer.removeFrom(this.map))\r\n }\r\n // Bind event\r\n layer.on('update', (data) => this.$emit('layer-updated', Object.assign({ layer: options, leafletLayer: layer }, data)))\r\n if (leafletOptions.container) layer.once('add', () => leafletOptions.container.addTo(this.map))\r\n // Add FeatureGroup interface so that layer edition works as well\r\n layer.toGeoJSON = () => ({ type: 'FeatureCollection', features: _.values(layer._features) })\r\n layer.clearLayers = () => layer._onNewData(true, { type: 'FeatureCollection', features: [] })\r\n layer.addLayer = (geoJsonLayer) => layer._onNewData(true, geoJsonLayer.toGeoJSON())\r\n // We launch a first update to initialize data\r\n layer.update()\r\n } else {\r\n // Specific case of clustered layer where the group is added instead of the geojson layer\r\n if (leafletOptions.cluster && leafletOptions.container) {\r\n leafletOptions.container.addLayer(layer)\r\n layer = leafletOptions.container\r\n }\r\n }\r\n // Specific case of time dimension layer where we embed the underlying geojson layer\r\n if (leafletOptions.timeDimension) {\r\n layer = this.createLeafletLayer(Object.assign({ type: 'timeDimension.layer.geoJson', source: layer }, leafletOptions.timeDimension))\r\n }\r\n return layer\r\n } catch (error) {\r\n logger.error(error)\r\n return null\r\n }\r\n },\r\n getGeoJsonOptions (options = {}) {\r\n const geojsonOptions = {\r\n onEachFeature: (feature, layer) => {\r\n // Need to restone event listeners as context has changed\r\n unbindLeafletEvents(layer, LeafletEvents.Feature)\r\n // Check for custom onEachFeature function\r\n if (typeof this.onLeafletFeature === 'function') this.onLeafletFeature(feature, layer, options)\r\n // Then for tooltip/popup\r\n // First remove previous popup if any\r\n if (layer.getPopup()) layer.unbindPopup()\r\n const popup = this.generateStyle('popup', feature, layer, options)\r\n if (popup) {\r\n // Because we build a new popup we need to restore previous state\r\n const wasOpen = (layer.getPopup() && layer.isPopupOpen())\r\n layer.bindPopup(popup)\r\n bindLeafletEvents(layer.getPopup(), LeafletEvents.Popup, this, options)\r\n if (wasOpen) layer.openPopup()\r\n }\r\n // First remove previous tooltip if any\r\n if (layer.getTooltip()) layer.unbindTooltip()\r\n const tooltip = this.generateStyle('tooltip', feature, layer, options)\r\n if (tooltip) {\r\n // Because we build a new tooltip we need to restore previous state\r\n const wasOpen = (layer.getTooltip() && layer.isTooltipOpen())\r\n layer.bindTooltip(tooltip)\r\n bindLeafletEvents(layer.getTooltip(), LeafletEvents.Tooltip, this, options)\r\n if (wasOpen) layer.openTooltip()\r\n }\r\n bindLeafletEvents(layer, LeafletEvents.Feature, this, options)\r\n },\r\n style: (feature) => {\r\n return this.generateStyle('featureStyle', feature, options)\r\n },\r\n pointToLayer: (feature, latlng) => {\r\n return this.generateStyle('markerStyle', feature, latlng, options)\r\n }\r\n }\r\n\r\n return geojsonOptions\r\n },\r\n updateLayer (name, geoJson, remove) {\r\n // Retrieve the layer\r\n let layer = this.getLeafletLayerByName(name)\r\n if (!layer) return // Cannot update invisible layer\r\n // Check if clustering on top of a realtime layer, in this case we have a top-level container\r\n let container\r\n if (typeof layer.getLayers === 'function') {\r\n container = layer\r\n layer = container.getLayers().find(layer => layer._container === container)\r\n }\r\n /* By default leaflet-realtime only performs add with manual update\r\n (see https://github.com/perliedman/leaflet-realtime/issues/136)\r\n but we'd like to perform similarly to automated updates\r\n */\r\n if (remove && (typeof layer.remove === 'function')) {\r\n let features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n // Filter features to ensure some have not been already removed\r\n // FIXME: indeed it seems to causes a bug with clustering, see https://github.com/kalisio/kdk/issues/140\r\n features = features.filter(feature => layer.getLayer(layer.options.getFeatureId(feature)))\r\n layer.remove(features)\r\n } else if (typeof layer._onNewData === 'function') {\r\n layer._onNewData(layer.options.removeMissing, geoJson || this.toGeoJson(name))\r\n }\r\n },\r\n onCurrentTimeChangedGeoJsonLayers (time) {\r\n const geoJsonlayers = _.values(this.layers).filter(sift({\r\n 'leaflet.type': 'geoJson',\r\n 'leaflet.realtime': true,\r\n $or: [ // Supported by template URL or time-based features\r\n { 'leaflet.sourceTemplate': { $exists: true } },\r\n { service: { $exists: true } }\r\n ],\r\n isVisible: true\r\n }))\r\n geoJsonlayers.forEach(async geoJsonlayer => {\r\n // Retrieve the layer\r\n const layer = this.getLeafletLayerByName(geoJsonlayer.name)\r\n // Update only the first time or when required according to data update interval\r\n if (!layer.lastUpdateTime || !this.shouldSkipFeaturesUpdate(layer.lastUpdateTime, geoJsonlayer)) {\r\n layer.lastUpdateTime = Time.getCurrentTime().clone()\r\n if (layer.tiledLayer) {\r\n layer.tiledLayer.redraw()\r\n } else {\r\n layer.update()\r\n }\r\n }\r\n })\r\n },\r\n onCurrentLevelChangedGeoJsonLayers (level) {\r\n // Retrieve the layer associated to current level sélection\r\n let layer = this.selectableLevelsLayer\r\n if (layer) {\r\n const type = _.get(layer, `${this.engine}.type`)\r\n // Check if of right type\r\n if (type === 'geoJson') {\r\n // Retrieve the engine layer and update\r\n layer = this.getLeafletLayerByName(layer.name)\r\n if (layer.tiledLayer) {\r\n layer.tiledLayer.redraw()\r\n } else {\r\n layer.update()\r\n }\r\n }\r\n }\r\n }\r\n },\r\n created () {\r\n this.registerLeafletConstructor(this.createLeafletGeoJsonLayer)\r\n this.$events.$on('time-current-time-changed', this.onCurrentTimeChangedGeoJsonLayers)\r\n this.$on('selected-level-changed', this.onCurrentLevelChangedGeoJsonLayers)\r\n },\r\n beforeDestroy () {\r\n this.$events.$off('time-current-time-changed', this.onCurrentTimeChangedHeatmapLayers)\r\n this.$off('selected-level-changed', this.onCurrentLevelChangedGeoJsonLayers)\r\n }\r\n}\r\n"]}
@@ -101,7 +101,7 @@ exports.default = {
101
101
  const heatmaps = _lodash2.default.values(this.layers).filter((0, _sift2.default)({
102
102
  'leaflet.type': 'heatmap',
103
103
  $or: [// Supported by template URL or time-based features
104
- { 'leaflet.urlTemplate': { $exists: true } }, { service: { $exists: true }, variables: { $exists: true } }],
104
+ { 'leaflet.urlTemplate': { $exists: true } }, { service: { $exists: true } }],
105
105
  isVisible: true
106
106
  }));
107
107
  heatmaps.forEach((() => {
@@ -113,6 +113,11 @@ exports.default = {
113
113
  // Update only the first time or when required according to data update interval
114
114
  if (!layer.lastUpdateTime || !_this2.shouldSkipFeaturesUpdate(layer.lastUpdateTime, options)) {
115
115
  layer.lastUpdateTime = _time.Time.getCurrentTime().clone();
116
+ /* FIXME: we could filter by bbox here to optimize but then if we zoom in/out we should also update the data
117
+ const [[south, west], [north, east]] = this.getBounds()
118
+ const geoJson = await this.getFeatures(_.merge({
119
+ baseQuery: { south, north, west, east }
120
+ }, options))*/
116
121
  const geoJson = yield _this2.getFeatures(options);
117
122
  _this2.updateLeafletHeatmap(layer, geoJson);
118
123
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.heatmap-layers.js"],"names":["methods","createLeafletHeatmapLayer","options","leafletOptions","leaflet","type","layer","createLeafletLayer","source","_","get","sourceTemplate","sourceCompiler","template","valueTemplate","valueCompiler","service","lastUpdateTime","Time","getCurrentTime","clone","geoJson","getFeatures","updateLeafletHeatmap","isNil","sourceToFetch","time","lastFetchedSource","valueField","min","max","values","features","map","feature","toNumber","properties","setData","data","index","location","lng","lat","updateHeatmap","name","getLeafletLayerByName","onCurrentTimeChangedHeatmapLayers","heatmaps","layers","filter","$or","$exists","variables","isVisible","forEach","shouldSkipFeaturesUpdate","created","registerLeafletConstructor","$events","$on","beforeDestroy","$off","L","heatmap","HeatmapOverlay"],"mappings":"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","file":"mixin.heatmap-layers.js","sourcesContent":["import _ from 'lodash'\r\nimport L from 'leaflet'\r\nimport sift from 'sift'\r\nimport centroid from '@turf/centroid'\r\nimport HeatmapOverlay from 'leaflet-heatmap'\r\nimport { Time } from '../../../../core/client/time'\r\nimport { fetchGeoJson } from '../../utils'\r\n\r\nexport default {\r\n methods: {\r\n async createLeafletHeatmapLayer (options) {\r\n const leafletOptions = options.leaflet || options\r\n // Check for valid types\r\n if (leafletOptions.type !== 'heatmap') return\r\n const layer = this.createLeafletLayer(options)\r\n // Optimize templating by creating compilers up-front\r\n const source = _.get(leafletOptions, 'url')\r\n const sourceTemplate = _.get(leafletOptions, 'urlTemplate')\r\n if (sourceTemplate) layer.sourceCompiler = _.template(sourceTemplate)\r\n const valueTemplate = _.get(leafletOptions, 'valueTemplate')\r\n if (valueTemplate) layer.valueCompiler = _.template(valueTemplate)\r\n\r\n if (options.service) { // Check for feature service layers\r\n layer.lastUpdateTime = Time.getCurrentTime().clone()\r\n const geoJson = await this.getFeatures(options)\r\n this.updateLeafletHeatmap(layer, geoJson)\r\n } else if (!_.isNil(source)) {\r\n // Assume source is an URL returning GeoJson\r\n const geoJson = await fetchGeoJson(source)\r\n this.updateLeafletHeatmap(layer, geoJson)\r\n } else if (!_.isNil(sourceTemplate)) {\r\n // Source is an URL returning GeoJson possibly templated by time\r\n const sourceToFetch = layer.sourceCompiler({ time: Time.getCurrentTime() })\r\n layer.lastFetchedSource = sourceToFetch\r\n const geoJson = await fetchGeoJson(sourceToFetch)\r\n this.updateLeafletHeatmap(layer, geoJson)\r\n }\r\n\r\n return layer\r\n },\r\n updateLeafletHeatmap (layer, geoJson) {\r\n const valueField = _.get(layer, 'cfg.valueField', 'value')\r\n const min = _.get(layer, 'cfg.min')\r\n const max = _.get(layer, 'cfg.max')\r\n const values = (layer.valueCompiler\r\n ? geoJson.features.map(feature => _.toNumber(layer.valueCompiler({ properties: feature.properties, feature })))\r\n : geoJson.features.map(feature => _.toNumber(_.get(feature, `properties.${valueField}`, 1))))\r\n // By default our intensity is based on the number of points only\r\n // otherwise when provided we use target value\r\n layer.setData({\r\n min: (min || (valueField ? _.min(values) : 0)),\r\n max: (max || (valueField ? _.max(values) : 1)),\r\n data: geoJson.features.map((feature, index) => {\r\n const location = centroid(feature)\r\n return {\r\n lng: _.get(location, 'geometry.coordinates[0]'),\r\n lat: _.get(location, 'geometry.coordinates[1]'),\r\n [valueField]: values[index]\r\n }\r\n })\r\n })\r\n },\r\n updateHeatmap (name, geoJson) {\r\n // Retrieve the layer\r\n const layer = this.getLeafletLayerByName(name)\r\n if (!layer) return // Cannot update invisible layer\r\n this.updateLeafletHeatmap(layer, geoJson)\r\n },\r\n onCurrentTimeChangedHeatmapLayers (time) {\r\n const heatmaps = _.values(this.layers).filter(sift({\r\n 'leaflet.type': 'heatmap',\r\n $or: [ // Supported by template URL or time-based features\r\n { 'leaflet.urlTemplate': { $exists: true } },\r\n { service: { $exists: true }, variables: { $exists: true } }\r\n ],\r\n isVisible: true\r\n }))\r\n heatmaps.forEach(async options => {\r\n // Retrieve the layer\r\n const layer = this.getLeafletLayerByName(options.name)\r\n if (options.service) { // Check for feature service layers\r\n // Update only the first time or when required according to data update interval\r\n if (!layer.lastUpdateTime || !this.shouldSkipFeaturesUpdate(layer.lastUpdateTime, options)) {\r\n layer.lastUpdateTime = Time.getCurrentTime().clone()\r\n const geoJson = await this.getFeatures(options)\r\n this.updateLeafletHeatmap(layer, geoJson)\r\n }\r\n } else if (layer.sourceCompiler) {\r\n const sourceToFetch = layer.sourceCompiler({ time: Time.getCurrentTime() })\r\n if (!layer.lastFetchedSource || (layer.lastFetchedSource !== sourceToFetch)) {\r\n layer.lastFetchedSource = sourceToFetch\r\n const geoJson = await fetchGeoJson(sourceToFetch)\r\n this.updateLeafletHeatmap(layer, geoJson)\r\n }\r\n }\r\n })\r\n }\r\n },\r\n created () {\r\n this.registerLeafletConstructor(this.createLeafletHeatmapLayer)\r\n this.$events.$on('time-current-time-changed', this.onCurrentTimeChangedHeatmapLayers)\r\n },\r\n beforeDestroy () {\r\n this.$events.$off('time-current-time-changed', this.onCurrentTimeChangedHeatmapLayers)\r\n }\r\n}\r\n\r\n// Not automatically declared by leaflet plugin\r\nL.heatmap = function (options) {\r\n return new HeatmapOverlay(options)\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.heatmap-layers.js"],"names":["methods","createLeafletHeatmapLayer","options","leafletOptions","leaflet","type","layer","createLeafletLayer","source","_","get","sourceTemplate","sourceCompiler","template","valueTemplate","valueCompiler","service","lastUpdateTime","Time","getCurrentTime","clone","geoJson","getFeatures","updateLeafletHeatmap","isNil","sourceToFetch","time","lastFetchedSource","valueField","min","max","values","features","map","feature","toNumber","properties","setData","data","index","location","lng","lat","updateHeatmap","name","getLeafletLayerByName","onCurrentTimeChangedHeatmapLayers","heatmaps","layers","filter","$or","$exists","isVisible","forEach","shouldSkipFeaturesUpdate","created","registerLeafletConstructor","$events","$on","beforeDestroy","$off","L","heatmap","HeatmapOverlay"],"mappings":"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","file":"mixin.heatmap-layers.js","sourcesContent":["import _ from 'lodash'\r\nimport L from 'leaflet'\r\nimport sift from 'sift'\r\nimport centroid from '@turf/centroid'\r\nimport HeatmapOverlay from 'leaflet-heatmap'\r\nimport { Time } from '../../../../core/client/time'\r\nimport { fetchGeoJson } from '../../utils'\r\n\r\nexport default {\r\n methods: {\r\n async createLeafletHeatmapLayer (options) {\r\n const leafletOptions = options.leaflet || options\r\n // Check for valid types\r\n if (leafletOptions.type !== 'heatmap') return\r\n const layer = this.createLeafletLayer(options)\r\n // Optimize templating by creating compilers up-front\r\n const source = _.get(leafletOptions, 'url')\r\n const sourceTemplate = _.get(leafletOptions, 'urlTemplate')\r\n if (sourceTemplate) layer.sourceCompiler = _.template(sourceTemplate)\r\n const valueTemplate = _.get(leafletOptions, 'valueTemplate')\r\n if (valueTemplate) layer.valueCompiler = _.template(valueTemplate)\r\n\r\n if (options.service) { // Check for feature service layers\r\n layer.lastUpdateTime = Time.getCurrentTime().clone()\r\n const geoJson = await this.getFeatures(options)\r\n this.updateLeafletHeatmap(layer, geoJson)\r\n } else if (!_.isNil(source)) {\r\n // Assume source is an URL returning GeoJson\r\n const geoJson = await fetchGeoJson(source)\r\n this.updateLeafletHeatmap(layer, geoJson)\r\n } else if (!_.isNil(sourceTemplate)) {\r\n // Source is an URL returning GeoJson possibly templated by time\r\n const sourceToFetch = layer.sourceCompiler({ time: Time.getCurrentTime() })\r\n layer.lastFetchedSource = sourceToFetch\r\n const geoJson = await fetchGeoJson(sourceToFetch)\r\n this.updateLeafletHeatmap(layer, geoJson)\r\n }\r\n\r\n return layer\r\n },\r\n updateLeafletHeatmap (layer, geoJson) {\r\n const valueField = _.get(layer, 'cfg.valueField', 'value')\r\n const min = _.get(layer, 'cfg.min')\r\n const max = _.get(layer, 'cfg.max')\r\n const values = (layer.valueCompiler\r\n ? geoJson.features.map(feature => _.toNumber(layer.valueCompiler({ properties: feature.properties, feature })))\r\n : geoJson.features.map(feature => _.toNumber(_.get(feature, `properties.${valueField}`, 1))))\r\n // By default our intensity is based on the number of points only\r\n // otherwise when provided we use target value\r\n layer.setData({\r\n min: (min || (valueField ? _.min(values) : 0)),\r\n max: (max || (valueField ? _.max(values) : 1)),\r\n data: geoJson.features.map((feature, index) => {\r\n const location = centroid(feature)\r\n return {\r\n lng: _.get(location, 'geometry.coordinates[0]'),\r\n lat: _.get(location, 'geometry.coordinates[1]'),\r\n [valueField]: values[index]\r\n }\r\n })\r\n })\r\n },\r\n updateHeatmap (name, geoJson) {\r\n // Retrieve the layer\r\n const layer = this.getLeafletLayerByName(name)\r\n if (!layer) return // Cannot update invisible layer\r\n this.updateLeafletHeatmap(layer, geoJson)\r\n },\r\n onCurrentTimeChangedHeatmapLayers (time) {\r\n const heatmaps = _.values(this.layers).filter(sift({\r\n 'leaflet.type': 'heatmap',\r\n $or: [ // Supported by template URL or time-based features\r\n { 'leaflet.urlTemplate': { $exists: true } },\r\n { service: { $exists: true } }\r\n ],\r\n isVisible: true\r\n }))\r\n heatmaps.forEach(async options => {\r\n // Retrieve the layer\r\n const layer = this.getLeafletLayerByName(options.name)\r\n if (options.service) { // Check for feature service layers\r\n // Update only the first time or when required according to data update interval\r\n if (!layer.lastUpdateTime || !this.shouldSkipFeaturesUpdate(layer.lastUpdateTime, options)) {\r\n layer.lastUpdateTime = Time.getCurrentTime().clone()\r\n /* FIXME: we could filter by bbox here to optimize but then if we zoom in/out we should also update the data\r\n const [[south, west], [north, east]] = this.getBounds()\r\n const geoJson = await this.getFeatures(_.merge({\r\n baseQuery: { south, north, west, east }\r\n }, options))*/\r\n const geoJson = await this.getFeatures(options)\r\n this.updateLeafletHeatmap(layer, geoJson)\r\n }\r\n } else if (layer.sourceCompiler) {\r\n const sourceToFetch = layer.sourceCompiler({ time: Time.getCurrentTime() })\r\n if (!layer.lastFetchedSource || (layer.lastFetchedSource !== sourceToFetch)) {\r\n layer.lastFetchedSource = sourceToFetch\r\n const geoJson = await fetchGeoJson(sourceToFetch)\r\n this.updateLeafletHeatmap(layer, geoJson)\r\n }\r\n }\r\n })\r\n }\r\n },\r\n created () {\r\n this.registerLeafletConstructor(this.createLeafletHeatmapLayer)\r\n this.$events.$on('time-current-time-changed', this.onCurrentTimeChangedHeatmapLayers)\r\n },\r\n beforeDestroy () {\r\n this.$events.$off('time-current-time-changed', this.onCurrentTimeChangedHeatmapLayers)\r\n }\r\n}\r\n\r\n// Not automatically declared by leaflet plugin\r\nL.heatmap = function (options) {\r\n return new HeatmapOverlay(options)\r\n}\r\n"]}
@@ -12,6 +12,8 @@ var _lodash = require('lodash');
12
12
 
13
13
  var _lodash2 = _interopRequireDefault(_lodash);
14
14
 
15
+ var _client = require('../../../../core/client');
16
+
15
17
  var _utils = require('../../utils');
16
18
 
17
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -27,14 +29,14 @@ exports.default = {
27
29
  if (_lodash2.default.has(leafletOptions, 'popup') && !_lodash2.default.get(leafletOptions, 'popup')) return;
28
30
  if (_lodash2.default.has(properties, 'popup') && !_lodash2.default.get(properties, 'popup')) return;
29
31
  // Otherwise merge options
30
- const popupStyle = Object.assign({}, this.activityOptions.engine.popup, leafletOptions.popup, properties.popup);
32
+ const popupStyle = Object.assign({}, _lodash2.default.get(this, 'activityOptions.engine.popup'), leafletOptions.popup, properties.popup);
31
33
  // Default content
32
34
  let html = popupStyle.html;
33
35
  // Custom list given ?
34
36
  if (!html) {
35
37
  if (popupStyle.template) {
36
38
  const compiler = popupStyle.compiler;
37
- html = compiler({ properties, feature, $t: this.$t });
39
+ html = compiler({ properties, feature, $t: this.$t, Units: _client.Units, Time: _client.Time });
38
40
  } else if (popupStyle.pick) {
39
41
  properties = _lodash2.default.pick(properties, popupStyle.pick);
40
42
  } else if (popupStyle.omit) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.popup.js"],"names":["methods","getDefaultPopup","feature","layer","options","properties","popup","leafletOptions","leaflet","_","has","get","popupStyle","Object","assign","activityOptions","engine","html","template","compiler","$t","pick","omit","L","maxHeight","maxWidth","autoPan","setContent","created","registerStyle"],"mappings":";;;;;;AAAA;;;;AACA;;;;AACA;;;;kBAEe;AACbA,WAAS;AACPC,oBAAiBC,OAAjB,EAA0BC,KAA1B,EAAiCC,OAAjC,EAA0C;AACxC,UAAIC,aAAaH,QAAQG,UAAzB;AACA,UAAIC,KAAJ;AACA,UAAID,UAAJ,EAAgB;AACd,cAAME,iBAAiBH,QAAQI,OAAR,IAAmBJ,OAA1C;AACA;AACA,YAAIK,iBAAEC,GAAF,CAAMH,cAAN,EAAsB,OAAtB,KAAkC,CAACE,iBAAEE,GAAF,CAAMJ,cAAN,EAAsB,OAAtB,CAAvC,EAAuE;AACvE,YAAIE,iBAAEC,GAAF,CAAML,UAAN,EAAkB,OAAlB,KAA8B,CAACI,iBAAEE,GAAF,CAAMN,UAAN,EAAkB,OAAlB,CAAnC,EAA+D;AAC/D;AACA,cAAMO,aAAaC,OAAOC,MAAP,CAAc,EAAd,EAAkB,KAAKC,eAAL,CAAqBC,MAArB,CAA4BV,KAA9C,EACjBC,eAAeD,KADE,EACKD,WAAWC,KADhB,CAAnB;AAEA;AACA,YAAIW,OAAOL,WAAWK,IAAtB;AACA;AACA,YAAI,CAACA,IAAL,EAAW;AACT,cAAIL,WAAWM,QAAf,EAAyB;AACvB,kBAAMC,WAAWP,WAAWO,QAA5B;AACAF,mBAAOE,SAAS,EAAEd,UAAF,EAAcH,OAAd,EAAuBkB,IAAI,KAAKA,EAAhC,EAAT,CAAP;AACD,WAHD,MAGO,IAAIR,WAAWS,IAAf,EAAqB;AAC1BhB,yBAAaI,iBAAEY,IAAF,CAAOhB,UAAP,EAAmBO,WAAWS,IAA9B,CAAb;AACD,WAFM,MAEA,IAAIT,WAAWU,IAAf,EAAqB;AAC1BjB,yBAAaI,iBAAEa,IAAF,CAAOjB,UAAP,EAAmBO,WAAWU,IAA9B,CAAb;AACD;AACF;AACD;AACA,YAAI,CAACL,IAAL,EAAWA,OAAO,yBAAaZ,UAAb,CAAP;AACX,YAAI,CAACY,IAAL,EAAW,OAAO,IAAP,CAvBG,CAuBS;AACvB;AACA,YAAIL,WAAWR,OAAf,EAAwB;AACtBE,kBAAQiB,kBAAEjB,KAAF,CAAQM,WAAWR,OAAnB,EAA4BD,KAA5B,CAAR;AACD,SAFD,MAEO;AACLG,kBAAQiB,kBAAEjB,KAAF,CAAQ;AACdkB,uBAAW,GADG;AAEdC,sBAAU,GAFI;AAGdC,qBAAS;AAHK,WAAR,EAILvB,KAJK,CAAR;AAKD;AACDG,cAAMqB,UAAN,CAAiBV,IAAjB;AACD;AACD,aAAOX,KAAP;AACD;AAzCM,GADI;AA4CbsB,YAAW;AACT,SAAKC,aAAL,CAAmB,OAAnB,EAA4B,KAAK5B,eAAjC;AACD;AA9CY,C","file":"mixin.popup.js","sourcesContent":["import L from 'leaflet'\r\nimport _ from 'lodash'\r\nimport { getHtmlTable } from '../../utils'\r\n\r\nexport default {\r\n methods: {\r\n getDefaultPopup (feature, layer, options) {\r\n let properties = feature.properties\r\n let popup\r\n if (properties) {\r\n const leafletOptions = options.leaflet || options\r\n // Check if explicitely disabled first\r\n if (_.has(leafletOptions, 'popup') && !_.get(leafletOptions, 'popup')) return\r\n if (_.has(properties, 'popup') && !_.get(properties, 'popup')) return\r\n // Otherwise merge options\r\n const popupStyle = Object.assign({}, this.activityOptions.engine.popup,\r\n leafletOptions.popup, properties.popup)\r\n // Default content\r\n let html = popupStyle.html\r\n // Custom list given ?\r\n if (!html) {\r\n if (popupStyle.template) {\r\n const compiler = popupStyle.compiler\r\n html = compiler({ properties, feature, $t: this.$t })\r\n } else if (popupStyle.pick) {\r\n properties = _.pick(properties, popupStyle.pick)\r\n } else if (popupStyle.omit) {\r\n properties = _.omit(properties, popupStyle.omit)\r\n }\r\n }\r\n // Default HTML table if no template\r\n if (!html) html = getHtmlTable(properties)\r\n if (!html) return null // Nothing to be displayed\r\n // Configured or default style\r\n if (popupStyle.options) {\r\n popup = L.popup(popupStyle.options, layer)\r\n } else {\r\n popup = L.popup({\r\n maxHeight: 400,\r\n maxWidth: 400,\r\n autoPan: false\r\n }, layer)\r\n }\r\n popup.setContent(html)\r\n }\r\n return popup\r\n }\r\n },\r\n created () {\r\n this.registerStyle('popup', this.getDefaultPopup)\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.popup.js"],"names":["methods","getDefaultPopup","feature","layer","options","properties","popup","leafletOptions","leaflet","_","has","get","popupStyle","Object","assign","html","template","compiler","$t","Units","Time","pick","omit","L","maxHeight","maxWidth","autoPan","setContent","created","registerStyle"],"mappings":";;;;;;AAAA;;;;AACA;;;;AACA;;AACA;;;;kBAEe;AACbA,WAAS;AACPC,oBAAiBC,OAAjB,EAA0BC,KAA1B,EAAiCC,OAAjC,EAA0C;AACxC,UAAIC,aAAaH,QAAQG,UAAzB;AACA,UAAIC,KAAJ;AACA,UAAID,UAAJ,EAAgB;AACd,cAAME,iBAAiBH,QAAQI,OAAR,IAAmBJ,OAA1C;AACA;AACA,YAAIK,iBAAEC,GAAF,CAAMH,cAAN,EAAsB,OAAtB,KAAkC,CAACE,iBAAEE,GAAF,CAAMJ,cAAN,EAAsB,OAAtB,CAAvC,EAAuE;AACvE,YAAIE,iBAAEC,GAAF,CAAML,UAAN,EAAkB,OAAlB,KAA8B,CAACI,iBAAEE,GAAF,CAAMN,UAAN,EAAkB,OAAlB,CAAnC,EAA+D;AAC/D;AACA,cAAMO,aAAaC,OAAOC,MAAP,CAAc,EAAd,EAAkBL,iBAAEE,GAAF,CAAM,IAAN,EAAY,8BAAZ,CAAlB,EACjBJ,eAAeD,KADE,EACKD,WAAWC,KADhB,CAAnB;AAEA;AACA,YAAIS,OAAOH,WAAWG,IAAtB;AACA;AACA,YAAI,CAACA,IAAL,EAAW;AACT,cAAIH,WAAWI,QAAf,EAAyB;AACvB,kBAAMC,WAAWL,WAAWK,QAA5B;AACAF,mBAAOE,SAAS,EAAEZ,UAAF,EAAcH,OAAd,EAAuBgB,IAAI,KAAKA,EAAhC,EAAoCC,oBAApC,EAA2CC,kBAA3C,EAAT,CAAP;AACD,WAHD,MAGO,IAAIR,WAAWS,IAAf,EAAqB;AAC1BhB,yBAAaI,iBAAEY,IAAF,CAAOhB,UAAP,EAAmBO,WAAWS,IAA9B,CAAb;AACD,WAFM,MAEA,IAAIT,WAAWU,IAAf,EAAqB;AAC1BjB,yBAAaI,iBAAEa,IAAF,CAAOjB,UAAP,EAAmBO,WAAWU,IAA9B,CAAb;AACD;AACF;AACD;AACA,YAAI,CAACP,IAAL,EAAWA,OAAO,yBAAaV,UAAb,CAAP;AACX,YAAI,CAACU,IAAL,EAAW,OAAO,IAAP,CAvBG,CAuBS;AACvB;AACA,YAAIH,WAAWR,OAAf,EAAwB;AACtBE,kBAAQiB,kBAAEjB,KAAF,CAAQM,WAAWR,OAAnB,EAA4BD,KAA5B,CAAR;AACD,SAFD,MAEO;AACLG,kBAAQiB,kBAAEjB,KAAF,CAAQ;AACdkB,uBAAW,GADG;AAEdC,sBAAU,GAFI;AAGdC,qBAAS;AAHK,WAAR,EAILvB,KAJK,CAAR;AAKD;AACDG,cAAMqB,UAAN,CAAiBZ,IAAjB;AACD;AACD,aAAOT,KAAP;AACD;AAzCM,GADI;AA4CbsB,YAAW;AACT,SAAKC,aAAL,CAAmB,OAAnB,EAA4B,KAAK5B,eAAjC;AACD;AA9CY,C","file":"mixin.popup.js","sourcesContent":["import L from 'leaflet'\r\nimport _ from 'lodash'\r\nimport { Time, Units } from '../../../../core/client'\r\nimport { getHtmlTable } from '../../utils'\r\n\r\nexport default {\r\n methods: {\r\n getDefaultPopup (feature, layer, options) {\r\n let properties = feature.properties\r\n let popup\r\n if (properties) {\r\n const leafletOptions = options.leaflet || options\r\n // Check if explicitely disabled first\r\n if (_.has(leafletOptions, 'popup') && !_.get(leafletOptions, 'popup')) return\r\n if (_.has(properties, 'popup') && !_.get(properties, 'popup')) return\r\n // Otherwise merge options\r\n const popupStyle = Object.assign({}, _.get(this, 'activityOptions.engine.popup'),\r\n leafletOptions.popup, properties.popup)\r\n // Default content\r\n let html = popupStyle.html\r\n // Custom list given ?\r\n if (!html) {\r\n if (popupStyle.template) {\r\n const compiler = popupStyle.compiler\r\n html = compiler({ properties, feature, $t: this.$t, Units, Time })\r\n } else if (popupStyle.pick) {\r\n properties = _.pick(properties, popupStyle.pick)\r\n } else if (popupStyle.omit) {\r\n properties = _.omit(properties, popupStyle.omit)\r\n }\r\n }\r\n // Default HTML table if no template\r\n if (!html) html = getHtmlTable(properties)\r\n if (!html) return null // Nothing to be displayed\r\n // Configured or default style\r\n if (popupStyle.options) {\r\n popup = L.popup(popupStyle.options, layer)\r\n } else {\r\n popup = L.popup({\r\n maxHeight: 400,\r\n maxWidth: 400,\r\n autoPan: false\r\n }, layer)\r\n }\r\n popup.setContent(html)\r\n }\r\n return popup\r\n }\r\n },\r\n created () {\r\n this.registerStyle('popup', this.getDefaultPopup)\r\n }\r\n}\r\n"]}
@@ -74,14 +74,14 @@ exports.default = {
74
74
  _lodash2.default.set(convertedStyle, 'type', 'marker');
75
75
  }
76
76
  // Manage panes to make z-index work for all types of layers,
77
- // pane name is actually a z-index value
77
+ // pane name can actually be a z-index value
78
78
  if (_lodash2.default.has(convertedStyle, 'pane')) _lodash2.default.set(convertedStyle, 'pane', _lodash2.default.get(convertedStyle, 'pane').toString());
79
79
  return convertedStyle;
80
80
  },
81
81
  getDefaultMarker(feature, latlng, options) {
82
82
  const properties = feature.properties;
83
83
  const leafletOptions = options.leaflet || options;
84
- const style = Object.assign({}, this.activityOptions.engine.pointStyle, leafletOptions.layerStyle, this.convertFromSimpleStyleSpec(feature.style || feature.properties));
84
+ const style = Object.assign({}, _lodash2.default.get(this, 'activityOptions.engine.pointStyle'), leafletOptions.layerStyle, this.convertFromSimpleStyleSpec(feature.style || feature.properties));
85
85
 
86
86
  // We allow to template style properties according to feature,
87
87
  // because it can be slow you have to specify a subset of properties
@@ -98,7 +98,7 @@ exports.default = {
98
98
  getDefaultStyle(feature, options) {
99
99
  const properties = feature.properties;
100
100
  const leafletOptions = options.leaflet || options;
101
- const style = Object.assign({}, this.activityOptions.engine.featureStyle, leafletOptions.layerStyle, this.convertFromSimpleStyleSpec(feature.style || feature.properties));
101
+ const style = Object.assign({}, _lodash2.default.get(this, 'activityOptions.engine.featureStyle'), leafletOptions.layerStyle, this.convertFromSimpleStyleSpec(feature.style || feature.properties));
102
102
 
103
103
  // We allow to template style properties according to feature,
104
104
  // because it can be slow you have to specify a subset of properties
@@ -117,8 +117,12 @@ exports.default = {
117
117
  this.registerStyle('markerStyle', this.getDefaultMarker);
118
118
  this.registerStyle('featureStyle', this.getDefaultStyle);
119
119
  // Perform required conversion for default feature styling
120
- if (this.activityOptions.engine.featureStyle) this.convertFromSimpleStyleSpec(this.activityOptions.engine.featureStyle, 'update-in-place');
121
- if (this.activityOptions.engine.pointStyle) this.convertFromSimpleStyleSpec(this.activityOptions.engine.pointStyle, 'update-in-place');
120
+ if (_lodash2.default.has(this, 'activityOptions.engine.featureStyle')) {
121
+ this.convertFromSimpleStyleSpec(_lodash2.default.get(this, 'activityOptions.engine.featureStyle'), 'update-in-place');
122
+ }
123
+ if (_lodash2.default.has(this, 'activityOptions.engine.pointStyle')) {
124
+ this.convertFromSimpleStyleSpec(_lodash2.default.get(this, 'activityOptions.engine.pointStyle'), 'update-in-place');
125
+ }
122
126
  }
123
127
  };
124
128
  module.exports = exports['default'];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.style.js"],"names":["methods","createMarkerFromStyle","latlng","markerStyle","feature","icon","iconOptions","options","_","get","L","type","Object","assign","omit","marker","convertFromSimpleStyleSpec","style","inPlace","convertedStyle","isHtml","has","hasClass","isFontAwesome","isIconSpec","forOwn","value","key","LeafletStyleMappings","mapping","Array","isArray","set","unset","startsWith","toString","getDefaultMarker","properties","leafletOptions","leaflet","activityOptions","engine","pointStyle","layerStyle","template","forEach","entry","property","compiler","chroma","pane","getDefaultStyle","featureStyle","created","registerStyle"],"mappings":"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","file":"mixin.style.js","sourcesContent":["import L from 'leaflet'\r\nimport _ from 'lodash'\r\nimport chroma from 'chroma-js'\r\nimport { LeafletStyleMappings } from '../../utils'\r\n\r\nexport default {\r\n methods: {\r\n createMarkerFromStyle (latlng, markerStyle, feature) {\r\n if (markerStyle) {\r\n let icon = markerStyle.icon\r\n // Parse icon options to get icon object if any\r\n if (icon) {\r\n const iconOptions = icon.options || icon\r\n const options = markerStyle.options || markerStyle\r\n icon = _.get(L, icon.type)(iconOptions)\r\n return _.get(L, markerStyle.type || 'marker')(latlng, Object.assign(_.omit(options, ['icon']), { icon }))\r\n } else {\r\n const options = markerStyle.options || markerStyle\r\n return _.get(L, markerStyle.type || 'marker')(latlng, options)\r\n }\r\n } else {\r\n return L.marker(latlng)\r\n }\r\n },\r\n convertFromSimpleStyleSpec (style, inPlace) {\r\n if (!style) return {}\r\n const convertedStyle = (inPlace ? style : {})\r\n // Compute flags first because if updating in place options in style spec will be replaced\r\n const isHtml = _.has(style, 'icon-html')\r\n const hasClass = _.has(style, 'icon-class')\r\n const isFontAwesome = _.has(style, 'icon-classes')\r\n let isIconSpec = false\r\n _.forOwn(style, (value, key) => {\r\n if (_.has(LeafletStyleMappings, key)) {\r\n const mapping = _.get(LeafletStyleMappings, key)\r\n // Specific options\r\n switch (key) {\r\n case 'icon-size':\r\n case 'icon-anchor':\r\n case 'marker-size':\r\n if (!Array.isArray(value)) value = [value, value]\r\n _.set(convertedStyle, mapping, value)\r\n break\r\n default:\r\n _.set(convertedStyle, mapping, value)\r\n }\r\n if (inPlace) _.unset(style, key)\r\n // In this case we have a marker spec\r\n if (mapping.startsWith('icon')) isIconSpec = true\r\n }\r\n })\r\n // Select the right icon type based on options\r\n if (isIconSpec) {\r\n _.set(convertedStyle, 'icon.type', (isFontAwesome ? 'icon.fontAwesome' : isHtml ? 'divIcon' : 'icon'))\r\n // Leaflet adds a default background style but we prefer to remove it\r\n if (isHtml && !hasClass) _.set(convertedStyle, 'icon.options.className', '')\r\n _.set(convertedStyle, 'type', 'marker')\r\n }\r\n // Manage panes to make z-index work for all types of layers,\r\n // pane name is actually a z-index value\r\n if (_.has(convertedStyle, 'pane')) _.set(convertedStyle, 'pane', _.get(convertedStyle, 'pane').toString())\r\n return convertedStyle\r\n },\r\n getDefaultMarker (feature, latlng, options) {\r\n const properties = feature.properties\r\n const leafletOptions = options.leaflet || options\r\n const style = Object.assign({}, this.activityOptions.engine.pointStyle,\r\n leafletOptions.layerStyle,\r\n this.convertFromSimpleStyleSpec(feature.style || feature.properties))\r\n\r\n // We allow to template style properties according to feature,\r\n // because it can be slow you have to specify a subset of properties\r\n if (leafletOptions.template) {\r\n leafletOptions.template.forEach(entry => {\r\n // Perform templating, set using simple spec mapping first then raw if property not found\r\n _.set(style, _.get(LeafletStyleMappings, entry.property, entry.property), entry.compiler({ properties, feature, chroma }))\r\n })\r\n }\r\n // We manage panes for z-index, so we need to forward it to marker options\r\n if (leafletOptions.pane) style.pane = leafletOptions.pane\r\n return (latlng ? this.createMarkerFromStyle(latlng, style) : style)\r\n },\r\n getDefaultStyle (feature, options) {\r\n const properties = feature.properties\r\n const leafletOptions = options.leaflet || options\r\n const style = Object.assign({}, this.activityOptions.engine.featureStyle,\r\n leafletOptions.layerStyle,\r\n this.convertFromSimpleStyleSpec(feature.style || feature.properties))\r\n\r\n // We allow to template style properties according to feature,\r\n // because it can be slow you have to specify a subset of properties\r\n if (leafletOptions.template) {\r\n leafletOptions.template.forEach(entry => {\r\n // Perform templating, set using simple spec mapping first then raw if property not found\r\n _.set(style, _.get(LeafletStyleMappings, entry.property, entry.property), entry.compiler({ properties, feature, chroma }))\r\n })\r\n }\r\n // We manage panes for z-index, so we need to forward it to marker options\r\n if (leafletOptions.pane) style.pane = leafletOptions.pane\r\n return style\r\n }\r\n },\r\n created () {\r\n this.registerStyle('markerStyle', this.getDefaultMarker)\r\n this.registerStyle('featureStyle', this.getDefaultStyle)\r\n // Perform required conversion for default feature styling\r\n if (this.activityOptions.engine.featureStyle) this.convertFromSimpleStyleSpec(this.activityOptions.engine.featureStyle, 'update-in-place')\r\n if (this.activityOptions.engine.pointStyle) this.convertFromSimpleStyleSpec(this.activityOptions.engine.pointStyle, 'update-in-place')\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.style.js"],"names":["methods","createMarkerFromStyle","latlng","markerStyle","feature","icon","iconOptions","options","_","get","L","type","Object","assign","omit","marker","convertFromSimpleStyleSpec","style","inPlace","convertedStyle","isHtml","has","hasClass","isFontAwesome","isIconSpec","forOwn","value","key","LeafletStyleMappings","mapping","Array","isArray","set","unset","startsWith","toString","getDefaultMarker","properties","leafletOptions","leaflet","layerStyle","template","forEach","entry","property","compiler","chroma","pane","getDefaultStyle","created","registerStyle"],"mappings":"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","file":"mixin.style.js","sourcesContent":["import L from 'leaflet'\r\nimport _ from 'lodash'\r\nimport chroma from 'chroma-js'\r\nimport { LeafletStyleMappings } from '../../utils'\r\n\r\nexport default {\r\n methods: {\r\n createMarkerFromStyle (latlng, markerStyle, feature) {\r\n if (markerStyle) {\r\n let icon = markerStyle.icon\r\n // Parse icon options to get icon object if any\r\n if (icon) {\r\n const iconOptions = icon.options || icon\r\n const options = markerStyle.options || markerStyle\r\n icon = _.get(L, icon.type)(iconOptions)\r\n return _.get(L, markerStyle.type || 'marker')(latlng, Object.assign(_.omit(options, ['icon']), { icon }))\r\n } else {\r\n const options = markerStyle.options || markerStyle\r\n return _.get(L, markerStyle.type || 'marker')(latlng, options)\r\n }\r\n } else {\r\n return L.marker(latlng)\r\n }\r\n },\r\n convertFromSimpleStyleSpec (style, inPlace) {\r\n if (!style) return {}\r\n const convertedStyle = (inPlace ? style : {})\r\n // Compute flags first because if updating in place options in style spec will be replaced\r\n const isHtml = _.has(style, 'icon-html')\r\n const hasClass = _.has(style, 'icon-class')\r\n const isFontAwesome = _.has(style, 'icon-classes')\r\n let isIconSpec = false\r\n _.forOwn(style, (value, key) => {\r\n if (_.has(LeafletStyleMappings, key)) {\r\n const mapping = _.get(LeafletStyleMappings, key)\r\n // Specific options\r\n switch (key) {\r\n case 'icon-size':\r\n case 'icon-anchor':\r\n case 'marker-size':\r\n if (!Array.isArray(value)) value = [value, value]\r\n _.set(convertedStyle, mapping, value)\r\n break\r\n default:\r\n _.set(convertedStyle, mapping, value)\r\n }\r\n if (inPlace) _.unset(style, key)\r\n // In this case we have a marker spec\r\n if (mapping.startsWith('icon')) isIconSpec = true\r\n }\r\n })\r\n // Select the right icon type based on options\r\n if (isIconSpec) {\r\n _.set(convertedStyle, 'icon.type', (isFontAwesome ? 'icon.fontAwesome' : isHtml ? 'divIcon' : 'icon'))\r\n // Leaflet adds a default background style but we prefer to remove it\r\n if (isHtml && !hasClass) _.set(convertedStyle, 'icon.options.className', '')\r\n _.set(convertedStyle, 'type', 'marker')\r\n }\r\n // Manage panes to make z-index work for all types of layers,\r\n // pane name can actually be a z-index value\r\n if (_.has(convertedStyle, 'pane')) _.set(convertedStyle, 'pane', _.get(convertedStyle, 'pane').toString())\r\n return convertedStyle\r\n },\r\n getDefaultMarker (feature, latlng, options) {\r\n const properties = feature.properties\r\n const leafletOptions = options.leaflet || options\r\n const style = Object.assign({},\r\n _.get(this, 'activityOptions.engine.pointStyle'),\r\n leafletOptions.layerStyle,\r\n this.convertFromSimpleStyleSpec(feature.style || feature.properties))\r\n\r\n // We allow to template style properties according to feature,\r\n // because it can be slow you have to specify a subset of properties\r\n if (leafletOptions.template) {\r\n leafletOptions.template.forEach(entry => {\r\n // Perform templating, set using simple spec mapping first then raw if property not found\r\n _.set(style, _.get(LeafletStyleMappings, entry.property, entry.property), entry.compiler({ properties, feature, chroma }))\r\n })\r\n }\r\n // We manage panes for z-index, so we need to forward it to marker options\r\n if (leafletOptions.pane) style.pane = leafletOptions.pane\r\n return (latlng ? this.createMarkerFromStyle(latlng, style) : style)\r\n },\r\n getDefaultStyle (feature, options) {\r\n const properties = feature.properties\r\n const leafletOptions = options.leaflet || options\r\n const style = Object.assign({},\r\n _.get(this, 'activityOptions.engine.featureStyle'),\r\n leafletOptions.layerStyle,\r\n this.convertFromSimpleStyleSpec(feature.style || feature.properties))\r\n\r\n // We allow to template style properties according to feature,\r\n // because it can be slow you have to specify a subset of properties\r\n if (leafletOptions.template) {\r\n leafletOptions.template.forEach(entry => {\r\n // Perform templating, set using simple spec mapping first then raw if property not found\r\n _.set(style, _.get(LeafletStyleMappings, entry.property, entry.property), entry.compiler({ properties, feature, chroma }))\r\n })\r\n }\r\n // We manage panes for z-index, so we need to forward it to marker options\r\n if (leafletOptions.pane) style.pane = leafletOptions.pane\r\n return style\r\n }\r\n },\r\n created () {\r\n this.registerStyle('markerStyle', this.getDefaultMarker)\r\n this.registerStyle('featureStyle', this.getDefaultStyle)\r\n // Perform required conversion for default feature styling\r\n if (_.has(this, 'activityOptions.engine.featureStyle')) {\r\n this.convertFromSimpleStyleSpec(_.get(this, 'activityOptions.engine.featureStyle'), 'update-in-place')\r\n }\r\n if (_.has(this, 'activityOptions.engine.pointStyle')) {\r\n this.convertFromSimpleStyleSpec(_.get(this, 'activityOptions.engine.pointStyle'), 'update-in-place')\r\n }\r\n }\r\n}\r\n"]}
@@ -28,14 +28,15 @@ exports.default = {
28
28
  const colorMap = _lodash2.default.get(options, 'variables[0].chromajs', null);
29
29
  if (colorMap) Object.assign(layerOptions, { chromajs: colorMap });
30
30
 
31
+ const apiToken = this.$api.get('storage').getItem(this.$config('gatewayJwt'));
32
+
31
33
  // Build grid source
32
34
  const [gridKey, gridConf] = (0, _grid.extractGridSourceConfig)(options);
33
- const gridSource = (0, _grid.makeGridSource)(gridKey, { weacastApi: this.weacastApi });
35
+ const gridSource = (0, _grid.makeGridSource)(gridKey, { weacastApi: this.weacastApi, apiToken });
34
36
  gridSource.setup(gridConf);
35
37
  if (gridSource.updateCtx) {
36
38
  // define variables for source's dynamic properties
37
- const gatewayToken = this.$api.get('storage').getItem(this.$config('gatewayJwt'));
38
- if (gatewayToken) gridSource.updateCtx.jwtToken = gatewayToken;
39
+ if (apiToken) gridSource.updateCtx.jwtToken = apiToken;
39
40
  gridSource.updateCtx.meteoElements = _lodash2.default.get(options, 'meteoElements');
40
41
  }
41
42
 
@@ -69,10 +70,6 @@ exports.default = {
69
70
 
70
71
  // store displayed layers
71
72
  this.tiledMeshLayers.set(layer._id, engineLayer);
72
- const levels = _lodash2.default.get(layer, 'levels');
73
- if (typeof this.setSelectableLevels === 'function' && levels) {
74
- this.setSelectableLevels(layer, levels);
75
- }
76
73
  // setup layer
77
74
  engineLayer.setModel(this.forecastModel);
78
75
  engineLayer.setTime(_time.Time.getCurrentTime());
@@ -83,10 +80,6 @@ exports.default = {
83
80
  if (!isTiledMeshLayer) return;
84
81
 
85
82
  this.tiledMeshLayers.delete(layer._id);
86
- // layer being hidden, hide slider if any was required
87
- if (typeof this.clearSelectableLevels === 'function') {
88
- this.clearSelectableLevels(layer);
89
- }
90
83
  },
91
84
 
92
85
  onSelectedLevelChangedTiledMeshLayer(value) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.tiled-mesh-layers.js"],"names":["methods","createLeafletTiledMeshLayer","options","layerOptions","leaflet","type","colorMap","_","get","Object","assign","chromajs","gridKey","gridConf","gridSource","weacastApi","setup","updateCtx","gatewayToken","$api","getItem","$config","jwtToken","meteoElements","TiledMeshLayer","updateTiledMeshLayerZoomBounds","layer","model","minZoom","name","maxZoom","updateLayerDisabled","engineLayer","getLeafletLayerByName","onAddTiledMeshLayer","forecastModel","onShowTiledMeshLayer","isTiledMeshLayer","tiledMeshLayers","set","_id","levels","setSelectableLevels","setModel","setTime","Time","getCurrentTime","onHideTiledMeshLayer","delete","clearSelectableLevels","onSelectedLevelChangedTiledMeshLayer","value","selectableLevelsLayer","setLevel","onForecastModelChangedTiledMeshLayer","filter","layers","forEach","onCurrentTimeChangedTiledMeshLayer","time","created","Map","registerLeafletConstructor","$on","$events","beforeDestroy","$off"],"mappings":"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","file":"mixin.tiled-mesh-layers.js","sourcesContent":["import _ from 'lodash'\r\nimport { Time } from '../../../../core/client/time'\r\nimport { makeGridSource, extractGridSourceConfig } from '../../../common/grid'\r\nimport { TiledMeshLayer } from '../../leaflet/TiledMeshLayer'\r\n\r\nexport default {\r\n methods: {\r\n createLeafletTiledMeshLayer (options) {\r\n const layerOptions = options.leaflet || options\r\n\r\n // Check for valid type\r\n if (layerOptions.type !== 'tiledMeshLayer') return\r\n\r\n // Copy options\r\n const colorMap = _.get(options, 'variables[0].chromajs', null)\r\n if (colorMap) Object.assign(layerOptions, { chromajs: colorMap })\r\n\r\n // Build grid source\r\n const [gridKey, gridConf] = extractGridSourceConfig(options)\r\n const gridSource = makeGridSource(gridKey, { weacastApi: this.weacastApi })\r\n gridSource.setup(gridConf)\r\n if (gridSource.updateCtx) {\r\n // define variables for source's dynamic properties\r\n const gatewayToken = this.$api.get('storage').getItem(this.$config('gatewayJwt'))\r\n if (gatewayToken) gridSource.updateCtx.jwtToken = gatewayToken\r\n gridSource.updateCtx.meteoElements = _.get(options, 'meteoElements')\r\n }\r\n\r\n return new TiledMeshLayer(layerOptions, gridSource)\r\n },\r\n\r\n updateTiledMeshLayerZoomBounds (layer, model) {\r\n const minZoom = _.get(layer, `leaflet.meteoModelMinZoom[${model.name}]`)\r\n const maxZoom = _.get(layer, `leaflet.meteoModelMaxZoom[${model.name}]`)\r\n\r\n if (minZoom) layer.leaflet.minZoom = minZoom\r\n else delete layer.leaflet.minZoom\r\n if (maxZoom) layer.leaflet.maxZoom = maxZoom\r\n else delete layer.leaflet.maxZoom\r\n this.updateLayerDisabled(layer)\r\n\r\n // reflect on engine layers\r\n const engineLayer = this.getLeafletLayerByName(layer.name)\r\n if (engineLayer) {\r\n if (minZoom) engineLayer.options.minZoom = minZoom\r\n else delete engineLayer.options.minZoom\r\n if (maxZoom) engineLayer.options.maxZoom = maxZoom\r\n else delete engineLayer.options.maxZoom\r\n }\r\n },\r\n\r\n onAddTiledMeshLayer (layer) {\r\n if (!this.forecastModel || _.get(layer, 'leaflet.type') !== 'tiledMeshLayer') return\r\n this.updateTiledMeshLayerZoomBounds(layer, this.forecastModel)\r\n },\r\n\r\n onShowTiledMeshLayer (layer, engineLayer) {\r\n const isTiledMeshLayer = engineLayer instanceof TiledMeshLayer\r\n if (!isTiledMeshLayer) return\r\n\r\n // store displayed layers\r\n this.tiledMeshLayers.set(layer._id, engineLayer)\r\n const levels = _.get(layer, 'levels')\r\n if ((typeof this.setSelectableLevels === 'function') && levels) {\r\n this.setSelectableLevels(layer, levels)\r\n }\r\n // setup layer\r\n engineLayer.setModel(this.forecastModel)\r\n engineLayer.setTime(Time.getCurrentTime())\r\n },\r\n\r\n onHideTiledMeshLayer (layer, engineLayer) {\r\n const isTiledMeshLayer = engineLayer instanceof TiledMeshLayer\r\n if (!isTiledMeshLayer) return\r\n\r\n this.tiledMeshLayers.delete(layer._id)\r\n // layer being hidden, hide slider if any was required\r\n if (typeof this.clearSelectableLevels === 'function') {\r\n this.clearSelectableLevels(layer)\r\n }\r\n },\r\n\r\n onSelectedLevelChangedTiledMeshLayer (value) {\r\n if (!this.selectableLevelsLayer) return\r\n\r\n // send selected value only to associated layer\r\n const layer = this.tiledMeshLayers.get(this.selectableLevelsLayer._id)\r\n if (!layer) return\r\n\r\n layer.setLevel(value)\r\n },\r\n\r\n onForecastModelChangedTiledMeshLayer (model) {\r\n // update layer & engine layer {min,max}Zoom if required\r\n const tiledMeshLayers = _.filter(this.layers, (layer) => _.get(layer, 'leaflet.type') === 'tiledMeshLayer')\r\n for (const layer of tiledMeshLayers) this.updateTiledMeshLayerZoomBounds(layer, model)\r\n // broadcast model to visible layers\r\n this.tiledMeshLayers.forEach((engineLayer) => { engineLayer.setModel(model) })\r\n },\r\n\r\n onCurrentTimeChangedTiledMeshLayer (time) {\r\n // broadcast time to visible layers\r\n this.tiledMeshLayers.forEach((engineLayer) => { engineLayer.setTime(time) })\r\n }\r\n },\r\n\r\n created () {\r\n this.tiledMeshLayers = new Map()\r\n this.registerLeafletConstructor(this.createLeafletTiledMeshLayer)\r\n\r\n this.$on('layer-added', this.onAddTiledMeshLayer)\r\n this.$on('layer-shown', this.onShowTiledMeshLayer)\r\n this.$on('layer-hidden', this.onHideTiledMeshLayer)\r\n this.$on('selected-level-changed', this.onSelectedLevelChangedTiledMeshLayer)\r\n this.$on('forecast-model-changed', this.onForecastModelChangedTiledMeshLayer)\r\n this.$events.$on('time-current-time-changed', this.onCurrentTimeChangedTiledMeshLayer)\r\n },\r\n\r\n beforeDestroy () {\r\n this.$off('layer-added', this.onAddTiledMeshLayer)\r\n this.$off('layer-shown', this.onShowTiledMeshLayer)\r\n this.$off('layer-hidden', this.onHideTiledMeshLayer)\r\n this.$off('selected-level-changed', this.onSelectedLevelChangedTiledMeshLayer)\r\n this.$off('forecast-model-changed', this.onForecastModelChangedTiledMeshLayer)\r\n this.$events.$off('time-current-time-changed', this.onCurrentTimeChangedTiledMeshLayer)\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.tiled-mesh-layers.js"],"names":["methods","createLeafletTiledMeshLayer","options","layerOptions","leaflet","type","colorMap","_","get","Object","assign","chromajs","apiToken","$api","getItem","$config","gridKey","gridConf","gridSource","weacastApi","setup","updateCtx","jwtToken","meteoElements","TiledMeshLayer","updateTiledMeshLayerZoomBounds","layer","model","minZoom","name","maxZoom","updateLayerDisabled","engineLayer","getLeafletLayerByName","onAddTiledMeshLayer","forecastModel","onShowTiledMeshLayer","isTiledMeshLayer","tiledMeshLayers","set","_id","setModel","setTime","Time","getCurrentTime","onHideTiledMeshLayer","delete","onSelectedLevelChangedTiledMeshLayer","value","selectableLevelsLayer","setLevel","onForecastModelChangedTiledMeshLayer","filter","layers","forEach","onCurrentTimeChangedTiledMeshLayer","time","created","Map","registerLeafletConstructor","$on","$events","beforeDestroy","$off"],"mappings":"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","file":"mixin.tiled-mesh-layers.js","sourcesContent":["import _ from 'lodash'\r\nimport { Time } from '../../../../core/client/time'\r\nimport { makeGridSource, extractGridSourceConfig } from '../../../common/grid'\r\nimport { TiledMeshLayer } from '../../leaflet/TiledMeshLayer'\r\n\r\nexport default {\r\n methods: {\r\n createLeafletTiledMeshLayer (options) {\r\n const layerOptions = options.leaflet || options\r\n\r\n // Check for valid type\r\n if (layerOptions.type !== 'tiledMeshLayer') return\r\n\r\n // Copy options\r\n const colorMap = _.get(options, 'variables[0].chromajs', null)\r\n if (colorMap) Object.assign(layerOptions, { chromajs: colorMap })\r\n\r\n const apiToken = this.$api.get('storage').getItem(this.$config('gatewayJwt'))\r\n\r\n // Build grid source\r\n const [gridKey, gridConf] = extractGridSourceConfig(options)\r\n const gridSource = makeGridSource(gridKey, { weacastApi: this.weacastApi, apiToken })\r\n gridSource.setup(gridConf)\r\n if (gridSource.updateCtx) {\r\n // define variables for source's dynamic properties\r\n if (apiToken) gridSource.updateCtx.jwtToken = apiToken\r\n gridSource.updateCtx.meteoElements = _.get(options, 'meteoElements')\r\n }\r\n\r\n return new TiledMeshLayer(layerOptions, gridSource)\r\n },\r\n\r\n updateTiledMeshLayerZoomBounds (layer, model) {\r\n const minZoom = _.get(layer, `leaflet.meteoModelMinZoom[${model.name}]`)\r\n const maxZoom = _.get(layer, `leaflet.meteoModelMaxZoom[${model.name}]`)\r\n\r\n if (minZoom) layer.leaflet.minZoom = minZoom\r\n else delete layer.leaflet.minZoom\r\n if (maxZoom) layer.leaflet.maxZoom = maxZoom\r\n else delete layer.leaflet.maxZoom\r\n this.updateLayerDisabled(layer)\r\n\r\n // reflect on engine layers\r\n const engineLayer = this.getLeafletLayerByName(layer.name)\r\n if (engineLayer) {\r\n if (minZoom) engineLayer.options.minZoom = minZoom\r\n else delete engineLayer.options.minZoom\r\n if (maxZoom) engineLayer.options.maxZoom = maxZoom\r\n else delete engineLayer.options.maxZoom\r\n }\r\n },\r\n\r\n onAddTiledMeshLayer (layer) {\r\n if (!this.forecastModel || _.get(layer, 'leaflet.type') !== 'tiledMeshLayer') return\r\n this.updateTiledMeshLayerZoomBounds(layer, this.forecastModel)\r\n },\r\n\r\n onShowTiledMeshLayer (layer, engineLayer) {\r\n const isTiledMeshLayer = engineLayer instanceof TiledMeshLayer\r\n if (!isTiledMeshLayer) return\r\n\r\n // store displayed layers\r\n this.tiledMeshLayers.set(layer._id, engineLayer)\r\n // setup layer\r\n engineLayer.setModel(this.forecastModel)\r\n engineLayer.setTime(Time.getCurrentTime())\r\n },\r\n\r\n onHideTiledMeshLayer (layer, engineLayer) {\r\n const isTiledMeshLayer = engineLayer instanceof TiledMeshLayer\r\n if (!isTiledMeshLayer) return\r\n\r\n this.tiledMeshLayers.delete(layer._id)\r\n },\r\n\r\n onSelectedLevelChangedTiledMeshLayer (value) {\r\n if (!this.selectableLevelsLayer) return\r\n\r\n // send selected value only to associated layer\r\n const layer = this.tiledMeshLayers.get(this.selectableLevelsLayer._id)\r\n if (!layer) return\r\n\r\n layer.setLevel(value)\r\n },\r\n\r\n onForecastModelChangedTiledMeshLayer (model) {\r\n // update layer & engine layer {min,max}Zoom if required\r\n const tiledMeshLayers = _.filter(this.layers, (layer) => _.get(layer, 'leaflet.type') === 'tiledMeshLayer')\r\n for (const layer of tiledMeshLayers) this.updateTiledMeshLayerZoomBounds(layer, model)\r\n // broadcast model to visible layers\r\n this.tiledMeshLayers.forEach((engineLayer) => { engineLayer.setModel(model) })\r\n },\r\n\r\n onCurrentTimeChangedTiledMeshLayer (time) {\r\n // broadcast time to visible layers\r\n this.tiledMeshLayers.forEach((engineLayer) => { engineLayer.setTime(time) })\r\n }\r\n },\r\n\r\n created () {\r\n this.tiledMeshLayers = new Map()\r\n this.registerLeafletConstructor(this.createLeafletTiledMeshLayer)\r\n\r\n this.$on('layer-added', this.onAddTiledMeshLayer)\r\n this.$on('layer-shown', this.onShowTiledMeshLayer)\r\n this.$on('layer-hidden', this.onHideTiledMeshLayer)\r\n this.$on('selected-level-changed', this.onSelectedLevelChangedTiledMeshLayer)\r\n this.$on('forecast-model-changed', this.onForecastModelChangedTiledMeshLayer)\r\n this.$events.$on('time-current-time-changed', this.onCurrentTimeChangedTiledMeshLayer)\r\n },\r\n\r\n beforeDestroy () {\r\n this.$off('layer-added', this.onAddTiledMeshLayer)\r\n this.$off('layer-shown', this.onShowTiledMeshLayer)\r\n this.$off('layer-hidden', this.onHideTiledMeshLayer)\r\n this.$off('selected-level-changed', this.onSelectedLevelChangedTiledMeshLayer)\r\n this.$off('forecast-model-changed', this.onForecastModelChangedTiledMeshLayer)\r\n this.$events.$off('time-current-time-changed', this.onCurrentTimeChangedTiledMeshLayer)\r\n }\r\n}\r\n"]}
@@ -76,15 +76,9 @@ exports.default = {
76
76
  // store displayed layers
77
77
  this.tiledWindLayers.set(layer._id, engineLayer);
78
78
 
79
- const levels = _lodash2.default.get(layer, 'levels');
80
- if (typeof this.setSelectableLevels === 'function' && levels) {
81
- this.setSelectableLevels(layer, levels);
82
- }
83
-
84
79
  // setup layer
85
80
  engineLayer.setModel(this.forecastModel);
86
81
  engineLayer.setTime(_time.Time.getCurrentTime());
87
- if (this.selectedLevel !== null) engineLayer.setLevel(this.selectedLevel);
88
82
  },
89
83
 
90
84
  onHideTiledWindLayer(layer, engineLayer) {
@@ -92,11 +86,6 @@ exports.default = {
92
86
  if (!isTiledWindLayer) return;
93
87
 
94
88
  this.tiledWindLayers.delete(layer._id);
95
-
96
- // layer being hidden, hide slider if any was required
97
- if (typeof this.clearSelectableLevels === 'function') {
98
- this.clearSelectableLevels(layer);
99
- }
100
89
  },
101
90
 
102
91
  onForecastModelChangedTiledWindLayer(model) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.tiled-wind-layers.js"],"names":["methods","createLeafletTiledWindLayer","options","layerOptions","leaflet","type","colorMap","_","get","Object","assign","chromajs","gridKey","gridConf","uSource","weacastApi","vSource","setup","updateCtx","gatewayToken","$api","getItem","$config","jwtToken","windComponent","TiledWindLayer","updateTiledWindLayerZoomBounds","layer","model","minZoom","name","maxZoom","updateLayerDisabled","engineLayer","getLeafletLayerByName","onAddTiledWindLayer","forecastModel","onShowTiledWindLayer","isTiledWindLayer","tiledWindLayers","set","_id","levels","setSelectableLevels","setModel","setTime","Time","getCurrentTime","selectedLevel","setLevel","onHideTiledWindLayer","delete","clearSelectableLevels","onForecastModelChangedTiledWindLayer","filter","layers","forEach","onCurrentTimeChangedTiledWindLayer","time","onSelectedLevelChangedTiledWindLayer","value","selectableLevelsLayer","created","Map","registerLeafletConstructor","$on","$events","beforeDestroy","$off"],"mappings":"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","file":"mixin.tiled-wind-layers.js","sourcesContent":["import _ from 'lodash'\r\nimport { Time } from '../../../../core/client/time'\r\nimport { makeGridSource, extractGridSourceConfig } from '../../../common/grid'\r\nimport { TiledWindLayer } from '../../leaflet/TiledWindLayer'\r\n\r\nexport default {\r\n methods: {\r\n createLeafletTiledWindLayer (options) {\r\n const layerOptions = options.leaflet || options\r\n\r\n // Check for valid type\r\n if (layerOptions.type !== 'tiledWindLayer') return\r\n\r\n // Copy options\r\n const colorMap = _.get(options, 'variables[0].chromajs', null)\r\n if (colorMap) Object.assign(layerOptions, { chromajs: colorMap })\r\n\r\n // Build u & v grid sources\r\n const [gridKey, gridConf] = extractGridSourceConfig(options)\r\n const uSource = makeGridSource(gridKey, { weacastApi: this.weacastApi })\r\n const vSource = makeGridSource(gridKey, { weacastApi: this.weacastApi })\r\n uSource.setup(gridConf)\r\n vSource.setup(gridConf)\r\n if (uSource.updateCtx) {\r\n // define variables for source's dynamic properties\r\n const gatewayToken = this.$api.get('storage').getItem(this.$config('gatewayJwt'))\r\n if (gatewayToken) {\r\n uSource.updateCtx.jwtToken = gatewayToken\r\n vSource.updateCtx.jwtToken = gatewayToken\r\n }\r\n uSource.updateCtx.windComponent = _.get(options, 'meteoElements[0]')\r\n vSource.updateCtx.windComponent = _.get(options, 'meteoElements[1]')\r\n }\r\n\r\n return new TiledWindLayer(layerOptions, uSource, vSource)\r\n },\r\n\r\n updateTiledWindLayerZoomBounds (layer, model) {\r\n const minZoom = _.get(layer, `leaflet.meteoModelMinZoom[${model.name}]`)\r\n const maxZoom = _.get(layer, `leaflet.meteoModelMaxZoom[${model.name}]`)\r\n\r\n if (minZoom) layer.leaflet.minZoom = minZoom\r\n else delete layer.leaflet.minZoom\r\n if (maxZoom) layer.leaflet.maxZoom = maxZoom\r\n else delete layer.leaflet.maxZoom\r\n this.updateLayerDisabled(layer)\r\n\r\n // reflect on engine layers\r\n const engineLayer = this.getLeafletLayerByName(layer.name)\r\n if (engineLayer) {\r\n if (minZoom) engineLayer.options.minZoom = minZoom\r\n else delete engineLayer.options.minZoom\r\n if (maxZoom) engineLayer.options.maxZoom = maxZoom\r\n else delete engineLayer.options.maxZoom\r\n }\r\n },\r\n\r\n onAddTiledWindLayer (layer) {\r\n if (!this.forecastModel || _.get(layer, 'leaflet.type') !== 'tiledWindLayer') return\r\n this.updateTiledWindLayerZoomBounds(layer, this.forecastModel)\r\n },\r\n\r\n onShowTiledWindLayer (layer, engineLayer) {\r\n const isTiledWindLayer = engineLayer instanceof TiledWindLayer\r\n if (!isTiledWindLayer) return\r\n\r\n // store displayed layers\r\n this.tiledWindLayers.set(layer._id, engineLayer)\r\n\r\n const levels = _.get(layer, 'levels')\r\n if ((typeof this.setSelectableLevels === 'function') && levels) {\r\n this.setSelectableLevels(layer, levels)\r\n }\r\n\r\n // setup layer\r\n engineLayer.setModel(this.forecastModel)\r\n engineLayer.setTime(Time.getCurrentTime())\r\n if (this.selectedLevel !== null) engineLayer.setLevel(this.selectedLevel)\r\n },\r\n\r\n onHideTiledWindLayer (layer, engineLayer) {\r\n const isTiledWindLayer = engineLayer instanceof TiledWindLayer\r\n if (!isTiledWindLayer) return\r\n\r\n this.tiledWindLayers.delete(layer._id)\r\n\r\n // layer being hidden, hide slider if any was required\r\n if (typeof this.clearSelectableLevels === 'function') {\r\n this.clearSelectableLevels(layer)\r\n }\r\n },\r\n\r\n onForecastModelChangedTiledWindLayer (model) {\r\n // update layer & engine layer {min,max}Zoom if required\r\n const tiledWindLayers = _.filter(this.layers, (layer) => _.get(layer, 'leaflet.type') === 'tiledWindLayer')\r\n for (const layer of tiledWindLayers) this.updateTiledWindLayerZoomBounds(layer, model)\r\n // broadcast model to visible layers\r\n this.tiledWindLayers.forEach((engineLayer) => { engineLayer.setModel(model) })\r\n },\r\n\r\n onCurrentTimeChangedTiledWindLayer (time) {\r\n // broadcast time to visible layers\r\n this.tiledWindLayers.forEach((engineLayer) => { engineLayer.setTime(time) })\r\n },\r\n\r\n onSelectedLevelChangedTiledWindLayer (value) {\r\n if (!this.selectableLevelsLayer) return\r\n\r\n // send selected value only to associated layer\r\n const layer = this.tiledWindLayers.get(this.selectableLevelsLayer._id)\r\n if (!layer) return\r\n\r\n layer.setLevel(value)\r\n }\r\n },\r\n\r\n created () {\r\n this.tiledWindLayers = new Map()\r\n this.registerLeafletConstructor(this.createLeafletTiledWindLayer)\r\n\r\n this.$on('layer-added', this.onAddTiledWindLayer)\r\n this.$on('layer-shown', this.onShowTiledWindLayer)\r\n this.$on('layer-hidden', this.onHideTiledWindLayer)\r\n this.$on('selected-level-changed', this.onSelectedLevelChangedTiledWindLayer)\r\n this.$on('forecast-model-changed', this.onForecastModelChangedTiledWindLayer)\r\n this.$events.$on('time-current-time-changed', this.onCurrentTimeChangedTiledWindLayer)\r\n },\r\n\r\n beforeDestroy () {\r\n this.$off('layer-added', this.onAddTiledWindLayer)\r\n this.$off('layer-shown', this.onShowTiledWindLayer)\r\n this.$off('layer-hidden', this.onHideTiledWindLayer)\r\n this.$off('selected-level-changed', this.onSelectedLevelChangedTiledWindLayer)\r\n this.$off('forecast-model-changed', this.onForecastModelChangedTiledWindLayer)\r\n this.$events.$off('time-current-time-changed', this.onCurrentTimeChangedTiledWindLayer)\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.tiled-wind-layers.js"],"names":["methods","createLeafletTiledWindLayer","options","layerOptions","leaflet","type","colorMap","_","get","Object","assign","chromajs","gridKey","gridConf","uSource","weacastApi","vSource","setup","updateCtx","gatewayToken","$api","getItem","$config","jwtToken","windComponent","TiledWindLayer","updateTiledWindLayerZoomBounds","layer","model","minZoom","name","maxZoom","updateLayerDisabled","engineLayer","getLeafletLayerByName","onAddTiledWindLayer","forecastModel","onShowTiledWindLayer","isTiledWindLayer","tiledWindLayers","set","_id","setModel","setTime","Time","getCurrentTime","onHideTiledWindLayer","delete","onForecastModelChangedTiledWindLayer","filter","layers","forEach","onCurrentTimeChangedTiledWindLayer","time","onSelectedLevelChangedTiledWindLayer","value","selectableLevelsLayer","setLevel","created","Map","registerLeafletConstructor","$on","$events","beforeDestroy","$off"],"mappings":"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","file":"mixin.tiled-wind-layers.js","sourcesContent":["import _ from 'lodash'\r\nimport { Time } from '../../../../core/client/time'\r\nimport { makeGridSource, extractGridSourceConfig } from '../../../common/grid'\r\nimport { TiledWindLayer } from '../../leaflet/TiledWindLayer'\r\n\r\nexport default {\r\n methods: {\r\n createLeafletTiledWindLayer (options) {\r\n const layerOptions = options.leaflet || options\r\n\r\n // Check for valid type\r\n if (layerOptions.type !== 'tiledWindLayer') return\r\n\r\n // Copy options\r\n const colorMap = _.get(options, 'variables[0].chromajs', null)\r\n if (colorMap) Object.assign(layerOptions, { chromajs: colorMap })\r\n\r\n // Build u & v grid sources\r\n const [gridKey, gridConf] = extractGridSourceConfig(options)\r\n const uSource = makeGridSource(gridKey, { weacastApi: this.weacastApi })\r\n const vSource = makeGridSource(gridKey, { weacastApi: this.weacastApi })\r\n uSource.setup(gridConf)\r\n vSource.setup(gridConf)\r\n if (uSource.updateCtx) {\r\n // define variables for source's dynamic properties\r\n const gatewayToken = this.$api.get('storage').getItem(this.$config('gatewayJwt'))\r\n if (gatewayToken) {\r\n uSource.updateCtx.jwtToken = gatewayToken\r\n vSource.updateCtx.jwtToken = gatewayToken\r\n }\r\n uSource.updateCtx.windComponent = _.get(options, 'meteoElements[0]')\r\n vSource.updateCtx.windComponent = _.get(options, 'meteoElements[1]')\r\n }\r\n\r\n return new TiledWindLayer(layerOptions, uSource, vSource)\r\n },\r\n\r\n updateTiledWindLayerZoomBounds (layer, model) {\r\n const minZoom = _.get(layer, `leaflet.meteoModelMinZoom[${model.name}]`)\r\n const maxZoom = _.get(layer, `leaflet.meteoModelMaxZoom[${model.name}]`)\r\n\r\n if (minZoom) layer.leaflet.minZoom = minZoom\r\n else delete layer.leaflet.minZoom\r\n if (maxZoom) layer.leaflet.maxZoom = maxZoom\r\n else delete layer.leaflet.maxZoom\r\n this.updateLayerDisabled(layer)\r\n\r\n // reflect on engine layers\r\n const engineLayer = this.getLeafletLayerByName(layer.name)\r\n if (engineLayer) {\r\n if (minZoom) engineLayer.options.minZoom = minZoom\r\n else delete engineLayer.options.minZoom\r\n if (maxZoom) engineLayer.options.maxZoom = maxZoom\r\n else delete engineLayer.options.maxZoom\r\n }\r\n },\r\n\r\n onAddTiledWindLayer (layer) {\r\n if (!this.forecastModel || _.get(layer, 'leaflet.type') !== 'tiledWindLayer') return\r\n this.updateTiledWindLayerZoomBounds(layer, this.forecastModel)\r\n },\r\n\r\n onShowTiledWindLayer (layer, engineLayer) {\r\n const isTiledWindLayer = engineLayer instanceof TiledWindLayer\r\n if (!isTiledWindLayer) return\r\n\r\n // store displayed layers\r\n this.tiledWindLayers.set(layer._id, engineLayer)\r\n\r\n // setup layer\r\n engineLayer.setModel(this.forecastModel)\r\n engineLayer.setTime(Time.getCurrentTime())\r\n },\r\n\r\n onHideTiledWindLayer (layer, engineLayer) {\r\n const isTiledWindLayer = engineLayer instanceof TiledWindLayer\r\n if (!isTiledWindLayer) return\r\n\r\n this.tiledWindLayers.delete(layer._id)\r\n },\r\n\r\n onForecastModelChangedTiledWindLayer (model) {\r\n // update layer & engine layer {min,max}Zoom if required\r\n const tiledWindLayers = _.filter(this.layers, (layer) => _.get(layer, 'leaflet.type') === 'tiledWindLayer')\r\n for (const layer of tiledWindLayers) this.updateTiledWindLayerZoomBounds(layer, model)\r\n // broadcast model to visible layers\r\n this.tiledWindLayers.forEach((engineLayer) => { engineLayer.setModel(model) })\r\n },\r\n\r\n onCurrentTimeChangedTiledWindLayer (time) {\r\n // broadcast time to visible layers\r\n this.tiledWindLayers.forEach((engineLayer) => { engineLayer.setTime(time) })\r\n },\r\n\r\n onSelectedLevelChangedTiledWindLayer (value) {\r\n if (!this.selectableLevelsLayer) return\r\n\r\n // send selected value only to associated layer\r\n const layer = this.tiledWindLayers.get(this.selectableLevelsLayer._id)\r\n if (!layer) return\r\n\r\n layer.setLevel(value)\r\n }\r\n },\r\n\r\n created () {\r\n this.tiledWindLayers = new Map()\r\n this.registerLeafletConstructor(this.createLeafletTiledWindLayer)\r\n\r\n this.$on('layer-added', this.onAddTiledWindLayer)\r\n this.$on('layer-shown', this.onShowTiledWindLayer)\r\n this.$on('layer-hidden', this.onHideTiledWindLayer)\r\n this.$on('selected-level-changed', this.onSelectedLevelChangedTiledWindLayer)\r\n this.$on('forecast-model-changed', this.onForecastModelChangedTiledWindLayer)\r\n this.$events.$on('time-current-time-changed', this.onCurrentTimeChangedTiledWindLayer)\r\n },\r\n\r\n beforeDestroy () {\r\n this.$off('layer-added', this.onAddTiledWindLayer)\r\n this.$off('layer-shown', this.onShowTiledWindLayer)\r\n this.$off('layer-hidden', this.onHideTiledWindLayer)\r\n this.$off('selected-level-changed', this.onSelectedLevelChangedTiledWindLayer)\r\n this.$off('forecast-model-changed', this.onForecastModelChangedTiledWindLayer)\r\n this.$events.$off('time-current-time-changed', this.onCurrentTimeChangedTiledWindLayer)\r\n }\r\n}\r\n"]}