mirror of
https://github.com/embarklabs/neo-blessed.git
synced 2025-01-09 10:42:02 +00:00
fix list.removeItem. add list.insertItem, list.setItem. fixes #18.
This commit is contained in:
parent
b21e535391
commit
f89e6661f3
16
README.md
16
README.md
@ -736,14 +736,22 @@ A scrollable list which can display selectable items.
|
|||||||
|
|
||||||
- inherits all from Box.
|
- inherits all from Box.
|
||||||
- __add/addItem(text)__ - add an item based on a string.
|
- __add/addItem(text)__ - add an item based on a string.
|
||||||
- __getItemIndex(child)__ - returns the item index from the list. child can be
|
|
||||||
an element, index, or string.
|
|
||||||
- __getItem(child)__ - returns the item element. child can be an element,
|
|
||||||
index, or string.
|
|
||||||
- __removeItem(child)__ - removes an item from the list. child can be an
|
- __removeItem(child)__ - removes an item from the list. child can be an
|
||||||
element, index, or string.
|
element, index, or string.
|
||||||
|
- __pushItem(child)__ - push an item onto the list.
|
||||||
|
- __popItem()__ - pop an item off the list.
|
||||||
|
- __unshiftItem(child)__ - unshift an item onto the list.
|
||||||
|
- __shiftItem()__ - shift an item off the list.
|
||||||
|
- __insertItem(i, child)__ - inserts an item to the list. child can be an
|
||||||
|
element, index, or string.
|
||||||
|
- __getItem(child)__ - returns the item element. child can be an element,
|
||||||
|
index, or string.
|
||||||
|
- __setItem(child, content)__ - set item to content.
|
||||||
|
- __spliceItem(i, n, item1, ...)__ - remove and insert items to the list.
|
||||||
- __clearItems()__ - clears all items from the list.
|
- __clearItems()__ - clears all items from the list.
|
||||||
- __setItems(items)__ - sets the list items to multiple strings.
|
- __setItems(items)__ - sets the list items to multiple strings.
|
||||||
|
- __getItemIndex(child)__ - returns the item index from the list. child can be
|
||||||
|
an element, index, or string.
|
||||||
- __select(index)__ - select an index of an item.
|
- __select(index)__ - select an index of an item.
|
||||||
- __move(offset)__ - select item based on current offset.
|
- __move(offset)__ - select item based on current offset.
|
||||||
- __up(amount)__ - select item above selected.
|
- __up(amount)__ - select item above selected.
|
||||||
|
@ -225,19 +225,15 @@ List.prototype.__proto__ = Box.prototype;
|
|||||||
|
|
||||||
List.prototype.type = 'list';
|
List.prototype.type = 'list';
|
||||||
|
|
||||||
List.prototype.add =
|
List.prototype.createItem = function(content) {
|
||||||
List.prototype.addItem =
|
|
||||||
List.prototype.appendItem = function(item) {
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
this.ritems.push(item);
|
|
||||||
|
|
||||||
// Note: Could potentially use Button here.
|
// Note: Could potentially use Button here.
|
||||||
var options = {
|
var options = {
|
||||||
screen: this.screen,
|
screen: this.screen,
|
||||||
content: item,
|
content: content,
|
||||||
align: this.align || 'left',
|
align: this.align || 'left',
|
||||||
top: this.items.length,
|
top: 0,
|
||||||
left: 0,
|
left: 0,
|
||||||
right: (this.scrollbar ? 1 : 0),
|
right: (this.scrollbar ? 1 : 0),
|
||||||
tags: this.parseTags,
|
tags: this.parseTags,
|
||||||
@ -248,7 +244,7 @@ List.prototype.appendItem = function(item) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (!this.screen.autoPadding) {
|
if (!this.screen.autoPadding) {
|
||||||
options.top = this.itop + this.items.length;
|
options.top = 1;
|
||||||
options.left = this.ileft;
|
options.left = this.ileft;
|
||||||
options.right = this.iright + (this.scrollbar ? 1 : 0);
|
options.right = this.iright + (this.scrollbar ? 1 : 0);
|
||||||
}
|
}
|
||||||
@ -277,13 +273,6 @@ List.prototype.appendItem = function(item) {
|
|||||||
|
|
||||||
var item = new Box(options);
|
var item = new Box(options);
|
||||||
|
|
||||||
this.items.push(item);
|
|
||||||
this.append(item);
|
|
||||||
|
|
||||||
if (this.items.length === 1) {
|
|
||||||
this.select(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.mouse) {
|
if (this.mouse) {
|
||||||
item.on('click', function(data) {
|
item.on('click', function(data) {
|
||||||
self.focus();
|
self.focus();
|
||||||
@ -297,7 +286,156 @@ List.prototype.appendItem = function(item) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.emit('create item');
|
||||||
|
|
||||||
|
return item;
|
||||||
|
};
|
||||||
|
|
||||||
|
List.prototype.add =
|
||||||
|
List.prototype.addItem =
|
||||||
|
List.prototype.appendItem = function(content) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
content = typeof content === 'string' ? content : content.getContent();
|
||||||
|
|
||||||
|
var item = this.createItem(content);
|
||||||
|
item.position.top = this.items.length;
|
||||||
|
if (!this.screen.autoPadding) {
|
||||||
|
item.position.top = this.itop + this.items.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.ritems.push(content);
|
||||||
|
this.items.push(item);
|
||||||
|
this.append(item);
|
||||||
|
|
||||||
|
if (this.items.length === 1) {
|
||||||
|
this.select(0);
|
||||||
|
}
|
||||||
|
|
||||||
this.emit('add item');
|
this.emit('add item');
|
||||||
|
|
||||||
|
return item;
|
||||||
|
};
|
||||||
|
|
||||||
|
List.prototype.removeItem = function(child) {
|
||||||
|
var i = this.getItemIndex(child);
|
||||||
|
if (~i && this.items[i]) {
|
||||||
|
child = this.items.splice(i, 1)[0];
|
||||||
|
this.ritems.splice(i, 1);
|
||||||
|
this.remove(child);
|
||||||
|
for (var j = i; j < this.items.length; j++) {
|
||||||
|
this.items[j].position.top--;
|
||||||
|
}
|
||||||
|
if (i === this.selected) {
|
||||||
|
this.select(i - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.emit('remove item');
|
||||||
|
return child;
|
||||||
|
};
|
||||||
|
|
||||||
|
List.prototype.insertItem = function(child, content) {
|
||||||
|
content = typeof content === 'string' ? content : content.getContent();
|
||||||
|
var i = this.getItemIndex(child);
|
||||||
|
if (!~i) return;
|
||||||
|
if (i >= this.items.length) return this.appendItem(content);
|
||||||
|
var item = this.createItem(content);
|
||||||
|
for (var j = i; j < this.items.length; j++) {
|
||||||
|
this.items[j].position.top++;
|
||||||
|
}
|
||||||
|
item.position.top = i + (!this.screen.autoPadding ? 1 : 0);
|
||||||
|
this.ritems.splice(i, 0, content);
|
||||||
|
this.items.splice(i, 0, item);
|
||||||
|
this.append(item);
|
||||||
|
if (i === this.selected) {
|
||||||
|
this.select(i + 1);
|
||||||
|
}
|
||||||
|
this.emit('insert item');
|
||||||
|
};
|
||||||
|
|
||||||
|
List.prototype.getItem = function(child) {
|
||||||
|
return this.items[this.getItemIndex(child)];
|
||||||
|
};
|
||||||
|
|
||||||
|
List.prototype.setItem = function(child, content) {
|
||||||
|
content = typeof content === 'string' ? content : content.getContent();
|
||||||
|
var i = this.getItemIndex(child);
|
||||||
|
if (!~i) return;
|
||||||
|
this.items[i].setContent(content);
|
||||||
|
this.ritems[i] = content;
|
||||||
|
};
|
||||||
|
|
||||||
|
List.prototype.clearItems = function() {
|
||||||
|
return this.setItems([]);
|
||||||
|
};
|
||||||
|
|
||||||
|
List.prototype.setItems = function(items) {
|
||||||
|
var items = items.slice()
|
||||||
|
, original = this.items.slice()
|
||||||
|
, selected = this.selected
|
||||||
|
, sel = this.ritems[this.selected]
|
||||||
|
, i = 0;
|
||||||
|
|
||||||
|
this.select(0);
|
||||||
|
|
||||||
|
for (; i < items.length; i++) {
|
||||||
|
if (this.items[i]) {
|
||||||
|
this.items[i].setContent(items[i]);
|
||||||
|
} else {
|
||||||
|
this.add(items[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; i < original.length; i++) {
|
||||||
|
this.remove(original[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.ritems = items;
|
||||||
|
|
||||||
|
// Try to find our old item if it still exists.
|
||||||
|
sel = items.indexOf(sel);
|
||||||
|
if (~sel) {
|
||||||
|
this.select(sel);
|
||||||
|
} else if (items.length === original.length) {
|
||||||
|
this.select(selected);
|
||||||
|
} else {
|
||||||
|
this.select(Math.min(selected, items.length - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
this.emit('set items');
|
||||||
|
};
|
||||||
|
|
||||||
|
List.prototype.pushItem = function(content) {
|
||||||
|
this.appendItem(content);
|
||||||
|
return this.items.length;
|
||||||
|
};
|
||||||
|
|
||||||
|
List.prototype.popItem = function() {
|
||||||
|
return this.removeItem(this.items.length - 1);
|
||||||
|
};
|
||||||
|
|
||||||
|
List.prototype.unshiftItem = function(content) {
|
||||||
|
this.insertItem(0, content);
|
||||||
|
return this.items.length;
|
||||||
|
};
|
||||||
|
|
||||||
|
List.prototype.shiftItem = function() {
|
||||||
|
return this.removeItem(0);
|
||||||
|
};
|
||||||
|
|
||||||
|
List.prototype.spliceItem = function(child, n) {
|
||||||
|
var self = this;
|
||||||
|
var i = this.getItemIndex(child);
|
||||||
|
if (!~i) return;
|
||||||
|
var items = Array.prototype.slice.call(arguments, 2);
|
||||||
|
var removed = [];
|
||||||
|
while (n--) {
|
||||||
|
removed.push(this.removeItem(i));
|
||||||
|
}
|
||||||
|
items.forEach(function(item) {
|
||||||
|
self.insertItem(i++, item);
|
||||||
|
});
|
||||||
|
return removed;
|
||||||
};
|
};
|
||||||
|
|
||||||
List.prototype.find =
|
List.prototype.find =
|
||||||
@ -361,63 +499,6 @@ List.prototype.getItemIndex = function(child) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
List.prototype.getItem = function(child) {
|
|
||||||
return this.items[this.getItemIndex(child)];
|
|
||||||
};
|
|
||||||
|
|
||||||
List.prototype.removeItem = function(child) {
|
|
||||||
var i = this.getItemIndex(child);
|
|
||||||
if (~i && this.items[i]) {
|
|
||||||
child = this.items.splice(i, 1)[0];
|
|
||||||
this.ritems.splice(i, 1);
|
|
||||||
this.remove(child);
|
|
||||||
if (i === this.selected) {
|
|
||||||
this.select(i - 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.emit('remove item');
|
|
||||||
};
|
|
||||||
|
|
||||||
List.prototype.clearItems = function() {
|
|
||||||
return this.setItems([]);
|
|
||||||
};
|
|
||||||
|
|
||||||
List.prototype.setItems = function(items) {
|
|
||||||
var items = items.slice()
|
|
||||||
, original = this.items.slice()
|
|
||||||
, selected = this.selected
|
|
||||||
, sel = this.ritems[this.selected]
|
|
||||||
, i = 0;
|
|
||||||
|
|
||||||
this.select(0);
|
|
||||||
|
|
||||||
for (; i < items.length; i++) {
|
|
||||||
if (this.items[i]) {
|
|
||||||
this.items[i].setContent(items[i]);
|
|
||||||
} else {
|
|
||||||
this.add(items[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (; i < original.length; i++) {
|
|
||||||
this.remove(original[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.ritems = items;
|
|
||||||
|
|
||||||
// Try to find our old item if it still exists.
|
|
||||||
sel = items.indexOf(sel);
|
|
||||||
if (~sel) {
|
|
||||||
this.select(sel);
|
|
||||||
} else if (items.length === original.length) {
|
|
||||||
this.select(selected);
|
|
||||||
} else {
|
|
||||||
this.select(Math.min(selected, items.length - 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
this.emit('set items');
|
|
||||||
};
|
|
||||||
|
|
||||||
List.prototype.select = function(index) {
|
List.prototype.select = function(index) {
|
||||||
if (!this.interactive) {
|
if (!this.interactive) {
|
||||||
return;
|
return;
|
||||||
|
@ -102,6 +102,10 @@ list.items.forEach(function(item) {
|
|||||||
item.setHover(item.getText().trim());
|
item.setHover(item.getText().trim());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var item = list.items[1];
|
||||||
|
list.removeItem(list.items[1]);
|
||||||
|
list.insertItem(1, item.getContent());
|
||||||
|
|
||||||
list.on('keypress', function(ch, key) {
|
list.on('keypress', function(ch, key) {
|
||||||
if (key.name === 'up' || key.name === 'k') {
|
if (key.name === 'up' || key.name === 'k') {
|
||||||
list.up();
|
list.up();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user