79 lines
No EOL
2.5 KiB
JavaScript
79 lines
No EOL
2.5 KiB
JavaScript
function fetchAwnsers(awnserURL = "") {
|
|
return new Promise((resolve, reject) => {
|
|
GM_xmlhttpRequest({
|
|
method: "GET",
|
|
url: awnserURL,
|
|
headers: {
|
|
"Content-Type": "text/html",
|
|
},
|
|
onload: function (response) {
|
|
awnserImgs = new Map();
|
|
const results = [];
|
|
const parser = new DOMParser();
|
|
const virtDom = parser.parseFromString(
|
|
response.responseText,
|
|
"text/html"
|
|
);
|
|
|
|
let answersDom = virtDom.querySelector(".pf-content");
|
|
if (!answersDom) {
|
|
answersDom = virtDom.querySelector(".thecontent");
|
|
}
|
|
|
|
let index = -1;
|
|
for (let childDom of answersDom.children) {
|
|
index++;
|
|
|
|
if (childDom.tagName === "P" || childDom.tagName === "STRONG") {
|
|
// maybe a question question
|
|
let innerDom = childDom.querySelector("strong");
|
|
if (innerDom === null) {
|
|
if (!childDom.textContent) {
|
|
continue;
|
|
}
|
|
innerDom = childDom;
|
|
}
|
|
|
|
const textContent = innerDom.textContent.trim();
|
|
const matches = textContent.match(/^[0-9]+\. (.*)$/);
|
|
if (matches !== null) {
|
|
const questionText = matches[1];
|
|
|
|
// most likely a question
|
|
let nextChild = answersDom.children[index + 1];
|
|
|
|
if (nextChild.tagName === "P") {
|
|
nextChild = answersDom.children[index + 2];
|
|
}
|
|
|
|
if (nextChild === null) continue;
|
|
|
|
if (nextChild.tagName === "UL") {
|
|
// most likely the awnser
|
|
const answers = [];
|
|
for (let answerDom of nextChild.querySelectorAll("strong")) {
|
|
let answerText = answerDom.textContent.trim();
|
|
if (answerText.endsWith("*")) {
|
|
answerText = answerText.substring(0, answerText.length - 1);
|
|
}
|
|
answers.push(answerText);
|
|
}
|
|
|
|
results.push({
|
|
question: questionText,
|
|
answers: answers,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
resolve(results);
|
|
},
|
|
onerror: function(error) {
|
|
reject(error)
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
window.fetchAwnsers = fetchAwnsers; |