blob: 70369082712ebe5a30a8f55df8fcb867924094a9 (
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
42
|
const ansi = require('../util/ansi')
const wrap = require('../util/wrap')
const Label = require('./Label')
module.exports = 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(lines[i])
}
}
getWrappedLines() {
if (this.text.trim().length === 0) {
return []
}
return wrap(this.text, this.w).map(l => l.trim())
}
get h() {
return this.getWrappedLines().length
}
set h(newHeight) {
// Do nothing. Height is computed on the fly.
}
}
|