1 | "use strict";
|
2 | var __assign = (this && this.__assign) || Object.assign || function(t) {
|
3 | for (var s, i = 1, n = arguments.length; i < n; i++) {
|
4 | s = arguments[i];
|
5 | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
6 | t[p] = s[p];
|
7 | }
|
8 | return t;
|
9 | };
|
10 | Object.defineProperty(exports, "__esModule", { value: true });
|
11 | var S = require("string");
|
12 | var helpers_1 = require("../utils/helpers");
|
13 | var TableGenerator;
|
14 | (function (TableGenerator) {
|
15 | function RenderTable(headers, content, options) {
|
16 | var resolvedOptions = __assign({ escapePipeChar: "|" }, options);
|
17 | var patternToEscape = /\|/g;
|
18 |
|
19 | if (resolvedOptions.escapePipeChar != null) {
|
20 | var escapePipeChar_1 = resolvedOptions.escapePipeChar;
|
21 |
|
22 | headers = headers.map(function (header) {
|
23 | if (typeof header === "string") {
|
24 | return header.replace(patternToEscape, escapePipeChar_1);
|
25 | }
|
26 | else {
|
27 | return __assign({}, header, { text: header.text.replace(patternToEscape, escapePipeChar_1) });
|
28 | }
|
29 | });
|
30 |
|
31 | content = content.map(function (x) { return x.map(function (y) { return y.replace(patternToEscape, resolvedOptions.escapePipeChar); }); });
|
32 | }
|
33 | var columnsWidths = [];
|
34 | var removeColumnIfEmpty = options != null && options.removeColumnIfEmpty;
|
35 | var removeRowIfEmpty = options != null && options.removeRowIfEmpty;
|
36 | var filledRows = content.map(function (row) {
|
37 | if (row.length < headers.length) {
|
38 | return helpers_1.Helpers.FillArray(row, headers.length, "");
|
39 | }
|
40 | else {
|
41 | return row;
|
42 | }
|
43 | });
|
44 |
|
45 | if (removeRowIfEmpty) {
|
46 | filledRows = filledRows.filter(function (row) { return !row.every(function (cell) { return cell.length === 0; }); });
|
47 | }
|
48 |
|
49 | var columnsToRemove = [];
|
50 |
|
51 | headers.forEach(function (header, index) {
|
52 |
|
53 | var rows = filledRows.map(function (x) { return x[index]; });
|
54 | columnsWidths[index] = GetMaxColumnWidth(GetHeaderText(header), rows, removeColumnIfEmpty);
|
55 | if (removeColumnIfEmpty && columnsWidths[index] === 0) {
|
56 | columnsToRemove.push(index);
|
57 | }
|
58 | });
|
59 |
|
60 | var finalHeaders = headers.filter(function (x, index) { return columnsToRemove.indexOf(index) === -1; });
|
61 | var finalRows = filledRows.map(function (row) { return row.filter(function (x, index) { return columnsToRemove.indexOf(index) === -1; }); });
|
62 | var finalColumnsWidths = columnsWidths.filter(function (x, index) { return columnsToRemove.indexOf(index) === -1; });
|
63 | var lines = RenderTableHeader(finalHeaders, finalColumnsWidths).concat(RenderTableContents(finalRows, finalColumnsWidths));
|
64 | return lines;
|
65 | }
|
66 | TableGenerator.RenderTable = RenderTable;
|
67 | function RenderTableHeader(headers, columnsWidths) {
|
68 |
|
69 | var tableHeader = "";
|
70 |
|
71 | var headerSeparator = "";
|
72 | headers.forEach(function (header, headerIndex) {
|
73 | var columnWidth = columnsWidths[headerIndex];
|
74 | var columnAlign = GetHeaderAlign(header);
|
75 | var isLast = (headerIndex + 1 === headers.length);
|
76 | tableHeader += RenderCell(GetHeaderText(header), columnWidth, isLast);
|
77 | var columnAlignText;
|
78 | switch (columnAlign) {
|
79 | case "left": {
|
80 |
|
81 | columnAlignText = S(":").padRight(columnWidth, "-").s;
|
82 | break;
|
83 | }
|
84 | case "right": {
|
85 |
|
86 | columnAlignText = S(":").padLeft(columnWidth, "-").s;
|
87 | break;
|
88 | }
|
89 | case "center":
|
90 |
|
91 | columnAlignText = S(":").padRight(columnWidth, "-").s;
|
92 | columnAlignText = columnAlignText.slice(0, -1) + ":";
|
93 | break;
|
94 | case "none":
|
95 | default: {
|
96 | columnAlignText = S("-").repeat(columnWidth).s;
|
97 | }
|
98 | }
|
99 | headerSeparator += RenderCell(columnAlignText, columnWidth, isLast);
|
100 | });
|
101 | return [
|
102 | tableHeader,
|
103 | headerSeparator
|
104 | ];
|
105 | }
|
106 | TableGenerator.RenderTableHeader = RenderTableHeader;
|
107 | function RenderTableContents(content, columnsWidths) {
|
108 | return content.map(function (row) {
|
109 | var rowText = "";
|
110 | row.forEach(function (column, columnIndex) {
|
111 | var columnWidth = columnsWidths[columnIndex];
|
112 | var isLast = (columnIndex + 1 === row.length);
|
113 | rowText += RenderCell(column, columnWidth, isLast);
|
114 | });
|
115 | return rowText;
|
116 | });
|
117 | }
|
118 | TableGenerator.RenderTableContents = RenderTableContents;
|
119 | function RenderCell(text, width, close) {
|
120 | var sanitizedText = S(text).trim().s;
|
121 | var cell = "| " + S(sanitizedText).padRight(width).s + " ";
|
122 | if (close) {
|
123 | cell += "|";
|
124 | }
|
125 | return cell;
|
126 | }
|
127 | TableGenerator.RenderCell = RenderCell;
|
128 | function GetHeaderText(header) {
|
129 | var headerText;
|
130 | if (typeof header === "string") {
|
131 | headerText = header;
|
132 | }
|
133 | else {
|
134 | headerText = header.text;
|
135 | }
|
136 | return headerText;
|
137 | }
|
138 | TableGenerator.GetHeaderText = GetHeaderText;
|
139 | function GetHeaderAlign(header) {
|
140 | if (typeof header === "string") {
|
141 | return "none";
|
142 | }
|
143 | else {
|
144 | return header.align;
|
145 | }
|
146 | }
|
147 | TableGenerator.GetHeaderAlign = GetHeaderAlign;
|
148 | function GetMaxColumnWidth(headerText, rows, removeIfEmpty) {
|
149 | var maxWidth = 0;
|
150 | rows.forEach(function (x) {
|
151 | if (x != null && x.length > maxWidth) {
|
152 | maxWidth = x.length;
|
153 | }
|
154 | });
|
155 | if (maxWidth !== 0 || !removeIfEmpty) {
|
156 | if (headerText.length > maxWidth) {
|
157 | return headerText.length;
|
158 | }
|
159 | }
|
160 | return maxWidth;
|
161 | }
|
162 | TableGenerator.GetMaxColumnWidth = GetMaxColumnWidth;
|
163 | })(TableGenerator = exports.TableGenerator || (exports.TableGenerator = {}));
|
164 |
|
\ | No newline at end of file |