import dynamic from 'next/dynamic' // import * as ts from "typescript"; import Component, { PageEl } from '../Component'; import ReplacePro from '../ReplacePro'; import Copy from '../Copy'; let AceEditor: any = (p) => null export default p => Component(p, Page); const Page: PageEl = (props, state, refresh, getProps) => { if (props.functions) { props.functions.save = async () => { await save() } } if (props.lastrefresh != state.lastrefresh && state.editor) { state.lastrefresh = props.lastrefresh; state.editor.value = props.inittxt; state.code = props.inittxt; refresh(); } const save = async () => { props.onsave?.(state.code) setTimeout(() => { global.success(lang.savedsuccess) }, 400); } const handleKeyDown = async (event) => { if (event.ctrlKey && event.keyCode === 88) { //ctrl+x const cursorPos = state.editor.getCursorPosition(); Copy(state.editor.session.getLine(cursorPos.row)) const value = state.editor.getValue(); const lines = value.split("\n"); const newLines = lines.slice(0, cursorPos.row).concat(lines.slice(cursorPos.row + 1)); const newValue = newLines.join("\n"); state.editor.setValue(newValue, -1); state.editor.gotoLine(cursorPos.row + 1, 0); } else if (event.ctrlKey && event.keyCode === 83) { event.preventDefault(); await save(); } } getProps(async () => { const allcompletors = Object.keys(props.Completer || {}).map(k => { return { w: k, c: props.Completer[k].c } }) state.completer = { getCompletions: (editor, session, pos, prefix, callback) => { let funcs2 = Object.keys(props.Completer || {}).map((keyword) => { return { caption: keyword, value: keyword, meta: "funtion", score: 10, completer: { insertMatch: function (editor, data) { const cursorPos = editor.getCursorPosition(); const lineStart = editor.session.getLine(cursorPos.row).match(/^\s*/)[0].length; editor.session.replace( { start: { row: cursorPos.row, column: lineStart }, end: cursorPos, }, `${data.value}${props.Completer?.[data.value]?.s}` ); }, }, }; }); callback(null, [...funcs2]); } }; if (!state.AceEditorLoaded) { state.AceEditorLoaded = true; const uu = async () => { const ace = await import('react-ace'); await import('ace-builds/src-noconflict/ace'); await import('ace-builds/src-noconflict/ext-language_tools'); await import('ace-builds/src-noconflict/ext-emmet'); await import('ace-builds/src-noconflict/ext-beautify'); let mode = await import('./Mode.js') mode.Runner(allcompletors) await import('./Theme.js'); return ace; } AceEditor = dynamic( uu as any, { ssr: false } ); } window.addEventListener('keydown', handleKeyDown); state.code = props.inittxt || "" }); return
{ReplacePro(state.error, "\n",
)}