@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
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">82.12% </span>
26
+ <span class="strong">80.27% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>317/386</span>
28
+ <span class='fraction'>232/289</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">74.54% </span>
33
+ <span class="strong">66.23% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>82/110</span>
35
+ <span class='fraction'>51/77</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">72.72% </span>
40
+ <span class="strong">75% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>8/11</span>
42
+ <span class='fraction'>6/8</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">82.12% </span>
47
+ <span class="strong">80.27% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>317/386</span>
49
+ <span class='fraction'>232/289</span>
50
50
  </div>
51
51
 
52
52
 
@@ -353,104 +353,7 @@
353
353
  <a name='L288'></a><a href='#L288'>288</a>
354
354
  <a name='L289'></a><a href='#L289'>289</a>
355
355
  <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a>
418
- <a name='L353'></a><a href='#L353'>353</a>
419
- <a name='L354'></a><a href='#L354'>354</a>
420
- <a name='L355'></a><a href='#L355'>355</a>
421
- <a name='L356'></a><a href='#L356'>356</a>
422
- <a name='L357'></a><a href='#L357'>357</a>
423
- <a name='L358'></a><a href='#L358'>358</a>
424
- <a name='L359'></a><a href='#L359'>359</a>
425
- <a name='L360'></a><a href='#L360'>360</a>
426
- <a name='L361'></a><a href='#L361'>361</a>
427
- <a name='L362'></a><a href='#L362'>362</a>
428
- <a name='L363'></a><a href='#L363'>363</a>
429
- <a name='L364'></a><a href='#L364'>364</a>
430
- <a name='L365'></a><a href='#L365'>365</a>
431
- <a name='L366'></a><a href='#L366'>366</a>
432
- <a name='L367'></a><a href='#L367'>367</a>
433
- <a name='L368'></a><a href='#L368'>368</a>
434
- <a name='L369'></a><a href='#L369'>369</a>
435
- <a name='L370'></a><a href='#L370'>370</a>
436
- <a name='L371'></a><a href='#L371'>371</a>
437
- <a name='L372'></a><a href='#L372'>372</a>
438
- <a name='L373'></a><a href='#L373'>373</a>
439
- <a name='L374'></a><a href='#L374'>374</a>
440
- <a name='L375'></a><a href='#L375'>375</a>
441
- <a name='L376'></a><a href='#L376'>376</a>
442
- <a name='L377'></a><a href='#L377'>377</a>
443
- <a name='L378'></a><a href='#L378'>378</a>
444
- <a name='L379'></a><a href='#L379'>379</a>
445
- <a name='L380'></a><a href='#L380'>380</a>
446
- <a name='L381'></a><a href='#L381'>381</a>
447
- <a name='L382'></a><a href='#L382'>382</a>
448
- <a name='L383'></a><a href='#L383'>383</a>
449
- <a name='L384'></a><a href='#L384'>384</a>
450
- <a name='L385'></a><a href='#L385'>385</a>
451
- <a name='L386'></a><a href='#L386'>386</a>
452
- <a name='L387'></a><a href='#L387'>387</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
453
- <span class="cline-any cline-yes">1x</span>
356
+ <a name='L291'></a><a href='#L291'>291</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
454
357
  <span class="cline-any cline-yes">1x</span>
455
358
  <span class="cline-any cline-yes">1x</span>
456
359
  <span class="cline-any cline-yes">1x</span>
@@ -488,12 +391,12 @@
488
391
  <span class="cline-any cline-yes">2x</span>
489
392
  <span class="cline-any cline-yes">1x</span>
490
393
  <span class="cline-any cline-yes">1x</span>
491
- <span class="cline-any cline-yes">23x</span>
394
+ <span class="cline-any cline-yes">4x</span>
492
395
  <span class="cline-any cline-no">&nbsp;</span>
493
396
  <span class="cline-any cline-no">&nbsp;</span>
494
- <span class="cline-any cline-yes">23x</span>
495
- <span class="cline-any cline-yes">23x</span>
496
- <span class="cline-any cline-yes">23x</span>
397
+ <span class="cline-any cline-yes">4x</span>
398
+ <span class="cline-any cline-yes">4x</span>
399
+ <span class="cline-any cline-yes">4x</span>
497
400
  <span class="cline-any cline-yes">1x</span>
498
401
  <span class="cline-any cline-yes">1x</span>
499
402
  <span class="cline-any cline-no">&nbsp;</span>
@@ -504,12 +407,12 @@
504
407
  <span class="cline-any cline-no">&nbsp;</span>
505
408
  <span class="cline-any cline-yes">1x</span>
506
409
  <span class="cline-any cline-yes">1x</span>
507
- <span class="cline-any cline-yes">23x</span>
410
+ <span class="cline-any cline-yes">4x</span>
508
411
  <span class="cline-any cline-no">&nbsp;</span>
509
412
  <span class="cline-any cline-no">&nbsp;</span>
510
- <span class="cline-any cline-yes">23x</span>
511
- <span class="cline-any cline-yes">23x</span>
512
- <span class="cline-any cline-yes">23x</span>
413
+ <span class="cline-any cline-yes">4x</span>
414
+ <span class="cline-any cline-yes">4x</span>
415
+ <span class="cline-any cline-yes">4x</span>
513
416
  <span class="cline-any cline-yes">1x</span>
514
417
  <span class="cline-any cline-yes">1x</span>
515
418
  <span class="cline-any cline-no">&nbsp;</span>
@@ -520,26 +423,9 @@
520
423
  <span class="cline-any cline-no">&nbsp;</span>
521
424
  <span class="cline-any cline-yes">1x</span>
522
425
  <span class="cline-any cline-yes">1x</span>
