Buckets:
| const debug = require('./debug'); | |
| const utils = require('./utils'); | |
| const tableLayout = require('./layout-manager'); | |
| class Table extends Array { | |
| constructor(opts) { | |
| super(); | |
| const options = utils.mergeOptions(opts); | |
| Object.defineProperty(this, 'options', { | |
| value: options, | |
| enumerable: options.debug, | |
| }); | |
| if (options.debug) { | |
| switch (typeof options.debug) { | |
| case 'boolean': | |
| debug.setDebugLevel(debug.WARN); | |
| break; | |
| case 'number': | |
| debug.setDebugLevel(options.debug); | |
| break; | |
| case 'string': | |
| debug.setDebugLevel(parseInt(options.debug, 10)); | |
| break; | |
| default: | |
| debug.setDebugLevel(debug.WARN); | |
| debug.warn(`Debug option is expected to be boolean, number, or string. Received a ${typeof options.debug}`); | |
| } | |
| Object.defineProperty(this, 'messages', { | |
| get() { | |
| return debug.debugMessages(); | |
| }, | |
| }); | |
| } | |
| } | |
| toString() { | |
| let array = this; | |
| let 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 = []; | |
| } | |
| let cells = tableLayout.makeTableLayout(array); | |
| cells.forEach(function (row) { | |
| row.forEach(function (cell) { | |
| cell.mergeTableOptions(this.options, cells); | |
| }, this); | |
| }, this); | |
| tableLayout.computeWidths(this.options.colWidths, cells); | |
| tableLayout.computeHeights(this.options.rowHeights, cells); | |
| cells.forEach(function (row) { | |
| row.forEach(function (cell) { | |
| cell.init(this.options); | |
| }, this); | |
| }, this); | |
| let result = []; | |
| for (let rowIndex = 0; rowIndex < cells.length; rowIndex++) { | |
| let row = cells[rowIndex]; | |
| let heightOfRow = this.options.rowHeights[rowIndex]; | |
| if (rowIndex === 0 || !this.options.style.compact || (rowIndex == 1 && headersPresent)) { | |
| doDraw(row, 'top', result); | |
| } | |
| for (let lineNum = 0; lineNum < heightOfRow; lineNum++) { | |
| doDraw(row, lineNum, result); | |
| } | |
| if (rowIndex + 1 == cells.length) { | |
| doDraw(row, 'bottom', result); | |
| } | |
| } | |
| return result.join('\n'); | |
| } | |
| get width() { | |
| let str = this.toString().split('\n'); | |
| return str[0].length; | |
| } | |
| } | |
| Table.reset = () => debug.reset(); | |
| function doDraw(row, lineNum, result) { | |
| let line = []; | |
| row.forEach(function (cell) { | |
| line.push(cell.draw(lineNum)); | |
| }); | |
| let str = line.join(''); | |
| if (str.length) result.push(str); | |
| } | |
| module.exports = Table; | |
Xet Storage Details
- Size:
- 2.67 kB
- Xet hash:
- 28217996e4ef7f862dec7d8e670c8c6e899ad21f75d7170c2748898a1a92a874
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.