Skip to content

Commit bef1700

Browse files
save file
1 parent 1827b46 commit bef1700

1 file changed

Lines changed: 51 additions & 17 deletions

File tree

utils/misc/nodejs-terminal/nodejs-terminal.html

Lines changed: 51 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@
189189

190190

191191
#icons
192-
{display:flex;align-items:center;gap:5px;margin-right:20px}
192+
{display:flex;align-items:center;gap:5px;margin-right:10px}
193193

194194
.icon
195195
{width:32px;height:32px;border:1px solid gray;border-radius:3px;box-sizing:border-box;cursor:pointer}
@@ -260,9 +260,11 @@
260260
<img id=snippet-console title=snippet-console class=icon>
261261
</div>
262262

263-
<div class=spc>
263+
264+
<div style='width:15px'>
264265
</div>
265266

267+
266268
<div id=more-menu class=m-root>
267269
<div class=m-btn>
268270
<span>
@@ -284,7 +286,8 @@
284286
</span>
285287
<img class=m-icon>
286288
</div>
287-
<div class=menu style='display:none;left:0px;top:35px;width:300px'>
289+
<div class=menu style='display:none;left:0px;top:35px'>
290+
Empty
288291
</div>
289292
</div>
290293

@@ -295,12 +298,23 @@
295298
</span>
296299
<img class=m-icon>
297300
</div>
298-
<div class=menu style='display:none;right:0px;top:35px;width:300px'>
301+
<div class=menu style='display:none;right:0px;top:35px'>
299302
<div class=menu-opt>
300303
<a href='https://webcontainers.io/api' target=_blank>
301304
webcontainers api
302305
</a>
303306
</div>
307+
<div class=menu-opt style='justify-content:flex-start'>
308+
<img style='width:20px;height:20px;margin-right:10px' class=icon src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADkElEQVR4Ab3V1XLcSBQGYC3z3iwzM5NZ3S0mD4aZGV5gGYeZzRxm5jyCX8DXy8y7yZyoPSWXJ5FZyak69vD/6dcAM52Zs3POzd5OYfu8fvmiu5X/XclwC5lrNb4eYev8HdJfi3YrsGCHDPP6JdALPGg5bkgukFevWrC/U3hvwXZpaNkBFZbsVWAEMCCBt10Ew0Q0l4SynufOa2ntbseCXSVy77zt0tEVh7XyisMq2AHm9EoVQJEHd4tgLv+fluc+nXH43H7x85WHtf/XHNdg1VENxgT0SeBpF4YRrpIAnjYBvB0iuFqFH7Uidk09eEBasPyQ8su6UzqsPaHDZACzusWqFijI1ymC37zd3cYPejrkxyYM9nbxzyzZpwxuOGvA+tM6TBVAj9xqwd1aacHfJcKsHnN7xXJzK7+XfoJsw+fvlPPrTuvljecMmC6ABjaPbqGt0gK9b3avBHP7JZjdLfyhl7jaqnDyCbl1Tp94gYbPFOAq8WDk7VugjzNzQEpzO6sBUXIvF8Gw9qQ+YwA9cj1XacFl04JhAnGYPXAFAAcReDtFRwBGodJCs9VCuzDcgq9LABJjxwJgoEuDnADoWRNRGNWCeZ+aIzR8XICp5h0BaCbAOhW0BXo7DqNxAAEMdCli6X7VEYCa5kZakJKYAqy1B1irpnlHAHKSAy1XaYKEJgKEED36EcTCnbIjACnBAR/DQF/fWntAvAlwdPj8mBAEYpyjH8sZA4QYMUMtgLWXA0rv3IvSDYCSDYDjjYAjLG2BvrAjAG5SgHwtoGwdoEw9rWgYwIcJDXYGEJwI0PoeoFIN4HQDDbeWvqgzgEAFYa4NYMAEdL4DqP1ds35UBSBBAssPqs4CAjYAtvctQIXaqnBrXUXBIQAeB9D/pnXubXfxHmWGgKqtBmhHn70FFWr+twu2VslwjgG40GU/x3TYQk0chdnyOAgzTJ4xAAXQr2yYfZuxG9Ra8xTO1A3ioD1AjBNYtn96ABIgF3AIlxhgrmcmGtJWr6JE4/d2CPq7PhUA/RrmIniQTbAPMVMdVKz9HEfZ/0YD+DAxw+VJAcQU+YZLs5iZybySe+VOlKvbi0OobCHo7/t4AK3I/SsX0QeMk1Pf9u5bKNUwZH05zd8uXwHwdPBltb1pL+kktzJXa1CpZpn5g/WbnudHALP7RHD1oSHXAHmRuSbzCXMjztd2+3vEi95e7ldjV6OfmeZcAuAsEWG+c8BcAAAAAElFTkSuQmCC'>
309+
<a href='https://nodejs.org/' target=_blank>
310+
https://nodejs.org/
311+
</a>
312+
</div>
313+
<div style='padding-left:30px' class=menu-opt>
314+
<a href='https://nodejs.org/docs/latest/api/fs.html' target=_blank>
315+
https://nodejs.org/docs/latest/api/fs.html
316+
</a>
317+
</div>
304318
</div>
305319
</div>
306320

