43 lines
1 KiB
Text
43 lines
1 KiB
Text
|
|
#!/bin/sh
|
||
|
|
source /etc/profile.sh
|
||
|
|
|
||
|
|
file(){
|
||
|
|
javascript='
|
||
|
|
|
||
|
|
filename="'$(pwd)/$1'"
|
||
|
|
res = ""
|
||
|
|
|
||
|
|
function saveUint8Array(uint8Array, filename = "download.bin", mimeType = "application/octet-stream") {
|
||
|
|
if( !uint8Array ){
|
||
|
|
console.log( res = "file not found" )
|
||
|
|
return false
|
||
|
|
}
|
||
|
|
const blob = new Blob([uint8Array], { type: mimeType });
|
||
|
|
const url = URL.createObjectURL(blob);
|
||
|
|
|
||
|
|
const a = document.createElement("a");
|
||
|
|
a.href = url;
|
||
|
|
a.download = filename.replace(/.*\//,"");
|
||
|
|
|
||
|
|
// Programmatically trigger the click event
|
||
|
|
document.body.appendChild(a);
|
||
|
|
a.click();
|
||
|
|
document.body.removeChild(a);
|
||
|
|
|
||
|
|
// Clean up the URL object
|
||
|
|
URL.revokeObjectURL(url);
|
||
|
|
}
|
||
|
|
|
||
|
|
let term = document.querySelector("[isoterminal]")
|
||
|
|
term.emit("read_file", [filename, (str,buf) => saveUint8Array(buf, filename) ] )
|
||
|
|
|
||
|
|
return res
|
||
|
|
'
|
||
|
|
hook save
|
||
|
|
js "$javascript"
|
||
|
|
exit
|
||
|
|
}
|
||
|
|
|
||
|
|
test -n "$1" && file "$1"
|
||
|
|
echo "Usage: download [file] # pass no argument to save VM state to localStorage"
|