-
Notifications
You must be signed in to change notification settings - Fork 0
/
Renderer.js
81 lines (56 loc) · 1.52 KB
/
Renderer.js
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
80
'use strict'
var PieceRenderer = require("./PieceRenderer");
var Renderer = {
highlightCode: '\u001b[0;48;5;240m',
normalCode: '\u001b[0m',
render: function(grid) {
var result = "\n";
var rows = [];
var lineNumber = 1;
grid.pieces.forEach(function(row) {
rows.push(renderRow(row, lineNumber, grid.getRowInfo(lineNumber)));
lineNumber++;
});
result += rows.join("\n");
result += renderColumnNumbers(rows.length);
result += "\n\n";
return result;
},
clear: clear,
renderRow: renderRow
};
function renderRow(row, lineNumber, rowInfo) {
var renderedPieces = [];
row.forEach(function(piece) {
renderedPieces.push(PieceRenderer.render(piece));
});
var result = padLineNumber(lineNumber) + " ";
if(rowInfo.highlighted) {
result += renderedPieces.join(Renderer.highlightCode + " ") + Renderer.highlightCode;
}
else {
result += renderedPieces.join(" ");
}
result += Renderer.normalCode;
return result;
}
var padLineNumber = function(number) {
return String(" " + number).slice(-3);
}
var padColumnNumber = function(number) {
if(number <= 9)
return String(" " + number).slice(-2) + " ";
return String(" " + number).slice(-3);
}
var renderColumnNumbers = function(max) {
var result = "\n ";
var columnNumbers = [];
for(var i = 1; i <= max; i++) {
columnNumbers.push(padColumnNumber(i));
}
return result + columnNumbers.join("");
}
function clear() {
return '\u001b[2J\u001b[0;0f';
}
module.exports = Renderer;