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

5 lines (4 loc) 2.74 kB
"use strict";var s=Object.defineProperty;var a=(n,e,t)=>e in n?s(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var o=(n,e,t)=>a(n,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});;/* empty css */;/* empty css */const d=require("./services/FileUploader.cjs"),u=require("./components/FileUploadMenu.cjs"),c=require("../ToolbarPlugin/utils.cjs"),h=require("../../icons/file.svg.cjs"),p=require("../../icons/upload.svg.cjs"),f=require("../../utils/helpers.cjs");class k{constructor(e={}){o(this,"name","file-upload");o(this,"hotkeys",[{keys:"Ctrl+Alt+U",description:"Upload file",command:"file-upload",icon:"📎"}]);o(this,"editor",null);o(this,"uploader");o(this,"menu",null);o(this,"config",{});o(this,"toolbarButton",null);o(this,"handleFileLinkClick",async e=>{const t=e.target.closest(".file-link");if(t instanceof HTMLElement){const i=t.getAttribute("data-file-id");if(i)try{await this.uploader.downloadFile(i)}catch(l){console.error("Download failed:",l)}}});this.config=e,this.uploader=new d.FileUploader(e)}initialize(e){this.menu=new u.FileUploadMenu(e,this.uploader,this.config,t=>{this.insertFileLink(t)}),this.editor=e,this.addToolbarButton(),this.setupEventListeners(),this.editor.on("file-upload",()=>{var t;(t=this.editor)==null||t.ensureEditorFocus(),this.showUploadMenu()})}addToolbarButton(){var t;const e=document.querySelector(".editor-toolbar");e&&(this.toolbarButton=c.createToolbarButton({icon:p.default,title:((t=this.editor)==null?void 0:t.t("Upload File"))??"",onClick:()=>this.showUploadMenu()}),e.appendChild(this.toolbarButton))}setupEventListeners(){if(!this.editor)return;this.editor.getContainer().addEventListener("click",this.handleFileLinkClick)}showUploadMenu(){var e;(e=this.menu)==null||e.show()}insertFileLink(e){var l;if(!this.editor)return;const t=f.createLink("");t.className="file-link",t.setAttribute("data-file-id",e.id),t.innerHTML=` ${h.default} ${e.name} (${this.uploader.formatFileSize(e.size)}) `,(l=this.editor)==null||l.ensureEditorFocus();const i=window.getSelection();if(i&&i.rangeCount>0){const r=i.getRangeAt(0);r.deleteContents(),r.insertNode(t),r.collapse(!1)}else this.editor.getContainer().appendChild(t)}destroy(){var e,t;this.toolbarButton&&this.toolbarButton.parentElement&&this.toolbarButton.parentElement.removeChild(this.toolbarButton),this.editor&&this.editor.getContainer().removeEventListener("click",this.handleFileLinkClick),(e=this.editor)==null||e.off("file-upload",()=>{var i;(i=this.editor)==null||i.ensureEditorFocus(),this.showUploadMenu()}),(t=this.menu)==null||t.destroy(),this.editor=null,this.menu=null,this.toolbarButton=null}}exports.FileUploadPlugin=k;