@jackens/nnn 2024.1.16 → 2024.2.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.
- package/chartable.d.ts +6 -10
- package/chartable.js +37 -39
- package/nanolightJs.js +1 -1
- package/package.json +1 -1
- package/readme.md +7 -11
package/chartable.d.ts
CHANGED
|
@@ -6,36 +6,32 @@
|
|
|
6
6
|
* - `gapX`: X axis spacing
|
|
7
7
|
* - `gapY`: Y axis spacing
|
|
8
8
|
* - `headerColumn`: flag indicating that `table` has a header column (with X axis labels)
|
|
9
|
-
* - `headerRow`: flag indicating that `table` has a header row (with data series labels)
|
|
10
9
|
* - `id`: chart id
|
|
11
10
|
* - `left`: left padding (for data series labels)
|
|
12
11
|
* - `maxY`: number of Y axis lines
|
|
12
|
+
* - `reverse`: flag to reverse all data series
|
|
13
13
|
* - `right`: right padding (for data series labels)
|
|
14
|
+
* - `rotate`: flag to rotate X axis labels
|
|
14
15
|
* - `singleScale`: flag to force single scale
|
|
15
16
|
* - `table`: `HTMLTableElement` to extract data, data series labels and X axis labels
|
|
16
17
|
* - `title`: chart title
|
|
17
18
|
* - `top`: top padding (for the title)
|
|
18
|
-
* - `xLabels`: X axis labels
|
|
19
|
-
* - `zLabels`: data series labels
|
|
20
|
-
* - `zxY`: chart data
|
|
21
19
|
*/
|
|
22
|
-
export function chartable({ bottom, gapX, gapY, headerColumn,
|
|
20
|
+
export function chartable({ bottom, gapX, gapY, headerColumn, id, left, maxY, reverse, right, rotate, singleScale, table, title, top }: {
|
|
23
21
|
bottom?: number;
|
|
24
22
|
gapX?: number;
|
|
25
23
|
gapY?: number;
|
|
26
24
|
headerColumn?: boolean;
|
|
27
|
-
headerRow?: boolean;
|
|
28
25
|
id?: string;
|
|
29
26
|
left?: number;
|
|
30
27
|
maxY?: number;
|
|
28
|
+
reverse?: boolean;
|
|
31
29
|
right?: number;
|
|
30
|
+
rotate?: boolean;
|
|
32
31
|
singleScale?: boolean;
|
|
33
|
-
table
|
|
32
|
+
table: HTMLTableElement;
|
|
34
33
|
title?: string;
|
|
35
34
|
top?: number;
|
|
36
|
-
xLabels?: string[];
|
|
37
|
-
zLabels?: string[];
|
|
38
|
-
zxY?: number[][];
|
|
39
35
|
}): SVGSVGElement;
|
|
40
36
|
|
|
41
37
|
export const tests: {};
|
package/chartable.js
CHANGED
|
@@ -10,36 +10,32 @@ const COLORS = ['#e22', '#e73', '#fc3', '#ad4', '#4d9', '#3be', '#45d', '#c3e']
|
|
|
10
10
|
* - `gapX`: X axis spacing
|
|
11
11
|
* - `gapY`: Y axis spacing
|
|
12
12
|
* - `headerColumn`: flag indicating that `table` has a header column (with X axis labels)
|
|
13
|
-
* - `headerRow`: flag indicating that `table` has a header row (with data series labels)
|
|
14
13
|
* - `id`: chart id
|
|
15
14
|
* - `left`: left padding (for data series labels)
|
|
16
15
|
* - `maxY`: number of Y axis lines
|
|
16
|
+
* - `reverse`: flag to reverse all data series
|
|
17
17
|
* - `right`: right padding (for data series labels)
|
|
18
|
+
* - `rotate`: flag to rotate X axis labels
|
|
18
19
|
* - `singleScale`: flag to force single scale
|
|
19
20
|
* - `table`: `HTMLTableElement` to extract data, data series labels and X axis labels
|
|
20
21
|
* - `title`: chart title
|
|
21
22
|
* - `top`: top padding (for the title)
|
|
22
|
-
* - `xLabels`: X axis labels
|
|
23
|
-
* - `zLabels`: data series labels
|
|
24
|
-
* - `zxY`: chart data
|
|
25
23
|
*
|
|
26
24
|
* @param {{
|
|
27
25
|
* bottom?: number;
|
|
28
26
|
* gapX?: number;
|
|
29
27
|
* gapY?: number;
|
|
30
28
|
* headerColumn?: boolean;
|
|
31
|
-
* headerRow?: boolean;
|
|
32
29
|
* id?: string;
|
|
33
30
|
* left?: number;
|
|
34
31
|
* maxY?: number;
|
|
32
|
+
* reverse?: boolean;
|
|
35
33
|
* right?: number;
|
|
34
|
+
* rotate?: boolean;
|
|
36
35
|
* singleScale?: boolean;
|
|
37
|
-
* table
|
|
36
|
+
* table: HTMLTableElement;
|
|
38
37
|
* title?: string;
|
|
39
38
|
* top?: number;
|
|
40
|
-
* xLabels?: string[];
|
|
41
|
-
* zLabels?: string[];
|
|
42
|
-
* zxY?: number[][];
|
|
43
39
|
* }} options
|
|
44
40
|
*/
|
|
45
41
|
export const chartable = ({
|
|
@@ -47,40 +43,41 @@ export const chartable = ({
|
|
|
47
43
|
gapX = 70,
|
|
48
44
|
gapY = 30,
|
|
49
45
|
headerColumn = false,
|
|
50
|
-
headerRow = true,
|
|
51
46
|
id,
|
|
52
47
|
left = 200,
|
|
53
48
|
maxY = 10,
|
|
49
|
+
reverse = false,
|
|
54
50
|
right = 200,
|
|
51
|
+
rotate = false,
|
|
55
52
|
singleScale = false,
|
|
56
53
|
table,
|
|
57
54
|
title,
|
|
58
|
-
top = 70
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
55
|
+
top = 70
|
|
56
|
+
}) => {
|
|
57
|
+
const /** @type {number[][]} */ zxY = []
|
|
58
|
+
const /** @type {string[]} */ xLabels = []
|
|
59
|
+
const /** @type {string[]} */ zLabels = []
|
|
60
|
+
|
|
61
|
+
table.querySelectorAll('tr').forEach((row, r) =>
|
|
62
|
+
// @ts-ignore
|
|
63
|
+
row.querySelectorAll('td,th').forEach((/** @type {HTMLTableCellElement} */ col, c) => {
|
|
64
|
+
const x = r - 1
|
|
65
|
+
const z = c - +headerColumn
|
|
66
|
+
const value = col.innerText
|
|
67
|
+
|
|
68
|
+
if (x >= 0 && z >= 0) {
|
|
69
|
+
zxY[z] = zxY[z] ?? []
|
|
70
|
+
zxY[z][x] = parseFloat(value)
|
|
71
|
+
} else if (x >= 0 && z < 0) {
|
|
72
|
+
xLabels[x] = value
|
|
73
|
+
} else if (x < 0 && z >= 0) {
|
|
74
|
+
zLabels[z] = value
|
|
75
|
+
}
|
|
76
|
+
}))
|
|
77
|
+
|
|
78
|
+
if (reverse) {
|
|
79
|
+
xLabels.reverse()
|
|
80
|
+
zxY.forEach(xY => xY.reverse())
|
|
84
81
|
}
|
|
85
82
|
|
|
86
83
|
let bestScales = [Infinity, -Infinity, Infinity, -Infinity, Infinity]
|
|
@@ -209,9 +206,10 @@ export const chartable = ({
|
|
|
209
206
|
xLabels.length > 0
|
|
210
207
|
? ['g', { transform: `translate(${left} ${top + h})` },
|
|
211
208
|
['g', { class: 'chartable-x-labels', transform: 'translate(0 15)' },
|
|
212
|
-
...xi.map((x, i) => ['text',
|
|
213
|
-
{ x, y:
|
|
214
|
-
|
|
209
|
+
...xi.slice(0).map((x, i) => ['text', rotate
|
|
210
|
+
? { x: 0, y: -x, 'text-anchor': 'start', 'alignment-baseline': 'hanging', transform: 'rotate(90)' }
|
|
211
|
+
: { x, y: 0, 'text-anchor': 'middle', 'alignment-baseline': 'hanging' },
|
|
212
|
+
xLabels[i]])]]
|
|
215
213
|
: null
|
|
216
214
|
)
|
|
217
215
|
}
|
package/nanolightJs.js
CHANGED
|
@@ -6,7 +6,7 @@ import { nanolight } from './nanolight.js'
|
|
|
6
6
|
*/
|
|
7
7
|
// @ts-ignore
|
|
8
8
|
export const nanolightJs = nanolight.bind(0,
|
|
9
|
-
/('.*?'|".*?"|`[\s\S]*?`)|(\/\/.*?\n|\/\*[\s\S]*?\*\/)|(any|bigint|break|boolean|case|catch|const|continue|debugger|default|delete|do|else|eval|export|extends|false|finally|for|from|function|goto|if|import|in|instanceof|is|keyof|let|NaN|new|number|null|package|return|string|super|switch|symbol|this|throw|true|try|type|typeof|undefined|unknown|var|void|while|with|yield)(?!\w)|([
|
|
9
|
+
/('.*?'|".*?"|`[\s\S]*?`)|(\/\/.*?\n|\/\*[\s\S]*?\*\/)|(any|bigint|break|boolean|case|catch|const|continue|debugger|default|delete|do|else|eval|export|extends|false|finally|for|from|function|goto|if|import|in|instanceof|is|keyof|let|NaN|new|number|null|package|return|string|super|switch|symbol|this|throw|true|try|type|typeof|undefined|unknown|var|void|while|with|yield)(?!\w)|([<>=.?:&|!^~*/%+-])|(0x[\dabcdef]+|0o[01234567]+|0b[01]+|\d+(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?)|([$\w]+)(?=\()|([$\wąćęłńóśżźĄĆĘŁŃÓŚŻŹ]+)/,
|
|
10
10
|
[
|
|
11
11
|
chunk => chunk,
|
|
12
12
|
chunk => ['span', { class: 'string' }, chunk],
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Jackens’ JavaScript helpers.
|
|
4
4
|
|
|
5
|
-
<sub>Version: <code class="version">2024.
|
|
5
|
+
<sub>Version: <code class="version">2024.2.10</code></sub>
|
|
6
6
|
|
|
7
7
|
## Installation
|
|
8
8
|
|
|
@@ -101,23 +101,21 @@ The type of arguments of the `jcss` helper.
|
|
|
101
101
|
### chartable
|
|
102
102
|
|
|
103
103
|
```ts
|
|
104
|
-
export function chartable({ bottom, gapX, gapY, headerColumn,
|
|
104
|
+
export function chartable({ bottom, gapX, gapY, headerColumn, id, left, maxY, reverse, right, rotate, singleScale, table, title, top }: {
|
|
105
105
|
bottom?: number;
|
|
106
106
|
gapX?: number;
|
|
107
107
|
gapY?: number;
|
|
108
108
|
headerColumn?: boolean;
|
|
109
|
-
headerRow?: boolean;
|
|
110
109
|
id?: string;
|
|
111
110
|
left?: number;
|
|
112
111
|
maxY?: number;
|
|
112
|
+
reverse?: boolean;
|
|
113
113
|
right?: number;
|
|
114
|
+
rotate?: boolean;
|
|
114
115
|
singleScale?: boolean;
|
|
115
|
-
table
|
|
116
|
+
table: HTMLTableElement;
|
|
116
117
|
title?: string;
|
|
117
118
|
top?: number;
|
|
118
|
-
xLabels?: string[];
|
|
119
|
-
zLabels?: string[];
|
|
120
|
-
zxY?: number[][];
|
|
121
119
|
}): SVGSVGElement;
|
|
122
120
|
```
|
|
123
121
|
|
|
@@ -128,18 +126,16 @@ Options:
|
|
|
128
126
|
- `gapX`: X axis spacing
|
|
129
127
|
- `gapY`: Y axis spacing
|
|
130
128
|
- `headerColumn`: flag indicating that `table` has a header column (with X axis labels)
|
|
131
|
-
- `headerRow`: flag indicating that `table` has a header row (with data series labels)
|
|
132
129
|
- `id`: chart id
|
|
133
130
|
- `left`: left padding (for data series labels)
|
|
134
131
|
- `maxY`: number of Y axis lines
|
|
132
|
+
- `reverse`: flag to reverse all data series
|
|
135
133
|
- `right`: right padding (for data series labels)
|
|
134
|
+
- `rotate`: flag to rotate X axis labels
|
|
136
135
|
- `singleScale`: flag to force single scale
|
|
137
136
|
- `table`: `HTMLTableElement` to extract data, data series labels and X axis labels
|
|
138
137
|
- `title`: chart title
|
|
139
138
|
- `top`: top padding (for the title)
|
|
140
|
-
- `xLabels`: X axis labels
|
|
141
|
-
- `zLabels`: data series labels
|
|
142
|
-
- `zxY`: chart data
|
|
143
139
|
|
|
144
140
|
### eq
|
|
145
141
|
|