You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.4 KiB
65 lines
1.4 KiB
'use strict' |
|
var stringWidth = require('string-width') |
|
|
|
exports.center = alignCenter |
|
exports.left = alignLeft |
|
exports.right = alignRight |
|
|
|
// lodash's way of generating pad characters. |
|
|
|
function createPadding (width) { |
|
var result = '' |
|
var string = ' ' |
|
var n = width |
|
do { |
|
if (n % 2) { |
|
result += string; |
|
} |
|
n = Math.floor(n / 2); |
|
string += string; |
|
} while (n); |
|
|
|
return result; |
|
} |
|
|
|
function alignLeft (str, width) { |
|
var trimmed = str.trimRight() |
|
if (trimmed.length === 0 && str.length >= width) return str |
|
var padding = '' |
|
var strWidth = stringWidth(trimmed) |
|
|
|
if (strWidth < width) { |
|
padding = createPadding(width - strWidth) |
|
} |
|
|
|
return trimmed + padding |
|
} |
|
|
|
function alignRight (str, width) { |
|
var trimmed = str.trimLeft() |
|
if (trimmed.length === 0 && str.length >= width) return str |
|
var padding = '' |
|
var strWidth = stringWidth(trimmed) |
|
|
|
if (strWidth < width) { |
|
padding = createPadding(width - strWidth) |
|
} |
|
|
|
return padding + trimmed |
|
} |
|
|
|
function alignCenter (str, width) { |
|
var trimmed = str.trim() |
|
if (trimmed.length === 0 && str.length >= width) return str |
|
var padLeft = '' |
|
var padRight = '' |
|
var strWidth = stringWidth(trimmed) |
|
|
|
if (strWidth < width) { |
|
var padLeftBy = parseInt((width - strWidth) / 2, 10) |
|
padLeft = createPadding(padLeftBy) |
|
padRight = createPadding(width - (strWidth + padLeftBy)) |
|
} |
|
|
|
return padLeft + trimmed + padRight |
|
}
|
|
|