gridviz 2.1.13 → 2.1.14

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 (60) hide show
  1. package/README.md +124 -125
  2. package/dist/gridviz.js +8341 -8339
  3. package/dist/gridviz.min.js +1 -1
  4. package/package.json +77 -77
  5. package/src/App.js +758 -758
  6. package/src/BackgroundLayer.js +182 -182
  7. package/src/BackgroundLayerWMS.js +131 -131
  8. package/src/Dataset.js +76 -76
  9. package/src/DatasetComponent.js +113 -113
  10. package/src/GeoCanvas.js +420 -420
  11. package/src/LabelLayer.js +190 -190
  12. package/src/Layer.js +103 -103
  13. package/src/Legend.js +86 -86
  14. package/src/LineLayer.js +150 -150
  15. package/src/Style.js +131 -129
  16. package/src/Tooltip.js +180 -180
  17. package/src/button/Button.js +54 -54
  18. package/src/button/FullscreenButton.js +98 -98
  19. package/src/button/ZoomButtons.js +72 -72
  20. package/src/dataset/COGeo.js +24 -24
  21. package/src/dataset/CSVGrid.js +104 -104
  22. package/src/dataset/GeoTIFF.js +127 -127
  23. package/src/dataset/GridTile.js +41 -41
  24. package/src/dataset/LGrid.js +54 -54
  25. package/src/dataset/TiledGrid.js +264 -264
  26. package/src/index.js +71 -71
  27. package/src/legend/ColorCategoryLegend.js +124 -124
  28. package/src/legend/ColorDiscreteLegend.js +103 -103
  29. package/src/legend/ColorLegend.js +128 -128
  30. package/src/legend/SegmentOrientationLegend.js +87 -87
  31. package/src/legend/SegmentWidthLegend.js +101 -101
  32. package/src/legend/SizeLegend.js +141 -141
  33. package/src/style/CompositionStyle.js +300 -300
  34. package/src/style/ContourStyle.js +54 -54
  35. package/src/style/DotDensityStyle.js +156 -156
  36. package/src/style/IsoFenceStyle.js +262 -262
  37. package/src/style/JoyPlotStyle.js +135 -135
  38. package/src/style/LegoStyle.js +112 -112
  39. package/src/style/MosaicStyle.js +107 -107
  40. package/src/style/NinjaStarStyle.js +125 -125
  41. package/src/style/PillarStyle.js +230 -230
  42. package/src/style/SegmentStyle.js +142 -142
  43. package/src/style/ShapeColorSizeStyle.js +152 -152
  44. package/src/style/SideCatStyle.js +172 -172
  45. package/src/style/SideStyle.js +216 -216
  46. package/src/style/SquareColorCatWGLStyle.js +120 -120
  47. package/src/style/SquareColorWGLStyle.js +146 -146
  48. package/src/style/StrokeStyle.js +131 -131
  49. package/src/style/TanakaStyle.js +160 -160
  50. package/src/style/TextStyle.js +132 -132
  51. package/src/style/TimeSeriesStyle.js +259 -259
  52. package/src/utils/Utils.js +35 -35
  53. package/src/utils/WebGLRectangleColoring.js +106 -106
  54. package/src/utils/WebGLSquareColoring.js +118 -118
  55. package/src/utils/WebGLSquareColoringAdvanced.js +230 -230
  56. package/src/utils/WebGLSquareColoringCatAdvanced.js +133 -133
  57. package/src/utils/WebGLSquareColoringKS.js +153 -153
  58. package/src/utils/stretching.js +131 -131
  59. package/src/utils/webGLUtils.js +71 -71
  60. package/src/utils/zoomUtils.js +142 -142
