You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.2 KiB
JavaScript
53 lines
1.2 KiB
JavaScript
5 years ago
|
/*!
|
||
|
* align-text <https://github.com/jonschlinkert/align-text>
|
||
|
*
|
||
|
* Copyright (c) 2015, Jon Schlinkert.
|
||
|
* Licensed under the MIT License.
|
||
|
*/
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
var typeOf = require('kind-of');
|
||
|
var repeat = require('repeat-string');
|
||
|
var longest = require('longest');
|
||
|
|
||
|
module.exports = function alignText(val, fn) {
|
||
|
var lines, type = typeOf(val);
|
||
|
|
||
|
if (type === 'array') {
|
||
|
lines = val;
|
||
|
} else if (type === 'string') {
|
||
|
lines = val.split(/(?:\r\n|\n)/);
|
||
|
} else {
|
||
|
throw new TypeError('align-text expects a string or array.');
|
||
|
}
|
||
|
|
||
|
var fnType = typeOf(fn);
|
||
|
var len = lines.length;
|
||
|
var max = longest(lines);
|
||
|
var res = [], i = 0;
|
||
|
|
||
|
while (len--) {
|
||
|
var line = String(lines[i++]);
|
||
|
var diff;
|
||
|
|
||
|
if (fnType === 'function') {
|
||
|
diff = fn(line.length, max.length, line, lines, i);
|
||
|
} else if (fnType === 'number') {
|
||
|
diff = fn;
|
||
|
} else {
|
||
|
diff = max.length - line.length;
|
||
|
}
|
||
|
|
||
|
if (typeOf(diff) === 'number') {
|
||
|
res.push(repeat(' ', diff) + line);
|
||
|
} else if (typeOf(diff) === 'object') {
|
||
|
var result = repeat(diff.character || ' ', diff.indent || 0);
|
||
|
res.push((diff.prefix || '') + result + line);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (type === 'array') return res;
|
||
|
return res.join('\n');
|
||
|
};
|