on-codemerge
Version:
A WYSIWYG editor for on-codemerge is a user-friendly interface that allows users to edit and view their code in real time, exactly as it will appear in the final product
109 lines (108 loc) • 4.59 kB
JavaScript
import { htmlToMarkdown as d } from "../utils/converter.mjs";
import { createContainer as o, createLink as c } from "../../../utils/helpers.mjs";
class u {
export(s, e) {
let n, i, t;
switch (e) {
case "html":
n = this.formatHTML(s), i = "document.html", t = "text/html", this.downloadFile(n, i, t);
break;
case "markdown":
n = d(s), i = "document.md", t = "text/markdown", this.downloadFile(n, i, t);
break;
case "text":
n = this.stripTags(s), i = "document.txt", t = "text/plain", this.downloadFile(n, i, t);
break;
case "pdf":
this.exportToPDF(s);
break;
default:
throw new Error(`Unsupported format: ${e}`);
}
}
exportToPDF(s) {
const e = window.open("", "_blank");
if (!e)
throw new Error("Failed to open print window");
const n = this.formatHTML(s);
e.document.write(`
<html>
<head>
<title>Document</title>
<style>
@media print {
body { margin: 0; padding: 0; }
/* Добавьте свои стили для печати */
}
</style>
</head>
<body>
${n}
</body>
</html>
`), e.document.close(), e.print();
}
formatHTML(s) {
const e = `<!DOCTYPE html>
`, t = `
<html>
<head>
<meta charset="UTF-8">
${[
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/index.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/BlockPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/ChartsPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/CodeBlockPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/CollaborationPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/ColorPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/CommentsPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/ExportPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/FileUploadPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/FooterPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/FootnotesPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/HistoryPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/HTMLViewerPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/ImagePlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/LinkPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/ListsPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/ResponsivePlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/ShortcutsPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/TablePlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/TemplatesPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/ToolbarDividerPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/ToolbarPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/TypographyPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/VideoPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/YouTubeVideoPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/AlignmentPlugin/public.css",
"https://cdn.jsdelivr.net/npm/on-codemerge/dist/plugins/FormBuilderPlugin/public.css"
].map((l) => `<link rel="stylesheet" href="${l}">`).join(`
`)}
</head>
<body>
${s}
</body>
</html>
`;
return e + this.prettifyHTML(t);
}
prettifyHTML(s) {
let e = "", n = 0;
return s.split(`
`).forEach((t) => {
t.match(/^\s*<\/\w/) && n--, e += " ".repeat(n) + t.trim() + `
`, t.match(/^\s*<\w[^>]*[^\/]$/) && !t.startsWith("<input") && n++;
}), e.trim();
}
stripTags(s) {
const e = o();
return e.innerHTML = s, e.textContent || e.innerText || "";
}
downloadFile(s, e, n) {
const i = new Blob([s], { type: n }), t = URL.createObjectURL(i), l = c("", t);
l.download = e, document.body.appendChild(l), l.click(), document.body.removeChild(l), URL.revokeObjectURL(t);
}
}
export {
u as ExportService
};