523
- <span class="cline-any cline-yes">6x</span>
426
+ <span class="cline-any cline-yes">4x</span>
524
427
  <span class="cline-any cline-no">&nbsp;</span>
525
428
  <span class="cline-any cline-no">&nbsp;</span>
526
- <span class="cline-any cline-yes">6x</span>
527
- <span class="cline-any cline-yes">6x</span>
528
- <span class="cline-any cline-yes">6x</span>
529
- <span class="cline-any cline-yes">6x</span>
530
- <span class="cline-any cline-yes">6x</span>
531
- <span class="cline-any cline-yes">6x</span>
532
- <span class="cline-any cline-yes">6x</span>
533
- <span class="cline-any cline-yes">4x</span>
534
- <span class="cline-any cline-yes">4x</span>
535
- <span class="cline-any cline-yes">4x</span>
536
- <span class="cline-any cline-yes">6x</span>
537
- <span class="cline-any cline-yes">6x</span>
538
- <span class="cline-any cline-yes">4x</span>
539
- <span class="cline-any cline-yes">4x</span>
540
- <span class="cline-any cline-yes">4x</span>
541
- <span class="cline-any cline-yes">4x</span>
542
- <span class="cline-any cline-yes">4x</span>
543
429
  <span class="cline-any cline-yes">4x</span>
544
430
  <span class="cline-any cline-yes">4x</span>
545
431
  <span class="cline-any cline-yes">4x</span>
@@ -547,252 +433,134 @@
547
433
  <span class="cline-any cline-yes">4x</span>
548
434
  <span class="cline-any cline-yes">4x</span>
549
435
  <span class="cline-any cline-yes">4x</span>
436
+ <span class="cline-any cline-yes">3x</span>
437
+ <span class="cline-any cline-yes">3x</span>
438
+ <span class="cline-any cline-yes">3x</span>
550
439
  <span class="cline-any cline-yes">4x</span>
551
440
  <span class="cline-any cline-yes">4x</span>
441
+ <span class="cline-any cline-yes">3x</span>
442
+ <span class="cline-any cline-yes">3x</span>
443
+ <span class="cline-any cline-yes">3x</span>
444
+ <span class="cline-any cline-yes">3x</span>
445
+ <span class="cline-any cline-yes">3x</span>
446
+ <span class="cline-any cline-yes">3x</span>
447
+ <span class="cline-any cline-yes">3x</span>
448
+ <span class="cline-any cline-yes">3x</span>
449
+ <span class="cline-any cline-yes">3x</span>
450
+ <span class="cline-any cline-yes">3x</span>
451
+ <span class="cline-any cline-yes">3x</span>
452
+ <span class="cline-any cline-yes">3x</span>
453
+ <span class="cline-any cline-yes">3x</span>
454
+ <span class="cline-any cline-yes">3x</span>
552
455
  <span class="cline-any cline-no">&nbsp;</span>
553
456
  <span class="cline-any cline-no">&nbsp;</span>
554
457
  <span class="cline-any cline-no">&nbsp;</span>
555
- <span class="cline-any cline-yes">4x</span>
556
- <span class="cline-any cline-yes">4x</span>
557
- <span class="cline-any cline-yes">4x</span>
558
- <span class="cline-any cline-yes">4x</span>
559
- <span class="cline-any cline-yes">4x</span>
560
- <span class="cline-any cline-yes">4x</span>
561
- <span class="cline-any cline-yes">4x</span>
562
- <span class="cline-any cline-yes">4x</span>
563
- <span class="cline-any cline-yes">4x</span>
564
- <span class="cline-any cline-yes">4x</span>
565
- <span class="cline-any cline-yes">4x</span>
566
- <span class="cline-any cline-yes">4x</span>
567
- <span class="cline-any cline-yes">4x</span>
568
- <span class="cline-any cline-yes">4x</span>
569
- <span class="cline-any cline-yes">4x</span>
570
- <span class="cline-any cline-yes">1x</span>
571
- <span class="cline-any cline-yes">4x</span>
572
458
  <span class="cline-any cline-yes">3x</span>
573
459
  <span class="cline-any cline-yes">3x</span>
574
- <span class="cline-any cline-yes">4x</span>
575
- <span class="cline-any cline-yes">4x</span>
576
- <span class="cline-any cline-yes">1x</span>
577
- <span class="cline-any cline-yes">1x</span>
460
+ <span class="cline-any cline-yes">3x</span>
461
+ <span class="cline-any cline-yes">3x</span>
462
+ <span class="cline-any cline-yes">3x</span>
463
+ <span class="cline-any cline-yes">3x</span>
464
+ <span class="cline-any cline-yes">3x</span>
465
+ <span class="cline-any cline-yes">3x</span>
466
+ <span class="cline-any cline-yes">3x</span>
467
+ <span class="cline-any cline-yes">3x</span>
468
+ <span class="cline-any cline-yes">3x</span>
469
+ <span class="cline-any cline-yes">3x</span>
470
+ <span class="cline-any cline-yes">3x</span>
471
+ <span class="cline-any cline-yes">3x</span>
472
+ <span class="cline-any cline-yes">3x</span>
578
473
  <span class="cline-any cline-yes">1x</span>
579
474
  <span class="cline-any cline-yes">3x</span>
475
+ <span class="cline-any cline-yes">2x</span>
476
+ <span class="cline-any cline-yes">2x</span>
580
477
  <span class="cline-any cline-yes">3x</span>
581
478
  <span class="cline-any cline-yes">3x</span>
479
+ <span class="cline-any cline-yes">1x</span>
480
+ <span class="cline-any cline-yes">1x</span>
481
+ <span class="cline-any cline-yes">1x</span>
482
+ <span class="cline-any cline-yes">2x</span>
483
+ <span class="cline-any cline-yes">2x</span>
484
+ <span class="cline-any cline-yes">2x</span>
485
+ <span class="cline-any cline-yes">2x</span>
582
486
  <span class="cline-any cline-yes">3x</span>
