-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathInputController.js
More file actions
70 lines (49 loc) · 1.64 KB
/
Copy pathInputController.js
File metadata and controls
70 lines (49 loc) · 1.64 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
'use strict';
var EventEmitter = require('events').EventEmitter;
var something = function() {
var InputController = new EventEmitter;
InputController.stdin = process.stdin;
InputController.stdout = process.stdout;
InputController.specialChars = {
backspace: "127",
controlC: "3",
deleteSequence: [8, 32, 8],
enter: "13"
};
InputController.allowedChars = ["48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "32"];
InputController.currentInput = "";
InputController.ask = function() {
this.stdout.write("Enter coordinates > " + this.currentInput);
};
InputController.read = function() {
this.stdin.setRawMode(true);
this.currentInput = "";
this.stdin.on("data", function(keystroke) {
var keyString = keystroke.toJSON().toString();
this.catchControlC(keyString);
if(this.allowedChars.indexOf(keyString) != -1
&& !InputController._lock)
this.currentInput += keystroke.toString();
if(keyString == this.specialChars.backspace) {
this.currentInput = this.currentInput.slice(0, -1);
this.emit("delete");
}
if(keyString == this.specialChars.enter)
this.emit("enter");
this.emit("coordinates", this.currentInput);
}.bind(this));
};
InputController.catchControlC = function(keyString) {
if(keyString == this.specialChars.controlC)
this.stdin.pause();
};
InputController._lock = false;
InputController.lock = function() {
InputController._lock = true;
};
InputController.unlock = function() {
InputController._lock = false;
};
return InputController;
}
module.exports = something;