-
Notifications
You must be signed in to change notification settings - Fork 1
/
parseCommentary.js
135 lines (124 loc) · 4.03 KB
/
parseCommentary.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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
let fs = require("fs")
let {readFile, writeFile} = fs.promises
// const {promisify} = require('util');
// const readFile = promisify(fs.readFile)
// const writeFile = promisify(fs.writeFile)
// async function readFile(path) {
// return new Promise((resolve, reject) => {
// fs.readFile(path, 'utf8', function (err, data) {
// if (err) {
// reject(err);
// }
// resolve(data);
// });
// });
// }
// async function writeFile(path, data) {
// return new Promise((resolve, reject) => {
// fs.writeFile(path, data, 'utf8', function (err) {
// if (err) {
// reject(err);
// }
// resolve();
// });
// });
// }
const axios = require("axios")
let jsdom = require('jsdom')
class Element {
element;
class;
text;
children = [];
constructor(e, c, t){
this.element = e
this.class = c
this.text = t
}
}
class Commentary {
type;
name;
elements = [];
constructor(type, name){
this.type = type
this.name = name
}
}
/*
classes with data to get from children
comtype: overall commentary type, ?
vheading2: commentary name, ? (more fields are included like links)
cmt_sub_title: subtitle,
cmt_word: golden(commentary) word,
ital: italics
accented: bold,
note_emph: (1)
theres also hrefs in <a>
*/
module.exports = async(book, chapter, verse) => {
return new Promise(async (resolve, reject) => {
let file = await readFile(`./BibleHub/commentaries/html/${book}/${chapter}/${verse}.htm`)
const {JSDOM} = jsdom
let {document} = (new JSDOM(file)).window
let data = []
let sides = ["left", "cent"]
sides.forEach((side) => {
// coms[document.getElementById("comptype").textContent]
let obj;// = new Commentary(document.querySelector(`#${side}box > div > div.comtype`))
let childNodes = [...document.querySelector(`.pad${side}`).childNodes]
// let currentCommentary = ""
childNodes.forEach((child, c) => {
// console.log(`${c}. ${child.localName}`);
if(child.className === "vheading2"){
if(obj) data.push(obj)
obj = new Commentary(document.querySelector(`#${side}box > div > div.comtype`).textContent, child.textContent)
// currentCommentary = child.textContent
// data[currentCommentary] = []
}else{
// try{
// console.log(`${c}. ${child.localName}`);
// // console.log(child.localName);
// if(child.localName === "p" || child.localName === "br"){
// console.log(`${c}. ${child.localName}`);
// obj.text.push("\n")
// }
// obj.text.push(child.textContent)
// }catch{}
try{
/*
if([...document.querySelector("#leftbox > div").childNodes][SOME_INDEX].childElementCount){
[...[...document.querySelector("#leftbox > div").childNodes][SOME_INDEX].childNodes].forEach()
}
*/
let el = new Element(child.localName || "span", child.classList?.value || "", child.textContent)
if(child.childElementCount){
let children = [...child.childNodes]
children.forEach((eachChild) => {
let elChild = new Element(eachChild.localName || "span", eachChild.classList?.value || "", eachChild.textContent)
if(eachChild.localName === "a") {
elChild.element = "span"
elChild.class = "verse-link"
}
el.children.push(elChild)
})
}
if(child.localName === "a") {
el.element = "span"
el.class = "verse-link"
}
obj.elements.push(el)
}catch(e){
// console.log(`${c}. ${child.localName}`);
// console.log(e)
}
}
})
data.push(obj)
})
data = data.filter(d=>d.name!=="Links")
await writeFile(`./BibleHub/json/commentaries/${book}/${chapter}/${verse}.json`, JSON.stringify(data, null, 2))
// console.log(data)
resolve()
})
}