feat: playground add submenu

This commit is contained in:
jialin
2024-11-22 10:00:34 +08:00
parent 22f90a505c
commit e05ec3d2d5
22 changed files with 1141 additions and 207 deletions
+29
View File
@@ -0,0 +1,29 @@
import ePub from 'epubjs';
export default function readEpubContent(file: File): Promise<string> {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = function (e: any) {
const arrayBuffer = e.target.result;
const book = ePub(arrayBuffer);
book.loaded?.spine?.then?.((spine: any) => {
const chapterPromises = spine.spineItems?.map?.((chapter: any) => {
return book.load(chapter.href).then((content: any) => {
return content.body?.textContent || '';
});
});
Promise.all(chapterPromises)
.then((chaptersText) => {
const result = chaptersText.join('');
resolve(result);
})
.catch((error) => {
reject(error);
});
});
};
reader.onerror = (error) => reject(error);
reader.readAsArrayBuffer(file);
});
}
+16
View File
@@ -0,0 +1,16 @@
import XLSX from 'xlsx';
export default function readExcelContent(file: File): Promise<string> {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = function (e: any) {
const arrayBuffer = e.target.result;
const workbook = XLSX.read(arrayBuffer, { type: 'string' });
const ws = workbook.Sheets[workbook.SheetNames[0]]; // get the first worksheet
const data = XLSX.utils.sheet_to_json(ws);
resolve(JSON.stringify(data));
};
reader.onerror = (error) => reject(error);
reader.readAsArrayBuffer(file);
});
}
-34
View File
@@ -1,6 +1,4 @@
import _ from 'lodash';
import mammoth from 'mammoth';
import XLSX from 'xlsx';
export const isNotEmptyValue = (value: any) => {
if (Array.isArray(value)) {
@@ -196,35 +194,3 @@ export function readBlob(blob: Blob): Promise<string> {
reader.readAsText(blob, 'utf-8');
});
}
export function readWordContent(file: File): Promise<string> {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = function (e: any) {
const arrayBuffer = e.target.result;
mammoth
.extractRawText({ arrayBuffer })
.then((result) => {
resolve(result.value);
})
.catch((error) => reject(error));
};
reader.onerror = (error) => reject(error);
reader.readAsArrayBuffer(file);
});
}
export function readExcelContent(file: File): Promise<string> {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = function (e: any) {
const arrayBuffer = e.target.result;
const workbook = XLSX.read(arrayBuffer, { type: 'string' });
const ws = workbook.Sheets[workbook.SheetNames[0]]; // get the first worksheet
const data = XLSX.utils.sheet_to_json(ws);
resolve(JSON.stringify(data));
};
reader.onerror = (error) => reject(error);
reader.readAsArrayBuffer(file);
});
}
+48
View File
@@ -0,0 +1,48 @@
import * as pdfjsLib from 'pdfjs-dist';
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
'pdfjs-dist/build/pdf.worker.mjs',
// @ts-ignore
import.meta.url
).href;
const readPDFContent = (file: File): Promise<string> => {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = async function (e: any) {
try {
const arrayBuffer = e.target.result;
const loadingTask = pdfjsLib.getDocument({ data: arrayBuffer });
const pdf = await loadingTask.promise;
const numPages = pdf.numPages;
const pagePromises = [];
for (let i = 1; i <= numPages; i++) {
const pagePromise = pdf.getPage(i).then(function (page) {
return page.getTextContent().then(function (textContent) {
return textContent.items
.map(function (item: any) {
return item.str;
})
.join(' ');
});
});
pagePromises.push(pagePromise);
}
const pageTexts = await Promise.all(pagePromises);
const result = pageTexts?.join(' ');
resolve(result);
} catch (error) {
reject(error);
}
};
reader.onerror = (error) => reject(error);
reader.readAsArrayBuffer(file);
});
};
export default readPDFContent;
+40
View File
@@ -0,0 +1,40 @@
import JSZip from 'jszip';
const readPptxContent = (file: File): Promise<string> => {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = function (e: any) {
const arrayBuffer = e.target.result;
JSZip.loadAsync(arrayBuffer).then(function (zip: any) {
const slideFiles = Object.keys(zip.files).filter(function (fileName) {
return (
fileName.startsWith('ppt/slides/slide') && fileName.endsWith('.xml')
);
});
let slideText = '';
const slidePromises = slideFiles.map((slideFile) =>
zip
.file(slideFile)
.async('string')
.then(function (content: any) {
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(content, 'application/xml');
const texts = xmlDoc.getElementsByTagName('a:t');
for (let i = 0; i < texts.length; i++) {
slideText += texts[i].textContent + '\n';
}
})
);
Promise.all(slidePromises).then(() => {
resolve(slideText);
});
});
};
reader.onerror = (error) => reject(error);
reader.readAsArrayBuffer(file);
});
};
export default readPptxContent;
+15
View File
@@ -0,0 +1,15 @@
export default function readHtmlContent(file: File): Promise<string> {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = function (e: any) {
const fileContent = e.target.result;
const parser = new DOMParser();
const doc = parser.parseFromString(fileContent, 'text/html');
const textContent = doc.body.textContent || '';
resolve(textContent);
};
reader.onerror = (error) => reject(error);
reader.readAsText(file);
});
}
+18
View File
@@ -0,0 +1,18 @@
import mammoth from 'mammoth';
export default function readWordContent(file: File): Promise<string> {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = function (e: any) {
const arrayBuffer = e.target.result;
mammoth
.extractRawText({ arrayBuffer })
.then((result) => {
resolve(result.value);
})
.catch((error) => reject(error));
};
reader.onerror = (error) => reject(error);
reader.readAsArrayBuffer(file);
});
}