@kalisio/kdk 1.3.5 → 1.4.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 (535) hide show
  1. package/.nyc_output/2c5b7c8e-81db-4d2c-a7a4-02dc640d301f.json +1 -0
  2. package/.nyc_output/{0b8aa700-8daa-49ce-85e7-a8f8965d55f0.json → 2e74ca23-8cf0-4161-9536-f71c2a1a74bb.json} +0 -0
  3. package/.nyc_output/{20df4355-911a-4b16-a8ab-d3392e9f0a7f.json → 81d21e46-766a-46bc-b1b7-143ca577347a.json} +0 -0
  4. package/.nyc_output/a762cb58-70dc-4d39-ab69-928635affa98.json +1 -0
  5. package/.nyc_output/{257af0bb-96c3-465a-b5ef-a1df60078d5f.json → aaf3ebbb-f895-4d7b-9255-bc5dee832570.json} +0 -0
  6. package/.nyc_output/{284aebfa-23fd-425f-9d72-e4b8904dc224.json → dbeb2602-0ac2-4e66-978b-0d29548359ca.json} +0 -0
  7. package/.nyc_output/{5cbee06e-be6e-468a-bd78-4793ee785fe4.json → e47d1e4c-2fff-4dcb-908f-d3081162547c.json} +0 -0
  8. package/.nyc_output/processinfo/{2bece194-92f7-4971-a688-10604044a7fa.json → 2c5b7c8e-81db-4d2c-a7a4-02dc640d301f.json} +1 -1
  9. package/.nyc_output/processinfo/2e74ca23-8cf0-4161-9536-f71c2a1a74bb.json +1 -0
  10. package/.nyc_output/processinfo/81d21e46-766a-46bc-b1b7-143ca577347a.json +1 -0
  11. package/.nyc_output/processinfo/a762cb58-70dc-4d39-ab69-928635affa98.json +1 -0
  12. package/.nyc_output/processinfo/aaf3ebbb-f895-4d7b-9255-bc5dee832570.json +1 -0
  13. package/.nyc_output/processinfo/dbeb2602-0ac2-4e66-978b-0d29548359ca.json +1 -0
  14. package/.nyc_output/processinfo/e47d1e4c-2fff-4dcb-908f-d3081162547c.json +1 -0
  15. package/.nyc_output/processinfo/index.json +1 -1
  16. package/CHANGELOG.md +189 -67
  17. package/README.md +1 -1
  18. package/coverage/core/api/application.js.html +145 -145
  19. package/coverage/core/api/authentication.js.html +37 -37
  20. package/coverage/core/api/db.js.html +74 -74
  21. package/coverage/core/api/hooks/hooks.account.js.html +15 -15
  22. package/coverage/core/api/hooks/hooks.authentication.js.html +16 -16
  23. package/coverage/core/api/hooks/hooks.authorisations.js.html +112 -121
  24. package/coverage/core/api/hooks/hooks.devices.js.html +5 -5
  25. package/coverage/core/api/hooks/hooks.groups.js.html +3 -3
  26. package/coverage/core/api/hooks/hooks.logger.js.html +7 -7
  27. package/coverage/core/api/hooks/hooks.model.js.html +149 -149
  28. package/coverage/core/api/hooks/hooks.organisations.js.html +13 -61
  29. package/coverage/core/api/hooks/hooks.pusher.js.html +7 -7
  30. package/coverage/core/api/hooks/hooks.query.js.html +68 -32
  31. package/coverage/core/api/hooks/hooks.service.js.html +15 -15
  32. package/coverage/core/api/hooks/hooks.storage.js.html +5 -5
  33. package/coverage/core/api/hooks/hooks.tags.js.html +7 -7
  34. package/coverage/core/api/hooks/hooks.users.js.html +111 -63
  35. package/coverage/core/api/hooks/index.html +72 -72
  36. package/coverage/core/api/hooks/index.js.html +15 -15
  37. package/coverage/core/api/index.html +35 -35
  38. package/coverage/core/api/index.js.html +13 -13
  39. package/coverage/core/api/marshall.js.html +81 -81
  40. package/coverage/core/api/models/groups.model.mongodb.js.html +1 -1
  41. package/coverage/core/api/models/index.html +1 -1
  42. package/coverage/core/api/models/organisations.model.mongodb.js.html +1 -1
  43. package/coverage/core/api/models/tags.model.mongodb.js.html +1 -1
  44. package/coverage/core/api/models/users.model.mongodb.js.html +7 -7
  45. package/coverage/core/api/oauth2-handler.js.html +3 -3
  46. package/coverage/core/api/oauth2-verifier.js.html +5 -5
  47. package/coverage/core/api/services/account/account.hooks.js.html +1 -1
  48. package/coverage/core/api/services/account/account.service.js.html +34 -34
  49. package/coverage/core/api/services/account/index.html +17 -17
  50. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +3 -3
  51. package/coverage/core/api/services/authorisations/authorisations.service.js.html +40 -37
  52. package/coverage/core/api/services/authorisations/index.html +17 -17
  53. package/coverage/core/api/services/databases/databases.hooks.js.html +1 -1
  54. package/coverage/core/api/services/databases/databases.service.js.html +1 -1
  55. package/coverage/core/api/services/databases/index.html +1 -1
  56. package/coverage/core/api/services/devices/devices.hooks.js.html +1 -1
  57. package/coverage/core/api/services/devices/devices.service.js.html +1 -1
  58. package/coverage/core/api/services/devices/index.html +1 -1
  59. package/coverage/core/api/services/groups/groups.hooks.js.html +1 -1
  60. package/coverage/core/api/services/groups/index.html +1 -1
  61. package/coverage/core/api/services/index.html +5 -5
  62. package/coverage/core/api/services/index.js.html +40 -40
  63. package/coverage/core/api/services/mailer/index.html +1 -1
  64. package/coverage/core/api/services/mailer/mailer.hooks.js.html +1 -1
  65. package/coverage/core/api/services/mailer/mailer.service.js.html +1 -1
  66. package/coverage/core/api/services/organisations/index.html +1 -1
  67. package/coverage/core/api/services/organisations/organisations.hooks.js.html +1 -1
  68. package/coverage/core/api/services/organisations/organisations.service.js.html +1 -1
  69. package/coverage/core/api/services/pusher/index.html +1 -1
  70. package/coverage/core/api/services/pusher/pusher.channels.js.html +1 -1
  71. package/coverage/core/api/services/pusher/pusher.hooks.js.html +1 -1
  72. package/coverage/core/api/services/pusher/pusher.service.js.html +1 -1
  73. package/coverage/core/api/services/storage/index.html +1 -1
  74. package/coverage/core/api/services/storage/storage.hooks.js.html +4 -4
  75. package/coverage/core/api/services/tags/index.html +1 -1
  76. package/coverage/core/api/services/tags/tags.hooks.js.html +1 -1
  77. package/coverage/core/api/services/users/index.html +1 -1
  78. package/coverage/core/api/services/users/users.hooks.js.html +12 -12
  79. package/coverage/core/common/index.html +32 -32
  80. package/coverage/core/common/index.js.html +27 -27
  81. package/coverage/core/common/permissions.js.html +135 -75
  82. package/coverage/index.html +157 -157
  83. package/coverage/lcov-report/core/api/application.js.html +145 -145
  84. package/coverage/lcov-report/core/api/authentication.js.html +37 -37
  85. package/coverage/lcov-report/core/api/db.js.html +74 -74
  86. package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +15 -15
  87. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +16 -16
  88. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +112 -121
  89. package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +5 -5
  90. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +3 -3
  91. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +7 -7
  92. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +149 -149
  93. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +13 -61
  94. package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +7 -7
  95. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +68 -32
  96. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +15 -15
  97. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +5 -5
  98. package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +7 -7
  99. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +111 -63
  100. package/coverage/lcov-report/core/api/hooks/index.html +72 -72
  101. package/coverage/lcov-report/core/api/hooks/index.js.html +15 -15
  102. package/coverage/lcov-report/core/api/index.html +35 -35
  103. package/coverage/lcov-report/core/api/index.js.html +13 -13
  104. package/coverage/lcov-report/core/api/marshall.js.html +81 -81
  105. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +1 -1
  106. package/coverage/lcov-report/core/api/models/index.html +1 -1
  107. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +1 -1
  108. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +1 -1
  109. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +7 -7
  110. package/coverage/lcov-report/core/api/oauth2-handler.js.html +3 -3
  111. package/coverage/lcov-report/core/api/oauth2-verifier.js.html +5 -5
  112. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +1 -1
  113. package/coverage/lcov-report/core/api/services/account/account.service.js.html +34 -34
  114. package/coverage/lcov-report/core/api/services/account/index.html +17 -17
  115. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +3 -3
  116. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +40 -37
  117. package/coverage/lcov-report/core/api/services/authorisations/index.html +17 -17
  118. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
  119. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
  120. package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
  121. package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +1 -1
  122. package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +1 -1
  123. package/coverage/lcov-report/core/api/services/devices/index.html +1 -1
  124. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +1 -1
  125. package/coverage/lcov-report/core/api/services/groups/index.html +1 -1
  126. package/coverage/lcov-report/core/api/services/index.html +5 -5
  127. package/coverage/lcov-report/core/api/services/index.js.html +40 -40
  128. package/coverage/lcov-report/core/api/services/mailer/index.html +1 -1
  129. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +1 -1
  130. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +1 -1
  131. package/coverage/lcov-report/core/api/services/organisations/index.html +1 -1
  132. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +1 -1
  133. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +1 -1
  134. package/coverage/lcov-report/core/api/services/pusher/index.html +1 -1
  135. package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +1 -1
  136. package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +1 -1
  137. package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +1 -1
  138. package/coverage/lcov-report/core/api/services/storage/index.html +1 -1
  139. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +4 -4
  140. package/coverage/lcov-report/core/api/services/tags/index.html +1 -1
  141. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +1 -1
  142. package/coverage/lcov-report/core/api/services/users/index.html +1 -1
  143. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +12 -12
  144. package/coverage/lcov-report/core/common/index.html +32 -32
  145. package/coverage/lcov-report/core/common/index.js.html +27 -27
  146. package/coverage/lcov-report/core/common/permissions.js.html +135 -75
  147. package/coverage/lcov-report/index.html +157 -157
  148. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +55 -55
  149. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +337 -274
  150. package/coverage/lcov-report/map/api/hooks/index.html +43 -43
  151. package/coverage/lcov-report/map/api/hooks/index.js.html +12 -12
  152. package/coverage/lcov-report/map/api/index.html +31 -31
  153. package/coverage/lcov-report/map/api/index.js.html +24 -24
  154. package/coverage/lcov-report/map/api/marshall.js.html +39 -39
  155. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +20 -20
  156. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +22 -22
  157. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +24 -24
  158. package/coverage/lcov-report/map/api/models/index.html +43 -43
  159. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +21 -21
  160. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +156 -156
  161. package/coverage/lcov-report/map/api/services/alerts/index.html +30 -30
  162. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +19 -19
  163. package/coverage/lcov-report/map/api/services/catalog/index.html +17 -17
  164. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  165. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  166. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +20 -20
  167. package/coverage/lcov-report/map/api/services/features/index.html +21 -21
  168. package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +8 -8
  169. package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +99 -99
  170. package/coverage/lcov-report/map/api/services/geocoder/index.html +28 -28
  171. package/coverage/lcov-report/map/api/services/index.html +21 -21
  172. package/coverage/lcov-report/map/api/services/index.js.html +71 -71
  173. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +68 -68
  174. package/coverage/lcov-report/map/common/errors.js.html +9 -9
  175. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +120 -120
  176. package/coverage/lcov-report/map/common/grid.js.html +268 -268
  177. package/coverage/lcov-report/map/common/index.html +149 -149
  178. package/coverage/lcov-report/map/common/index.js.html +31 -31
  179. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +71 -71
  180. package/coverage/lcov-report/map/common/moment-utils.js.html +14 -14
  181. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +280 -280
  182. package/coverage/lcov-report/map/common/opendap-utils.js.html +220 -220
  183. package/coverage/lcov-report/map/common/permissions.js.html +21 -21
  184. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +51 -51
  185. package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
  186. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +99 -99
  187. package/coverage/lcov-report/map/common/wcs-utils.js.html +66 -66
  188. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +196 -196
  189. package/coverage/lcov-report/map/common/wfs-utils.js.html +8 -5
  190. package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
  191. package/coverage/lcov-report/map/common/wmts-utils.js.html +71 -11
  192. package/coverage/lcov.info +3588 -3659
  193. package/coverage/map/api/hooks/hooks.catalog.js.html +55 -55
  194. package/coverage/map/api/hooks/hooks.query.js.html +337 -274
  195. package/coverage/map/api/hooks/index.html +43 -43
  196. package/coverage/map/api/hooks/index.js.html +12 -12
  197. package/coverage/map/api/index.html +31 -31
  198. package/coverage/map/api/index.js.html +24 -24
  199. package/coverage/map/api/marshall.js.html +39 -39
  200. package/coverage/map/api/models/alerts.model.mongodb.js.html +20 -20
  201. package/coverage/map/api/models/catalog.model.mongodb.js.html +22 -22
  202. package/coverage/map/api/models/features.model.mongodb.js.html +24 -24
  203. package/coverage/map/api/models/index.html +43 -43
  204. package/coverage/map/api/services/alerts/alerts.hooks.js.html +21 -21
  205. package/coverage/map/api/services/alerts/alerts.service.js.html +156 -156
  206. package/coverage/map/api/services/alerts/index.html +30 -30
  207. package/coverage/map/api/services/catalog/catalog.hooks.js.html +19 -19
  208. package/coverage/map/api/services/catalog/index.html +17 -17
  209. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  210. package/coverage/map/api/services/daptiles/index.html +1 -1
  211. package/coverage/map/api/services/features/features.hooks.js.html +20 -20
  212. package/coverage/map/api/services/features/index.html +21 -21
  213. package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +8 -8
  214. package/coverage/map/api/services/geocoder/geocoder.service.js.html +99 -99
  215. package/coverage/map/api/services/geocoder/index.html +28 -28
  216. package/coverage/map/api/services/index.html +21 -21
  217. package/coverage/map/api/services/index.js.html +71 -71
  218. package/coverage/map/common/dynamic-grid-source.js.html +68 -68
  219. package/coverage/map/common/errors.js.html +9 -9
  220. package/coverage/map/common/geotiff-grid-source.js.html +120 -120
  221. package/coverage/map/common/grid.js.html +268 -268
  222. package/coverage/map/common/index.html +149 -149
  223. package/coverage/map/common/index.js.html +31 -31
  224. package/coverage/map/common/meteo-model-grid-source.js.html +71 -71
  225. package/coverage/map/common/moment-utils.js.html +14 -14
  226. package/coverage/map/common/opendap-grid-source.js.html +280 -280
  227. package/coverage/map/common/opendap-utils.js.html +220 -220
  228. package/coverage/map/common/permissions.js.html +21 -21
  229. package/coverage/map/common/time-based-grid-source.js.html +51 -51
  230. package/coverage/map/common/tms-utils.js.html +1 -1
  231. package/coverage/map/common/wcs-grid-source.js.html +99 -99
  232. package/coverage/map/common/wcs-utils.js.html +66 -66
  233. package/coverage/map/common/weacast-grid-source.js.html +196 -196
  234. package/coverage/map/common/wfs-utils.js.html +8 -5
  235. package/coverage/map/common/wms-utils.js.html +1 -1
  236. package/coverage/map/common/wmts-utils.js.html +71 -11
  237. package/extras/icons/kanban.png +0 -0
  238. package/extras/testcafe/page-models/map/catalog.js +2 -2
  239. package/extras/tours/core/add-member.js +10 -1
  240. package/extras/tours/core/{tag-member.js → edit-member-tags.js} +4 -3
  241. package/extras/tours/core/groups.js +8 -2
  242. package/extras/tours/core/members.js +11 -21
  243. package/extras/tours/core/tags.js +7 -1
  244. package/extras/tours/map/catalog-categories.js +4 -4
  245. package/extras/tours/map/catalog-panel.js +16 -16
  246. package/extras/tours/map/favorite-views.js +3 -3
  247. package/lib/core/api/hooks/hooks.authorisations.js +149 -140
  248. package/lib/core/api/hooks/hooks.authorisations.js.map +1 -1
  249. package/lib/core/api/hooks/hooks.organisations.js +1 -23
  250. package/lib/core/api/hooks/hooks.organisations.js.map +1 -1
  251. package/lib/core/api/hooks/hooks.query.js +22 -0
  252. package/lib/core/api/hooks/hooks.query.js.map +1 -1
  253. package/lib/core/api/hooks/hooks.users.js +34 -18
  254. package/lib/core/api/hooks/hooks.users.js.map +1 -1
  255. package/lib/core/api/services/authorisations/authorisations.service.js +34 -25
  256. package/lib/core/api/services/authorisations/authorisations.service.js.map +1 -1
  257. package/lib/core/client/api.js +1 -0
  258. package/lib/core/client/api.js.map +1 -1
  259. package/lib/core/client/components/account/KAccountDZ.vue +3 -4
  260. package/lib/core/client/components/account/KAccountDevices.vue +5 -6
  261. package/lib/core/client/components/account/KDeviceCard.vue +2 -1
  262. package/lib/core/client/components/account/KIdentityPanel.vue +1 -7
  263. package/lib/core/client/components/collection/KBoard.vue +26 -155
  264. package/lib/core/client/components/collection/KCard.vue +144 -42
  265. package/lib/core/client/components/collection/KCardSection.vue +52 -0
  266. package/lib/core/client/components/collection/KColumn.vue +181 -0
  267. package/lib/core/client/components/collection/KGrid.vue +13 -18
  268. package/lib/core/client/components/collection/KHistory.vue +61 -89
  269. package/lib/core/client/components/collection/KHistoryEntry.vue +90 -66
  270. package/lib/core/client/components/collection/KItem.vue +21 -2
  271. package/lib/core/client/components/collection/KList.vue +9 -12
  272. package/lib/core/client/components/collection/KTable.vue +33 -39
  273. package/lib/core/client/components/collection/index.js +6 -1
  274. package/lib/core/client/components/collection/index.js.map +1 -1
  275. package/lib/core/client/components/editor/KEditor.vue +0 -6
  276. package/lib/core/client/components/editor/KModalEditor.vue +4 -4
  277. package/lib/core/client/components/editor/KSettingsEditor.vue +49 -0
  278. package/lib/core/client/components/form/KAttachmentField.vue +10 -10
  279. package/lib/core/client/components/form/KChipsField.vue +28 -23
  280. package/lib/core/client/components/form/KColorField.vue +30 -25
  281. package/lib/core/client/components/form/KForm.vue +0 -12
  282. package/lib/core/client/components/form/KIconField.vue +1 -0
  283. package/lib/core/client/components/form/KItemField.vue +8 -4
  284. package/lib/core/client/components/form/KRoleField.vue +56 -0
  285. package/lib/core/client/components/form/KSelectField.vue +16 -1
  286. package/lib/core/client/components/form/KView.vue +5 -14
  287. package/lib/core/client/components/frame/KAction.vue +18 -12
  288. package/lib/core/client/components/frame/KAvatar.vue +3 -3
  289. package/lib/core/client/components/frame/KChart.vue +60 -0
  290. package/lib/core/client/components/frame/KChipsPane.vue +80 -0
  291. package/lib/core/client/components/frame/KContent.vue +1 -1
  292. package/lib/core/client/components/frame/KModal.vue +30 -44
  293. package/lib/core/client/components/frame/KPanel.vue +1 -1
  294. package/lib/core/client/components/frame/{KMenu.vue → KPopupAction.vue} +6 -7
  295. package/lib/core/client/components/frame/KSpot.vue +31 -0
  296. package/lib/core/client/components/frame/KStamp.vue +62 -0
  297. package/lib/core/client/components/frame/index.js +56 -1
  298. package/lib/core/client/components/frame/index.js.map +1 -1
  299. package/lib/core/client/components/input/KColorChooser.vue +16 -8
  300. package/lib/core/client/components/input/KIconChooser.vue +2 -1
  301. package/lib/core/client/components/input/KUploader.vue +14 -5
  302. package/lib/core/client/components/layout/KAbout.vue +9 -3
  303. package/lib/core/client/components/layout/KFab.vue +1 -1
  304. package/lib/core/client/components/layout/KPage.vue +44 -19
  305. package/lib/core/client/components/layout/KTour.vue +2 -2
  306. package/lib/core/client/components/layout/KWelcome.vue +13 -12
  307. package/lib/core/client/components/layout/KWindow.vue +1 -1
  308. package/lib/core/client/components/media/KImageViewer.vue +9 -7
  309. package/lib/core/client/components/media/KMediaBrowser.vue +12 -8
  310. package/lib/core/client/components/menu/KMenu.vue +103 -0
  311. package/lib/core/client/components/team/KAddMember.vue +17 -9
  312. package/lib/core/client/components/team/KChangeRole.vue +5 -7
  313. package/lib/core/client/components/team/KGroupCard.vue +34 -51
  314. package/lib/core/client/components/team/KGroupsActivity.vue +9 -2
  315. package/lib/core/client/components/team/KJoinGroup.vue +5 -7
  316. package/lib/core/client/components/team/KMemberCard.vue +104 -63
  317. package/lib/core/client/components/team/KMembersActivity.vue +9 -2
  318. package/lib/core/client/components/team/KOrganisationsActivity.vue +8 -1
  319. package/lib/core/client/components/team/KTagCard.vue +26 -26
  320. package/lib/core/client/components/team/KTagsActivity.vue +9 -2
  321. package/lib/core/client/components/time/KTimeRange.vue +144 -0
  322. package/lib/core/client/components/viewer/KModalViewer.vue +6 -0
  323. package/lib/core/client/components/viewer/KViewer.vue +0 -6
  324. package/lib/core/client/i18n/core_en.json +133 -93
  325. package/lib/core/client/i18n/core_fr.json +56 -16
  326. package/lib/core/client/index.js +28 -14
  327. package/lib/core/client/index.js.map +1 -1
  328. package/lib/core/client/mixins/mixin.authorisation.js +28 -18
  329. package/lib/core/client/mixins/mixin.authorisation.js.map +1 -1
  330. package/lib/core/client/mixins/mixin.base-collection.js +57 -9
  331. package/lib/core/client/mixins/mixin.base-collection.js.map +1 -1
  332. package/lib/core/client/mixins/mixin.base-context.js +1 -1
  333. package/lib/core/client/mixins/mixin.base-context.js.map +1 -1
  334. package/lib/core/client/mixins/mixin.base-editor.js +26 -16
  335. package/lib/core/client/mixins/mixin.base-editor.js.map +1 -1
  336. package/lib/core/client/mixins/mixin.base-field.js +0 -4
  337. package/lib/core/client/mixins/mixin.base-field.js.map +1 -1
  338. package/lib/core/client/mixins/mixin.base-item.js +29 -14
  339. package/lib/core/client/mixins/mixin.base-item.js.map +1 -1
  340. package/lib/core/client/mixins/mixin.base-viewer.js +0 -2
  341. package/lib/core/client/mixins/mixin.base-viewer.js.map +1 -1
  342. package/lib/core/client/mixins/mixin.object-proxy.js +17 -3
  343. package/lib/core/client/mixins/mixin.object-proxy.js.map +1 -1
  344. package/lib/core/client/mixins/mixin.schema-proxy.js +31 -0
  345. package/lib/core/client/mixins/mixin.schema-proxy.js.map +1 -1
  346. package/lib/core/client/mixins/mixin.service.js +5 -33
  347. package/lib/core/client/mixins/mixin.service.js.map +1 -1
  348. package/lib/core/client/services/index.js +23 -0
  349. package/lib/core/client/services/index.js.map +1 -1
  350. package/lib/core/client/services/local-settings.service.js +4 -0
  351. package/lib/core/client/services/local-settings.service.js.map +1 -1
  352. package/lib/core/client/time.js +131 -0
  353. package/lib/core/client/time.js.map +1 -0
  354. package/lib/core/common/permissions.js +65 -23
  355. package/lib/core/common/permissions.js.map +1 -1
  356. package/lib/core/common/schemas/groups.create.json +1 -1
  357. package/lib/core/common/schemas/groups.update.json +1 -1
  358. package/lib/core/common/schemas/organisations.create.json +1 -1
  359. package/lib/core/common/schemas/organisations.update.json +2 -2
  360. package/lib/core/common/schemas/settings.update.json +139 -0
  361. package/lib/core/common/schemas/tags.update.json +9 -1
  362. package/lib/map/api/hooks/hooks.query.js +48 -27
  363. package/lib/map/api/hooks/hooks.query.js.map +1 -1
  364. package/lib/map/api/services/features/features.hooks.js +1 -1
  365. package/lib/map/api/services/features/features.hooks.js.map +1 -1
  366. package/lib/map/client/components/KColorLegend.vue +25 -23
  367. package/lib/map/client/components/KFavoriteViews.vue +71 -35
  368. package/lib/map/client/components/KFeaturesChart.vue +11 -9
  369. package/lib/map/client/components/KFeaturesFilter.vue +15 -7
  370. package/lib/map/client/components/KFeaturesTable.vue +27 -2
  371. package/lib/map/client/components/KLayerEditionToolbar.vue +43 -0
  372. package/lib/map/client/components/KLayerStyleEditor.vue +10 -4
  373. package/lib/map/client/components/KLayerStyleForm.vue +14 -11
  374. package/lib/map/client/components/KLocationInput.vue +126 -65
  375. package/lib/map/client/components/KLocationMap.vue +199 -84
  376. package/lib/map/client/components/KPositionIndicator.vue +1 -0
  377. package/lib/map/client/components/KTimeline.vue +41 -36
  378. package/lib/map/client/components/KUrlLegend.vue +21 -19
  379. package/lib/map/client/components/catalog/KBaseLayersSelector.vue +105 -0
  380. package/lib/map/client/components/catalog/KCatalog.vue +14 -2
  381. package/lib/map/client/components/catalog/KConnectLayer.vue +31 -11
  382. package/lib/map/client/components/catalog/KCreateLayer.vue +37 -14
  383. package/lib/map/client/components/catalog/KImportLayer.vue +28 -8
  384. package/lib/map/client/components/catalog/KLayerCategories.vue +86 -62
  385. package/lib/map/client/components/catalog/KLayersSelector.vue +42 -42
  386. package/lib/map/client/components/catalog/KWeatherLayersSelector.vue +3 -3
  387. package/lib/map/client/components/form/KLocationField.vue +1 -1
  388. package/lib/map/client/components/form/KOwsLayerField.vue +21 -2
  389. package/lib/map/client/components/form/KOwsServiceField.vue +1 -0
  390. package/lib/map/client/components/widget/KInformationBox.vue +10 -16
  391. package/lib/map/client/components/widget/KMapillaryViewer.vue +59 -49
  392. package/lib/map/client/components/widget/KTimeSeries.vue +39 -29
  393. package/lib/map/client/i18n/map_en.json +65 -17
  394. package/lib/map/client/i18n/map_fr.json +67 -20
  395. package/lib/map/client/init.js +18 -6
  396. package/lib/map/client/init.js.map +1 -1
  397. package/lib/map/client/leaflet/GSMaPLayer.js +4 -9
  398. package/lib/map/client/leaflet/GSMaPLayer.js.map +1 -1
  399. package/lib/map/client/leaflet/GradientPath.js.map +1 -1
  400. package/lib/map/client/leaflet/MaskLayer.js +64 -0
  401. package/lib/map/client/leaflet/MaskLayer.js.map +1 -0
  402. package/lib/map/client/mixins/globe/mixin.base-globe.js +4 -1
  403. package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
  404. package/lib/map/client/mixins/globe/mixin.geojson-layers.js +7 -9
  405. package/lib/map/client/mixins/globe/mixin.geojson-layers.js.map +1 -1
  406. package/lib/map/client/mixins/index.js +8 -13
  407. package/lib/map/client/mixins/index.js.map +1 -1
  408. package/lib/map/client/mixins/map/mixin.base-map.js +30 -6
  409. package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
  410. package/lib/map/client/mixins/map/mixin.canvas-layers.js +274 -51
  411. package/lib/map/client/mixins/map/mixin.canvas-layers.js.map +1 -1
  412. package/lib/map/client/mixins/map/mixin.edit-layers.js +218 -121
  413. package/lib/map/client/mixins/map/mixin.edit-layers.js.map +1 -1
  414. package/lib/map/client/mixins/map/mixin.file-layers.js +25 -18
  415. package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
  416. package/lib/map/client/mixins/map/mixin.geojson-layers.js +18 -10
  417. package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
  418. package/lib/map/client/mixins/map/mixin.georaster-layers.js +7 -4
  419. package/lib/map/client/mixins/map/mixin.georaster-layers.js.map +1 -1
  420. package/lib/map/client/mixins/map/mixin.gsmap-layers.js +3 -3
  421. package/lib/map/client/mixins/map/mixin.gsmap-layers.js.map +1 -1
  422. package/lib/map/client/mixins/map/mixin.heatmap-layers.js +8 -10
  423. package/lib/map/client/mixins/map/mixin.heatmap-layers.js.map +1 -1
  424. package/lib/map/client/mixins/map/mixin.mapillary-layers.js +25 -40
  425. package/lib/map/client/mixins/map/mixin.mapillary-layers.js.map +1 -1
  426. package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js +5 -3
  427. package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js.map +1 -1
  428. package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js +5 -3
  429. package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js.map +1 -1
  430. package/lib/map/client/mixins/mixin.activity.js +60 -68
  431. package/lib/map/client/mixins/mixin.activity.js.map +1 -1
  432. package/lib/map/client/mixins/mixin.feature-selection.js +8 -10
  433. package/lib/map/client/mixins/mixin.feature-selection.js.map +1 -1
  434. package/lib/map/client/mixins/mixin.feature-service.js +7 -5
  435. package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
  436. package/lib/map/client/mixins/mixin.weacast.js +6 -4
  437. package/lib/map/client/mixins/mixin.weacast.js.map +1 -1
  438. package/lib/map/client/pixi-utils.js +9 -0
  439. package/lib/map/client/pixi-utils.js.map +1 -1
  440. package/lib/map/client/utils.js +50 -0
  441. package/lib/map/client/utils.js.map +1 -1
  442. package/lib/map/common/wfs-utils.js +1 -1
  443. package/lib/map/common/wfs-utils.js.map +1 -1
  444. package/lib/map/common/wmts-utils.js +31 -7
  445. package/lib/map/common/wmts-utils.js.map +1 -1
  446. package/lib/test/client/core/account.js +100 -0
  447. package/lib/test/client/core/account.js.map +1 -0
  448. package/lib/test/client/core/api.js +400 -0
  449. package/lib/test/client/core/api.js.map +1 -0
  450. package/lib/test/client/core/collection.js +109 -0
  451. package/lib/test/client/core/collection.js.map +1 -0
  452. package/lib/test/client/core/index.js +90 -0
  453. package/lib/test/client/core/index.js.map +1 -0
  454. package/lib/test/client/core/layout.js +221 -0
  455. package/lib/test/client/core/layout.js.map +1 -0
  456. package/lib/test/client/core/runner.js +204 -0
  457. package/lib/test/client/core/runner.js.map +1 -0
  458. package/lib/test/client/core/screens.js +68 -0
  459. package/lib/test/client/core/screens.js.map +1 -0
  460. package/lib/test/client/core/utils.js +304 -0
  461. package/lib/test/client/core/utils.js.map +1 -0
  462. package/lib/test/client/index.js +20 -0
  463. package/lib/test/client/index.js.map +1 -0
  464. package/lib/test/client/map/catalog.js +191 -0
  465. package/lib/test/client/map/catalog.js.map +1 -0
  466. package/lib/test/client/map/controls.js +54 -0
  467. package/lib/test/client/map/controls.js.map +1 -0
  468. package/lib/test/client/map/index.js +30 -0
  469. package/lib/test/client/map/index.js.map +1 -0
  470. package/package.json +17 -9
  471. package/test.client.js +1 -0
  472. package/tests/core/test-log-2021-07-15.log +71 -0
  473. package/tests/core/test-log-2021-09-02.log +47 -0
  474. package/tests/map/test-log-%DATE%.logYYYY-07-DD +12 -0
  475. package/tests/map/test-log-%DATE%.logYYYY-09-DD +6 -0
  476. package/tests/map/test-log-2021-07-12.log +12 -0
  477. package/tests/map/test-log-2021-07-15.log +5 -0
  478. package/tests/map/test-log-2021-09-02.log +3 -0
  479. package/.nyc_output/11cd93d8-69cb-405c-98a3-d249ea35b6da.json +0 -1
  480. package/.nyc_output/2bece194-92f7-4971-a688-10604044a7fa.json +0 -1
  481. package/.nyc_output/5ddee33e-b658-4c8e-a247-54f575ac67e8.json +0 -1
  482. package/.nyc_output/78760ae4-555f-4d9c-a6a1-acf5e2f0fe45.json +0 -1
  483. package/.nyc_output/d0bb2559-084e-4c92-b9e6-29a9abd41f7c.json +0 -1
  484. package/.nyc_output/processinfo/0b8aa700-8daa-49ce-85e7-a8f8965d55f0.json +0 -1
  485. package/.nyc_output/processinfo/11cd93d8-69cb-405c-98a3-d249ea35b6da.json +0 -1
  486. package/.nyc_output/processinfo/20df4355-911a-4b16-a8ab-d3392e9f0a7f.json +0 -1
  487. package/.nyc_output/processinfo/257af0bb-96c3-465a-b5ef-a1df60078d5f.json +0 -1
  488. package/.nyc_output/processinfo/284aebfa-23fd-425f-9d72-e4b8904dc224.json +0 -1
  489. package/.nyc_output/processinfo/5cbee06e-be6e-468a-bd78-4793ee785fe4.json +0 -1
  490. package/.nyc_output/processinfo/5ddee33e-b658-4c8e-a247-54f575ac67e8.json +0 -1
  491. package/.nyc_output/processinfo/78760ae4-555f-4d9c-a6a1-acf5e2f0fe45.json +0 -1
  492. package/.nyc_output/processinfo/d0bb2559-084e-4c92-b9e6-29a9abd41f7c.json +0 -1
  493. package/lib/core/client/components/frame/KLabel.vue +0 -56
  494. package/lib/core/client/components/team/KTagsPane.vue +0 -35
  495. package/lib/map/client/leaflet/TiledMapillaryLayer.js +0 -137
  496. package/lib/map/client/leaflet/TiledMapillaryLayer.js.map +0 -1
  497. package/lib/map/client/mixins/mixin.time.js +0 -73
  498. package/lib/map/client/mixins/mixin.time.js.map +0 -1
  499. package/tests/core/account.test.js +0 -415
  500. package/tests/core/client.test.js.skip +0 -37
  501. package/tests/core/config/default.js +0 -97
  502. package/tests/core/config/email-templates/confirmInvitation/html.ejs +0 -18
  503. package/tests/core/config/email-templates/identityChange/html.ejs +0 -12
  504. package/tests/core/config/email-templates/newDevice/html.ejs +0 -7
  505. package/tests/core/config/email-templates/passwordChange/html.ejs +0 -5
  506. package/tests/core/config/email-templates/resendVerifySignup/html.ejs +0 -10
  507. package/tests/core/config/email-templates/resetPwd/html.ejs +0 -5
  508. package/tests/core/config/email-templates/sendResetPwd/html.ejs +0 -8
  509. package/tests/core/config/email-templates/verifySignup/html.ejs +0 -3
  510. package/tests/core/data/10k_most_common_passwords.txt +0 -10000
  511. package/tests/core/data/logo.png +0 -0
  512. package/tests/core/hooks.test.js +0 -175
  513. package/tests/core/index.test.js +0 -418
  514. package/tests/core/notifications.test.js +0 -465
  515. package/tests/core/storage.test.js +0 -134
  516. package/tests/core/team.test.js +0 -610
  517. package/tests/core/utils.js +0 -59
  518. package/tests/map/alerts.test.js +0 -554
  519. package/tests/map/config/default.js +0 -112
  520. package/tests/map/config/layers.json +0 -37
  521. package/tests/map/daptiles.test.js +0 -41
  522. package/tests/map/data/DescribeCoverage.xml +0 -55
  523. package/tests/map/data/GetCoverage.tif +0 -0
  524. package/tests/map/data/adsb.observations.json +0 -132
  525. package/tests/map/data/dataset.grb.das +0 -55
  526. package/tests/map/data/dataset.grb.dds +0 -17
  527. package/tests/map/data/dataset.grb.dods +0 -0
  528. package/tests/map/data/lat_lon_bounds.grb.dods +0 -0
  529. package/tests/map/data/subdataset.grb.dods +0 -0
  530. package/tests/map/data/vigicrues.observations.json +0 -47042
  531. package/tests/map/data/vigicrues.stations.json +0 -15422
  532. package/tests/map/data/zones.json +0 -1228
  533. package/tests/map/grid-sources.test.js +0 -304
  534. package/tests/map/hooks.test.js +0 -96
  535. package/tests/map/index.test.js +0 -333
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">77.56% </span>
26
+ <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>121/156</span>
28
+ <span class='fraction'>0/149</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">42.62% </span>
33
+ <span class="strong">0% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>26/61</span>
35
+ <span class='fraction'>0/61</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">92.31% </span>
40
+ <span class="strong">0% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>12/13</span>
42
+ <span class='fraction'>0/9</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">82.88% </span>
47
+ <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>121/146</span>
49
+ <span class='fraction'>0/139</span>
50
50
  </div>
