vjudge: fix poj content (#429)

This commit is contained in:
guke1024 authored and GitHub committed 2022-09-11 14:49:54 +08:00
1 parent 954d084b4f
commit 8f7d81ddca
2 files changed
+35 -11

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@hydrooj/vjudge", "name": "@hydrooj/vjudge",
"version": "1.5.0", "version": "1.5.1",
"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",
+34 -10
View File
@@ -59,9 +59,7 @@ poj.6:
const langs = { const langs = {
default: 'en', default: 'en',
'zh-CN': 'zh_CN', 'zh-CN': 'zh',
es: 'es',
ja: 'ja',
}; };
export default class POJProvider implements IBasicProvider { export default class POJProvider implements IBasicProvider {
@@ -129,6 +127,7 @@ export default class POJProvider implements IBasicProvider {
const memory = info.children[2].innerHTML.split('</b> ')[1].toLowerCase().trim(); const memory = info.children[2].innerHTML.split('</b> ')[1].toLowerCase().trim();
const contents = {}; const contents = {};
const images = {}; const images = {};
let tag = '';
for (const lang of languages) { for (const lang of languages) {
await sleep(1000); await sleep(1000);
const { text } = await this.get(`/problem?id=${id.split('P')[1]}&lang=${lang}&change=true`); const { text } = await this.get(`/problem?id=${id.split('P')[1]}&lang=${lang}&change=true`);
@@ -157,6 +156,10 @@ export default class POJProvider implements IBasicProvider {
if (node.className.includes('pst')) { if (node.className.includes('pst')) {
if (!node.innerHTML.startsWith('Sample ')) { if (!node.innerHTML.startsWith('Sample ')) {
html += `<h2>${htmlEncode(node.innerHTML)}</h2>`; html += `<h2>${htmlEncode(node.innerHTML)}</h2>`;
if (node.textContent === 'Source') {
tag = node.nextElementSibling.textContent.trim();
node.nextElementSibling.innerHTML = tag;
}
} else if (node.innerHTML.startsWith('Sample Input')) { } else if (node.innerHTML.startsWith('Sample Input')) {
lastId++; lastId++;
markNext = 'input'; markNext = 'input';
@@ -164,16 +167,37 @@ export default class POJProvider implements IBasicProvider {
markNext = 'output'; markNext = 'output';
} }
} 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 += `\n\n<pre><code class="language-${markNext}${lastId}">${node.innerHTML}</code></pre>\n\n`;
} else if (node.className.includes('ptx')) { } else if (node.className.includes('ptx')) {
for (const item of node.innerHTML.split('\n<br>\n<br>')) { for (const primaryTd of node.querySelectorAll('td')) {
const p = page.createElement('p'); const td = page.createElement('td');
p.innerHTML = item.trim(); td.textContent = primaryTd.textContent;
html += p.outerHTML; if (primaryTd.colSpan > 1) td.colSpan = primaryTd.colSpan;
primaryTd.replaceWith(td);
}
for (const primaryPre of node.querySelectorAll('pre')) {
const pre = page.createElement('pre');
for (const inner of primaryPre.innerHTML.split('<br>')) {
if (inner !== '') {
const preP = page.createElement('p');
preP.innerHTML = inner;
pre.append(preP);
}
}
primaryPre.replaceWith(pre);
}
for (const item of node.innerHTML.split('\n<br>')) {
if (item !== '') {
const p = page.createElement('p');
p.innerHTML = item.trim().replace(/\$/g, '<span>$</span>');
html += p.outerHTML;
}
} }
} else html += node.innerHTML; } else html += node.innerHTML;
} }
contents[langs[lang]] = html; if (lang in langs) {
contents[langs[lang]] = html;
}
} }
return { return {
title: main.getElementsByClassName('ptt')[0].innerHTML, title: main.getElementsByClassName('ptt')[0].innerHTML,
@@ -181,7 +205,7 @@ export default class POJProvider implements IBasicProvider {
'config.yaml': Buffer.from(`time: ${time}\nmemory: ${memory}\ntype: remote_judge\nsubType: poj\ntarget: ${id}`), 'config.yaml': Buffer.from(`time: ${time}\nmemory: ${memory}\ntype: remote_judge\nsubType: poj\ntarget: ${id}`),
}, },
files, files,
tag: [], tag: [tag],
content: JSON.stringify(contents), content: JSON.stringify(contents),
}; };
} }