@@ -470,7 +484,7 @@
470484
snippet.css.insert_rule([':host {height:100%;}','#root {height:100%}']);
471485
snippet.editor.css.insert_rule([':host {flex:1}','#root {height:100%}']);
472486

473-
snippet.ctx = {snippet,webcontainer,viewport,vm,shell,term,input,output};
487+
snippet.ctx = {snippet,webcontainer,viewport,vm,tabs};
474488

475489

476490
var attrs = {component:'page'};
@@ -531,17 +545,25 @@
531545

532546
menu_callback['https-server'] = async function(){
533547

548+
if(!tabs.cur.view){
549+
log.red('no active terminal');
550+
return;
551+
}
552+
553+
var cwd = tabs.cur.view.terminal.shell.cwd;
534554
if(cwd===null){
535555
term.writeln.red('can only install https-server relative to workdir');
536556
return;
537557
}
538558

559+
var term = tabs.cur.view.terminal.term;
560+
539561
var s;
540562
term.writeln('');
541563
term.write.green('installing https-server ... ');
542564
setTimeout(()=>{
543-
var {x,y} = cursor.xy();
544-
s = spinner({x,y});
565+
var {x,y} = cursor.xy(term);
566+
s = spinner({term,x,y});
545567
term.write('\r\n');
546568
},50);
547569

@@ -583,19 +605,28 @@
583605

584606
s.stop();
585607
term.write.green('ok.');
586-
await prompt();
608+
await term.prompt();
587609

588610
}//https-server
589611

590612

591613
menu_callback['save-snapshot'] = async function(){
592614
console.log('save-snapshot');
615+
if(!tabs.cur.view){
616+
log.red('no active terminal');
617+
return;
618+
}
619+
620+
var cwd = tabs.cur.view.terminal.shell.cwd;
621+
var cwd_abs = tabs.cur.view.terminal.shell.cwd_abs;
593622
console.log(cwd_abs);
594623
if(cwd===null){
595624
term.writeln.red('can only save snapshot relative to workdir');
596625
return;
597626
}
598627

628+
var term = tabs.cur.view.terminal.term;
629+
599630
term.writeln('');
600631
term.writeln.green('saving snapshot ...');
601632

@@ -623,13 +654,20 @@
623654
complete.load(file,blob);
624655

625656
term.writeln.green('ok.');
626-
await prompt();
657+
await term.prompt();
627658

628659
}//take-snapsht
629660

630661

631662
menu_callback['load-snapshot'] = async function(){
632663
console.log('load-snapshot');
664+
if(!tabs.cur.view){
665+
log.red('no active terminal');
666+
return;
667+
}
668+
669+
var cwd = tabs.cur.view.terminal.shell.cwd;
670+
633671
if(cwd===null){
634672
term.writeln.red('can only load snapshot relative to workdir');
635673
return;
@@ -639,6 +677,8 @@
639677
return;
640678
}
641679

680+
var term = tabs.cur.view.terminal.term;
681+
642682
term.writeln('');
643683
term.writeln.green('loading snapshot ...');
644684

@@ -669,7 +709,7 @@
669709
}
670710

671711
term.writeln.green('ok.');
672-
await prompt();
712+
await term.prompt();
673713

674714
}//restore-snapshot
675715

@@ -876,7 +916,7 @@
876916
restore : '\x1b[u',
877917
hide : '\x1b[?25l',
878918
show : '\x1b[?25h',
879-
xy : ()=>{
919+
xy : term=>{
880920
// Note: These are 0-indexed, so the top-left is 0,0.
881921
// ANSI sequences are usually 1-indexed (1,1).
882922
var x = term.buffer.active.cursorX;
@@ -1058,12 +1098,6 @@
10581098
}//spawn
10591099

10601100

1061-
async function prompt(){
1062-
console.log('prompt');
1063-
//await input.write('\u0003'); // Sends Ctrl+C to clear any junk
1064-
await input.write('\n'); // Sends Enter to get a clean prompt
1065-
1066-
}//prompt
10671101

10681102

10691103
function spinner({term,x,y}){

0 commit comments

Comments
 (0)