1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- "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"
- );
- };
|