blob: eae8960af5ff1f0b73f131693eb5aea2db54d2f2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
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.
}
}
|