1'use strict' 2var stringWidth = require('string-width') 3 4exports.center = alignCenter 5exports.left = alignLeft 6exports.right = alignRight 7 8// lodash's way of generating pad characters. 9 10function createPadding (width) { 11 var result = '' 12 var string = ' ' 13 var n = width 14 do { 15 if (n % 2) { 16 result += string; 17 } 18 n = Math.floor(n / 2); 19 string += string; 20 } while (n); 21 22 return result; 23} 24 25function alignLeft (str, width) { 26 var trimmed = str.trimRight() 27 if (trimmed.length === 0 && str.length >= width) return str 28 var padding = '' 29 var strWidth = stringWidth(trimmed) 30 31 if (strWidth < width) { 32 padding = createPadding(width - strWidth) 33 } 34 35 return trimmed + padding 36} 37 38function alignRight (str, width) { 39 var trimmed = str.trimLeft() 40 if (trimmed.length === 0 && str.length >= width) return str 41 var padding = '' 42 var strWidth = stringWidth(trimmed) 43 44 if (strWidth < width) { 45 padding = createPadding(width - strWidth) 46 } 47 48 return padding + trimmed 49} 50 51function alignCenter (str, width) { 52 var trimmed = str.trim() 53 if (trimmed.length === 0 && str.length >= width) return str 54 var padLeft = '' 55 var padRight = '' 56 var strWidth = stringWidth(trimmed) 57 58 if (strWidth < width) { 59 var padLeftBy = parseInt((width - strWidth) / 2, 10) 60 padLeft = createPadding(padLeftBy) 61 padRight = createPadding(width - (strWidth + padLeftBy)) 62 } 63 64 return padLeft + trimmed + padRight 65} 66