51
51
 
52
52
 
@@ -55,7 +55,7 @@
55
55
  Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
56
  </p>
57
57
  </div>
58
- <div class='status-line medium'></div>
58
+ <div class='status-line low'></div>
59
59
  <pre><table class="coverage">
60
60
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
61
  <a name='L2'></a><a href='#L2'>2</a>
@@ -318,58 +318,58 @@
318
318
  <a name='L259'></a><a href='#L259'>259</a>
319
319
  <a name='L260'></a><a href='#L260'>260</a>
320
320
  <a name='L261'></a><a href='#L261'>261</a>
321
- <a name='L262'></a><a href='#L262'>262</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
322
- <span class="cline-any cline-yes">1x</span>
323
- <span class="cline-any cline-yes">1x</span>
321
+ <a name='L262'></a><a href='#L262'>262</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
324
322
  <span class="cline-any cline-neutral">&nbsp;</span>
325
323
  <span class="cline-any cline-neutral">&nbsp;</span>
326
324
  <span class="cline-any cline-neutral">&nbsp;</span>
327
325
  <span class="cline-any cline-neutral">&nbsp;</span>
328
326
  <span class="cline-any cline-neutral">&nbsp;</span>
329
327
  <span class="cline-any cline-neutral">&nbsp;</span>
330
- <span class="cline-any cline-yes">1x</span>
331
328
  <span class="cline-any cline-neutral">&nbsp;</span>