583
- <span class="cline-any cline-yes">4x</span>
584
487
  <span class="cline-any cline-yes">1x</span>
585
- <span class="cline-any cline-yes">4x</span>
488
+ <span class="cline-any cline-yes">1x</span>
586
489
  <span class="cline-any cline-no">&nbsp;</span>
587
490
  <span class="cline-any cline-no">&nbsp;</span>
588
- <span class="cline-any cline-yes">4x</span>
491
+ <span class="cline-any cline-yes">3x</span>
589
492
  <span class="cline-any cline-yes">1x</span>
590
493
  <span class="cline-any cline-yes">1x</span>
591
494
  <span class="cline-any cline-yes">1x</span>
592
495
  <span class="cline-any cline-yes">1x</span>
593
496
  <span class="cline-any cline-yes">1x</span>
497
+ <span class="cline-any cline-yes">3x</span>
498
+ <span class="cline-any cline-yes">2x</span>
499
+ <span class="cline-any cline-yes">2x</span>
594
500
  <span class="cline-any cline-yes">4x</span>
595
- <span class="cline-any cline-yes">4x</span>
596
- <span class="cline-any cline-yes">4x</span>
597
- <span class="cline-any cline-yes">6x</span>
598
501
  <span class="cline-any cline-yes">1x</span>
599
502
  <span class="cline-any cline-yes">1x</span>
600
- <span class="cline-any cline-yes">278x</span>
503
+ <span class="cline-any cline-yes">106x</span>
601
504
  <span class="cline-any cline-no">&nbsp;</span>
602
505
  <span class="cline-any cline-no">&nbsp;</span>
603
- <span class="cline-any cline-yes">278x</span>
604
- <span class="cline-any cline-yes">278x</span>
605
- <span class="cline-any cline-yes">278x</span>
606
- <span class="cline-any cline-yes">278x</span>
607
- <span class="cline-any cline-yes">278x</span>
608
- <span class="cline-any cline-yes">278x</span>
609
- <span class="cline-any cline-yes">278x</span>
610
- <span class="cline-any cline-yes">278x</span>
611
- <span class="cline-any cline-yes">278x</span>
612
- <span class="cline-any cline-yes">278x</span>
613
- <span class="cline-any cline-yes">278x</span>
614
- <span class="cline-any cline-yes">278x</span>
615
- <span class="cline-any cline-yes">23x</span>
616
- <span class="cline-any cline-yes">23x</span>
617
- <span class="cline-any cline-yes">23x</span>
618
- <span class="cline-any cline-yes">278x</span>
619
- <span class="cline-any cline-yes">278x</span>
620
- <span class="cline-any cline-yes">6x</span>
621
- <span class="cline-any cline-yes">6x</span>
622
- <span class="cline-any cline-yes">6x</span>
623
- <span class="cline-any cline-yes">278x</span>
624
- <span class="cline-any cline-yes">278x</span>
506
+ <span class="cline-any cline-yes">106x</span>
507
+ <span class="cline-any cline-yes">106x</span>
508
+ <span class="cline-any cline-yes">106x</span>
509
+ <span class="cline-any cline-yes">106x</span>
510
+ <span class="cline-any cline-yes">106x</span>
511
+ <span class="cline-any cline-yes">106x</span>
512
+ <span class="cline-any cline-yes">106x</span>
513
+ <span class="cline-any cline-yes">106x</span>
514
+ <span class="cline-any cline-yes">106x</span>
515
+ <span class="cline-any cline-yes">106x</span>
516
+ <span class="cline-any cline-yes">106x</span>
517
+ <span class="cline-any cline-yes">106x</span>
518
+ <span class="cline-any cline-yes">10x</span>
519
+ <span class="cline-any cline-yes">10x</span>
520
+ <span class="cline-any cline-yes">10x</span>
521
+ <span class="cline-any cline-yes">106x</span>
522
+ <span class="cline-any cline-yes">106x</span>
523
+ <span class="cline-any cline-yes">5x</span>
524
+ <span class="cline-any cline-yes">5x</span>
525
+ <span class="cline-any cline-yes">5x</span>
526
+ <span class="cline-any cline-yes">106x</span>
527
+ <span class="cline-any cline-yes">106x</span>
625
528
  <span class="cline-any cline-no">&nbsp;</span>
626
529
  <span class="cline-any cline-no">&nbsp;</span>
627
530
  <span class="cline-any cline-no">&nbsp;</span>
628
- <span class="cline-any cline-yes">278x</span>
629
- <span class="cline-any cline-yes">278x</span>
630
- <span class="cline-any cline-yes">77x</span>
631
- <span class="cline-any cline-yes">77x</span>
632
- <span class="cline-any cline-yes">77x</span>
633
- <span class="cline-any cline-yes">77x</span>
634
- <span class="cline-any cline-yes">77x</span>
635
- <span class="cline-any cline-yes">278x</span>
636
- <span class="cline-any cline-yes">278x</span>
637
- <span class="cline-any cline-yes">278x</span>
638
- <span class="cline-any cline-yes">63x</span>
639
- <span class="cline-any cline-yes">63x</span>
640
- <span class="cline-any cline-yes">63x</span>
641
- <span class="cline-any cline-yes">63x</span>
642
- <span class="cline-any cline-yes">63x</span>
531
+ <span class="cline-any cline-yes">106x</span>
532
+ <span class="cline-any cline-yes">106x</span>
643
533
  <span class="cline-any cline-yes">6x</span>
644
534
  <span class="cline-any cline-yes">6x</span>
