@xiee/utils 1.14.51 → 1.14.53

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/js/lt.js CHANGED
@@ -4,19 +4,23 @@
4
4
  */
5
5
  (root => {
6
6
  "use strict";
7
- if (root.LT && root.LT.buildHtml) return; // duplicate inclusion is a no-op
7
+ if (root.LT?.buildHtml) return; // duplicate inclusion is a no-op
8
8
 
9
9
  // `[<]` (not `<`) avoids `</…` so this file is safe to inline in <script>.
10
10
  const esc = s => String(s)
11
11
  .replace(/&/g, "&amp;").replace(/[<]/g, "&lt;")
12
12
  .replace(/>/g, "&gt;").replace(/"/g, "&quot;");
13
13
  const sup = i => `<sup class="lt-fnref">${i}</sup>`;
14
+ // Stringify, mapping null/undefined to "" (0 and false stringify normally).
15
+ const str = v => String(v ?? "");
14
16
 
15
17
  // --- Number formatting ---
16
18
  const isNum = v => typeof v === "number" && !isNaN(v);
19
+ // A column is "numeric" if its first non-null value is a number.
20
+ const numCol = col => col?.length && typeof col.find(v => v != null) === "number";
17
21
 
18
22
  function fmtNumber(v, decimals, bigMark) {
19
- if (v == null || !isNum(v)) return null;
23
+ if (!isNum(v)) return null;
20
24
  let s = decimals != null ? v.toFixed(decimals) : String(v);
21
25
  if (/^-0(\.0+)?$/.test(s)) s = s.slice(1);
22
26
  if (bigMark) {
@@ -63,7 +67,7 @@
63
67
 
64
68
  const getLabel = c => {
65
69
  for (const op of ops) {
66
- if (op.type === "label" && op.labels && op.labels[c] != null) return op.labels[c];
70
+ if (op.type === "label" && op.labels?.[c] != null) return op.labels[c];
67
71
  }
68
72
  return c;
69
73
  };
@@ -71,8 +75,7 @@
71
75
  for (const c of colNames) {
72
76
  if (fmtCols.has(c)) continue;
73
77
  const col = data[c];
74
- if (!col || !col.length) continue;
75
- if (typeof col.find(v => v != null) !== "number") continue;
78
+ if (!numCol(col)) continue;
76
79
 
77
80
  const lbl = getLabel(c),
78
81
  pct = /%|[ _](pct|percent)$/i.test(lbl);
@@ -96,8 +99,9 @@
96
99
  const d = m[1].replace(/0+$/, "").length - (pct ? 2 : 0);
97
100
  if (d > n) n = d;
98
101
  }
99
- // Cap: 4 decimals max, minus integer width (so large numbers get fewer)
100
- n = Math.max(Math.min(n, Math.max(4 - maxInt, 0)), 0);
102
+ // Cap: 4 decimals max, minus integer width (so large numbers get fewer).
103
+ // n is already >= 0, so only the upper cap is needed.
104
+ n = Math.min(n, Math.max(4 - maxInt, 0));
101
105
 
102
106
  for (let i = 0; i < nRow; i++) {
103
107
  const v = col[i];
@@ -118,50 +122,50 @@
118
122
  // Working copy: display[col][row] = string
119
123
  const display = {};
120
124
  for (const c of colNames) {
121
- display[c] = data[c].map(v => v == null ? "" : String(v));
125
+ display[c] = data[c].map(str);
122
126
  }
123
127
 
124
128
  autoFmt(spec, display, nRow);
125
129
 
130
+ // Run fn(col, row, rawValue) over each existing cell of the given columns.
131
+ const eachCell = (cols, fn) => {
132
+ for (const c of cols) {
133
+ if (!data[c]) continue;
134
+ for (let i = 0; i < nRow; i++) fn(c, i, data[c][i]);
135
+ }
136
+ };
137
+
126
138
  for (const op of ops) {
127
139
  const cols = op.columns || colNames;
128
140
  switch (op.type) {
129
141
  case "fmt_number":
130
- for (const c of cols) {
131
- if (!data[c]) continue;
132
- for (let i = 0; i < nRow; i++) {
133
- const raw = data[c][i];
134
- if (raw == null || !isNum(raw)) continue;
135
- const v = op.percent === true ? raw * 100 : raw,
136
- sfx = op.percent ? "%" : "",
137
- f = fmtNumber(v, op.decimals, op.big_mark ?? "");
138
- if (f != null) display[c][i] = f + sfx;
139
- else if (sfx) display[c][i] = String(v) + sfx;
140
- }
141
- }
142
+ eachCell(cols, (c, i, raw) => {
143
+ if (!isNum(raw)) return;
144
+ const v = op.percent === true ? raw * 100 : raw,
145
+ sfx = op.percent ? "%" : "",
146
+ f = fmtNumber(v, op.decimals, op.big_mark ?? "");
147
+ if (f != null) display[c][i] = f + sfx;
148
+ else if (sfx) display[c][i] = String(v) + sfx;
149
+ });
142
150
  break;
143
151
  case "sub":
144
- for (const c of cols) {
145
- if (!data[c]) continue;
146
- for (let i = 0; i < nRow; i++) {
147
- const raw = data[c][i];
148
- if (op.small != null && isNum(raw) && raw !== 0 &&
149
- Math.abs(raw) < op.small) {
150
- display[c][i] = op.small_text ?? ("<" + op.small);
151
- } else if (op.zero != null && raw === 0) {
152
- display[c][i] = op.zero;
153
- } else if (op.missing != null && raw == null) {
154
- display[c][i] = op.missing;
155
- }
152
+ eachCell(cols, (c, i, raw) => {
153
+ if (op.small != null && isNum(raw) && raw !== 0 &&
154
+ Math.abs(raw) < op.small) {
155
+ display[c][i] = op.small_text ?? ("<" + op.small);
156
+ } else if (op.zero != null && raw === 0) {
157
+ display[c][i] = op.zero;
158
+ } else if (op.missing != null && raw == null) {
159
+ display[c][i] = op.missing;
156
160
  }
157
- }
161
+ });
158
162
  break;
159
163
  case "merge": {
160
164
  const mCols = op.columns;
161
165
  if (!mCols || mCols.length < 2) break;
162
166
  const target = mCols[0];
163
167
  for (let i = 0; i < nRow; i++) {
164
- const vals = mCols.map(c => display[c] ? display[c][i] : "");
168
+ const vals = mCols.map(c => display[c]?.[i] ?? "");
165
169
  display[target][i] = mergeVals(vals, op.pattern);
166
170
  }
167
171
  break;
@@ -176,7 +180,9 @@
176
180
  const data = spec.data || {},
177
181
  ops = spec.ops || [],
178
182
  colNames = Object.keys(data),
179
- nRow = colNames.length ? data[colNames[0]].length : 0;
183
+ nRow = colNames.length ? data[colNames[0]].length : 0,
184
+ // Run fn on each op of the given type, in document order.
185
+ onOp = (t, fn) => { for (const op of ops) if (op.type === t) fn(op); };
180
186
 
181
187
  // row_group: array → rowspan mode; string → separator-row mode
182
188
  let rowGroupSep = typeof spec.row_group === "string";
@@ -190,19 +196,18 @@
190
196
  const hidden = new Set();
191
197
  for (const g of rowGroupCols) hidden.add(g);
192
198
  if (rowLabelCol) hidden.add(rowLabelCol);
193
- for (const op of ops) {
194
- if (op.type === "merge" && op.hide !== false && op.columns)
199
+ onOp("merge", op => {
200
+ if (op.hide !== false && op.columns)
195
201
  op.columns.slice(1).forEach(c => hidden.add(c));
196
- }
202
+ });
197
203
 
198
204
  // Visible columns after hiding
199
205
  let visible = colNames.filter(c => !hidden.has(c));
200
206
 
201
207
  // Apply move
202
- for (const op of ops) {
203
- if (op.type !== "move") continue;
208
+ onOp("move", op => {
204
209
  const toMove = (op.columns || []).filter(c => visible.includes(c));
205
- if (!toMove.length) continue;
210
+ if (!toMove.length) return;
206
211
  const rest = visible.filter(c => !toMove.includes(c));
207
212
  if (op.after == null) {
208
213
  visible = [...toMove, ...rest];
@@ -210,123 +215,92 @@
210
215
  const pos = rest.indexOf(op.after);
211
216
  if (pos >= 0) visible = [...rest.slice(0, pos + 1), ...toMove, ...rest.slice(pos + 1)];
212
217
  }
213
- }
218
+ });
219
+
220
+ // Set arr[i] = val where i is the position of column c in `visible`.
221
+ const setByCol = (arr, c, val) => { const i = visible.indexOf(c); if (i >= 0) arr[i] = val; };
214
222
 
215
223
  // Alignment: default from data type (number→right, else left), then overrides
216
- const align = visible.map(c => {
217
- const col = data[c];
218
- return col && col.length && typeof col.find(v => v != null) === "number" ? "right" : "left";
219
- });
220
- for (const op of ops) {
221
- if (op.type !== "align") continue;
222
- for (const c of (op.columns || [])) {
223
- const i = visible.indexOf(c);
224
- if (i >= 0) align[i] = op.align;
225
- }
226
- }
224
+ const align = visible.map(c => numCol(data[c]) ? "right" : "left");
225
+ onOp("align", op => { for (const c of (op.columns || [])) setByCol(align, c, op.align); });
227
226
 
228
227
  // Column labels
229
228
  const colLabels = [...visible];
230
- for (const op of ops) {
231
- if (op.type !== "label" || !op.labels) continue;
232
- for (const [c, lbl] of Object.entries(op.labels)) {
233
- const i = visible.indexOf(c);
234
- if (i >= 0) colLabels[i] = lbl;
235
- }
236
- }
229
+ onOp("label", op => {
230
+ for (const [c, lbl] of Object.entries(op.labels || {})) setByCol(colLabels, c, lbl);
231
+ });
237
232
 
238
233
  // Column widths
239
234
  let colWidths = null;
240
- for (const op of ops) {
241
- if (op.type !== "width" || !op.widths) continue;
235
+ onOp("width", op => {
236
+ if (!op.widths) return;
242
237
  if (!colWidths) colWidths = visible.map(() => "");
243
- for (const [c, w] of Object.entries(op.widths)) {
244
- const i = visible.indexOf(c);
245
- if (i >= 0) colWidths[i] = w;
246
- }
247
- }
238
+ for (const [c, w] of Object.entries(op.widths)) setByCol(colWidths, c, w);
239
+ });
248
240
 
249
241
  // Indent
250
242
  const indent = new Array(nRow).fill(0);
251
- for (const op of ops) {
252
- if (op.type !== "indent" || !op.rows) continue;
253
- for (const r of op.rows) indent[r - 1] = op.level ?? 1;
254
- }
243
+ onOp("indent", op => {
244
+ if (op.rows) for (const r of op.rows) indent[r - 1] = op.level ?? 1;
245
+ });
255
246
 
256
247
  // Stubhead
257
248
  let stubLabel = "";
258
- for (const op of ops) {
259
- if (op.type === "stubhead") stubLabel = op.label;
260
- }
249
+ onOp("stubhead", op => { stubLabel = op.label; });
250
+
251
+ // Runs of equal consecutive values in col → [{ label, rows (1-based) }].
252
+ // Used for both separator-row groups and rowspan span sizes.
253
+ const runs = col => {
254
+ const out = [];
255
+ for (let i = 0; i < nRow;) {
256
+ const label = str(col[i]), rows = [i + 1];
257
+ while (++i < nRow && str(col[i]) === label) rows.push(i + 1);
258
+ out.push({ label, rows });
259
+ }
260
+ return out;
261
+ };
261
262
 
262
263
  // Row groups from data column (separator-row mode only)
263
264
  let groups = [];
264
- if (rowGroupSep && rowGroupCols.length && data[rowGroupCols[0]]) {
265
- const gCol = data[rowGroupCols[0]];
266
- let i = 0;
267
- while (i < nRow) {
268
- const label = gCol[i] == null ? "" : String(gCol[i]);
269
- const rows = [i + 1];
270
- while (++i < nRow && String(gCol[i] ?? "") === label) rows.push(i + 1);
271
- groups.push({ label, rows });
272
- }
273
- }
265
+ if (rowGroupSep && rowGroupCols.length && data[rowGroupCols[0]])
266
+ groups.push(...runs(data[rowGroupCols[0]]));
274
267
  // Manual groups
275
- for (const op of ops) {
276
- if (op.type === "row_group") groups.push({ label: op.label, rows: op.rows });
277
- }
268
+ onOp("row_group", op => groups.push({ label: op.label, rows: op.rows }));
278
269
  // Group ordering
279
- for (const op of ops) {
280
- if (op.type !== "group_order" || !groups.length) continue;
281
- const order = op.order || [];
270
+ onOp("group_order", op => {
271
+ if (!groups.length) return;
282
272
  const ordered = [], rest = [];
283
- for (const lbl of order) {
273
+ for (const lbl of (op.order || [])) {
284
274
  const g = groups.find(x => x.label === lbl);
285
275
  if (g) ordered.push(g);
286
276
  }
287
277
  for (const g of groups) if (!ordered.includes(g)) rest.push(g);
288
278
  groups = [...ordered, ...rest];
289
- }
279
+ });
290
280
 
291
281
  // Rowspan groups: compute span sizes for each group column
292
282
  const rowSpans = [];
293
283
  if (!rowGroupSep && rowGroupCols.length) {
294
284
  for (const gc of rowGroupCols) {
295
- const col = data[gc] || [], spans = new Array(nRow).fill(0);
296
- let i = 0;
297
- while (i < nRow) {
298
- const label = String(col[i] ?? "");
299
- let j = i + 1;
300
- while (j < nRow && String(col[j] ?? "") === label) j++;
301
- spans[i] = j - i;
302
- i = j;
303
- }
304
- // Resolve display label from label ops
285
+ const spans = new Array(nRow).fill(0);
286
+ for (const r of runs(data[gc] || [])) spans[r.rows[0] - 1] = r.rows.length;
287
+ // Resolve display label from label ops (last wins)
305
288
  let hdr = gc;
306
- for (const op of ops) {
307
- if (op.type === "label" && op.labels && op.labels[gc] != null) hdr = op.labels[gc];
308
- }
289
+ onOp("label", op => { if (op.labels?.[gc] != null) hdr = op.labels[gc]; });
309
290
  rowSpans.push({ col: gc, label: hdr, spans });
310
291
  }
311
292
  }
312
293
 
313
- // Styles
314
- const styles = [];
315
- for (const op of ops) {
316
- if (op.type !== "style") continue;
317
- const s = { css: op.css };
318
- if (op.columns) s.columns = op.columns;
319
- if (op.rows) s.rows = op.rows;
320
- styles.push(s);
321
- }
294
+ // Styles: the style ops are consumed directly (css/class/columns/rows/test).
295
+ const styles = ops.filter(op => op.type === "style");
322
296
 
323
297
  // Stub: explicit row_label, or auto-promote first visible non-numeric column when groups exist
324
298
  const autoStub = groups.length && !rowLabelCol && visible.length
325
- ? visible.find(c => !data[c] || !data[c].length || typeof data[c].find(v => v != null) !== "number")
299
+ ? visible.find(c => !numCol(data[c]))
326
300
  : null;
327
301
  const stubCol = rowLabelCol || autoStub || null;
328
302
  const stub = stubCol && data[stubCol]
329
- ? data[stubCol].map(v => v == null ? "" : String(v))
303
+ ? data[stubCol].map(str)
330
304
  : null;
331
305
  if (stubCol && !rowLabelCol) {
332
306
  align.shift(); colLabels.shift(); visible = visible.slice(1);
@@ -379,27 +353,58 @@
379
353
  return { order, idx };
380
354
  }
381
355
 
382
- const matcher = (fns, idx) => (type, p) => {
356
+ // Find the footnote index for a (type, value) location; 0 if none.
357
+ // `val` is a scalar: the title group, a single column, a spanner label,
358
+ // or a row-group label, depending on `type`.
359
+ const matcher = (fns, idx) => (type, val) => {
383
360
  for (const f of fns) {
384
361
  const loc = f.location;
385
362
  if (loc.type !== type) continue;
386
363
  const hit = idx[f.text];
387
- if (type === "title" && loc.group === p.group) return hit;
388
- if (type === "column_labels" &&
389
- p.columns.every(c => loc.columns.indexOf(c) >= 0)) return hit;
390
- if (type === "column_spanners" &&
391
- p.spanners.every(s => loc.spanners.indexOf(s) >= 0)) return hit;
364
+ if (type === "title" && loc.group === val) return hit;
365
+ if (type === "column_labels" && loc.columns.includes(val)) return hit;
366
+ if (type === "column_spanners" && loc.spanners.includes(val)) return hit;
392
367
  if (type === "row_groups") {
393
368
  if (loc.match === "all") return hit;
394
- if (loc.match === "exact" && loc.values.indexOf(p.label) >= 0) return hit;
395
- if (loc.match === "starts_with" && p.label.indexOf(loc.value) === 0) return hit;
369
+ if (loc.match === "exact" && loc.values.includes(val)) return hit;
370
+ if (loc.match === "starts_with" && val.startsWith(loc.value)) return hit;
396
371
  }
397
372
  }
398
373
  return 0;
399
374
  };
400
375
 
376
+ function sortByGroups(spec) {
377
+ if (spec.sort === false || !spec.row_group) return;
378
+ const data = spec.data || {},
379
+ cols = [].concat(spec.row_group),
380
+ colNames = Object.keys(data),
381
+ nRow = colNames.length ? data[colNames[0]].length : 0;
382
+ if (!nRow) return;
383
+ const idx = Array.from({length: nRow}, (_, i) => i);
384
+ idx.sort((a, b) => {
385
+ for (const c of cols) {
386
+ const va = data[c]?.[a], vb = data[c]?.[b];
387
+ if (va == vb) continue;
388
+ if (va == null) return 1;
389
+ if (vb == null) return -1;
390
+ if (va < vb) return -1;
391
+ if (va > vb) return 1;
392
+ }
393
+ return 0;
394
+ });
395
+ for (const c of colNames) data[c] = idx.map(i => data[c][i]);
396
+ // Remap 1-based row indices in ops to reflect the new order
397
+ const newPos = new Array(nRow);
398
+ for (let i = 0; i < nRow; i++) newPos[idx[i]] = i + 1;
399
+ for (const op of (spec.ops || [])) {
400
+ if (op.rows) op.rows = op.rows.map(r => newPos[r - 1]);
401
+ }
402
+ }
403
+
401
404
  function buildHtml(spec) {
402
- const { display, nRow } = applyOps(spec),
405
+ sortByGroups(spec);
406
+ const data = spec.data || {},
407
+ { display, nRow } = applyOps(spec),
403
408
  { visible: cols, align, colLabels, colWidths, indent, stubLabel,
404
409
  stub, groups, rowSpans, styles, spanners, footnotes: fns, notes, header: hdr } = resolveSpec(spec),
405
410
  reg = indexFootnotes(fns),
@@ -407,60 +412,67 @@
407
412
  nGrp = rowSpans.length,
408
413
  nCol = cols.length + (stub ? 1 : 0) + nGrp,
409
414
  out = [`<table class="lt-table">`];
410
- const mark = (type, p) => { const i = fIdx(type, p); return i ? sup(i) : ""; };
411
- const colCls = cols.map((_, i) => {
412
- const c = (!stub && i === 0 && groups.length ? "lt-indent " : "") +
413
- ({right: "al-r", center: "al-c"}[align[i]] || "");
414
- return c ? ` class="${c.trimEnd()}"` : "";
415
- });
416
-
417
- // Style map
418
- const styleMap = {};
419
- for (const s of styles) {
420
- const sCols = s.columns || cols, sRows = s.rows;
415
+ const mark = (type, val) => { const i = fIdx(type, val); return i ? sup(i) : ""; };
416
+ const cell = (c, r) => display[c]?.[r - 1] ?? "";
417
+ // ` name="val"` for a truthy val, else "" — for optional HTML attributes.
418
+ const attr = (n, v) => v ? ` ${n}="${v}"` : "";
419
+ // Plain class names per column (alignment + leading-indent), "" if none.
420
+ const colCls = cols.map((_, i) => (
421
+ (!stub && i === 0 && groups.length ? "lt-indent " : "") +
422
+ ({right: "al-r", center: "al-c"}[align[i]] || "")
423
+ ).trimEnd());
424
+
425
+ // Visit each cell at (rows × cols) that exists in the table, calling
426
+ // fn(key, c, r). rows null = all rows; cols falls back to all columns.
427
+ const eachLoc = (rows, locCols, fn) => {
421
428
  for (let r = 1; r <= nRow; r++) {
422
- if (sRows && sRows.indexOf(r) < 0) continue;
423
- for (const c of sCols) {
429
+ if (rows && !rows.includes(r)) continue;
430
+ for (const c of (locCols || cols)) {
424
431
  const ci = cols.indexOf(c);
425
- if (ci < 0) continue;
426
- const key = `${r},${ci}`;
427
- styleMap[key] = styleMap[key] ? styleMap[key] + ";" + s.css : s.css;
432
+ if (ci >= 0) fn(`${r},${ci}`, c, r);
428
433
  }
429
434
  }
430
- }
435
+ };
436
+
437
+ // Style map: accumulate css (";") and class (" ") per cell.
438
+ const styleMap = {}, classMap = {};
439
+ const addTo = (map, key, val, sep) => { map[key] = map[key] ? map[key] + sep + val : val; };
440
+ for (const s of styles)
441
+ eachLoc(s.rows, s.columns ? [].concat(s.columns) : null, (key, c, r) => {
442
+ if (s.test && !s.test(data[c][r - 1])) return;
443
+ if (s.css) addTo(styleMap, key, s.css, ";");
444
+ if (s.class) addTo(classMap, key, s.class, " ");
445
+ });
431
446
 
432
447
  // <colgroup>
433
448
  if (colWidths && colWidths.some(w => w)) {
434
449
  out.push(`<colgroup>`);
435
450
  if (stub) out.push(`<col>`);
436
451
  for (let i = 0; i < cols.length; i++)
437
- out.push(colWidths[i] ? `<col style="width:${colWidths[i]}">` : `<col>`);
452
+ out.push(`<col${attr("style", colWidths[i] ? "width:" + colWidths[i] : "")}>`);
438
453
  out.push(`</colgroup>`);
439
454
  }
440
455
 
441
- // <caption>
442
- const hasT = hdr.title != null && hdr.title !== "",
443
- hasS = hdr.subtitle != null && hdr.subtitle !== "";
444
- if (hasT || hasS) {
445
- out.push(`<caption class="lt-caption">`);
446
- if (hasT) out.push(`<div class="lt-title">${esc(hdr.title)}${mark("title", { group: "title" })}</div>`);
447
- if (hasS) out.push(`<div class="lt-subtitle">${esc(hdr.subtitle)}${mark("title", { group: "subtitle" })}</div>`);
448
- out.push(`</caption>`);
449
- }
456
+ // <caption>: title + subtitle, each a <div> rendered only when non-empty.
457
+ const caption = [["title", "lt-title"], ["subtitle", "lt-subtitle"]]
458
+ .filter(([g]) => hdr[g] != null && hdr[g] !== "")
459
+ .map(([g, cls]) => `<div class="${cls}">${esc(hdr[g])}${mark("title", g)}</div>`);
460
+ if (caption.length)
461
+ out.push(`<caption class="lt-caption">`, ...caption, `</caption>`);
450
462
 
451
463
  // <thead>
452
464
  out.push(`<thead>`);
453
465
  if (spanners.length) {
466
+ const emptyTh = `<th class="lt-spanner-empty"></th>`;
454
467
  out.push(`<tr class="lt-spanner-row">`);
455
- for (let k = 0; k < nGrp; k++) out.push(`<th class="lt-spanner-empty"></th>`);
456
- if (stub) out.push(`<th class="lt-spanner-empty"></th>`);
468
+ out.push(emptyTh.repeat(nGrp + (stub ? 1 : 0)));
457
469
  for (let k = 0; k < cols.length;) {
458
470
  const sp = spanners.find(s => s.columns[0] === cols[k]);
459
471
  if (sp) {
460
- out.push(`<th colspan="${sp.columns.length}" scope="colgroup" class="lt-spanner">${esc(sp.label)}${mark("column_spanners", { spanners: [sp.label] })}</th>`);
472
+ out.push(`<th colspan="${sp.columns.length}" scope="colgroup" class="lt-spanner">${esc(sp.label)}${mark("column_spanners", sp.label)}</th>`);
461
473
  k += sp.columns.length;
462
474
  } else {
463
- out.push(`<th class="lt-spanner-empty"></th>`);
475
+ out.push(emptyTh);
464
476
  k++;
465
477
  }
466
478
  }
@@ -468,25 +480,17 @@
468
480
  }
469
481
  out.push(`<tr>`);
470
482
  for (const rs of rowSpans) out.push(`<th scope="col">${esc(rs.label)}</th>`);
471
- if (stub) out.push(`<th scope="col"${groups.length ? ` class="lt-indent"` : ""}>${esc(stubLabel)}</th>`);
483
+ if (stub) out.push(`<th scope="col"${attr("class", groups.length ? "lt-indent" : "")}>${esc(stubLabel)}</th>`);
472
484
  for (let i = 0; i < cols.length; i++)
473
- out.push(`<th scope="col"${colCls[i]}>${esc(colLabels[i])}${mark("column_labels", { columns: [cols[i]] })}</th>`);
485
+ out.push(`<th scope="col"${attr("class", colCls[i])}>${esc(colLabels[i])}${mark("column_labels", cols[i])}</th>`);
474
486
  out.push(`</tr></thead>`);
475
487
 
476
488
  // Body footnote markers
477
489
  const bodyMarks = {};
478
490
  for (const f of fns) {
479
491
  if (f.location.type !== "body") continue;
480
- const fi = reg.idx[f.text],
481
- fcols = f.location.columns || [],
482
- frows = f.location.rows;
483
- for (let r = 1; r <= nRow; r++) {
484
- if (frows && frows.indexOf(r) < 0) continue;
485
- for (const c of fcols) {
486
- const ci = cols.indexOf(c);
487
- if (ci >= 0) bodyMarks[`${r},${ci}`] = fi;
488
- }
489
- }
492
+ const fi = reg.idx[f.text];
493
+ eachLoc(f.location.rows, f.location.columns || [], key => { bodyMarks[key] = fi; });
490
494
  }
491
495
 
492
496
  // Row rendering
@@ -495,19 +499,18 @@
495
499
  // Rowspan group cells
496
500
  for (const rs of rowSpans) {
497
501
  const span = rs.spans[r - 1];
498
- if (span > 0) out.push(`<th scope="row" class="lt-row-group"${span > 1 ? ` rowspan="${span}"` : ""}>${esc(display[rs.col] ? display[rs.col][r - 1] : "")}</th>`);
502
+ if (span > 0) out.push(`<th scope="row" class="lt-row-group"${attr("rowspan", span > 1 ? span : 0)}>${esc(cell(rs.col, r))}</th>`);
499
503
  }
500
504
  if (stub) {
501
505
  const ind = indent[r - 1] || 0,
502
- cls = `lt-stub${groups.length ? " lt-indent" : ""}`,
503
- style = ind ? ` style="padding-left:${ind + 1}em"` : "";
504
- out.push(`<th scope="row" class="${cls}"${style}>${esc(stub[r - 1])}</th>`);
506
+ cls = `lt-stub${groups.length ? " lt-indent" : ""}`;
507
+ out.push(`<th scope="row" class="${cls}"${attr("style", ind ? `padding-left:${ind + 1}em` : "")}>${esc(stub[r - 1])}</th>`);
505
508
  }
506
509
  for (let ci = 0; ci < cols.length; ci++) {
507
- const m = bodyMarks[`${r},${ci}`],
508
- s = styleMap[`${r},${ci}`],
509
- val = display[cols[ci]] ? display[cols[ci]][r - 1] : "";
510
- out.push(`<td${colCls[ci]}${s ? ` style="${s}"` : ""}>${esc(val)}${m ? sup(m) : ""}</td>`);
510
+ const k = `${r},${ci}`,
511
+ m = bodyMarks[k], s = styleMap[k], cc = classMap[k],
512
+ cls = [colCls[ci], cc].filter(Boolean).join(" ");
513
+ out.push(`<td${attr("class", cls)}${attr("style", s)}>${esc(cell(cols[ci], r))}${m ? sup(m) : ""}</td>`);
511
514
  }
512
515
  out.push(`</tr>`);
513
516
  };
@@ -517,7 +520,7 @@
517
520
  if (groups.length) {
518
521
  const seen = {};
519
522
  for (const g of groups) {
520
- out.push(`<tr class="lt-row-group"><th colspan="${nCol}" scope="colgroup">${esc(g.label)}${mark("row_groups", { label: g.label })}</th></tr>`);
523
+ out.push(`<tr class="lt-row-group"><th colspan="${nCol}" scope="colgroup">${esc(g.label)}${mark("row_groups", g.label)}</th></tr>`);
521
524
  for (const r of g.rows) { seen[r] = 1; pushRow(r); }
522
525
  }
523
526
  for (let r = 1; r <= nRow; r++) if (!seen[r]) pushRow(r);
@@ -526,13 +529,12 @@
526
529
  }
527
530
  out.push(`</tbody>`);
528
531
 
529
- // <tfoot>
532
+ // <tfoot>: footnotes then source notes, each a full-width row.
530
533
  if (reg.order.length || notes.length) {
534
+ const footRow = (cls, html) => `<tr class="${cls}"><td colspan="${nCol}">${html}</td></tr>`;
531
535
  out.push(`<tfoot class="lt-footer">`);
532
- reg.order.forEach((txt, i) => out.push(
533
- `<tr class="lt-footnote"><td colspan="${nCol}">${sup(i + 1)} ${esc(txt)}</td></tr>`));
534
- for (const n of notes)
535
- out.push(`<tr class="lt-source-note"><td colspan="${nCol}">${esc(n)}</td></tr>`);
536
+ reg.order.forEach((txt, i) => out.push(footRow("lt-footnote", `${sup(i + 1)} ${esc(txt)}`)));
537
+ for (const n of notes) out.push(footRow("lt-source-note", esc(n)));
536
538
  out.push(`</tfoot>`);
537
539
  }
538
540
 
@@ -541,9 +543,8 @@
541
543
  }
542
544
 
543
545
  const mount = (s, spec) => s.insertAdjacentHTML("afterend", buildHtml(spec));
544
-
545
- const q = root.LT && root.LT.q || [];
546
- while (q.length) { const e = q.shift(); mount(e.s, e.d); }
547
- root.LT = { build(spec) { mount(document.currentScript, spec); }, buildHtml,
548
- q: { push(e) { mount(e.s, e.d); } } };
546
+ // q.push renders immediately; replay any entries queued before we loaded.
547
+ const q = { push: e => mount(e.s, e.d) };
548
+ (root.LT?.q || []).forEach(q.push);
549
+ root.LT = { build: spec => mount(document.currentScript, spec), buildHtml, q };
549
550
  })(window);
package/js/lt.min.js CHANGED
@@ -1,2 +1,2 @@
1
- (t=>{"use strict";if(t.LT&&t.LT.buildHtml)return;const n=t=>String(t).replace(/&/g,"&amp;").replace(/[<]/g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"),o=t=>`<sup class="lt-fnref">${t}</sup>`,e=t=>"number"==typeof t&&!isNaN(t);function s(t,n,o){if(null==t||!e(t))return null;let s=null!=n?t.toFixed(n):String(t);if(/^-0(\.0+)?$/.test(s)&&(s=s.slice(1)),o){const t=s.split(".");t[0]=t[0].replace(/\B(?=(\d{3})+(?!\d))/g,o),s=t.join(".")}return"-"===s[0]&&(s="−"+s.slice(1)),null!=n||o?s:null}function l(t,n){if(!n)return t.filter(t=>""!==t).join(" ");let o=n,e="";for(;o;){const n=o.match(/<<(.*?)>>/);if(!n){e+=r(o,t);break}n.index>0&&(e+=r(o.slice(0,n.index),t));const s=n[1],l=[...s.matchAll(/\{(\d+)\}/g)].map(t=>+t[1]);l.length&&!l.every(n=>""!==t[n-1])||(e+=r(s,t)),o=o.slice(n.index+n[0].length)}return e}function r(t,n){for(let o=0;o<n.length;o++)t=t.split("{"+(o+1)+"}").join(n[o]);return t}function c(t){const n=t.data||{},o=t.ops||[],r=Object.keys(n),c=r.length?n[r[0]].length:0,i={};for(const t of r)i[t]=n[t].map(t=>null==t?"":String(t));!function(t,n,o){if(!1===t.auto_fmt)return;const l=t.data||{},r=t.ops||[],c=Object.keys(l),i=new Set;for(const t of r)if("fmt_number"===t.type)for(const n of t.columns||c)i.add(n);const f=t=>{for(const n of r)if("label"===n.type&&n.labels&&null!=n.labels[t])return n.labels[t];return t};for(const t of c){if(i.has(t))continue;const r=l[t];if(!r||!r.length)continue;if("number"!=typeof r.find(t=>null!=t))continue;const c=f(t),u=/%|[ _](pct|percent)$/i.test(c);if(/year/i.test(c)&&r.every(t=>null==t||/^\d{4}$/.test(String(t))))continue;let a=0,p=0;for(const t of r){if(!e(t))continue;const n=Math.abs(u?100*t:t),o=n<1?0:Math.floor(Math.log10(n))+1;o>a&&(a=o);const s=String(t).match(/\.(\d+)/);if(!s)continue;const l=s[1].replace(/0+$/,"").length-(u?2:0);l>p&&(p=l)}p=Math.max(Math.min(p,Math.max(4-a,0)),0);for(let l=0;l<o;l++){const o=r[l];if(!e(o))continue;const c=s(u?100*o:o,p," ");null!=c&&(n[t][l]=c+(u?"%":""))}}}(t,i,c);for(const t of o){const o=t.columns||r;switch(t.type){case"fmt_number":for(const l of o)if(n[l])for(let o=0;o<c;o++){const r=n[l][o];if(null==r||!e(r))continue;const c=!0===t.percent?100*r:r,f=t.percent?"%":"",u=s(c,t.decimals,t.big_mark??"");null!=u?i[l][o]=u+f:f&&(i[l][o]=String(c)+f)}break;case"sub":for(const s of o)if(n[s])for(let o=0;o<c;o++){const l=n[s][o];null!=t.small&&e(l)&&0!==l&&Math.abs(l)<t.small?i[s][o]=t.small_text??"<"+t.small:null!=t.zero&&0===l?i[s][o]=t.zero:null!=t.missing&&null==l&&(i[s][o]=t.missing)}break;case"merge":{const n=t.columns;if(!n||n.length<2)break;const o=n[0];for(let e=0;e<c;e++){const s=n.map(t=>i[t]?i[t][e]:"");i[o][e]=l(s,t.pattern)}break}}}return{display:i,nRow:c}}function i(t){const{display:e,nRow:s}=c(t),{visible:l,align:r,colLabels:i,colWidths:f,indent:u,stubLabel:a,stub:p,groups:h,rowSpans:d,styles:g,spanners:b,footnotes:m,notes:y,header:$}=function(t){const n=t.data||{},o=t.ops||[],e=Object.keys(n),s=e.length?n[e[0]].length:0;let l="string"==typeof t.row_group;const r=Array.isArray(t.row_group)?t.row_group:t.row_group?[t.row_group]:[],c=t.row_label||null;!l&&1===r.length&&n[r[0]]?.some(t=>(t+"").length>20)&&(l=!0);const i=new Set;for(const t of r)i.add(t);c&&i.add(c);for(const t of o)"merge"===t.type&&!1!==t.hide&&t.columns&&t.columns.slice(1).forEach(t=>i.add(t));let f=e.filter(t=>!i.has(t));for(const t of o){if("move"!==t.type)continue;const n=(t.columns||[]).filter(t=>f.includes(t));if(!n.length)continue;const o=f.filter(t=>!n.includes(t));if(null==t.after)f=[...n,...o];else{const e=o.indexOf(t.after);e>=0&&(f=[...o.slice(0,e+1),...n,...o.slice(e+1)])}}const u=f.map(t=>{const o=n[t];return o&&o.length&&"number"==typeof o.find(t=>null!=t)?"right":"left"});for(const t of o)if("align"===t.type)for(const n of t.columns||[]){const o=f.indexOf(n);o>=0&&(u[o]=t.align)}const a=[...f];for(const t of o)if("label"===t.type&&t.labels)for(const[n,o]of Object.entries(t.labels)){const t=f.indexOf(n);t>=0&&(a[t]=o)}let p=null;for(const t of o)if("width"===t.type&&t.widths){p||(p=f.map(()=>""));for(const[n,o]of Object.entries(t.widths)){const t=f.indexOf(n);t>=0&&(p[t]=o)}}const h=new Array(s).fill(0);for(const t of o)if("indent"===t.type&&t.rows)for(const n of t.rows)h[n-1]=t.level??1;let d="";for(const t of o)"stubhead"===t.type&&(d=t.label);let g=[];if(l&&r.length&&n[r[0]]){const t=n[r[0]];let o=0;for(;o<s;){const n=null==t[o]?"":String(t[o]),e=[o+1];for(;++o<s&&String(t[o]??"")===n;)e.push(o+1);g.push({label:n,rows:e})}}for(const t of o)"row_group"===t.type&&g.push({label:t.label,rows:t.rows});for(const t of o){if("group_order"!==t.type||!g.length)continue;const n=t.order||[],o=[],e=[];for(const t of n){const n=g.find(n=>n.label===t);n&&o.push(n)}for(const t of g)o.includes(t)||e.push(t);g=[...o,...e]}const b=[];if(!l&&r.length)for(const t of r){const e=n[t]||[],l=new Array(s).fill(0);let r=0;for(;r<s;){const t=String(e[r]??"");let n=r+1;for(;n<s&&String(e[n]??"")===t;)n++;l[r]=n-r,r=n}let c=t;for(const n of o)"label"===n.type&&n.labels&&null!=n.labels[t]&&(c=n.labels[t]);b.push({col:t,label:c,spans:l})}const m=[];for(const t of o){if("style"!==t.type)continue;const n={css:t.css};t.columns&&(n.columns=t.columns),t.rows&&(n.rows=t.rows),m.push(n)}const y=g.length&&!c&&f.length?f.find(t=>!n[t]||!n[t].length||"number"!=typeof n[t].find(t=>null!=t)):null,$=c||y||null,w=$&&n[$]?n[$].map(t=>null==t?"":String(t)):null;$&&!c&&(u.shift(),a.shift(),f=f.slice(1),p&&p.shift()),$&&!d&&(d=$);let x=t.spanners||[];if(t.auto_span){const n="string"==typeof t.auto_span?new RegExp(t.auto_span):/[._]/;x=[...x];for(let t=0;t<f.length;){const o=f[t].match(n);if(!o){t++;continue}const e=f[t].slice(0,o.index);let s=t+1;for(;s<f.length;){const t=f[s].match(n);if(!t||f[s].slice(0,t.index)!==e)break;s++}if(s-t>=2){x.push({label:e,columns:f.slice(t,s)});for(let o=t;o<s;o++){const t=a[o].match(n);t&&(a[o]=a[o].slice(t.index+t[0].length))}}t=s}}return{visible:f,align:u,colLabels:a,colWidths:p,indent:h,stubLabel:d,stub:w,groups:g,rowSpans:b,styles:m,spanners:x,footnotes:t.footnotes||[],notes:t.notes||[],header:t.header||{},nRow:s}}(t),w=function(t){const n=[],o={};return t.forEach(t=>{null==o[t.text]&&(o[t.text]=n.length+1,n.push(t.text))}),{order:n,idx:o}}(m),x=((t,n)=>(o,e)=>{for(const s of t){const t=s.location;if(t.type!==o)continue;const l=n[s.text];if("title"===o&&t.group===e.group)return l;if("column_labels"===o&&e.columns.every(n=>t.columns.indexOf(n)>=0))return l;if("column_spanners"===o&&e.spanners.every(n=>t.spanners.indexOf(n)>=0))return l;if("row_groups"===o){if("all"===t.match)return l;if("exact"===t.match&&t.values.indexOf(e.label)>=0)return l;if("starts_with"===t.match&&0===e.label.indexOf(t.value))return l}}return 0})(m,w.idx),_=d.length,O=l.length+(p?1:0)+_,S=['<table class="lt-table">'],v=(t,n)=>{const e=x(t,n);return e?o(e):""},j=l.map((t,n)=>{const o=(!p&&0===n&&h.length?"lt-indent ":"")+({right:"al-r",center:"al-c"}[r[n]]||"");return o?` class="${o.trimEnd()}"`:""}),k={};for(const t of g){const n=t.columns||l,o=t.rows;for(let e=1;e<=s;e++)if(!(o&&o.indexOf(e)<0))for(const o of n){const n=l.indexOf(o);if(n<0)continue;const s=`${e},${n}`;k[s]=k[s]?k[s]+";"+t.css:t.css}}if(f&&f.some(t=>t)){S.push("<colgroup>"),p&&S.push("<col>");for(let t=0;t<l.length;t++)S.push(f[t]?`<col style="width:${f[t]}">`:"<col>");S.push("</colgroup>")}const L=null!=$.title&&""!==$.title,M=null!=$.subtitle&&""!==$.subtitle;if((L||M)&&(S.push('<caption class="lt-caption">'),L&&S.push(`<div class="lt-title">${n($.title)}${v("title",{group:"title"})}</div>`),M&&S.push(`<div class="lt-subtitle">${n($.subtitle)}${v("title",{group:"subtitle"})}</div>`),S.push("</caption>")),S.push("<thead>"),b.length){S.push('<tr class="lt-spanner-row">');for(let t=0;t<_;t++)S.push('<th class="lt-spanner-empty"></th>');p&&S.push('<th class="lt-spanner-empty"></th>');for(let t=0;t<l.length;){const o=b.find(n=>n.columns[0]===l[t]);o?(S.push(`<th colspan="${o.columns.length}" scope="colgroup" class="lt-spanner">${n(o.label)}${v("column_spanners",{spanners:[o.label]})}</th>`),t+=o.columns.length):(S.push('<th class="lt-spanner-empty"></th>'),t++)}S.push("</tr>")}S.push("<tr>");for(const t of d)S.push(`<th scope="col">${n(t.label)}</th>`);p&&S.push(`<th scope="col"${h.length?' class="lt-indent"':""}>${n(a)}</th>`);for(let t=0;t<l.length;t++)S.push(`<th scope="col"${j[t]}>${n(i[t])}${v("column_labels",{columns:[l[t]]})}</th>`);S.push("</tr></thead>");const A={};for(const t of m){if("body"!==t.location.type)continue;const n=w.idx[t.text],o=t.location.columns||[],e=t.location.rows;for(let t=1;t<=s;t++)if(!(e&&e.indexOf(t)<0))for(const e of o){const o=l.indexOf(e);o>=0&&(A[`${t},${o}`]=n)}}const T=t=>{S.push("<tr>");for(const o of d){const s=o.spans[t-1];s>0&&S.push(`<th scope="row" class="lt-row-group"${s>1?` rowspan="${s}"`:""}>${n(e[o.col]?e[o.col][t-1]:"")}</th>`)}if(p){const o=u[t-1]||0,e="lt-stub"+(h.length?" lt-indent":""),s=o?` style="padding-left:${o+1}em"`:"";S.push(`<th scope="row" class="${e}"${s}>${n(p[t-1])}</th>`)}for(let s=0;s<l.length;s++){const r=A[`${t},${s}`],c=k[`${t},${s}`],i=e[l[s]]?e[l[s]][t-1]:"";S.push(`<td${j[s]}${c?` style="${c}"`:""}>${n(i)}${r?o(r):""}</td>`)}S.push("</tr>")};if(S.push("<tbody>"),h.length){const t={};for(const o of h){S.push(`<tr class="lt-row-group"><th colspan="${O}" scope="colgroup">${n(o.label)}${v("row_groups",{label:o.label})}</th></tr>`);for(const n of o.rows)t[n]=1,T(n)}for(let n=1;n<=s;n++)t[n]||T(n)}else for(let t=1;t<=s;t++)T(t);if(S.push("</tbody>"),w.order.length||y.length){S.push('<tfoot class="lt-footer">'),w.order.forEach((t,e)=>S.push(`<tr class="lt-footnote"><td colspan="${O}">${o(e+1)} ${n(t)}</td></tr>`));for(const t of y)S.push(`<tr class="lt-source-note"><td colspan="${O}">${n(t)}</td></tr>`);S.push("</tfoot>")}return S.push("</table>"),S.join("")}const f=(t,n)=>t.insertAdjacentHTML("afterend",i(n)),u=t.LT&&t.LT.q||[];for(;u.length;){const t=u.shift();f(t.s,t.d)}t.LT={build(t){f(document.currentScript,t)},buildHtml:i,q:{push(t){f(t.s,t.d)}}}})(window);
1
+ (t=>{"use strict";if(t.LT?.buildHtml)return;const n=t=>String(t).replace(/&/g,"&amp;").replace(/[<]/g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"),o=t=>`<sup class="lt-fnref">${t}</sup>`,s=t=>String(t??""),e=t=>"number"==typeof t&&!isNaN(t),l=t=>t?.length&&"number"==typeof t.find(t=>null!=t);function r(t,n,o){if(!e(t))return null;let s=null!=n?t.toFixed(n):String(t);if(/^-0(\.0+)?$/.test(s)&&(s=s.slice(1)),o){const t=s.split(".");t[0]=t[0].replace(/\B(?=(\d{3})+(?!\d))/g,o),s=t.join(".")}return"-"===s[0]&&(s="−"+s.slice(1)),null!=n||o?s:null}function c(t,n){if(!n)return t.filter(t=>""!==t).join(" ");let o=n,s="";for(;o;){const n=o.match(/<<(.*?)>>/);if(!n){s+=i(o,t);break}n.index>0&&(s+=i(o.slice(0,n.index),t));const e=n[1],l=[...e.matchAll(/\{(\d+)\}/g)].map(t=>+t[1]);l.length&&!l.every(n=>""!==t[n-1])||(s+=i(e,t)),o=o.slice(n.index+n[0].length)}return s}function i(t,n){for(let o=0;o<n.length;o++)t=t.split("{"+(o+1)+"}").join(n[o]);return t}function u(t){const n=t.data||{},o=t.ops||[],i=Object.keys(n),u=i.length?n[i[0]].length:0,a={};for(const t of i)a[t]=n[t].map(s);!function(t,n,o){if(!1===t.auto_fmt)return;const s=t.data||{},c=t.ops||[],i=Object.keys(s),u=new Set;for(const t of c)if("fmt_number"===t.type)for(const n of t.columns||i)u.add(n);const a=t=>{for(const n of c)if("label"===n.type&&null!=n.labels?.[t])return n.labels[t];return t};for(const t of i){if(u.has(t))continue;const c=s[t];if(!l(c))continue;const i=a(t),f=/%|[ _](pct|percent)$/i.test(i);if(/year/i.test(i)&&c.every(t=>null==t||/^\d{4}$/.test(String(t))))continue;let h=0,p=0;for(const t of c){if(!e(t))continue;const n=Math.abs(f?100*t:t),o=n<1?0:Math.floor(Math.log10(n))+1;o>h&&(h=o);const s=String(t).match(/\.(\d+)/);if(!s)continue;const l=s[1].replace(/0+$/,"").length-(f?2:0);l>p&&(p=l)}p=Math.min(p,Math.max(4-h,0));for(let s=0;s<o;s++){const o=c[s];if(!e(o))continue;const l=r(f?100*o:o,p," ");null!=l&&(n[t][s]=l+(f?"%":""))}}}(t,a,u);const f=(t,o)=>{for(const s of t)if(n[s])for(let t=0;t<u;t++)o(s,t,n[s][t])};for(const t of o){const n=t.columns||i;switch(t.type){case"fmt_number":f(n,(n,o,s)=>{if(!e(s))return;const l=!0===t.percent?100*s:s,c=t.percent?"%":"",i=r(l,t.decimals,t.big_mark??"");null!=i?a[n][o]=i+c:c&&(a[n][o]=String(l)+c)});break;case"sub":f(n,(n,o,s)=>{null!=t.small&&e(s)&&0!==s&&Math.abs(s)<t.small?a[n][o]=t.small_text??"<"+t.small:null!=t.zero&&0===s?a[n][o]=t.zero:null!=t.missing&&null==s&&(a[n][o]=t.missing)});break;case"merge":{const n=t.columns;if(!n||n.length<2)break;const o=n[0];for(let s=0;s<u;s++){const e=n.map(t=>a[t]?.[s]??"");a[o][s]=c(e,t.pattern)}break}}}return{display:a,nRow:u}}function a(t){!function(t){if(!1===t.sort||!t.row_group)return;const n=t.data||{},o=[].concat(t.row_group),s=Object.keys(n),e=s.length?n[s[0]].length:0;if(!e)return;const l=Array.from({length:e},(t,n)=>n);l.sort((t,s)=>{for(const e of o){const o=n[e]?.[t],l=n[e]?.[s];if(o!=l){if(null==o)return 1;if(null==l)return-1;if(o<l)return-1;if(o>l)return 1}}return 0});for(const t of s)n[t]=l.map(o=>n[t][o]);const r=new Array(e);for(let t=0;t<e;t++)r[l[t]]=t+1;for(const n of t.ops||[])n.rows&&(n.rows=n.rows.map(t=>r[t-1]))}(t);const e=t.data||{},{display:r,nRow:c}=u(t),{visible:i,align:a,colLabels:f,colWidths:h,indent:p,stubLabel:g,stub:d,groups:m,rowSpans:b,styles:w,spanners:$,footnotes:y,notes:_,header:x}=function(t){const n=t.data||{},o=t.ops||[],e=Object.keys(n),r=e.length?n[e[0]].length:0,c=(t,n)=>{for(const s of o)s.type===t&&n(s)};let i="string"==typeof t.row_group;const u=Array.isArray(t.row_group)?t.row_group:t.row_group?[t.row_group]:[],a=t.row_label||null;!i&&1===u.length&&n[u[0]]?.some(t=>(t+"").length>20)&&(i=!0);const f=new Set;for(const t of u)f.add(t);a&&f.add(a),c("merge",t=>{!1!==t.hide&&t.columns&&t.columns.slice(1).forEach(t=>f.add(t))});let h=e.filter(t=>!f.has(t));c("move",t=>{const n=(t.columns||[]).filter(t=>h.includes(t));if(!n.length)return;const o=h.filter(t=>!n.includes(t));if(null==t.after)h=[...n,...o];else{const s=o.indexOf(t.after);s>=0&&(h=[...o.slice(0,s+1),...n,...o.slice(s+1)])}});const p=(t,n,o)=>{const s=h.indexOf(n);s>=0&&(t[s]=o)},g=h.map(t=>l(n[t])?"right":"left");c("align",t=>{for(const n of t.columns||[])p(g,n,t.align)});const d=[...h];c("label",t=>{for(const[n,o]of Object.entries(t.labels||{}))p(d,n,o)});let m=null;c("width",t=>{if(t.widths){m||(m=h.map(()=>""));for(const[n,o]of Object.entries(t.widths))p(m,n,o)}});const b=new Array(r).fill(0);c("indent",t=>{if(t.rows)for(const n of t.rows)b[n-1]=t.level??1});let w="";c("stubhead",t=>{w=t.label});const $=t=>{const n=[];for(let o=0;o<r;){const e=s(t[o]),l=[o+1];for(;++o<r&&s(t[o])===e;)l.push(o+1);n.push({label:e,rows:l})}return n};let y=[];i&&u.length&&n[u[0]]&&y.push(...$(n[u[0]])),c("row_group",t=>y.push({label:t.label,rows:t.rows})),c("group_order",t=>{if(!y.length)return;const n=[],o=[];for(const o of t.order||[]){const t=y.find(t=>t.label===o);t&&n.push(t)}for(const t of y)n.includes(t)||o.push(t);y=[...n,...o]});const _=[];if(!i&&u.length)for(const t of u){const o=new Array(r).fill(0);for(const s of $(n[t]||[]))o[s.rows[0]-1]=s.rows.length;let s=t;c("label",n=>{null!=n.labels?.[t]&&(s=n.labels[t])}),_.push({col:t,label:s,spans:o})}const x=o.filter(t=>"style"===t.type),j=y.length&&!a&&h.length?h.find(t=>!l(n[t])):null,k=a||j||null,S=k&&n[k]?n[k].map(s):null;k&&!a&&(g.shift(),d.shift(),h=h.slice(1),m&&m.shift()),k&&!w&&(w=k);let v=t.spanners||[];if(t.auto_span){const n="string"==typeof t.auto_span?new RegExp(t.auto_span):/[._]/;v=[...v];for(let t=0;t<h.length;){const o=h[t].match(n);if(!o){t++;continue}const s=h[t].slice(0,o.index);let e=t+1;for(;e<h.length;){const t=h[e].match(n);if(!t||h[e].slice(0,t.index)!==s)break;e++}if(e-t>=2){v.push({label:s,columns:h.slice(t,e)});for(let o=t;o<e;o++){const t=d[o].match(n);t&&(d[o]=d[o].slice(t.index+t[0].length))}}t=e}}return{visible:h,align:g,colLabels:d,colWidths:m,indent:b,stubLabel:w,stub:S,groups:y,rowSpans:_,styles:x,spanners:v,footnotes:t.footnotes||[],notes:t.notes||[],header:t.header||{},nRow:r}}(t),j=function(t){const n=[],o={};return t.forEach(t=>{null==o[t.text]&&(o[t.text]=n.length+1,n.push(t.text))}),{order:n,idx:o}}(y),k=((t,n)=>(o,s)=>{for(const e of t){const t=e.location;if(t.type!==o)continue;const l=n[e.text];if("title"===o&&t.group===s)return l;if("column_labels"===o&&t.columns.includes(s))return l;if("column_spanners"===o&&t.spanners.includes(s))return l;if("row_groups"===o){if("all"===t.match)return l;if("exact"===t.match&&t.values.includes(s))return l;if("starts_with"===t.match&&s.startsWith(t.value))return l}}return 0})(y,j.idx),S=b.length,v=i.length+(d?1:0)+S,O=['<table class="lt-table">'],A=(t,n)=>{const s=k(t,n);return s?o(s):""},L=(t,n)=>r[t]?.[n-1]??"",M=(t,n)=>n?` ${t}="${n}"`:"",E=i.map((t,n)=>((!d&&0===n&&m.length?"lt-indent ":"")+({right:"al-r",center:"al-c"}[a[n]]||"")).trimEnd()),R=(t,n,o)=>{for(let s=1;s<=c;s++)if(!t||t.includes(s))for(const t of n||i){const n=i.indexOf(t);n>=0&&o(`${s},${n}`,t,s)}},T={},q={},H=(t,n,o,s)=>{t[n]=t[n]?t[n]+s+o:o};for(const t of w)R(t.rows,t.columns?[].concat(t.columns):null,(n,o,s)=>{t.test&&!t.test(e[o][s-1])||(t.css&&H(T,n,t.css,";"),t.class&&H(q,n,t.class," "))});if(h&&h.some(t=>t)){O.push("<colgroup>"),d&&O.push("<col>");for(let t=0;t<i.length;t++)O.push(`<col${M("style",h[t]?"width:"+h[t]:"")}>`);O.push("</colgroup>")}const W=[["title","lt-title"],["subtitle","lt-subtitle"]].filter(([t])=>null!=x[t]&&""!==x[t]).map(([t,o])=>`<div class="${o}">${n(x[t])}${A("title",t)}</div>`);if(W.length&&O.push('<caption class="lt-caption">',...W,"</caption>"),O.push("<thead>"),$.length){const t='<th class="lt-spanner-empty"></th>';O.push('<tr class="lt-spanner-row">'),O.push(t.repeat(S+(d?1:0)));for(let o=0;o<i.length;){const s=$.find(t=>t.columns[0]===i[o]);s?(O.push(`<th colspan="${s.columns.length}" scope="colgroup" class="lt-spanner">${n(s.label)}${A("column_spanners",s.label)}</th>`),o+=s.columns.length):(O.push(t),o++)}O.push("</tr>")}O.push("<tr>");for(const t of b)O.push(`<th scope="col">${n(t.label)}</th>`);d&&O.push(`<th scope="col"${M("class",m.length?"lt-indent":"")}>${n(g)}</th>`);for(let t=0;t<i.length;t++)O.push(`<th scope="col"${M("class",E[t])}>${n(f[t])}${A("column_labels",i[t])}</th>`);O.push("</tr></thead>");const z={};for(const t of y){if("body"!==t.location.type)continue;const n=j.idx[t.text];R(t.location.rows,t.location.columns||[],t=>{z[t]=n})}const B=t=>{O.push("<tr>");for(const o of b){const s=o.spans[t-1];s>0&&O.push(`<th scope="row" class="lt-row-group"${M("rowspan",s>1?s:0)}>${n(L(o.col,t))}</th>`)}if(d){const o=p[t-1]||0,s="lt-stub"+(m.length?" lt-indent":"");O.push(`<th scope="row" class="${s}"${M("style",o?`padding-left:${o+1}em`:"")}>${n(d[t-1])}</th>`)}for(let s=0;s<i.length;s++){const e=`${t},${s}`,l=z[e],r=T[e],c=q[e],u=[E[s],c].filter(Boolean).join(" ");O.push(`<td${M("class",u)}${M("style",r)}>${n(L(i[s],t))}${l?o(l):""}</td>`)}O.push("</tr>")};if(O.push("<tbody>"),m.length){const t={};for(const o of m){O.push(`<tr class="lt-row-group"><th colspan="${v}" scope="colgroup">${n(o.label)}${A("row_groups",o.label)}</th></tr>`);for(const n of o.rows)t[n]=1,B(n)}for(let n=1;n<=c;n++)t[n]||B(n)}else for(let t=1;t<=c;t++)B(t);if(O.push("</tbody>"),j.order.length||_.length){const t=(t,n)=>`<tr class="${t}"><td colspan="${v}">${n}</td></tr>`;O.push('<tfoot class="lt-footer">'),j.order.forEach((s,e)=>O.push(t("lt-footnote",`${o(e+1)} ${n(s)}`)));for(const o of _)O.push(t("lt-source-note",n(o)));O.push("</tfoot>")}return O.push("</table>"),O.join("")}const f=(t,n)=>t.insertAdjacentHTML("afterend",a(n)),h={push:t=>f(t.s,t.d)};(t.LT?.q||[]).forEach(h.push),t.LT={build:t=>f(document.currentScript,t),buildHtml:a,q:h}})(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","isNum","v","isNaN","fmtNumber","decimals","bigMark","toFixed","test","slice","parts","split","join","mergeVals","vals","pattern","filter","remaining","result","m","match","subRefs","index","block","refs","matchAll","map","x","length","every","applyOps","spec","data","ops","colNames","Object","keys","nRow","display","c","auto_fmt","fmtCols","Set","op","type","columns","add","getLabel","labels","has","col","find","lbl","pct","maxInt","n","a","Math","abs","intW","floor","log10","d","max","min","autoFmt","cols","raw","percent","sfx","f","big_mark","small","small_text","zero","missing","mCols","target","visible","align","colLabels","colWidths","indent","stubLabel","stub","groups","rowSpans","styles","spanners","footnotes","fns","notes","header","hdr","rowGroupSep","row_group","rowGroupCols","Array","isArray","rowLabelCol","row_label","some","hidden","g","hide","forEach","toMove","includes","rest","after","pos","indexOf","entries","widths","w","fill","rows","r","level","label","gCol","push","order","ordered","gc","spans","j","css","autoStub","stubCol","shift","auto_span","sep","RegExp","prefix","m2","k","mk","resolveSpec","reg","idx","text","indexFootnotes","fIdx","p","loc","location","hit","group","values","value","matcher","nGrp","nCol","out","mark","colCls","_","right","center","trimEnd","styleMap","sCols","sRows","ci","key","hasT","title","hasS","subtitle","sp","rs","bodyMarks","fi","fcols","frows","pushRow","span","ind","cls","style","val","seen","txt","mount","insertAdjacentHTML","q","e","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","str","v","isNum","isNaN","numCol","col","length","find","fmtNumber","decimals","bigMark","toFixed","test","slice","parts","split","join","mergeVals","vals","pattern","filter","remaining","result","m","match","subRefs","index","block","refs","matchAll","map","x","every","applyOps","spec","data","ops","colNames","Object","keys","nRow","display","c","auto_fmt","fmtCols","Set","op","type","columns","add","getLabel","labels","has","lbl","pct","maxInt","n","a","Math","abs","intW","floor","log10","d","min","max","autoFmt","eachCell","cols","fn","raw","percent","sfx","f","big_mark","small","small_text","zero","missing","mCols","target","sort","row_group","concat","idx","Array","from","_","b","va","vb","newPos","rows","r","sortByGroups","visible","align","colLabels","colWidths","indent","stubLabel","stub","groups","rowSpans","styles","spanners","footnotes","fns","notes","header","hdr","onOp","t","rowGroupSep","rowGroupCols","isArray","rowLabelCol","row_label","some","hidden","g","hide","forEach","toMove","includes","rest","after","pos","indexOf","setByCol","arr","val","entries","widths","w","fill","level","label","runs","out","push","ordered","order","gc","spans","autoStub","stubCol","shift","auto_span","sep","RegExp","prefix","j","m2","k","mk","resolveSpec","reg","text","indexFootnotes","fIdx","loc","location","hit","group","values","startsWith","value","matcher","nGrp","nCol","mark","cell","attr","colCls","right","center","trimEnd","eachLoc","locCols","ci","styleMap","classMap","addTo","key","css","class","caption","cls","emptyTh","repeat","sp","rs","bodyMarks","fi","pushRow","span","ind","cc","Boolean","seen","footRow","html","txt","mount","insertAdjacentHTML","q","e","build","document","currentScript","window"],"sources":["lt.js"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xiee/utils",
3
- "version": "1.14.51",
3
+ "version": "1.14.53",
4
4
  "description": "Miscellaneous tools and utilities to manipulate HTML pages",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"