Première version de la page permettant d'afficher un fichier sélectionné par l'utilisateur.
This commit is contained in:
parent
bfc69ed280
commit
f5382564ec
43
public/userFile.html
Normal file
43
public/userFile.html
Normal file
@ -0,0 +1,43 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Exemple d'utilisation du script freeDatas2HTML pour afficher les informations d'un fichier CSV dans une page web avec filtres, pagination, moteur de recherche.">
|
||||
<meta name="robots" content="noindex">
|
||||
<link rel="stylesheet" href="CSS/paper.min.css">
|
||||
<link rel="stylesheet" href="CSS/fd2html.css">
|
||||
<script src="JS/exampleWithUserFile.app.js" defer></script>
|
||||
<title>freeDatas2HTML : afficher les données d'un fichier CSV dans une page web</title>
|
||||
</head>
|
||||
<body class="paper container">
|
||||
<h1>freeDatas2HTML</h1>
|
||||
<h2>Afficher votre fichier CSV dans la page web</h2>
|
||||
<p>Sur cette page vous permet de tester directement freeDatas2HTML en affichant les données d'un fichier CSV de votre choix, en choisissant en options les champs à afficher, sur lesquels filter filter les données, faire des recherche... ou encore le nombre de lignes par page.</p>
|
||||
<p>Pour rappel, freeDatas2HTML s'exécute uniquement côté client, c'est-à-dire dans votre navigateur. Les donnée de votre fichier ne sont donc pas envoyées sur un serveur. En conséquence, si vous partager cette page avec d'autres personnes, elles devront elles-mêmes sélectionner le fichier pour visualiser les données.</p>
|
||||
<p>Il est évidemment possible d'indiquer un fichier à afficher par défaut. C'est ce qui est fait dans les autres exemples.</p>
|
||||
<form id="userSettings">
|
||||
<fieldset class="form-group">
|
||||
<legend>Configuration</legend>
|
||||
<label for="myFile">Sélectionnez votre fichier CSV :</label><input type="file" id="myFile" name="myFile" accept=".csv, .tsv">
|
||||
</fieldset>
|
||||
<div id="displayOptions">
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<div class="row">
|
||||
<div id="filtre1" class="sm-12 md-6 lg-4 col"></div>
|
||||
<div id="filtre2" class="sm-12 md-6 lg-4 col"></div>
|
||||
<div id="filtre3" class="sm-12 md-6 lg-4 col"></div>
|
||||
<div id="paginationOptions" class="col-12 col"></div>
|
||||
<div id="search" class="sm-12 md-6 lg-6 col"></div>
|
||||
</div>
|
||||
|
||||
<!--<h3>Nombre total de résultats : <span id="compteur"></span></h3>-->
|
||||
<article id="datas">
|
||||
</article>
|
||||
<p id="pages"></p>
|
||||
<aside><p>Design basé sur <a href="https://www.getpapercss.com" target="_blank">PaperCSS</a></p></aside>
|
||||
</body>
|
||||
</html>
|
100
src/exampleWithUserFile.ts
Normal file
100
src/exampleWithUserFile.ts
Normal file
@ -0,0 +1,100 @@
|
||||
import { FreeDatas2HTML, Pagination, Render, SearchEngine, Selector, SortingField } from "./FreeDatas2HTML";
|
||||
|
||||
const initialise = async () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
const myForm=document.getElementById("userSettings") as HTMLElement;
|
||||
const myFile=document.getElementById("myFile") as HTMLInputElement;
|
||||
const dataDisplayElt=document.getElementById("datas");
|
||||
const dataDisplayOptionsElt=document.getElementById("displayOptions");
|
||||
|
||||
if(myFile === null || myForm === null || dataDisplayOptionsElt === null || dataDisplayElt === null)
|
||||
throw new Error("Certains éléments nécessaires n'ont pas été trouvés dans le DOM;");
|
||||
|
||||
const converter=new FreeDatas2HTML("CSV");
|
||||
|
||||
myFile.addEventListener("change", function(e)
|
||||
{
|
||||
dataDisplayElt.innerHTML="";
|
||||
dataDisplayOptionsElt.innerHTML="";
|
||||
const selectedFiles=myFile.files;
|
||||
if(selectedFiles !== null && selectedFiles.length === 1)
|
||||
{
|
||||
if(selectedFiles[0].type !== "text/csv" && selectedFiles[0].type !== "text/tsv")
|
||||
dataDisplayOptionsElt.innerHTML=`<p class='text-danger'>Le fichier que vous avez sélectionné ne semble pas être un fichier CSV ?</p>`;
|
||||
else
|
||||
{
|
||||
const reader=new FileReader();
|
||||
reader.onload=async function(e)
|
||||
{
|
||||
converter.parser.datas2Parse=reader.result as string;
|
||||
await converter.run();
|
||||
|
||||
let fieldsSelectorHTML=`<fieldset class="form-group"><legend>Quels champs souhaitez-vous afficher ?</legend>`;
|
||||
let filtersSelectorHTML=`<fieldset class="form-group"><legend>Avec quels champs souhaitez-vous pouvoir filtrer vos données ?</legend>`;
|
||||
for(let i=0; i < converter.fields.length; i++)
|
||||
{
|
||||
fieldsSelectorHTML+=`<label for="selectedField_${i}" class="paper-check"> <input type="checkbox" class="selectedFields" id="selectedField_${i}" name="selectedField_${i}" value=${i}> <span>${converter.fields[i]}</span></label>`;
|
||||
filtersSelectorHTML+=`<label for="selectedFilter_${i}" class="paper-check"> <input type="checkbox" class="selectedFilters" id="selectedFilter_${i}" name="selectedFilter_${i}" value=${i}> <span>${converter.fields[i]}</span></label>`;
|
||||
}
|
||||
fieldsSelectorHTML+=`</fieldset>`;
|
||||
filtersSelectorHTML+=`</fieldset>`;
|
||||
dataDisplayOptionsElt.innerHTML=fieldsSelectorHTML+filtersSelectorHTML+`<button type="submit" class="btn-success">Valider</button>`;
|
||||
};
|
||||
reader.readAsText(selectedFiles[0]);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
myForm.addEventListener("submit", function(e)
|
||||
{
|
||||
e.preventDefault();
|
||||
const fields2Rend: number[]=[];
|
||||
let checkBox: HTMLInputElement, nbSelector=0;
|
||||
for(let i=0; i < converter.fields.length; i++)
|
||||
{
|
||||
checkBox=document.getElementById("selectedField_"+i) as HTMLInputElement;
|
||||
if(checkBox !== null)
|
||||
{
|
||||
if(checkBox.checked)
|
||||
fields2Rend.push(i);
|
||||
}
|
||||
if(nbSelector < 3)
|
||||
{
|
||||
checkBox=document.getElementById("selectedFilter_"+i) as HTMLInputElement;
|
||||
if(checkBox !== null)
|
||||
{
|
||||
if(checkBox.checked)
|
||||
{
|
||||
nbSelector++;
|
||||
let filtre1=new Selector(converter, i, { id:"filtre"+nbSelector} );
|
||||
filtre1.filter2HTML();
|
||||
converter.datasFilters.push(filtre1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// + rendre classable toutes les colonnes
|
||||
/// + ajout moteur de recherche
|
||||
/// + nombre de résultat
|
||||
/// + rendu autre que tableau ou alors permettre scroll horizontale ?
|
||||
if( fields2Rend.length === 0)
|
||||
dataDisplayElt.innerHTML=`<p class='text-danger'>Vous n'avez sélectionné aucun champ à afficher !</p>`;
|
||||
else
|
||||
{
|
||||
converter.fields2Rend=fields2Rend;
|
||||
converter.datasViewElt={ id:"datas" };
|
||||
converter.run();// run pour prendre les champs à afficher, mais refreshView devrait suffire !
|
||||
}
|
||||
});
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
console.error(e);
|
||||
if(document.getElementById("datas")!==null)
|
||||
document.getElementById("datas")!.innerHTML="<strong>Désolé, mais un problème technique empêche l'affichage des données.</strong>";
|
||||
}
|
||||
}
|
||||
initialise();
|
@ -8,6 +8,7 @@ module.exports =
|
||||
exampleWithCSV: "./src/exampleWithCSV.ts",
|
||||
exampleWithHTML: "./src/exampleWithHTML.ts",
|
||||
exampleWithJSON: "./src/exampleWithJSON.ts",
|
||||
exampleWithUserFile: "./src/exampleWithUserFile.ts"
|
||||
},
|
||||
output:
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user