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
31 lines (30 loc) • 4.07 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../utils/converter.cjs"),d=require("../../../utils/helpers.cjs");class c{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=o.htmlToMarkdown(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=d.createContainer();return e.innerHTML=s,e.textContent||e.innerText||""}downloadFile(s,e,n){const i=new Blob([s],{type:n}),t=URL.createObjectURL(i),l=d.createLink("",t);l.download=e,document.body.appendChild(l),l.click(),document.body.removeChild(l),URL.revokeObjectURL(t)}}exports.ExportService=c;