332
329
  <span class="cline-any cline-neutral">&nbsp;</span>
330
+ <span class="cline-any cline-no">&nbsp;</span>
331
+ <span class="cline-any cline-neutral">&nbsp;</span>
333
332
  <span class="cline-any cline-neutral">&nbsp;</span>
334
- <span class="cline-any cline-yes">1x</span>
335
333
  <span class="cline-any cline-neutral">&nbsp;</span>
336
- <span class="cline-any cline-yes">1x</span>
334
+ <span class="cline-any cline-no">&nbsp;</span>
335
+ <span class="cline-any cline-neutral">&nbsp;</span>
336
+ <span class="cline-any cline-no">&nbsp;</span>
337
337
  <span class="cline-any cline-neutral">&nbsp;</span>
338
338
  <span class="cline-any cline-neutral">&nbsp;</span>
339
339
  <span class="cline-any cline-neutral">&nbsp;</span>
340
- <span class="cline-any cline-yes">1x</span>
340
+ <span class="cline-any cline-no">&nbsp;</span>
341
341
  <span class="cline-any cline-neutral">&nbsp;</span>
342
342
  <span class="cline-any cline-neutral">&nbsp;</span>
343
343
  <span class="cline-any cline-neutral">&nbsp;</span>
344
344
  <span class="cline-any cline-no">&nbsp;</span>
