@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 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, headerRow, id, left, maxY, right, singleScale, table, title, top, xLabels, zLabels, zxY }?: {
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?: HTMLTableElement;
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?: HTMLTableElement;
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
- xLabels = [],
60
- zLabels = [],
61
- zxY = []
62
- } = {}) => {
63
- if (table != null) {
64
- const zxYNotPassed = !zxY.length
65
- const xLabelsNotPassed = !xLabels.length
66
- const zLabelsNotPassed = !zLabels.length
67
-
68
- table.querySelectorAll('tr').forEach((row, r) =>
69
- // @ts-ignore
70
- row.querySelectorAll('td,th').forEach((/** @type {HTMLTableCellElement} */ col, c) => {
71
- const x = r - +headerRow
72
- const z = c - +headerColumn
73
- const value = col.innerText
74
-
75
- if (x >= 0 && z >= 0 && zxYNotPassed) {
76
- zxY[z] = zxY[z] ?? []
77
- zxY[z][x] = parseFloat(value)
78
- } else if (x >= 0 && z < 0 && xLabelsNotPassed) {
79
- xLabels[x] = value
80
- } else if (x < 0 && z >= 0 && zLabelsNotPassed) {
81
- zLabels[z] = value
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: 0, 'text-anchor': 'middle', 'alignment-baseline': 'hanging' },
214
- xLabels[i]])]]
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)|([<>=.?:&|!~*/%+-])|(0x[\dabcdef]+|0o[01234567]+|0b[01]+|\d+(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?)|([$\w]+)(?=\()|([$\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
@@ -40,5 +40,5 @@
40
40
  "types": "nnn.d.ts",
41
41
  "name": "@jackens/nnn",
42
42
  "type": "module",
43
- "version": "2024.1.16"
43
+ "version": "2024.2.10"
44
44
  }
package/readme.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Jackens’ JavaScript helpers.
4
4
 
5
- <sub>Version: <code class="version">2024.1.16</code></sub>
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, headerRow, id, left, maxY, right, singleScale, table, title, top, xLabels, zLabels, zxY }?: {
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?: HTMLTableElement;
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