96 lines
3.8 KiB
JavaScript
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) {}
|
|
}
|
|
});
|