UNPKG

ascii-table3

Version:

Javascript ASCII renderer for beautiful console-based tables

1,478 lines (1,142 loc) 33.3 kB
Ascii Table 3 ============= [![Build stats](https://app.travis-ci.com/AllMightySauron/ascii-table3.png)](https://app.travis-ci.com/AllMightySauron/ascii-table3) [![npm version](https://badge.fury.io/js/ascii-table3.png)](https://badge.fury.io/js/ascii-table3) `ascii-table3` is a pure ascii table renderer and beautifier, heavily inspired by the `ascii-table` package created by Beau Sorensen. The original package lacked support for multiple table styles and that is what motivated me to create this new one. Currently with **over a dozen** predefined table styles, the collection style keeps growing. I am pretty sure there is a style for everyone. If not, you can even design your own custom style and add it to the library! This package now **includes support for ANSI escape sequences** so that rendered tables can output rich console content with colors by relying on packages like [chalk](https://github.com/chalk/chalk). Please direct any issues, suggestions or feature requests to the [ascii-table3](https://github.com/AllMightySauron/ascii-table3) github page. Existing code for the original `ascii-table` package should run fine with very few changes (see examples below). # Usage **Node.js** ```javascript var { AsciiTable3 } = require('ascii-table3'); ``` ## Basic usage Tables are created programmatically. ```javascript var { AsciiTable3, AlignmentEnum } = require('ascii-table3'); // create table var table = new AsciiTable3('Sample table') .setHeading('Name', 'Age', 'Eye color') .setAlign(3, AlignmentEnum.CENTER) .addRowMatrix([ ['John', 23, 'green'], ['Mary', 16, 'brown'], ['Rita', 47, 'blue'], ['Peter', 8, 'brown'] ]); console.log(table.toString()); ``` ``` +-------------------------+ | Sample table | +-------+-----+-----------+ | Name | Age | Eye color | +-------+-----+-----------+ | John | 23 | green | | Mary | 16 | brown | | Rita | 47 | blue | | Peter | 8 | brown | +-------+-----+-----------+ ``` We can make simpler tables without a title or headings as well. ```javascript var table = new AsciiTable3() .setAlignCenter(3) .addRowMatrix([ ['John', 23, 'green'], ['Mary', 16, 'brown'], ['Rita', 47, 'blue'], ['Peter', 8, 'brown'] ]); console.log(table.toString()); ``` ``` +-------+----+-------+ | John | 23 | green | | Mary | 16 | brown | | Rita | 47 | blue | | Peter | 8 | brown | +-------+----+-------+ ``` ## Using styles Tables may be rendered using different styles. ```javascript var table = new AsciiTable3('Sample table') .setHeading('Name', 'Age', 'Eye color') .setAlignCenter(3) .addRowMatrix([ ['John', 23, 'green'], ['Mary', 16, 'brown'], ['Rita', 47, 'blue'], ['Peter', 8, 'brown'] ]); // set compact style table.setStyle('compact'); console.log(table.toString()); ``` ``` ------------------------- Name Age Eye color ------- ----- ----------- John 23 green Mary 16 brown Rita 47 blue Peter 8 brown ``` These styles range from simple to more elaborate. ```javascript table.setStyle('unicode-single'); console.log(table.toString()); ``` ``` ┌─────────────────────────┐ Sample table ├───────┬─────┬───────────┤ Name Age Eye color ├───────┼─────┼───────────┤ John 23 green Mary 16 brown Rita 47 blue Peter 8 brown └───────┴─────┴───────────┘ ``` # API ## Constructor ### AsciiTable3([title]) Creates new table object. * `title` - table title (optional) ```javascript var { AsciiTable3 } = require('ascii-table3'); var table = new AsciiTable3('Data'); ``` ## Static Methods ### AsciiTable3.isNumeric(val) Returns wether a `val` is numeric or not, irrespective of its type. * `val` - value to check ```javascript AsciiTable3.isNumeric('test') // false AsciiTable3.isNumeric(10) // true AsciiTable3.isNumeric(3.14) // true ``` ### AsciiTable3.align(direction, val, len, [pad]) Shortcut to one of the three following methods. * `direction` - alignment direction (`AlignmentEnum.LEFT`, `AlignmentEnum.CENTER`, `AlignmentEnum.RIGHT`, `AlignmentEnum.AUTO`) * `val` - string to align * `len` - total length of created string * `pad` - padding / fill char (optional, default `' '`) Example: ```javascript AsciiTable3.align(AlignmentEnum.LEFT, 'hey', 7) // 'hey ' ``` ### AsciiTable3.alignLeft(val, len, [pad]) * `val` - string to align * `len` - total length of created string * `pad` - padding / fill char (optional, default `' '`) Example: ```javascript AsciiTable3.alignLeft('hey', 7, '-') // 'hey----' ``` ### AsciiTable3.alignCenter(val, len, [pad]) * `val` - string to align * `len` - total length of created string * `pad` - padding / fill char (optional, default `' '`) Example: ```javascript AsciiTable3.alignCenter('hey', 7) // ' hey ' ``` ### AsciiTable3.alignRight(val, len, [pad]) * `val` - string to align * `len` - total length of created string * `pad` - padding / fill char (optional, default `' '`) Example: ```javascript AsciiTable3.alignRight('hey', 7) // ' hey' ``` ### AsciiTable3.alignAuto(val, len, [pad]) Attempts to do intelligent alignment of provided `val`, `String` input will be left aligned, `Number` types will be right aligned. * `val` - string to align * `len` - total length of created string * `pad` - padding / fill char (optional, default `' '`) Example: ```javascript AsciiTable3.alignAuto('hey', 7) // 'hey ' ``` ### AsciiTable3.wordWrap(str, maxWidth) Wraps a string into multiple lines of a limited width. * `str` - string to wrap * `maxWidth` - maximum width for the wrapped string ```javascript AsciiTable3.wordWrap('dummy', 5) // dummy AsciiTable3.wordWrap('this is a test', 5) // this // is a // test AsciiTable3.wordWrap('this is a test', 3) // thi // s // is // a // tes // t ``` ### AsciiTable3.truncateString(str, len) Truncates a string up to a maximum number of characters (if needed). * `str` - string to truncate * `len` - maximum string lenght Example: ```javascript AsciiTable3.truncateString('bananas', 6) // 'ban...' AsciiTable3.truncateString('apples', 10) // 'apples' ``` ### AsciiTable3.arrayFill(len, [val]) Create a new array at the given len, filled with the given value, mainly used internally. * `len` - length of array * `val` - fill value (optional) Example: ```javascript AsciiTable3.arrayFill(4, 0) // [0, 0, 0, 0] AsciiTable3.arrayFill(2) // [undefined, undefined] ``` ### AsciiTable3.ArrayResize(arr, len, [val]) Increases existing array size up to the desired limit. * `arr` - array to increase size * `len` - new array length * `val` - fill value (optional) ```javascript var arr = [ 'a', 'b', 'c' ]; AsciiTable3.arrayResize(arr, 4); // [ 'a', 'b', 'c', undefined ] ``` ## Instance methods ### Title #### instance.setTitle(title) Sets the table title. * `title` - table title Example: ```javascript var table = new AsciiTable3('Old Title'); table.setTitle('New Title'); ``` #### instance.getTitle() Get the current title of the table. Example: ```javascript table.getTitle() // 'New Title' ``` #### instance.setTitleAlign(direction) Sets up the desired table title alignment. * `direction` - table alignment direction Example: ```javascript // center table title table.setTitleAlign(AlignmentEnum.CENTER); ``` #### instance.setTitleAlignLeft() Alias to `instance.setTitleAlign(AlignmentEnum.LEFT)` #### instance.setTitleAlignCenter() Alias to `instance.setTitleAlign(AlignmentEnum.CENTER)` #### instance.setTitleAlignRight() Alias to `instance.setTitleAlign(AlignmentEnum.RIGHT)` #### instance.getTitleAlign() Gets the current title alignment type (between `AlignmentEnum.LEFT`, `AlignmentEnum.CENTER` and `AlignmentEnum.RIGHT`). Example: ```javascript table.setTitleAlignLeft(); table.getTitleAlign() // AlignmentEnum.LEFT ``` ### Heading #### instance.setHeading(heading, [...]) Set the column headings for the table, takes arguments the same way as `addRow`. * `heading` - heading array or arguments Example: ```javascript table.setHeading('ID', 'Key', 'Value'); // or: table.setHeading(['ID', 'Key', 'Value']); ``` #### instance.getHeading() Get the column head for the table as an array. Example: ```javascript table.setHeading('Name', 'Age', 'Height'); table.getHeading() // [ 'Name', 'Age', 'Height' ] ``` #### instance.setHeadingAlign(direction) * `direction` - direction for heading alignment. Example: ```javascript table.setHeadingAlign(AlignmentEnum.LEFT); ``` #### instance.setHeadingAlignLeft() Alias to `instance.setHeadingAlignLeft(AlignmentEnum.LEFT)` #### instance.setHeadingAlignCenter() Alias to `instance.setHeadingAlignLeft(AlignmentEnum.CENTER)` #### instance.setHeadingAlignRight() Alias to `instance.setHeadingAlignLeft(AlignmentEnum.RIGHT)` #### instance.getHeadingAlign() Gets the current heading alignment type (between `AlignmentEnum.LEFT`, `AlignmentEnum.CENTER` and `AlignmentEnum.RIGHT`). Example: ```javascript table.setHeadinglignLeft(); table.getHeadingAlign() // AlignmentEnum.LEFT ``` ### Data rows #### instance.addRow(row, [...]) Rows can be added using a single array argument, or the arguments if multiple args are used when calling the method. * `row` - array or arguments of column values Example: ```javascript var table = new AsciiTable3(); table .addRow(1, 'Bob', 52) .addRow([2, 'John', 34]); console.log(table.toString()); ``` ``` +---+------+----+ | 1 | Bob | 52 | | 2 | John | 34 | +---+------+----+ ``` #### instance.addNonZeroRow(row, [...]) Adds new row to table, as long as at least one of the numeric cells' value is not 0 (zero). * `row` - array or arguments of column values Example: ```javascript var table = new AsciiTable3(); table .addRow(1, 'Bob', 52) .addRow([2, 'John', 34]); console.log(table.toString()); ``` ``` +---+------+----+ | 1 | Bob | 52 | | 2 | John | 34 | +---+------+----+ ``` If all numeric values are 0 (zero) the new row is not added. ```javascript table.addNonZeroRow(0, 'Dummy', 0); // should not be added console.log(table.toString()); ``` ``` +---+------+----+ | 1 | Bob | 52 | | 2 | John | 34 | +---+------+----+ ``` #### instance.addRowMatrix(rows) Bulk `addRow` operation. * `rows` - multidimensional array of rows Example: ```javascript table.addRowMatrix([ [2, 'John', 34] , [3, 'Jim', 83] ]); console.log(table.toString()); ``` ``` +---+------+----+ | 2 | John | 34 | | 3 | Jim | 83 | +---+------+----+ ``` #### instance.getRows() Get the multidimension array of rows from the table. Example: ```javascript table.addRowMatrix([ [2, 'John', 34] , [3, 'Jim', 83] ]); console.log(table.getRows()); ``` ```json [ [2, 'John', 34] , [3, 'Jim', 83] ] ``` ### Styles #### instance.setStyle(name) Sets the table border style for rendering. Examples are provided below. New border styles are expected to be added as time goes by. * `name` - the style name Currently available styles are: * **none** - Borderless ``` Sample table Name Age Eye color John 23 green Mary 16 brown Rita 47 blue Peter 8 brown ``` * **compact** - Compact ``` ------------------------- Sample table ------------------------- Name Age Eye color ------- ----- ----------- John 23 green Mary 16 brown Rita 47 blue Peter 8 brown ``` * `**ramac** - beautified 7-bit ASCII output ( the *default* style) ``` +-------------------------+ | Sample table | +-------+-----+-----------+ | Name | Age | Eye color | +-------+-----+-----------+ | John | 23 | green | | Mary | 16 | brown | | Rita | 47 | blue | | Peter | 8 | brown | +-------+-----+-----------+ ``` * **ascii-table** - mimics the original `ascii-table` npm package table style ``` .-------------------------. | Sample table | |-------------------------| | Name | Age | Eye color | |-------------------------| | John | 23 | green | | Mary | 16 | brown | | Rita | 47 | blue | | Peter | 8 | brown | .-------------------------. ``` * **ascii-reStructuredText** - [reStructuredText](http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#tables) grid style ``` +-------------------------+ | Sample table | +-------+-----+-----------+ | Name | Age | Eye color | +=======+=====+===========+ | John | 23 | green | | Mary | 16 | brown | | Rita | 47 | blue | | Peter | 8 | brown | +-------+-----+-----------+ ``` * **ascii-reStructuredText-simple** - [reStructuredText](http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#tables) simple style ``` =========================== Sample table ======== ===== ============ Name Age Eye color ======== ===== ============ John 23 green Mary 16 brown Rita 47 blue Peter 8 brown ======== ===== ============ ``` * **ascii-dots** - Ascii dotted border ``` ........................... : Sample table : :.........................: : Name : Age : Eye color : :.......:.....:...........: : John : 23 : green : : Mary : 16 : brown : : Rita : 47 : blue : : Peter : 8 : brown : :.......:.....:...........: ``` * **ascii-rounded** - Ascii rounded-corner border ``` .-------------------------. | Sample table | :-------.-----.-----------: | Name | Age | Eye color | :-------+-----+-----------: | John | 23 | green | | Mary | 16 | brown | | Rita | 47 | blue | | Peter | 8 | brown | '-------'-----'-----------' ``` * **ascii-clean** - Clean(er) ascii table (no left and right borders) ```asciicode ------------------------- Sample table -------|-----|----------- Name | Age | Eye color -------|-----|----------- John | 23 | green Mary | 16 | brown Rita | 47 | blue Peter | 8 | brown -------|-----|----------- ``` * **ascii-girder** - Ascii girder-like border ```asciicode //===========================\\ || Sample table || |]=======[]=====[]===========[| || Name || Age || Eye color || |]=======[]=====[]===========[| || John || 23 || green || || Mary || 16 || brown || || Rita || 47 || blue || || Peter || 8 || brown || \\=======[]=====[]===========// ``` * **unicode-single** - Single line unicode chars border ``` ┌─────────────────────────┐ Sample table ├───────┬─────┬───────────┤ Name Age Eye color ├───────┼─────┼───────────┤ John 23 green Mary 16 brown Rita 47 blue Peter 8 brown └───────┴─────┴───────────┘ ``` * **unicode-double**- Double line unicode chars border ``` ╔═════════════════════════╗ Sample table ╠═══════╦═════╦═══════════╣ Name Age Eye color ╠═══════╬═════╬═══════════╣ John 23 green Mary 16 brown Rita 47 blue Peter 8 brown ╚═══════╩═════╩═══════════╝ ``` * **unicode-mix** - Mixed single/double line unicode style (single internal border and double external border) ``` ╔═════════════════════════╗ Sample table ╟═══════╤═════╤═══════════╢ Name Age Eye color ╟───────┼─────┼───────────╢ John 23 green Mary 16 brown Rita 47 blue Peter 8 brown ╚═══════╧═════╧═══════════╝ ``` * **unicode-round** - Single line unicode style with rounded edges ``` ╭─────────────────────────╮ Sample table ├───────┬─────┬───────────┤ Name Age Eye color ├───────┼─────┼───────────┤ John 23 green Mary 16 brown Rita 47 blue Peter 8 brown ╰───────┴─────┴───────────╯ ``` * **github-markdown** - github markdown style ``` | Sample table | | Name | Age | Eye color | |-------|-----|-----------| | John | 23 | green | | Mary | 16 | brown | | Rita | 47 | blue | | Peter | 8 | brown | ``` * **reddit-markdown** - reddit markdown style ``` Sample table Name | Age | Eye color -------|-----|----------- John | 23 | green Mary | 16 | brown Rita | 47 | blue Peter | 8 | brown ``` #### instance.getStyle() Retrieves the current border style set for the instance. Style is returned as an object. Example: ```javascript var style = table.getStyle(); console.log (style); ``` ```json { "name": "unicode-double", "borders": { "top": { "left": "╔", "center": "═", "right": "╗", "colSeparator": "╦" }, "middle": { "left": "╠", "center": "═", "right": "╣", "colSeparator": "╬" }, "bottom": { "left": "╚", "center": "═", "right": "╝", "colSeparator": "╩" }, "data" : { "left": "║", "center": " ", "right": "║", "colSeparator": "║" } } } ``` #### instance.addStyle(style) Adds a custom new style to the list of predefined table styles. * `style` - style object to add Example: ```javascript var table = new AsciiTable3('Sample table') .setHeading('Name', 'Age', 'Eye color') .setAlignCenter(3) .addRowMatrix([ ['John', 23, 'green'], ['Mary', 16, 'brown'], ['Rita', 47, 'blue'], ['Peter', 8, 'brown'] ]); const roundedStyle = { name: "rounded", borders: { top: { left: ".", center: "-", right: ".", colSeparator: "." }, middle: { left: ":", center: "-", right: ":", colSeparator: "+" }, bottom: { left: "'", center: "-", right: "'", colSeparator: "'" }, data : { left: "|", center: " ", right: "|", colSeparator: "|" } } }; table.addStyle(roundedStyle); table.setStyle("rounded"); console.log(table.toString()); ``` ``` .--------------------------------. | Sample table | :----------.--------.------------: | Name | Age | Eye color | :----------+--------+------------: | John | 23 | green | | Mary | 16 | brown | | Rita | 47 | blue | | Peter | 8 | brown | '----------'--------'------------' ``` #### instance.removeBorder() Shortcut for **instance.setStyle('none')**. Example: ```javascript var table = new AsciiTable3('Sample table') .setHeading('Name', 'Age', 'Eye color') .setAlignCenter(3) .addRowMatrix([ ['John', 23, 'green'], ['Mary', 16, 'brown'], ['Rita', 47, 'blue'], ['Peter', 8, 'brown'] ]); table.removeBorder(); console.log(table); ``` ``` Sample table Name Age Eye color John 23 green Mary 16 brown Rita 47 blue Peter 8 brown ``` #### instance.setWidth(idx, width) Sets a preset width for a given column to be used when rendering the table. * `idx` - table column index (starts at 1) * `width` - column width Example: ```javascript var table = new AsciiTable3('Sample table') .setHeading('Name', 'Age', 'Eye color') .setAlignCenter(3) .addRowMatrix([ ['John', 23, 'green'], ['Mary', 16, 'brown'], ['Rita', 47, 'blue'], ['Peter', 8, 'brown'] ]); // set the age column width to 5 characters table.setWidth(1, 10); console.log(table.toString()); ``` ``` +----------+-----+-----------+ | Name | Age | Eye color | +----------+-----+-----------+ | John | 23 | green | | Mary | 16 | brown | | Rita | 47 | blue | | Peter | 8 | brown | +----------+-----+-----------+ ``` #### instance.getWidth(idx) Get the preset width for a given column when rendering. * `idx` - table column to get width (starts at 1) Example: ```javascript table.setWidth(2, 5); table.getWidth(2) // 5 table.getWidth(1) // undefined (not set) ``` #### instance.setWidths(widths) Sets column widths for table rendering using an array. * `widths` - array of widths Example: ```javascript var table = new AsciiTable3('Sample table') .setHeading('Name', 'Age', 'Eye color') .addRowMatrix([ ['John', 23, 'green'], ['Mary', 16, 'brown'], ['Rita', 47, 'blue'], ['Peter', 8, 'brown'] ]); // set the age column width to 5 characters table.setWidths([10, 8, 12]); console.log(table.toString()); ``` ``` +----------+--------+------------+ | Name | Age | Eye color | +----------+--------+------------+ | John | 23 | green | | Mary | 16 | brown | | Rita | 47 | blue | | Peter | 8 | brown | +----------+--------+------------+ ``` #### instance.getWidths() Gets the present widths for each column (if any). Example: ```javascript table.setWidths([1, undefined, 3]); table.getWidths() // [1, undefined, 3] ``` #### instance.setAlign(idx, direction) * `idx` - column index to align (starts at 1) * `direction` - alignment direction, (`AlignmentEnum.LEFT`, `AlignmentEnum.CENTER`, `AlignmentEnum.RIGHT`) Example: ```javascript table .setAlign(2, AlignmentEnum.CENTER) .setAlign(3, AlignmentEnum.RIGHT); console.log(table.toString()); ``` ``` +---+-----------+--------------------+ | a | apple | Some longer string | | b | banana | hi | | c | carrot | meow | | e | elephants | | +---+-----------+--------------------+ ``` #### instance.setAlignLeft(idx) Alias to `instance.setAlign(idx, AlignmentEnum.LEFT)` #### instance.setAlignCenter(idx) Alias to `instance.setAlign(idx, AlignmentEnum.CENTER)` #### instance.setAlignRight(idx) Alias to `instance.setAlign(idx, AlignmentEnum.RIGHT)` #### instance.getAlign(idx) Get column table alignment. * `idx` - columns to get alignment (starts at 1) Example: ```javascript table.setAlignRight(2); table.getAlign(2) // AlignmentEnum.RIGHT ``` #### instance.setAligns(directions) Set column alignment for all columns. * `direction` - Array with alignment directions for each column (`AlignmentEnum.LEFT`, `AlignmentEnum.CENTER`, `AlignmentEnum.RIGHT`). Example: ```javascript // for a 3 column table table.setAligns([AlignmentEnum.LEFT, AlignmentEnum.CENTER, AlignmentEnum.RIGHT]); ``` #### instance.getAligns() Get array of column alignment for all table instance columns. Example: ```javascript // for a 3 column table table.setAligns([AlignmentEnum.LEFT, AlignmentEnum.CENTER, AlignmentEnum.RIGHT]); table.getAligns() // [AlignmentEnum.LEFT, AlignmentEnum.CENTER, AlignmentEnum.RIGHT] ``` #### instance.setWrapped(idx, [wrap]) Sets the wrapping property for a specific column (wrapped content will generate more than one data row if needed). * `idx` - column to wrap (starts at 1). * `wrap` - wrap boolean setting (default is true). ```javascript var table = new AsciiTable3('Sample table') .setHeading('Name', 'Age', 'Eye color') .setAlignCenter(3) .addRowMatrix([ ['James Bond', 41, 'blue'], ['Harry Potter', 18, 'brown'], ['Scooby Doo', 23, 'brown'], ['Mickey Mouse', 120, 'black'] ]); // first column width is 8 characters and wrapped table.setWidth(1, 8).setWrapped(1); console.log(table.toString()); ``` ``` .------------------------------. | Sample table | :--------.--------.------------: | Name | Age | Eye color | :--------+--------+------------: | James | 41 | blue | | Bond | | | | Harry | 18 | brown | | Potter | | | | Scooby | 23 | brown | | Doo | | | | Mickey | 120 | black | | Mouse | | | '--------'--------'------------' ``` #### instance.isWrapped(idx) Gets the wrapping setting for a given column (true or false). * `idx` - column to check (starts at 1) ```javascript var table = new AsciiTable3('Sample table') .setHeading('Name', 'Age', 'Eye color') .setAlignCenter(3) .addRowMatrix([ ['James Bond', 41, 'blue'], ['Harry Potter', 18, 'brown'], ['Scooby Doo', 23, 'brown'], ['Mickey Mouse', 120, 'black'] ]); // first column width is 8 characters and wrapped table.setWidth(1, 8).setWrapped(1); table.isWrapped(1) // true table.isWrapped(2) // false ``` #### instance.setWrappings(wrappings) Sets the wrapping property for all columns (wrapped content will generate more than one data row if needed). * `wrappings` - array of wrap boolean setting for each columns Example: ```javascript // for a 3 column table table.setWrappings([true, false, false]); ``` #### instance.getWrappings() Gets the wrapping property for all columns . Example: ```javascript // for a 3 column table table.setWrappings([true, false, false]); table.getWrappings() // [true, false, false] ``` #### instance.setCellMargin(margin) Sets internal margin for cell data (table default is 1). * `margin` - number of empty characters to use for cell margin Example 1 (no cell margin): ```javascript var table = new AsciiTable3('Sample table') .setHeading('Name', 'Age', 'Eye color') .setAlignCenter(3) .addRowMatrix([ ['John', 23, 'green'], ['Mary', 16, 'brown'], ['Rita', 47, 'blue'], ['Peter', 8, 'brown'] ]); table.setCellMargin(0); ``` ``` +-------------------+ | Sample table | +-----+---+---------+ |Name |Age|Eye color| +-----+---+---------+ |John | 23| green | |Mary | 16| brown | |Rita | 47| blue | |Peter| 8| brown | +-----+---+---------+ ``` Example 2 (cell margin set to 2): ```javascript table.setCellMargin(2); ``` ``` +-------------------------------+ | Sample table | +---------+-------+-------------+ | Name | Age | Eye color | +---------+-------+-------------+ | John | 23 | green | | Mary | 16 | brown | | Rita | 47 | blue | | Peter | 8 | brown | +---------+-------+-------------+ ``` #### instance.getCellMargin() Gets the current cell margin for the specified table instance. Example: ```javascript table.setCellMargin(2); table.getCellMargin() // 2 ``` #### instance.setJustify([enabled]) Justify all columns to be the same width. * `enabled` - Boolean for turning justify on or off (default is true). ```javascript var table = new AsciiTable3('Dummy title') .setHeading('Title', 'Count', 'Rate (%)') .addRowMatrix([ ['Dummy 1', 10, 2.3], ['Dummy 2', 5, 3.1], ['Dummy 3', 100, 3.14], ['Dummy 4', 0, 1], ]); table.setJustify(); console.log(table.toString()); ``` ``` +--------------------------------+ | Dummy title | +----------+----------+----------+ | Title | Count | Rate (%) | +----------+----------+----------+ | Dummy 1 | 10 | 2.3 | | Dummy 2 | 5 | 3.1 | | Dummy 3 | 100 | 3.14 | | Dummy 4 | 0 | 1 | +----------+----------+----------+ ``` #### instance.getJustify() Returns whether all table columns are to be rendered with the same width. ```javascript table.setJustify(); table.getJustify() // true ``` ### Clearing data #### instance.clear() Clear / reset all table data Example: ```javascript table.clear(); ``` #### instance.clearRows() Resets all row data, maintaining title, headings, widths and style. ```javascript table.clearRows(); ``` ### Sorting #### instance.sort(comparefunc) Sort the table rows according to a specific criteria. * `comparefunc` - compare function to run against the rows Example: ```javascript table.sort(function(a, b) { return a[2] - b[2]; }); console.log(table.toString()); ``` ``` +---+------+----+ | 2 | John | 34 | | 1 | Bob | 52 | | 3 | Jim | 83 | +---+------+----+ ``` #### instance.sortColumn(index, [comparefunc]) Sorting shortcut for targeting a specific column. * `index` - column idx to sort * `comparefunc` - sorting compare function to run against column values (optional) Example: ```javascript // This is equivalent to the `sort` example above table.sortColumn(2); ``` #### instance.sortColumnDesc(index) Descend sorting shortcut for targeting a specific column. * `index` - column idx to sort Example: ```javascript table.sortColumnDesc(1); // This is equivalent to the `sort` example above console.log(table.toString()); ``` ``` +---+------+----+ | 1 | Bob | 52 | | 2 | John | 34 | | 3 | Jim | 83 | +---+------+----+ ``` ### Transposing #### instance.transpose() Transposes table by exchanging rows for columns. Example: ```javascript const table = new AsciiTable3('Sample table') .setHeading('Name', 'Age', 'Eye color') .addRowMatrix([ ['John', 23, 'green'], ['Mary', 16, 'brown'], ['Rita', 47, 'blue'], ['Peter', 8, 'brown'] ]); console.log(table.toString()); ``` ``` +-------------------------+ | Sample table | +-------+-----+-----------+ | Name | Age | Eye color | +-------+-----+-----------+ | John | 23 | green | | Mary | 16 | brown | | Rita | 47 | blue | | Peter | 8 | brown | +-------+-----+-----------+ ``` ```javascript // transpose table table.transpose(); console.log(table.toString()); ``` ``` +------------------------------------------+ | Sample table | +-----------+-------+-------+------+-------+ | Name | John | Mary | Rita | Peter | | Age | 23 | 16 | 47 | 8 | | Eye color | green | brown | blue | brown | +-----------+-------+-------+------+-------+ ``` ### Serialization #### instance.toJSON() Return the JSON representation of the table, this also allows us to call `JSON.stringify` on the instance. Example: ```javascript var table = new AsciiTable3('Title'); table .setHeading('id', 'name') .addRow(1, 'Bob') .addRow(2, 'Steve') .setWidths([3, 10]); console.log(table.toJSON()); ``` ```json { "title": "Title", "heading": ["id","name"], "rows": [[1,"Bob"],[2,"Steve"]], "formatting": { "titleAlign": 2, "headingAlign": 2, "columns": { "aligns": [3,3], "widths": [3,10], "wrappings": [false,false] }, "justify": false } } ``` #### instance.fromJSON(obj) Populate the table from JSON object, should match the `toJSON` output above. * `obj` - json object Example: ```javascript var table = new AsciiTable3() .fromJSON({ "title": "Title", "heading": ["id","name"], "rows": [[1,"Bob"],[2,"Steve"]], "formatting": { "titleAlign": 2, "headingAlign": 2, "columns": { "aligns": [3,3], "widths": [3,10], "wrappings": [false,false] }, "justify": false } }); ``` ### Rendering #### instance.toString() Renders the instance as a string for output. Example: ```javascript // create table var table = new AsciiTable3('Sample table') .setHeading('Name', 'Age', 'Eye color') .setAlignCenter(3) .addRowMatrix([ ['John', 23, 'green'], ['Mary', 16, 'brown'], ['Rita', 47, 'blue'], ['Peter', 8, 'brown'] ]); console.log(table.toString()); ``` ``` +-------------------------+ | Sample table | +-------+-----+-----------+ | Name | Age | Eye color | +-------+-----+-----------+ | John | 23 | green | | Mary | 16 | brown | | Rita | 47 | blue | | Peter | 8 | brown | +-------+-----+-----------+ ``` # Install With [npm](https://npmjs.org): ```bash npm install ascii-table3 ```