multiple fixes/improvements.
This commit is contained in:
parent
4cebb15918
commit
6a959074a4
|
@ -565,7 +565,7 @@ Screen.prototype._listenKeys = function(el) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (~self.keyable.indexOf(focused)) {
|
||||
if (focused && focused.keyable) {
|
||||
focused.emit('keypress', ch, key);
|
||||
focused.emit('key ' + key.full, ch, key);
|
||||
}
|
||||
|
@ -2912,7 +2912,7 @@ Element.prototype._getShrink = function(xi, xl, yi, yl, get) {
|
|||
return { xi: xi, xl: xl, yi: yi, yl: yl };
|
||||
};
|
||||
|
||||
Element.prototype._getCoords = function(get) {
|
||||
Element.prototype._getCoords = function(get, noscroll) {
|
||||
if (this.hidden) return;
|
||||
|
||||
// if (this.parent._rendering) get = true;
|
||||
|
@ -2956,7 +2956,7 @@ Element.prototype._getCoords = function(get) {
|
|||
// inside of the visible scroll area.
|
||||
// NOTE: Lists have a property where only
|
||||
// the list items are obfuscated.
|
||||
if (el) {
|
||||
if (el && !noscroll) {
|
||||
ppos = this.parent.lpos;
|
||||
|
||||
// The shrink option can cause a stack overflow
|
||||
|
@ -3039,6 +3039,11 @@ Element.prototype._getCoords = function(get) {
|
|||
}
|
||||
}
|
||||
|
||||
//if (this.parent.lpos) {
|
||||
// this.parent.lpos._scrollBottom = Math.max(
|
||||
// this.parent.lpos._scrollBottom, yl);
|
||||
//}
|
||||
|
||||
return {
|
||||
xi: xi,
|
||||
xl: xl,
|
||||
|
@ -3730,6 +3735,12 @@ ScrollableBox.prototype._scrollBottom = function() {
|
|||
}
|
||||
|
||||
var bottom = this.children.reduce(function(current, el) {
|
||||
if (!el.detached) {
|
||||
var l = el._getCoords(false, true);
|
||||
if (l) {
|
||||
return Math.max(current, el.rtop + (l.yl - l.yi));
|
||||
}
|
||||
}
|
||||
return Math.max(current, el.rtop + el.height);
|
||||
}, 0);
|
||||
|
||||
|
@ -4847,7 +4858,7 @@ Textbox.prototype.setValue = function(value) {
|
|||
}
|
||||
};
|
||||
|
||||
Textarea.prototype.submit = function() {
|
||||
Textbox.prototype.submit = function() {
|
||||
if (!this.__listener) return;
|
||||
return this.__listener('\r', { name: 'enter' });
|
||||
};
|
||||
|
@ -4994,6 +5005,14 @@ ProgressBar.prototype.render = function() {
|
|||
|
||||
this.screen.fillRegion(dattr, this.ch, xi, xl, yi, yl);
|
||||
|
||||
if (this.content) {
|
||||
var line = this.screen.lines[yi];
|
||||
for (var i = 0; i < this.content.length; i++) {
|
||||
line[xi + i][1] = this.content[i];
|
||||
}
|
||||
line.dirty = true;
|
||||
}
|
||||
|
||||
return ret;
|
||||
};
|
||||
|
||||
|
@ -5415,7 +5434,7 @@ Prompt.prototype.type = function(text, value, callback) {
|
|||
this.show();
|
||||
this.setContent(' ' + text);
|
||||
|
||||
if (value) this._.input.value = value;
|
||||
this._.input.value = value;
|
||||
|
||||
this.screen.saveFocus();
|
||||
|
||||
|
@ -5561,6 +5580,16 @@ Message.prototype.display = function(text, time, callback) {
|
|||
if (time == null) time = 3;
|
||||
//time = time || 3;
|
||||
|
||||
var parent = this.parent;
|
||||
this.detach();
|
||||
parent.append(this);
|
||||
|
||||
if (this.scrollable) {
|
||||
this.screen.saveFocus();
|
||||
this.focus();
|
||||
this.setScroll(0);
|
||||
}
|
||||
|
||||
this.show();
|
||||
this.setContent(text);
|
||||
this.screen.render();
|
||||
|
@ -5569,6 +5598,9 @@ Message.prototype.display = function(text, time, callback) {
|
|||
var end = function() {
|
||||
if (end.done) return;
|
||||
end.done = true;
|
||||
if (self.scrollable) {
|
||||
self.screen.restoreFocus();
|
||||
}
|
||||
self.hide();
|
||||
self.screen.render();
|
||||
if (callback) callback();
|
||||
|
@ -5577,6 +5609,18 @@ Message.prototype.display = function(text, time, callback) {
|
|||
setTimeout(function() {
|
||||
self.screen.on('keypress', function fn(ch, key) {
|
||||
if (key.name === 'mouse') return;
|
||||
if (self.scrollable) {
|
||||
if ((key.name === 'up' || (self.options.vi && key.name === 'k'))
|
||||
|| (key.name === 'down' || (self.options.vi && key.name === 'j'))
|
||||
|| (self.options.vi && key.name === 'u' && key.ctrl)
|
||||
|| (self.options.vi && key.name === 'd' && key.ctrl)
|
||||
|| (self.options.vi && key.name === 'b' && key.ctrl)
|
||||
|| (self.options.vi && key.name === 'f' && key.ctrl)
|
||||
|| (self.options.vi && key.name === 'g' && !key.shift)
|
||||
|| (self.options.vi && key.name === 'g' && key.shift)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
self.screen.removeListener('keypress', fn);
|
||||
end();
|
||||
});
|
||||
|
@ -5869,6 +5913,7 @@ Listbar.prototype.appendItem = function(item, callback) {
|
|||
|
||||
if (typeof item === 'object') {
|
||||
cmd = item;
|
||||
if (cmd.prefix == null) cmd.prefix = (this.items.length + 1) + '';
|
||||
}
|
||||
|
||||
if (typeof item === 'string') {
|
||||
|
@ -5891,11 +5936,9 @@ Listbar.prototype.appendItem = function(item, callback) {
|
|||
cmd.prefix = cmd.keys[0];
|
||||
}
|
||||
|
||||
title = (cmd.prefix != null ? '{light-black-fg}'
|
||||
+ cmd.prefix
|
||||
+ '{/light-black-fg}'
|
||||
+ ':' : '')
|
||||
+ cmd.text;
|
||||
var t = generateTags(this.style.prefix || { fg: 'lightblack' });
|
||||
|
||||
title = (cmd.prefix != null ? t.open + cmd.prefix + t.close + ':' : '') + cmd.text;
|
||||
|
||||
len = ((cmd.prefix != null ? cmd.prefix + ':' : '') + cmd.text).length;
|
||||
|
||||
|
@ -5944,6 +5987,11 @@ Listbar.prototype.appendItem = function(item, callback) {
|
|||
|
||||
if (cmd.callback) {
|
||||
//el.on('press', cmd.callback);
|
||||
//this.on('select', function(el) {
|
||||
// if (el._.cmd.callback) {
|
||||
// el._.cmd.callback();
|
||||
// }
|
||||
//});
|
||||
if (cmd.keys) {
|
||||
this.screen.key(cmd.keys, function(ch, key) {
|
||||
self.emit('action', el, self.selected);
|
||||
|
@ -6144,6 +6192,32 @@ Passbox.prototype.type = 'passbox';
|
|||
* Helpers
|
||||
*/
|
||||
|
||||
function generateTags(style, text) {
|
||||
var open = ''
|
||||
, close = '';
|
||||
|
||||
Object.keys(style).forEach(function(key) {
|
||||
var val = style[key];
|
||||
if (typeof val === 'string') {
|
||||
val = val.replace(/^light(?!-)/, 'light-');
|
||||
open = '{' + val + '-' + key + '}' + open;
|
||||
close += '{/' + val + '-' + key + '}';
|
||||
} else {
|
||||
open = '{' + key + '}' + open;
|
||||
close += '{/' + key + '}';
|
||||
}
|
||||
});
|
||||
|
||||
if (text != null) {
|
||||
return open + text + close;
|
||||
}
|
||||
|
||||
return {
|
||||
open: open,
|
||||
close: close
|
||||
};
|
||||
}
|
||||
|
||||
function merge(a, b) {
|
||||
Object.keys(b).forEach(function(key) {
|
||||
a[key] = b[key];
|
||||
|
|
Loading…
Reference in New Issue