645
535
  <span class="cline-any cline-yes">6x</span>
646
- <span class="cline-any cline-no">&nbsp;</span>
647
- <span class="cline-any cline-no">&nbsp;</span>
648
536
  <span class="cline-any cline-yes">6x</span>
649
- <span class="cline-any cline-yes">63x</span>
650
- <span class="cline-any cline-yes">63x</span>
651
- <span class="cline-any cline-yes">63x</span>
652
537
  <span class="cline-any cline-yes">6x</span>
653
- <span class="cline-any cline-yes">63x</span>
654
- <span class="cline-any cline-yes">63x</span>
655
- <span class="cline-any cline-yes">63x</span>
656
- <span class="cline-any cline-yes">3x</span>
657
- <span class="cline-any cline-yes">3x</span>
658
- <span class="cline-any cline-yes">3x</span>
659
- <span class="cline-any cline-yes">60x</span>
660
- <span class="cline-any cline-yes">63x</span>
661
- <span class="cline-any cline-yes">44x</span>
662
- <span class="cline-any cline-yes">44x</span>
663
- <span class="cline-any cline-yes">44x</span>
664
- <span class="cline-any cline-yes">44x</span>
665
- <span class="cline-any cline-yes">44x</span>
666
- <span class="cline-any cline-yes">19x</span>
667
- <span class="cline-any cline-yes">19x</span>
668
- <span class="cline-any cline-yes">19x</span>
538
+ <span class="cline-any cline-yes">106x</span>
539
+ <span class="cline-any cline-yes">106x</span>
540
+ <span class="cline-any cline-yes">106x</span>
541
+ <span class="cline-any cline-yes">4x</span>
542
+ <span class="cline-any cline-yes">4x</span>
669
543
  <span class="cline-any cline-yes">4x</span>
670
544
  <span class="cline-any cline-yes">4x</span>
671
545
  <span class="cline-any cline-yes">4x</span>
672
- <span class="cline-any cline-yes">44x</span>
673
- <span class="cline-any cline-yes">25x</span>
674
- <span class="cline-any cline-yes">25x</span>
675
- <span class="cline-any cline-yes">25x</span>
676
- <span class="cline-any cline-yes">25x</span>
677
- <span class="cline-any cline-yes">25x</span>
678
- <span class="cline-any cline-yes">24x</span>
679
- <span class="cline-any cline-yes">23x</span>
680
- <span class="cline-any cline-yes">23x</span>
681
- <span class="cline-any cline-yes">24x</span>
682
- <span class="cline-any cline-yes">24x</span>
683
- <span class="cline-any cline-yes">25x</span>
684
- <span class="cline-any cline-yes">1x</span>
685
- <span class="cline-any cline-yes">1x</span>
686
- <span class="cline-any cline-yes">1x</span>
687
- <span class="cline-any cline-no">&nbsp;</span>
688
- <span class="cline-any cline-no">&nbsp;</span>
689
- <span class="cline-any cline-no">&nbsp;</span>
690
- <span class="cline-any cline-yes">1x</span>
691
- <span class="cline-any cline-yes">25x</span>
692
- <span class="cline-any cline-yes">40x</span>
693
- <span class="cline-any cline-yes">40x</span>
694
- <span class="cline-any cline-yes">40x</span>
695
- <span class="cline-any cline-yes">63x</span>
696
- <span class="cline-any cline-yes">14x</span>
697
- <span class="cline-any cline-yes">14x</span>
698
- <span class="cline-any cline-yes">14x</span>
699
- <span class="cline-any cline-yes">14x</span>
700
- <span class="cline-any cline-yes">14x</span>
701
- <span class="cline-any cline-yes">14x</span>
702
- <span class="cline-any cline-yes">14x</span>
703
- <span class="cline-any cline-yes">14x</span>
704
- <span class="cline-any cline-yes">14x</span>
705
- <span class="cline-any cline-yes">1x</span>
706
- <span class="cline-any cline-yes">1x</span>
707
- <span class="cline-any cline-yes">1x</span>
708
- <span class="cline-any cline-yes">13x</span>
709
- <span class="cline-any cline-yes">14x</span>
710
546
  <span class="cline-any cline-yes">2x</span>
711
547
  <span class="cline-any cline-yes">2x</span>
712
- <span class="cline-any cline-yes">13x</span>
713
- <span class="cline-any cline-yes">13x</span>
714
- <span class="cline-any cline-yes">13x</span>
715
- <span class="cline-any cline-yes">13x</span>
716
- <span class="cline-any cline-yes">278x</span>
717
- <span class="cline-any cline-yes">215x</span>
718
- <span class="cline-any cline-yes">215x</span>
719
- <span class="cline-any cline-yes">257x</span>
720
- <span class="cline-any cline-yes">257x</span>
721
- <span class="cline-any cline-yes">257x</span>
722
- <span class="cline-any cline-yes">278x</span>
723
- <span class="cline-any cline-yes">1x</span>
724
- <span class="cline-any cline-yes">1x</span>
725
- <span class="cline-any cline-yes">1x</span>
726
- <span class="cline-any cline-yes">8x</span>
727
- <span class="cline-any cline-yes">8x</span>
728
- <span class="cline-any cline-yes">8x</span>
729
- <span class="cline-any cline-yes">8x</span>
730
- <span class="cline-any cline-yes">8x</span>
731
- <span class="cline-any cline-yes">8x</span>
732
- <span class="cline-any cline-yes">8x</span>
733
- <span class="cline-any cline-yes">8x</span>
734
- <span class="cline-any cline-yes">8x</span>
735
- <span class="cline-any cline-no">&nbsp;</span>
736
- <span class="cline-any cline-no">&nbsp;</span>
737
- <span class="cline-any cline-yes">8x</span>
738
- <span class="cline-any cline-yes">8x</span>
739
- <span class="cline-any cline-yes">8x</span>
740
- <span class="cline-any cline-yes">8x</span>
741
- <span class="cline-any cline-yes">1x</span>
742
- <span class="cline-any cline-yes">1x</span>
743
- <span class="cline-any cline-yes">1x</span>
744
548
  <span class="cline-any cline-yes">2x</span>
