@xiee/utils 1.14.43 → 1.14.45
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/css/lt.css +1 -5
- package/css/lt.min.css +1 -1
- package/css/lt.min.css.map +1 -1
- package/js/lt.js +274 -22
- package/js/lt.min.js +1 -1
- package/js/lt.min.js.map +1 -1
- package/package.json +1 -1
package/css/lt.css
CHANGED
|
@@ -26,11 +26,7 @@ th, td{ padding: 5px; }
|
|
|
26
26
|
|
|
27
27
|
tbody {
|
|
28
28
|
th.lt-stub { text-align: left; }
|
|
29
|
-
.lt-row-group th {
|
|
30
|
-
text-align: left;
|
|
31
|
-
background: radial-gradient(circle, #ccc 0.75px, transparent 0.75px);
|
|
32
|
-
background-size: 8px 8px;
|
|
33
|
-
}
|
|
29
|
+
.lt-row-group th { text-align: left; }
|
|
34
30
|
.lt-row-group ~ tr:not(.lt-row-group) > :first-child { padding-left: 1em; }
|
|
35
31
|
}
|
|
36
32
|
|
package/css/lt.min.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
th,td{padding:5px}.lt-table{--b:1px solid;--bg:4px solid transparent;--c-head:#888;--c-span:#bbb;--c-row:#ddd;--c-foot:#aaa;--c-grp:#ccc;border-collapse:separate;border-spacing:0;border-top:var(--b);border-bottom:var(--b);margin:auto;& caption{border-top:var(--b);text-align:center;padding:.5em;& .lt-title{font-size:1.2em;font-weight:600}& .lt-subtitle{font-size:.9em}}& tbody tr:not(:last-child) :is(td,th){border-bottom:var(--b) var(--c-row)}& thead th{border-bottom:var(--b) var(--c-head);border-left:var(--bg);border-right:var(--bg)}& thead .lt-spanner-row{& .lt-spanner{border-bottom:var(--b) var(--c-span);text-align:center}& .lt-spanner-empty{border-bottom:none}}& tbody{& th.lt-stub
|
|
1
|
+
th,td{padding:5px}.lt-table{--b:1px solid;--bg:4px solid transparent;--c-head:#888;--c-span:#bbb;--c-row:#ddd;--c-foot:#aaa;--c-grp:#ccc;border-collapse:separate;border-spacing:0;border-top:var(--b);border-bottom:var(--b);margin:auto;& caption{border-top:var(--b);text-align:center;padding:.5em;& .lt-title{font-size:1.2em;font-weight:600}& .lt-subtitle{font-size:.9em}}& tbody tr:not(:last-child) :is(td,th){border-bottom:var(--b) var(--c-row)}& thead th{border-bottom:var(--b) var(--c-head);border-left:var(--bg);border-right:var(--bg)}& thead .lt-spanner-row{& .lt-spanner{border-bottom:var(--b) var(--c-span);text-align:center}& .lt-spanner-empty{border-bottom:none}}& tbody{& th.lt-stub,& .lt-row-group th{text-align:left}& .lt-row-group~tr:not(.lt-row-group)>:first-child{padding-left:1em}}& tfoot.lt-footer{font-size:.85em;& .lt-footnote:first-child td{border-top:var(--b) var(--c-foot)}& .lt-source-note:first-child td{border-top:1px dashed var(--c-foot)}& .lt-source-note td{font-style:italic}}& .al-r{text-align:right}& .al-c{text-align:center}& sup.lt-fnref{color:#06c;&:before{content:" ["}&:after{content:"]"}}}
|
|
2
2
|
/*# sourceMappingURL=lt.min.css.map */
|
package/css/lt.min.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":"AAAA,kBACA,wNAUE,6DAIE,4CACA,+BAGF,2EACA,6FACA,wBACE,qEACA,wCAGF,QACE,
|
|
1
|
+
{"version":3,"mappings":"AAAA,kBACA,wNAUE,6DAIE,4CACA,+BAGF,2EACA,6FACA,wBACE,qEACA,wCAGF,QACE,gDAEA,qEAGF,kCAEE,gEACA,qEACA,wCAGF,yBACA,0BAEA,0BAEE,sBACA","sources":["lt.css"],"sourcesContent":["th, td{ padding: 5px; }\n.lt-table {\n --b: 1px solid; --bg: 4px solid transparent;\n --c-head: #888; --c-span: #bbb; --c-row: #ddd; --c-foot: #aaa; --c-grp: #ccc;\n\n border-collapse: separate;\n margin: auto;\n border-spacing: 0;\n border-top: var(--b);\n border-bottom: var(--b);\n\n caption {\n border-top: var(--b);\n padding: .5em;\n text-align: center;\n .lt-title { font-size: 1.2em; font-weight: 600; }\n .lt-subtitle { font-size: 0.9em; }\n }\n\n tbody tr:not(:last-child) :is(td, th) { border-bottom: var(--b) var(--c-row); }\n thead th { border-bottom: var(--b) var(--c-head); border-left: var(--bg); border-right: var(--bg); }\n thead .lt-spanner-row {\n .lt-spanner { border-bottom: var(--b) var(--c-span); text-align: center; }\n .lt-spanner-empty { border-bottom: none; }\n }\n\n tbody {\n th.lt-stub { text-align: left; }\n .lt-row-group th { text-align: left; }\n .lt-row-group ~ tr:not(.lt-row-group) > :first-child { padding-left: 1em; }\n }\n\n tfoot.lt-footer {\n font-size: 0.85em;\n .lt-footnote:first-child td { border-top: var(--b) var(--c-foot); }\n .lt-source-note:first-child td { border-top: 1px dashed var(--c-foot); }\n .lt-source-note td { font-style: italic; }\n }\n\n .al-r { text-align: right; }\n .al-c { text-align: center; }\n\n sup.lt-fnref {\n color: #06c;\n &::before { content: \" [\"; }\n &::after { content: \"]\"; }\n }\n}\n"],"names":[]}
|
package/js/lt.js
CHANGED
|
@@ -12,6 +12,236 @@
|
|
|
12
12
|
.replace(/>/g, ">").replace(/"/g, """);
|
|
13
13
|
const sup = i => `<sup class="lt-fnref">${i}</sup>`;
|
|
14
14
|
|
|
15
|
+
// --- Number formatting ---
|
|
16
|
+
function fmtNumber(v, decimals, bigMark) {
|
|
17
|
+
if (v == null || typeof v !== "number" || isNaN(v)) return null;
|
|
18
|
+
let s = decimals != null ? v.toFixed(decimals) : String(v);
|
|
19
|
+
if (bigMark) {
|
|
20
|
+
const parts = s.split(".");
|
|
21
|
+
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, bigMark);
|
|
22
|
+
s = parts.join(".");
|
|
23
|
+
}
|
|
24
|
+
return decimals != null || bigMark ? s : null;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// --- Pattern merge ---
|
|
28
|
+
function mergeVals(vals, pattern) {
|
|
29
|
+
if (!pattern) return vals.filter(v => v !== "").join(" ");
|
|
30
|
+
let remaining = pattern, result = "";
|
|
31
|
+
while (remaining) {
|
|
32
|
+
const m = remaining.match(/<<(.*?)>>/);
|
|
33
|
+
if (!m) { result += subRefs(remaining, vals); break; }
|
|
34
|
+
if (m.index > 0) result += subRefs(remaining.slice(0, m.index), vals);
|
|
35
|
+
const block = m[1];
|
|
36
|
+
const refs = [...block.matchAll(/\{(\d+)\}/g)].map(x => +x[1]);
|
|
37
|
+
if (!refs.length || refs.every(i => vals[i - 1] !== ""))
|
|
38
|
+
result += subRefs(block, vals);
|
|
39
|
+
remaining = remaining.slice(m.index + m[0].length);
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
function subRefs(s, vals) {
|
|
44
|
+
for (let i = 0; i < vals.length; i++)
|
|
45
|
+
s = s.split("{" + (i + 1) + "}").join(vals[i]);
|
|
46
|
+
return s;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// --- Apply ops to data columns, return display strings per column ---
|
|
50
|
+
function applyOps(spec) {
|
|
51
|
+
const data = spec.data || {},
|
|
52
|
+
ops = spec.ops || [],
|
|
53
|
+
colNames = Object.keys(data),
|
|
54
|
+
nRow = colNames.length ? data[colNames[0]].length : 0;
|
|
55
|
+
|
|
56
|
+
// Working copy: display[col][row] = string
|
|
57
|
+
const display = {};
|
|
58
|
+
for (const c of colNames) {
|
|
59
|
+
display[c] = data[c].map(v => v == null ? "" : String(v));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
for (const op of ops) {
|
|
63
|
+
const cols = op.columns || colNames;
|
|
64
|
+
switch (op.type) {
|
|
65
|
+
case "fmt_number":
|
|
66
|
+
for (const c of cols) {
|
|
67
|
+
if (!data[c]) continue;
|
|
68
|
+
for (let i = 0; i < nRow; i++) {
|
|
69
|
+
const raw = data[c][i];
|
|
70
|
+
const f = fmtNumber(raw, op.decimals, op.big_mark ?? "");
|
|
71
|
+
if (f != null) display[c][i] = f;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
break;
|
|
75
|
+
case "sub":
|
|
76
|
+
for (const c of cols) {
|
|
77
|
+
if (!data[c]) continue;
|
|
78
|
+
for (let i = 0; i < nRow; i++) {
|
|
79
|
+
const raw = data[c][i];
|
|
80
|
+
if (op.small != null && typeof raw === "number" && raw !== 0 &&
|
|
81
|
+
!isNaN(raw) && raw != null && Math.abs(raw) < op.small) {
|
|
82
|
+
display[c][i] = op.small_text ?? ("<" + op.small);
|
|
83
|
+
} else if (op.zero != null && raw === 0) {
|
|
84
|
+
display[c][i] = op.zero;
|
|
85
|
+
} else if (op.missing != null && raw == null) {
|
|
86
|
+
display[c][i] = op.missing;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
break;
|
|
91
|
+
case "merge": {
|
|
92
|
+
const mCols = op.columns;
|
|
93
|
+
if (!mCols || mCols.length < 2) break;
|
|
94
|
+
const target = mCols[0];
|
|
95
|
+
for (let i = 0; i < nRow; i++) {
|
|
96
|
+
const vals = mCols.map(c => display[c] ? display[c][i] : "");
|
|
97
|
+
display[target][i] = mergeVals(vals, op.pattern);
|
|
98
|
+
}
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return { display, nRow };
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// --- Resolve structural spec fields from ops + data ---
|
|
107
|
+
function resolveSpec(spec) {
|
|
108
|
+
const data = spec.data || {},
|
|
109
|
+
ops = spec.ops || [],
|
|
110
|
+
colNames = Object.keys(data),
|
|
111
|
+
nRow = colNames.length ? data[colNames[0]].length : 0;
|
|
112
|
+
|
|
113
|
+
// Determine row_group and row_label columns
|
|
114
|
+
const rowGroupCol = spec.row_group || null,
|
|
115
|
+
rowLabelCol = spec.row_label || null;
|
|
116
|
+
|
|
117
|
+
// Hidden columns: row_group, row_label, merge sources
|
|
118
|
+
const hidden = new Set();
|
|
119
|
+
if (rowGroupCol) hidden.add(rowGroupCol);
|
|
120
|
+
if (rowLabelCol) hidden.add(rowLabelCol);
|
|
121
|
+
for (const op of ops) {
|
|
122
|
+
if (op.type === "merge" && op.hide !== false && op.columns)
|
|
123
|
+
op.columns.slice(1).forEach(c => hidden.add(c));
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Visible columns after hiding
|
|
127
|
+
let visible = colNames.filter(c => !hidden.has(c));
|
|
128
|
+
|
|
129
|
+
// Apply cols_move
|
|
130
|
+
for (const op of ops) {
|
|
131
|
+
if (op.type !== "cols_move") continue;
|
|
132
|
+
const toMove = (op.columns || []).filter(c => visible.includes(c));
|
|
133
|
+
if (!toMove.length) continue;
|
|
134
|
+
const rest = visible.filter(c => !toMove.includes(c));
|
|
135
|
+
if (op.after == null) {
|
|
136
|
+
visible = [...toMove, ...rest];
|
|
137
|
+
} else {
|
|
138
|
+
const pos = rest.indexOf(op.after);
|
|
139
|
+
if (pos >= 0) visible = [...rest.slice(0, pos + 1), ...toMove, ...rest.slice(pos + 1)];
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Alignment: default from data type (number→right, else left), then overrides
|
|
144
|
+
const align = visible.map(c => {
|
|
145
|
+
const col = data[c];
|
|
146
|
+
return col && col.length && typeof col.find(v => v != null) === "number" ? "right" : "left";
|
|
147
|
+
});
|
|
148
|
+
for (const op of ops) {
|
|
149
|
+
if (op.type !== "align") continue;
|
|
150
|
+
for (const c of (op.columns || [])) {
|
|
151
|
+
const i = visible.indexOf(c);
|
|
152
|
+
if (i >= 0) align[i] = op.align;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Column labels
|
|
157
|
+
const colLabels = [...visible];
|
|
158
|
+
for (const op of ops) {
|
|
159
|
+
if (op.type !== "cols_label" || !op.labels) continue;
|
|
160
|
+
for (const [c, lbl] of Object.entries(op.labels)) {
|
|
161
|
+
const i = visible.indexOf(c);
|
|
162
|
+
if (i >= 0) colLabels[i] = lbl;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Column widths
|
|
167
|
+
let colWidths = null;
|
|
168
|
+
for (const op of ops) {
|
|
169
|
+
if (op.type !== "cols_width" || !op.widths) continue;
|
|
170
|
+
if (!colWidths) colWidths = visible.map(() => "");
|
|
171
|
+
for (const [c, w] of Object.entries(op.widths)) {
|
|
172
|
+
const i = visible.indexOf(c);
|
|
173
|
+
if (i >= 0) colWidths[i] = w;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Indent
|
|
178
|
+
const indent = new Array(nRow).fill(0);
|
|
179
|
+
for (const op of ops) {
|
|
180
|
+
if (op.type !== "indent" || !op.rows) continue;
|
|
181
|
+
for (const r of op.rows) indent[r - 1] = op.level ?? 1;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Stubhead
|
|
185
|
+
let stubLabel = rowLabelCol || "";
|
|
186
|
+
for (const op of ops) {
|
|
187
|
+
if (op.type === "stubhead") stubLabel = op.label;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Row groups from data column
|
|
191
|
+
let groups = [];
|
|
192
|
+
if (rowGroupCol && data[rowGroupCol]) {
|
|
193
|
+
const gCol = data[rowGroupCol];
|
|
194
|
+
let i = 0;
|
|
195
|
+
while (i < nRow) {
|
|
196
|
+
const label = gCol[i] == null ? "" : String(gCol[i]);
|
|
197
|
+
const rows = [i + 1];
|
|
198
|
+
while (++i < nRow && String(gCol[i] ?? "") === label) rows.push(i + 1);
|
|
199
|
+
groups.push({ label, rows });
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// Manual groups
|
|
203
|
+
for (const op of ops) {
|
|
204
|
+
if (op.type === "row_group") groups.push({ label: op.label, rows: op.rows });
|
|
205
|
+
}
|
|
206
|
+
// Group ordering
|
|
207
|
+
for (const op of ops) {
|
|
208
|
+
if (op.type !== "group_order" || !groups.length) continue;
|
|
209
|
+
const order = op.order || [];
|
|
210
|
+
const ordered = [], rest = [];
|
|
211
|
+
for (const lbl of order) {
|
|
212
|
+
const g = groups.find(x => x.label === lbl);
|
|
213
|
+
if (g) ordered.push(g);
|
|
214
|
+
}
|
|
215
|
+
for (const g of groups) if (!ordered.includes(g)) rest.push(g);
|
|
216
|
+
groups = [...ordered, ...rest];
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// Styles
|
|
220
|
+
const styles = [];
|
|
221
|
+
for (const op of ops) {
|
|
222
|
+
if (op.type !== "style") continue;
|
|
223
|
+
const s = { css: op.css };
|
|
224
|
+
if (op.columns) s.columns = op.columns;
|
|
225
|
+
if (op.rows) s.rows = op.rows;
|
|
226
|
+
styles.push(s);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// Stub values from row_label column
|
|
230
|
+
const stub = rowLabelCol && data[rowLabelCol]
|
|
231
|
+
? data[rowLabelCol].map(v => v == null ? "" : String(v))
|
|
232
|
+
: null;
|
|
233
|
+
|
|
234
|
+
return {
|
|
235
|
+
visible, align, colLabels, colWidths, indent, stubLabel, stub,
|
|
236
|
+
groups, styles,
|
|
237
|
+
spanners: spec.spanners || [],
|
|
238
|
+
footnotes: spec.footnotes || [],
|
|
239
|
+
notes: spec.notes || [],
|
|
240
|
+
header: spec.header || {},
|
|
241
|
+
nRow
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
|
|
15
245
|
// Footnotes: dedup by text, assign 1..N in first-seen order.
|
|
16
246
|
function indexFootnotes(fns) {
|
|
17
247
|
const order = [], idx = {};
|
|
@@ -21,8 +251,6 @@
|
|
|
21
251
|
return { order, idx };
|
|
22
252
|
}
|
|
23
253
|
|
|
24
|
-
// matcher(fns, idx)(type, p) → 1-based footnote index whose location
|
|
25
|
-
// matches, or 0. Encapsulates all "what footnote applies here?" logic.
|
|
26
254
|
const matcher = (fns, idx) => (type, p) => {
|
|
27
255
|
for (const f of fns) {
|
|
28
256
|
const loc = f.location;
|
|
@@ -43,24 +271,41 @@
|
|
|
43
271
|
};
|
|
44
272
|
|
|
45
273
|
function buildHtml(spec) {
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
spanners = spec.spanners || [],
|
|
52
|
-
groups = spec.row_groups || [],
|
|
53
|
-
fns = spec.footnotes || [],
|
|
54
|
-
notes = spec.notes || [],
|
|
55
|
-
hdr = spec.header || {},
|
|
56
|
-
reg = indexFootnotes(fns),
|
|
274
|
+
const { display, nRow } = applyOps(spec);
|
|
275
|
+
const res = resolveSpec(spec);
|
|
276
|
+
const { visible: cols, align, colLabels, colWidths, indent, stubLabel,
|
|
277
|
+
stub, groups, styles, spanners, footnotes: fns, notes, header: hdr } = res;
|
|
278
|
+
const reg = indexFootnotes(fns),
|
|
57
279
|
fIdx = matcher(fns, reg.idx),
|
|
58
|
-
stubLabel = spec.stub_label || "",
|
|
59
280
|
nCol = cols.length + (stub ? 1 : 0),
|
|
60
281
|
out = [`<table class="lt-table">`];
|
|
61
282
|
const alCls = i => { const a = align[i]; return a === "right" ? " class=\"al-r\"" : a === "center" ? " class=\"al-c\"" : ""; };
|
|
62
283
|
const mark = (type, p) => { const i = fIdx(type, p); return i ? sup(i) : ""; };
|
|
63
284
|
|
|
285
|
+
// Style map
|
|
286
|
+
const styleMap = {};
|
|
287
|
+
for (const s of styles) {
|
|
288
|
+
const sCols = s.columns || cols, sRows = s.rows;
|
|
289
|
+
for (let r = 1; r <= nRow; r++) {
|
|
290
|
+
if (sRows && sRows.indexOf(r) < 0) continue;
|
|
291
|
+
for (const c of sCols) {
|
|
292
|
+
const ci = cols.indexOf(c);
|
|
293
|
+
if (ci < 0) continue;
|
|
294
|
+
const key = `${r},${ci}`;
|
|
295
|
+
styleMap[key] = styleMap[key] ? styleMap[key] + ";" + s.css : s.css;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// <colgroup>
|
|
301
|
+
if (colWidths && colWidths.some(w => w)) {
|
|
302
|
+
out.push(`<colgroup>`);
|
|
303
|
+
if (stub) out.push(`<col>`);
|
|
304
|
+
for (let i = 0; i < cols.length; i++)
|
|
305
|
+
out.push(colWidths[i] ? `<col style="width:${colWidths[i]}">` : `<col>`);
|
|
306
|
+
out.push(`</colgroup>`);
|
|
307
|
+
}
|
|
308
|
+
|
|
64
309
|
// <caption>
|
|
65
310
|
const hasT = hdr.title != null && hdr.title !== "",
|
|
66
311
|
hasS = hdr.subtitle != null && hdr.subtitle !== "";
|
|
@@ -71,7 +316,7 @@
|
|
|
71
316
|
out.push(`</caption>`);
|
|
72
317
|
}
|
|
73
318
|
|
|
74
|
-
// <thead
|
|
319
|
+
// <thead>
|
|
75
320
|
out.push(`<thead>`);
|
|
76
321
|
if (spanners.length) {
|
|
77
322
|
out.push(`<tr class="lt-spanner-row">${stub ? `<th class="lt-spanner-empty"></th>` : ""}`);
|
|
@@ -92,14 +337,14 @@
|
|
|
92
337
|
out.push(`<th scope="col"${alCls(i)}>${esc(colLabels[i])}${mark("column_labels", { columns: [cols[i]] })}</th>`);
|
|
93
338
|
out.push(`</tr></thead>`);
|
|
94
339
|
|
|
95
|
-
//
|
|
340
|
+
// Body footnote markers
|
|
96
341
|
const bodyMarks = {};
|
|
97
342
|
for (const f of fns) {
|
|
98
343
|
if (f.location.type !== "body") continue;
|
|
99
344
|
const fi = reg.idx[f.text],
|
|
100
345
|
fcols = f.location.columns || [],
|
|
101
|
-
frows = f.location.rows;
|
|
102
|
-
for (let r = 1; r <=
|
|
346
|
+
frows = f.location.rows;
|
|
347
|
+
for (let r = 1; r <= nRow; r++) {
|
|
103
348
|
if (frows && frows.indexOf(r) < 0) continue;
|
|
104
349
|
for (const c of fcols) {
|
|
105
350
|
const ci = cols.indexOf(c);
|
|
@@ -108,12 +353,19 @@
|
|
|
108
353
|
}
|
|
109
354
|
}
|
|
110
355
|
|
|
356
|
+
// Row rendering
|
|
111
357
|
const pushRow = r => {
|
|
112
358
|
out.push(`<tr>`);
|
|
113
|
-
if (stub)
|
|
359
|
+
if (stub) {
|
|
360
|
+
const ind = indent[r - 1] || 0;
|
|
361
|
+
const style = ind ? ` style="padding-left:${ind + 1}em"` : "";
|
|
362
|
+
out.push(`<th scope="row" class="lt-stub"${style}>${esc(stub[r - 1])}</th>`);
|
|
363
|
+
}
|
|
114
364
|
for (let ci = 0; ci < cols.length; ci++) {
|
|
115
365
|
const m = bodyMarks[`${r},${ci}`];
|
|
116
|
-
|
|
366
|
+
const s = styleMap[`${r},${ci}`];
|
|
367
|
+
const val = display[cols[ci]] ? display[cols[ci]][r - 1] : "";
|
|
368
|
+
out.push(`<td${alCls(ci)}${s ? ` style="${s}"` : ""}>${esc(val)}${m ? sup(m) : ""}</td>`);
|
|
117
369
|
}
|
|
118
370
|
out.push(`</tr>`);
|
|
119
371
|
};
|
|
@@ -126,9 +378,9 @@
|
|
|
126
378
|
out.push(`<tr class="lt-row-group"><th colspan="${nCol}" scope="colgroup">${esc(g.label)}${mark("row_groups", { label: g.label })}</th></tr>`);
|
|
127
379
|
for (const r of g.rows) { seen[r] = 1; pushRow(r); }
|
|
128
380
|
}
|
|
129
|
-
for (let r = 1; r <=
|
|
381
|
+
for (let r = 1; r <= nRow; r++) if (!seen[r]) pushRow(r);
|
|
130
382
|
} else {
|
|
131
|
-
for (let r = 1; r <=
|
|
383
|
+
for (let r = 1; r <= nRow; r++) pushRow(r);
|
|
132
384
|
}
|
|
133
385
|
out.push(`</tbody>`);
|
|
134
386
|
|
package/js/lt.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(t=>{"use strict";if(t.LT&&t.LT.buildHtml)return;const
|
|
1
|
+
(t=>{"use strict";if(t.LT&&t.LT.buildHtml)return;const o=t=>String(t).replace(/&/g,"&").replace(/[<]/g,"<").replace(/>/g,">").replace(/"/g,"""),s=t=>`<sup class="lt-fnref">${t}</sup>`;function n(t,o,s){if(null==t||"number"!=typeof t||isNaN(t))return null;let n=null!=o?t.toFixed(o):String(t);if(s){const t=n.split(".");t[0]=t[0].replace(/\B(?=(\d{3})+(?!\d))/g,s),n=t.join(".")}return null!=o||s?n:null}function e(t,o){if(!o)return t.filter(t=>""!==t).join(" ");let s=o,n="";for(;s;){const o=s.match(/<<(.*?)>>/);if(!o){n+=l(s,t);break}o.index>0&&(n+=l(s.slice(0,o.index),t));const e=o[1],r=[...e.matchAll(/\{(\d+)\}/g)].map(t=>+t[1]);r.length&&!r.every(o=>""!==t[o-1])||(n+=l(e,t)),s=s.slice(o.index+o[0].length)}return n}function l(t,o){for(let s=0;s<o.length;s++)t=t.split("{"+(s+1)+"}").join(o[s]);return t}function r(t){const{display:l,nRow:r}=function(t){const o=t.data||{},s=t.ops||[],l=Object.keys(o),r=l.length?o[l[0]].length:0,c={};for(const t of l)c[t]=o[t].map(t=>null==t?"":String(t));for(const t of s){const s=t.columns||l;switch(t.type){case"fmt_number":for(const e of s)if(o[e])for(let s=0;s<r;s++){const l=n(o[e][s],t.decimals,t.big_mark??"");null!=l&&(c[e][s]=l)}break;case"sub":for(const n of s)if(o[n])for(let s=0;s<r;s++){const e=o[n][s];null!=t.small&&"number"==typeof e&&0!==e&&!isNaN(e)&&null!=e&&Math.abs(e)<t.small?c[n][s]=t.small_text??"<"+t.small:null!=t.zero&&0===e?c[n][s]=t.zero:null!=t.missing&&null==e&&(c[n][s]=t.missing)}break;case"merge":{const o=t.columns;if(!o||o.length<2)break;const s=o[0];for(let n=0;n<r;n++){const l=o.map(t=>c[t]?c[t][n]:"");c[s][n]=e(l,t.pattern)}break}}}return{display:c,nRow:r}}(t),c=function(t){const o=t.data||{},s=t.ops||[],n=Object.keys(o),e=n.length?o[n[0]].length:0,l=t.row_group||null,r=t.row_label||null,c=new Set;l&&c.add(l),r&&c.add(r);for(const t of s)"merge"===t.type&&!1!==t.hide&&t.columns&&t.columns.slice(1).forEach(t=>c.add(t));let i=n.filter(t=>!c.has(t));for(const t of s){if("cols_move"!==t.type)continue;const o=(t.columns||[]).filter(t=>i.includes(t));if(!o.length)continue;const s=i.filter(t=>!o.includes(t));if(null==t.after)i=[...o,...s];else{const n=s.indexOf(t.after);n>=0&&(i=[...s.slice(0,n+1),...o,...s.slice(n+1)])}}const u=i.map(t=>{const s=o[t];return s&&s.length&&"number"==typeof s.find(t=>null!=t)?"right":"left"});for(const t of s)if("align"===t.type)for(const o of t.columns||[]){const s=i.indexOf(o);s>=0&&(u[s]=t.align)}const f=[...i];for(const t of s)if("cols_label"===t.type&&t.labels)for(const[o,s]of Object.entries(t.labels)){const t=i.indexOf(o);t>=0&&(f[t]=s)}let a=null;for(const t of s)if("cols_width"===t.type&&t.widths){a||(a=i.map(()=>""));for(const[o,s]of Object.entries(t.widths)){const t=i.indexOf(o);t>=0&&(a[t]=s)}}const p=new Array(e).fill(0);for(const t of s)if("indent"===t.type&&t.rows)for(const o of t.rows)p[o-1]=t.level??1;let h=r||"";for(const t of s)"stubhead"===t.type&&(h=t.label);let d=[];if(l&&o[l]){const t=o[l];let s=0;for(;s<e;){const o=null==t[s]?"":String(t[s]),n=[s+1];for(;++s<e&&String(t[s]??"")===o;)n.push(s+1);d.push({label:o,rows:n})}}for(const t of s)"row_group"===t.type&&d.push({label:t.label,rows:t.rows});for(const t of s){if("group_order"!==t.type||!d.length)continue;const o=t.order||[],s=[],n=[];for(const t of o){const o=d.find(o=>o.label===t);o&&s.push(o)}for(const t of d)s.includes(t)||n.push(t);d=[...s,...n]}const g=[];for(const t of s){if("style"!==t.type)continue;const o={css:t.css};t.columns&&(o.columns=t.columns),t.rows&&(o.rows=t.rows),g.push(o)}const b=r&&o[r]?o[r].map(t=>null==t?"":String(t)):null;return{visible:i,align:u,colLabels:f,colWidths:a,indent:p,stubLabel:h,stub:b,groups:d,styles:g,spanners:t.spanners||[],footnotes:t.footnotes||[],notes:t.notes||[],header:t.header||{},nRow:e}}(t),{visible:i,align:u,colLabels:f,colWidths:a,indent:p,stubLabel:h,stub:d,groups:g,styles:b,spanners:m,footnotes:$,notes:y,header:w}=c,x=function(t){const o=[],s={};return t.forEach(t=>{null==s[t.text]&&(s[t.text]=o.length+1,o.push(t.text))}),{order:o,idx:s}}($),_=((t,o)=>(s,n)=>{for(const e of t){const t=e.location;if(t.type!==s)continue;const l=o[e.text];if("title"===s&&t.group===n.group)return l;if("column_labels"===s&&n.columns.every(o=>t.columns.indexOf(o)>=0))return l;if("column_spanners"===s&&n.spanners.every(o=>t.spanners.indexOf(o)>=0))return l;if("row_groups"===s){if("all"===t.match)return l;if("exact"===t.match&&t.values.indexOf(n.label)>=0)return l;if("starts_with"===t.match&&0===n.label.indexOf(t.value))return l}}return 0})($,x.idx),O=i.length+(d?1:0),v=['<table class="lt-table">'],L=t=>{const o=u[t];return"right"===o?' class="al-r"':"center"===o?' class="al-c"':""},j=(t,o)=>{const n=_(t,o);return n?s(n):""},k={};for(const t of b){const o=t.columns||i,s=t.rows;for(let n=1;n<=r;n++)if(!(s&&s.indexOf(n)<0))for(const s of o){const o=i.indexOf(s);if(o<0)continue;const e=`${n},${o}`;k[e]=k[e]?k[e]+";"+t.css:t.css}}if(a&&a.some(t=>t)){v.push("<colgroup>"),d&&v.push("<col>");for(let t=0;t<i.length;t++)v.push(a[t]?`<col style="width:${a[t]}">`:"<col>");v.push("</colgroup>")}const S=null!=w.title&&""!==w.title,T=null!=w.subtitle&&""!==w.subtitle;if((S||T)&&(v.push('<caption class="lt-caption">'),S&&v.push(`<div class="lt-title">${o(w.title)}${j("title",{group:"title"})}</div>`),T&&v.push(`<div class="lt-subtitle">${o(w.subtitle)}${j("title",{group:"subtitle"})}</div>`),v.push("</caption>")),v.push("<thead>"),m.length){v.push('<tr class="lt-spanner-row">'+(d?'<th class="lt-spanner-empty"></th>':""));for(let t=0;t<i.length;){const s=m.find(o=>o.columns[0]===i[t]);s?(v.push(`<th colspan="${s.columns.length}" scope="colgroup" class="lt-spanner">${o(s.label)}${j("column_spanners",{spanners:[s.label]})}</th>`),t+=s.columns.length):(v.push('<th class="lt-spanner-empty"></th>'),t++)}v.push("</tr>")}v.push("<tr>"+(d?`<th scope="col">${o(h)}</th>`:""));for(let t=0;t<i.length;t++)v.push(`<th scope="col"${L(t)}>${o(f[t])}${j("column_labels",{columns:[i[t]]})}</th>`);v.push("</tr></thead>");const N={};for(const t of $){if("body"!==t.location.type)continue;const o=x.idx[t.text],s=t.location.columns||[],n=t.location.rows;for(let t=1;t<=r;t++)if(!(n&&n.indexOf(t)<0))for(const n of s){const s=i.indexOf(n);s>=0&&(N[`${t},${s}`]=o)}}const q=t=>{if(v.push("<tr>"),d){const s=p[t-1]||0,n=s?` style="padding-left:${s+1}em"`:"";v.push(`<th scope="row" class="lt-stub"${n}>${o(d[t-1])}</th>`)}for(let n=0;n<i.length;n++){const e=N[`${t},${n}`],r=k[`${t},${n}`],c=l[i[n]]?l[i[n]][t-1]:"";v.push(`<td${L(n)}${r?` style="${r}"`:""}>${o(c)}${e?s(e):""}</td>`)}v.push("</tr>")};if(v.push("<tbody>"),g.length){const t={};for(const s of g){v.push(`<tr class="lt-row-group"><th colspan="${O}" scope="colgroup">${o(s.label)}${j("row_groups",{label:s.label})}</th></tr>`);for(const o of s.rows)t[o]=1,q(o)}for(let o=1;o<=r;o++)t[o]||q(o)}else for(let t=1;t<=r;t++)q(t);if(v.push("</tbody>"),x.order.length||y.length){v.push('<tfoot class="lt-footer">'),x.order.forEach((t,n)=>v.push(`<tr class="lt-footnote"><td colspan="${O}">${s(n+1)} ${o(t)}</td></tr>`));for(const t of y)v.push(`<tr class="lt-source-note"><td colspan="${O}">${o(t)}</td></tr>`);v.push("</tfoot>")}return v.push("</table>"),v.join("")}const c=(t,o)=>t.insertAdjacentHTML("afterend",r(o)),i=t.LT&&t.LT.q||[];for(;i.length;){const t=i.shift();c(t.s,t.d)}t.LT={build(t){c(document.currentScript,t)},buildHtml:r,q:{push(t){c(t.s,t.d)}}}})(window);
|
|
2
2
|
//# sourceMappingURL=lt.min.js.map
|
package/js/lt.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["root","LT","buildHtml","esc","s","String","replace","sup","i","spec","cols","columns","colLabels","col_labels","align","rows","stub","spanners","groups","row_groups","fns","footnotes","notes","hdr","header","reg","order","idx","forEach","f","text","length","push","indexFootnotes","fIdx","type","p","loc","location","hit","group","every","c","indexOf","match","values","label","value","matcher","stubLabel","stub_label","nCol","out","alCls","a","mark","hasT","title","hasS","subtitle","k","sp","find","bodyMarks","fi","fcols","frows","r","ci","pushRow","m","seen","g","txt","n","join","mount","insertAdjacentHTML","q","e","shift","d","build","document","currentScript","window"],"sources":["lt.js"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["root","LT","buildHtml","esc","s","String","replace","sup","i","fmtNumber","v","decimals","bigMark","isNaN","toFixed","parts","split","join","mergeVals","vals","pattern","filter","remaining","result","m","match","subRefs","index","slice","block","refs","matchAll","map","x","length","every","spec","display","nRow","data","ops","colNames","Object","keys","c","op","cols","columns","type","f","big_mark","raw","small","Math","abs","small_text","zero","missing","mCols","target","applyOps","res","rowGroupCol","row_group","rowLabelCol","row_label","hidden","Set","add","hide","forEach","visible","has","toMove","includes","rest","after","pos","indexOf","align","col","find","colLabels","labels","lbl","entries","colWidths","widths","w","indent","Array","fill","rows","r","level","stubLabel","label","groups","gCol","push","order","ordered","g","styles","css","stub","spanners","footnotes","notes","header","resolveSpec","fns","hdr","reg","idx","text","indexFootnotes","fIdx","p","loc","location","hit","group","values","value","matcher","nCol","out","alCls","a","mark","styleMap","sCols","sRows","ci","key","some","hasT","title","hasS","subtitle","k","sp","bodyMarks","fi","fcols","frows","pushRow","ind","style","val","seen","txt","n","mount","insertAdjacentHTML","q","e","shift","d","build","document","currentScript","window"],"sources":["lt.js"],"mappings":"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","ignoreList":[]}
|