shell bypass 403
export default (editor, config) => { const pfx = editor.getConfig('stylePrefix'); const modal = editor.Modal; const codeViewer = editor.CodeManager.getViewer('CodeMirror').clone(); const container = document.createElement('div'); const importLabel = config.modalImportLabel; const importCnt = config.modalImportContent; let viewerEditor = codeViewer.editor; // Init import button const btnImp = document.createElement('button'); btnImp.type = 'button'; btnImp.innerHTML = config.modalImportButton; btnImp.className = `${pfx}btn-prim ${pfx}btn-import`; btnImp.onclick = e => { editor.setComponents(viewerEditor.getValue().trim()); modal.close(); }; // Init code viewer codeViewer.set({ ...{ codeName: 'htmlmixed', theme: 'hopscotch', readOnly: 0 }, ...config.importViewerOptions}); return { run(editor) { if (!viewerEditor) { const txtarea = document.createElement('textarea'); if (importLabel) { const labelEl = document.createElement('div'); labelEl.className = `${pfx}import-label`; labelEl.innerHTML = importLabel; container.appendChild(labelEl); } container.appendChild(txtarea); container.appendChild(btnImp); codeViewer.init(txtarea); viewerEditor = codeViewer.editor; } modal.setTitle(config.modalImportTitle); modal.setContent(container); const cnt = typeof importCnt == 'function' ? importCnt(editor) : importCnt; codeViewer.setContent(cnt || ''); modal.open().getModel() .once('change:open', () => editor.stopCommand(this.id)); viewerEditor.refresh(); }, stop() { modal.close(); } } }