1
1
Fork 0
CCNA_Autofill_Userscript/fetch.js
2024-05-23 16:36:13 +02:00

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;