diff --git a/apps/remix-ide/src/app/panels/terminal.js b/apps/remix-ide/src/app/panels/terminal.js index 638b97f5ed..db4e5abc34 100644 --- a/apps/remix-ide/src/app/panels/terminal.js +++ b/apps/remix-ide/src/app/panels/terminal.js @@ -92,6 +92,18 @@ class Terminal extends Plugin { } onActivation () { + this.on('scriptRunner', 'log', (msg) => { + this.commands.log.apply(this.commands, msg.data) + }) + this.on('scriptRunner', 'info', (msg) => { + this.commands.info.apply(this.commands, msg.data) + }) + this.on('scriptRunner', 'warn', (msg) => { + this.commands.warn.apply(this.commands, msg.data) + }) + this.on('scriptRunner', 'error', (msg) => { + this.commands.error.apply(this.commands, msg.data) + }) this.renderComponent() } diff --git a/libs/remix-ui/terminal/src/lib/remix-ui-terminal.tsx b/libs/remix-ui/terminal/src/lib/remix-ui-terminal.tsx index 10aab7725d..1d95702f0e 100644 --- a/libs/remix-ui/terminal/src/lib/remix-ui-terminal.tsx +++ b/libs/remix-ui/terminal/src/lib/remix-ui-terminal.tsx @@ -1,3 +1,4 @@ +<<<<<<< HEAD import React, { useState, useEffect, useReducer, useRef, SyntheticEvent, MouseEvent } from 'react' // eslint-disable-line import { useKeyPress } from './custom-hooks/useKeyPress' // eslint-disable-line import { useWindowResize } from 'beautiful-react-hooks' @@ -9,6 +10,9 @@ import {allCommands, allPrograms} from './commands' // eslint-disable-line import { CopyToClipboard } from '@remix-ui/clipboard' // eslint-disable-line import { ModalDialog } from '@remix-ui/modal-dialog' // eslint-disable-line import TerminalWelcomeMessage from './terminalWelcome' // eslint-disable-line +======= +import React, { useState, useEffect, useRef, SyntheticEvent } from 'react' // eslint-disable-line +>>>>>>> 69029a97a (remix id terminal update) import './remix-ui-terminal.css' // const TxLogger from '../../../apps/' @@ -31,6 +35,7 @@ export interface RemixUiTerminalProps { options: any data: any cmdInterpreter: any +<<<<<<< HEAD command: any version: any config: any @@ -46,6 +51,13 @@ export interface RemixUiTerminalProps { txListener: any, eventsDecoder: any, logHtml: any +======= + registerCommand: any +} + +export interface ClipboardEvent extends SyntheticEvent { + clipboardData: DataTransfer; +>>>>>>> 69029a97a (remix id terminal update) } export interface ClipboardEvent extends SyntheticEvent { @@ -54,6 +66,7 @@ export interface ClipboardEvent extends SyntheticEvent { export const RemixUiTerminal = (props: RemixUiTerminalProps) => { const [toggleDownUp, setToggleDownUp] = useState('fa-angle-double-down') +<<<<<<< HEAD const [_cmdIndex, setCmdIndex] = useState(-1) const [_cmdTemp, setCmdTemp] = useState('') const [_cmdHistory, setCmdHistory] = useState([]) @@ -93,10 +106,31 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => { useWindowResize(() => { setWindowHeight(window.innerHeight) +======= + const [inserted, setInserted] = useState(false) + + const [state, setState] = useState({ + data: { + // lineLength: props.options.lineLength || 80, + session: [], + activeFilters: { commands: {}, input: '' }, + filterFns: {} + }, + _commands: {}, + commands: {}, + _JOURNAL: [], + _jobs: [], + _INDEX: {}, + _INDEXall: [], + _INDEXallMain: [], + _INDEXcommands: {}, + _INDEXcommandsMain: {} +>>>>>>> 69029a97a (remix id terminal update) }) // terminal inputRef const inputEl = useRef(null) +<<<<<<< HEAD const messagesEndRef = useRef(null) const scrollToBottom = () => { @@ -215,6 +249,8 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => { } } +======= +>>>>>>> 69029a97a (remix id terminal update) // events useEffect(() => { // window.addEventListener('resize', function () { @@ -229,6 +265,25 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => { // } }, []) + // handle events + const handlePaste = (event: ClipboardEvent) => { + // Do something + const selection = window.getSelection() + if (!selection.rangeCount) return false + event.preventDefault() + event.stopPropagation() + var clipboard = (event.clipboardData) // || window.clipboardData + var text = clipboard.getData('text/plain') + text = text.replace(/[^\x20-\xFF]/gi, '') // remove non-UTF-8 characters + var temp = document.createElement('div') + temp.innerHTML = text + var textnode = document.createTextNode(temp.textContent) + selection.getRangeAt(0).insertNode(textnode) + selection.empty() + // self.scroll2bottom() + // placeCaretAtEnd(event.currentTarget) + } + const handleMinimizeTerminal = (event) => { event.preventDefault() event.stopPropagation() @@ -244,6 +299,7 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => { console.log(props.event, 'event.trigger') } +<<<<<<< HEAD const focusinput = () => { inputEl.current.focus() } @@ -337,9 +393,60 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => { inputEl.current.focus() } else { setCmdTemp(inputEl.current.innerText) +======= + // const reattached = (event) => { + // let el = event.currentTarget + // var isBottomed = el.scrollHeight - el.scrollTop - el.clientHeight < 30 + // if (isBottomed) { + + // } else { + // // if (!inserted) + // } + // } + + const registerCommand = (name, command, opts) => { + const { _commands, _INDEXcommands, _INDEXallMain, _INDEXcommandsMain, _INDEXall, commands } = state + // TODO if no _commands[name] throw an error + + // TODO if typeof command !== 'function' throw error + + _commands[name] = command + _INDEXcommands[name] = [] + _INDEXallMain[name] = [] + + // TODO _command function goes here + commands[name] = function _command () { + const steps = [] + const args = [...arguments] + const gidx = 0 + const idx = 0 + const step = 0 + const root = { steps, cmd: name, gidx, idx } + const ITEM = { root, cmd: name, el: {} } + root.gidx = _INDEXallMain.push(ITEM) - 1 + root.idx = _INDEXcommandsMain[name].push(ITEM) - 1 + function append (cmd, params, el) { + let item = { el, cmd, root, gidx, idx, step, args: [...arguments] } + if (cmd) { + item = { el, cmd, root, gidx, idx, step, args } + } else { + // item = ITEM + item.el = el + cmd = name + } + item.gidx = _INDEXall.push(item) - 1 + item.idx = _INDEXcommands[cmd].push(item) - 1 + item.step = steps.push(item) - 1 + item.args = params + _appendItem(item) + } +>>>>>>> 69029a97a (remix id terminal update) } + + return commands[name] } +<<<<<<< HEAD /* start of mouse events */ const mousedown = (event: MouseEvent) => { @@ -837,6 +944,27 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => { setPaste(true) setAutoCompleteState(prevState => ({ ...prevState, activeSuggestion: 0, showSuggestions: false})) } +======= + const _appendItem = (item: any) => { + let { _JOURNAL, _jobs, data } = state + const self = props + const { el, gidx } = item + _JOURNAL[gidx] = item + if (!_jobs.length) { + // requestAnimationFrame(function updateTerminal () { + // self._jobs.forEach(el => self._view.journal.appendChild(el)) + // self.scroll2bottom() + _jobs = [] + } + if (data.activeFilters.commands[item.cmd]) _jobs.push(el) + } + + const focusinput = () => { + inputEl.current.focus() + } + + +>>>>>>> 69029a97a (remix id terminal update) return (
@@ -899,6 +1027,7 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => { zIndex: -1 }}>
+<<<<<<< HEAD
{!clearConsole && } {newstate.journalBlocks && newstate.journalBlocks.map((x, index) => { @@ -933,6 +1062,19 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => {
{'>'} onChange(event)} onKeyDown={(event) => handleKeyDown(event) } value={autoCompletState.userInput} onPaste={handlePaste}> +======= +
+
+ {/* ${background} */} +
+ {/* ${text} */} +
+
+
+
+ {'>'} + +>>>>>>> 69029a97a (remix id terminal update)