1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | 'use strict';
|
9 |
|
10 | var typeOf = require('kind-of');
|
11 | var repeat = require('repeat-string');
|
12 | var longest = require('longest');
|
13 |
|
14 | module.exports = function alignText(val, fn) {
|
15 | var originalType = typeOf(val);
|
16 | var lines = val;
|
17 |
|
18 | if (originalType === 'string') {
|
19 | lines = val.split(/(?:\r\n|\n)/);
|
20 | } else if (originalType !== 'array') {
|
21 | throw new TypeError('align-text expects a string or array.');
|
22 | }
|
23 |
|
24 | var fnType = typeOf(fn);
|
25 | var max = longest(lines);
|
26 | var len = lines.length;
|
27 | var idx = -1;
|
28 | var res = [];
|
29 |
|
30 | while (++idx < len) {
|
31 | var line = String(lines[idx]);
|
32 | var diff;
|
33 |
|
34 | if (fnType === 'function') {
|
35 | diff = fn(line.length, max.length, line, lines, idx);
|
36 | } else if (fnType === 'number') {
|
37 | diff = fn;
|
38 | } else {
|
39 | diff = max.length - line.length;
|
40 | }
|
41 |
|
42 | if (typeOf(diff) === 'number') {
|
43 | res.push(repeat(' ', diff) + line);
|
44 | } else if (typeOf(diff) === 'object') {
|
45 | var result = repeat(diff.character || ' ', diff.indent || 0);
|
46 | res.push((diff.prefix || '') + result + line);
|
47 | }
|
48 | }
|
49 |
|
50 | if (originalType === 'array') return res;
|
51 | return res.join('\n');
|
52 | };
|