|
167 | 167 | {cursor:pointer; |
168 | 168 | content:url(data:image/png;base64,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); |
169 | 169 | } |
| 170 | + #snippet-console |
| 171 | + {cursor:pointer; |
| 172 | + content:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAAA0lBMVEVHcEwaHzgSFSsKDSQXHDQWGzIXHDIKDyMaHzcBAhEXHDMTFy0WHDMeJj8RFSoQFCcPEyYTGC0RFSkTGC0aHzcmLkcaIDgWGjIWHDIUGC8LDiInMEcXHDQWGzEZHjYZIDYbITkUGzMlLkYrMkoaIjkRFSscITgmMEcbITkpMEgjLEMUGzIlLUUoL0gVGC0VGy4mL0YbITktNUwlLEMXHjYeJDtnanjj4+QhKD9MUGOLjZi7vMJfY3Lt7e04PVBITGDS09ZOU2Xr6+tzdoQ9QlVKTmGtyqSqAAAAMXRSTlMA/FIPzrNWCfcF0ZzLnSJ8cpKMqP3Z8KPEuoGO2L7lNuIWzusfQWSM+/JxLMS3ahq7XSnkAwAAAVBJREFUKM+t0tdywjAQBVBjW7gJ907vooUIFxxKSP3/Xwo2dmZYQvKS+6JyRiPNahnmP8Jd0i9H7loFReYxxrzMF5EV4YolRC/JojwJkq6PewXGdFMkU8DdRq6b9w+n2ZxOHzMTsJaffdqmjXwxT3TADxUL8+Z0mUwA1+2SucH5bsICHosVL4fOTBwD7rolSwt1tHQXgNVOxf01N+iogNetLIs/t6mzchprp9WHNcev+91um0bDVX3U80HNGSE4vbwdjyka5e+ANWUYK3k+7PYHrztpOJl386MGjWMaRbNhXnLjhrXiT5IzRhHVbljVUY/QJMpID+nqDw0jqayBfZNVpbs9JQhgg/01TK2MbVezGvme1Ziyx1wLiSIVbZEQ0u6QcpdW3LawZXimZVqKYiqaDNj3gtDQlTDUQlPTdQxYRG0e8S0c+H4gy8gFfCd/8BdhCEKPCPsRBQAAAABJRU5ErkJggg==); |
| 173 | + } |
170 | 174 |
|
171 | 175 | #hldr |
172 | 176 | {padding:10px;border:2px solid lightgray;box-sizing:border-box;flex:1;background:hsl(45,86%,98%)} |
|
175 | 179 | {height:100%} |
176 | 180 |
|
177 | 181 |
|
| 182 | + #icons |
| 183 | + {display:flex;align-items:center;gap:5px} |
178 | 184 |
|
179 | 185 | .icon |
180 | 186 | {width:32px;height:32px;border:1px solid gray;border-radius:3px;box-sizing:border-box;cursor:pointer} |
|
193 | 199 |
|
194 | 200 |
|
195 | 201 | <misc-hdr component=grp> |
196 | | - <img slot=title class=title src='images/nodejs-terminal.png' style='top:-15px;height:80px' alt='Node.js Terminal'> |
| 202 | + <img slot=title class=title src='images/nodejs-terminal.png' style='top:-25px;height:80px' alt='Node.js Terminal'> |
197 | 203 | <time slot=date datetime=2026-04-22> |
198 | 204 | 22 Apr 2026 |
199 | 205 | </time> |
|
214 | 220 | <div id=size></div> |
215 | 221 | </div> |
216 | 222 |
|
217 | | - <img id=niframe title=iframe> |
218 | | - <img id=snippet-editor title=editor> |
| 223 | + <div id=icons> |
| 224 | + <img id=niframe title=iframe class=icon> |
| 225 | + <img id=snippet-editor title=editor class=icon> |
| 226 | + <img id=snippet-console title=snippet-console class=icon> |
| 227 | + </div> |
| 228 | + |
219 | 229 | </div> |
220 | 230 |
|
221 | 231 | <div id=hldr> |
|
264 | 274 |
|
265 | 275 | $('#niframe').onclick = btn.niframe; |
266 | 276 | $('#snippet-editor').onclick = btn['snippet-editor']; |
| 277 | + $('#snippet-console').onclick = btn['snippet-console']; |
267 | 278 |
|
268 | 279 | $('#hldr').style.background = theme.light.background; |
269 | 280 |
|
|
301 | 312 | btn['snippet-editor'] = async function(){ |
302 | 313 |
|
303 | 314 | var viewport = await vm.new(); |
304 | | - viewport.pos({x:200,y:200}); |
| 315 | + viewport.pos({x:225,y:200}); |
305 | 316 |
|
306 | 317 | var node = document.createElement('snippet-editor'); |
307 | 318 | node.toggleAttribute('component',true); |
308 | 319 | node.setAttribute('web-editor','height=100%'); |
309 | 320 | viewport.body.append(node); |
310 | | - var mod2 = mod.create({mod,name:'snippet-editor'}); |
| 321 | + var mod2 = mod.create({mod,name:'snippet-editor'}); |
311 | 322 | var result = await mod.build({root:node,mod:mod2}); |
312 | 323 | var snippet = mod2['snippet-editor']; |
313 | 324 | await mod2.auto(); |
|
316 | 327 | var node = document.createElement('webcontainer-fs'); |
317 | 328 | node.setAttribute('component','page'); |
318 | 329 | viewport.body.append(node); |
319 | | - var mod2 = mod.create({mod,name:'webcontainer-fs'}); |
| 330 | + var mod2 = mod.create({mod,name:'webcontainer-fs'}); |
320 | 331 | var result = await mod.build({root:node,mod:mod2}); |
321 | | - var wcfs = mod2['webcontainer-fs']; |
| 332 | + var wcfs = mod2['webcontainer-fs']; |
322 | 333 | wcfs.initmod({filemod:snippet.filemod,ext,$,menu,log,debug, |
323 | 334 | webcontainer, |
324 | 335 | source:snippet.source,complete:snippet.complete}); |
|
329 | 340 | }//snippet-editor |
330 | 341 |
|
331 | 342 |
|
| 343 | + btn['snippet-console'] = async function(){ |
| 344 | + |
| 345 | + var viewport = await vm.new(); |
| 346 | + viewport.pos({x:250,y:200,w:850,h:1100}); |
| 347 | + |
| 348 | + var attrs = {component:true,'v2.0':true,'web-editor':'fullsize=false',exportparts:"root: inner-label"}; |
| 349 | + var opts = {par:viewport.body}; |
| 350 | + var snippet = await mod.component('snippet-console',attrs,opts); |
| 351 | + |
| 352 | + snippet.css.insert_rule([':host {height:100%;}','#root {height:100%}']); |
| 353 | + snippet.editor.css.insert_rule([':host {flex:1}','#root {height:100%}']); |
| 354 | + |
| 355 | + snippet.ctx = {snippet,webcontainer,viewport,vm}; |
| 356 | + |
| 357 | + |
| 358 | + var attrs = {component:'page'}; |
| 359 | + var opts = {par:viewport.body,auto:false}; |
| 360 | + var wcfs = await mod.component('webcontainer-fs',attrs,opts); |
| 361 | + wcfs.initmod({filemod:snippet.filemod,ext,$,menu,log,debug, |
| 362 | + webcontainer, |
| 363 | + source:snippet.source,complete:snippet.complete}); |
| 364 | + await wcfs.init(); |
| 365 | + wcfs.initdom(); |
| 366 | + |
| 367 | + }//snippet-console |
| 368 | + |
| 369 | + |
332 | 370 | btn.test = async function(){console.log('test'); |
333 | 371 |
|
334 | 372 | var list = await webcontainer.fs.readdir('/',{withFileTypes:true}); |
|
562 | 600 |
|
563 | 601 | mod.stack.complete; |
564 | 602 |
|
565 | | - webcontainer.on('server-ready',(port,url)=>term.write('server-ready :'+url+'-'+port)); |
| 603 | + |
| 604 | + webcontainer.on('server-ready',(port,url)=>{ |
| 605 | + console.log('server-ready',url,port); |
| 606 | + term.write('server-ready :'+url+' --- '+port); |
| 607 | + |
| 608 | + }); |
| 609 | + webcontainer.on('port',(port,type,url)=>{ |
| 610 | + console.log(port,type,url) |
| 611 | + term.write('port :'type+' --- '+url+' --- '+port); |
| 612 | + |
| 613 | + }); |
| 614 | + |
566 | 615 |
|
567 | 616 | await webcontainer.mount(files); |
568 | 617 | term.write('spawn jsh ...\r\n') |
|
0 commit comments