@@ -1,54 +1,54 @@
1
- /**
2
- * Parent class for button elements used to interact with the gridviz viewer.
3
- *
4
- * @author Joseph Davies, Julien Gaffuri
5
- */
6
- export class Button {
7
- /**
8
- * @param {Object} opts
9
- * opts.parentNode
10
- * opts.id
11
- * opts.title
12
- * opts.class
13
- * opts.onClickFunction
14
- * opts.x
15
- * opts.y
16
- */
17
- constructor(opts) {
18
- opts = opts || {}
19
-
20
- this.app = opts.app
21
- this.parentNode = opts.parentNode || opts.app.container
22
- this.id = opts.id || 'button-' + Math.random()
23
-
24
- // create HTML node
25
- this.node = document.createElement('div')
26
- this.node.id = this.id
27
- if (opts.title) this.node.title = opts.title
28
- if (opts.class) this.node.classList.add(opts.class)
29
-
30
- // add events
31
- if (opts.onClickFunction) this.node.addEventListener('onclick', opts.onClickFunction)
32
- this.node.addEventListener('mouseover', (e)=>{this.node.style.backgroundColor = 'lightgrey'})
33
- this.node.addEventListener('mouseout', (e)=>{this.node.style.backgroundColor = '#ffffff'})
34
-
35
- //set styles
36
- this.node.classList.add(opts.class)
37
- this.node.style.boxShadow =
38
- '0 7px 8px rgba(0,47,103,.08), 0 0 22px rgba(0,47,103,.04), 0 12px 17px rgba(0,47,103,.04), 0 -4px 4px rgba(0,47,103,.04)' //.ecl-u-shadow-3
39
- this.node.style.backgroundColor = '#ffffff' //.ecl-u-bg-white
40
- this.node.style.position = 'absolute'
41
- this.node.style.cursor = 'pointer'
42
- this.node.style.display = 'flex'
43
- this.node.style.justifyContent = 'center'
44
- this.node.style.alignItems = 'center'
45
- this.node.style.width = '30px'
46
- this.node.style.height = '30px'
47
- // this.node.style.padding = '4px'
48
- this.node.style.top = opts.y + 'px'
49
- this.node.style.left = opts.x + 'px'
50
-
51
- // append to parent
52
- this.parentNode.appendChild(this.node)
53
- }
54
- }
1
+ /**
2
+ * Parent class for button elements used to interact with the gridviz viewer.
3
+ *
4
+ * @author Joseph Davies, Julien Gaffuri
5
+ */
6
+ export class Button {
7
+ /**
8
+ * @param {Object} opts
9
+ * opts.parentNode
10
+ * opts.id
11
+ * opts.title
12
+ * opts.class
13
+ * opts.onClickFunction
14
+ * opts.x
15
+ * opts.y
16
+ */
17
+ constructor(opts) {
18
+ opts = opts || {}
19
+
20
+ this.app = opts.app
21
+ this.parentNode = opts.parentNode || opts.app.container
22
+ this.id = opts.id || 'button-' + Math.random()
23
+
24
+ // create HTML node
25
+ this.node = document.createElement('div')
26
+ this.node.id = this.id
27
+ if (opts.title) this.node.title = opts.title
28
+ if (opts.class) this.node.classList.add(opts.class)
29
+
30
+ // add events
31
+ if (opts.onClickFunction) this.node.addEventListener('onclick', opts.onClickFunction)
32
+ this.node.addEventListener('mouseover', (e)=>{this.node.style.backgroundColor = 'lightgrey'})
33
+ this.node.addEventListener('mouseout', (e)=>{this.node.style.backgroundColor = '#ffffff'})
34
+
35
+ //set styles
36
+ this.node.classList.add(opts.class)
37
+ this.node.style.boxShadow =
38
+ '0 7px 8px rgba(0,47,103,.08), 0 0 22px rgba(0,47,103,.04), 0 12px 17px rgba(0,47,103,.04), 0 -4px 4px rgba(0,47,103,.04)' //.ecl-u-shadow-3
39
+ this.node.style.backgroundColor = '#ffffff' //.ecl-u-bg-white
40
+ this.node.style.position = 'absolute'
41
+ this.node.style.cursor = 'pointer'
42
+ this.node.style.display = 'flex'
43
+ this.node.style.justifyContent = 'center'
44
+ this.node.style.alignItems = 'center'
45
+ this.node.style.width = '30px'
46
+ this.node.style.height = '30px'
47
+ // this.node.style.padding = '4px'
48
+ this.node.style.top = opts.y + 'px'
49
+ this.node.style.left = opts.x + 'px'
50
+
51
+ // append to parent
52
+ this.parentNode.appendChild(this.node)
53
+ }
54
+ }
@@ -1,98 +1,98 @@
1
- import { Button } from './Button.js'
2
-
3
- /**
4
- * Button for toggling fullscreen mode
5
- *
6
- * @author Joseph Davies, Julien Gaffuri
7
- */
8
- export class FullscreenButton extends Button {
9
- /**
10
- * @param {Object} opts
11
- * opts.parentNode - the node that the button is appended to
12
- * opts.canvas - the gridviz canvas
13
- * opts.id
14
- * opts.title - HTML title attribute
15
- * opts.class - css class
16
- * opts.onClickFunction
17
- * opts.x - x position of the button
18
- * opts.y - y position of the button
19
- */
20
-
21
- // default state
22
- isFullscreen = false
23
-
24
- constructor(opts) {
25
- super(opts)
26
-
27
- // append fullscreen icon to button container
28
- this.node.innerHTML = `
29
- <svg
30
- style="height: 1.2rem; width: 1.2rem; fill:black; margin:0;"
31
- focusable="false"
32
- aria-hidden="true"
33
- >
34
- <svg fill="#000000" viewBox="0 0 96 96" xmlns="http://www.w3.org/2000/svg">
35
- <title/>
36
- <g>
37
- <path d="M30,0H6A5.9966,5.9966,0,0,0,0,6V30a6,6,0,0,0,12,0V12H30A6,6,0,0,0,30,0Z"/>
38
- <path d="M90,0H66a6,6,0,0,0,0,12H84V30a6,6,0,0,0,12,0V6A5.9966,5.9966,0,0,0,90,0Z"/>
39
- <path d="M30,84H12V66A6,6,0,0,0,0,66V90a5.9966,5.9966,0,0,0,6,6H30a6,6,0,0,0,0-12Z"/>
40
- <path d="M90,60a5.9966,5.9966,0,0,0-6,6V84H66a6,6,0,0,0,0,12H90a5.9966,5.9966,0,0,0,6-6V66A5.9966,5.9966,0,0,0,90,60Z"/>
41
- </g>
42
- </svg>
43
- </svg>
44
- `
45
-
46
- //save initial app dimensions
47
- this.defaultHeight = this.app.h
48
- this.defaultWidth = this.app.w
49
-
50
- // event handler
51
- this.node.addEventListener('click', (e) => {
52
- this.onClickFunction(e)
53
- })
54
-
55
- }
56
-
57
- onClickFunction(e) {
58
- if (this.isFullscreen) {
59
- this.closeFullscreen(containerDiv)
60
- //resize canvas to default
61
- this.app.h = this.defaultHeight
62
- this.app.w = this.defaultWidth
63
- this.isFullscreen = false
64
- } else {
65
- this.openFullscreen(containerDiv)
66
- //resize canvas to fullscreen
67
- this.app.h = window.screen.height
68
- this.app.w = window.screen.width
69
- this.isFullscreen = true
70
- }
71
- }
72
-
73
- /* Open fullscreen */
74
- openFullscreen(elem) {
75
- if (elem.requestFullscreen) {
76
- elem.requestFullscreen()
77
- } else if (elem.webkitRequestFullscreen) {
78
- /* Safari */
79
- elem.webkitRequestFullscreen()
80
- } else if (elem.msRequestFullscreen) {
81
- /* IE11 */
82
- elem.msRequestFullscreen()
83
- }
84
- }
85
-
86
- /* Close fullscreen */
87
- closeFullscreen() {
88
- if (document.exitFullscreen) {
89
- document.exitFullscreen()
90
- } else if (document.webkitExitFullscreen) {
91
- /* Safari */
92
- document.webkitExitFullscreen()
93
- } else if (document.msExitFullscreen) {
94
- /* IE11 */
95
- document.msExitFullscreen()
96
- }
97
- }
98
- }
1
+ import { Button } from './Button.js'
2
+
3
+ /**
4
+ * Button for toggling fullscreen mode
5
+ *
6
+ * @author Joseph Davies, Julien Gaffuri
7
+ */
8
+ export class FullscreenButton extends Button {
9
+ /**
10
+ * @param {Object} opts
11
+ * opts.parentNode - the node that the button is appended to
12
+ * opts.canvas - the gridviz canvas
13
+ * opts.id
14
+ * opts.title - HTML title attribute
15
+ * opts.class - css class
16
+ * opts.onClickFunction
17
+ * opts.x - x position of the button
18
+ * opts.y - y position of the button
19
+ */
20
+
21
+ // default state
22
+ isFullscreen = false
23
+
24
+ constructor(opts) {
25
+ super(opts)
26
+
27
+ // append fullscreen icon to button container
28
+ this.node.innerHTML = `
29
+ <svg
30
+ style="height: 1.2rem; width: 1.2rem; fill:black; margin:0;"
31
+ focusable="false"
32
+ aria-hidden="true"
33
+ >
34
+ <svg fill="#000000" viewBox="0 0 96 96" xmlns="http://www.w3.org/2000/svg">
35
+ <title/>
36
+ <g>
37
+ <path d="M30,0H6A5.9966,5.9966,0,0,0,0,6V30a6,6,0,0,0,12,0V12H30A6,6,0,0,0,30,0Z"/>
38
+ <path d="M90,0H66a6,6,0,0,0,0,12H84V30a6,6,0,0,0,12,0V6A5.9966,5.9966,0,0,0,90,0Z"/>
39
+ <path d="M30,84H12V66A6,6,0,0,0,0,66V90a5.9966,5.9966,0,0,0,6,6H30a6,6,0,0,0,0-12Z"/>
40
+ <path d="M90,60a5.9966,5.9966,0,0,0-6,6V84H66a6,6,0,0,0,0,12H90a5.9966,5.9966,0,0,0,6-6V66A5.9966,5.9966,0,0,0,90,60Z"/>
41
+ </g>
42
+ </svg>
43
+ </svg>
44
+ `
45
+
46
+ //save initial app dimensions
47
+ this.defaultHeight = this.app.h
48
+ this.defaultWidth = this.app.w
49
+
50
+ // event handler
51
+ this.node.addEventListener('click', (e) => {
52
+ this.onClickFunction(e)
53
+ })
54
+
55
+ }
56
+
57
+ onClickFunction(e) {
58
+ if (this.isFullscreen) {
59
+ this.closeFullscreen(containerDiv)
60
+ //resize canvas to default
61
+ this.app.h = this.defaultHeight
62
+ this.app.w = this.defaultWidth
63
+ this.isFullscreen = false
64
+ } else {
65
+ this.openFullscreen(containerDiv)
66
+ //resize canvas to fullscreen
67
+ this.app.h = window.screen.height
68
+ this.app.w = window.screen.width
69
+ this.isFullscreen = true
70
+ }
71
+ }
72
+
73
+ /* Open fullscreen */
74
+ openFullscreen(elem) {
75
+ if (elem.requestFullscreen) {
76
+ elem.requestFullscreen()
77
+ } else if (elem.webkitRequestFullscreen) {
78
+ /* Safari */
79
+ elem.webkitRequestFullscreen()
80
+ } else if (elem.msRequestFullscreen) {
81
+ /* IE11 */
82
+ elem.msRequestFullscreen()
83
+ }
84
+ }
85
+
86
+ /* Close fullscreen */
87
+ closeFullscreen() {
88
+ if (document.exitFullscreen) {
89
+ document.exitFullscreen()
90
+ } else if (document.webkitExitFullscreen) {
91
+ /* Safari */
92
+ document.webkitExitFullscreen()
93
+ } else if (document.msExitFullscreen) {
94
+ /* IE11 */
95
+ document.msExitFullscreen()
96
+ }
97
+ }
98
+ }
@@ -1,72 +1,72 @@
1
- import { Button } from './Button.js'
2
-
3
-
4
- /**
5
- * Button for toggling fullscreen mode
6
- *
7
- * @author Joseph Davies, Julien Gaffuri
8
- */
9
- export class ZoomButtons extends Button {
10
- /**
11
- * @param {Object} opts
12
- */
13
- constructor(opts) {
14
- super(opts)
15
-
16
- this.onZoom = opts.onZoom // custom user event handler
17
- this.delta = opts.delta || 0.2
18
-
19
- // zoom in btn
20
- this.zoomInBtn = document.createElement('a')
21
- this.zoomInBtn.innerHTML = `<a id="zoomin" class="gridviz-zoom-button" title="Zoom in">+</a>`
22
- this.zoomInBtn.title = 'Zoom in';
23
- this.zoomInBtn.addEventListener('click', (e)=>{this.zoomIn(e)})
24
- this.zoomInBtn.addEventListener('mouseover', (e)=>{this.zoomInBtn.style.backgroundColor = 'lightgrey'})
25
- this.zoomInBtn.addEventListener('mouseout', (e)=>{this.zoomInBtn.style.backgroundColor = '#ffffff'})
26
-
27
- // zoom out btn
28
- this.zoomOutBtn = document.createElement('a')
29
- this.zoomOutBtn.innerHTML = `<a id="zoomin" class="gridviz-zoom-button" title="Zoom out">-</a>`
30
- this.zoomOutBtn.title = 'Zoom out';
31
- this.zoomOutBtn.addEventListener('click', (e)=>{this.zoomOut(e)})
32
- this.zoomOutBtn.addEventListener('mouseover', (e)=>{this.zoomOutBtn.style.backgroundColor = 'lightgrey'})
33
- this.zoomOutBtn.addEventListener('mouseout', (e)=>{this.zoomOutBtn.style.backgroundColor = '#ffffff'})
34
-
35
- //set styles
36
- let btns = [this.zoomInBtn, this.zoomOutBtn]
37
- btns.forEach((btn, i)=>{
38
- btn.style.alignItems = 'center';
39
- btn.style.justifyContent = 'center';
40
- btn.style.display = 'flex';
41
- btn.style.border = 'none';
42
- btn.style.color = 'black';
43
- btn.style.textAlign = 'center';
44
- btn.style.textDecoration = 'none';
45
- btn.style.padding = '4px';
46
- btn.style.fontSize = '20px';
47
- btn.style.fontWeight = 'bold';
48
- btn.style.userSelect = 'none';
49
- if (i==0) btn.style.borderBottom = '1px solid grey'
50
- })
51
-
52
- // unset parent class height
53
- this.node.style.height="unset"
54
- this.node.style.display="unset"
55
-
56
- // append to button container
57
- this.node.appendChild(this.zoomInBtn)
58
- this.node.appendChild(this.zoomOutBtn)
59
- }
60
-
61
- /* Zoom in */
62
- zoomIn(e) {
63
- this.app.setZoomFactor(this.app.getZoomFactor() * (1 - this.delta)).redraw()
64
- if (this.onZoom) this.onZoom(e)
65
- }
66
-
67
- /* Zoom out */
68
- zoomOut(e) {
69
- this.app.setZoomFactor(this.app.getZoomFactor() * (1 + this.delta)).redraw()
70
- if (this.onZoom) this.onZoom(e)
71
- }
72
- }
1
+ import { Button } from './Button.js'
2
+
3
+
4
+ /**
5
+ * Button for toggling fullscreen mode
6
+ *
7
+ * @author Joseph Davies, Julien Gaffuri
8
+ */
9
+ export class ZoomButtons extends Button {
10
+ /**
11
+ * @param {Object} opts
12
+ */
13
+ constructor(opts) {
14
+ super(opts)
15
+
16
+ this.onZoom = opts.onZoom // custom user event handler
17
+ this.delta = opts.delta || 0.2
18
+
19
+ // zoom in btn
20
+ this.zoomInBtn = document.createElement('a')
21
+ this.zoomInBtn.innerHTML = `<a id="zoomin" class="gridviz-zoom-button" title="Zoom in">+</a>`
22
+ this.zoomInBtn.title = 'Zoom in';
23
+ this.zoomInBtn.addEventListener('click', (e)=>{this.zoomIn(e)})
24
+ this.zoomInBtn.addEventListener('mouseover', (e)=>{this.zoomInBtn.style.backgroundColor = 'lightgrey'})
25
+ this.zoomInBtn.addEventListener('mouseout', (e)=>{this.zoomInBtn.style.backgroundColor = '#ffffff'})
26
+
27
+ // zoom out btn
28
+ this.zoomOutBtn = document.createElement('a')
29
+ this.zoomOutBtn.innerHTML = `<a id="zoomin" class="gridviz-zoom-button" title="Zoom out">-</a>`
30
+ this.zoomOutBtn.title = 'Zoom out';
31
+ this.zoomOutBtn.addEventListener('click', (e)=>{this.zoomOut(e)})
32
+ this.zoomOutBtn.addEventListener('mouseover', (e)=>{this.zoomOutBtn.style.backgroundColor = 'lightgrey'})
33
+ this.zoomOutBtn.addEventListener('mouseout', (e)=>{this.zoomOutBtn.style.backgroundColor = '#ffffff'})
34
+
35
+ //set styles
36
+ let btns = [this.zoomInBtn, this.zoomOutBtn]
37
+ btns.forEach((btn, i)=>{
38
+ btn.style.alignItems = 'center';
39
+ btn.style.justifyContent = 'center';
40
+ btn.style.display = 'flex';
41
+ btn.style.border = 'none';
42
+ btn.style.color = 'black';
43
+ btn.style.textAlign = 'center';
44
+ btn.style.textDecoration = 'none';
45
+ btn.style.padding = '4px';
46
+ btn.style.fontSize = '20px';
47
+ btn.style.fontWeight = 'bold';
48
+ btn.style.userSelect = 'none';
49
+ if (i==0) btn.style.borderBottom = '1px solid grey'
50
+ })
51
+
52
+ // unset parent class height
53
+ this.node.style.height="unset"
54
+ this.node.style.display="unset"
55
+
56
+ // append to button container
57
+ this.node.appendChild(this.zoomInBtn)
58
+ this.node.appendChild(this.zoomOutBtn)
59
+ }
60
+
61
+ /* Zoom in */
62
+ zoomIn(e) {
63
+ this.app.setZoomFactor(this.app.getZoomFactor() * (1 - this.delta)).redraw()
64
+ if (this.onZoom) this.onZoom(e)
65
+ }
66
+
67
+ /* Zoom out */
68
+ zoomOut(e) {
69
+ this.app.setZoomFactor(this.app.getZoomFactor() * (1 + this.delta)).redraw()
70
+ if (this.onZoom) this.onZoom(e)
71
+ }
72
+ }
@@ -1,24 +1,24 @@
1
- //@ts-check
2
- 'use strict'
3
-
4
- import { DatasetComponent } from '../DatasetComponent.js'
5
-
6
- /**
7
- * @todo
8
- * A dataset composed of a COGeo file.
9
- * @see https://www.cogeo.org/
10
- *
11
- * @author Joseph Davies, Julien Gaffuri
12
- */
13
- export class COGeo extends DatasetComponent {
14
- /**
15
- *
16
- * @param {String} url
17
- * @param {{preprocess?:(function(import("../Dataset").Cell):boolean)}} opts
18
- */
19
- constructor(url, opts = {}) {
20
- super(url, 0, opts)
21
- }
22
-
23
- //TODO Use https://geotiffjs.github.io/
24
- }
1
+ //@ts-check
2
+ 'use strict'
3
+
4
+ import { DatasetComponent } from '../DatasetComponent.js'
5
+
6
+ /**
7
+ * @todo
8
+ * A dataset composed of a COGeo file.
9
+ * @see https://www.cogeo.org/
10
+ *
11
+ * @author Joseph Davies, Julien Gaffuri
12
+ */
13
+ export class COGeo extends DatasetComponent {
14
+ /**
15
+ *
16
+ * @param {String} url
17
+ * @param {{preprocess?:(function(import("../Dataset").Cell):boolean)}} opts
18
+ */
19
+ constructor(url, opts = {}) {
20
+ super(url, 0, opts)
21
+ }
22
+
23
+ //TODO Use https://geotiffjs.github.io/
24
+ }