1 line
1.7 KiB
JavaScript
1 line
1.7 KiB
JavaScript
window.tinymce.PluginManager.add("joomlaHighlighter",(e=>{let t=!1;const o=()=>{if(t)return;let o;t=!0;const n={title:"Source code",body:{type:"panel",classes:["joomla-highlighter-dialog"],items:[{type:"textarea",name:"textarea",inputMode:"text",maximized:!0}]},size:"large",buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",buttonType:"primary"}],onSubmit:t=>{var n;n=o.state.doc.toString(),e.focus(),e.undoManager.transact((()=>{e.setContent(n)})),e.selection.setCursorLocation(),e.nodeChanged(),t.close()},onClose:()=>{o.destroy(),o=null,t=!1}};Promise.all([import("codemirror"),import("@codemirror/view"),import("@codemirror/commands")]).then((([{createFromTextarea:t},{keymap:r},{indentMore:a}])=>{e.windowManager.open(n);const i=document.querySelector(".joomla-highlighter-dialog textarea"),c=i.parentElement,l=c.attachShadow({mode:"open"});i.value=e.getContent({source_view:!0}),l.appendChild(i);const d=(e,t)=>{t.preventDefault();const o=c.closest('[role="dialog"]'),n=o.querySelector('.tox-dialog__footer [type="button"]:not(.tox-button--secondary)');n?n.focus():o.focus()},s={mode:"html",lineNumbers:!0,lineWrapping:!0,activeLine:!0,highlightSelection:!0,foldGutter:!0,width:"100%",height:"100%",root:l,customExtensions:[()=>r.of([{key:"Tab",run:a,shift:d}])]},u=c.scrollHeight;t(i,s).then((e=>{o=e,o.focus(),o.dom.style.maxHeight=`${u}px`}))}))};return e.ui.registry.addButton("code",{icon:"sourcecode",title:"Source code+",tooltip:"Source code+",onAction:o}),e.ui.registry.addMenuItem("code",{icon:"sourcecode",text:"Source code+",onAction:o,context:"tools"}),e.addShortcut("Alt+U","Opens the code editor",o),{getMetadata:()=>({name:"Source Code Editor (Joomla)",url:"https://www.joomla.org/"})}})); |