57 lines
1.9 KiB
Plaintext
57 lines
1.9 KiB
Plaintext
"use strict";
|
|
|
|
var generate = require("es5-ext/array/generate")
|
|
, from = require("es5-ext/array/from")
|
|
, iterable = require("es5-ext/iterable/validate-object")
|
|
, isValue = require("es5-ext/object/is-value")
|
|
, stringifiable = require("es5-ext/object/validate-stringifiable")
|
|
, repeat = require("es5-ext/string/#/repeat")
|
|
, getStrippedLength = require("./get-stripped-length");
|
|
|
|
var push = Array.prototype.push;
|
|
|
|
module.exports = function (inputRows /*, options*/) {
|
|
var options = Object(arguments[1])
|
|
, colsMeta = []
|
|
, colsOptions = options.columns || []
|
|
, rows = [];
|
|
|
|
from(iterable(inputRows), function (row) {
|
|
var rowRows = [[]];
|
|
from(iterable(row), function (cellStr, columnIndex) {
|
|
var cellRows = stringifiable(cellStr).split("\n");
|
|
while (cellRows.length > rowRows.length) rowRows.push(generate(columnIndex, ""));
|
|
cellRows.forEach(function (cellRow, rowRowIndex) {
|
|
rowRows[rowRowIndex][columnIndex] = cellRow;
|
|
});
|
|
});
|
|
push.apply(rows, rowRows);
|
|
});
|
|
|
|
return (
|
|
rows
|
|
.map(function (row) {
|
|
return from(iterable(row), function (str, index) {
|
|
var col = colsMeta[index], strLength;
|
|
if (!col) col = colsMeta[index] = { width: 0 };
|
|
str = stringifiable(str);
|
|
strLength = getStrippedLength(str);
|
|
if (strLength > col.width) col.width = strLength;
|
|
return { str: str, length: strLength };
|
|
});
|
|
})
|
|
.map(function (row) {
|
|
return row
|
|
.map(function (item, index) {
|
|
var pad, align = "left", colOptions = colsOptions && colsOptions[index];
|
|
align = colOptions && colOptions.align === "right" ? "right" : "left";
|
|
pad = repeat.call(" ", colsMeta[index].width - item.length);
|
|
if (align === "left") return item.str + pad;
|
|
return pad + item.str;
|
|
})
|
|
.join(isValue(options.sep) ? options.sep : " | ");
|
|
})
|
|
.join("\n") + "\n"
|
|
);
|
|
};
|