This repository was archived by the owner on Sep 25, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathparseDom.js
More file actions
82 lines (69 loc) · 2.35 KB
/
Copy pathparseDom.js
File metadata and controls
82 lines (69 loc) · 2.35 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
const CodeBlock = require('./messageComponents/CodeBlock');
const MessageBuilder = require('./messageComponents/MessageBuilder');
const Paragraph = require('./messageComponents/Paragraph');
const GuildedImage = require('./messageComponents/GuildedImage');
const GuildedVideo = require('./messageComponents/GuildedVideo');
const Embed = require('./messageComponents/Embed');
const Markdown = require('./messageComponents/Markdown');
const RawComponent = require('./messageComponents/GuildedImage');
/**
* Parses the raw messages sent from guilded into a much more manageable form.
* @param {Object} dom - The raw dom of the message.
* @returns {MessageBuilder}
* @private
*/
const parseDom = (dom) => {
dom = dom.document.nodes;
let message = new MessageBuilder();
dom.forEach(node => {
switch (node.type) {
case 'paragraph': {
message.add(new Paragraph(node, { raw: true }));
break;
}
case 'code-container': {
let code = '';
node.nodes.forEach(line => {
code += line.nodes[0].leaves[0].text + '\n';
});
code = code.substring(0, code.length - 1);
message.add(new CodeBlock(code, node.data.language));
break;
}
case 'image': {
message.add(new GuildedImage(node.data.src));
break;
}
case 'video': {
message.add(new GuildedVideo(node.data.src));
break;
}
case 'webhookMessage': {
node.data.embeds.forEach(e => message.add(new Embed(e)));
break;
}
// case 'block-quote-container': {
// break;
// }
case 'markdown-plain-text': {
message.add(new Markdown(node.nodes[0].leaves[0].text));
break;
}
// case 'unordered-list': {
// break;
// }
// case 'ordered-list': {
// break;
// }
// case 'form': {
// break;
// }
default: {
message.add(new RawComponent(node));
break;
}
}
});
return message;
};
module.exports = parseDom;