Skip to content

Commit 779e96c

Browse files
save file
1 parent 950801a commit 779e96c

File tree

1 file changed

+215
-0
lines changed

1 file changed

+215
-0
lines changed
Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
2+
3+
4+
<div id=root>
5+
6+
7+
<script src='https://ajaxorg.github.io/ace-builds/src-noconflict/ace.js'></script>
8+
9+
10+
<script src='https://libs.ext-code.com/js/dom/component/component.js'></script>
11+
12+
<script src='https://libs.ext-code.com/js/dom/init-hdr/init-hdr.js'></script>
13+
14+
<style>
15+
16+
html {height:700px}
17+
body {height:calc(100% - 40px);margin:20px}
18+
#root {display:flex;flex-direction:column;gap:20px;height:100%}
19+
20+
21+
</style>
22+
23+
24+
25+
<div id=server-root>
26+
27+
<div class=filename>
28+
server.js
29+
</div>
30+
31+
<snippet-terminal-console id=server type=nodejs component v2.0 src='ex/server.js'>
32+
</snippet-terminal-console>
33+
34+
</div>
35+
36+
37+
<div id=file>
38+
39+
<div class=filename>
40+
index.html
41+
</div>
42+
43+
<editor id=test component v2.0 src='ex/test.js'>
44+
</editor>
45+
46+
<div id=btns>
47+
<input value=run type=button>
48+
</div>
49+
50+
<console component v2.0 h=150>/console>
51+
52+
</div>
53+
54+
<iframe></iframe>
55+
56+
<log component v2.0></log>
57+
58+
59+
<script>
60+
61+
62+
var srcdoc;
63+
64+
var server;
65+
var test;
66+
var con;
67+
var log;
68+
69+
70+
window.start = async function(){
71+
72+
[srcdoc] = await ext.text.github('javascript-2020:javascript-2020.github.io:main:blog/25-07-25/http-streaming-download/ex/srcdoc.html');
73+
74+
server = mod.server;
75+
test = mod.test;
76+
con = mod.console;
77+
log = mod.log;
78+
79+
server.on = on;
80+
server.btn.run = run;
81+
82+
}//start
83+
84+
85+
86+
//:
87+
88+
89+
function run(){
90+
91+
var s = instrument.toString();
92+
var i1 = s.indexOf('{');
93+
var i2 = s.lastIndexOf('}');
94+
var pre = s.slice(i1+1,i2);
95+
//console.clear();
96+
//console.log(pre);
97+
var js = server.editor.getvalue();
98+
99+
js = pre+js;
100+
101+
server.run.nodejs({js});
102+
103+
104+
}//run
105+
106+
107+
on.init = async function({webcontainer:wc}){
108+
109+
webcontainer = wc;
110+
console.log('init',webcontainer);
111+
//console.log(srcdoc);
112+
var files = {'setup.html':{file:{contents:srcdoc}}};
113+
await webcontainer.mount(files);
114+
115+
console.log('init complete');
116+
117+
}//init
118+
119+
on.run = function({process}){
120+
121+
console.log('on.run',process);
122+
123+
}//on.run
124+
125+
126+
on['server-ready'] = function({port,url:url2}){
127+
console.log('server-ready',port,url2);
128+
url = url2;
129+
130+
iframe.src = `${url}/setup.html`;
131+
132+
}//server-ready
133+
134+
135+
on.complete = function({code}){
136+
137+
console.log('complete',code);
138+
139+
}//complete
140+
141+
142+
//:
143+
144+
145+
function instrument(){
146+
147+
(()=>{
148+
149+
var fs = require('fs');
150+
var http = require('http');
151+
//var server = http.createServer(request)
152+
var list = [];
153+
154+
var createServer = http.createServer;
155+
var on = server.on;
156+
157+
server.on = function(event,listener){
158+
159+
if(event==='request'){
160+
list.push(args[1]);
161+
return;
162+
}
163+
return on.apply(server,arguments);
164+
165+
}//on
166+
167+
168+
http.createServer = function(opts,listener){
169+
console.log('override');
170+
if(arguments.length==1){
171+
listener = opts;
172+
opts = undefined;
173+
}
174+
175+
if(listener){
176+
list.push(listener);
177+
}
178+
179+
var server = createServer.call(server,opts,request);
180+
return server;
181+
182+
}//createServer
183+
184+
185+
function request(req,res){
186+
console.log('sandbox',req.url);
187+
if(req.url=='/setup'){
188+
var html = fs.readFileSync('setup','utf8');
189+
res.writeHead(200,{'content-type':'text/html'});
190+
res.end(html);
191+
return;
192+
}
193+
194+
var n = list.length;
195+
for(var i=0;i<n;i++){
196+
197+
var fn = list[i];
198+
var result = fn(req,res);
199+
if(result===false){
200+
return;
201+
}
202+
203+
}//for
204+
205+
}//request
206+
207+
})();
208+
209+
}//instrument
210+
211+
212+
213+
</script>
214+
215+
</div root>

0 commit comments

Comments
 (0)