parent
f018addf13
commit
3826e9c576
@ -0,0 +1,103 @@ |
||||
|
||||
export const registerCommandAction = (name, command, activate, dispatch) => { |
||||
const commands: any = {} |
||||
const _commands: any = {} |
||||
_commands[name] = command |
||||
const data: any = { |
||||
// lineLength: props.options.lineLength || 80,
|
||||
session: [], |
||||
activeFilters: { commands: {}, input: '' }, |
||||
filterFns: {} |
||||
} |
||||
const _INDEX = { |
||||
all: [], |
||||
allMain: [], |
||||
commands: {}, |
||||
commandsMain: {} |
||||
} |
||||
|
||||
const registerFilter = (commandName, filterFn) => { |
||||
data.filterFns[commandName] = filterFn |
||||
} |
||||
|
||||
// const _appendItem = (item) => {
|
||||
// var { el, gidx } = item
|
||||
// _JOURNAL[gidx] = item
|
||||
// if (!_jobs.length) {
|
||||
// requestAnimationFrame(function updateTerminal () {
|
||||
// _jobs.forEach(el => _view.journal.appendChild(el))
|
||||
// .scroll2bottom()
|
||||
// ._jobs = []
|
||||
// })
|
||||
// }
|
||||
// if (data.activeFilters.commands[item.cmd]) _jobs.push(el)
|
||||
// }
|
||||
|
||||
commands[name] = function () { |
||||
const args = [...arguments] |
||||
const steps = [] |
||||
const root = { steps, cmd: name, gidx: 0, idx: 0 } |
||||
const ITEM = { root, cmd: name } |
||||
root.gidx = _INDEX.allMain.push(ITEM) - 1 |
||||
// root.idx = _INDEX.commandsMain[name].push(ITEM) - 1
|
||||
let item |
||||
function append (cmd, params, el) { |
||||
if (cmd) { // subcommand
|
||||
item = { el, cmd, root } |
||||
} else { // command
|
||||
item = ITEM |
||||
item.el = el |
||||
cmd = name |
||||
} |
||||
item.gidx = _INDEX.all.push(item) - 1 |
||||
item.idx = _INDEX.commands[cmd].push(item) - 1 |
||||
item.step = steps.push(item) - 1 |
||||
item.args = params |
||||
// _appendItem(item)
|
||||
console.log({ item }, 'append items') |
||||
// self._appendItem(item)
|
||||
} |
||||
var scopedCommands = _scopeCommands(append) |
||||
command(args, scopedCommands, el => append(null, args, blockify(el))) |
||||
console.log({ args }) |
||||
} |
||||
const help = typeof command.help === 'string' ? command.help : [ |
||||
'// no help available for:', `terminal.command.${name}` |
||||
].join('\n') |
||||
commands[name].toString = () => { return help } |
||||
commands[name].help = help |
||||
data.activeFilters.commands[name] = activate && activate.activate |
||||
if (activate.filterFn) { |
||||
registerFilter(name, activate.filterFn) |
||||
} |
||||
dispatch({ type: name, payload: { commands: commands, _commands: _commands, data: data } }) |
||||
|
||||
const blockify = (el) => { |
||||
return `<div class="px-4 block_2A0YE0" data-id="block_null">${el}</div>` |
||||
} |
||||
|
||||
const _scopeCommands = (append) => { |
||||
const scopedCommands = {} |
||||
Object.keys(commands).forEach(function makeScopedCommand (cmd) { |
||||
var command = _commands[cmd] |
||||
scopedCommands[cmd] = function _command () { |
||||
var args = [...arguments] |
||||
console.log({ cmd }, { args }, { blockify }) |
||||
command(args, scopedCommands, el => append(cmd, args, blockify(el))) |
||||
} |
||||
}) |
||||
console.log({ scopedCommands }) |
||||
return scopedCommands |
||||
} |
||||
|
||||
} |
||||
|
||||
export const filterFnAction = (name, filterFn, dispatch) => { |
||||
const data: any = { |
||||
// session: [],
|
||||
// activeFilters: { commands: {}, input: '' },
|
||||
filterFns: {} |
||||
} |
||||
data.filterFns[name] = filterFn |
||||
dispatch({ type: name, payload: { data: data } }) |
||||
} |
@ -0,0 +1,120 @@ |
||||
export const initialState = { |
||||
journalBlocks: { |
||||
}, |
||||
data: { |
||||
// lineLength: props.options.lineLength || 80,
|
||||
session: [], |
||||
activeFilters: { commands: {}, input: '' }, |
||||
filterFns: {} |
||||
}, |
||||
_commandHistory: [], |
||||
_commands: {}, |
||||
commands: {}, |
||||
_JOURNAL: [], |
||||
_jobs: [], |
||||
_INDEX: { |
||||
}, |
||||
_INDEXall: [], |
||||
_INDEXallMain: [], |
||||
_INDEXcommands: {}, |
||||
_INDEXcommandsMain: {} |
||||
} |
||||
|
||||
export const registerCommandReducer = (state, action) => { |
||||
switch (action.type) { |
||||
case 'html' : |
||||
return { |
||||
...state, |
||||
_commands: Object.assign(initialState._commands, action.payload._commands), |
||||
commands: Object.assign(initialState.commands, action.payload.commands), |
||||
data: Object.assign(initialState.data, { ...action.payload.data }) |
||||
} |
||||
case 'log': |
||||
return { |
||||
...state, |
||||
_commands: Object.assign(initialState._commands, action.payload._commands), |
||||
commands: Object.assign(initialState.commands, action.payload.commands), |
||||
data: Object.assign(initialState.data, { ...action.payload.data }) |
||||
|
||||
} |
||||
case 'info': |
||||
return { |
||||
...state, |
||||
_commands: Object.assign(initialState._commands, action.payload._commands), |
||||
commands: Object.assign(initialState.commands, action.payload.commands), |
||||
data: Object.assign(initialState.data, action.payload.data) |
||||
} |
||||
case 'warn': |
||||
return { |
||||
...state, |
||||
_commands: Object.assign(initialState._commands, action.payload._commands), |
||||
commands: Object.assign(initialState.commands, action.payload.commands), |
||||
data: Object.assign(initialState.data, action.payload.data) |
||||
} |
||||
case 'error': |
||||
return { |
||||
...state, |
||||
_commands: Object.assign(initialState._commands, action.payload._commands), |
||||
commands: Object.assign(initialState.commands, action.payload.commands), |
||||
data: Object.assign(initialState.data, action.payload.data) |
||||
} |
||||
case 'script': |
||||
return { |
||||
...state, |
||||
_commands: Object.assign(initialState._commands, action.payload._commands), |
||||
commands: Object.assign(initialState.commands, action.payload.commands), |
||||
data: Object.assign(initialState.data, action.payload.data) |
||||
} |
||||
default : |
||||
return { state } |
||||
} |
||||
} |
||||
|
||||
export const registerFilterReducer = (state, action) => { |
||||
switch (action.type) { |
||||
case 'log': |
||||
console.log({ action }, { state }, 'register Filter') |
||||
return { |
||||
...state, |
||||
data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns) |
||||
|
||||
} |
||||
case 'info': |
||||
console.log({ action }, 'registerFilter') |
||||
return { |
||||
...state, |
||||
data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns) |
||||
} |
||||
case 'warn': |
||||
return { |
||||
...state, |
||||
data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns) |
||||
} |
||||
case 'error': |
||||
return { |
||||
...state, |
||||
data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns) |
||||
} |
||||
case 'script': |
||||
return { |
||||
...state, |
||||
data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns) |
||||
} |
||||
default : |
||||
return { state } |
||||
} |
||||
} |
||||
|
||||
export const addCommandHistoryReducer = (state, action) => { |
||||
switch (action.type) { |
||||
case 'cmdHistory': |
||||
console.log({ action }, { state }, 'cmd history') |
||||
return { |
||||
...state, |
||||
_commandHistory: initialState._commandHistory.unshift(action.payload.script) |
||||
|
||||
} |
||||
default : |
||||
return { state } |
||||
} |
||||
} |
Loading…
Reference in new issue