# jsHtml2Ods Conversion d'un tableau HTML en fichier ODS disponible en téléchargement. Le principe de cette bibliothèque est de pouvoir écrire un lien proposant une version ODS (en fait au format .fods) d'un tableau HTML existant. L'exportation est opérationnelle sans aucune modification du tableau mais l'aspect du fichier résultant peut être substantiellement amélioré en ajoutant des attributs spéciaux (`data-od-*`) aux éléments du tableau et en proposant des styles suivant la syntaxe CSS. Cette bibliothèque est testée sous Firefox ou Chromium pour des tableaux de petite taille. ## Développement et compilation Le code Javascript est décomposé en plusieurs fichiers contenus dans *src/js/*, l'exemple *dev.html* du répertoire *demos/* charge ces fichiers séparément. Ces fichiers sont compilés dans un fichier unique via l'outil *jake* et le fichier *JakeFile.js* via la commande `jake build[version]`. Par défaut, ce fichier nommé *html2ods.js* est placé dans *build/* et est utilisé par l'exemple *build.html* du répertoire *demos/*. Le répertoire *dist/* contient la dernière compilation avec numéro de version. En mode développement, les fichiers de *src/js/currency*, *src/js/xmlwriter* et *src/js/opendocument* sont des bibliothèques séparées avec leur propre « espace de nom ». À la compilation, ils sont placés dans `Html2Ods` pour n'avoir qu'un seul « espace de nom », c'est pourquoi il ne faut pas supprimer la ligne `//compile target` dans le fichier *src/js/Html2Ods.js* ## Attributs spéciaux des éléments HTML L'exportation peut être configurée à l'aide d'attributs nommés `data-od-*`. Ils sont tous facultatifs et sont placés au niveau des différents éléments composants le tableau. Il est à noter que les attributs `colspan` et `rowspan` sont reconnus et appliqués ainsi que l'attribut `span` pour les éléments `` ou ``. ### Élément `` - `data-od-sheetname` : nom de la feuille dans le fichier résultant - `data-od-currency` : code ISO en trois lettres de la monnaie par défaut de la table - `data-od-fixed-rows` : nombre de lignes fixes - `data-od-fixed-columns` : nombre de colonnes fixes ### Éléments `` ou `` - `data-od-style` : style de la colonne - `data-od-width` : largeur de la colonne (avec l'unité, par exemple « 6cm »), prend le pas sur la largeur définie dans le style, permet de définir la largeur sans avoir à définir le style ### Élément `` - `data-od-style` : style de la ligne (en cas d'absence de valeur, un élément `` a comme style *Header* s'il appartient à un élément ``, *Standard* sinon) ### Éléments `
` ou `` - `data-od-style` : style de la cellule (en cas d'absence de valeur, un élément `` a comme style *Header* et un élément `` a comme style *Standard*) - `data-od-type` : type des données de la cellule (valeurs possibles : `number`, `date` ou `currency`) - `data-od-text` : texte de la cellule (alias : `data-text`), voir ci-dessous - `data-od-currency` : code ISO en trois lettres de la monnaie de la cellule, n'a d'intérêt que si la cellule est de type `currency` et peut être défini au niveau de l'élément `` #### Texte d'une cellule Par défaut, le texte de la cellule dans le fichier résultant est le texte brut de l'élément `
` ou ``. Il est possible d'indiquer un texte alternatif via l'attribut `data-od-text`. Ce texte alternatif est souvent nécessaire dans le cas de cellule de type `number`, `date` ou `currency` ; en effet, la valeur de la cellule doit être un nombre valide ou une date au format ISO pour être traitée correctement lors de l'exporation. Au lieu de l'attribut `data-od-text`, la valeur peut être définie dans l'attribut `data-text`, ce qui permet la comptabilité avec l'extension JQuery TableSorter. Si les deux attributs sont présents, `data-od-text` a la préséance. Lorsque le texte de la cellule est le texte brut de l'élément, il est possible d'ignorer un élément enfant **direct** de l'élément `` ou `` en lui donnant l'attribut `data-od-hidden` avec n'importe quelle valeur non nulle (1 ou true sont conseillés). ## Définition des styles via une syntaxe CSS Dans le format OpenDocument, la mise en forme des éléments (colonne, ligne, cellule) sont définies par des styles attachés aux éléments. Si de nombreux noms de propriété rappellent ceux des propriétés courantes du CSS, il y a quelques différences de taille : - Un élément possède un style et un seul - La seule hiérachie possible est un parent pour un style - Il n'y a évidemment aucune possibilité de définition en « cascade » via les sélecteurs CSS. Pour définir des styles dans le fichier résultant (par exemple, mettre un fond rouge à une cellule), jsHtml2Ods propose un mécanisme de conversion d'éléments suivant la syntaxe CSS vers le format XML d'OpenDocument. **Point important** : il s'agit d'une forme de détournement du CSS, aucun sélecteur CSS ne va fonctionner de manière habituelle ; l'idée est de pouvoir définir les styles de l'exportation au même endroit que le reste du HTML, c'est à dire dans les fichiers CSS chargés pa la page (ou le CSS d'éléments `