UNPKG

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
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 };