add "interactive" option for lists. fixes #103.
This commit is contained in:
parent
d69ed5c294
commit
00a0f800f9
|
@ -569,7 +569,12 @@ A scrollable list which can display selectable items.
|
|||
- **keys** - use predefined keys for navigating the list.
|
||||
- **vi** - use vi keys with the `keys` option.
|
||||
- **items** - an array of strings which become the list's items.
|
||||
- **search** - a function that is called when `vi` mode is enabled and the key `/` is pressed. This function accepts a callback function which should be called with the search string. The search string is then used to jump to an item that is found in `items`.
|
||||
- **search** - a function that is called when `vi` mode is enabled and the key
|
||||
`/` is pressed. This function accepts a callback function which should be
|
||||
called with the search string. The search string is then used to jump to an
|
||||
item that is found in `items`.
|
||||
- **interactive** - whether the list is interactive or can have items selected
|
||||
(default: true).
|
||||
|
||||
##### Properties:
|
||||
|
||||
|
|
|
@ -3384,7 +3384,7 @@ Element.prototype.render = function() {
|
|||
ci += c[0].length - 1;
|
||||
attr = this.screen.attrCode(c[0], attr, dattr);
|
||||
// Ignore foreground changes for selected items.
|
||||
if (this.parent._isList
|
||||
if (this.parent._isList && this.parent.interactive
|
||||
&& this.parent.items[this.parent.selected] === this) {
|
||||
attr = (attr & ~(0x1ff << 9)) | (dattr & (0x1ff << 9));
|
||||
}
|
||||
|
@ -4229,6 +4229,8 @@ function List(options) {
|
|||
this.style.item.focus = this.options.itemFocusEffects;
|
||||
}
|
||||
|
||||
this.interactive = options.interactive !== false;
|
||||
|
||||
this.mouse = options.mouse || false;
|
||||
|
||||
if (options.items) {
|
||||
|
@ -4399,7 +4401,7 @@ List.prototype.appendItem = function(item) {
|
|||
['bg', 'fg', 'bold', 'underline',
|
||||
'blink', 'inverse', 'invisible'].forEach(function(name) {
|
||||
options[name] = function() {
|
||||
var attr = self.items[self.selected] === item
|
||||
var attr = self.items[self.selected] === item && self.interactive
|
||||
? self.style.selected[name]
|
||||
: self.style.item[name];
|
||||
if (typeof attr === 'function') attr = attr(item);
|
||||
|
@ -4506,6 +4508,10 @@ List.prototype.setItems = function(items) {
|
|||
};
|
||||
|
||||
List.prototype.select = function(index) {
|
||||
if (!this.interactive) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.items.length) {
|
||||
this.selected = 0;
|
||||
this.value = '';
|
||||
|
@ -4549,6 +4555,10 @@ List.prototype.pick = function(label, callback) {
|
|||
label = null;
|
||||
}
|
||||
|
||||
if (!this.interactive) {
|
||||
return callback();
|
||||
}
|
||||
|
||||
var self = this;
|
||||
var focused = this.screen.focused;
|
||||
if (focused && focused._done) focused._done('stop');
|
||||
|
|
Loading…
Reference in New Issue