vjudge: fix poj chaotic content and missing image (#428)

This commit is contained in:
guke1024 authored and GitHub committed 2022-09-09 14:52:45 +08:00
1 parent ba187a168a
commit 6218bc9026
2 files changed
+6 -11

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@hydrooj/vjudge", "name": "@hydrooj/vjudge",
"version": "1.5.0-next.13", "version": "1.5.0-next.14",
"description": "Submit problems to remote oj", "description": "Submit problems to remote oj",
"main": "package.json", "main": "package.json",
"repository": "https://github.com/hydro-dev/Hydro.git", "repository": "https://github.com/hydro-dev/Hydro.git",
+5 -10
View File
@@ -73,7 +73,7 @@ export default class POJProvider implements IBasicProvider {
get(url: string) { get(url: string) {
logger.debug('get', url); logger.debug('get', url);
if (!url.includes('//')) url = `${this.account.endpoint || 'http://poj.org'}${url}`; if (!url.startsWith('http')) url = new URL(url, this.account.endpoint || 'http://poj.org').toString();
const req = superagent.get(url).set('Cookie', this.cookie); const req = superagent.get(url).set('Cookie', this.cookie);
if (this.account.proxy) return req.proxy(this.account.proxy); if (this.account.proxy) return req.proxy(this.account.proxy);
return req; return req;
@@ -139,7 +139,6 @@ export default class POJProvider implements IBasicProvider {
content.children[0].remove(); content.children[0].remove();
content.querySelectorAll('img[src]').forEach((ele) => { content.querySelectorAll('img[src]').forEach((ele) => {
const src = ele.getAttribute('src'); const src = ele.getAttribute('src');
if (!src.startsWith('http')) return;
if (images[src]) { if (images[src]) {
ele.setAttribute('src', `file://${images[src]}.png`); ele.setAttribute('src', `file://${images[src]}.png`);
return; return;
@@ -167,15 +166,11 @@ export default class POJProvider implements IBasicProvider {
} else if (node.className.includes('sio')) { } else if (node.className.includes('sio')) {
html += `<pre><code class="language-${markNext}${lastId}">${htmlEncode(node.innerHTML)}</code></pre>`; html += `<pre><code class="language-${markNext}${lastId}">${htmlEncode(node.innerHTML)}</code></pre>`;
} else if (node.className.includes('ptx')) { } else if (node.className.includes('ptx')) {
for (const item of node.childNodes) { for (const item of node.innerHTML.split('\n<br>\n<br>')) {
if (item.nodeType === 3) { const p = page.createElement('p');
const p = page.createElement('p'); p.innerHTML = item.trim();
p.innerHTML = htmlEncode(item.textContent); html += p.outerHTML;
item.replaceWith(p);
}
if (item.nodeName.includes('BR')) item.remove();
} }
html += node.innerHTML;
} else html += node.innerHTML; } else html += node.innerHTML;
} }
contents[langs[lang]] = html; contents[langs[lang]] = html;