This repository was archived by the owner on Jul 6, 2022. It is now read-only.
forked from Jaredk3nt/HomeTerm
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwriters.js
More file actions
89 lines (82 loc) · 2.36 KB
/
Copy pathwriters.js
File metadata and controls
89 lines (82 loc) · 2.36 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
80
81
82
83
84
85
86
87
88
89
const TEMP_NODE_ID = "temp-terminal-output";
function createWriter(createInner) {
return function (output = "", { className, id } = {}) {
removeTempOutput();
const terminal = document.getElementById("terminal-content");
const outputNode = document.createElement("div");
if (id) outputNode.setAttribute("id", id);
outputNode.classList.add(className || "terminal-output");
const inner = createInner(output);
outputNode.innerHTML = inner;
terminal.appendChild(outputNode);
};
}
function listInner(
output,
{ ulClassName = "ls-list", liClassName = "ls-item" } = {}
) {
if (Array.isArray(output)) {
let inner = `<ul class='${ulClassName}'>`;
inner =
inner +
output
.map((item) => {
if (item.key && item.type) {
return `<li class='${liClassName} ${item.type}'>${item.key}</li>`;
}
return `<li class='${liClassName}'>${item}</li>`;
})
.join("");
inner = inner + "</ul>";
return inner;
} else {
return textInner(output);
}
}
const listWriter = createWriter(listInner);
function textInner(output) {
return `<p>${output}</p>`;
}
const textWriter = createWriter(textInner);
function ulInner(output) {
if (Array.isArray(output)) {
return listInner(output, {
ulClassName: "default-list",
liClassName: "default-list-item",
});
} else if (output.title && output.items) {
return `<p class='default-list-title'>${output.title}</p>${listInner(
output.items,
{
ulClassName: "default-list",
liClassName: "default-list-item",
}
)}`;
} else {
return textInner(output);
}
}
const ulWriter = createWriter(ulInner);
function buildNestedList(cursor, list) {
Object.entries(cursor).map(([key, value]) => {
if (locationType(value) === types.DIR) {
list.push(
`<li class="tree-list-item directory">${key}<ul class="tree-list">`
);
buildNestedList(value, list);
list.push("</ul></li>");
} else {
list.push(`<li class="tree-list-item">${key}</li>`);
}
});
return list;
}
function treeInner(output) {
if (Array.isArray(output)) {
return listInner(output);
} else if (typeof output === "object") {
let inner = "<ul class='tree-list'>";
return inner + buildNestedList(output, []).join("") + "</ul>";
}
}
const treeWriter = createWriter(treeInner);