| '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 |
| } |