gridviz 2.1.9 → 2.1.10

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 (57) hide show
  1. package/README.md +125 -125
  2. package/dist/gridviz.js +8036 -8024
  3. package/dist/gridviz.min.js +1 -1
  4. package/package.json +77 -77
  5. package/src/App.js +705 -705
  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 -101
  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 +129 -129
  16. package/src/Tooltip.js +180 -180
  17. package/src/dataset/COGeo.js +24 -24
  18. package/src/dataset/CSVGrid.js +104 -104
  19. package/src/dataset/GeoTIFF.js +127 -127
  20. package/src/dataset/GridTile.js +41 -41
  21. package/src/dataset/LGrid.js +54 -54
  22. package/src/dataset/TiledGrid.js +264 -264
  23. package/src/index.js +71 -71
  24. package/src/legend/ColorCategoryLegend.js +124 -124
  25. package/src/legend/ColorDiscreteLegend.js +103 -103
  26. package/src/legend/ColorLegend.js +124 -124
  27. package/src/legend/SegmentOrientationLegend.js +87 -87
  28. package/src/legend/SegmentWidthLegend.js +97 -97
  29. package/src/legend/SizeLegend.js +141 -141
  30. package/src/style/CompositionStyle.js +300 -300
  31. package/src/style/ContourStyle.js +54 -54
  32. package/src/style/DotDensityStyle.js +156 -156
  33. package/src/style/IsoFenceStyle.js +262 -262
  34. package/src/style/JoyPlotStyle.js +135 -135
  35. package/src/style/LegoStyle.js +112 -112
  36. package/src/style/MosaicStyle.js +107 -107
  37. package/src/style/NinjaStarStyle.js +125 -125
  38. package/src/style/PillarStyle.js +230 -230
  39. package/src/style/SegmentStyle.js +142 -142
  40. package/src/style/ShapeColorSizeStyle.js +126 -126
  41. package/src/style/SideCatStyle.js +172 -172
  42. package/src/style/SideStyle.js +216 -216
  43. package/src/style/SquareColorCatWGLStyle.js +120 -120
  44. package/src/style/SquareColorWGLStyle.js +146 -146
  45. package/src/style/StrokeStyle.js +131 -131
  46. package/src/style/TanakaStyle.js +160 -160
  47. package/src/style/TextStyle.js +132 -132
  48. package/src/style/TimeSeriesStyle.js +250 -250
  49. package/src/utils/Utils.js +35 -35
  50. package/src/utils/WebGLRectangleColoring.js +106 -106
  51. package/src/utils/WebGLSquareColoring.js +118 -118
  52. package/src/utils/WebGLSquareColoringAdvanced.js +230 -230
  53. package/src/utils/WebGLSquareColoringCatAdvanced.js +133 -133
  54. package/src/utils/WebGLSquareColoringKS.js +153 -153
  55. package/src/utils/stretching.js +131 -131
  56. package/src/utils/webGLUtils.js +71 -71
  57. package/src/utils/zoomUtils.js +142 -142