745
- <span class="cline-any cline-yes">13x</span>
746
- <span class="cline-any cline-yes">13x</span>
747
- <span class="cline-any cline-yes">13x</span>
748
- <span class="cline-any cline-yes">13x</span>
749
- <span class="cline-any cline-yes">13x</span>
750
- <span class="cline-any cline-yes">13x</span>
751
- <span class="cline-any cline-yes">13x</span>
752
- <span class="cline-any cline-yes">13x</span>
753
- <span class="cline-any cline-yes">13x</span>
754
- <span class="cline-any cline-yes">13x</span>
755
- <span class="cline-any cline-yes">13x</span>
756
- <span class="cline-any cline-yes">13x</span>
757
- <span class="cline-any cline-yes">13x</span>
758
- <span class="cline-any cline-yes">11x</span>
759
- <span class="cline-any cline-yes">13x</span>
760
- <span class="cline-any cline-yes">5x</span>
761
- <span class="cline-any cline-yes">5x</span>
762
- <span class="cline-any cline-yes">5x</span>
763
- <span class="cline-any cline-yes">5x</span>
764
- <span class="cline-any cline-yes">5x</span>
765
- <span class="cline-any cline-yes">5x</span>
766
- <span class="cline-any cline-yes">5x</span>
767
- <span class="cline-any cline-yes">5x</span>
768
- <span class="cline-any cline-yes">5x</span>
769
- <span class="cline-any cline-yes">5x</span>
770
- <span class="cline-any cline-no">&nbsp;</span>
771
- <span class="cline-any cline-no">&nbsp;</span>
772
- <span class="cline-any cline-no">&nbsp;</span>
773
- <span class="cline-any cline-no">&nbsp;</span>
774
549
  <span class="cline-any cline-no">&nbsp;</span>
775
550
  <span class="cline-any cline-no">&nbsp;</span>
776
- <span class="cline-any cline-no">&nbsp;</span>
777
- <span class="cline-any cline-no">&nbsp;</span>
778
- <span class="cline-any cline-no">&nbsp;</span>
779
- <span class="cline-any cline-yes">5x</span>
780
- <span class="cline-any cline-yes">11x</span>
781
- <span class="cline-any cline-yes">13x</span>
782
551
  <span class="cline-any cline-yes">2x</span>
783
- <span class="cline-any cline-yes">1x</span>
784
- <span class="cline-any cline-yes">1x</span>
785
- <span class="cline-any cline-yes">4x</span>
786
- <span class="cline-any cline-yes">4x</span>
787
552
  <span class="cline-any cline-yes">4x</span>
788
553
  <span class="cline-any cline-yes">4x</span>
789
554
  <span class="cline-any cline-yes">4x</span>
555
+ <span class="cline-any cline-yes">2x</span>
790
556
  <span class="cline-any cline-yes">4x</span>
791
557
  <span class="cline-any cline-yes">4x</span>
792
558
  <span class="cline-any cline-yes">4x</span>
793
559
  <span class="cline-any cline-yes">1x</span>
794
560
  <span class="cline-any cline-yes">1x</span>
795
561
  <span class="cline-any cline-yes">1x</span>
562
+ <span class="cline-any cline-yes">3x</span>
563
+ <span class="cline-any cline-yes">4x</span>
796
564
  <span class="cline-any cline-yes">1x</span>
797
565
  <span class="cline-any cline-yes">1x</span>
798
566
  <span class="cline-any cline-yes">1x</span>
@@ -801,18 +569,10 @@
801
569
  <span class="cline-any cline-yes">1x</span>
802
570
  <span class="cline-any cline-yes">1x</span>
803
571
  <span class="cline-any cline-yes">1x</span>
804
- <span class="cline-any cline-yes">1x</span>
805
- <span class="cline-any cline-yes">1x</span>
806
- <span class="cline-any cline-yes">1x</span>
807
- <span class="cline-any cline-yes">4x</span>
808
- <span class="cline-any cline-yes">4x</span>
809
- <span class="cline-any cline-yes">4x</span>
810
- <span class="cline-any cline-yes">4x</span>
811
- <span class="cline-any cline-yes">1x</span>
812
- <span class="cline-any cline-yes">1x</span>
813
572
  <span class="cline-any cline-no">&nbsp;</span>
814
573
  <span class="cline-any cline-no">&nbsp;</span>
815
574
  <span class="cline-any cline-no">&nbsp;</span>
575
+ <span class="cline-any cline-yes">1x</span>
816
576
  <span class="cline-any cline-no">&nbsp;</span>
817
577
  <span class="cline-any cline-no">&nbsp;</span>
818
578
  <span class="cline-any cline-no">&nbsp;</span>
@@ -832,9 +592,57 @@
832
592
  <span class="cline-any cline-no">&nbsp;</span>
833
593
  <span class="cline-any cline-no">&nbsp;</span>
834
594
  <span class="cline-any cline-no">&nbsp;</span>
