123456789101112131415161718192021222324252627282930313233343536373839404142 |
- import * as ansi from 'tui-lib/util/ansi'
- import Label from './Label.js'
- export default class WrapLabel extends Label {
- // A word-wrapping text display. Given a width, wraps text to fit.
- constructor(...args) {
- super(...args)
- }
- fixLayout() {
- // Override Label.fixLayout to do nothing. We don't want to make the
- // width of this label be set to the content of the text! (That would
- // defeat the entire point of word wrapping.)
- }
- writeTextTo(writable) {
- const lines = this.getWrappedLines()
- for (let i = 0; i < lines.length; i++) {
- writable.write(ansi.moveCursor(this.absTop + i, this.absLeft))
- writable.write(this.processFormatting(lines[i]))
- }
- }
- getWrappedLines() {
- if (this.text.trim().length === 0) {
- return []
- }
- return ansi.wrapToColumns(this.text, this.w - 1).map(l => l.trim())
- }
- get h() {
- return this.getWrappedLines().length
- }
- set h(newHeight) {
- // Do nothing. Height is computed on the fly.
- }
- }
|