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

32 lines (31 loc) 4.3 kB
/*! on-codemerge v1.3.1 @author Pavel Kuzmin @license MIT @homepage https://s00d.github.io/on-codemerge/ @repository git+https://github.com/s00d/on-codemerge.git Copyright (c) 2026 Pavel Kuzmin - Built on 2026-07-02T13:39:17.947Z */ "use strict";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/public.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;