595
+ <span class="cline-any cline-yes">1x</span>
596
+ <span class="cline-any cline-yes">1x</span>
597
+ <span class="cline-any cline-yes">1x</span>
598
+ <span class="cline-any cline-yes">4x</span>
599
+ <span class="cline-any cline-yes">2x</span>
600
+ <span class="cline-any cline-yes">2x</span>
601
+ <span class="cline-any cline-yes">2x</span>
602
+ <span class="cline-any cline-yes">2x</span>
603
+ <span class="cline-any cline-yes">2x</span>
604
+ <span class="cline-any cline-yes">2x</span>
605
+ <span class="cline-any cline-yes">2x</span>
606
+ <span class="cline-any cline-yes">2x</span>
607
+ <span class="cline-any cline-yes">2x</span>
835
608
  <span class="cline-any cline-no">&nbsp;</span>
836
609
  <span class="cline-any cline-no">&nbsp;</span>
837
610
  <span class="cline-any cline-no">&nbsp;</span>
611
+ <span class="cline-any cline-yes">2x</span>
612
+ <span class="cline-any cline-yes">2x</span>
613
+ <span class="cline-any cline-yes">1x</span>
614
+ <span class="cline-any cline-yes">1x</span>
615
+ <span class="cline-any cline-yes">2x</span>
616
+ <span class="cline-any cline-yes">2x</span>
617
+ <span class="cline-any cline-yes">2x</span>
618
+ <span class="cline-any cline-yes">2x</span>
619
+ <span class="cline-any cline-yes">106x</span>
620
+ <span class="cline-any cline-yes">102x</span>
621
+ <span class="cline-any cline-yes">102x</span>
622
+ <span class="cline-any cline-yes">103x</span>
623
+ <span class="cline-any cline-yes">103x</span>
624
+ <span class="cline-any cline-yes">103x</span>
625
+ <span class="cline-any cline-yes">106x</span>
626
+ <span class="cline-any cline-yes">1x</span>
627
+ <span class="cline-any cline-yes">1x</span>
628
+ <span class="cline-any cline-yes">1x</span>
629
+ <span class="cline-any cline-yes">5x</span>
630
+ <span class="cline-any cline-yes">5x</span>
631
+ <span class="cline-any cline-yes">5x</span>
632
+ <span class="cline-any cline-yes">5x</span>
633
+ <span class="cline-any cline-yes">5x</span>
634
+ <span class="cline-any cline-yes">5x</span>
635
+ <span class="cline-any cline-yes">5x</span>
636
+ <span class="cline-any cline-yes">5x</span>
637
+ <span class="cline-any cline-yes">5x</span>
638
+ <span class="cline-any cline-no">&nbsp;</span>
639
+ <span class="cline-any cline-no">&nbsp;</span>
640
+ <span class="cline-any cline-yes">5x</span>
641
+ <span class="cline-any cline-yes">5x</span>
642
+ <span class="cline-any cline-yes">5x</span>
643
+ <span class="cline-any cline-yes">5x</span>
644
+ <span class="cline-any cline-yes">1x</span>
645
+ <span class="cline-any cline-neutral">&nbsp;</span>
838
646
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import _ from 'lodash'
839
647
  import makeDebug from 'debug'
840
648
  import common from 'feathers-hooks-common'
@@ -845,7 +653,6 @@ import {
845
653
  hasServiceAbilities, hasResourceAbilities, getQueryForAbilities,
846
654
  Roles, RoleNames, countSubjectsForResource
847
655
  } from '../../common/permissions.js'
848
- import { isTagEqual } from '../utils.js'
849
656
  &nbsp;
850
657
  const { getItems, replaceItems } = common
851
658
  const { Forbidden } = errors
