diff options
Diffstat (limited to 'deps/npm/node_modules/cli-table2/src/table.js')
-rw-r--r-- | deps/npm/node_modules/cli-table2/src/table.js | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/deps/npm/node_modules/cli-table2/src/table.js b/deps/npm/node_modules/cli-table2/src/table.js new file mode 100644 index 0000000000..09af0d7e6b --- /dev/null +++ b/deps/npm/node_modules/cli-table2/src/table.js @@ -0,0 +1,78 @@ + +var utils = require('./utils'); +var tableLayout = require('./layout-manager'); +var _ = require('lodash'); + +function Table(options){ + this.options = utils.mergeOptions(options); +} + +Table.prototype.__proto__ = Array.prototype; + +Table.prototype.toString = function(){ + var array = this; + var headersPresent = this.options.head && this.options.head.length; + if(headersPresent){ + array = [this.options.head]; + if(this.length){ + array.push.apply(array,this); + } + } + else { + this.options.style.head=[]; + } + + var cells = tableLayout.makeTableLayout(array); + + _.forEach(cells,function(row){ + _.forEach(row,function(cell){ + cell.mergeTableOptions(this.options,cells); + },this); + },this); + + tableLayout.computeWidths(this.options.colWidths,cells); + tableLayout.computeHeights(this.options.rowHeights,cells); + + _.forEach(cells,function(row,rowIndex){ + _.forEach(row,function(cell,cellIndex){ + cell.init(this.options); + },this); + },this); + + var result = []; + + for(var rowIndex = 0; rowIndex < cells.length; rowIndex++){ + var row = cells[rowIndex]; + var heightOfRow = this.options.rowHeights[rowIndex]; + + if(rowIndex === 0 || !this.options.style.compact || (rowIndex == 1 && headersPresent)){ + doDraw(row,'top',result); + } + + for(var lineNum = 0; lineNum < heightOfRow; lineNum++){ + doDraw(row,lineNum,result); + } + + if(rowIndex + 1 == cells.length){ + doDraw(row,'bottom',result); + } + } + + return result.join('\n'); +}; + +function doDraw(row,lineNum,result){ + var line = []; + _.forEach(row,function(cell){ + line.push(cell.draw(lineNum)); + }); + var str = line.join(''); + if(str.length) result.push(str); +} + +Table.prototype.__defineGetter__('width', function (){ + var str = this.toString().split("\n"); + return str[0].length; +}); + +module.exports = Table;
\ No newline at end of file |