package/src/index.js CHANGED
@@ -1,71 +1,71 @@
1
- //@ts-check
2
- 'use strict'
3
-
4
- // the application
5
- export { App } from './App.js'
6
- export { GeoCanvas } from './GeoCanvas.js'
7
- export { Style } from './Style.js'
8
- export { Layer } from './Layer.js'
9
- export { Dataset } from './Dataset.js'
10
- export { DatasetComponent } from './DatasetComponent.js'
11
-
12
- // export dataset types
13
- export { TiledGrid } from './dataset/TiledGrid.js'
14
- export { GridTile } from './dataset/GridTile.js'
15
- export { CSVGrid } from './dataset/CSVGrid.js'
16
- export { LGrid } from './dataset/LGrid.js'
17
- //export { GeoTIFF } from "./dataset/GeoTIFF"
18
-
19
- // export styles
20
- export { ShapeColorSizeStyle } from './style/ShapeColorSizeStyle.js'
21
- export { StrokeStyle } from './style/StrokeStyle.js'
22
- export { JoyPlotStyle } from './style/JoyPlotStyle.js'
23
- export { CompositionStyle } from './style/CompositionStyle.js'
24
- export { SegmentStyle } from './style/SegmentStyle.js'
25
- export { TextStyle } from './style/TextStyle.js'
26
- export { PillarStyle } from './style/PillarStyle.js'
27
- export { SideStyle } from './style/SideStyle.js'
28
- export { ContourStyle } from './style/ContourStyle.js'
29
- export { SideCatStyle } from './style/SideCatStyle.js'
30
- export { DotDensityStyle } from './style/DotDensityStyle.js'
31
- export { TanakaStyle } from './style/TanakaStyle.js'
32
- export { LegoStyle } from './style/LegoStyle.js'
33
- export { SquareColorWGLStyle } from './style/SquareColorWGLStyle.js'
34
- export { SquareColorCatWGLStyle } from './style/SquareColorCatWGLStyle.js'
35
- export { MosaicStyle } from './style/MosaicStyle.js'
36
- export { NinjaStarStyle } from './style/NinjaStarStyle.js'
37
- export { TimeSeriesStyle } from './style/TimeSeriesStyle.js'
38
- export { IsoFenceStyle } from './style/IsoFenceStyle.js'
39
-
40
- // export additional layers
41
- export { BackgroundLayer } from './BackgroundLayer.js'
42
- export { BackgroundLayerWMS } from './BackgroundLayerWMS.js'
43
- export { LabelLayer } from './LabelLayer.js'
44
- export { LineLayer as BoundaryLayer } from './LineLayer.js'
45
-
46
- // export legends
47
- export { ColorLegend } from './legend/ColorLegend.js'
48
- export { ColorDiscreteLegend } from './legend/ColorDiscreteLegend.js'
49
- export { ColorCategoryLegend } from './legend/ColorCategoryLegend.js'
50
- export { SizeLegend } from './legend/SizeLegend.js'
51
- export { SegmentWidthLegend } from './legend/SegmentWidthLegend.js'
52
- export { SegmentOrientationLegend } from './legend/SegmentOrientationLegend.js'
53
-
54
- // export { goToStraight, zoomTo } from "./utils/zoomUtils"
55
- export * from './utils/stretching.js'
56
-
57
- export { getClass } from './utils/Utils.js'
58
-
59
-
60
-
61
- import { GeoCanvas } from './GeoCanvas.js'
62
- export const getParameterByName = GeoCanvas.getParameterByName
63
-
64
- // set default d3 locale
65
- import { formatDefaultLocale } from 'd3-format'
66
- formatDefaultLocale({
67
- decimal: '.',
68
- thousands: ' ',
69
- grouping: [3],
70
- currency: ['', '€'],
71
- })
1
+ //@ts-check
2
+ 'use strict'
3
+
4
+ // the application
5
+ export { App } from './App.js'
6
+ export { GeoCanvas } from './GeoCanvas.js'
7
+ export { Style } from './Style.js'
8
+ export { Layer } from './Layer.js'
9
+ export { Dataset } from './Dataset.js'
10
+ export { DatasetComponent } from './DatasetComponent.js'
11
+
12
+ // export dataset types
13
+ export { TiledGrid } from './dataset/TiledGrid.js'
14
+ export { GridTile } from './dataset/GridTile.js'
15
+ export { CSVGrid } from './dataset/CSVGrid.js'
16
+ export { LGrid } from './dataset/LGrid.js'
17
+ //export { GeoTIFF } from "./dataset/GeoTIFF"
18
+
19
+ // export styles
20
+ export { ShapeColorSizeStyle } from './style/ShapeColorSizeStyle.js'
21
+ export { StrokeStyle } from './style/StrokeStyle.js'
22
+ export { JoyPlotStyle } from './style/JoyPlotStyle.js'
23
+ export { CompositionStyle } from './style/CompositionStyle.js'
24
+ export { SegmentStyle } from './style/SegmentStyle.js'
25
+ export { TextStyle } from './style/TextStyle.js'
26
+ export { PillarStyle } from './style/PillarStyle.js'
27
+ export { SideStyle } from './style/SideStyle.js'
28
+ export { ContourStyle } from './style/ContourStyle.js'
29
+ export { SideCatStyle } from './style/SideCatStyle.js'
30
+ export { DotDensityStyle } from './style/DotDensityStyle.js'
31
+ export { TanakaStyle } from './style/TanakaStyle.js'
32
+ export { LegoStyle } from './style/LegoStyle.js'
33
+ export { SquareColorWGLStyle } from './style/SquareColorWGLStyle.js'
34
+ export { SquareColorCatWGLStyle } from './style/SquareColorCatWGLStyle.js'
35
+ export { MosaicStyle } from './style/MosaicStyle.js'
36
+ export { NinjaStarStyle } from './style/NinjaStarStyle.js'
37
+ export { TimeSeriesStyle } from './style/TimeSeriesStyle.js'
38
+ export { IsoFenceStyle } from './style/IsoFenceStyle.js'
39
+
40
+ // export additional layers
41
+ export { BackgroundLayer } from './BackgroundLayer.js'
42
+ export { BackgroundLayerWMS } from './BackgroundLayerWMS.js'
43
+ export { LabelLayer } from './LabelLayer.js'
44
+ export { LineLayer as BoundaryLayer } from './LineLayer.js'
45
+
46
+ // export legends
47
+ export { ColorLegend } from './legend/ColorLegend.js'
48
+ export { ColorDiscreteLegend } from './legend/ColorDiscreteLegend.js'
49
+ export { ColorCategoryLegend } from './legend/ColorCategoryLegend.js'
50
+ export { SizeLegend } from './legend/SizeLegend.js'
51
+ export { SegmentWidthLegend } from './legend/SegmentWidthLegend.js'
52
+ export { SegmentOrientationLegend } from './legend/SegmentOrientationLegend.js'
53
+
54
+ // export { goToStraight, zoomTo } from "./utils/zoomUtils"
55
+ export * from './utils/stretching.js'
56
+
57
+ export { getClass } from './utils/Utils.js'
58
+
59
+
60
+
61
+ import { GeoCanvas } from './GeoCanvas.js'
62
+ export const getParameterByName = GeoCanvas.getParameterByName
63
+
64
+ // set default d3 locale
65
+ import { formatDefaultLocale } from 'd3-format'
66
+ formatDefaultLocale({
67
+ decimal: '.',
68
+ thousands: ' ',
69
+ grouping: [3],
70
+ currency: ['', '€'],
71
+ })
@@ -1,124 +1,124 @@
1
- //@ts-check
2
- 'use strict'
3
-
4
- import { Legend } from '../Legend.js'
5
-
6
- /**
7
- * A legend element for color categrories.
8
- *
9
- * @author Joseph Davies, Julien Gaffuri
10
- */
11
- export class ColorCategoryLegend extends Legend {
12
- /** @param {Object} opts */
13
- constructor(opts) {
14
- super(opts)
15
- opts = opts || {}
16
-
17
- //col/categories array, in display order
18
- /**
19
- * @private
20
- * @type {Array.<Array.<string>>} */
21
- this.colCat = opts.colCat || [['gray', '-']]
22
-
23
- /**
24
- * @private
25
- * @type {import("../Style").Shape} */
26
- this.shape = opts.shape || 'circle'
27
- this.dimension = opts.dimension || { r: 8 }
28
- this.strokeColor = opts.strokeColor || 'gray'
29
- this.strokeWidth = opts.strokeWidth || 1
30
-
31
- this.title = opts.title
32
- this.titleFontSize = opts.titleFontSize || '0.8em'
33
- this.titleFontWeight = opts.titleFontWeight || 'bold'
34
-
35
- //label
36
- this.labelFontSize = opts.labelFontSize || '0.8em'
37
- }
38
-
39
- /**
40
- * @param {{ style: import("../Style").Style, r: number, zf: number, sSize: import("../Style").Stat, sColor: import("../Style").Stat }} opts
41
- */
42
- update(opts) {
43
- //clear
44
- this.div.selectAll('*').remove()
45
-
46
- //build
47
-
48
- //title
49
- if (this.title)
50
- this.div
51
- .append('div')
52
- .style('font-size', this.titleFontSize)
53
- .style('font-weight', this.titleFontWeight)
54
- .style('margin-bottom', '7px')
55
- .text(this.title)
56
-
57
- //categories
58
- const nb = this.colCat.length
59
- if (nb == 0) return
60
-
61
- for (let i = 0; i < nb; i++) {
62
- const cat = this.colCat[i]
63
-
64
- //make div for category
65
- const d = this.div.append('div')
66
- //to enable vertical centering
67
- //.style("position", "relative")
68
-
69
- const sw = this.strokeWidth
70
-
71
- //draw graphic element: box / circle
72
- if (this.shape === 'square') {
73
- const h = this.dimension.h || 15
74
- const w = this.dimension.w || 20
75
- d.append('div')
76
- .style('display', 'inline')
77
-
78
- .append('svg')
79
- .attr('width', w + 2 * sw)
80
- .attr('height', h + 2 * sw)
81
-
82
- .append('rect')
83
- .attr('x', sw)
84
- .attr('y', sw)
85
- .attr('width', w)
86
- .attr('height', h)
87
- .style('fill', cat[0])
88
- .style('stroke', this.strokeColor)
89
- .style('stroke-width', this.strokeWidth)
90
- } else if (this.shape === 'circle') {
91
- const r = this.dimension.r || 8
92
- const h = 2 * r + 2 * sw
93
- d.append('div')
94
- .style('display', 'inline')
95
-
96
- .append('svg')
97
- .attr('width', h)
98
- .attr('height', h)
99
-
100
- .append('circle')
101
- .attr('cx', r + sw)
102
- .attr('cy', r + sw)
103
- .attr('r', r)
104
- .style('fill', cat[0])
105
- .style('stroke', this.strokeColor)
106
- .style('stroke-width', this.strokeWidth)
107
- } else {
108
- throw new Error('Unexpected shape:' + this.shape)
109
- }
110
-
111
- //write label text
112
- d.append('div')
113
- //show on right of graphic
114
- .style('display', 'inline')
115
-
116
- //center vertically
117
- //.style("position", "absolute").style("top", "0").style("bottom", "0")
118
-
119
- .style('padding-left', '5px')
120
- .style('font-size', this.labelFontSize)
121
- .text(cat[1])
122
- }
123
- }
124
- }
1
+ //@ts-check
2
+ 'use strict'
3
+
4
+ import { Legend } from '../Legend.js'
5
+
6
+ /**
7
+ * A legend element for color categrories.
8
+ *
9
+ * @author Joseph Davies, Julien Gaffuri
10
+ */
11
+ export class ColorCategoryLegend extends Legend {
12
+ /** @param {Object} opts */
13
+ constructor(opts) {
14
+ super(opts)
15
+ opts = opts || {}
16
+
17
+ //col/categories array, in display order
18
+ /**
19
+ * @private
20
+ * @type {Array.<Array.<string>>} */
21
+ this.colCat = opts.colCat || [['gray', '-']]
22
+
23
+ /**
24
+ * @private
25
+ * @type {import("../Style").Shape} */
26
+ this.shape = opts.shape || 'circle'
27
+ this.dimension = opts.dimension || { r: 8 }
28
+ this.strokeColor = opts.strokeColor || 'gray'
29
+ this.strokeWidth = opts.strokeWidth || 1
30
+
31
+ this.title = opts.title
32
+ this.titleFontSize = opts.titleFontSize || '0.8em'
33
+ this.titleFontWeight = opts.titleFontWeight || 'bold'
34
+
35
+ //label
36
+ this.labelFontSize = opts.labelFontSize || '0.8em'
37
+ }
38
+
39
+ /**
40
+ * @param {{ style: import("../Style").Style, r: number, zf: number, sSize: import("../Style").Stat, sColor: import("../Style").Stat }} opts
41
+ */
42
+ update(opts) {
43
+ //clear
44
+ this.div.selectAll('*').remove()
45
+
46
+ //build
47
+
48
+ //title
49
+ if (this.title)
50
+ this.div
51
+ .append('div')
52
+ .style('font-size', this.titleFontSize)
53
+ .style('font-weight', this.titleFontWeight)
54
+ .style('margin-bottom', '7px')
55
+ .text(this.title)
56
+
57
+ //categories
58
+ const nb = this.colCat.length
59
+ if (nb == 0) return
60
+
61
+ for (let i = 0; i < nb; i++) {
62
+ const cat = this.colCat[i]
63
+
64
+ //make div for category
65
+ const d = this.div.append('div')
66
+ //to enable vertical centering
67
+ //.style("position", "relative")
68
+
69
+ const sw = this.strokeWidth
70
+
71
+ //draw graphic element: box / circle
72
+ if (this.shape === 'square') {
73
+ const h = this.dimension.h || 15
74
+ const w = this.dimension.w || 20
75
+ d.append('div')
76
+ .style('display', 'inline')
77
+
78
+ .append('svg')
79
+ .attr('width', w + 2 * sw)
80
+ .attr('height', h + 2 * sw)
81
+
82
+ .append('rect')
83
+ .attr('x', sw)
84
+ .attr('y', sw)
85
+ .attr('width', w)
86
+ .attr('height', h)
87
+ .style('fill', cat[0])
88
+ .style('stroke', this.strokeColor)
89
+ .style('stroke-width', this.strokeWidth)
90
+ } else if (this.shape === 'circle') {
91
+ const r = this.dimension.r || 8
92
+ const h = 2 * r + 2 * sw
93
+ d.append('div')
94
+ .style('display', 'inline')
95
+
96
+ .append('svg')
97
+ .attr('width', h)
98
+ .attr('height', h)
99
+
100
+ .append('circle')
101
+ .attr('cx', r + sw)
102
+ .attr('cy', r + sw)
103
+ .attr('r', r)
104
+ .style('fill', cat[0])
105
+ .style('stroke', this.strokeColor)
106
+ .style('stroke-width', this.strokeWidth)
107
+ } else {
108
+ throw new Error('Unexpected shape:' + this.shape)
109
+ }
110
+
111
+ //write label text
112
+ d.append('div')
113
+ //show on right of graphic
114
+ .style('display', 'inline')
115
+
116
+ //center vertically
117
+ //.style("position", "absolute").style("top", "0").style("bottom", "0")
118
+
119
+ .style('padding-left', '5px')
120
+ .style('font-size', this.labelFontSize)
121
+ .text(cat[1])
122
+ }
123
+ }
124
+ }
@@ -1,103 +1,103 @@
1
- //@ts-check
2
- 'use strict'
3
-
4
- import { Legend } from '../Legend.js'
5
-
6
- /**
7
- * A legend element for discrete color style.
8
- * Inspiration: https://observablehq.com/@d3/color-legend
9
- *
10
- * @author Julien Gaffuri
11
- */
12
- export class ColorDiscreteLegend extends Legend {
13
- /** @param {Object} opts */
14
- constructor(opts) {
15
- super(opts)
16
- opts = opts || {}
17
-
18
- /** @private @type {Array.<Array.<string>>} */
19
- this.colors = opts.colors
20
- /** @private @type {Array.<Array.<string>>} */
21
- this.breaksText = opts.breaksText
22
-
23
- this.width = opts.width || 300
24
- this.height = opts.height || 15
25
-
26
- this.title = opts.title
27
- this.titleFontSize = opts.titleFontSize || '0.8em'
28
- this.titleFontWeight = opts.titleFontWeight || 'bold'
29
-
30
- this.tickSize = opts.tickSize || 3
31
-
32
- //label
33
- this.labelFontSize = opts.labelFontSize || '0.8em'
34
- this.invert = opts.invert
35
- }
36
-
37
- /**
38
- * @param {{ style: import("../Style").Style, r: number, zf: number, sSize: import("../Style").Stat, sColor: import("../Style").Stat }} opts
39
- */
40
- update(opts) {
41
- //clear
42
- this.div.selectAll('*').remove()
43
-
44
- //build
45
-
46
- //title
47
- if (this.title)
48
- this.div
49
- .append('div')
50
- .style('font-size', this.titleFontSize)
51
- .style('font-weight', this.titleFontWeight)
52
- .style('margin-bottom', '7px')
53
- .text(this.title)
54
-
55
- //classes
56
- const nb = this.colors.length
57
- if (nb == 0) return
58
- const w = this.width / nb
59
-
60
- //make svg element
61
- const svg = this.div
62
- .append('svg')
63
- .attr('width', this.width)
64
- .attr('height', this.height + this.tickSize + 2 + 10)
65
-
66
- //draw graphic elements
67
- for (let i = 0; i < nb; i++) {
68
- svg.append('rect')
69
- .attr('x', i * w)
70
- .attr('y', 0)
71
- .attr('width', w)
72
- .attr('height', this.height)
73
- .style('fill', this.colors[i])
74
- }
75
-
76
- //tick line
77
- for (let i = 1; i < nb; i++) {
78
- svg.append('line')
79
- .attr('x1', w * i)
80
- .attr('y1', 0)
81
- .attr('x2', w * i)
82
- .attr('y2', this.height + this.tickSize)
83
- .style('stroke', 'black')
84
- }
85
-
86
- //labels
87
- for (let i = 1; i < nb; i++) {
88
- //prepare label
89
- svg.append('text')
90
- .attr('id', 'ticklabel_' + i)
91
- .attr('x', w * i)
92
- .attr('y', this.height + this.tickSize + 2)
93
- .style('font-size', this.labelFontSize)
94
- //.style("font-weight", "bold")
95
- //.style("font-family", "Arial")
96
- .style('text-anchor', i == 0 ? 'start' : i == this.ticks - 1 ? 'end' : 'middle')
97
- .style('alignment-baseline', 'top')
98
- .style('dominant-baseline', 'hanging')
99
- .style('pointer-events', 'none')
100
- .text(this.breaksText[i - 1])
101
- }
102
- }
103
- }
1
+ //@ts-check
2
+ 'use strict'
3
+
4
+ import { Legend } from '../Legend.js'
5
+
6
+ /**
7
+ * A legend element for discrete color style.
8
+ * Inspiration: https://observablehq.com/@d3/color-legend
9
+ *
10
+ * @author Julien Gaffuri
11
+ */
12
+ export class ColorDiscreteLegend extends Legend {
13
+ /** @param {Object} opts */
14
+ constructor(opts) {
15
+ super(opts)
16
+ opts = opts || {}
17
+
18
+ /** @private @type {Array.<Array.<string>>} */
19
+ this.colors = opts.colors
20
+ /** @private @type {Array.<Array.<string>>} */
21
+ this.breaksText = opts.breaksText
22
+
23
+ this.width = opts.width || 300
24
+ this.height = opts.height || 15
25
+
26
+ this.title = opts.title
27
+ this.titleFontSize = opts.titleFontSize || '0.8em'
28
+ this.titleFontWeight = opts.titleFontWeight || 'bold'
29
+
30
+ this.tickSize = opts.tickSize || 3
31
+
32
+ //label
33
+ this.labelFontSize = opts.labelFontSize || '0.8em'
34
+ this.invert = opts.invert
35
+ }
36
+
37
+ /**
38
+ * @param {{ style: import("../Style").Style, r: number, zf: number, sSize: import("../Style").Stat, sColor: import("../Style").Stat }} opts
39
+ */
40
+ update(opts) {
41
+ //clear
42
+ this.div.selectAll('*').remove()
43
+
44
+ //build
45
+
46
+ //title
47
+ if (this.title)
48
+ this.div
49
+ .append('div')
50
+ .style('font-size', this.titleFontSize)
51
+ .style('font-weight', this.titleFontWeight)
52
+ .style('margin-bottom', '7px')
53
+ .text(this.title)
54
+
55
+ //classes
56
+ const nb = this.colors.length
57
+ if (nb == 0) return
58
+ const w = this.width / nb
59
+
60
+ //make svg element
61
+ const svg = this.div
62
+ .append('svg')
63
+ .attr('width', this.width)
64
+ .attr('height', this.height + this.tickSize + 2 + 10)
65
+
66
+ //draw graphic elements
67
+ for (let i = 0; i < nb; i++) {
68
+ svg.append('rect')
69
+ .attr('x', i * w)
70
+ .attr('y', 0)
71
+ .attr('width', w)
72
+ .attr('height', this.height)
73
+ .style('fill', this.colors[i])
74
+ }
75
+
76
+ //tick line
77
+ for (let i = 1; i < nb; i++) {
78
+ svg.append('line')
79
+ .attr('x1', w * i)
80
+ .attr('y1', 0)
81
+ .attr('x2', w * i)
82
+ .attr('y2', this.height + this.tickSize)
83
+ .style('stroke', 'black')
84
+ }
85
+
86
+ //labels
87
+ for (let i = 1; i < nb; i++) {
88
+ //prepare label
89
+ svg.append('text')
90
+ .attr('id', 'ticklabel_' + i)
91
+ .attr('x', w * i)
92
+ .attr('y', this.height + this.tickSize + 2)
93
+ .style('font-size', this.labelFontSize)
94
+ //.style("font-weight", "bold")
95
+ //.style("font-family", "Arial")
96
+ .style('text-anchor', i == 0 ? 'start' : i == this.ticks - 1 ? 'end' : 'middle')
97
+ .style('alignment-baseline', 'top')
98
+ .style('dominant-baseline', 'hanging')
99
+ .style('pointer-events', 'none')
100
+ .text(this.breaksText[i - 1])
101
+ }
102
+ }
103
+ }