@@ -862,7 +669,7 @@ export function createJWT (options = {}) {
862
669
  const accessTokens = await Promise.all(items.map(item =&gt; hook.app.getService('authentication').createAccessToken(
863
670
  // Provided function can be used to pick or omit properties in JWT payload
864
671
  (typeof options.payload === 'function' ? options.payload(user) : {}),
865
- // Provided function can be used for custom options cdepending on the user,
672
+ // Provided function can be used for custom options depending on the user,
866
673
  // then we merge with default auth options for global properties like aud, iss, etc.
867
674
  _.merge({}, defaults, (typeof options.jwt === 'function' ? options.jwt(user) : options)))
868
675
  ))
@@ -1048,33 +855,33 @@ export async function authorise (hook) {
1048
855
  // simply check against the object we'd like to create
1049
856
  // Support custom methods as create operation as they have similar signature
1050
857
  const DEFAULT_METHODS = ['find', 'get', 'create', 'update', 'patch', 'remove']
1051
- if ((operation === 'create') || !DEFAULT_METHODS.includes(operation)) {
858
+ if ((operation === 'create') <span class="branch-0 cbranch-no" title="branch not covered" >|| !DEFAULT_METHODS.includes(operation))</span> {
1052
859
  const resource = hook.data
1053
860
  debug('Target resource is ', resource)
1054
- if (!hasResourceAbilities(abilities, operation, resourceType, context, resource)) {
1055
- debug('Resource access not granted')
1056
- throw new Forbidden(`You are not allowed to perform ${operation} operation on ${resourceType}`)
1057
- }
1058
- } else {
1059
- // When we find/update/patch/remove multiple items this ensures that
1060
- // only the ones authorised by constraints on the resources will be fetched
1061
- // This avoid fetching all first then check it one by one
1062
- const dbQuery = objectifyIDs(getQueryForAbilities(abilities, operation, resourceType))
1063
- if (dbQuery) {
1064
- hook.params.query = _.transform(hook.params.query, (result, value, key) =&gt; {
1065
- if (key === '$or') <span class="branch-0 cbranch-no" title="branch not covered" >result.$and = [{ $or: value }]</span>
1066
- else result[key] = value
1067
- }, {})
1068
- _.merge(hook.params.query, dbQuery)
1069
- } else {
1070
- if (operation === 'find') { // You don't have right to read any items but you have access to the service so the result is empty
1071
- hook.result = (!_.get(hook, 'params.paginate', true) <span class="branch-0 cbranch-no" title="branch not covered" >? [] </span>: { total: 0, skip: 0, data: [] })
1072
- }<span class="branch-0 cbranch-no" title="branch not covered" > else { // You don't have the right to update/patch/remove any items so any tentative should throw</span>
861
+ if (!hasResourceAbilities(abilities, operation, resourceType, context, resource)) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
862
+ <span class="cstat-no" title="statement not covered" > debug('Resource access not granted')</span>
863
+ <span class="cstat-no" title="statement not covered" > throw new Forbidden(`You are not allowed to perform ${operation} operation on ${resourceType}`)</span>
864
+ <span class="cstat-no" title="statement not covered" > }</span>
865
+ }<span class="branch-0 cbranch-no" title="branch not covered" > else {</span>
866
+ <span class="cstat-no" title="statement not covered" > // When we find/update/patch/remove multiple items this ensures that</span>
867
+ <span class="cstat-no" title="statement not covered" > // only the ones authorised by constraints on the resources will be fetched</span>
868
+ <span class="cstat-no" title="statement not covered" > // This avoid fetching all first then check it one by one</span>
869
+ <span class="cstat-no" title="statement not covered" > const dbQuery = objectifyIDs(getQueryForAbilities(abilities, operation, resourceType))</span>
870
+ <span class="cstat-no" title="statement not covered" > if (dbQuery) {</span>
871
+ <span class="cstat-no" title="statement not covered" > hook.params.query = _.transform(hook.params.query, (result, value, key) =&gt; {</span>
872
+ <span class="cstat-no" title="statement not covered" > if (key === '$or') result.$and = [{ $or: value }]</span>
873
+ <span class="cstat-no" title="statement not covered" > else result[key] = value</span>
874
+ <span class="cstat-no" title="statement not covered" > }, {})</span>
875
+ <span class="cstat-no" title="statement not covered" > _.merge(hook.params.query, dbQuery)</span>
876
+ <span class="cstat-no" title="statement not covered" > } else {</span>
877
+ <span class="cstat-no" title="statement not covered" > if (operation === 'find') { // You don't have right to read any items but you have access to the service so the result is empty</span>
878
+ <span class="cstat-no" title="statement not covered" > hook.result = (!_.get(hook, 'params.paginate', true) ? [] : { total: 0, skip: 0, data: [] })</span>
879
+ <span class="cstat-no" title="statement not covered" > } else { // You don't have the right to update/patch/remove any items so any tentative should throw</span>
1073
880
  <span class="cstat-no" title="statement not covered" > debug('Resource access not granted')</span>
1074
881
  <span class="cstat-no" title="statement not covered" > throw new Forbidden(`You are not allowed to perform ${operation} operation on ${resourceType}`)</span>
1075
882
  <span class="cstat-no" title="statement not covered" > }</span>
1076
- }
1077
- }
883
+ <span class="cstat-no" title="statement not covered" > }</span>
884
+ <span class="cstat-no" title="statement not covered" > }</span>
1078
885
  debug('Resource access granted')
1079
886
  // Some specific services might not expose a get function, in this case we cannot check for authorisation
1080
887
  // this has to be implemented by the service itself
@@ -1087,10 +894,10 @@ export async function authorise (hook) {
1087
894
  const resource = await hook.service.get(hook.id, params)
1088
895
  debug('Target resource is', resource)
1089
896
  // Then check against the object we'd like to manage
1090
- if (!hasResourceAbilities(abilities, operation, resourceType, context, resource)) {
1091
- debug('Resource access not granted')
1092
- throw new Forbidden(`You are not allowed to perform ${operation} operation on ${resourceType}`)
1093
- }
897
+ if (!hasResourceAbilities(abilities, operation, resourceType, context, resource)) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
898
+ <span class="cstat-no" title="statement not covered" > debug('Resource access not granted')</span>
899
+ <span class="cstat-no" title="statement not covered" > throw new Forbidden(`You are not allowed to perform ${operation} operation on ${resourceType}`)</span>
900
+ <span class="cstat-no" title="statement not covered" > }</span>
1094
901
  // Avoid fetching again the object in this case
1095
902
  if (operation === 'get') {
1096
903
  hook.result = resource
@@ -1126,101 +933,6 @@ export function updateAbilities (options = {}) {
1126
933
  }
1127
934
  }
1128
935
  &nbsp;
1129
- export function preventRemovingLastOwner (resourceScope) {
1130
- return async function (hook) {
1131
- // By pass check ?
1132
- if (hook.params.force) <span class="branch-0 cbranch-no" title="branch not covered" >return hook</span>
1133
- const params = hook.params
1134
- const data = hook.data || {}
1135
- const query = params.query || {}
1136
- const scope = data.scope || query.scope
1137
- const grantedPermissions = data.permissions || query.permissions
1138
- const grantedRole = (grantedPermissions ? Roles[grantedPermissions] : undefined)
1139
- const resource = hook.params.resource
1140
- const subjects = hook.params.subjects
1141
- const subjectService = hook.params.subjectsService
1142
- // On create check if we try to downgrade permissions otherwise let pass through
1143
- if (!_.isUndefined(grantedRole) &amp;&amp; (grantedRole === Roles.owner)) return hook
1144
- &nbsp;
1145
- if ((scope === resourceScope) &amp;&amp; resource &amp;&amp; resource._id) {
1146
- // Count existing owners
1147
- const owners = await countSubjectsForResource(subjectService, resourceScope, resource._id, Roles.owner)
1148
- // Now count owners we change/remove permissions on
1149
- const removedOwners = subjects.reduce((count, subject) =&gt; {
1150
- const resources = _.get(subject, resourceScope, [])
1151
- const ownedResource = _.find(resources, { _id: resource._id, permissions: RoleNames[Roles.owner] })
1152
- return (ownedResource <span class="branch-0 cbranch-no" title="branch not covered" >? count + 1 </span>: count)
1153
- }, 0)
1154
- // If none remains stop
1155
- if (removedOwners &gt;= owners.total) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1156
- <span class="cstat-no" title="statement not covered" > debug('Cannot remove the last owner of resource ', resource)</span>
1157
- <span class="cstat-no" title="statement not covered" > const resourceName = resource.name ? resource.name : resource._id.toString()</span>
1158
- <span class="cstat-no" title="statement not covered" > throw new Forbidden('You are not allowed to remove the last owner of resource ' + resourceName, {</span>
1159
- <span class="cstat-no" title="statement not covered" > translation: {</span>
1160
- <span class="cstat-no" title="statement not covered" > key: 'CANNOT_REMOVE_LAST_OWNER',</span>
1161
- <span class="cstat-no" title="statement not covered" > params: { resource: resourceName }</span>
1162
- <span class="cstat-no" title="statement not covered" > }</span>
1163
- <span class="cstat-no" title="statement not covered" > })</span>
1164
- <span class="cstat-no" title="statement not covered" > }</span>
1165
- }
1166
- return hook
1167
- }
1168
- }
1169
- &nbsp;
1170
- export async function removeOrganisationGroupsAuthorisations (hook) {
1171
- const app = hook.app
1172
- const authorisationService = app.getService('authorisations')
1173
- const org = hook.params.resource
1174
- const user = hook.params.user
1175
- // Unset membership for the all org groups
1176
- const orgGroupService = app.getService('groups', org)
1177
- const groups = await orgGroupService.find({ paginate: false })
1178
- await Promise.all(groups.map(group =&gt; {
1179
- // Unset membership on group for the all org users
1180
- return authorisationService.remove(group._id.toString(), {
1181
- query: {
1182
- scope: 'groups'
1183
- },
1184
- user,
1185
- force: hook.params.force,
1186
- // Because we already have resource set it as objects to avoid populating
1187
- // Moreover used as an after hook the resource might not already exist anymore
1188
- subjects: hook.params.subjects,
1189
- subjectsService: hook.params.subjectsService,
1190
- resource: group,
1191
- resourcesService: orgGroupService
1192
- })
1193
- }))
1194
- debug('Authorisations unset on groups for organisation ' + org._id)
1195
- return hook
1196
- }
1197
- &nbsp;
1198
- export <span class="fstat-no" title="function not covered" >async function removeOrganisationTagsAuthorisations (hook) {</span>
1199
- <span class="cstat-no" title="statement not covered" > const app = hook.app</span>
1200
- <span class="cstat-no" title="statement not covered" > const org = hook.params.resource</span>
1201
- <span class="cstat-no" title="statement not covered" > const subjectService = hook.params.subjectsService</span>
1202
- <span class="cstat-no" title="statement not covered" > const orgTagsService = app.getService('tags', org)</span>
1203
- <span class="cstat-no" title="statement not covered" > const subjects = hook.params.subjects || []</span>
1204
- <span class="cstat-no" title="statement not covered" > if (subjects.length === 0) return hook</span>
1205
- <span class="cstat-no" title="statement not covered" > // Retrieve org tags</span>
1206
- <span class="cstat-no" title="statement not covered" > const orgTags = await orgTagsService.find({ paginate: false })</span>
1207
- <span class="cstat-no" title="statement not covered" > const promises = []</span>
1208
- <span class="cstat-no" title="statement not covered" > subjects.forEach(subject =&gt; {</span>
1209
- <span class="cstat-no" title="statement not covered" > const tags = subject.tags || []</span>
1210
- <span class="cstat-no" title="statement not covered" > // Find tags from org</span>
1211
- <span class="cstat-no" title="statement not covered" > const fromOrg = _.intersectionWith(tags, orgTags, isTagEqual)</span>
1212
- <span class="cstat-no" title="statement not covered" > // Clear removed tags</span>
1213
- <span class="cstat-no" title="statement not covered" > const notFromOrg = _.differenceWith(tags, orgTags, isTagEqual)</span>
1214
- <span class="cstat-no" title="statement not covered" > // Update subject if required</span>
1215
- <span class="cstat-no" title="statement not covered" > if (fromOrg.length &gt; 0) {</span>
1216
- <span class="cstat-no" title="statement not covered" > promises.push(subjectService.patch(subject._id.toString(), { tags: notFromOrg }))</span>
1217
- <span class="cstat-no" title="statement not covered" > }</span>
1218
- <span class="cstat-no" title="statement not covered" > })</span>
1219
- <span class="cstat-no" title="statement not covered" > // Perform subject updates in parallel</span>
1220
- <span class="cstat-no" title="statement not covered" > await Promise.all(promises)</span>
1221
- <span class="cstat-no" title="statement not covered" > debug(`Tags unset on ${promises.length} subjects for organisation ` + org._id)</span>
1222
- <span class="cstat-no" title="statement not covered" > return hook</span>
1223
- <span class="cstat-no" title="statement not covered" >}</span>
1224
936
  &nbsp;</pre></td></tr></table></pre>
1225
937
 
1226
938
  <div class='push'></div><!-- for sticky footer -->
@@ -1228,7 +940,7 @@ export <span class="fstat-no" title="function not covered" >async function remov
1228
940
  <div class='footer quiet pad2 space-top1 center small'>
1229
941
  Code coverage generated by
1230
942
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1231
- at 2024-11-15T21:05:45.936Z
943
+ at 2025-02-18T09:52:45.637Z
1232
944
  </div>
1233
945
  <script src="../../../prettify.js"></script>
1234
946
  <script>