From b10972bd0d4563775039debdefe6a6b509488990 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20S=C3=A4ume?= Date: Thu, 23 May 2024 16:32:22 +0200 Subject: [PATCH] update --- fetch.user.js | 84 ++++++++++++++++++++++++++++++++++++++++++++++++--- main.user.js | 2 +- 2 files changed, 80 insertions(+), 6 deletions(-) diff --git a/fetch.user.js b/fetch.user.js index db82a74..aa27f54 100644 --- a/fetch.user.js +++ b/fetch.user.js @@ -1,5 +1,79 @@ -function hello(){ - console.log("hello"); -} - -window.hello = hello; \ No newline at end of file +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; \ No newline at end of file diff --git a/main.user.js b/main.user.js index a773112..b113db5 100644 --- a/main.user.js +++ b/main.user.js @@ -10,7 +10,7 @@ // @grant GM_getValue // @grant GM_xmlhttpRequest // @grant GM_log -// @version 0.0.9 +// @version 0.0.10 // @author Dominik Säume // ==/UserScript==