237 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			237 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# align-text [](http://badge.fury.io/js/align-text)  [](https://travis-ci.org/jonschlinkert/align-text)
 | 
						|
 | 
						|
> Align the text in a string.
 | 
						|
 | 
						|
**Examples**
 | 
						|
 | 
						|
Align text values in an array:
 | 
						|
 | 
						|
```js
 | 
						|
align([1, 2, 3, 100]);
 | 
						|
//=> ['  1', '  2', '  3', '100']
 | 
						|
```
 | 
						|
 | 
						|
Or [do stuff like this](./example.js):
 | 
						|
 | 
						|
[](./example.js)
 | 
						|
 | 
						|
Visit [the example](./example.js) to see how this works.
 | 
						|
 | 
						|
## Install
 | 
						|
 | 
						|
Install with [npm](https://www.npmjs.com/)
 | 
						|
 | 
						|
```sh
 | 
						|
$ npm i align-text --save
 | 
						|
```
 | 
						|
 | 
						|
## Usage
 | 
						|
 | 
						|
```js
 | 
						|
var align = require('align-text');
 | 
						|
align(text, callback_function_or_integer);
 | 
						|
```
 | 
						|
 | 
						|
**Params**
 | 
						|
 | 
						|
* `text` can be a **string or array**. If a string is passed, a string will be returned. If an array is passed, an array will be returned.
 | 
						|
* `callback|integer`: if an integer, the text will be indented by that amount. If a function, it must return an integer representing the amount of leading indentation to use as `align` loops over each line.
 | 
						|
 | 
						|
**Example**
 | 
						|
 | 
						|
```js
 | 
						|
align(text, 4);
 | 
						|
```
 | 
						|
 | 
						|
Would align:
 | 
						|
 | 
						|
```
 | 
						|
abc
 | 
						|
abc
 | 
						|
abc
 | 
						|
```
 | 
						|
 | 
						|
To:
 | 
						|
 | 
						|
```
 | 
						|
    abc
 | 
						|
    abc
 | 
						|
    abc
 | 
						|
```
 | 
						|
 | 
						|
## callback
 | 
						|
 | 
						|
### params
 | 
						|
 | 
						|
The callback is used to determine the indentation of each line and gets the following params:
 | 
						|
 | 
						|
* `len` the length of the "current" line
 | 
						|
* `longest` the length of the longest line
 | 
						|
* `line` the current line (string) being aligned
 | 
						|
* `lines` the array of all lines
 | 
						|
 | 
						|
### return
 | 
						|
 | 
						|
The callback may return:
 | 
						|
 | 
						|
* an integer that represents the number of spaces to use for padding,
 | 
						|
* or an object with the following properties:
 | 
						|
  - `indent`: **{Number}** the amount of indentation to use. Default is `0` when an object is returned.
 | 
						|
  - `character`: **{String}** the character to use for indentation. Default is `''` (empty string) when an object is returned.
 | 
						|
  - `prefix`: **{String}** leading characters to use at the beginning of each line. `''` (empty string) when an object is returned.
 | 
						|
 | 
						|
**Integer example:**
 | 
						|
 | 
						|
```js
 | 
						|
// calculate half the difference between the length
 | 
						|
// of the current line and the longest line
 | 
						|
function centerAlign(len, longest, line, lines) {
 | 
						|
  return Math.floor((longest - len) / 2);
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
**Object example:**
 | 
						|
 | 
						|
```js
 | 
						|
function centerAlign(len, longest, line, lines) {
 | 
						|
  return {
 | 
						|
    character: '\t',
 | 
						|
    indent: Math.floor((longest - len) / 2),
 | 
						|
    prefix: '~ ',
 | 
						|
  }
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
## Usage examples
 | 
						|
 | 
						|
### Center align
 | 
						|
 | 
						|
Using the `centerAlign` function from above:
 | 
						|
 | 
						|
```js
 | 
						|
align(text, centerAlign);
 | 
						|
```
 | 
						|
 | 
						|
Would align this text:
 | 
						|
 | 
						|
```js
 | 
						|
Lorem ipsum dolor sit amet
 | 
						|
consectetur adipiscin
 | 
						|
elit, sed do eiusmod tempor incididun
 | 
						|
ut labore et dolor
 | 
						|
magna aliqua. Ut enim ad mini
 | 
						|
veniam, quis
 | 
						|
```
 | 
						|
 | 
						|
Resulting in this:
 | 
						|
 | 
						|
```
 | 
						|
     Lorem ipsum dolor sit amet,
 | 
						|
        consectetur adipiscing
 | 
						|
elit, sed do eiusmod tempor incididunt
 | 
						|
         ut labore et dolore
 | 
						|
    magna aliqua. Ut enim ad minim
 | 
						|
             veniam, quis
 | 
						|
```
 | 
						|
 | 
						|
**Customize**
 | 
						|
 | 
						|
If you wanted to add more padding on the left, just pass the number in the callback.
 | 
						|
 | 
						|
For example, to add 4 spaces before every line:
 | 
						|
 | 
						|
```js
 | 
						|
function centerAlign(len, longest, line, lines) {
 | 
						|
  return 4 + Math.floor((longest - len) / 2);
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
Would result in:
 | 
						|
 | 
						|
```
 | 
						|
         Lorem ipsum dolor sit amet,
 | 
						|
            consectetur adipiscing
 | 
						|
    elit, sed do eiusmod tempor incididunt
 | 
						|
             ut labore et dolore
 | 
						|
        magna aliqua. Ut enim ad minim
 | 
						|
                 veniam, quis
 | 
						|
```
 | 
						|
 | 
						|
### Bullets
 | 
						|
 | 
						|
```js
 | 
						|
align(text, function (len, max, line, lines) {
 | 
						|
  return {prefix: ' - '};
 | 
						|
});
 | 
						|
```
 | 
						|
 | 
						|
Would return:
 | 
						|
 | 
						|
```
 | 
						|
- Lorem ipsum dolor sit amet,
 | 
						|
- consectetur adipiscing
 | 
						|
- elit, sed do eiusmod tempor incididunt
 | 
						|
- ut labore et dolore
 | 
						|
- magna aliqua. Ut enim ad minim
 | 
						|
- veniam, quis
 | 
						|
```
 | 
						|
 | 
						|
### Different indent character
 | 
						|
 | 
						|
```js
 | 
						|
align(text, function (len, max, line, lines) {
 | 
						|
  return { 
 | 
						|
    indent: Math.floor((max - len) / 2), 
 | 
						|
    character: '~', 
 | 
						|
  };
 | 
						|
});
 | 
						|
```
 | 
						|
 | 
						|
Would return
 | 
						|
 | 
						|
```
 | 
						|
~~~~~Lorem ipsum dolor sit amet,
 | 
						|
~~~~~~~~consectetur adipiscing
 | 
						|
elit, sed do eiusmod tempor incididunt
 | 
						|
~~~~~~~~~ut labore et dolore
 | 
						|
~~~~magna aliqua. Ut enim ad minim
 | 
						|
~~~~~~~~~~~~~veniam, quis
 | 
						|
```
 | 
						|
 | 
						|
## Related projects
 | 
						|
 | 
						|
* [center-align](https://github.com/jonschlinkert/center-align): Center-align the text in a string.
 | 
						|
* [justify](https://github.com/bahamas10/node-justify): Left or right (or both) justify text using a custom width and character
 | 
						|
* [longest](https://github.com/jonschlinkert/longest): Get the longest item in an array.
 | 
						|
* [right-align](https://github.com/jonschlinkert/right-align): Right-align the text in a string.
 | 
						|
* [repeat-string](https://github.com/jonschlinkert/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string.
 | 
						|
* [word-wrap](https://github.com/jonschlinkert/word-wrap): Wrap words to a specified length.
 | 
						|
 | 
						|
## Running tests
 | 
						|
 | 
						|
Install dev dependencies:
 | 
						|
 | 
						|
```sh
 | 
						|
$ npm i -d && npm test
 | 
						|
```
 | 
						|
 | 
						|
## Contributing
 | 
						|
 | 
						|
Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/align-text/issues/new)
 | 
						|
 | 
						|
## Author
 | 
						|
 | 
						|
**Jon Schlinkert**
 | 
						|
 | 
						|
+ [github/jonschlinkert](https://github.com/jonschlinkert)
 | 
						|
+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
 | 
						|
 | 
						|
## License
 | 
						|
 | 
						|
Copyright © 2015 [Jon Schlinkert](https://github.com/jonschlinkert)
 | 
						|
Released under the MIT license.
 | 
						|
 | 
						|
***
 | 
						|
 | 
						|
_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on June 09, 2015._
 |