345
345
  <span class="cline-any cline-neutral">&nbsp;</span>
346
346
  <span class="cline-any cline-neutral">&nbsp;</span>
347
- <span class="cline-any cline-yes">2x</span>
348
- <span class="cline-any cline-yes">1x</span>
349
- <span class="cline-any cline-yes">1x</span>
350
347
  <span class="cline-any cline-neutral">&nbsp;</span>
351
- <span class="cline-any cline-yes">1x</span>
352
- <span class="cline-any cline-yes">1x</span>
353
- <span class="cline-any cline-yes">1x</span>
354
- <span class="cline-any cline-yes">1x</span>
355
- <span class="cline-any cline-yes">1x</span>
356
- <span class="cline-any cline-yes">1x</span>
348
+ <span class="cline-any cline-no">&nbsp;</span>
349
+ <span class="cline-any cline-no">&nbsp;</span>
350
+ <span class="cline-any cline-neutral">&nbsp;</span>
351
+ <span class="cline-any cline-no">&nbsp;</span>
352
+ <span class="cline-any cline-no">&nbsp;</span>
353
+ <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
357
  <span class="cline-any cline-neutral">&nbsp;</span>
358
- <span class="cline-any cline-yes">1x</span>
359
- <span class="cline-any cline-yes">1x</span>
360
- <span class="cline-any cline-yes">1x</span>
361
- <span class="cline-any cline-yes">1x</span>
362
- <span class="cline-any cline-yes">1x</span>
363
- <span class="cline-any cline-yes">1x</span>
364
- <span class="cline-any cline-yes">1x</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
365
  <span class="cline-any cline-neutral">&nbsp;</span>
366
- <span class="cline-any cline-yes">1x</span>
366
+ <span class="cline-any cline-no">&nbsp;</span>
367
367
  <span class="cline-any cline-neutral">&nbsp;</span>
368
- <span class="cline-any cline-yes">1x</span>
369
- <span class="cline-any cline-yes">1x</span>
368
+ <span class="cline-any cline-no">&nbsp;</span>
369
+ <span class="cline-any cline-no">&nbsp;</span>
370
370
  <span class="cline-any cline-neutral">&nbsp;</span>
371
- <span class="cline-any cline-yes">1x</span>
372
- <span class="cline-any cline-yes">1x</span>
371
+ <span class="cline-any cline-no">&nbsp;</span>
372
+ <span class="cline-any cline-no">&nbsp;</span>
373
373
  <span class="cline-any cline-neutral">&nbsp;</span>
374
374
  <span class="cline-any cline-neutral">&nbsp;</span>
375
375
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -377,35 +377,35 @@
377
377
  <span class="cline-any cline-no">&nbsp;</span>
378
378
  <span class="cline-any cline-neutral">&nbsp;</span>
379
379
  <span class="cline-any cline-neutral">&nbsp;</span>
380
- <span class="cline-any cline-yes">1x</span>
381
- <span class="cline-any cline-yes">1x</span>
382
- <span class="cline-any cline-yes">1x</span>
383
- <span class="cline-any cline-yes">1x</span>
384
- <span class="cline-any cline-yes">1x</span>
385
- <span class="cline-any cline-yes">1x</span>
386
- <span class="cline-any cline-yes">1x</span>
387
- <span class="cline-any cline-yes">1x</span>
388
- <span class="cline-any cline-yes">1x</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
389
  <span class="cline-any cline-neutral">&nbsp;</span>
390
390
  <span class="cline-any cline-neutral">&nbsp;</span>
391
- <span class="cline-any cline-yes">1x</span>
392
- <span class="cline-any cline-yes">1x</span>
393
- <span class="cline-any cline-yes">1x</span>
394
- <span class="cline-any cline-yes">1x</span>
395
- <span class="cline-any cline-yes">1x</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
396
  <span class="cline-any cline-neutral">&nbsp;</span>
397
397
  <span class="cline-any cline-neutral">&nbsp;</span>
398
- <span class="cline-any cline-yes">1x</span>
399
- <span class="cline-any cline-yes">1x</span>
398
+ <span class="cline-any cline-no">&nbsp;</span>
399
+ <span class="cline-any cline-no">&nbsp;</span>
400
400
  <span class="cline-any cline-neutral">&nbsp;</span>
401
- <span class="cline-any cline-yes">1x</span>
401
+ <span class="cline-any cline-no">&nbsp;</span>
402
402
  <span class="cline-any cline-neutral">&nbsp;</span>
403
403
  <span class="cline-any cline-neutral">&nbsp;</span>
404
404
  <span class="cline-any cline-neutral">&nbsp;</span>
405
- <span class="cline-any cline-yes">1x</span>
405
+ <span class="cline-any cline-no">&nbsp;</span>
406
406
  <span class="cline-any cline-neutral">&nbsp;</span>
407
407
  <span class="cline-any cline-neutral">&nbsp;</span>
408
- <span class="cline-any cline-yes">1x</span>
408
+ <span class="cline-any cline-no">&nbsp;</span>
409
409
  <span class="cline-any cline-neutral">&nbsp;</span>
410
410
  <span class="cline-any cline-no">&nbsp;</span>
411
411
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -416,38 +416,38 @@
416
416
  <span class="cline-any cline-neutral">&nbsp;</span>
417
417
  <span class="cline-any cline-neutral">&nbsp;</span>
418
418
  <span class="cline-any cline-neutral">&nbsp;</span>
419
- <span class="cline-any cline-yes">1x</span>
419
+ <span class="cline-any cline-no">&nbsp;</span>
420
420
  <span class="cline-any cline-neutral">&nbsp;</span>
421
421
  <span class="cline-any cline-neutral">&nbsp;</span>
422
- <span class="cline-any cline-yes">2x</span>
423
- <span class="cline-any cline-yes">1x</span>
424
422
  <span class="cline-any cline-neutral">&nbsp;</span>
425
- <span class="cline-any cline-yes">1x</span>
426
- <span class="cline-any cline-yes">1x</span>
423
+ <span class="cline-any cline-no">&nbsp;</span>
427
424
  <span class="cline-any cline-neutral">&nbsp;</span>
428
- <span class="cline-any cline-yes">1x</span>
425
+ <span class="cline-any cline-no">&nbsp;</span>
426
+ <span class="cline-any cline-no">&nbsp;</span>
429
427
  <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-yes">1x</span>
