1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- 'use strict'
- const stringWidth = require('string-width')
- function ansiAlign (text, opts) {
- if (!text) return text
- opts = opts || {}
- const align = opts.align || 'center'
- // short-circuit `align: 'left'` as no-op
- if (align === 'left') return text
- const split = opts.split || '\n'
- const pad = opts.pad || ' '
- const widthDiffFn = align !== 'right' ? halfDiff : fullDiff
- let returnString = false
- if (!Array.isArray(text)) {
- returnString = true
- text = String(text).split(split)
- }
- let width
- let maxWidth = 0
- text = text.map(function (str) {
- str = String(str)
- width = stringWidth(str)
- maxWidth = Math.max(width, maxWidth)
- return {
- str,
- width
- }
- }).map(function (obj) {
- return new Array(widthDiffFn(maxWidth, obj.width) + 1).join(pad) + obj.str
- })
- return returnString ? text.join(split) : text
- }
- ansiAlign.left = function left (text) {
- return ansiAlign(text, { align: 'left' })
- }
- ansiAlign.center = function center (text) {
- return ansiAlign(text, { align: 'center' })
- }
- ansiAlign.right = function right (text) {
- return ansiAlign(text, { align: 'right' })
- }
- module.exports = ansiAlign
- function halfDiff (maxWidth, curWidth) {
- return Math.floor((maxWidth - curWidth) / 2)
- }
- function fullDiff (maxWidth, curWidth) {
- return maxWidth - curWidth
- }
|