add BarExtenderRev
Vladimir Bauer
3 years ago
| 53 | 53 |
buffers [3]*bytes.Buffer
|
| 54 | 54 |
filler BarFiller
|
| 55 | 55 |
middleware func(BarFiller) BarFiller
|
| 56 | |
extender extenderFunc
|
| 57 | 56 |
debugOut io.Writer
|
|
57 |
|
|
58 |
extender struct {
|
|
59 |
fn extenderFunc
|
|
60 |
rev bool
|
|
61 |
}
|
| 58 | 62 |
|
| 59 | 63 |
afterBar *Bar // key for (*pState).queueBars
|
| 60 | 64 |
sync bool
|
|
| 377 | 381 |
}
|
| 378 | 382 |
}
|
| 379 | 383 |
s.aborted = !s.completed
|
| 380 | |
s.extender = makePanicExtender(p)
|
|
384 |
s.extender.fn = makePanicExtender(p)
|
| 381 | 385 |
b.recoveredPanic = p
|
| 382 | 386 |
}
|
| 383 | |
if s.extender != nil {
|
| 384 | |
rows = s.extender(rows, s.reqWidth, stat)
|
|
387 |
if fn := s.extender.fn; fn != nil {
|
|
388 |
rows = fn(rows, s.reqWidth, stat)
|
|
389 |
if s.extender.rev {
|
|
390 |
for left, right := 0, len(rows)-1; left < right; left, right = left+1, right-1 {
|
|
391 |
rows[left], rows[right] = rows[right], rows[left]
|
|
392 |
}
|
|
393 |
}
|
| 385 | 394 |
}
|
| 386 | 395 |
frame := &renderFrame{
|
| 387 | 396 |
rows: rows,
|
|
| 402 | 411 |
if b.recoveredPanic == nil {
|
| 403 | 412 |
rows = append(rows, s.draw(stat))
|
| 404 | 413 |
}
|
| 405 | |
if s.extender != nil {
|
| 406 | |
rows = s.extender(rows, s.reqWidth, stat)
|
|
414 |
if fn := s.extender.fn; fn != nil {
|
|
415 |
rows = fn(rows, s.reqWidth, stat)
|
|
416 |
if s.extender.rev {
|
|
417 |
for left, right := 0, len(rows)-1; left < right; left, right = left+1, right-1 {
|
|
418 |
rows[left], rows[right] = rows[right], rows[left]
|
|
419 |
}
|
|
420 |
}
|
| 407 | 421 |
}
|
| 408 | 422 |
frame := &renderFrame{
|
| 409 | 423 |
rows: rows,
|
| 118 | 118 |
}
|
| 119 | 119 |
}
|
| 120 | 120 |
|
| 121 | |
// BarExtender provides a way to extend bar to the next new line.
|
|
121 |
// BarExtender extends bar with arbitrary lines. Provided BarFiller will be
|
|
122 |
// called at each render/flush cycle. Any lines written to the underlying
|
|
123 |
// io.Writer will be printed after the bar itself.
|
| 122 | 124 |
func BarExtender(filler BarFiller) BarOption {
|
|
125 |
return barExtender(filler, false)
|
|
126 |
}
|
|
127 |
|
|
128 |
// BarExtenderRev extends bar with arbitrary lines in reverse order. Provided
|
|
129 |
// BarFiller will be called at each render/flush cycle. Any lines written
|
|
130 |
// to the underlying io.Writer will be printed before the bar itself.
|
|
131 |
func BarExtenderRev(filler BarFiller) BarOption {
|
|
132 |
return barExtender(filler, true)
|
|
133 |
}
|
|
134 |
|
|
135 |
func barExtender(filler BarFiller, rev bool) BarOption {
|
| 123 | 136 |
if filler == nil {
|
| 124 | 137 |
return nil
|
| 125 | 138 |
}
|
| 126 | 139 |
return func(s *bState) {
|
| 127 | |
s.extender = makeExtenderFunc(filler)
|
|
140 |
s.extender.fn = makeExtenderFunc(filler)
|
|
141 |
s.extender.rev = rev
|
| 128 | 142 |
}
|
| 129 | 143 |
}
|
| 130 | 144 |
|