Files
liceo-ariosto/media/plg_editors_codemirror/js/codemirror.min.js
2025-06-17 11:53:18 +02:00

1 line
2.3 KiB
JavaScript

import{highlightSpecialChars,drawSelection,lineNumbers,EditorView,highlightActiveLineGutter,highlightActiveLine,keymap}from"@codemirror/view";export{EditorView,keymap}from"@codemirror/view";import{Compartment,EditorState}from"@codemirror/state";export{EditorState}from"@codemirror/state";import{syntaxHighlighting,defaultHighlightStyle,foldGutter}from"@codemirror/language";import{history,defaultKeymap,historyKeymap,emacsStyleKeymap}from"@codemirror/commands";import{highlightSelectionMatches,searchKeymap}from"@codemirror/search";import{closeBrackets}from"@codemirror/autocomplete";const minimalSetup=()=>[highlightSpecialChars(),history(),drawSelection(),syntaxHighlighting(defaultHighlightStyle,{fallback:!0})],optionsToExtensions=async e=>{const t=[],o=[];if(e.mode){const{mode:i}=e,r=e[i]||{};o.push(import(`@codemirror/lang-${e.mode}`).then((o=>{if("php"===i)return import("@codemirror/lang-html").then((({html:i})=>{const r=e.html||{selfClosingTags:!0};t.push(o.php({baseLanguage:i(r).language}))}));"html"===i&&(r.selfClosingTags=!0),t.push(o[e.mode](r))})).catch((t=>{console.error(`Cannot creat an extension for "${e.mode}" syntax mode.`,t)})))}if(e.lineNumbers&&t.push(lineNumbers()),e.lineWrapping&&t.push(EditorView.lineWrapping),e.activeLine&&t.push(highlightActiveLineGutter(),highlightActiveLine()),e.highlightSelection&&t.push(highlightSelectionMatches()),e.autoCloseBrackets&&t.push(closeBrackets()),e.foldGutter&&t.push(foldGutter()),"emacs"===e.keyMap)t.push(keymap.of([...emacsStyleKeymap,...historyKeymap]));else t.push(keymap.of([...defaultKeymap,...searchKeymap,...historyKeymap]));const i=new Compartment;return i.$j_name="readOnly",t.push(i.of(EditorState.readOnly.of(!!e.readOnly))),e.customExtensions&&e.customExtensions.length&&e.customExtensions.forEach((e=>{if(e instanceof Function)return void t.push(e());const[i,r]=e;o.push(import(i).then((e=>{r.forEach((o=>{t.push(e[o]())}))})))})),Promise.all(o).then((()=>t))};async function createFromTextarea(e,t){const o=[minimalSetup(),await optionsToExtensions(t)],i=new EditorView({doc:e.value,root:t.root||null,extensions:o});return e.parentNode.insertBefore(i.dom,e),e.style.display="none",e.form&&e.form.addEventListener("submit",(()=>{e.value=i.state.doc.toString()})),t.width&&(i.dom.style.width=t.width),t.height&&(i.dom.style.height=t.height),i}export{createFromTextarea,minimalSetup,optionsToExtensions};