Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
baas-ide
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
guxukai
baas-ide
Commits
a7fdf6f4
Commit
a7fdf6f4
authored
Jul 09, 2021
by
tizah
Committed by
davidzagi93@gmail.com
Sep 14, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
remix id terminal update
parent
486daf4b
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
144 additions
and
6 deletions
+144
-6
terminal.js
apps/remix-ide/src/app/panels/terminal.js
+15
-1
remix-ui-terminal.tsx
libs/remix-ui/terminal/src/lib/remix-ui-terminal.tsx
+122
-5
terminalTypes.ts
libs/remix-ui/terminal/src/lib/types/terminalTypes.ts
+7
-0
No files found.
apps/remix-ide/src/app/panels/terminal.js
View file @
a7fdf6f4
...
@@ -91,6 +91,18 @@ class Terminal extends Plugin {
...
@@ -91,6 +91,18 @@ class Terminal extends Plugin {
}
}
onActivation
()
{
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
()
this
.
renderComponent
()
}
}
...
@@ -108,7 +120,9 @@ class Terminal extends Plugin {
...
@@ -108,7 +120,9 @@ class Terminal extends Plugin {
options
=
{
this
.
opts
}
options
=
{
this
.
opts
}
data
=
{
this
.
data
}
data
=
{
this
.
data
}
cmdInterpreter
=
{
this
.
_components
.
cmdInterpreter
}
cmdInterpreter
=
{
this
.
_components
.
cmdInterpreter
}
autoCompletePopup
=
{
this
.
_components
.
autoCompletePopup
}
/>
,
autoCompletePopup
=
{
this
.
_components
.
autoCompletePopup
}
registerCommand
=
{
this
.
registerCommand
}
/>
,
this
.
element
this
.
element
)
)
}
}
...
...
libs/remix-ui/terminal/src/lib/remix-ui-terminal.tsx
View file @
a7fdf6f4
import
React
,
{
useState
,
useEffect
}
from
'react'
// eslint-disable-line
import
React
,
{
useState
,
useEffect
,
useRef
,
SyntheticEvent
}
from
'react'
// eslint-disable-line
import
'./remix-ui-terminal.css'
import
'./remix-ui-terminal.css'
...
@@ -13,12 +13,38 @@ export interface RemixUiTerminalProps {
...
@@ -13,12 +13,38 @@ export interface RemixUiTerminalProps {
options
:
any
options
:
any
data
:
any
data
:
any
cmdInterpreter
:
any
cmdInterpreter
:
any
registerCommand
:
any
}
export
interface
ClipboardEvent
<
T
=
Element
>
extends
SyntheticEvent
<
T
,
any
>
{
clipboardData
:
DataTransfer
;
}
}
export
const
RemixUiTerminal
=
(
props
:
RemixUiTerminalProps
)
=>
{
export
const
RemixUiTerminal
=
(
props
:
RemixUiTerminalProps
)
=>
{
const
[
toggleDownUp
,
setToggleDownUp
]
=
useState
(
'fa-angle-double-down'
)
const
[
toggleDownUp
,
setToggleDownUp
]
=
useState
(
'fa-angle-double-down'
)
const
[
inserted
,
setInserted
]
=
useState
(
false
)
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
:
{}
})
// terminal inputRef
const
inputEl
=
useRef
(
null
)
// events
// events
useEffect
(()
=>
{
useEffect
(()
=>
{
// window.addEventListener('resize', function () {
// window.addEventListener('resize', function () {
...
@@ -33,6 +59,25 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => {
...
@@ -33,6 +59,25 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => {
// }
// }
},
[])
},
[])
// handle events
const
handlePaste
=
(
event
:
ClipboardEvent
<
HTMLInputElement
>
)
=>
{
// 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
(
/
[^\x
20-
\x
FF
]
/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
)
=>
{
const
handleMinimizeTerminal
=
(
event
)
=>
{
console
.
log
(
'clikced'
,
props
.
event
)
console
.
log
(
'clikced'
,
props
.
event
)
if
(
toggleDownUp
===
'fa-angle-double-down'
)
{
if
(
toggleDownUp
===
'fa-angle-double-down'
)
{
...
@@ -47,14 +92,76 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => {
...
@@ -47,14 +92,76 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => {
console
.
log
(
props
.
event
,
'event.trigger'
)
console
.
log
(
props
.
event
,
'event.trigger'
)
}
}
const
reattached
=
(
event
)
=>
{
// const reattached = (event) => {
let
el
=
event
.
currentTarget
// let el = event.currentTarget
var
isBottomed
=
el
.
scrollHeight
-
el
.
scrollTop
-
el
.
clientHeight
<
30
// var isBottomed = el.scrollHeight - el.scrollTop - el.clientHeight < 30
if
(
isBottomed
)
{
// 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
)
}
}
}
return
commands
[
name
]
}
}
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
()
}
return
(
return
(
<
div
>
<
div
>
...
@@ -114,6 +221,16 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => {
...
@@ -114,6 +221,16 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => {
}}
></
div
>
}}
></
div
>
<
div
className=
"terminal"
>
<
div
className=
"terminal"
>
<
div
id=
"journal"
className=
"journal"
data
-
id=
"terminalJournal"
>
<
div
id=
"journal"
className=
"journal"
data
-
id=
"terminalJournal"
>
<
div
className=
"anchor"
>
{
/* ${background} */
}
<
div
className=
"overlay background"
></
div
>
{
/* ${text} */
}
<
div
className=
"overlay text"
></
div
>
</
div
>
</
div
>
<
div
id=
"terminalCli"
data
-
id=
"terminalCli"
className=
"cli"
onClick=
{
focusinput
}
>
<
span
className=
"prompt"
>
{
'>'
}
</
span
>
<
span
className=
"input"
ref=
{
inputEl
}
spellCheck=
"false"
contentEditable=
"true"
id=
"terminalCliInput"
data
-
id=
"terminalCliInput"
onPaste=
{
handlePaste
}
></
span
>
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
...
...
libs/remix-ui/terminal/src/lib/types/terminalTypes.ts
0 → 100644
View file @
a7fdf6f4
export
interface
ROOTS
{
steps
:
any
,
cmd
:
string
,
gidx
:
number
,
idx
:
number
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment