Relecture/correction page de documentation

This commit is contained in:
Fabrice PENHOËT 2022-03-09 12:56:15 +01:00
parent d4d24732e0
commit 18de3cc10e

View File

@ -25,8 +25,10 @@
</nav> </nav>
</header> </header>
<aside> <article id="content">
<h4>Menu</h4> <h2>Documentation FreeDatas2HTML</h2>
<h4>Sommaire</h4>
<ul> <ul>
<li><a href="#installation">Installer FreeDatas2HTML</a></li> <li><a href="#installation">Installer FreeDatas2HTML</a></li>
<li><a href="#instance">Instancier la classe principale</a></li> <li><a href="#instance">Instancier la classe principale</a></li>
@ -43,9 +45,6 @@
<li><a href="#fonctionClassement">Personnaliser la façon de classer les données</a></li> <li><a href="#fonctionClassement">Personnaliser la façon de classer les données</a></li>
<li><a href="#conclusion">Conclusion</a></li> <li><a href="#conclusion">Conclusion</a></li>
</ul> </ul>
</aside>
<article id="content">
<h2>Documentation FreeDatas2HTML</h2>
<h3 id="installation">Installer FreeDatas2HTML</h3> <h3 id="installation">Installer FreeDatas2HTML</h3>
@ -84,7 +83,7 @@
const mySource=new RemoteSource({ url:"https://www.example.com/datas.csv" });<br /> const mySource=new RemoteSource({ url:"https://www.example.com/datas.csv" });<br />
const myConverter=new FreeDatas2HTML("CSV","", mySource);</code></p> const myConverter=new FreeDatas2HTML("CSV","", mySource);</code></p>
<p>En fait, il sera accepté une instance de nimporte quelle classe validant linterface <em>RemoteSources</em> que vous pouvez retrouver déclarée dans le script <a href="https://forge.chapril.org/Fab_Blab/FreeDatas2HTML/src/branch/master/src/interfaces.ts" rel="noopener" target="_blank">interface.ts</a>.</p> <p>En fait, il sera accepté une instance de nimporte quelle classe validant linterface <em>RemoteSources</em> que vous pouvez trouver déclarée dans le script <a href="https://forge.chapril.org/Fab_Blab/FreeDatas2HTML/src/branch/master/src/interfaces.ts" rel="noopener" target="_blank">interface.ts</a>.</p>
<p>Vous pouvez fournir des entêtes pour lappel à la source de données distantes:<br /> <p>Vous pouvez fournir des entêtes pour lappel à la source de données distantes:<br />
<code>mySource.headers=[ { key:"token", value:"1234" }, { key:"userName", value:"Toto" }];</code></p> <code>mySource.headers=[ { key:"token", value:"1234" }, { key:"userName", value:"Toto" }];</code></p>
@ -104,7 +103,7 @@
<p>Ceci est facultatif, car vous pouvez très bien simplement vouloir parser les données.<br /> <p>Ceci est facultatif, car vous pouvez très bien simplement vouloir parser les données.<br />
Mais si vous souhaitez que FreeDatas2HTML soccupe dafficher les données, vous pouvez indiquer l<em>id </em>de lélément de la page où les afficher:<br /> Mais si vous souhaitez que FreeDatas2HTML soccupe dafficher les données, vous pouvez indiquer l<em>id </em>de lélément de la page où les afficher:<br />
<code>myConverter.datasViewElt={ id:"myDatas" };</code><br /> <code>myConverter.datasViewElt={ id:"myDatas" };</code><br />
Lélément doit exister dans la page, sans quoi le <em>setter</em> générera une erreur.</p> Lélément doit exister dans la page, sans quoi ce <em>setter</em> générera une erreur.</p>
<h3 id="parser">Parser les données</h3> <h3 id="parser">Parser les données</h3>
@ -139,20 +138,19 @@
<h4>Ne pas afficher tous les champs disponibles</h4> <h4>Ne pas afficher tous les champs disponibles</h4>
<p>Si vous ne souhaitez pas afficher tous les champs trouvés dans votre fichier, vous pouvez indiquer ceux à garder:<br /> <p>Si vous ne souhaitez pas afficher tous les champs trouvés dans les données, vous pouvez indiquer ceux à garder:<br />
<code>myConverter.fields2Rend=[0,2]; // naffichera que le 1ᵉʳ et le 3ᵉ champ, la numérotation commençant à zéro.</code></p> <code>myConverter.fields2Rend=[0,2]; // naffichera que le 1ᵉʳ et le 3ᵉ champ, la numérotation commençant à zéro.</code></p>
<p>Ce <em>setter</em> provoquera une erreur si vous fournissez un numéro de champ nexistant pas dans les données parsées.<br /> <p>Ce <em>setter</em> ne peut être utilisé quaprès le parsage, car il provoquera une erreur si vous fournissez un numéro de champ nexistant pas dans les données parsées.</p>
Vous pouvez par contre le déclarer à tout moment, pour prise en compte dès le prochain affichage.</p>
<p>Pour de nouveau afficher tous les champs (soit, revenir à la situation par défaut), il vous suffit de passer un tableau vide:<br /> <p>Pour de nouveau afficher tous les champs (situation par défaut), il vous suffit de passer un tableau vide:<br />
<code>myConverter.fields2Rend=[];</code></p> <code>myConverter.fields2Rend=[];</code></p>
<h3 id="render">Adapter le code HTML généré pour afficher des données</h3> <h3 id="render">Adapter le code HTML généré pour afficher des données</h3>
<p>Pour spécifier le code HTML à générer, vous devez créer une instance de la classe <em>Render</em> ou dune autre classe validant linterface <em>DatasRenders</em> déclarée dans le script <a href="https://forge.chapril.org/Fab_Blab/FreeDatas2HTML/src/branch/master/src/interfaces.ts" rel="noopener" target="_blank">interface.ts</a>.</p> <p>Pour spécifier le code HTML à générer, vous devez créer une instance de la classe <em>Render</em> ou dune autre classe validant linterface <em>DatasRenders</em> déclarée dans le script <a href="https://forge.chapril.org/Fab_Blab/FreeDatas2HTML/src/branch/master/src/interfaces.ts" rel="noopener" target="_blank">interface.ts</a>.</p>
<p>Dans le cas de la classe <em>Render</em>, il faut commencer par limporter et linstancier:<br /> <p>Il faut commencer par limporter et linstancier:<br />
<code>import { FreeDatas2HTML, Render } from "./modules/FreeDatas2HTML";</code><br /> <code>import { FreeDatas2HTML, Render } from "./modules/FreeDatas2HTML";</code><br />
<code></code><br /> <code></code><br />
<code>const myRender=new Render();</code></p> <code>const myRender=new Render();</code></p>
@ -260,7 +258,7 @@
</ul> </ul>
<p>Un quatrième paramètre facultatif permet dindiquer un séparateur, qui vous sera utile si un champ contient plusieurs valeurs pour un même enregistrement.<br /> <p>Un quatrième paramètre facultatif permet dindiquer un séparateur, qui vous sera utile si un champ contient plusieurs valeurs pour un même enregistrement.<br />
Par exemple, à supposer que vous souhaitiez créer un filtre sur le 3ᵉ champ (donc le numéro 2!) contenant des mots-clés séparés par des point virgule, voici le code à utiliser:<br /> Par exemple, à supposer que vous souhaitiez créer un filtre sur le 3ᵉ champ (donc le numéro 2!) contenant des mots-clés séparés par des point-virgule, voici le code à utiliser:<br />
<code>const myFilter2=new Selector(myConverter, 2, { id:"filter2"}, ";" );</code></p> <code>const myFilter2=new Selector(myConverter, 2, { id:"filter2"}, ";" );</code></p>
<p>Attention, <strong>vous devez dabord avoir parsé vos données avant de créer votre instance de Selector</strong>, car lexistence du champ fourni en paramètre est testé à cette étape.</p> <p>Attention, <strong>vous devez dabord avoir parsé vos données avant de créer votre instance de Selector</strong>, car lexistence du champ fourni en paramètre est testé à cette étape.</p>
@ -269,15 +267,14 @@
<code>myFilter2.isMultiple=true;</code><br /> <code>myFilter2.isMultiple=true;</code><br />
Ce nest pas le cas par défaut. Si le choix multiple est permis, tout enregistrement valide pour au moins une des valeurs sélectionnées dans la liste sera affiché.</p> Ce nest pas le cas par défaut. Si le choix multiple est permis, tout enregistrement valide pour au moins une des valeurs sélectionnées dans la liste sera affiché.</p>
<p>Linstanciation va aussi récupérer les données distinctes à proposer dans la liste. Vous pouvez récupérer cette liste de valeurs, via le code suivant:<br /> <p>Linstanciation va aussi récupérer les données distinctes à proposer dans la liste.<br>Vous pouvez récupérer cette liste de valeurs, via le code suivant:<br />
<code>const selectDatas=myFilter1.selectedValues;</code><br /> <code>const filter1Datas=myFilter1.values;</code><br />
Il sagit dun tableau de chaînes de caractères. Par exemple pour des années:<br /> Il sagit dun tableau de chaînes de caractères. Par exemple pour des années: <code>["1998", "2000", "2005" …]</code></p>
<code>["1998", "2000", "2005" …]</code></p>
<p>Une fois la configuration terminée, vous pouvez injecter votre liste dans la page via le code suivant:<br /> <p>Une fois la configuration terminée, vous pouvez injecter votre liste dans la page via le code suivant:<br />
<code>myFilter.filter2HTML();</code></p> <code>myFilter.filter2HTML();</code></p>
<p>Par défaut, le <em>label</em> affiché devant la liste sera le nom du champ concerné, tel que présent dans les données traitées.<br /> <p>Par défaut, le <em>LABEL</em> affiché devant la liste sera le nom du champ concerné, tel que présent dans les données traitées.<br />
Si vous souhaitez afficher un autre texte, vous pouvez le passer en paramètre:<br /> Si vous souhaitez afficher un autre texte, vous pouvez le passer en paramètre:<br />
<code>myFilter.filter2HTML("Choisissez une valeur :");</code></p> <code>myFilter.filter2HTML("Choisissez une valeur :");</code></p>
@ -294,7 +291,7 @@
<p>Les deux classes <em>Filter</em> et <em>SearchEngine</em> implémentent dailleurs la même interface: <em>Filters</em>.<br /> <p>Les deux classes <em>Filter</em> et <em>SearchEngine</em> implémentent dailleurs la même interface: <em>Filters</em>.<br />
Et comme dit plus haut, toute instance dune classe validant cette interface sera acceptée comme filtre par FreeDatas2HTML.</p> Et comme dit plus haut, toute instance dune classe validant cette interface sera acceptée comme filtre par FreeDatas2HTML.</p>
<p>Bref pour ajouter un moteur de recherche, il faut de nouveau inclure la classe et linstancier:<br /> <p>Bref pour ajouter un moteur de recherche, il faut de nouveau importer la classe et linstancier:<br />
<code>import { FreeDatas2HTML, SearchEngine } from "./modules/FreeDatas2HTML";<br /> <code>import { FreeDatas2HTML, SearchEngine } from "./modules/FreeDatas2HTML";<br />
<br /> <br />
const mySearch=new SearchEngine(myConverter, { id:"search" });</code></p> const mySearch=new SearchEngine(myConverter, { id:"search" });</code></p>
@ -308,12 +305,10 @@
<h4>Définir les champs à utiliser pour votre recherche</h4> <h4>Définir les champs à utiliser pour votre recherche</h4>
<p>Un troisième paramètre vous permet de préciser la liste des champs dans lesquels la saisie de lutilisateur sera recherchée.<br /> <p>Un troisième paramètre vous permet de préciser la liste des champs dans lesquels la saisie de lutilisateur sera recherchée. Par exemple, pour limiter la recherche aux troisième et quatrième champs:<br />
Par exemple, pour limiter la recherche aux troisième et quatrième champs:<br />
<code>const mySearch=new SearchEngine(myConverter, { id:"search" }, [2,3]);</code></p> <code>const mySearch=new SearchEngine(myConverter, { id:"search" }, [2,3]);</code></p>
<p>Par défaut la recherche se fait donc dans tous les champs présents dans les données, qui ne sont pas forcément affichés.<br /> <p>Vous pouvez ainsi avoir dans vos données un champ contenant des mots-clés utiles à votre moteur de recherche, sans pour autant les afficher dans la page… Par défaut la recherche se fait donc dans tous les champs présents dans les données, même sils ne sont pas affichés.</p>
Vous pouvez ainsi avoir dans vos données un champ contenant des mots-clés utiles à votre moteur de recherche, sans pour autant les afficher dans la page…</p>
<h4>Personnaliser lapparence du moteur de recherche</h4> <h4>Personnaliser lapparence du moteur de recherche</h4>
@ -326,11 +321,11 @@
<code>mySearch.btnTxt="Va chercher!"; // par défaut: Search</code></p> <code>mySearch.btnTxt="Va chercher!"; // par défaut: Search</code></p>
<p>Ou encore le <em>placeholder</em> saffichant dans le champ de saisie:<br /> <p>Ou encore le <em>placeholder</em> saffichant dans le champ de saisie:<br />
<code>mySearch.placeholder="Saisir votre recherche"; // par défaut vide ou «Please enter at least NB characters. », sil y a un nombre minimum de caractères pour lancer la recherche automatique.</code></p> <code>mySearch.placeholder="Saisir votre recherche"; // par défaut vide ou «Please enter at least NB characters. », sil est renseigné un nombre minimum de caractères pour lancer la recherche automatique.</code></p>
<h4>Lancement automatique de la recherche?</h4> <h4>Lancement automatique de la recherche?</h4>
<p>Pour lancer la recherche dès la saisie:<br /> <p>Pour que la recherche soit lancée dès la saisie:<br />
<code>mySearch.automaticSearch=true; // par défaut false</code><br /> <code>mySearch.automaticSearch=true; // par défaut false</code><br />
En fixant éventuellement au nombre minimum de caractères:<br /> En fixant éventuellement au nombre minimum de caractères:<br />
<code>mySearch.nbCharsForSearch=2; // si loption précédente est à «true», par défaut la recherche sera lancée dès le premier caractère saisi. Les espaces entourant la saisie sont ignorés.</code></p> <code>mySearch.nbCharsForSearch=2; // si loption précédente est à «true», par défaut la recherche sera lancée dès le premier caractère saisi. Les espaces entourant la saisie sont ignorés.</code></p>
@ -347,17 +342,17 @@
Mais cela peut créer des faux positifs et si vous souhaitez une recherche plus stricte, lattribut «searchMode» vous permet de préciser votre besoin:</p> Mais cela peut créer des faux positifs et si vous souhaitez une recherche plus stricte, lattribut «searchMode» vous permet de préciser votre besoin:</p>
<ul> <ul>
<li><code>mySearch.searchMode.accentOff=true; // la recherche prendra en compte les accents.</code></li> <li><code>mySearch.searchMode.accentOff=false; // la recherche prendra en compte les accents.</code></li>
<li><code>mySearch.searchMode.caseOff=true; // la recherche prendra en compte la casse.</code></li> <li><code>mySearch.searchMode.caseOff=false; // la recherche prendra en compte la casse.</code></li>
<li><code>mySearch.searchMode.separatedWords=false; // même si elle contient des espaces, lexpression saisie sera cherchée en entier.</code></li> <li><code>mySearch.searchMode.separatedWords=false; // même si elle contient des espaces, lexpression saisie sera cherchée en entier.</code></li>
<li><code>mySearch.searchMode.specialCharsOff=true; // la recherche prendra en compte les éventuels caractères spéciaux&nbsp;(*) saisis.</code></li> <li><code>mySearch.searchMode.specialCharsOff=false; // la recherche prendra en compte les éventuels caractères spéciaux&nbsp;(*) saisis.</code></li>
<li><code>mySearch.searchMode.specialCharsWhiteList="#@%"; // dans le cas où loption précédente est à « false», les caractères listés dans la chaîne fournie seront néanmoins pris en compte, cest-à-dire ici "#", "@" et "%".</code></li> <li><code>mySearch.searchMode.specialCharsWhiteList="#@%"; // dans le cas où loption précédente est à « true», les caractères listés dans la chaîne fournie seront néanmoins pris en compte, cest-à-dire ici "#", "@" et "%".</code></li>
</ul> </ul>
<p>(*) Seuls les caractères de lalphabet latin (a, b…z) et les 10 chiffres de la base décimale (0, 1…9) sont considérés comme des caractères non spéciaux. Donc, par défaut, tout autre caractère saisi sera ignoré.</p> <p>(*) Seuls les caractères de lalphabet latin (a, b…z) et les 10 chiffres de la base décimale (0, 1…9) sont considérés comme des caractères non spéciaux. Donc, par défaut, tout autre caractère saisi sera ignoré.</p>
<p>Évidemment toutes les options précédentes peuvent être passées en une seule fois:<br /> <p>Évidemment toutes les options précédentes peuvent être passées en une seule fois:<br />
<code>mySearch.searchMode={ accentOff=true, caseOff=true, separatedWords=false, specialCharsOff=true };</code></p> <code>mySearch.searchMode={ accentOff=false, caseOff=false, separatedWords=false, specialCharsOff=false }; // les recherches lancées seront strictes</code></p>
<h4>Intégration à la page et activation</h4> <h4>Intégration à la page et activation</h4>
@ -372,11 +367,11 @@
<h3 id="classement">Permettre de classer les données affichées</h3> <h3 id="classement">Permettre de classer les données affichées</h3>
<p>Un dernier outil va donner la possibilité à vos utilisateurs de classer les données affichées via le champ de son choix.<br /> <p>Un dernier outil va donner la possibilité à vos utilisateurs de classer les données affichées via le champ de leur choix.<br />
Pour ce faire, <strong>il est nécessaire que le rendu que vous avez choisi propose des entêtes de colonnes</strong>, ce qui est typiquement le cas des tableaux HTML contenant des balises &lt;TH&gt;.<br /> Pour ce faire, <strong>il est nécessaire que le rendu que vous avez choisi propose des entêtes de colonnes</strong>, ce qui est typiquement le cas des tableaux HTML contenant des balises <em>&lt;TH&gt;</em>.<br />
Lutilisateur pourra ainsi cliquer sur lentête dune colonne pour classer les données dans un sens, puis de nouveau cliquer pour les classer dans lautre sens, etc.</p> Lutilisateur pourra ainsi cliquer sur lentête dune colonne pour classer les données dans un sens, puis de nouveau cliquer pour les classer dans lautre sens, etc.</p>
<p>Pour utiliser cet outil, comme dhabitude, il vous faut commencer par inclure sa classe et linstancier pour chaque champ/colonne ouverte au classement:<br /> <p>Pour utiliser cet outil, comme dhabitude, il vous faut commencer par importer sa classe et linstancier pour chaque champ/colonne ouverte au classement:<br />
<code>import { FreeDatas2HTML, SortingField } from "./modules/FreeDatas2HTML";<br /> <code>import { FreeDatas2HTML, SortingField } from "./modules/FreeDatas2HTML";<br />
<br /> <br />
const mySortingField1=new SortingField(myConverter, 0);</code><br /> const mySortingField1=new SortingField(myConverter, 0);</code><br />
@ -399,7 +394,7 @@
<code>mySortingField1.order="desc"; // accepte "asc", "desc" ou undefined.</code></p> <code>mySortingField1.order="desc"; // accepte "asc", "desc" ou undefined.</code></p>
<p>À noter quune extension est proposée pour vous permettre de créer des liens de classement, même quand vous navez pas prévu dentêtes dans le rendu de vos données.<br /> <p>À noter quune extension est proposée pour vous permettre de créer des liens de classement, même quand vous navez pas prévu dentêtes dans le rendu de vos données.<br />
Il sagit de la classe <strong><i>SortingFieldsStandAlone</i></strong> qui nest pas documentée ici pour linstant. Mais vous pouvez <a href="https://forge.chapril.org/Fab_Blab/freeDatas2HTML/src/branch/master/src/demo/exampleWithUL.ts" target="_blank">étudier le code dune des pages de démonstration lutilisant</a>.</p> Il sagit de la classe <strong><i>SortingFieldsStandAlone</i></strong> qui nest pas documentée ici pour linstant. Mais vous pouvez <a href="https://forge.chapril.org/Fab_Blab/FreeDatas2HTML/src/branch/master/src/demo/exampleWithUL.ts" target="_blank">étudier le code dune des pages de démonstration lutilisant</a>.</p>
<h3 id="fonctionClassement">Personnaliser la façon de classer les données</h3> <h3 id="fonctionClassement">Personnaliser la façon de classer les données</h3>
@ -422,7 +417,7 @@
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br />
};</code></p> };</code></p>
<p>Une fois toutes vos fonctions de classement définies, il vaut faut les associer aux champs concernés de vos données:<br /> <p>Une fois toutes vos fonctions de classement définies, il vaut faut les associer aux champs concernés:<br />
<code>myConverter.datasSortingFunctions=[{ datasFieldNb:4, sort:mySort }, { datasFieldNb:5, sort:mySort2 }];</code></p> <code>myConverter.datasSortingFunctions=[{ datasFieldNb:4, sort:mySort }, { datasFieldNb:5, sort:mySort2 }];</code></p>
<p>Il est important de les associer à votre instance avant de déclarer toute autre fonctionnalité en ayant besoin: filtres <em>SELECT</em>, colonnes de classement…</p> <p>Il est important de les associer à votre instance avant de déclarer toute autre fonctionnalité en ayant besoin: filtres <em>SELECT</em>, colonnes de classement…</p>