UNPKG

6.74 kBJavaScriptView Raw
1"use strict";
2var __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};
10Object.defineProperty(exports, "__esModule", { value: true });
11var S = require("string");
12var helpers_1 = require("../utils/helpers");
13var TableGenerator;
14(function (TableGenerator) {
15 function RenderTable(headers, content, options) {
16 var resolvedOptions = __assign({ escapePipeChar: "&#124;" }, options);
17 var patternToEscape = /\|/g;
18 // Escape
19 if (resolvedOptions.escapePipeChar != null) {
20 var escapePipeChar_1 = resolvedOptions.escapePipeChar;
21 // Headers
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 // Content
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 // Removing empty rows if option `removeRowIfEmpty` enabled.
45 if (removeRowIfEmpty) {
46 filledRows = filledRows.filter(function (row) { return !row.every(function (cell) { return cell.length === 0; }); });
47 }
48 // Indexes of empty columns, that should be removed.
49 var columnsToRemove = [];
50 // Filling columns widths.
51 headers.forEach(function (header, index) {
52 // Getting rows of a single column
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 // Removing unnecessary columns.
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 // | Header | Header2 |
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//# sourceMappingURL=table-generator.js.map
\No newline at end of file