431
- <span class="cline-any cline-yes">1x</span>
432
- <span class="cline-any cline-yes">1x</span>
433
- <span class="cline-any cline-yes">1x</span>
434
- <span class="cline-any cline-yes">1x</span>
428
+ <span class="cline-any cline-no">&nbsp;</span>
435
429
  <span class="cline-any cline-neutral">&nbsp;</span>
436
- <span class="cline-any cline-yes">1x</span>
437
- <span class="cline-any cline-yes">1x</span>
438
- <span class="cline-any cline-yes">1x</span>
439
- <span class="cline-any cline-yes">1x</span>
430
+ <span class="cline-any cline-no">&nbsp;</span>
431
+ <span class="cline-any cline-no">&nbsp;</span>
432
+ <span class="cline-any cline-no">&nbsp;</span>
433
+ <span class="cline-any cline-no">&nbsp;</span>
434
+ <span class="cline-any cline-no">&nbsp;</span>
435
+ <span class="cline-any cline-neutral">&nbsp;</span>
436
+ <span class="cline-any cline-no">&nbsp;</span>
437
+ <span class="cline-any cline-no">&nbsp;</span>
438
+ <span class="cline-any cline-no">&nbsp;</span>
439
+ <span class="cline-any cline-no">&nbsp;</span>
440
440
  <span class="cline-any cline-neutral">&nbsp;</span>
441
441
  <span class="cline-any cline-neutral">&nbsp;</span>
442
- <span class="cline-any cline-yes">1x</span>
443
- <span class="cline-any cline-yes">1x</span>
444
- <span class="cline-any cline-yes">1x</span>
442
+ <span class="cline-any cline-no">&nbsp;</span>
443
+ <span class="cline-any cline-no">&nbsp;</span>
444
+ <span class="cline-any cline-no">&nbsp;</span>
445
445
  <span class="cline-any cline-neutral">&nbsp;</span>
446
- <span class="cline-any cline-yes">1x</span>
447
- <span class="cline-any cline-yes">1x</span>
448
- <span class="cline-any cline-yes">1x</span>
449
- <span class="cline-any cline-yes">1x</span>
450
- <span class="cline-any cline-yes">1x</span>
446
+ <span class="cline-any cline-no">&nbsp;</span>
447
+ <span class="cline-any cline-no">&nbsp;</span>
448
+ <span class="cline-any cline-no">&nbsp;</span>
449
+ <span class="cline-any cline-no">&nbsp;</span>
450
+ <span class="cline-any cline-no">&nbsp;</span>
451
451
  <span class="cline-any cline-neutral">&nbsp;</span>
452
452
  <span class="cline-any cline-neutral">&nbsp;</span>
453
453
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -463,97 +463,97 @@
463
463
  <span class="cline-any cline-neutral">&nbsp;</span>
464
464
  <span class="cline-any cline-neutral">&nbsp;</span>
465
465
  <span class="cline-any cline-neutral">&nbsp;</span>
466
- <span class="cline-any cline-yes">1x</span>
467
- <span class="cline-any cline-yes">1x</span>
468
- <span class="cline-any cline-yes">1x</span>
469
- <span class="cline-any cline-yes">1x</span>
466
+ <span class="cline-any cline-no">&nbsp;</span>
467
+ <span class="cline-any cline-no">&nbsp;</span>
468
+ <span class="cline-any cline-no">&nbsp;</span>
469
+ <span class="cline-any cline-no">&nbsp;</span>
470
470
  <span class="cline-any cline-neutral">&nbsp;</span>
471
471
  <span class="cline-any cline-neutral">&nbsp;</span>
472
- <span class="cline-any cline-yes">1x</span>
473
- <span class="cline-any cline-yes">1x</span>
474
- <span class="cline-any cline-yes">1x</span>
475
- <span class="cline-any cline-yes">1x</span>
472
+ <span class="cline-any cline-no">&nbsp;</span>
473
+ <span class="cline-any cline-no">&nbsp;</span>
474
+ <span class="cline-any cline-no">&nbsp;</span>
475
+ <span class="cline-any cline-no">&nbsp;</span>
476
476
  <span class="cline-any cline-neutral">&nbsp;</span>
477
477
  <span class="cline-any cline-neutral">&nbsp;</span>
478
- <span class="cline-any cline-yes">1x</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>
478
+ <span class="cline-any cline-no">&nbsp;</span>
479
+ <span class="cline-any cline-no">&nbsp;</span>
480
+ <span class="cline-any cline-no">&nbsp;</span>
481
+ <span class="cline-any cline-no">&nbsp;</span>
482
482
  <span class="cline-any cline-neutral">&nbsp;</span>
483
- <span class="cline-any cline-yes">1x</span>
484
- <span class="cline-any cline-yes">1x</span>
485
- <span class="cline-any cline-yes">1x</span>
486
- <span class="cline-any cline-yes">1x</span>
483
+ <span class="cline-any cline-no">&nbsp;</span>
484
+ <span class="cline-any cline-no">&nbsp;</span>
485
+ <span class="cline-any cline-no">&nbsp;</span>
486
+ <span class="cline-any cline-no">&nbsp;</span>
487
487
  <span class="cline-any cline-neutral">&nbsp;</span>
488
- <span class="cline-any cline-yes">1x</span>
488
+ <span class="cline-any cline-no">&nbsp;</span>
489
489
  <span class="cline-any cline-no">&nbsp;</span>
490
490
  <span class="cline-any cline-no">&nbsp;</span>
491
491
  <span class="cline-any cline-no">&nbsp;</span>
492
492
  <span class="cline-any cline-neutral">&nbsp;</span>
493
493
  <span class="cline-any cline-neutral">&nbsp;</span>
494
494
  <span class="cline-any cline-neutral">&nbsp;</span>
495
- <span class="cline-any cline-yes">1x</span>
496
- <span class="cline-any cline-yes">1x</span>
495
+ <span class="cline-any cline-no">&nbsp;</span>
496
+ <span class="cline-any cline-no">&nbsp;</span>
497
497
  <span class="cline-any cline-neutral">&nbsp;</span>
498
498
  <span class="cline-any cline-neutral">&nbsp;</span>
499
499
  <span class="cline-any cline-neutral">&nbsp;</span>
500
500
  <span class="cline-any cline-neutral">&nbsp;</span>
501
- <span class="cline-any cline-yes">1x</span>
501
+ <span class="cline-any cline-no">&nbsp;</span>
502
502
  <span class="cline-any cline-no">&nbsp;</span>
503
503
  <span class="cline-any cline-neutral">&nbsp;</span>
504
- <span class="cline-any cline-yes">1x</span>
504
+ <span class="cline-any cline-no">&nbsp;</span>
505
505
  <span class="cline-any cline-no">&nbsp;</span>
506
506
  <span class="cline-any cline-neutral">&nbsp;</span>
507
507
  <span class="cline-any cline-neutral">&nbsp;</span>
508
508
  <span class="cline-any cline-neutral">&nbsp;</span>
509
509
  <span class="cline-any cline-neutral">&nbsp;</span>
510
510
  <span class="cline-any cline-neutral">&nbsp;</span>
511
- <span class="cline-any cline-yes">1x</span>
512
- <span class="cline-any cline-yes">1x</span>
513
- <span class="cline-any cline-yes">1x</span>
511
+ <span class="cline-any cline-no">&nbsp;</span>
512
+ <span class="cline-any cline-no">&nbsp;</span>
513
+ <span class="cline-any cline-no">&nbsp;</span>
514
+ <span class="cline-any cline-neutral">&nbsp;</span>
515
+ <span class="cline-any cline-no">&nbsp;</span>
516
+ <span class="cline-any cline-no">&nbsp;</span>
517
+ <span class="cline-any cline-no">&nbsp;</span>
514
518
  <span class="cline-any cline-neutral">&nbsp;</span>
515
- <span class="cline-any cline-yes">1x</span>
516
- <span class="cline-any cline-yes">1x</span>
517
- <span class="cline-any cline-yes">1x</span>
518
519
  <span class="cline-any cline-neutral">&nbsp;</span>
519
520
  <span class="cline-any cline-neutral">&nbsp;</span>
520
- <span class="cline-any cline-yes">2x</span>
521
521
  <span class="cline-any cline-neutral">&nbsp;</span>
522
- <span class="cline-any cline-yes">1x</span>
523
- <span class="cline-any cline-yes">1x</span>
524
- <span class="cline-any cline-yes">1x</span>
525
- <span class="cline-any cline-yes">1x</span>
526
- <span class="cline-any cline-yes">1x</span>
522
+ <span class="cline-any cline-no">&nbsp;</span>
523
+ <span class="cline-any cline-no">&nbsp;</span>
524
+ <span class="cline-any cline-no">&nbsp;</span>
525
+ <span class="cline-any cline-no">&nbsp;</span>
526
+ <span class="cline-any cline-no">&nbsp;</span>
527
+ <span class="cline-any cline-neutral">&nbsp;</span>
528
+ <span class="cline-any cline-no">&nbsp;</span>
529
+ <span class="cline-any cline-no">&nbsp;</span>
527
530
  <span class="cline-any cline-neutral">&nbsp;</span>
528
- <span class="cline-any cline-yes">1x</span>
529
- <span class="cline-any cline-yes">1x</span>
531
+ <span class="cline-any cline-no">&nbsp;</span>
532
+ <span class="cline-any cline-no">&nbsp;</span>
533
+ <span class="cline-any cline-no">&nbsp;</span>
534
+ <span class="cline-any cline-no">&nbsp;</span>
535
+ <span class="cline-any cline-no">&nbsp;</span>
536
+ <span class="cline-any cline-no">&nbsp;</span>
530
537
  <span class="cline-any cline-neutral">&nbsp;</span>
531
- <span class="cline-any cline-yes">1x</span>
532
- <span class="cline-any cline-yes">1x</span>
533
- <span class="cline-any cline-yes">1x</span>
534
- <span class="cline-any cline-yes">1x</span>
535
- <span class="cline-any cline-yes">1x</span>
536
- <span class="cline-any cline-yes">1x</span>
537
538
  <span class="cline-any cline-neutral">&nbsp;</span>
539
+ <span class="cline-any cline-no">&nbsp;</span>
540
+ <span class="cline-any cline-no">&nbsp;</span>
538
541
  <span class="cline-any cline-neutral">&nbsp;</span>
539
- <span class="cline-any cline-yes">1x</span>
540
- <span class="cline-any cline-yes">1x</span>
541
542
  <span class="cline-any cline-neutral">&nbsp;</span>
543
+ <span class="cline-any cline-no">&nbsp;</span>
544
+ <span class="cline-any cline-no">&nbsp;</span>
542
545
  <span class="cline-any cline-neutral">&nbsp;</span>
543
- <span class="cline-any cline-yes">1x</span>
544
- <span class="cline-any cline-yes">1x</span>
545
546
  <span class="cline-any cline-neutral">&nbsp;</span>
546
547
  <span class="cline-any cline-neutral">&nbsp;</span>
547
- <span class="cline-any cline-yes">2x</span>
548
548
  <span class="cline-any cline-neutral">&nbsp;</span>
549
549
  <span class="cline-any cline-neutral">&nbsp;</span>
550
550
  <span class="cline-any cline-neutral">&nbsp;</span>
551
551
  <span class="cline-any cline-neutral">&nbsp;</span>
552
- <span class="cline-any cline-yes">1x</span>
553
- <span class="cline-any cline-yes">1x</span>
554
- <span class="cline-any cline-yes">1x</span>
552
+ <span class="cline-any cline-no">&nbsp;</span>
553
+ <span class="cline-any cline-no">&nbsp;</span>
554
+ <span class="cline-any cline-no">&nbsp;</span>
555
555
  <span class="cline-any cline-neutral">&nbsp;</span>
556
- <span class="cline-any cline-yes">1x</span>
556
+ <span class="cline-any cline-no">&nbsp;</span>
557
557
  <span class="cline-any cline-neutral">&nbsp;</span>
