forked from Charlie85270/tail-kit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUtils.ts
55 lines (50 loc) · 1.3 KB
/
Utils.ts
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
/**
* return indentation for a level
* @param level
*/
const getIndent = (level) => {
let result = '',
i = level * 4;
if (level < 0) {
throw 'Level is below 0';
}
while (i--) {
result += ' ';
}
return result;
};
/**
* Format and beautify html output
* @param html the html to format
*/
export const formatHtml = (html: string) => {
html = html.trim();
const tokens = html.split(/</);
let result = '',
indentLevel = 0;
for (let i = 0, l = tokens.length; i < l; i++) {
const parts = tokens[i].split(/>/);
if (parts.length === 2) {
if (tokens[i][0] === '/') {
indentLevel--;
}
result += getIndent(indentLevel);
if (tokens[i][0] !== '/') {
indentLevel++;
}
if (i > 0) {
result += '<';
}
result += parts[0].trim() + '>\n';
if (parts[1].trim() !== '') {
result += getIndent(indentLevel) + parts[1].trim().replace(/\s+/g, ' ') + '\n';
}
if (parts[0].match(/^(img|hr|br)/)) {
indentLevel--;
}
} else {
result += getIndent(indentLevel) + parts[0] + '\n';
}
}
return result;
};