@kalisio/kdk 2.4.1 → 2.5.2

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 (638) hide show
  1. package/core/api/application.js +12 -12
  2. package/core/api/authentication.js +51 -7
  3. package/core/api/hooks/hooks.authentication.js +1 -59
  4. package/core/api/hooks/hooks.authorisations.js +9 -104
  5. package/core/api/hooks/hooks.model.js +4 -0
  6. package/core/api/hooks/hooks.push.js +18 -14
  7. package/core/api/hooks/hooks.users.js +0 -91
  8. package/core/api/hooks/index.js +0 -2
  9. package/core/api/services/account/account.service.js +1 -1
  10. package/core/api/services/authorisations/authorisations.service.js +28 -31
  11. package/core/api/services/index.js +42 -50
  12. package/core/api/services/messages/messages.hooks.js +4 -3
  13. package/core/api/services/users/users.hooks.js +4 -3
  14. package/core/api/services/users/users.service.js +5 -0
  15. package/core/client/api.js +182 -71
  16. package/core/client/broadcaster.js +20 -0
  17. package/core/client/capabilities.js +17 -7
  18. package/core/client/components/KActivity.vue +29 -34
  19. package/core/client/components/KAvatar.vue +0 -6
  20. package/core/client/components/KChip.vue +142 -39
  21. package/core/client/components/KContent.vue +13 -32
  22. package/core/client/components/KDialog.vue +29 -8
  23. package/core/client/components/KEditor.vue +120 -0
  24. package/core/client/components/KFollower.vue +75 -0
  25. package/core/client/components/KLogo.vue +2 -3
  26. package/core/client/components/KModal.vue +30 -10
  27. package/core/client/components/KSponsor.vue +1 -1
  28. package/core/client/components/KTextArea.vue +2 -5
  29. package/core/client/components/account/KDeleteAccountManager.vue +1 -1
  30. package/core/client/components/account/KProfile.vue +52 -14
  31. package/core/client/components/account/KSubscription.vue +19 -9
  32. package/core/client/components/account/KSubscriptionsManager.vue +10 -11
  33. package/core/client/components/action/KAction.vue +44 -24
  34. package/core/client/components/action/KBugReportAction.vue +4 -5
  35. package/core/client/components/action/KToggleStickyVisibility.vue +41 -0
  36. package/core/client/components/action/KToggleWidgetVisibility.vue +41 -0
  37. package/core/client/components/app/KPlatform.vue +122 -35
  38. package/core/client/components/app/KRequestProgressBar.vue +59 -0
  39. package/core/client/components/app/KSettings.vue +13 -2
  40. package/core/client/components/app/KTour.vue +2 -2
  41. package/core/client/components/chart/KTimeSeriesChart.vue +11 -3
  42. package/core/client/components/collection/KCard.vue +27 -33
  43. package/core/client/components/collection/KCardSection.vue +3 -23
  44. package/core/client/components/collection/KColumn.vue +0 -5
  45. package/core/client/components/collection/KDescriptionCardSection.vue +10 -5
  46. package/core/client/components/collection/KFilterView.vue +15 -0
  47. package/core/client/components/collection/KGrid.vue +4 -9
  48. package/core/client/components/collection/KHistory.vue +0 -5
  49. package/core/client/components/collection/KHistoryEntry.vue +0 -2
  50. package/core/client/components/collection/KItem.vue +1 -2
  51. package/core/client/components/collection/KSearchFilterControl.vue +139 -0
  52. package/core/client/components/collection/KTable.vue +1 -4
  53. package/core/client/components/collection/KTagsFilterControl.vue +70 -0
  54. package/core/client/components/collection/KTagsFilterView.vue +61 -0
  55. package/core/client/components/collection/KTimeFilterControl.vue +40 -0
  56. package/core/client/components/collection/KTimeFilterView.vue +106 -0
  57. package/core/client/components/collection/KTimeLine.vue +18 -11
  58. package/core/client/components/document/KBrowser.vue +283 -0
  59. package/core/client/components/document/KCsv.vue +52 -0
  60. package/core/client/components/document/KDocument.vue +19 -5
  61. package/core/client/components/document/KImage.vue +50 -19
  62. package/core/client/components/document/KMarkdown.vue +10 -2
  63. package/core/client/components/document/KUploader.vue +126 -0
  64. package/core/client/components/document/KVideo.vue +39 -0
  65. package/core/client/components/form/KDateField.vue +70 -0
  66. package/core/client/components/form/KDateTimeRangeField.vue +6 -17
  67. package/core/client/components/form/KDatetimeField.vue +6 -13
  68. package/core/client/components/form/KForm.vue +8 -8
  69. package/core/client/components/form/KOptionsField.vue +2 -0
  70. package/core/client/components/form/KResolutionField.vue +54 -52
  71. package/core/client/components/form/KSelectField.vue +27 -13
  72. package/core/client/components/form/KTextareaField.vue +23 -5
  73. package/core/client/components/graphics/KIcon.vue +64 -0
  74. package/core/client/components/index.js +1 -3
  75. package/core/client/components/input/KColorPicker.vue +70 -0
  76. package/core/client/components/input/KIconPicker.vue +188 -0
  77. package/core/client/components/input/KShapePicker.vue +81 -0
  78. package/core/client/components/input/index.js +7 -1
  79. package/core/client/components/layout/KFab.vue +1 -1
  80. package/core/client/components/layout/KLayout.vue +14 -2
  81. package/core/client/components/layout/KOpener.vue +9 -11
  82. package/core/client/components/layout/KPage.vue +31 -17
  83. package/core/client/components/layout/KWindow.vue +34 -18
  84. package/core/client/components/menu/KMenu.vue +52 -36
  85. package/core/client/components/menu/KSubMenu.vue +105 -0
  86. package/core/client/components/messages/KMessageCard.vue +207 -0
  87. package/core/client/components/messages/KMessageComposer.vue +199 -0
  88. package/core/client/components/messages/KMessagesTimeLine.vue +137 -0
  89. package/core/client/components/messages/index.js +7 -0
  90. package/core/client/components/screen/KErrorScreen.vue +2 -3
  91. package/core/client/components/screen/KLogoutScreen.vue +3 -1
  92. package/core/client/components/screen/KOAuthLoginScreen.vue +15 -0
  93. package/core/client/components/screen/KOAuthLogoutScreen.vue +33 -0
  94. package/core/client/components/screen/KUnauthorizedScreen.vue +16 -0
  95. package/core/client/components/time/KAbsoluteTimeRange.vue +7 -14
  96. package/core/client/components/time/KDate.vue +55 -28
  97. package/core/client/components/time/KDateTime.vue +93 -37
  98. package/core/client/components/time/KDateTimeRange.vue +197 -52
  99. package/core/client/components/time/KTime.vue +55 -27
  100. package/core/client/composables/activity.js +40 -30
  101. package/core/client/composables/{counter.js → collection-counter.js} +2 -4
  102. package/core/client/composables/collection-filter.js +111 -0
  103. package/core/client/composables/collection-timerange.js +56 -0
  104. package/core/client/composables/collection.js +13 -11
  105. package/core/client/composables/context.js +92 -0
  106. package/core/client/composables/errors.js +83 -0
  107. package/core/client/composables/index.js +5 -1
  108. package/core/client/composables/layout.js +14 -11
  109. package/core/client/composables/messages.js +4 -4
  110. package/core/client/composables/pwa.js +20 -27
  111. package/core/client/composables/schema.js +1 -1
  112. package/core/client/composables/screen.js +21 -9
  113. package/core/client/composables/selection.js +16 -4
  114. package/core/client/composables/session.js +13 -7
  115. package/core/client/composables/store.js +2 -1
  116. package/core/client/context.js +38 -0
  117. package/core/client/directives/v-hover.js +7 -4
  118. package/core/client/document.js +43 -15
  119. package/core/client/events.js +2 -2
  120. package/core/client/exporter.js +5 -4
  121. package/core/client/filter.js +1 -8
  122. package/core/client/guards.js +3 -3
  123. package/core/client/hooks/hooks.logger.js +1 -1
  124. package/core/client/hooks/hooks.offline.js +32 -0
  125. package/core/client/hooks/index.js +2 -1
  126. package/core/client/i18n/core_en.json +95 -268
  127. package/core/client/i18n/core_fr.json +181 -353
  128. package/core/client/index.js +22 -8
  129. package/core/client/layout.js +64 -25
  130. package/core/client/local-cache.js +67 -0
  131. package/core/client/local-storage.js +6 -2
  132. package/core/client/mixins/index.js +0 -1
  133. package/core/client/mixins/mixin.base-activity.js +22 -10
  134. package/core/client/mixins/mixin.base-editor.js +1 -1
  135. package/core/client/mixins/mixin.base-field.js +10 -1
  136. package/core/client/mixins/mixin.base-item.js +14 -11
  137. package/core/client/mixins/mixin.service.js +1 -5
  138. package/core/client/platform.js +44 -0
  139. package/core/client/readers/reader.blob.js +3 -3
  140. package/core/client/readers/reader.csv.js +2 -2
  141. package/core/client/readers/reader.json.js +2 -2
  142. package/core/client/services/index.js +7 -11
  143. package/core/client/storage.js +43 -8
  144. package/core/client/template-context.js +14 -14
  145. package/core/client/time.js +2 -2
  146. package/core/client/units.js +7 -4
  147. package/core/client/utils/index.js +7 -5
  148. package/core/client/utils/utils.collection.js +71 -0
  149. package/core/client/utils/utils.colors.js +29 -8
  150. package/core/client/utils/utils.content.js +14 -14
  151. package/core/client/utils/utils.files.js +17 -0
  152. package/core/client/utils/utils.items.js +4 -0
  153. package/core/client/utils/utils.math.js +18 -1
  154. package/core/client/utils/utils.push.js +22 -13
  155. package/core/client/utils/utils.screen.js +6 -2
  156. package/core/client/utils/utils.services.js +42 -0
  157. package/core/client/utils/utils.session.js +48 -12
  158. package/core/client/utils/utils.shapes.js +15 -11
  159. package/core/common/permissions.js +3 -108
  160. package/core/common/schemas/messages.update.json +16 -0
  161. package/core/common/schemas/settings.update.json +27 -8
  162. package/core/common/utils.js +2 -0
  163. package/core/common/utils.offline.js +38 -0
  164. package/coverage/core/api/application.js.html +296 -296
  165. package/coverage/core/api/authentication.js.html +206 -74
  166. package/coverage/core/api/db.js.html +61 -61
  167. package/coverage/core/api/hooks/hooks.authentication.js.html +15 -189
  168. package/coverage/core/api/hooks/hooks.authorisations.js.html +172 -460
  169. package/coverage/core/api/hooks/hooks.groups.js.html +1 -1
  170. package/coverage/core/api/hooks/hooks.logger.js.html +16 -16
  171. package/coverage/core/api/hooks/hooks.model.js.html +52 -52
  172. package/coverage/core/api/hooks/hooks.organisations.js.html +1 -1
  173. package/coverage/core/api/hooks/hooks.push.js.html +58 -46
  174. package/coverage/core/api/hooks/hooks.query.js.html +136 -136
  175. package/coverage/core/api/hooks/hooks.schemas.js.html +1 -1
  176. package/coverage/core/api/hooks/hooks.service.js.html +1 -1
  177. package/coverage/core/api/hooks/hooks.storage.js.html +1 -1
  178. package/coverage/core/api/hooks/hooks.users.js.html +55 -328
  179. package/coverage/core/api/hooks/index.html +58 -88
  180. package/coverage/core/api/hooks/index.js.html +4 -10
  181. package/coverage/core/api/index.html +39 -54
  182. package/coverage/core/api/index.js.html +1 -1
  183. package/coverage/core/api/marshall.js.html +1 -1
  184. package/coverage/core/api/models/groups.model.mongodb.js.html +1 -1
  185. package/coverage/core/api/models/index.html +13 -58
  186. package/coverage/core/api/models/messages.model.mongodb.js.html +35 -35
  187. package/coverage/core/api/models/organisations.model.mongodb.js.html +3 -3
  188. package/coverage/core/api/models/tags.model.mongodb.js.html +1 -1
  189. package/coverage/core/api/models/users.model.mongodb.js.html +1 -1
  190. package/coverage/core/api/services/account/account.hooks.js.html +1 -1
  191. package/coverage/core/api/services/account/account.service.js.html +67 -67
  192. package/coverage/core/api/services/account/index.html +16 -16
  193. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
  194. package/coverage/core/api/services/authorisations/authorisations.service.js.html +120 -117
  195. package/coverage/core/api/services/authorisations/index.html +15 -15
  196. package/coverage/core/api/services/databases/databases.hooks.js.html +82 -82
  197. package/coverage/core/api/services/databases/databases.service.js.html +20 -20
  198. package/coverage/core/api/services/databases/index.html +32 -32
  199. package/coverage/core/api/services/groups/groups.hooks.js.html +1 -1
  200. package/coverage/core/api/services/groups/index.html +1 -1
  201. package/coverage/core/api/services/import-export/import-export.hooks.js.html +1 -1
  202. package/coverage/core/api/services/import-export/import-export.service.js.html +1 -1
  203. package/coverage/core/api/services/import-export/index.html +1 -1
  204. package/coverage/core/api/services/index.html +21 -21
  205. package/coverage/core/api/services/index.js.html +118 -154
  206. package/coverage/core/api/services/mailer/index.html +1 -1
  207. package/coverage/core/api/services/mailer/mailer.hooks.js.html +1 -1
  208. package/coverage/core/api/services/mailer/mailer.service.js.html +1 -1
  209. package/coverage/core/api/services/messages/index.html +21 -21
  210. package/coverage/core/api/services/messages/messages.hooks.js.html +86 -86
  211. package/coverage/core/api/services/organisations/index.html +1 -1
  212. package/coverage/core/api/services/organisations/organisations.hooks.js.html +1 -1
  213. package/coverage/core/api/services/organisations/organisations.service.js.html +23 -23
  214. package/coverage/core/api/services/push/index.html +1 -1
  215. package/coverage/core/api/services/push/push.hooks.js.html +1 -1
  216. package/coverage/core/api/services/push/push.service.js.html +1 -1
  217. package/coverage/core/api/services/storage/index.html +5 -5
  218. package/coverage/core/api/services/storage/storage.hooks.js.html +1 -1
  219. package/coverage/core/api/services/storage/storage.service.js.html +27 -27
  220. package/coverage/core/api/services/tags/index.html +1 -1
  221. package/coverage/core/api/services/tags/tags.hooks.js.html +1 -1
  222. package/coverage/core/api/services/users/index.html +23 -8
  223. package/coverage/core/api/services/users/users.hooks.js.html +1 -1
  224. package/coverage/core/api/services/users/users.service.js.html +100 -0
  225. package/coverage/core/api/utils.js.html +1 -1
  226. package/coverage/core/common/errors.js.html +1 -1
  227. package/coverage/core/common/index.html +42 -27
  228. package/coverage/core/common/index.js.html +1 -1
  229. package/coverage/core/common/permissions.js.html +195 -510
  230. package/coverage/core/common/schema.js.html +1 -1
  231. package/coverage/core/common/utils.js.html +12 -6
  232. package/coverage/core/common/utils.offline.js.html +199 -0
  233. package/coverage/index.html +121 -166
  234. package/coverage/lcov-report/core/api/application.js.html +296 -296
  235. package/coverage/lcov-report/core/api/authentication.js.html +206 -74
  236. package/coverage/lcov-report/core/api/db.js.html +61 -61
  237. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +15 -189
  238. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +172 -460
  239. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +1 -1
  240. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +16 -16
  241. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +52 -52
  242. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +1 -1
  243. package/coverage/lcov-report/core/api/hooks/hooks.push.js.html +58 -46
  244. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +136 -136
  245. package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +1 -1
  246. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +1 -1
  247. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +1 -1
  248. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +55 -328
  249. package/coverage/lcov-report/core/api/hooks/index.html +58 -88
  250. package/coverage/lcov-report/core/api/hooks/index.js.html +4 -10
  251. package/coverage/lcov-report/core/api/index.html +39 -54
  252. package/coverage/lcov-report/core/api/index.js.html +1 -1
  253. package/coverage/lcov-report/core/api/marshall.js.html +1 -1
  254. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +1 -1
  255. package/coverage/lcov-report/core/api/models/index.html +13 -58
  256. package/coverage/lcov-report/core/api/models/messages.model.mongodb.js.html +35 -35
  257. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +3 -3
  258. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +1 -1
  259. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +1 -1
  260. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +1 -1
  261. package/coverage/lcov-report/core/api/services/account/account.service.js.html +67 -67
  262. package/coverage/lcov-report/core/api/services/account/index.html +16 -16
  263. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
  264. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +120 -117
  265. package/coverage/lcov-report/core/api/services/authorisations/index.html +15 -15
  266. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +82 -82
  267. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +20 -20
  268. package/coverage/lcov-report/core/api/services/databases/index.html +32 -32
  269. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +1 -1
  270. package/coverage/lcov-report/core/api/services/groups/index.html +1 -1
  271. package/coverage/lcov-report/core/api/services/import-export/import-export.hooks.js.html +1 -1
  272. package/coverage/lcov-report/core/api/services/import-export/import-export.service.js.html +1 -1
  273. package/coverage/lcov-report/core/api/services/import-export/index.html +1 -1
  274. package/coverage/lcov-report/core/api/services/index.html +21 -21
  275. package/coverage/lcov-report/core/api/services/index.js.html +118 -154
  276. package/coverage/lcov-report/core/api/services/mailer/index.html +1 -1
  277. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +1 -1
  278. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +1 -1
  279. package/coverage/lcov-report/core/api/services/messages/index.html +21 -21
  280. package/coverage/lcov-report/core/api/services/messages/messages.hooks.js.html +86 -86
  281. package/coverage/lcov-report/core/api/services/organisations/index.html +1 -1
  282. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +1 -1
  283. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +23 -23
  284. package/coverage/lcov-report/core/api/services/push/index.html +1 -1
  285. package/coverage/lcov-report/core/api/services/push/push.hooks.js.html +1 -1
  286. package/coverage/lcov-report/core/api/services/push/push.service.js.html +1 -1
  287. package/coverage/lcov-report/core/api/services/storage/index.html +5 -5
  288. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +1 -1
  289. package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +27 -27
  290. package/coverage/lcov-report/core/api/services/tags/index.html +1 -1
  291. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +1 -1
  292. package/coverage/lcov-report/core/api/services/users/index.html +23 -8
  293. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +1 -1
  294. package/coverage/lcov-report/core/api/services/users/users.service.js.html +100 -0
  295. package/coverage/lcov-report/core/api/utils.js.html +1 -1
  296. package/coverage/lcov-report/core/common/errors.js.html +1 -1
  297. package/coverage/lcov-report/core/common/index.html +42 -27
  298. package/coverage/lcov-report/core/common/index.js.html +1 -1
  299. package/coverage/lcov-report/core/common/permissions.js.html +195 -510
  300. package/coverage/lcov-report/core/common/schema.js.html +1 -1
  301. package/coverage/lcov-report/core/common/utils.js.html +12 -6
  302. package/coverage/lcov-report/core/common/utils.offline.js.html +199 -0
  303. package/coverage/lcov-report/index.html +121 -166
  304. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +33 -27
  305. package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +1 -1
  306. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +4 -4
  307. package/coverage/lcov-report/map/api/hooks/index.html +5 -5
  308. package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
  309. package/coverage/lcov-report/map/api/index.html +1 -1
  310. package/coverage/lcov-report/map/api/index.js.html +1 -1
  311. package/coverage/lcov-report/map/api/marshall.js.html +1 -1
  312. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
  313. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
  314. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +1 -1
  315. package/coverage/lcov-report/map/api/models/index.html +1 -1
  316. package/coverage/lcov-report/map/api/models/projects.model.mongodb.js.html +1 -1
  317. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
  318. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
  319. package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
  320. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +10 -7
  321. package/coverage/lcov-report/map/api/services/catalog/index.html +5 -5
  322. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  323. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  324. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +78 -9
  325. package/coverage/lcov-report/map/api/services/features/features.service.js.html +307 -4
  326. package/coverage/lcov-report/map/api/services/features/index.html +7 -7
  327. package/coverage/lcov-report/map/api/services/index.html +5 -5
  328. package/coverage/lcov-report/map/api/services/index.js.html +171 -42
  329. package/coverage/lcov-report/map/api/services/projects/index.html +1 -1
  330. package/coverage/lcov-report/map/api/services/projects/projects.hooks.js.html +1 -1
  331. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
  332. package/coverage/lcov-report/map/common/errors.js.html +1 -1
  333. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +8 -5
  334. package/coverage/lcov-report/map/common/grid.js.html +1 -1
  335. package/coverage/lcov-report/map/common/index.html +5 -5
  336. package/coverage/lcov-report/map/common/index.js.html +1 -1
  337. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
  338. package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
  339. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
  340. package/coverage/lcov-report/map/common/opendap-utils.js.html +1 -1
  341. package/coverage/lcov-report/map/common/permissions.js.html +1 -1
  342. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
  343. package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
  344. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +1 -1
  345. package/coverage/lcov-report/map/common/wcs-utils.js.html +1 -1
  346. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1 -1
  347. package/coverage/lcov-report/map/common/wfs-utils.js.html +1 -1
  348. package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
  349. package/coverage/lcov-report/map/common/wmts-utils.js.html +1 -1
  350. package/coverage/lcov.info +2314 -3167
  351. package/coverage/map/api/hooks/hooks.catalog.js.html +33 -27
  352. package/coverage/map/api/hooks/hooks.features.js.html +1 -1
  353. package/coverage/map/api/hooks/hooks.query.js.html +4 -4
  354. package/coverage/map/api/hooks/index.html +5 -5
  355. package/coverage/map/api/hooks/index.js.html +1 -1
  356. package/coverage/map/api/index.html +1 -1
  357. package/coverage/map/api/index.js.html +1 -1
  358. package/coverage/map/api/marshall.js.html +1 -1
  359. package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
  360. package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
  361. package/coverage/map/api/models/features.model.mongodb.js.html +1 -1
  362. package/coverage/map/api/models/index.html +1 -1
  363. package/coverage/map/api/models/projects.model.mongodb.js.html +1 -1
  364. package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
  365. package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
  366. package/coverage/map/api/services/alerts/index.html +1 -1
  367. package/coverage/map/api/services/catalog/catalog.hooks.js.html +10 -7
  368. package/coverage/map/api/services/catalog/index.html +5 -5
  369. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  370. package/coverage/map/api/services/daptiles/index.html +1 -1
  371. package/coverage/map/api/services/features/features.hooks.js.html +78 -9
  372. package/coverage/map/api/services/features/features.service.js.html +307 -4
  373. package/coverage/map/api/services/features/index.html +7 -7
  374. package/coverage/map/api/services/index.html +5 -5
  375. package/coverage/map/api/services/index.js.html +171 -42
  376. package/coverage/map/api/services/projects/index.html +1 -1
  377. package/coverage/map/api/services/projects/projects.hooks.js.html +1 -1
  378. package/coverage/map/common/dynamic-grid-source.js.html +1 -1
  379. package/coverage/map/common/errors.js.html +1 -1
  380. package/coverage/map/common/geotiff-grid-source.js.html +8 -5
  381. package/coverage/map/common/grid.js.html +1 -1
  382. package/coverage/map/common/index.html +5 -5
  383. package/coverage/map/common/index.js.html +1 -1
  384. package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
  385. package/coverage/map/common/moment-utils.js.html +1 -1
  386. package/coverage/map/common/opendap-grid-source.js.html +1 -1
  387. package/coverage/map/common/opendap-utils.js.html +1 -1
  388. package/coverage/map/common/permissions.js.html +1 -1
  389. package/coverage/map/common/time-based-grid-source.js.html +1 -1
  390. package/coverage/map/common/tms-utils.js.html +1 -1
  391. package/coverage/map/common/wcs-grid-source.js.html +1 -1
  392. package/coverage/map/common/wcs-utils.js.html +1 -1
  393. package/coverage/map/common/weacast-grid-source.js.html +1 -1
  394. package/coverage/map/common/wfs-utils.js.html +1 -1
  395. package/coverage/map/common/wms-utils.js.html +1 -1
  396. package/coverage/map/common/wmts-utils.js.html +1 -1
  397. package/coverage/tmp/{coverage-280506-1731704745613-0.json → coverage-122123-1739872365211-0.json} +1 -1
  398. package/coverage/tmp/{coverage-280518-1731704745599-0.json → coverage-122135-1739872365196-0.json} +1 -1
  399. package/coverage/tmp/{coverage-280529-1731704745588-0.json → coverage-122146-1739872365184-0.json} +1 -1
  400. package/coverage/tmp/{coverage-280541-1731704745574-0.json → coverage-122158-1739872365169-0.json} +1 -1
  401. package/coverage/tmp/{coverage-280548-1731704745545-0.json → coverage-122165-1739872365141-0.json} +1 -1
  402. package/extras/configs/helpers.js +78 -0
  403. package/extras/configs/panes.left.js +118 -0
  404. package/extras/configs/panes.top.js +222 -0
  405. package/extras/configs/stickies.js +57 -0
  406. package/extras/configs/widgets.left.js +23 -0
  407. package/extras/configs/widgets.top.js +73 -0
  408. package/extras/css/core.variables.scss +8 -0
  409. package/extras/images/north.svg +3 -0
  410. package/extras/tours/map/side-nav.js +3 -3
  411. package/map/api/hooks/hooks.catalog.js +56 -23
  412. package/map/api/hooks/hooks.query.js +19 -24
  413. package/map/api/models/catalog.model.mongodb.js +16 -2
  414. package/{core/api/models/groups.model.mongodb.js → map/api/models/styles.model.mongodb.js} +2 -1
  415. package/map/api/services/catalog/catalog.hooks.js +13 -7
  416. package/map/api/services/features/features.hooks.js +28 -5
  417. package/map/api/services/features/features.service.js +101 -0
  418. package/map/api/services/index.js +125 -46
  419. package/map/api/services/styles/styles.hooks.js +37 -0
  420. package/map/client/cesium/utils/index.js +1 -0
  421. package/map/client/cesium/utils/utils.cesium.js +397 -0
  422. package/map/client/cesium/utils/utils.features.js +8 -0
  423. package/map/client/cesium/utils/utils.geojson.js +59 -0
  424. package/map/client/cesium/utils/utils.style.js +134 -17
  425. package/map/client/components/KEditLayerData.vue +17 -79
  426. package/map/client/components/KFeatureEditor.vue +2 -7
  427. package/map/client/components/KFeaturesChart.vue +2 -6
  428. package/map/client/components/KFeaturesFilterEditor.vue +300 -0
  429. package/map/client/components/KFeaturesFilterManager.vue +196 -0
  430. package/map/client/components/KFeaturesTable.vue +0 -5
  431. package/map/client/components/KFilterCondition.vue +303 -0
  432. package/map/client/components/KLayerEditionToolbar.vue +4 -3
  433. package/map/client/components/KLayerEditor.vue +451 -36
  434. package/map/client/components/KMeasureTool.vue +36 -9
  435. package/map/client/components/KProjectMenu.vue +14 -8
  436. package/map/client/components/catalog/KAddLayer.vue +0 -4
  437. package/map/client/components/catalog/KBaseLayersSelector.vue +42 -46
  438. package/map/client/components/catalog/KConnectLayer.vue +295 -291
  439. package/map/client/components/catalog/KCreateLayer.vue +141 -146
  440. package/map/client/components/catalog/KCreateOfflineView.vue +100 -0
  441. package/map/client/components/catalog/KCreateView.vue +2 -8
  442. package/map/client/components/catalog/KFilteredLayerItem.vue +72 -25
  443. package/map/client/components/catalog/KImportLayer.vue +121 -129
  444. package/map/client/components/catalog/KLayerItem.vue +44 -32
  445. package/map/client/components/catalog/KLayersPanel.vue +45 -17
  446. package/map/client/components/catalog/KLayersSelector.vue +51 -50
  447. package/map/client/components/catalog/KProjectManager.vue +4 -8
  448. package/map/client/components/catalog/KProjectSelector.vue +33 -2
  449. package/map/client/components/catalog/KProjectsPanel.vue +84 -106
  450. package/map/client/components/catalog/KSelectLayers.vue +56 -69
  451. package/map/client/components/catalog/KSelectViews.vue +56 -69
  452. package/map/client/components/catalog/KViewSelector.vue +32 -2
  453. package/map/client/components/catalog/KViewsPanel.vue +178 -110
  454. package/map/client/components/catalog/KWeatherLayersSelector.vue +77 -85
  455. package/map/client/components/form/KLocationField.vue +21 -2
  456. package/map/client/components/form/KOwsLayerField.vue +1 -1
  457. package/map/client/components/form/KOwsServiceField.vue +102 -63
  458. package/map/client/components/form/KSelectLayersField.vue +1 -1
  459. package/map/client/components/form/KSelectViewsField.vue +1 -1
  460. package/map/client/components/form/KTimezoneField.vue +0 -1
  461. package/map/client/components/legend/KLegend.vue +4 -4
  462. package/map/client/components/location/KLocationCardSection.vue +16 -0
  463. package/map/client/components/location/KLocationMap.vue +3 -2
  464. package/map/client/components/location/KLocationSearch.vue +46 -8
  465. package/map/client/components/location/KLocationTimeLineCard.vue +25 -3
  466. package/map/client/components/location/KLocationTip.vue +57 -10
  467. package/map/client/components/selection/KFeaturesSelection.vue +71 -0
  468. package/map/client/components/selection/KSelectedLayerFeatures.vue +343 -0
  469. package/map/client/components/stickies/KAttribution.vue +115 -0
  470. package/map/client/components/stickies/KLevelSlider.vue +114 -0
  471. package/map/client/components/stickies/KNorthArrow.vue +26 -0
  472. package/map/client/components/stickies/KPosition.vue +103 -0
  473. package/map/client/components/stickies/KTarget.vue +34 -0
  474. package/map/client/components/styles/KLayerStyleAction.vue +58 -0
  475. package/map/client/components/styles/KStyleEditor.vue +273 -0
  476. package/map/client/components/styles/KStyleEditorSection.vue +79 -0
  477. package/map/client/components/styles/KStyleManager.vue +183 -0
  478. package/map/client/components/styles/KStylePreview.vue +64 -0
  479. package/map/client/components/styles/KStylePreviewItem.vue +68 -0
  480. package/map/client/components/styles/KStylePropertiesGroup.vue +76 -0
  481. package/map/client/components/styles/KStyleProperty.vue +136 -0
  482. package/map/client/components/styles/KStyleTip.vue +118 -0
  483. package/map/client/components/tools/KGeolocateTool.vue +3 -2
  484. package/map/client/components/tools/KSearchTool.vue +34 -6
  485. package/map/client/components/widget/KMapillaryViewer.vue +1 -1
  486. package/map/client/components/widget/KStackableTimeSeries.vue +8 -5
  487. package/map/client/composables/activity.js +29 -43
  488. package/map/client/composables/catalog.js +1 -1
  489. package/map/client/composables/highlight.js +117 -57
  490. package/map/client/composables/location.js +33 -14
  491. package/map/client/composables/project.js +9 -10
  492. package/map/client/composables/selection.js +136 -23
  493. package/map/client/geocoder.js +104 -0
  494. package/map/client/geolocation.js +1 -1
  495. package/map/client/globe.js +3 -0
  496. package/map/client/hooks/hooks.offline.js +95 -0
  497. package/map/client/hooks/index.js +1 -0
  498. package/map/client/i18n/map_en.json +159 -94
  499. package/map/client/i18n/map_fr.json +187 -128
  500. package/map/client/index.js +3 -0
  501. package/map/client/init.js +44 -8
  502. package/map/client/leaflet/BoxSelection.js +2 -2
  503. package/map/client/leaflet/GradientPath.js +84 -4
  504. package/map/client/leaflet/WindBarb.js +323 -0
  505. package/map/client/leaflet/utils/index.js +1 -0
  506. package/map/client/leaflet/utils/utils.events.js +8 -3
  507. package/map/client/leaflet/utils/utils.geojson.js +222 -0
  508. package/map/client/leaflet/utils/utils.style.js +10 -9
  509. package/map/client/map.js +3 -0
  510. package/map/client/mixins/globe/mixin.base-globe.js +151 -19
  511. package/map/client/mixins/globe/mixin.geojson-layers.js +208 -86
  512. package/map/client/mixins/globe/mixin.popup.js +3 -2
  513. package/map/client/mixins/globe/mixin.style.js +3 -1
  514. package/map/client/mixins/globe/mixin.tooltip.js +3 -2
  515. package/map/client/mixins/map/index.js +1 -3
  516. package/map/client/mixins/map/mixin.base-map.js +267 -79
  517. package/map/client/mixins/map/mixin.canvas-layers.js +44 -10
  518. package/map/client/mixins/map/mixin.edit-layers.js +142 -57
  519. package/map/client/mixins/map/mixin.geojson-layers.js +127 -204
  520. package/map/client/mixins/map/mixin.pmtiles-layers.js +24 -11
  521. package/map/client/mixins/map/mixin.tiled-mesh-layers.js +1 -2
  522. package/map/client/mixins/map/mixin.tiled-wind-layers.js +2 -1
  523. package/map/client/mixins/mixin.activity.js +61 -41
  524. package/map/client/mixins/mixin.context.js +19 -14
  525. package/map/client/mixins/mixin.feature-selection.js +0 -1
  526. package/map/client/mixins/mixin.feature-service.js +41 -59
  527. package/map/client/mixins/mixin.weacast.js +1 -1
  528. package/map/client/navigator.js +38 -0
  529. package/map/client/pixi-utils.js +1 -1
  530. package/map/client/planets.js +1 -1
  531. package/map/client/readers/reader.kml.js +57 -1
  532. package/map/client/utils/index.js +1 -0
  533. package/map/client/utils/utils.capture.js +10 -7
  534. package/map/client/utils/utils.catalog.js +2 -2
  535. package/map/client/utils/utils.features.js +193 -39
  536. package/map/client/utils/utils.js +0 -21
  537. package/map/client/utils/utils.layers.js +381 -4
  538. package/map/client/utils/utils.location.js +39 -74
  539. package/map/client/utils/utils.offline.js +89 -0
  540. package/map/client/utils/utils.style.js +133 -80
  541. package/map/common/geotiff-grid-source.js +2 -1
  542. package/map/common/permissions.js +2 -0
  543. package/map/common/schemas/capture.create.json +4 -4
  544. package/map/common/schemas/catalog.update.json +18 -2
  545. package/map/common/schemas/projects.create.json +2 -2
  546. package/map/common/schemas/projects.update.json +2 -2
  547. package/map/common/tms-utils.js +5 -5
  548. package/map/common/wcs-grid-source.js +2 -2
  549. package/map/common/wcs-utils.js +8 -8
  550. package/map/common/wfs-utils.js +10 -10
  551. package/map/common/wms-utils.js +7 -7
  552. package/map/common/wmts-utils.js +6 -6
  553. package/package.json +7 -4
  554. package/test/api/core/account.test.js +0 -72
  555. package/test/api/core/authentication.test.js +184 -0
  556. package/test/api/core/config/default.cjs +1 -3
  557. package/test/api/core/index.test.js +77 -151
  558. package/test/api/core/offline.test.js +55 -0
  559. package/test/api/core/push.test.js +3 -3
  560. package/test/api/core/{test-log-2024-11-05.log → test-log-2025-05-26.log} +1 -9
  561. package/test/api/map/alerts.test.js +1 -1
  562. package/test/api/map/config/default.cjs +2 -1
  563. package/test/api/map/data/vigicrues.observations.Q.json +47042 -0
  564. package/test/api/map/index.test.js +113 -9
  565. package/test/api/map/style.test.js +62 -0
  566. package/test/api/map/{test-log-2024-10-28.log → test-log-2025-05-26.log} +4 -3
  567. package/test/client/core/layout.js +2 -2
  568. package/test/client/core/runner.js +1 -1
  569. package/test/client/core/utils.js +52 -0
  570. package/test/client/map/catalog.js +1 -0
  571. package/core/api/hooks/hooks.groups.js +0 -48
  572. package/core/api/hooks/hooks.organisations.js +0 -152
  573. package/core/api/models/organisations.model.mongodb.js +0 -3
  574. package/core/api/models/tags.model.mongodb.js +0 -10
  575. package/core/api/services/groups/groups.hooks.js +0 -31
  576. package/core/api/services/organisations/organisations.hooks.js +0 -31
  577. package/core/api/services/organisations/organisations.service.js +0 -86
  578. package/core/api/services/tags/tags.hooks.js +0 -31
  579. package/core/api/utils.js +0 -11
  580. package/core/client/components/KChipsPane.vue +0 -103
  581. package/core/client/components/document/index.js +0 -9
  582. package/core/client/components/team/KAddMember.vue +0 -378
  583. package/core/client/components/team/KAddTag.vue +0 -121
  584. package/core/client/components/team/KChangeRole.vue +0 -118
  585. package/core/client/components/team/KGroupCard.vue +0 -110
  586. package/core/client/components/team/KGroupsActivity.vue +0 -78
  587. package/core/client/components/team/KJoinGroup.vue +0 -132
  588. package/core/client/components/team/KMemberCard.vue +0 -328
  589. package/core/client/components/team/KMemberFilter.vue +0 -49
  590. package/core/client/components/team/KMembersActivity.vue +0 -136
  591. package/core/client/components/team/KOrganisationsActivity.vue +0 -51
  592. package/core/client/components/team/KTagCard.vue +0 -72
  593. package/core/client/components/team/KTagsActivity.vue +0 -73
  594. package/core/client/components/team/index.js +0 -9
  595. package/core/client/mixins/mixin.base-context.js +0 -54
  596. package/core/client/utils/utils.platform.js +0 -12
  597. package/core/common/schemas/groups.create.json +0 -28
  598. package/core/common/schemas/groups.update.json +0 -28
  599. package/core/common/schemas/organisations.create.json +0 -28
  600. package/core/common/schemas/organisations.update.json +0 -49
  601. package/core/common/schemas/tags.create.json +0 -35
  602. package/core/common/schemas/tags.update.json +0 -35
  603. package/map/client/components/KAttribution.vue +0 -108
  604. package/map/client/components/KFeaturesFilter.vue +0 -259
  605. package/map/client/components/KLayerStyleEditor.vue +0 -118
  606. package/map/client/components/KLayerStyleForm.vue +0 -740
  607. package/map/client/components/KLevelSlider.vue +0 -100
  608. package/map/client/components/KNorth.vue +0 -31
  609. package/map/client/components/KPositionIndicator.vue +0 -83
  610. package/map/client/components/catalog/KCreateProject.vue +0 -100
  611. package/map/client/mixins/map/mixin.forecast-layers.js +0 -81
  612. package/map/client/mixins/map/mixin.georaster-layers.js +0 -107
  613. package/test/api/core/team.test.js +0 -670
  614. package/test/api/core/test-log-2023-12-19.log +0 -7
  615. package/test/api/core/test-log-2024-01-04.log +0 -14
  616. package/test/api/core/test-log-2024-05-14.log +0 -6
  617. package/test/api/core/test-log-2024-06-06.log +0 -23
  618. package/test/api/core/test-log-2024-06-26.log +0 -25
  619. package/test/api/core/test-log-2024-06-28.log +0 -2
  620. package/test/api/core/test-log-2024-07-09.log +0 -0
  621. package/test/api/core/test-log-2024-08-13.log +0 -69
  622. package/test/api/core/test-log-2024-10-28.log +0 -53
  623. package/test/api/core/test-log-2024-11-15.log +0 -23
  624. package/test/api/core/test-log-2024-11-18.log +0 -0
  625. package/test/api/core/test-log-2024-12-03.log +0 -30
  626. package/test/api/map/test-log-2023-11-24.log +0 -121
  627. package/test/api/map/test-log-2023-12-12.log +0 -29
  628. package/test/api/map/test-log-2023-12-13.log +0 -5
  629. package/test/api/map/test-log-2024-01-04.log +0 -2
  630. package/test/api/map/test-log-2024-01-11.log +0 -1
  631. package/test/api/map/test-log-2024-01-25.log +0 -19
  632. package/test/api/map/test-log-2024-06-06.log +0 -39
  633. package/test/api/map/test-log-2024-08-13.log +0 -13
  634. package/test/api/map/test-log-2024-08-20.log +0 -55
  635. package/test/api/map/test-log-2024-09-09.log +0 -92
  636. /package/extras/{logos → images}/kalisio.png +0 -0
  637. /package/extras/{icons → images}/target.svg +0 -0
  638. /package/test/api/map/data/{vigicrues.observations.json → vigicrues.observations.H.json} +0 -0
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/244</span>
28
+ <span class='fraction'>0/287</span>
29
29
  </div>
