From c0489546b8f469b85c919bd275f9effcc5ca4c66 Mon Sep 17 00:00:00 2001 From: undefined Date: Fri, 4 Sep 2020 12:51:15 +0800 Subject: [PATCH] feat: allow fps zipfile --- packages/fps-importer/handler.ts | 15 ++++++++++++- packages/fps-importer/package.json | 2 +- packages/html2md/lib.ts | 11 +-------- packages/html2md/package.json | 4 +--- packages/html2md/test/lib.spec.ts | 36 ------------------------------ 5 files changed, 17 insertions(+), 51 deletions(-) diff --git a/packages/fps-importer/handler.ts b/packages/fps-importer/handler.ts index 7eac3fbeb..289718a9b 100644 --- a/packages/fps-importer/handler.ts +++ b/packages/fps-importer/handler.ts @@ -19,8 +19,21 @@ class FpsProblemImportHandler extends Handler { if (ufid) { const stream = await file.get(ufid); const buf = await streamToBuffer(stream); + let input = buf.toString(); + try { + await xml2js.parseStringPromise(input); + } catch (e) { + const zip = new AdmZip(buf); + const entries = zip.getEntries(); + for (const entry of entries) { + if (entry.entryName.endsWith('.xml')) { + input = entry.getData().toString(); + break; + } + } + } // @ts-ignore - await this.post({ domainId, input: buf.toString() }); + await this.post({ domainId, input }); await file.del(ufid); } else this.response.template = 'problem_import_fps.html'; } diff --git a/packages/fps-importer/package.json b/packages/fps-importer/package.json index 16c1e5226..7cf1e2cf7 100644 --- a/packages/fps-importer/package.json +++ b/packages/fps-importer/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/fps-importer", - "version": "1.0.7", + "version": "1.0.8", "description": "Import FPS problems", "main": "package.json", "repository": "https://github.com/hydro-dev/Hydro.git", diff --git a/packages/html2md/lib.ts b/packages/html2md/lib.ts index 5d8e6807c..0cda67505 100644 --- a/packages/html2md/lib.ts +++ b/packages/html2md/lib.ts @@ -1,6 +1,5 @@ import 'hydrooj'; import TurndownService from 'turndown'; -import { JSDOM } from 'jsdom'; const turndownService = new TurndownService({ headingStyle: 'atx', @@ -9,15 +8,7 @@ const turndownService = new TurndownService({ }); export function convertHTML(html: string) { - const DOM = new JSDOM(html); - const eles = DOM.window.document.querySelectorAll('span.katex-mathml'); - eles.forEach((ele) => { - const MathML = ele.innerHTML - .replace(/\\{/gmi, '{') - .replace(/\\}/gmi, '}'); - ele.parentElement.replaceWith(`$${MathML}$`); - }); - return turndownService.turndown(DOM.serialize()); + return turndownService.turndown(html); } global.Hydro.lib.convertHTML = convertHTML; diff --git a/packages/html2md/package.json b/packages/html2md/package.json index dc5489087..7b60ab181 100644 --- a/packages/html2md/package.json +++ b/packages/html2md/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/html2md", - "version": "1.0.1", + "version": "1.0.2", "description": "turn html into markdown", "main": "lib.js", "typings": "lib.d.ts", @@ -8,11 +8,9 @@ "author": "undefined ", "license": "AGPL-3.0-only", "dependencies": { - "jsdom": "^16.4.0", "turndown": "^6.0.0" }, "devDependencies": { - "@types/jsdom": "^16.2.3", "@types/turndown": "^5.0.0" }, "peerDependencies": { diff --git a/packages/html2md/test/lib.spec.ts b/packages/html2md/test/lib.spec.ts index 59c9aa8fb..eb19eca43 100644 --- a/packages/html2md/test/lib.spec.ts +++ b/packages/html2md/test/lib.spec.ts @@ -2,43 +2,7 @@ import 'hydrooj'; import { convertHTML } from '@hydrooj/html2md/lib'; describe('html2md', () => { - const Katex1 = `\ - - nn - - - - - n - - -`; - const Katex2 = `\ - - E={1,2,..,n}E=\\{1,2,..,n\\} - - - - - E - = - { - 1 - , - 2 - , - . - . - , - n - } - - -`; - test('convertHTML', () => { expect(convertHTML('

Test

test

')).toStrictEqual('# Test\n\ntest'); - expect(convertHTML(Katex1)).toStrictEqual('$n$'); - expect(convertHTML(Katex2)).toStrictEqual('$E={1,2,..,n}$'); }); });