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