|
|
|
|
@ -10,11 +10,14 @@
|
|
|
|
|
<script src="www/xterm/xterm.js"></script> |
|
|
|
|
<script src="www/xterm-addon-fit/xterm-addon-fit.js"></script> |
|
|
|
|
<script src="www/xterm-addon-unicode11/xterm-addon-unicode11.js"></script> |
|
|
|
|
|
|
|
|
|
<link href="www/fontawesome/fontawesome.min.css" rel="stylesheet"> |
|
|
|
|
<link href="www/fontawesome/regular.min.css" rel="stylesheet"> |
|
|
|
|
<!-- |
|
|
|
|
<link href="https://ceccopierangiolieugenio.github.io/binaryRepo/pyTermTk/www/xterm/xterm.css" rel="stylesheet" /> |
|
|
|
|
<script src="https://ceccopierangiolieugenio.github.io/binaryRepo/pyTermTk/www/xterm/xterm.js"></script> |
|
|
|
|
<script src="https://ceccopierangiolieugenio.github.io/binaryRepo/pyTermTk/www/xterm-addon-fit/xterm-addon-fit.js"></script> |
|
|
|
|
--> |
|
|
|
|
<script src="js/ttkproxy.js"></script> |
|
|
|
|
</head> |
|
|
|
|
<body> |
|
|
|
|
|
|
|
|
|
@ -37,148 +40,27 @@
|
|
|
|
|
|
|
|
|
|
term.write('xterm.js - Loaded\n\r') |
|
|
|
|
|
|
|
|
|
window.addEventListener('resize', (event) => { |
|
|
|
|
setTimeout(()=>{fitAddon.fit()},0.5) |
|
|
|
|
}); |
|
|
|
|
fitAddon.fit() |
|
|
|
|
|
|
|
|
|
/* pyodide demo */ |
|
|
|
|
var pyodide = null |
|
|
|
|
var run = null |
|
|
|
|
var namespace = null |
|
|
|
|
async function main(){ |
|
|
|
|
pyodide = await loadPyodide(); |
|
|
|
|
|
|
|
|
|
let pyodideProxy = { |
|
|
|
|
consoleLog: function(m){ |
|
|
|
|
console.log("TTk:",m) |
|
|
|
|
}, |
|
|
|
|
termPush: function (s) { |
|
|
|
|
term.write(s); |
|
|
|
|
}, |
|
|
|
|
termSize: function () { |
|
|
|
|
return [term.cols, term.rows] |
|
|
|
|
}, |
|
|
|
|
setTimeout: function(t, i) { |
|
|
|
|
// console.log("TIME",i,t) |
|
|
|
|
setTimeout(() => ttk_timer(i), t) |
|
|
|
|
}, |
|
|
|
|
clearTimeout: function(){ |
|
|
|
|
let highestTimeoutId = setTimeout(";"); |
|
|
|
|
for (let i = 0 ; i < highestTimeoutId ; i++) { |
|
|
|
|
clearTimeout(i); |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
setInterval: function(t, i) { |
|
|
|
|
setTinterval(() => console.log('WIP -> Interval' + i), t) |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
pyodide.registerJsModule("pyodideProxy", pyodideProxy); |
|
|
|
|
|
|
|
|
|
term.write('Pyodide Proxy - Loaded\n\r') |
|
|
|
|
|
|
|
|
|
let zipResponse = await fetch("bin/TermTk.tgz"); |
|
|
|
|
let zipBinary = await zipResponse.arrayBuffer(); |
|
|
|
|
pyodide.unpackArchive(zipBinary, ".tar.gz"); |
|
|
|
|
ttkProxy = new TTkProxy(term) |
|
|
|
|
await ttkProxy.init() |
|
|
|
|
|
|
|
|
|
await ttkProxy.loadLib("bin/TermTk.tgz"); |
|
|
|
|
term.write('TermTk - Loaded\n\r') |
|
|
|
|
|
|
|
|
|
zipResponse = await fetch("bin/demo.tgz"); |
|
|
|
|
zipBinary = await zipResponse.arrayBuffer(); |
|
|
|
|
pyodide.unpackArchive(zipBinary, ".tar.gz"); |
|
|
|
|
|
|
|
|
|
await ttkProxy.loadLib("bin/demo.tgz"); |
|
|
|
|
term.write('Demos - Loaded\n\r') |
|
|
|
|
|
|
|
|
|
term.write('Starting Demo...\n\r') |
|
|
|
|
|
|
|
|
|
namespace = pyodide.globals.get("dict")(); |
|
|
|
|
pyodide.runPython(` |
|
|
|
|
import sys |
|
|
|
|
import TermTk as ttk |
|
|
|
|
import pyodideProxy |
|
|
|
|
|
|
|
|
|
def ttk_input(val): |
|
|
|
|
if ttk.TTkHelper._rootWidget and ttk.TTkHelper._rootWidget._input: |
|
|
|
|
ttk.TTkHelper._rootWidget._input.key_process(val) |
|
|
|
|
|
|
|
|
|
def ttk_resize(w,h): |
|
|
|
|
ttk.TTkLog.debug(f"Resize: {w=} {h=}") |
|
|
|
|
if ttk.TTkHelper._rootWidget: |
|
|
|
|
ttk.TTkHelper._rootWidget._win_resize_cb(w,h) |
|
|
|
|
ttk.TTkHelper.rePaintAll() |
|
|
|
|
# TODO: I need to get rid of this: |
|
|
|
|
ttk.TTkTerm.push(ttk.TTkTerm.ALT_SCREEN + ttk.TTkTerm.CLEAR + ttk.TTkTerm.Cursor.HIDE + ttk.TTkTerm.escTitle(ttk.TTkTerm.title)) |
|
|
|
|
ttk.TTkTerm.push(ttk.TTkTerm.Mouse.ON) |
|
|
|
|
|
|
|
|
|
def ttk_timer(tid): |
|
|
|
|
ttk.TTkTimer.triggerTimerId(tid) |
|
|
|
|
|
|
|
|
|
def ttk_log(val): |
|
|
|
|
# hex = [f"0x{ord(x):02x}" for x in val] |
|
|
|
|
ttk.TTkLog.debug("---> "+val.replace("\\033","<ESC>") + " - ") |
|
|
|
|
ttk.TTkHelper.paintAll() |
|
|
|
|
|
|
|
|
|
def ttk_clean(): |
|
|
|
|
if ttk.TTkHelper._rootWidget: |
|
|
|
|
ttk.TTkTimer.pyodideQuit() |
|
|
|
|
ttk.TTkHelper._rootWidget.quit() |
|
|
|
|
ttk.TTkHelper._focusWidget = None |
|
|
|
|
ttk.TTkHelper._rootCanvas = None |
|
|
|
|
ttk.TTkHelper._rootWidget = None |
|
|
|
|
ttk.TTkHelper._updateBuffer = [] |
|
|
|
|
ttk.TTkHelper._updateWidget = [] |
|
|
|
|
ttk.TTkHelper._overlay = [] |
|
|
|
|
ttk.TTkHelper._shortcut = [] |
|
|
|
|
ttk.TTkLog._messageHandler = [message_handler] |
|
|
|
|
|
|
|
|
|
def message_handler(mode, context, message): |
|
|
|
|
msgType = "DEBUG" |
|
|
|
|
if mode == ttk.TTkLog.InfoMsg: msgType = "[INFO]" |
|
|
|
|
elif mode == ttk.TTkLog.WarningMsg: msgType = "[WARNING]" |
|
|
|
|
elif mode == ttk.TTkLog.CriticalMsg: msgType = "[CRITICAL]" |
|
|
|
|
elif mode == ttk.TTkLog.FatalMsg: msgType = "[FATAL]" |
|
|
|
|
elif mode == ttk.TTkLog.ErrorMsg: msgType = "[ERROR]" |
|
|
|
|
pyodideProxy.consoleLog(f"{msgType} {context.file} {message}") |
|
|
|
|
# Register the callback to the message handler |
|
|
|
|
ttk.TTkLog.installMessageHandler(message_handler) |
|
|
|
|
`,{ globals: namespace } |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
let ttk_log = namespace.get("ttk_log"); |
|
|
|
|
let ttk_input = namespace.get("ttk_input"); |
|
|
|
|
let ttk_timer = namespace.get("ttk_timer"); |
|
|
|
|
let ttk_resize = namespace.get("ttk_resize"); |
|
|
|
|
let ttk_clean = namespace.get("ttk_clean"); |
|
|
|
|
|
|
|
|
|
term.onResize( (obj) => { |
|
|
|
|
term.reset() |
|
|
|
|
ttk_resize(obj.cols, obj.rows) |
|
|
|
|
}); |
|
|
|
|
term.onData((d, evt) => { ttk_input(d) }) |
|
|
|
|
|
|
|
|
|
pyodide.runPython(` |
|
|
|
|
import sys,os |
|
|
|
|
sys.path.append(os.path.join(sys.path[0],'demo')) |
|
|
|
|
__file__='/home/pyodide/demo/demo.py' |
|
|
|
|
__name__ = "__main__" |
|
|
|
|
os.chdir('/home/pyodide/demo') |
|
|
|
|
`,{ globals: namespace } |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
console.log("Run App") |
|
|
|
|
|
|
|
|
|
let content = pyodide.FS.readFile("demo.py", {encoding:'utf8'}) |
|
|
|
|
pyodide.runPython(content,{ globals: namespace }); |
|
|
|
|
|
|
|
|
|
// TODO: I need to get rid of this: |
|
|
|
|
pyodide.runPython(` |
|
|
|
|
# TODO: I need to get rid of this: |
|
|
|
|
ttk.TTkTerm.push(ttk.TTkTerm.ALT_SCREEN + ttk.TTkTerm.CLEAR + ttk.TTkTerm.Cursor.HIDE + ttk.TTkTerm.escTitle(ttk.TTkTerm.title)) |
|
|
|
|
ttk.TTkTerm.push(ttk.TTkTerm.Mouse.ON) |
|
|
|
|
`,{ globals: namespace } |
|
|
|
|
); |
|
|
|
|
ttk_log("demo/demo.py - LOADED") |
|
|
|
|
console.log("pippo") |
|
|
|
|
fitAddon.fit() |
|
|
|
|
ttkProxy.preRun() |
|
|
|
|
|
|
|
|
|
let file = "demo/demo.py" |
|
|
|
|
let content = ttkProxy.readFile(file) |
|
|
|
|
|
|
|
|
|
ttkProxy.run(content, file, 60) |
|
|
|
|
} |
|
|
|
|
main() |
|
|
|
|
</script> |
|
|
|
|
|