Update landing page and ground link features
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
1 parent
a5cc458252
commit
7efe9097ce
28 files changed
+928
-120
No files matched your search
@@ -0,0 +1,22 @@
|
||||
import { sampleResource } from './sample-resource';
|
||||
import type { Sample } from './sample-explorer';
|
||||
/** Reuse #project-file → openProjectFile → openProjectText; never mutate app state here. */
|
||||
export async function loadSampleIntoApp(sample:Sample,showApp:()=>void,showLanding:()=>void):Promise<void>{
|
||||
const {text}=await sampleResource(sample),picker=document.querySelector<HTMLInputElement>('#project-file'),toasts=document.querySelector('#toast-host');
|
||||
if(!picker||!toasts)throw new Error('기존 프로젝트 파일 로더를 찾을 수 없습니다.');
|
||||
let cleanup=()=>{};
|
||||
const completed=new Promise<void>((resolve,reject)=>{
|
||||
const observer=new MutationObserver(records=>{
|
||||
for(const record of records)for(const node of record.addedNodes){const message=node.textContent??'';
|
||||
if(message.includes(`${sample.filename}을 열었습니다.`)){cleanup();resolve();}
|
||||
else if(message.includes('프로젝트 파일을 열지 못했습니다:')){cleanup();reject(new Error(message.replace(/닫기$/,'')));}
|
||||
}
|
||||
});
|
||||
const timer=window.setTimeout(()=>{cleanup();reject(new Error(`${sample.bridge}: 기존 로더의 완료 응답이 없습니다.`));},30000);
|
||||
cleanup=()=>{observer.disconnect();clearTimeout(timer);};observer.observe(toasts,{childList:true,subtree:true});
|
||||
});
|
||||
try{
|
||||
const transfer=new DataTransfer();transfer.items.add(new File([text],sample.filename,{type:'application/json'}));picker.files=transfer.files;
|
||||
showApp();picker.dispatchEvent(new Event('change',{bubbles:true}));await completed;
|
||||
}catch(error){showLanding();throw error;}finally{cleanup();}
|
||||
}
|
||||
Reference in new issue
Block a user