-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlist.js
More file actions
79 lines (60 loc) · 2.02 KB
/
list.js
File metadata and controls
79 lines (60 loc) · 2.02 KB
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
const terminal = require('./terminal');
const escapeCodes = require('ansi-escape-codes');
const KEYCODES = require('./keycodes.js');
var markSelected = escapeCodes.make(escapeCodes.COLORS.BLUE);
var green = escapeCodes.make(escapeCodes.COLORS.GREEN);
var bold = escapeCodes.make(escapeCodes.COLORS.BOLD);
function create(opts) {
const listOptions = opts.list || ['None'];
var selected = 0;
terminal.writeln('');
return {
prompt: function() {
this.draw();
while (true) {
var draw = false;
var key = terminal.readKey();
switch (key) {
case KEYCODES.UP_ARROW:
selected--;
draw = true;
break;
case KEYCODES.DOWN_ARROW:
selected++;
draw = true;
break;
case KEYCODES.CARRIAGE_RETURN:
case KEYCODES.ENTER:
terminal.gotoY(terminal.getY() + listOptions.length);
return selected;
}
if (draw) {
if (selected < 0) {
selected = listOptions.length - 1;
} else {
selected = selected % listOptions.length;
}
this.draw();
}
}
},
draw: function() {
terminal.saveY();
var buffer = '';
listOptions.forEach(function(ele, i) {
buffer += escapeCodes.clearLine() + (i == selected ? markSelected('> ' + ele) : (' ' + ele)) + "\n";
});
terminal.writeln(buffer);
terminal.restoreY();
}
};
}
// var lst = create({
// question: 'Selecione o sexo',
// list: ['Masculino', 'Feminino']
// });
// lst.prompt();
exports = {
type: 'list',
create: create
};