30
30
 
31
31
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/244</span>
49
+ <span class='fraction'>0/287</span>
50
50
  </div>
51
51
 
52
52
 
@@ -307,7 +307,93 @@
307
307
  <a name='L242'></a><a href='#L242'>242</a>
308
308
  <a name='L243'></a><a href='#L243'>243</a>
309
309
  <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
354
+ <span class="cline-any cline-no">&nbsp;</span>
355
+ <span class="cline-any cline-no">&nbsp;</span>
356
+ <span class="cline-any cline-no">&nbsp;</span>
357
+ <span class="cline-any cline-no">&nbsp;</span>
358
+ <span class="cline-any cline-no">&nbsp;</span>
359
+ <span class="cline-any cline-no">&nbsp;</span>
360
+ <span class="cline-any cline-no">&nbsp;</span>
361
+ <span class="cline-any cline-no">&nbsp;</span>
362
+ <span class="cline-any cline-no">&nbsp;</span>
363
+ <span class="cline-any cline-no">&nbsp;</span>
364
+ <span class="cline-any cline-no">&nbsp;</span>
365
+ <span class="cline-any cline-no">&nbsp;</span>
366
+ <span class="cline-any cline-no">&nbsp;</span>
367
+ <span class="cline-any cline-no">&nbsp;</span>
368
+ <span class="cline-any cline-no">&nbsp;</span>
369
+ <span class="cline-any cline-no">&nbsp;</span>
370
+ <span class="cline-any cline-no">&nbsp;</span>
371
+ <span class="cline-any cline-no">&nbsp;</span>
372
+ <span class="cline-any cline-no">&nbsp;</span>
373
+ <span class="cline-any cline-no">&nbsp;</span>
374
+ <span class="cline-any cline-no">&nbsp;</span>
375
+ <span class="cline-any cline-no">&nbsp;</span>
376
+ <span class="cline-any cline-no">&nbsp;</span>
377
+ <span class="cline-any cline-no">&nbsp;</span>
378
+ <span class="cline-any cline-no">&nbsp;</span>
379
+ <span class="cline-any cline-no">&nbsp;</span>
380
+ <span class="cline-any cline-no">&nbsp;</span>
381
+ <span class="cline-any cline-no">&nbsp;</span>
382
+ <span class="cline-any cline-no">&nbsp;</span>
383
+ <span class="cline-any cline-no">&nbsp;</span>
384
+ <span class="cline-any cline-no">&nbsp;</span>
385
+ <span class="cline-any cline-no">&nbsp;</span>
386
+ <span class="cline-any cline-no">&nbsp;</span>
387
+ <span class="cline-any cline-no">&nbsp;</span>
388
+ <span class="cline-any cline-no">&nbsp;</span>
389
+ <span class="cline-any cline-no">&nbsp;</span>
390
+ <span class="cline-any cline-no">&nbsp;</span>
391
+ <span class="cline-any cline-no">&nbsp;</span>
392
+ <span class="cline-any cline-no">&nbsp;</span>
393
+ <span class="cline-any cline-no">&nbsp;</span>
394
+ <span class="cline-any cline-no">&nbsp;</span>
395
+ <span class="cline-any cline-no">&nbsp;</span>
396
+ <span class="cline-any cline-no">&nbsp;</span>
311
397
  <span class="cline-any cline-no">&nbsp;</span>
