Security News
The Push to Ban Ransom Payments Is Gaining Momentum
Ransomware costs victims an estimated $30 billion per year and has gotten so out of control that global support for banning payments is gaining momentum.
ascii-data-table
Advanced tools
Readme
This module provides functionality to render tables with text borders / outlines so it can be pasted into the medium of choice.
The configuration is very limited by design, all that's configurable in the current version is the maximun width of the columns.
The API exposes only two methods to render a table: table(rows, [maxColWidth])
where rows
is expected to be
an array with an index for every row, and each row is also expected to be an array
with one index for every column. The data in the columns can be of any Javascript type
since it will be serialized before printed.
The second method to generate a table is: tableFromSerializedData(serializedRows, [maxColWidth])
where serializedRows
is expected to be in the same format as the previously described method,
but all data must already be serialized. This method should be used when the data stays the same
but are generated with multiple maxColWidths.
To serialize the data, the method serializeData(rows)
is exposed. For the moment, all it does is to
table JSON.stringify
on the data.
To get the width of the widest column (can be used to set the max value on a slider), maxColumnWidth(rows)
is exposed. The rows should not already be serialized when calling this method.
All rows should have the same number of columns, and the first row is expected to be the header column with titles for each column.
[
['first column', 'second column'], // title row
['my data row 1 col 1', 'my data row 1 col 2'], // first data row
['my data row 2 col 1', 'my data row 2 col 2'] // second data row
]
With default max width, the above would produce:
╒═════════════════════╤═════════════════════╕
│"first column" │"second column" │
╞═════════════════════╪═════════════════════╡
│"my data row 1 col 1"│"my data row 1 col 2"│
├─────────────────────┼─────────────────────┤
│"my data row 2 col 1"│"my data row 2 col 2"│
└─────────────────────┴─────────────────────┘
Install with npm
in your working directory:
npm install ascii-data-table --save
Install with bower
in your working directory:
bower install ascii-data-table --save
Two packages are produced, one for Node.js environment and one for web browsers.
Usage in Node.js varies depending if the will be used within a ES2015 application or not.
In ES2015
// If install with npm
import AsciiTable from 'ascii-data-table'
// or if installed by cloning git repo, use the correct path
//import AsciiTable from 'lib/ascii-data-table'
// The data to render
const items = [['x', 'y'], ['a', 'b'], ['c', 'd']]
// Not required, default is 30
const maxColumnWidth = 15
// Render and save in 'res'
const res = AsciiTable.table(items, maxColumnWidth)
In ES 5.5
// If install with npm
var AsciiTable = require('ascii-data-table').default
// or if installed by cloning git repo, use the correct path
//var AsciiTable = require('lib/ascii-data-table').default
var items = [['x', 'y'], ['a', 'b'], ['c', 'd']]
var res = AsciiTable.table(items)
A bundle for web browsers is created and can be found in lib
.
<html>
<head>
<script type="text/javascript" src="/components/lib/bundle.js"></script>
<script type="text/javascript">
function load() {
var items = [['x', 'y'], ['a', 'b'], ['c', 'd']]
var output = AsciiTable.table(items)
document.getElementById('my-table').innerHTML = output
console.log(output)
}
</script>
</head>
<body onload="load()">
<pre id="my-table">loading...</pre>
</body>
</html>
A functional / stateless React Component is created and lies in lib/bundle-react.js
. It
assumes there's a global varaible React
available.
<html>
<head>
<script src="//fb.me/react-0.14.3.js"></script>
<script src="//fb.me/react-dom-0.14.3.js"></script>
<script src="/components/ascii-data-table/lib/bundle-react.js"></script>
<script type="text/javascript">
var items = [['x', 'y'], ['a', 'b'], ['c', 'd']]
function load() {
ReactDOM.render(
React.createElement(AsciiTableComponent, {rows: items}),
document.getElementById('myApp')
)
}
</script>
</head>
<body onload="load()">
<div id="myApp">loading...</div>
</body>
</html>
A bundle for Angular 1.X is created and can be found in lib/bundle-angular.js
and
assumes there's a global variable named angular
available.
<html>
<head>
<script type="text/javascript" src="/components/angular/angular.js"></script>
<script type="text/javascript" src="/components/ascii-data-table/lib/bundle-angular.js"></script>
<script type="text/javascript">
var app = angular
.module('myApp', ['AsciiTableModule'])
.controller('TableController', ['$scope', 'AsciiTable', function($scope, AsciiTable){
var items = [['x', 'y'], ['a', 'b'], ['c', 'd']]
$scope.data = AsciiTable.table(items)
}])
</script>
</head>
<body ng-app="myApp">
<pre id="table" ng-controller="TableController" ng-bind="data"></pre>
</body>
</html>
You can try online here: Online demo
In the examples
folder there are examples for node and web browser environments.
One cool thing in the browser demo is that you can hook up a range slider to the maximun
width of the columns, giving this effect:
table npm test
to execute test in both Node.js and browser environments.
table npm table test:watch
to have tests table on file changes.
All bug reports, feature requests and pull requests are welcome. This project uses the Javascript Standard Style and a lint check will table before all tests and builds.
FAQs
Render data in a width adjustable ascii table.
The npm package ascii-data-table receives a total of 380 weekly downloads. As such, ascii-data-table popularity was classified as not popular.
We found that ascii-data-table demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Ransomware costs victims an estimated $30 billion per year and has gotten so out of control that global support for banning payments is gaining momentum.
Application Security
New SEC disclosure rules aim to enforce timely cyber incident reporting, but fear of job loss and inadequate resources lead to significant underreporting.
Security News
The Python Software Foundation has secured a 5-year sponsorship from Fastly that supports PSF's activities and events, most notably the security and reliability of the Python Package Index (PyPI).