const messages=require("./messages.js"); const initialise = () => { const myForm=document.getElementById("trainerForm") as HTMLInputElement; const myFile=document.getElementById("myFile") as HTMLInputElement; const myXPath=document.getElementById("myXPath") as HTMLInputElement; const testButton=document.getElementById("runTest") as HTMLButtonElement; const myIframe=document.getElementById("display") as HTMLIFrameElement; const divResult=document.getElementById("results") as HTMLDivElement; const xpath=require('xpath'); try { // Accueil : doit choisir un fichier avant de pouvoir tester un XPath myXPath.disabled=true; testButton.disabled=true; myXPath.placeholder=messages.needXMLFile; myIframe.style.display="none"; divResult.style.display="none"; const dom=require('@xmldom/xmldom').DOMParser; myFile.addEventListener("change", function(e) { // L'utilisateur a-t-il vraiment sélectionné un fichier ? // Si oui, est-ce un fichier XML ? const selectedFiles=myFile.files; if(selectedFiles !== null && selectedFiles.length === 1) { // selectedFiles[0].type ne fonctionne pas avec certains navigateurs (Fennec), donc... : const extension=selectedFiles[0].name.substring(selectedFiles[0].name.lastIndexOf(".")+1); if(extension !== "xml") divResult.innerHTML=messages.resultsTitle+messages.notXMLError; else { // Création d'un fichier XML temporaire que l'on va charger dans l'iframe : const reader=new FileReader(); reader.onload=async function(e) { const xmlDatas=reader.result as string; const xmlTmp=new Blob([xmlDatas], { type: "application/xml", }); const iframeURL=URL.createObjectURL(xmlTmp); myIframe.src=iframeURL; myIframe.style.display="block"; myXPath.disabled=false; myXPath.placeholder=messages.needXPath; testButton.disabled=false; myXPath.value=""; myXPath.placeholder=messages.needXPath; // Et on peut commencer à jouer avec ! const doc=new dom().parseFromString(xmlDatas, 'text/xml'); myForm.addEventListener("submit", (e) => { try { e.preventDefault(); divResult.innerHTML=""; divResult.style.display="block"; let xPathTested=myXPath.value.trim(); if(xPathTested == "") divResult.innerHTML+=messages.resultsTitle+messages.emptyXPathError; else { let resultTxt=messages.resultsTitle; const nodes=xpath.select(xPathTested , doc); if(nodes.length === 0) resultTxt+=messages.noResultForXPath; else { for(let i = 0; i < nodes.length; i++) resultTxt+=`
  • ${nodes[i].toString().replaceAll("<", "<").replaceAll(">", ">").replaceAll("\n","
    ")}
  • `; resultTxt=``; } divResult.innerHTML=resultTxt; } } catch(e: unknown) { if (e instanceof Error && e.message=="XPath parse error" ) divResult.innerHTML=messages.resultsTitle+messages.xpathError; else divResult.innerHTML=messages.resultsTitle+messages.exceptionError; } }); }; reader.readAsText(selectedFiles[0]); } } }); } catch(e) { divResult.innerHTML=messages.resultsTitle.messages.exceptionError; console.error(e); } } console.log(messages.gitSources); initialise();