Generation_UDS_RSA/uds.js
2026-04-02 11:26:07 -04:00

96 lines
3.8 KiB
JavaScript

const statusEl = document.getElementById("status");
const logEl = document.getElementById("log");
const downloadsEl = document.getElementById("downloads");
const runBtn = document.getElementById("runBtn");
let pyodide = null;
async function initPyodide() {
statusEl.textContent = "Chargement de Pyodide ... (cela peut prendre 10-20s la première fois)";
pyodide = await loadPyodide();
statusEl.textContent = "Pyodide chargé. Installation de dépendances (openpyxl)...";
await pyodide.loadPackage("micropip");
const micropip = pyodide.pyimport("micropip");
await micropip.install("openpyxl");
statusEl.textContent = "Prêt — openpyxl installé."; //load micropip qui permet d'accéder a openpyxl qui sert a écrire dans les excels.
}
// load Pyodide script tag dynamically
(async () => {
const s = document.createElement("script");
s.src = "https://cdn.jsdelivr.net/pyodide/v0.24.1/full/pyodide.js";
s.onload = async () => { await initPyodide(); };
document.head.appendChild(s);
})();
function log(msg) {
logEl.textContent += msg + "\n";
logEl.scrollTop = logEl.scrollHeight;
}
function createDownloadLink(filename, bytes) {
// bytes is Uint8Array or ArrayBuffer-like
const blob = new Blob([bytes], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = filename;
a.textContent = `Download ${filename}`;
downloadsEl.appendChild(a);
}
runBtn.addEventListener("click", async () => {
downloadsEl.innerHTML = "";
logEl.textContent = "";
if (!pyodide) { alert("Pyodide n'est pas encore prêt."); return; }
const templateFile = document.getElementById("template_excel").files[0];
const txtFile = document.getElementById("txt_input").files[0];
const typeDoc = document.getElementById("typedoc").value;
const nom_releveur = document.getElementById("nom_releveur").value || "";
const hauteur_bosch = document.getElementById("hauteur_bosch").value || "0";
if (!templateFile) { alert("Veuillez uploader le template Excel."); return; }
if (!txtFile) { alert("Veuillez uploader le fichier texte."); return; }
statusEl.textContent = "Lecture des fichiers (navigateur)...";
// read files on JS side
const [tmplBuf, txtStr] = await Promise.all([
templateFile.arrayBuffer(),
txtFile.text()
]);
// pass into pyodide globals:
// set template bytes as a Uint8Array in globals so Python can get bytes via to_py()
pyodide.globals.set("template_uint8", new Uint8Array(tmplBuf));
pyodide.globals.set("txt_content", txtStr);
pyodide.globals.set("typeDoc", typeDoc);
pyodide.globals.set("nom_du_releveur", nom_releveur);
pyodide.globals.set("hauteur_bosch", hauteur_bosch);
statusEl.textContent = "Exécution du script Python (Pyodide)...";
log("Lancement du traitement...");
try {
const response = await fetch('UDS - Copie.py');
const python_core_code = await response.text();
await pyodide.runPythonAsync(python_core_code);
statusEl.textContent = "Terminé — fichiers générés.";
log("Terminé.");
} catch (err) {
console.error(err);
statusEl.textContent = "Erreur pendant l'exécution (voir log).";
log("ERREUR: " + err);
} finally {
try {
pyodide.globals.delete("template_uint8");
pyodide.globals.delete("txt_content");
pyodide.globals.delete("typeDoc");
pyodide.globals.delete("nom_du_releveur");
pyodide.globals.delete("hauteur_bosch");
} catch(e) {}
}
});