558
558
  <span class="cline-any cline-neutral">&nbsp;</span>
559
559
  <span class="cline-any cline-no">&nbsp;</span>
@@ -576,7 +576,7 @@
576
576
  <span class="cline-any cline-neutral">&nbsp;</span>
577
577
  <span class="cline-any cline-neutral">&nbsp;</span>
578
578
  <span class="cline-any cline-neutral">&nbsp;</span>
579
- <span class="cline-any cline-yes">1x</span>
579
+ <span class="cline-any cline-no">&nbsp;</span>
580
580
  <span class="cline-any cline-neutral">&nbsp;</span>
581
581
  <span class="cline-any cline-neutral">&nbsp;</span>
582
582
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import _ from 'lodash'
@@ -587,135 +587,135 @@ import * as dap from './opendap-utils'
587
587
  &nbsp;
588
588
  // only assumes grid variable is a regular grid w.r.t lat/lon
589
589
  export class OpenDapGridSource extends GridSource {
590
- static getKey () {
591
- return 'opendap'
590
+ <span class="fstat-no" title="function not covered" > st</span>atic getKey () {
591
+ <span class="cstat-no" title="statement not covered" > return 'opendap'</span>
592
592
  }
593
593
  &nbsp;
594
- constructor (options) {
595
- super(options)
594
+ <span class="fstat-no" title="function not covered" > co</span>nstructor (options) {
595
+ <span class="cstat-no" title="statement not covered" > super(options)</span>
596
596
  &nbsp;
597
- this.usable = false
597
+ <span class="cstat-no" title="statement not covered" > this.usable = false</span>
598
598
  }
599
599
  &nbsp;
600
- getBBox () {
601
- return this.usable ? [this.minMaxLat[0], this.minMaxLon[0], this.minMaxLat[1], this.minMaxLon[1]] : <span class="branch-1 cbranch-no" title="branch not covered" >null</span>
600
+ <span class="fstat-no" title="function not covered" > ge</span>tBBox () {
601
+ <span class="cstat-no" title="statement not covered" > return this.usable ? [this.minMaxLat[0], this.minMaxLon[0], this.minMaxLat[1], this.minMaxLon[1]] : null</span>
602
602
  }
603
603
  &nbsp;
604
- <span class="fstat-no" title="function not covered" > getDataBounds () {</span>
605
- <span class="cstat-no" title="statement not covered" > return t</span>his.usable ? this.minMaxVal : null
604
+ <span class="fstat-no" title="function not covered" > ge</span>tDataBounds () {
605
+ <span class="cstat-no" title="statement not covered" > return this.usable ? this.minMaxVal : null</span>
606
606
  }
607
607
  &nbsp;
608
- async setup (config) {
609
- this.usable = false
610
- ++this.sourceKey
608
+ <span class="fstat-no" title="function not covered" > as</span>ync setup (config) {
609
+ <span class="cstat-no" title="statement not covered" > this.usable = false</span>
610
+ <span class="cstat-no" title="statement not covered" > ++this.sourceKey</span>
611
611
  &nbsp;
612
- this.descriptor = null
613
- this.indices = null
614
- this.latCount = 0
615
- this.latIndex = 0
616
- this.lonCount = 0
617
- this.lonIndex = 0
612
+ <span class="cstat-no" title="statement not covered" > this.descriptor = null</span>
613
+ <span class="cstat-no" title="statement not covered" > this.indices = null</span>
614
+ <span class="cstat-no" title="statement not covered" > this.latCount = 0</span>
615
+ <span class="cstat-no" title="statement not covered" > this.latIndex = 0</span>
616
+ <span class="cstat-no" title="statement not covered" > this.lonCount = 0</span>
617
+ <span class="cstat-no" title="statement not covered" > this.lonIndex = 0</span>
618
618
  &nbsp;
619
- this.minMaxLat = null
620
- this.minMaxLon = null
621
- this.minMaxVal = null
622
- this.latStep = 0
623
- this.lonStep = 0
624
- this.latSortOrder = SortOrder.ASCENDING
625
- this.lonSortOrder = SortOrder.ASCENDING
619
+ <span class="cstat-no" title="statement not covered" > this.minMaxLat = null</span>
620
+ <span class="cstat-no" title="statement not covered" > this.minMaxLon = null</span>
621
+ <span class="cstat-no" title="statement not covered" > this.minMaxVal = null</span>
622
+ <span class="cstat-no" title="statement not covered" > this.latStep = 0</span>
623
+ <span class="cstat-no" title="statement not covered" > this.lonStep = 0</span>
624
+ <span class="cstat-no" title="statement not covered" > this.latSortOrder = SortOrder.ASCENDING</span>
625
+ <span class="cstat-no" title="statement not covered" > this.lonSortOrder = SortOrder.ASCENDING</span>
626
626
  &nbsp;
627
- this.canUseGrid2D = false
627
+ <span class="cstat-no" title="statement not covered" > this.canUseGrid2D = false</span>
628
628
  &nbsp;
629
- this.config = config
630
- this.converter = unitConverters[this.config.converter]
629
+ <span class="cstat-no" title="statement not covered" > this.config = config</span>
630
+ <span class="cstat-no" title="statement not covered" > this.converter = unitConverters[this.config.converter]</span>
631
631
  &nbsp;
632
- try {
633
- this.descriptor = await dap.fetchDescriptor(this.config.url)
632
+ <span class="cstat-no" title="statement not covered" > try {</span>
633
+ <span class="cstat-no" title="statement not covered" > this.descriptor = await dap.fetchDescriptor(this.config.url)</span>
634
634
  } catch (error) {
635
635
  // fetching may fail, in this case the source
636
636
  // will remain in unusable state
637
- <span class="cstat-no" title="statement not covered" > this.d</span>escriptor = null
638
- <span class="cstat-no" title="statement not covered" > console.l</span>og(`Failed fetching opendap descriptor from ${this.config.url}`)
637
+ <span class="cstat-no" title="statement not covered" > this.descriptor = null</span>
638
+ <span class="cstat-no" title="statement not covered" > console.log(`Failed fetching opendap descriptor from ${this.config.url}`)</span>
639
639
  }
640
640
  &nbsp;
641
- <span class="missing-if-branch" title="else path not taken" >E</span>if (this.descriptor) {
642
- const varIsGrid = dap.variableIsGrid(this.descriptor, this.config.variable)
643
- const latIsArray = dap.variableIsArray(this.descriptor, this.config.latitude)
644
- const lonIsArray = dap.variableIsArray(this.descriptor, this.config.longitude)
645
- <span class="missing-if-branch" title="else path not taken" >E</span>if (varIsGrid &amp;&amp; latIsArray &amp;&amp; lonIsArray) {
646
- this.latIndex = dap.getGridDimensionIndex(this.descriptor, this.config.variable, this.config.latitude)
647
- this.latCount = dap.getGridDimensionLength(this.descriptor, this.config.variable, this.latIndex)
648
- this.lonIndex = dap.getGridDimensionIndex(this.descriptor, this.config.variable, this.config.longitude)
649
- this.lonCount = dap.getGridDimensionLength(this.descriptor, this.config.variable, this.lonIndex)
641
+ <span class="cstat-no" title="statement not covered" > if (this.descriptor) {</span>
642
+ const varIsGrid = <span class="cstat-no" title="statement not covered" >dap.variableIsGrid(this.descriptor, this.config.variable)</span>
643
+ const latIsArray = <span class="cstat-no" title="statement not covered" >dap.variableIsArray(this.descriptor, this.config.latitude)</span>
644
+ const lonIsArray = <span class="cstat-no" title="statement not covered" >dap.variableIsArray(this.descriptor, this.config.longitude)</span>
645
+ <span class="cstat-no" title="statement not covered" > if (varIsGrid &amp;&amp; latIsArray &amp;&amp; lonIsArray) {</span>
646
+ <span class="cstat-no" title="statement not covered" > this.latIndex = dap.getGridDimensionIndex(this.descriptor, this.config.variable, this.config.latitude)</span>
647
+ <span class="cstat-no" title="statement not covered" > this.latCount = dap.getGridDimensionLength(this.descriptor, this.config.variable, this.latIndex)</span>
648
+ <span class="cstat-no" title="statement not covered" > this.lonIndex = dap.getGridDimensionIndex(this.descriptor, this.config.variable, this.config.longitude)</span>
649
+ <span class="cstat-no" title="statement not covered" > this.lonCount = dap.getGridDimensionLength(this.descriptor, this.config.variable, this.lonIndex)</span>
650
650
  &nbsp;
651
651
  // build grid indexing array
652
- const dimensions = await this.getDimensionsAsIndices()
653
- dimensions[this.config.latitude] = `0:${this.latCount - 1}`
654
- dimensions[this.config.longitude] = `0:${this.lonCount - 1}`
655
- this.indices = dap.makeGridIndices(this.descriptor, this.config.variable, dimensions)
656
- <span class="missing-if-branch" title="else path not taken" >E</span>if (this.indices.length !== 0) {
652
+ const dimensions = <span class="cstat-no" title="statement not covered" >await this.getDimensionsAsIndices()</span>
653
+ <span class="cstat-no" title="statement not covered" > dimensions[this.config.latitude] = `0:${this.latCount - 1}`</span>
654
+ <span class="cstat-no" title="statement not covered" > dimensions[this.config.longitude] = `0:${this.lonCount - 1}`</span>
655
+ <span class="cstat-no" title="statement not covered" > this.indices = dap.makeGridIndices(this.descriptor, this.config.variable, dimensions)</span>
656
+ <span class="cstat-no" title="statement not covered" > if (this.indices.length !== 0) {</span>
657
657
  // if lat and lon dimensions are the last in the query, we can
658
658
  // use a Grid2D directly (cheaper on cpu)
659
- const last = this.indices.length - 1
660
- <span class="missing-if-branch" title="else path not taken" >E</span>if ((this.latIndex === last &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >this.lonIndex === (last - 1)) ||</span>
659
+ const last = <span class="cstat-no" title="statement not covered" >this.indices.length - 1</span>
660
+ <span class="cstat-no" title="statement not covered" > if ((this.latIndex === last &amp;&amp; this.lonIndex === (last - 1)) ||</span>
661
661
  (this.latIndex === (last - 1) &amp;&amp; this.lonIndex === last)) {
662
- this.canUseGrid2D = true
662
+ <span class="cstat-no" title="statement not covered" > this.canUseGrid2D = true</span>
663
663
  }
664
664
  &nbsp;
665
665
  // TODO: store metadata somewhere instead of requesting the whole variable
666
- await this.computeMetaDataFromData()
666
+ <span class="cstat-no" title="statement not covered" > await this.computeMetaDataFromData()</span>
667
667
  &nbsp;
668
668
  // flag source as usable
669
- this.usable = true
669
+ <span class="cstat-no" title="statement not covered" > this.usable = true</span>
670
670
  } else {
671
- <span class="cstat-no" title="statement not covered" > console.l</span>og("Couldn't create index array for grid")
671
+ <span class="cstat-no" title="statement not covered" > console.log("Couldn't create index array for grid")</span>
672
672
  }
673
673
  } else {
674
- <span class="cstat-no" title="statement not covered" > if (!varIsGrid) <span class="cstat-no" title="statement not covered" >console.l</span></span>og(`${this.config.variable} is not a grid variable!`)
675
- <span class="cstat-no" title="statement not covered" > if (!latIsArray) <span class="cstat-no" title="statement not covered" >console.l</span></span>og(`${this.config.latitude} is expected to be an array variable!`)
676
- <span class="cstat-no" title="statement not covered" > if (!lonIsArray) <span class="cstat-no" title="statement not covered" >console.l</span></span>og(`${this.config.longitude} is expected to be an array variable!`)
674
+ <span class="cstat-no" title="statement not covered" > if (!varIsGrid) <span class="cstat-no" title="statement not covered" >console.log(`${this.config.variable} is not a grid variable!`)</span></span>
675
+ <span class="cstat-no" title="statement not covered" > if (!latIsArray) <span class="cstat-no" title="statement not covered" >console.log(`${this.config.latitude} is expected to be an array variable!`)</span></span>
676
+ <span class="cstat-no" title="statement not covered" > if (!lonIsArray) <span class="cstat-no" title="statement not covered" >console.log(`${this.config.longitude} is expected to be an array variable!`)</span></span>
677
677
  }
678
678
  }
679
679
  &nbsp;
680
- this.dataChanged()
680
+ <span class="cstat-no" title="statement not covered" > this.dataChanged()</span>
681
681
  }
682
682
  &nbsp;
683
- async fetch (abort, bbox, resolution) {
684
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.usable) { <span class="cstat-no" title="statement not covered" >return n</span>ull }
683
+ <span class="fstat-no" title="function not covered" > as</span>ync fetch (abort, bbox, resolution) {
684
+ <span class="cstat-no" title="statement not covered" > if (!this.usable) { <span class="cstat-no" title="statement not covered" >return null </span>}</span>
685
685
  &nbsp;
686
- const query = this.makeQuery(bbox, resolution)
687
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!query) { <span class="cstat-no" title="statement not covered" >return n</span>ull }
686
+ const query = <span class="cstat-no" title="statement not covered" >this.makeQuery(bbox, resolution)</span>
687
+ <span class="cstat-no" title="statement not covered" > if (!query) { <span class="cstat-no" title="statement not covered" >return null </span>}</span>
688
688
  &nbsp;
689
- const sourceKey = this.sourceKey
689
+ const sourceKey = <span class="cstat-no" title="statement not covered" >this.sourceKey</span>
690
690
  &nbsp;
691
- const data = await dap.fetchData(query, abort)
692
- const req = data[this.config.variable]
693
- const valData = req[0]
694
- const latData = req[this.latIndex + 1]
695
- const lonData = req[this.lonIndex + 1]
691
+ const data = <span class="cstat-no" title="statement not covered" >await dap.fetchData(query, abort)</span>
692
+ const req = <span class="cstat-no" title="statement not covered" >data[this.config.variable]</span>
693
+ const valData = <span class="cstat-no" title="statement not covered" >req[0]</span>
694
+ const latData = <span class="cstat-no" title="statement not covered" >req[this.latIndex + 1]</span>
695
+ const lonData = <span class="cstat-no" title="statement not covered" >req[this.lonIndex + 1]</span>
696
696
  &nbsp;
697
- const lat0 = latData[0]
698
- const lat1 = latData[latData.length - 1]
699
- let lon0 = lonData[0]
700
- let lon1 = lonData[lonData.length - 1]
697
+ const lat0 = <span class="cstat-no" title="statement not covered" >latData[0]</span>
698
+ const lat1 = <span class="cstat-no" title="statement not covered" >latData[latData.length - 1]</span>
699
+ let lon0 = <span class="cstat-no" title="statement not covered" >lonData[0]</span>
700
+ let lon1 = <span class="cstat-no" title="statement not covered" >lonData[lonData.length - 1]</span>
701
701
  &nbsp;
702
702
  // normalize bounds
703
- <span class="missing-if-branch" title="if path not taken" >I</span>if (lon0 &gt; 180.0) <span class="cstat-no" title="statement not covered" >lon0 -= 3</span>60.0
704
- <span class="missing-if-branch" title="if path not taken" >I</span>if (lon1 &gt; 180.0) <span class="cstat-no" title="statement not covered" >lon1 -= 3</span>60.0
705
- const databbox = [Math.min(lat0, lat1), Math.min(lon0, lon1), Math.max(lat0, lat1), Math.max(lon0, lon1)]
706
- &nbsp;
707
- <span class="missing-if-branch" title="else path not taken" >E</span>if (this.canUseGrid2D) {
708
- const indices = this.indices.slice(0, this.indices.length - 2)
709
- indices.fill(0)
710
- const subgrid = dap.getGridValue(valData, indices)
711
- return new Grid2D(
703
+ <span class="cstat-no" title="statement not covered" > if (lon0 &gt; 180.0) <span class="cstat-no" title="statement not covered" >lon0 -= 360.0</span></span>
704
+ <span class="cstat-no" title="statement not covered" > if (lon1 &gt; 180.0) <span class="cstat-no" title="statement not covered" >lon1 -= 360.0</span></span>
705
+ const databbox = <span class="cstat-no" title="statement not covered" >[Math.min(lat0, lat1), Math.min(lon0, lon1), Math.max(lat0, lat1), Math.max(lon0, lon1)]</span>
706
+ &nbsp;
707
+ <span class="cstat-no" title="statement not covered" > if (this.canUseGrid2D) {</span>
708
+ const indices = <span class="cstat-no" title="statement not covered" >this.indices.slice(0, this.indices.length - 2)</span>
709
+ <span class="cstat-no" title="statement not covered" > indices.fill(0)</span>
710
+ const subgrid = <span class="cstat-no" title="statement not covered" >dap.getGridValue(valData, indices)</span>
711
+ <span class="cstat-no" title="statement not covered" > return new Grid2D(</span>
712
712
  sourceKey,
713
713
  databbox, [latData.length, lonData.length],
714
714
  subgrid, this.latIndex &lt; this.lonIndex, this.latSortOrder, this.lonSortOrder,
715
715
  this.nodata, this.converter)
716
716
  }
717
717
  &nbsp;
718
- <span class="cstat-no" title="statement not covered" > return n</span>ew dap.OpenDAPGrid(
718
+ <span class="cstat-no" title="statement not covered" > return new dap.OpenDAPGrid(</span>
719
719
  sourceKey,
720
720
  databbox, [latData.length, lonData.length],
721
721
  valData, this.indices, this.latIndex, this.lonIndex,
@@ -723,121 +723,121 @@ export class OpenDapGridSource extends GridSource {
723
723
  this.nodata, this.converter)
724
724
  }
725
725
  &nbsp;
726
- makeQuery (bbox, resolution) {
727
- const reqMinLat = bbox[0]
728
- const reqMinLon = bbox[1]
729
- const reqMaxLat = bbox[2]
730
- const reqMaxLon = bbox[3]
726
+ <span class="fstat-no" title="function not covered" > ma</span>keQuery (bbox, resolution) {
727
+ const reqMinLat = <span class="cstat-no" title="statement not covered" >bbox[0]</span>
728
+ const reqMinLon = <span class="cstat-no" title="statement not covered" >bbox[1]</span>
729
+ const reqMaxLat = <span class="cstat-no" title="statement not covered" >bbox[2]</span>
730
+ const reqMaxLon = <span class="cstat-no" title="statement not covered" >bbox[3]</span>
731
731
  &nbsp;
732
732
  // compute coordinates indices (assume lat/lon both ascending)
733
- let iMinLat = Math.floor((reqMinLat - this.minMaxLat[0]) / this.latStep)
734
- let iMinLon = Math.floor((reqMinLon - this.minMaxLon[0]) / this.lonStep)
735
- let iMaxLat = Math.ceil((reqMaxLat - this.minMaxLat[0]) / this.latStep)
736
- let iMaxLon = Math.ceil((reqMaxLon - this.minMaxLon[0]) / this.lonStep)
733
+ let iMinLat = <span class="cstat-no" title="statement not covered" >Math.floor((reqMinLat - this.minMaxLat[0]) / this.latStep)</span>
734
+ let iMinLon = <span class="cstat-no" title="statement not covered" >Math.floor((reqMinLon - this.minMaxLon[0]) / this.lonStep)</span>
735
+ let iMaxLat = <span class="cstat-no" title="statement not covered" >Math.ceil((reqMaxLat - this.minMaxLat[0]) / this.latStep)</span>
736
+ let iMaxLon = <span class="cstat-no" title="statement not covered" >Math.ceil((reqMaxLon - this.minMaxLon[0]) / this.lonStep)</span>
737
737
  &nbsp;
738
738
  // clamp indices
739
- iMinLat = Math.min(Math.max(iMinLat, 0), this.latCount - 1)
740
- iMinLon = Math.min(Math.max(iMinLon, 0), this.lonCount - 1)
741
- iMaxLat = Math.min(Math.max(iMaxLat, 0), this.latCount - 1)
742
- iMaxLon = Math.min(Math.max(iMaxLon, 0), this.lonCount - 1)
743
- &nbsp;
744
- <span class="missing-if-branch" title="else path not taken" >E</span>if (this.latSortOrder === SortOrder.DESCENDING) {
745
- const tmp = iMinLat
746
- iMinLat = this.latCount - 1 - iMaxLat
747
- iMaxLat = this.latCount - 1 - tmp
739
+ <span class="cstat-no" title="statement not covered" > iMinLat = Math.min(Math.max(iMinLat, 0), this.latCount - 1)</span>
740
+ <span class="cstat-no" title="statement not covered" > iMinLon = Math.min(Math.max(iMinLon, 0), this.lonCount - 1)</span>
741
+ <span class="cstat-no" title="statement not covered" > iMaxLat = Math.min(Math.max(iMaxLat, 0), this.latCount - 1)</span>
742
+ <span class="cstat-no" title="statement not covered" > iMaxLon = Math.min(Math.max(iMaxLon, 0), this.lonCount - 1)</span>
743
+ &nbsp;
744
+ <span class="cstat-no" title="statement not covered" > if (this.latSortOrder === SortOrder.DESCENDING) {</span>
745
+ const tmp = <span class="cstat-no" title="statement not covered" >iMinLat</span>
746
+ <span class="cstat-no" title="statement not covered" > iMinLat = this.latCount - 1 - iMaxLat</span>
747
+ <span class="cstat-no" title="statement not covered" > iMaxLat = this.latCount - 1 - tmp</span>
748
748
  }
749
- <span class="missing-if-branch" title="if path not taken" >I</span>if (this.lonSortOrder === SortOrder.DESCENDING) {
749
+ <span class="cstat-no" title="statement not covered" > if (this.lonSortOrder === SortOrder.DESCENDING) {</span>
750
750
  const tmp = <span class="cstat-no" title="statement not covered" >iMinLon</span>
751
- <span class="cstat-no" title="statement not covered" > iMinLon = t</span>his.lonCount - 1 - iMaxLon
752
- <span class="cstat-no" title="statement not covered" > iMaxLon = t</span>his.lonCount - 1 - tmp
751
+ <span class="cstat-no" title="statement not covered" > iMinLon = this.lonCount - 1 - iMaxLon</span>
752
+ <span class="cstat-no" title="statement not covered" > iMaxLon = this.lonCount - 1 - tmp</span>
753
753
  }
754
754
  &nbsp;
755
755
  // compute ideal stride according to requested resolution
756
- const strideLat = Math.max(1, Math.floor(resolution[0] / this.latStep))
757
- const strideLon = Math.max(1, Math.floor(resolution[1] / this.lonStep))
756
+ const strideLat = <span class="cstat-no" title="statement not covered" >Math.max(1, Math.floor(resolution[0] / this.latStep))</span>
757
+ const strideLon = <span class="cstat-no" title="statement not covered" >Math.max(1, Math.floor(resolution[1] / this.lonStep))</span>
758
758
  &nbsp;
759
759
  // eventually adjust iMLax{Lat,Lon} when using a stride != 1
760
760
  // this ensure we'll get our initial iMin/iMax range no matter
761
761
  // what the stride is
762
- <span class="missing-if-branch" title="if path not taken" >I</span>if (strideLat &gt; 1) {
763
- <span class="cstat-no" title="statement not covered" > iMaxLat = M</span>ath.min(this.latCount - 1, iMaxLat + strideLat)
762
+ <span class="cstat-no" title="statement not covered" > if (strideLat &gt; 1) {</span>
763
+ <span class="cstat-no" title="statement not covered" > iMaxLat = Math.min(this.latCount - 1, iMaxLat + strideLat)</span>
764
764
  }
765
- <span class="missing-if-branch" title="if path not taken" >I</span>if (strideLon &gt; 1) {
766
- <span class="cstat-no" title="statement not covered" > iMaxLon = M</span>ath.min(this.lonCount - 1, iMaxLon + strideLon)
765
+ <span class="cstat-no" title="statement not covered" > if (strideLon &gt; 1) {</span>
766
+ <span class="cstat-no" title="statement not covered" > iMaxLon = Math.min(this.lonCount - 1, iMaxLon + strideLon)</span>
767
767
  }
768
768
  &nbsp;
769
769
  // These are indices to index in the opendap variable grid, we're filling the
770
770
  // latitude/longitude indices with correct values to cover the requested
771
771
  // bounding box with the requested resolution
772
- const indices = [...this.indices]
773
- indices[this.latIndex] = `${iMinLat}:${strideLat}:${iMaxLat}`
774
- indices[this.lonIndex] = `${iMinLon}:${strideLon}:${iMaxLon}`
772
+ const indices = <span class="cstat-no" title="statement not covered" >[...this.indices]</span>
773
+ <span class="cstat-no" title="statement not covered" > indices[this.latIndex] = `${iMinLat}:${strideLat}:${iMaxLat}`</span>
774
+ <span class="cstat-no" title="statement not covered" > indices[this.lonIndex] = `${iMinLon}:${strideLon}:${iMaxLon}`</span>
775
775
  &nbsp;
776
- const conf = {}
777
- conf[this.config.variable] = indices.join('][')
778
- return dap.makeQuery(this.config.url, conf)
776
+ const conf = <span class="cstat-no" title="statement not covered" >{}</span>
777
+ <span class="cstat-no" title="statement not covered" > conf[this.config.variable] = indices.join('][')</span>
778
+ <span class="cstat-no" title="statement not covered" > return dap.makeQuery(this.config.url, conf)</span>
779
779
  }
780
780
  &nbsp;
781
- async computeMetaDataFromData () {
781
+ <span class="fstat-no" title="function not covered" > as</span>ync computeMetaDataFromData () {
782
782
  // Query first and last latitude and longitude
783
- const query = {}
784
- query[this.config.latitude] = `0:${this.latCount - 1}:${this.latCount - 1}`
785
- query[this.config.longitude] = `0:${this.lonCount - 1}:${this.lonCount - 1}`
786
- const url = dap.makeQuery(this.config.url, query)
787
- const res = await dap.fetchData(url)
788
- &nbsp;
789
- const latData = res[this.config.latitude]
790
- const lonData = res[this.config.longitude]
791
- &nbsp;
792
- const lat0 = latData[0]
793
- const lat1 = latData[latData.length - 1]
794
- this.minMaxLat = [Math.min(lat0, lat1), Math.max(lat0, lat1)]
795
- const lon0 = lonData[0] &gt; 180.0 ? <span class="branch-0 cbranch-no" title="branch not covered" >lonData[0] - 360.0 : l</span>onData[0]
796
- const lon1 = lonData[lonData.length - 1] &gt; 180.0 ? <span class="branch-0 cbranch-no" title="branch not covered" >lonData[lonData.length - 1] - 360.0 : l</span>onData[lonData.length - 1]
797
- this.minMaxLon = [Math.min(lon0, lon1), Math.max(lon0, lon1)]
783
+ const query = <span class="cstat-no" title="statement not covered" >{}</span>
784
+ <span class="cstat-no" title="statement not covered" > query[this.config.latitude] = `0:${this.latCount - 1}:${this.latCount - 1}`</span>
785
+ <span class="cstat-no" title="statement not covered" > query[this.config.longitude] = `0:${this.lonCount - 1}:${this.lonCount - 1}`</span>
786
+ const url = <span class="cstat-no" title="statement not covered" >dap.makeQuery(this.config.url, query)</span>
787
+ const res = <span class="cstat-no" title="statement not covered" >await dap.fetchData(url)</span>
788
+ &nbsp;
789
+ const latData = <span class="cstat-no" title="statement not covered" >res[this.config.latitude]</span>
790
+ const lonData = <span class="cstat-no" title="statement not covered" >res[this.config.longitude]</span>
791
+ &nbsp;
792
+ const lat0 = <span class="cstat-no" title="statement not covered" >latData[0]</span>
793
+ const lat1 = <span class="cstat-no" title="statement not covered" >latData[latData.length - 1]</span>
794
+ <span class="cstat-no" title="statement not covered" > this.minMaxLat = [Math.min(lat0, lat1), Math.max(lat0, lat1)]</span>
795
+ const lon0 = <span class="cstat-no" title="statement not covered" >lonData[0] &gt; 180.0 ? lonData[0] - 360.0 : lonData[0]</span>
796
+ const lon1 = <span class="cstat-no" title="statement not covered" >lonData[lonData.length - 1] &gt; 180.0 ? lonData[lonData.length - 1] - 360.0 : lonData[lonData.length - 1]</span>
797
+ <span class="cstat-no" title="statement not covered" > this.minMaxLon = [Math.min(lon0, lon1), Math.max(lon0, lon1)]</span>
798
798
  &nbsp;
799
799
  // grid resolution
800
- this.latStep = (this.minMaxLat[1] - this.minMaxLat[0]) / (this.latCount - 1)
801
- this.lonStep = (this.minMaxLon[1] - this.minMaxLon[0]) / (this.lonCount - 1)
800
+ <span class="cstat-no" title="statement not covered" > this.latStep = (this.minMaxLat[1] - this.minMaxLat[0]) / (this.latCount - 1)</span>
801
+ <span class="cstat-no" title="statement not covered" > this.lonStep = (this.minMaxLon[1] - this.minMaxLon[0]) / (this.lonCount - 1)</span>
802
802
  &nbsp;
803
803
  // deduce whether lat/lon dimensions are store in ascending or descending order
804
- this.latSortOrder = lat0 &lt; lat1 ? <span class="branch-0 cbranch-no" title="branch not covered" >SortOrder.ASCENDING : S</span>ortOrder.DESCENDING
805
- this.lonSortOrder = lon0 &lt; lon1 ? SortOrder.ASCENDING : <span class="branch-1 cbranch-no" title="branch not covered" >SortOrder.DESCENDING</span>
804
+ <span class="cstat-no" title="statement not covered" > this.latSortOrder = lat0 &lt; lat1 ? SortOrder.ASCENDING : SortOrder.DESCENDING</span>
805
+ <span class="cstat-no" title="statement not covered" > this.lonSortOrder = lon0 &lt; lon1 ? SortOrder.ASCENDING : SortOrder.DESCENDING</span>
806
806
  }
807
807
  &nbsp;
808
- async getDimensionsAsIndices () {
808
+ <span class="fstat-no" title="function not covered" > as</span>ync getDimensionsAsIndices () {
809
809
  // config.dimensionsAsIndices contains indices
810
810
  // config.dimensionsAsValues contains dimension values for which we
811
811
  // need to lookup actual index
812
812
  &nbsp;
813
- const dimensions = {}
814
- <span class="missing-if-branch" title="else path not taken" >E</span>if (this.config.dimensionsAsIndices) {
815
- Object.assign(dimensions, this.config.dimensionsAsIndices)
813
+ const dimensions = <span class="cstat-no" title="statement not covered" >{}</span>
814
+ <span class="cstat-no" title="statement not covered" > if (this.config.dimensionsAsIndices) {</span>
815
+ <span class="cstat-no" title="statement not covered" > Object.assign(dimensions, this.config.dimensionsAsIndices)</span>
816
816
  }
817
- <span class="missing-if-branch" title="if path not taken" >I</span>if (this.config.dimensionsAsValues) {
817
+ <span class="cstat-no" title="statement not covered" > if (this.config.dimensionsAsValues) {</span>
818
818
  // build a request to query the values for each dimension for which we have a value
819
819
  // const requested = _.keys(this.config.dimensionsAsValues)
820
- const variables = <span class="cstat-no" title="statement not covered" >_.k</span>eys(this.config.dimensionsAsValues)
821
- const query = <span class="cstat-no" title="statement not covered" >dap.m</span>akeQuery(this.config.url, variables)
822
- const data = <span class="cstat-no" title="statement not covered" >await dap.f</span>etchData(query, null)
820
+ const variables = <span class="cstat-no" title="statement not covered" >_.keys(this.config.dimensionsAsValues)</span>
821
+ const query = <span class="cstat-no" title="statement not covered" >dap.makeQuery(this.config.url, variables)</span>
822
+ const data = <span class="cstat-no" title="statement not covered" >await dap.fetchData(query, null)</span>
823
823
  // lookup corresponding indices
824
- <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0; i</span> &lt; variables.length; ++i) {</span>
825
- const varValues = <span class="cstat-no" title="statement not covered" >data[v</span>ariables[i]]
826
- const varValue = <span class="cstat-no" title="statement not covered" >this.c</span>onfig.dimensionsAsValues[variables[i]]
824
+ <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; variables.length; ++i) {</span>
825
+ const varValues = <span class="cstat-no" title="statement not covered" >data[variables[i]]</span>
826
+ const varValue = <span class="cstat-no" title="statement not covered" >this.config.dimensionsAsValues[variables[i]]</span>
827
827
  let valueIndex = <span class="cstat-no" title="statement not covered" >-1</span>
828
- <span class="cstat-no" title="statement not covered" > for (let j = <span class="cstat-no" title="statement not covered" >0; j</span> &lt; varValues.length &amp;&amp; valueIndex === -1; ++j) {</span>
829
- <span class="cstat-no" title="statement not covered" > if (varValues[j] === varValue) { <span class="cstat-no" title="statement not covered" >valueIndex = j</span> }</span>
828
+ <span class="cstat-no" title="statement not covered" > for (let j = <span class="cstat-no" title="statement not covered" >0;</span> j &lt; varValues.length &amp;&amp; valueIndex === -1; ++j) {</span>
829
+ <span class="cstat-no" title="statement not covered" > if (varValues[j] === varValue) { <span class="cstat-no" title="statement not covered" >valueIndex = j </span>}</span>
830
830
  }
831
831
  <span class="cstat-no" title="statement not covered" > if (valueIndex === -1) {</span>
832
832
  // value not found :(
833
- <span class="cstat-no" title="statement not covered" > throw n</span>ew Error(`Failed looking up value '${varValue}' for dimension named '${variables[i]}'`)
833
+ <span class="cstat-no" title="statement not covered" > throw new Error(`Failed looking up value '${varValue}' for dimension named '${variables[i]}'`)</span>
834
834
  }
835
835
  &nbsp;
836
- <span class="cstat-no" title="statement not covered" > dimensions[v</span>ariables[i]] = valueIndex
836
+ <span class="cstat-no" title="statement not covered" > dimensions[variables[i]] = valueIndex</span>
837
837
  }
838
838
  }
839
839
  &nbsp;
840
- return dimensions
840
+ <span class="cstat-no" title="statement not covered" > return dimensions</span>
841
841
  }
842
842
  }
843
843
  &nbsp;</pre></td></tr></table></pre>
@@ -847,7 +847,7 @@ export class OpenDapGridSource extends GridSource {
847
847
  <div class='footer quiet pad2 space-top1 center small'>
848
848
  Code coverage generated by
849
849
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
850
- at Tue Jun 08 2021 18:08:52 GMT+0200 (GMT+02:00)
850
+ at Wed Dec 08 2021 20:41:51 GMT+0100 (GMT+01:00)
851
851
  </div>
852
852
  </div>
853
853
  <script src="../../prettify.js"></script>