|
123 | 123 | #output, #output2 |
124 | 124 | {font-family:monospace;font-size:16px} |
125 | 125 | #item, #item2 |
126 | | - {margin:20px 0;border:1px solid lightgray;padding:10px;overflow:auto} |
| 126 | + {margin:20px 0;border:1px solid lightgray;padding:10px;overflow:auto;display:flex;flex-direction:column;gap:10px} |
127 | 127 | #src |
128 | 128 | {} |
129 | 129 | #values |
|
293 | 293 | var beforeKeys = new Set(Object.keys(win)); |
294 | 294 |
|
295 | 295 |
|
296 | | - var script = document.createElement('script'); |
| 296 | + var script = doc.createElement('script'); |
297 | 297 | script.src = src; |
298 | 298 | doc.head.appendChild(script); |
299 | 299 |
|
@@ -341,94 +341,180 @@ <h3> |
341 | 341 |
|
342 | 342 | clone(); |
343 | 343 |
|
344 | | - var s = win[key].toString(); |
345 | | - var s1 = s.slice(0,80); |
346 | | - if(s.length>s1.length){ |
347 | | - s1 += ` ... ( ${s.length} )`; |
348 | | - } |
| 344 | + var s1 = toString(win[key]); |
| 345 | + var str = `window.${key} [ ${typeof win[key]} ] : ${s1}`+'\n'; |
349 | 346 |
|
350 | | - var str = `window.${key} [ ${typeof win[key]} ] : ${s1}`+'\n'; |
351 | 347 | nvalues.textContent = str; |
352 | 348 | console.log(`window.${key} =`,win[key]); |
353 | | - |
354 | 349 | }); |
355 | 350 |
|
356 | | - //$('#values').textContent = str; |
357 | | - |
358 | | - |
359 | | - |
360 | 351 | console.log('New globals :', added); |
361 | | - |
362 | | - |
363 | 352 | }//onload |
364 | 353 |
|
365 | 354 | }//onload |
366 | 355 |
|
367 | | - }//process |
| 356 | + }//script |
368 | 357 |
|
369 | 358 |
|
370 | 359 |
|
371 | 360 |
|
372 | | - process.importx = async function(src){ |
| 361 | + process.import = async function(src){ |
373 | 362 |
|
374 | | - var mod = await import(src); |
375 | | - //console.log(inspect(mod)); |
376 | | - |
377 | | - var str = ''; |
378 | | - for(var key in mod){ |
| 363 | + var nitem = item2.cloneNode(true); |
| 364 | + var $ = nitem.querySelector.bind(nitem); |
| 365 | + $('#url').textContent = src; |
| 366 | + var values = $('#values'); |
| 367 | + var nvalues; |
| 368 | + var clone = ()=>(nvalues=values.cloneNode(true),nitem.append(nvalues)); |
| 369 | + output2.append(nitem); |
| 370 | + |
| 371 | + |
| 372 | + var {win,doc} = await niframe(); |
| 373 | + |
| 374 | + var output = str=>(clone(),nvalues.textContent=str); |
| 375 | + var js = fnstr(fn); |
| 376 | + console.log(js); |
| 377 | + win.eval(js); |
| 378 | + win.fn(src,output,datatype,tostring); |
379 | 379 |
|
380 | 380 |
|
381 | | - var s1 = '[ null ]'; |
| 381 | + async function fn(src,output,datatype,tostring){ |
| 382 | + |
| 383 | + var mod = await import(src); |
| 384 | + //console.log(inspect(mod)); |
| 385 | + |
| 386 | + var str = ''; |
| 387 | + for(var key in mod){ |
382 | 388 |
|
383 | | - if(!mod[key]){ |
384 | | - str += key+` [ ${typeof mod[key]} ] : ${s1}`+'\n'; |
385 | | - }else{ |
386 | | - if(datatype(mod[key])=='object'){ |
387 | | - s1 = tostring(mod[key]); |
| 389 | + var s1 = '[ null ]'; |
| 390 | + var type = datatype(mod[key]); |
| 391 | + |
| 392 | + if(!mod[key]){ |
388 | 393 | str += key+` [ ${typeof mod[key]} ] : ${s1}`+'\n'; |
389 | | - for(var prop in mod[key]){ |
390 | | - |
391 | | - var s2 = tostring(mod[key][prop]); |
392 | | - str += ' '+prop+` [ ${typeof mod[key][prop]} ] : ${s2}`+'\n'; |
393 | | - |
394 | | - }//for |
395 | 394 | }else{ |
396 | | - s1 = tostring(mod[key]); |
397 | | - str += key+` [ ${typeof mod[key]} ] : ${s1}`+'\n'; |
| 395 | + if(datatype(mod[key])=='object'){ |
| 396 | + s1 = tostring(mod[key]); |
| 397 | + str += key+` [ ${typeof mod[key]} ] : ${s1}`+'\n'; |
| 398 | + for(var prop in mod[key]){ |
| 399 | + |
| 400 | + var s2 = tostring(mod[key][prop]); |
| 401 | + str += ' '+prop+` [ ${typeof mod[key][prop]} ] : ${s2}`+'\n'; |
| 402 | + |
| 403 | + }//for |
| 404 | + }else{ |
| 405 | + s1 = tostring(mod[key]); |
| 406 | + str += key+` [ ${typeof mod[key]} ] : ${s1}`+'\n'; |
| 407 | + } |
398 | 408 | } |
399 | | - } |
| 409 | + |
| 410 | + }//for |
400 | 411 |
|
401 | | - }//for |
402 | | - |
| 412 | + output(str); |
| 413 | + |
| 414 | + }//fn |
403 | 415 |
|
404 | | - var nitem = item2.cloneNode(true); |
| 416 | + }//import |
| 417 | + |
| 418 | + |
| 419 | + //: |
| 420 | + |
| 421 | + |
| 422 | + function niframe(){ |
| 423 | + |
| 424 | + var resolve,promise=new Promise(res=>resolve=res); |
405 | 425 |
|
406 | | - var $ = nitem.querySelector.bind(nitem); |
407 | | - $('#url').textContent = src; |
408 | | - $('#values').textContent = str; |
| 426 | + var iframe = document.createElement('iframe'); |
| 427 | + iframe.style.cssText = 'display:none'; |
| 428 | + iframe.onload = onload; |
| 429 | + document.body.append(iframe); |
409 | 430 |
|
410 | | - output2.append(nitem); |
| 431 | + return promise; |
411 | 432 |
|
412 | 433 |
|
413 | | - function tostring(v){ |
| 434 | + function onload(){ |
414 | 435 |
|
415 | | - var s = v.toString(); |
416 | | - var s1 = s.slice(0,80); |
417 | | - if(s.length>s1.length){ |
418 | | - s1 += ` ... ( ${s.length} )`; |
419 | | - } |
420 | | - return s1; |
| 436 | + var win = iframe.contentWindow; |
| 437 | + var doc = iframe.contentDocument; |
| 438 | + resolve({win,doc,iframe}); |
421 | 439 |
|
422 | | - }//tostring |
| 440 | + }//onload |
| 441 | + |
| 442 | + }//niframe |
| 443 | + |
| 444 | + |
| 445 | + function datatype(v,short=true){ |
| 446 | + |
| 447 | + var str = Object.prototype.toString.call(v); |
| 448 | + |
| 449 | + if(short){ |
| 450 | + str = str.slice(8,-1); |
| 451 | + str = str.toLowerCase(); |
| 452 | + } |
| 453 | + |
| 454 | + return str; |
423 | 455 |
|
424 | | - }//process |
| 456 | + }//datatype |
425 | 457 |
|
426 | 458 |
|
| 459 | + function tostring(v){ |
| 460 | + |
| 461 | + var s = v.toString(); |
| 462 | + var s1 = s.slice(0,80); |
| 463 | + if(s.length>s1.length){ |
| 464 | + s1 += ` ... ( ${s.length} )`; |
| 465 | + } |
| 466 | + return s1; |
| 467 | + |
| 468 | + }//tostring |
| 469 | + |
| 470 | + |
| 471 | + function fnstr(fn,full=true){ |
| 472 | + |
| 473 | + var str = fn.toString(); |
| 474 | + if(full){ |
| 475 | + return str; |
| 476 | + } |
| 477 | + var i1 = str.indexOf('{'); |
| 478 | + var i2 = str.lastIndexOf('}'); |
| 479 | + var fnstr = str.slice(i1+1,i2); |
| 480 | + return fnstr; |
| 481 | + |
| 482 | + }//fnstr |
| 483 | + |
| 484 | + |
| 485 | + async function get(url){ |
| 486 | + |
| 487 | + var err; |
| 488 | + try{ |
| 489 | + |
| 490 | + var res = await fetch(url); |
| 491 | + |
| 492 | + }//try |
| 493 | + catch(err2){ |
| 494 | + |
| 495 | + err = err2; |
| 496 | + |
| 497 | + }//catch |
| 498 | + if(err){ |
| 499 | + var error = err.toString(); |
| 500 | + return {error}; |
| 501 | + } |
| 502 | + |
| 503 | + var txt = await res.text(); |
| 504 | + if(!res.ok){ |
| 505 | + var error = `[ ( ${res.status} ) ${res.statusText} ] ${txt}`; |
| 506 | + return {error}; |
| 507 | + } |
| 508 | + |
| 509 | + return {txt}; |
| 510 | + |
| 511 | + }//get |
| 512 | + |
427 | 513 |
|
428 | 514 |
|
429 | 515 |
|
430 | 516 |
|
431 | | -(async()=>{ |
| 517 | +!(async()=>{ |
432 | 518 |
|
433 | 519 | var {init,parse} = await import('https://unpkg.com/es-module-lexer?module'); |
434 | 520 |
|
|
0 commit comments