312
398
  <span class="cline-any cline-no">&nbsp;</span>
313
399
  <span class="cline-any cline-no">&nbsp;</span>
@@ -570,7 +656,7 @@
570
656
  <span class="cstat-no" title="statement not covered" > const app = this</span>
571
657
  <span class="cstat-no" title="statement not covered" ></span>
572
658
  <span class="cstat-no" title="statement not covered" > debug('Creating features service with options', options)</span>
573
- <span class="cstat-no" title="statement not covered" > return app.createService(options.collection, Object.assign({</span>
659
+ <span class="cstat-no" title="statement not covered" > const service = app.createService(options.collection, Object.assign({</span>
574
660
  <span class="cstat-no" title="statement not covered" > modelName: 'features',</span>
575
661
  <span class="cstat-no" title="statement not covered" > servicesPath,</span>
576
662
  <span class="cstat-no" title="statement not covered" > modelsPath,</span>
@@ -578,28 +664,46 @@
578
664
  <span class="cstat-no" title="statement not covered" > // FIXME: no real-time events for now since we create big batches,</span>
579
665
  <span class="cstat-no" title="statement not covered" > // does not seem to be sufficient also require a hook (see https://github.com/feathersjs/feathers/issues/922)</span>
580
666
  <span class="cstat-no" title="statement not covered" > events: ['features'],</span>
581
- <span class="cstat-no" title="statement not covered" > methods: ['find', 'get', 'create', 'update', 'patch', 'remove', 'heatmap']</span>
667
+ <span class="cstat-no" title="statement not covered" > methods: ['find', 'get', 'create', 'update', 'patch', 'remove', 'heatmap', 'formatGeoJSON']</span>
582
668
  <span class="cstat-no" title="statement not covered" > }, options))</span>
669
+ <span class="cstat-no" title="statement not covered" > // As a features service can be created dynamically register default permissions for it</span>
670
+ <span class="cstat-no" title="statement not covered" > permissions.defineAbilities.registerHook((subject, can, cannot) =&gt; {</span>
671
+ <span class="cstat-no" title="statement not covered" > can('service', options.collection)</span>
672
+ <span class="cstat-no" title="statement not covered" > can('read', options.collection)</span>
673
+ <span class="cstat-no" title="statement not covered" > })</span>
674
+ <span class="cstat-no" title="statement not covered" > // We then need to update abilities cache</span>
675
+ <span class="cstat-no" title="statement not covered" > const authorisationService = app.getService('authorisations')</span>
676
+ <span class="cstat-no" title="statement not covered" > if (authorisationService) authorisationService.clearAbilities()</span>
677
+ <span class="cstat-no" title="statement not covered" > return service</span>
583
678
  <span class="cstat-no" title="statement not covered" >}</span>
584
679
  <span class="cstat-no" title="statement not covered" ></span>
585
680
  <span class="cstat-no" title="statement not covered" >export function removeFeaturesService (options = {}) {</span>
586
681
  <span class="cstat-no" title="statement not covered" > const app = this</span>
682
+ <span class="cstat-no" title="statement not covered" > debug('Removing features service with options', options)</span>
587
683
  <span class="cstat-no" title="statement not covered" > return app.removeService(app.getService(options.collection, options.context))</span>
588
684
  <span class="cstat-no" title="statement not covered" >}</span>
589
685
  <span class="cstat-no" title="statement not covered" ></span>
590
686
  <span class="cstat-no" title="statement not covered" >export function createCatalogService (options = {}) {</span>
591
687
  <span class="cstat-no" title="statement not covered" > const app = this</span>
592
688
  <span class="cstat-no" title="statement not covered" ></span>
689
+ <span class="cstat-no" title="statement not covered" > // Read default categories/sublegends config, which can be overriden by options</span>
690
+ <span class="cstat-no" title="statement not covered" > const catalogConfig = app.get('catalog') || {}</span>
691
+ <span class="cstat-no" title="statement not covered" > const categories = catalogConfig.categories</span>
692
+ <span class="cstat-no" title="statement not covered" > const sublegends = catalogConfig.sublegends</span>
693
+ <span class="cstat-no" title="statement not covered" ></span>
593
694
  <span class="cstat-no" title="statement not covered" > debug('Creating catalog service with options', options)</span>
594
695
  <span class="cstat-no" title="statement not covered" > return app.createService('catalog', Object.assign({</span>
595
696
  <span class="cstat-no" title="statement not covered" > servicesPath,</span>
596
697
  <span class="cstat-no" title="statement not covered" > modelsPath,</span>
597
- <span class="cstat-no" title="statement not covered" > paginate: { default: 1000, max: 1000 }</span>
698
+ <span class="cstat-no" title="statement not covered" > paginate: { default: 1000, max: 1000 },</span>
699
+ <span class="cstat-no" title="statement not covered" > categories,</span>
700
+ <span class="cstat-no" title="statement not covered" > sublegends</span>
598
701
  <span class="cstat-no" title="statement not covered" > }, options))</span>
599
702
  <span class="cstat-no" title="statement not covered" >}</span>
600
703
  <span class="cstat-no" title="statement not covered" ></span>
601
704
  <span class="cstat-no" title="statement not covered" >export function removeCatalogService (options = {}) {</span>
602
705
  <span class="cstat-no" title="statement not covered" > const app = this</span>
706
+ <span class="cstat-no" title="statement not covered" > debug('Removing catalog service with options', options)</span>
603
707
  <span class="cstat-no" title="statement not covered" > return app.removeService(app.getService('catalog', options.context))</span>
604
708
  <span class="cstat-no" title="statement not covered" >}</span>
605
709
  <span class="cstat-no" title="statement not covered" ></span>
@@ -616,6 +720,7 @@
616
720
  <span class="cstat-no" title="statement not covered" ></span>
617
721
  <span class="cstat-no" title="statement not covered" >export function removeProjectsService (options = {}) {</span>
618
722
  <span class="cstat-no" title="statement not covered" > const app = this</span>
723
+ <span class="cstat-no" title="statement not covered" > debug('Removing projects service with options', options)</span>
619
724
  <span class="cstat-no" title="statement not covered" > return app.removeService(app.getService('projects', options.context))</span>
620
725
  <span class="cstat-no" title="statement not covered" >}</span>
621
726
  <span class="cstat-no" title="statement not covered" ></span>
@@ -633,24 +738,51 @@
633
738
  <span class="cstat-no" title="statement not covered" ></span>
634
739
  <span class="cstat-no" title="statement not covered" >export function removeAlertsService (options = {}) {</span>
635
740
  <span class="cstat-no" title="statement not covered" > const app = this</span>
741
+ <span class="cstat-no" title="statement not covered" > debug('Removing alerts service with options', options)</span>
636
742
  <span class="cstat-no" title="statement not covered" > return app.removeService(app.getService('alerts', options.context))</span>
637
743
  <span class="cstat-no" title="statement not covered" >}</span>
638
744
  <span class="cstat-no" title="statement not covered" ></span>
639
745
  <span class="cstat-no" title="statement not covered" >// Helper to register service and permissions for a layer</span>
640
- <span class="cstat-no" title="statement not covered" >export async function createFeaturesServiceForLayer (options) {</span>
746
+ <span class="cstat-no" title="statement not covered" >export async function createFeaturesServiceForLayer (layer, context) {</span>
641
747
  <span class="cstat-no" title="statement not covered" > const app = this</span>
642
- <span class="cstat-no" title="statement not covered" > const service = await createFeaturesService.call(app, options)</span>
643
- <span class="cstat-no" title="statement not covered" > // Register default permissions for it</span>
644
- <span class="cstat-no" title="statement not covered" > permissions.defineAbilities.registerHook((subject, can, cannot) =&gt; {</span>
645
- <span class="cstat-no" title="statement not covered" > can('service', options.collection)</span>
646
- <span class="cstat-no" title="statement not covered" > can('read', options.collection)</span>
647
- <span class="cstat-no" title="statement not covered" > })</span>
648
- <span class="cstat-no" title="statement not covered" > return service</span>
748
+ <span class="cstat-no" title="statement not covered" > // Check if service(s) are associated to this layer</span>
749
+ <span class="cstat-no" title="statement not covered" > // Avoid create it twice as we can share services between different layers</span>
750
+ <span class="cstat-no" title="statement not covered" > let probeService = (layer.probeService ? app.getService(layer.probeService, context) : null)</span>
751
+ <span class="cstat-no" title="statement not covered" > if (layer.probeService &amp;&amp; !probeService) {</span>
752
+ <span class="cstat-no" title="statement not covered" > probeService = await createFeaturesService.call(app, Object.assign({</span>
753
+ <span class="cstat-no" title="statement not covered" > collection: layer.probeService,</span>
754
+ <span class="cstat-no" title="statement not covered" > context,</span>
755
+ <span class="cstat-no" title="statement not covered" > db: app.db.db(layer.dbName)</span>
756
+ <span class="cstat-no" title="statement not covered" > }, _.pick(layer, ['featureLabel', 'simplifyResult', 'skipEvents', 'simplifyEvents'])))</span>
757
+ <span class="cstat-no" title="statement not covered" > }</span>
758
+ <span class="cstat-no" title="statement not covered" > let service = (layer.service ? app.getService(layer.service, context) : null)</span>
759
+ <span class="cstat-no" title="statement not covered" > if (layer.service &amp;&amp; !service) {</span>
760
+ <span class="cstat-no" title="statement not covered" > service = await createFeaturesService.call(app, Object.assign({</span>
761
+ <span class="cstat-no" title="statement not covered" > collection: layer.service,</span>
762
+ <span class="cstat-no" title="statement not covered" > context,</span>
763
+ <span class="cstat-no" title="statement not covered" > db: app.db.db(layer.dbName)</span>
764
+ <span class="cstat-no" title="statement not covered" > }, _.pick(layer, ['ttl', 'featureId', 'featureIdType', 'featureLabel', 'variables', 'simplifyResult', 'skipEvents', 'simplifyEvents'])))</span>
765
+ <span class="cstat-no" title="statement not covered" > }</span>
766
+ <span class="cstat-no" title="statement not covered" > return service || probeService</span>
767
+ <span class="cstat-no" title="statement not covered" >}</span>
768
+ <span class="cstat-no" title="statement not covered" >// Helper to unregister service for a layer</span>
769
+ <span class="cstat-no" title="statement not covered" >export async function removeFeaturesServiceForLayer (layer, context) {</span>
770
+ <span class="cstat-no" title="statement not covered" > const app = this</span>
771
+ <span class="cstat-no" title="statement not covered" > // Check if service(s) are associated to this layer and remove it</span>
772
+ <span class="cstat-no" title="statement not covered" > let probeService = (layer.probeService ? app.getService(layer.probeService, context) : null)</span>
773
+ <span class="cstat-no" title="statement not covered" > if (layer.probeService &amp;&amp; probeService) {</span>
774
+ <span class="cstat-no" title="statement not covered" > probeService = await removeFeaturesService.call(app, { collection: layer.probeService, context })</span>
775
+ <span class="cstat-no" title="statement not covered" > }</span>
776
+ <span class="cstat-no" title="statement not covered" > let service = (layer.service ? app.getService(layer.service, context) : null)</span>
777
+ <span class="cstat-no" title="statement not covered" > if (layer.service &amp;&amp; service) {</span>
778
+ <span class="cstat-no" title="statement not covered" > service = await removeFeaturesService.call(app, { collection: layer.service, context })</span>
779
+ <span class="cstat-no" title="statement not covered" > }</span>
780
+ <span class="cstat-no" title="statement not covered" > return service || probeService</span>
649
781
  <span class="cstat-no" title="statement not covered" >}</span>
650
782
  <span class="cstat-no" title="statement not covered" >// Helper to create features from source for a layer</span>
651
- <span class="cstat-no" title="statement not covered" >export async function createFeaturesForLayer (features, layer, options) {</span>
783
+ <span class="cstat-no" title="statement not covered" >export async function createFeaturesForLayer (features, layer, options = {}) {</span>
652
784
  <span class="cstat-no" title="statement not covered" > const app = this</span>
653
- <span class="cstat-no" title="statement not covered" > const featuresService = app.getService(layer.service)</span>
785
+ <span class="cstat-no" title="statement not covered" > const featuresService = app.getService(layer.service, options.context)</span>
654
786
  <span class="cstat-no" title="statement not covered" > if (options &amp;&amp; options.filter) features = await options.filter(features, layer, app)</span>
655
787
  <span class="cstat-no" title="statement not covered" > if (!features.length) return</span>
656
788
  <span class="cstat-no" title="statement not covered" > // The unordered option ensure a faster processing when inserting multiple items</span>
@@ -658,15 +790,11 @@
658
790
  <span class="cstat-no" title="statement not covered" > await featuresService.create(features, { mongodb: { ordered: false } })</span>
659
791
  <span class="cstat-no" title="statement not covered" >}</span>
660
792
  <span class="cstat-no" title="statement not covered" ></span>
661
- <span class="cstat-no" title="statement not covered" >export async function createDefaultCatalogLayers (options) {</span>
793
+ <span class="cstat-no" title="statement not covered" >// Read default layers configured and create, if not found in DB, or update it accordingly</span>
794
+ <span class="cstat-no" title="statement not covered" >// Will also clean and feed default data (ie features) if provided as input file</span>
795
+ <span class="cstat-no" title="statement not covered" >export async function createDefaultCatalogLayers (options = {}) {</span>
662
796
  <span class="cstat-no" title="statement not covered" > const app = this</span>
663
- <span class="cstat-no" title="statement not covered" > // Backward compatibility when the sole possible option was a context</span>
664
- <span class="cstat-no" title="statement not covered" > let context</span>
665
- <span class="cstat-no" title="statement not covered" > if (typeof options === 'object') {</span>
666
- <span class="cstat-no" title="statement not covered" > if (options.context) context = options.context</span>
667
- <span class="cstat-no" title="statement not covered" > else if (options._id) context = options</span>
668
- <span class="cstat-no" title="statement not covered" > } else if (typeof options === 'string') context = options</span>
669
- <span class="cstat-no" title="statement not covered" > const catalogService = app.getService('catalog', context)</span>
797
+ <span class="cstat-no" title="statement not covered" > const catalogService = app.getService('catalog', options.context)</span>
670
798
  <span class="cstat-no" title="statement not covered" > const catalog = app.get('catalog')</span>
671
799
  <span class="cstat-no" title="statement not covered" ></span>
672
800
  <span class="cstat-no" title="statement not covered" > const defaultLayers = catalog ? catalog.layers || [] : []</span>
@@ -674,7 +802,15 @@
674
802
  <span class="cstat-no" title="statement not covered" > for (let i = 0; i &lt; defaultLayers.length; i++) {</span>
675
803
  <span class="cstat-no" title="statement not covered" > const defaultLayer = defaultLayers[i]</span>
676
804
  <span class="cstat-no" title="statement not covered" > const createdLayer = _.find(layers, { name: defaultLayer.name })</span>
805
+ <span class="cstat-no" title="statement not covered" > let featuresService</span>
677
806
  <span class="cstat-no" title="statement not covered" > try {</span>
807
+ <span class="cstat-no" title="statement not covered" > // Check if service(s) are associated to this layer and create the related service(s) if required</span>
808
+ <span class="cstat-no" title="statement not covered" > if (defaultLayer.service) {</span>
809
+ <span class="cstat-no" title="statement not covered" > featuresService = app.getService(defaultLayer.service)</span>
810
+ <span class="cstat-no" title="statement not covered" > // Avoid create it twice as we can share services between different layers</span>
811
+ <span class="cstat-no" title="statement not covered" > if (featuresService) continue</span>
812
+ <span class="cstat-no" title="statement not covered" > featuresService = await createFeaturesServiceForLayer.call(app, defaultLayer, options.context)</span>
813
+ <span class="cstat-no" title="statement not covered" > }</span>
678
814
  <span class="cstat-no" title="statement not covered" > // Create or update the layer removing any option only used to manage layer setup</span>
679
815
  <span class="cstat-no" title="statement not covered" > if (!createdLayer) {</span>
680
816
  <span class="cstat-no" title="statement not covered" > app.logger.info('Adding default layer (name = ' + defaultLayer.name + ')')</span>
@@ -686,23 +822,6 @@
686
822
  <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
687
823
  <span class="cstat-no" title="statement not covered" > console.error(error)</span>
688
824
  <span class="cstat-no" title="statement not covered" > }</span>
689
- <span class="cstat-no" title="statement not covered" > // Check if service(s) are associated to this layer</span>
690
- <span class="cstat-no" title="statement not covered" > let featuresService</span>
691
- <span class="cstat-no" title="statement not covered" > if (defaultLayer.service) {</span>
692
- <span class="cstat-no" title="statement not covered" > featuresService = app.getService(defaultLayer.service)</span>
693
- <span class="cstat-no" title="statement not covered" > // Avoid create it twice as we can share services between different layers</span>
694
- <span class="cstat-no" title="statement not covered" > if (featuresService) continue</span>
695
- <span class="cstat-no" title="statement not covered" > featuresService = await createFeaturesServiceForLayer.call(app, Object.assign({</span>
696
- <span class="cstat-no" title="statement not covered" > collection: defaultLayer.service,</span>
697
- <span class="cstat-no" title="statement not covered" > db: app.db.db(defaultLayer.dbName)</span>
698
- <span class="cstat-no" title="statement not covered" > }, _.pick(defaultLayer, ['ttl', 'featureId', 'featureIdType', 'featureLabel', 'variables', 'simplifyResult', 'skipEvents', 'simplifyEvents'])))</span>
699
- <span class="cstat-no" title="statement not covered" > }</span>
700
- <span class="cstat-no" title="statement not covered" > if (defaultLayer.probeService) {</span>
701
- <span class="cstat-no" title="statement not covered" > await createFeaturesServiceForLayer.call(app, Object.assign({</span>
702
- <span class="cstat-no" title="statement not covered" > collection: defaultLayer.probeService,</span>
703
- <span class="cstat-no" title="statement not covered" > db: app.db.db(defaultLayer.dbName)</span>
704
- <span class="cstat-no" title="statement not covered" > }, _.pick(defaultLayer, ['featureLabel', 'simplifyResult', 'skipEvents', 'simplifyEvents'])))</span>
705
- <span class="cstat-no" title="statement not covered" > }</span>
706
825
  <span class="cstat-no" title="statement not covered" > // And if we need to initialize some data as well</span>
707
826
  <span class="cstat-no" title="statement not covered" > if (!createdLayer &amp;&amp; featuresService &amp;&amp; (defaultLayer.url || defaultLayer.fileName)) {</span>
708
827
  <span class="cstat-no" title="statement not covered" > // Cleanup</span>
@@ -745,6 +864,16 @@
745
864
  <span class="cstat-no" title="statement not covered" > }</span>
746
865
  <span class="cstat-no" title="statement not covered" >}</span>
747
866
  <span class="cstat-no" title="statement not covered" ></span>
867
+ <span class="cstat-no" title="statement not covered" >// Create the required features services for layers found in catalog</span>
868
+ <span class="cstat-no" title="statement not covered" >export async function createCatalogFeaturesServices (options = {}) {</span>
869
+ <span class="cstat-no" title="statement not covered" > const app = this</span>
870
+ <span class="cstat-no" title="statement not covered" > const catalogService = app.getService('catalog', options.context)</span>
871
+ <span class="cstat-no" title="statement not covered" > const layers = await catalogService.find({ query: { service: { $exists: true } }, paginate: false, $select: ['service'] })</span>
872
+ <span class="cstat-no" title="statement not covered" > for (let i = 0; i &lt; layers.length; i++) {</span>
873
+ <span class="cstat-no" title="statement not covered" > await createFeaturesServiceForLayer.call(app, layers[i], options.context)</span>
874
+ <span class="cstat-no" title="statement not covered" > }</span>
875
+ <span class="cstat-no" title="statement not covered" >}</span>
876
+ <span class="cstat-no" title="statement not covered" ></span>
748
877
  <span class="cstat-no" title="statement not covered" >export default async function () {</span>
749
878
  <span class="cstat-no" title="statement not covered" > const app = this</span>
750
879
  <span class="cstat-no" title="statement not covered" ></span>
@@ -802,7 +931,7 @@
802
931
  <div class='footer quiet pad2 space-top1 center small'>
803
932
  Code coverage generated by
804
933
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
805
- at 2024-11-15T21:05:45.936Z
934
+ at 2025-02-18T09:52:45.637Z
806
935
  </div>
807
936
  <script src="../../../prettify.js"></script>
808
937
  <script>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at 2024-11-15T21:05:45.936Z
104
+ at 2025-02-18T09:52:45.637Z
105
105
  </div>
106
106
  <script src="../../../../prettify.js"></script>
107
107
  <script>
@@ -424,7 +424,7 @@
424
424
  <div class='footer quiet pad2 space-top1 center small'>
425
425
  Code coverage generated by
426
426
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
427
- at 2024-11-15T21:05:45.936Z
427
+ at 2025-02-18T09:52:45.637Z
428
428
  </div>
429
429
  <script src="../../../../prettify.js"></script>
430
430
  <script>
@@ -451,7 +451,7 @@
451
451
  <div class='footer quiet pad2 space-top1 center small'>
452
452
  Code coverage generated by
453
453
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
454
- at 2024-11-15T21:05:45.936Z
454
+ at 2025-02-18T09:52:45.637Z
455
455
  </div>
456
456
  <script src="../../prettify.js"></script>
457
457
  <script>
@@ -79,7 +79,7 @@
79
79
  <div class='footer quiet pad2 space-top1 center small'>
80
80
  Code coverage generated by
81
81
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
82
- at 2024-11-15T21:05:45.936Z
82
+ at 2025-02-18T09:52:45.637Z
83
83
  </div>
84
84
  <script src="../../prettify.js"></script>
85
85
  <script>
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/152</span>
28
+ <span class='fraction'>0/153</span>
29
29
  </div>
30
30
 
31
31
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/152</span>
49
+ <span class='fraction'>0/153</span>
50
50
  </div>
51
51
 
52
52
 
@@ -215,7 +215,9 @@
215
215
  <a name='L150'></a><a href='#L150'>150</a>
216
216
  <a name='L151'></a><a href='#L151'>151</a>
217
217
  <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
220
+ <span class="cline-any cline-no">&nbsp;</span>
219
221
  <span class="cline-any cline-no">&nbsp;</span>
220
222
  <span class="cline-any cline-no">&nbsp;</span>
221
223
  <span class="cline-any cline-no">&nbsp;</span>
@@ -373,7 +375,8 @@
373
375
  <span class="cstat-no" title="statement not covered" ></span>
374
376
  <span class="cstat-no" title="statement not covered" >// pack r,g,b in an uint32</span>
375
377
  <span class="cstat-no" title="statement not covered" >function packRgb (r, g, b) {</span>
376
- <span class="cstat-no" title="statement not covered" > return r | (g &lt;&lt; 8) | (b &lt;&lt; 16) | (0xFF &lt;&lt; 24)</span>
378
+ <span class="cstat-no" title="statement not covered" > // Using 0x3E as high bits to make float interpretation (IEEE-754) of values between [0.125, 0.5]</span>
379
+ <span class="cstat-no" title="statement not covered" > return r | (g &lt;&lt; 8) | (b &lt;&lt; 16) | (0x3E &lt;&lt; 24)</span>
377
380
  <span class="cstat-no" title="statement not covered" >}</span>
378
381
  <span class="cstat-no" title="statement not covered" ></span>
379
382
  <span class="cstat-no" title="statement not covered" >// return packed rgb as a float value</span>
@@ -526,7 +529,7 @@
526
529
  <div class='footer quiet pad2 space-top1 center small'>
527
530
  Code coverage generated by
528
531
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
529
- at 2024-11-15T21:05:45.936Z
532
+ at 2025-02-18T09:52:45.637Z
530
533
  </div>
531
534
  <script src="../../prettify.js"></script>
532
535
  <script>
@@ -1597,7 +1597,7 @@
1597
1597
  <div class='footer quiet pad2 space-top1 center small'>
1598
1598
  Code coverage generated by
1599
1599
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1600
- at 2024-11-15T21:05:45.936Z
1600
+ at 2025-02-18T09:52:45.637Z
1601
1601
  </div>
1602
1602
  <script src="../../prettify.js"></script>
1603
1603
  <script>
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/2711</span>
28
+ <span class='fraction'>0/2712</span>
29
29
  </div>
30
30
 
31
31
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/2711</span>
49
+ <span class='fraction'>0/2712</span>
50
50
  </div>
51
51
 
52
52
 
@@ -114,13 +114,13 @@
114
114
  <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
115
115
  </td>
116
116
  <td data-value="0" class="pct low">0%</td>
117
- <td data-value="152" class="abs low">0/152</td>
117
+ <td data-value="153" class="abs low">0/153</td>
118
118
  <td data-value="0" class="pct low">0%</td>
119
119
  <td data-value="1" class="abs low">0/1</td>
120
120
  <td data-value="0" class="pct low">0%</td>
121
121
  <td data-value="1" class="abs low">0/1</td>
122
122
  <td data-value="0" class="pct low">0%</td>
123
- <td data-value="152" class="abs low">0/152</td>
123
+ <td data-value="153" class="abs low">0/153</td>
124
124
  </tr>
125
125
 
126
126
  <tr>
@@ -356,7 +356,7 @@
356
356
  <div class='footer quiet pad2 space-top1 center small'>
357
357
  Code coverage generated by
358
358
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
359
- at 2024-11-15T21:05:45.936Z
359
+ at 2025-02-18T09:52:45.637Z
360
360
  </div>
361
361
  <script src="../../prettify.js"></script>
362
362
  <script>
@@ -157,7 +157,7 @@
157
157
  <div class='footer quiet pad2 space-top1 center small'>
158
158
  Code coverage generated by
159
159
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
160
- at 2024-11-15T21:05:45.936Z
160
+ at 2025-02-18T09:52:45.637Z
161
161
  </div>
162
162
  <script src="../../prettify.js"></script>
163
163
  <script>
@@ -541,7 +541,7 @@
541
541
  <div class='footer quiet pad2 space-top1 center small'>
542
542
  Code coverage generated by
543
543
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
544
- at 2024-11-15T21:05:45.936Z
544
+ at 2025-02-18T09:52:45.637Z
545
545
  </div>
546
546
  <script src="../../prettify.js"></script>
547
547
  <script>
@@ -142,7 +142,7 @@
142
142
  <div class='footer quiet pad2 space-top1 center small'>
143
143
  Code coverage generated by
144
144
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
145
- at 2024-11-15T21:05:45.936Z
145
+ at 2025-02-18T09:52:45.637Z
146
146
  </div>
147
147
  <script src="../../prettify.js"></script>
148
148
  <script>
@@ -853,7 +853,7 @@
853
853
  <div class='footer quiet pad2 space-top1 center small'>
854
854
  Code coverage generated by
855
855
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
856
- at 2024-11-15T21:05:45.936Z
856
+ at 2025-02-18T09:52:45.637Z
857
857
  </div>
858
858
  <script src="../../prettify.js"></script>
859
859
  <script>
@@ -811,7 +811,7 @@
811
811
  <div class='footer quiet pad2 space-top1 center small'>
812
812
  Code coverage generated by
813
813
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
814
- at 2024-11-15T21:05:45.936Z
814
+ at 2025-02-18T09:52:45.637Z
815
815
  </div>
816
816
  <script src="../../prettify.js"></script>
817
817
  <script>
@@ -109,7 +109,7 @@
109
109
  <div class='footer quiet pad2 space-top1 center small'>
110
110
  Code coverage generated by
111
111
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
112
- at 2024-11-15T21:05:45.936Z
112
+ at 2025-02-18T09:52:45.637Z
113
113
  </div>
114
114
  <script src="../../prettify.js"></script>
115
115
  <script>
@@ -403,7 +403,7 @@
403
403
  <div class='footer quiet pad2 space-top1 center small'>
404
404
  Code coverage generated by
405
405
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
406
- at 2024-11-15T21:05:45.936Z
406
+ at 2025-02-18T09:52:45.637Z
407
407
  </div>
408
408
  <script src="../../prettify.js"></script>
409
409
  <script>
@@ -259,7 +259,7 @@
259
259
  <div class='footer quiet pad2 space-top1 center small'>
260
260
  Code coverage generated by
261
261
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
262
- at 2024-11-15T21:05:45.936Z
262
+ at 2025-02-18T09:52:45.637Z
263
263
  </div>
264
264
  <script src="../../prettify.js"></script>
265
265
  <script>
@@ -349,7 +349,7 @@
349
349
  <div class='footer quiet pad2 space-top1 center small'>
350
350
  Code coverage generated by
351
351
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
352
- at 2024-11-15T21:05:45.936Z
352
+ at 2025-02-18T09:52:45.637Z
353
353
  </div>
354
354
  <script src="../../prettify.js"></script>
355
355
  <script>
@@ -571,7 +571,7 @@
571
571
  <div class='footer quiet pad2 space-top1 center small'>
572
572
  Code coverage generated by
573
573
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
574
- at 2024-11-15T21:05:45.936Z
574
+ at 2025-02-18T09:52:45.637Z
575
575
  </div>
576
576
  <script src="../../prettify.js"></script>
577
577
  <script>
@@ -1018,7 +1018,7 @@
1018
1018
  <div class='footer quiet pad2 space-top1 center small'>
1019
1019
  Code coverage generated by
1020
1020
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1021
- at 2024-11-15T21:05:45.936Z
1021
+ at 2025-02-18T09:52:45.637Z
1022
1022
  </div>
1023
1023
  <script src="../../prettify.js"></script>
1024
1024
  <script>