diff --git a/Js/fonctions.js b/Js/fonctions.js index d73b41e7..9da7626d 100755 --- a/Js/fonctions.js +++ b/Js/fonctions.js @@ -48489,30 +48489,341 @@ function appliquerDataTable() { } +/** + * Applique une configuration simplifiée (SaaS style) pour les tableaux spéciaux + * Idéal pour les affichages de type "journal" ou "aperçu" + */ function dataTableSpeciale() { - const $table = $('.tabspeciale'); - const codeLangue = $("#codeLangue").val() || "fr_FR"; - - // Détruire l'instance existante si elle existe - if ($.fn.DataTable.isDataTable($table)) { - $table.DataTable().clear().destroy(); - $table.empty(); // Optionnel : vider le contenu si nécessaire + // Sécurité : Vérifier si l'objet DataTables existe + if (typeof $.fn.DataTable === 'undefined') { + console.error("DataTables non chargé."); + return false; } - // Définition des traductions + const $table = $('.tabspeciale'); + + // Si le sélecteur ne trouve rien, on arrête pour éviter des erreurs + if ($table.length === 0) return; + + // Récupération de la langue (par défaut FR) + const codeLangue = $("#codeLangue").val() || "fr_FR"; + + // --- NETTOYAGE DE L'INSTANCE EXISTANTE --- + if ($.fn.DataTable.isDataTable($table)) { + // .clear() vide les données, .destroy() supprime l'instance DataTables + $table.DataTable().clear().destroy(); + + // ATTENTION : Ne pas faire $table.empty() car cela supprime le + // Si vous voulez vider les lignes manuellement sans casser la structure : + $table.find('tbody').empty(); + } + + // --- CONFIGURATION DES TRADUCTIONS --- const langOptions = { + en_US: { + lengthMenu: "Display _MENU_ records per page", + zeroRecords: "Nothing found", + info: "Showing _PAGE_ of _PAGES_", + infoEmpty: "No records", + search: "Search:", + paginate: { next: "►", previous: "◄", first: "|◄", last: "►|" }, + infoFiltered: "(filtered from _MAX_ total records)" + }, + fr_FR: { + lengthMenu: "Affiche _MENU_ par page", + zeroRecords: "Aucune donnée trouvée", + info: "_PAGE_ sur _PAGES_", + infoEmpty: "Pas d'enregistrement", + search: "Recherche :", + paginate: { next: "►", previous: "◄", first: "|◄", last: "►|" }, + infoFiltered: "(filtré de _MAX_ total enregistrements)" + } + }; + + // --- INITIALISATION --- + try { + $table.DataTable({ + destroy: true, // Permet de réinitialiser proprement + responsive: true, // S'adapte aux mobiles + scrollX: true, // Scroll horizontal si nécessaire + scrollY: "60vh", // Hauteur fixe avec scroll interne + pagingType: "full_numbers", + autoWidth: false, + + // Paramètres SaaS : on épure l'interface + searching: false, // Cache la barre de recherche + ordering: false, // Désactive le tri (souvent pour les journaux) + lengthChange: false, // Cache le choix "10, 20, 50" + + // Langue sélectionnée + language: langOptions[codeLangue] || langOptions.fr_FR + }); + + /** + * AJUSTEMENT TECHNIQUE + * Force DataTables à recalculer les largeurs de colonnes (important si le + * tableau était caché dans un onglet ou si le scrollY est activé). + */ + setTimeout(function() { + $table.DataTable().columns.adjust().draw(); + }, 200); + + } catch (err) { + console.error("Erreur lors de l'application DataTable sur .tabspeciale :", err); + return false; + } +} + +/** + * Applique une configuration "Mini" pour les petits tableaux (ex: widgets, aperçus) + * Optimisée pour la performance et le rendu SaaS + */ +function dataTableSpecialeMini() { + // Vérification de l'existence de DataTables + if (typeof $.fn.DataTable === 'undefined') return false; + + const $oTable = $('.tabspecialemini'); + + // Si le tableau n'existe pas sur la page, on sort + if ($oTable.length === 0) return; + + const codeLangue = $("#codeLangue").val() || "fr_FR"; + + // --- NETTOYAGE SÉCURISÉ --- + // Correction : Utilisation de $oTable (et non 'table' qui est undefined) + if ($.fn.DataTable.isDataTable($oTable)) { + $oTable.DataTable().clear().destroy(); + // On vide le body uniquement pour préserver le thead technique + $oTable.find('tbody').empty(); + } + + // --- CONFIGURATION DE LA LANGUE --- + const langConfig = { + en_US: { + zeroRecords: "No data", + info: "Page _PAGE_/_PAGES_", + infoEmpty: "", + paginate: { next: "►", previous: "◄", first: "|◄", last: "►|" } + }, + fr_FR: { + zeroRecords: "Aucune donnée", + info: "Page _PAGE_/_PAGES_", + infoEmpty: "", + paginate: { next: "►", previous: "◄", first: "|◄", last: "►|" } + } + }; + + // --- INITIALISATION --- + try { + $oTable.DataTable({ + destroy: true, + responsive: true, + autoWidth: false, + scrollX: true, + scrollY: "34vh", // Hauteur réduite pour les mini-vues + scrollCollapse: true, + pagingType: "simple_numbers", // Plus compact pour les petits tableaux + + // Paramètres SaaS (Interface épurée) + searching: false, // bFilter: false + lengthChange: false, // bLengthChange: false + ordering: true, // On garde le tri pour l'utilité + orderMulti: true, + + // Application de la langue + language: langConfig[codeLangue] || langConfig.fr_FR + }); + + // Ajustement automatique des colonnes après un léger délai + setTimeout(() => { + $oTable.DataTable().columns.adjust().draw(); + }, 150); + + } catch (err) { + console.error("Erreur dataTableSpecialeMini :", err); + return false; + } +} + + + +/** + * Applique une configuration "Ultra-Mini" (ex: petites listes dans des widgets) + * Correction de l'erreur sur la variable 'table' et optimisation du rendu. + */ +function dataTableMini() { + // Sécurité : Vérifier si DataTables est bien chargé + if (typeof $.fn.DataTable === 'undefined') return false; + + const $oTable = $('.tabmini'); + + // Sortie propre si le tableau n'existe pas + if ($oTable.length === 0) return; + + const codeLangue = $("#codeLangue").val() || "fr_FR"; + + // --- NETTOYAGE SÉCURISÉ --- + // Correction : Remplacement de 'table' (undefined) par '$oTable' + if ($.fn.DataTable.isDataTable($oTable)) { + $oTable.DataTable().clear().destroy(); + // On ne vide pas le HTML pour préserver la structure + $oTable.find('tbody').empty(); + } + + // --- CONFIGURATION DE LA LANGUE --- + const langConfig = { + en_US: { + zeroRecords: "No data", + info: "_PAGE_ / _PAGES_", + infoEmpty: "", + paginate: { next: "►", previous: "◄", first: "|◄", last: "►|" } + }, + fr_FR: { + zeroRecords: "Aucune donnée", + info: "_PAGE_ / _PAGES_", + infoEmpty: "", + paginate: { next: "►", previous: "◄", first: "|◄", last: "►|" } + } + }; + + // --- INITIALISATION --- + try { + $oTable.DataTable({ + destroy: true, + responsive: true, + autoWidth: false, + scrollX: true, + scrollY: "20vh", // Hauteur très compacte + scrollCollapse: true, // Réduit la hauteur si peu de données + pageLength: 10, // Force 10 lignes max + + // Épurement de l'interface pour le style SaaS + searching: false, // bFilter: false + lengthChange: false, // bLengthChange: false + ordering: true, + orderMulti: true, + pagingType: "numbers", // Style très minimaliste + + language: langConfig[codeLangue] || langConfig.fr_FR + }); + + // Recalcul des colonnes (indispensable pour scrollX/scrollY) + setTimeout(() => { + $oTable.DataTable().columns.adjust().draw(); + }, 100); + + } catch (err) { + console.error("Erreur dataTableMini :", err); + return false; + } +} + + +/** + * Applique une configuration standard pour les tableaux de classe .datatab + * Optimisé pour un affichage SaaS avec barre de recherche active (bFilter: true) + */ +function dataTab() { + // Sécurité : Vérifier si DataTables est chargé + if (typeof $.fn.DataTable === 'undefined') return false; + + const $oTable = $('.datatab'); + + // Sortie si aucun tableau trouvé + if ($oTable.length === 0) return; + + const codeLangue = $("#codeLangue").val() || "fr_FR"; + + // --- NETTOYAGE DE L'INSTANCE --- + if ($.fn.DataTable.isDataTable($oTable)) { + // Correction : Utilisation de $oTable (évite l'erreur 'table is undefined') + $oTable.DataTable().clear().destroy(); + // Vider le body pour une réinitialisation propre sans toucher au thead + $oTable.find('tbody').empty(); + } + + // --- CONFIGURATION DES TRADUCTIONS --- + const langConfig = { + en_US: { + lengthMenu: "Display _MENU_ records", + zeroRecords: "Nothing found", + info: "Page _PAGE_ of _PAGES_", + infoEmpty: "No records available", + search: "Search:", + paginate: { next: "►", previous: "◄", first: "|◄", last: "►|" }, + infoFiltered: "(filtered from _MAX_ total records)" + }, + fr_FR: { + lengthMenu: "Affiche _MENU_ par page", + zeroRecords: "Aucune donnée trouvée", + info: "_PAGE_ sur _PAGES_", + infoEmpty: "Pas d'enregistrement", + search: "Recherche :", + paginate: { next: "►", previous: "◄", first: "|◄", last: "►|" }, + infoFiltered: "(filtré de _MAX_ total enregistrements)" + } + }; + + // --- INITIALISATION --- + try { + $oTable.DataTable({ + destroy: true, + responsive: true, + autoWidth: false, + lengthMenu: [10, 50, 100], + scrollX: true, + scrollY: "23vh", // Hauteur fixe définie + scrollCollapse: true, + pagingType: "full_numbers", + searching: true, // bFilter: true (Active la recherche) + + // On applique la langue correspondante + language: langConfig[codeLangue] || langConfig.fr_FR + }); + + // Ajustement des colonnes pour éviter les décalages d'entête + setTimeout(() => { + $oTable.DataTable().columns.adjust().draw(); + }, 150); + + } catch (err) { + console.error("Erreur dans dataTab :", err); + return false; + } +} + +/** + * Applique la configuration DataTable pour les tableaux de filtrage (.datafiltre) + * Correction de l'erreur de variable et optimisation du code + */ +function datafiltre() { + // Sécurité : Vérifier si DataTables est bien chargé + if (typeof $.fn.DataTable === 'undefined') return false; + + const $oTable = $('.datafiltre'); + + // Sortie si aucun tableau trouvé sur la page + if ($oTable.length === 0) return; + + const codeLangue = $("#codeLangue").val() || "fr_FR"; + + // --- NETTOYAGE DE L'INSTANCE EXISTANTE --- + if ($.fn.DataTable.isDataTable($oTable)) { + // Correction : Utilisation de $oTable pour éviter l'erreur "table is undefined" + $oTable.DataTable().clear().destroy(); + // On vide le body pour une réinitialisation propre sans altérer le + $oTable.find('tbody').empty(); + } + + // --- CONFIGURATION DES TRADUCTIONS (DRY) --- + const langConfig = { en_US: { lengthMenu: "Display _MENU_ records per page", zeroRecords: "Nothing found - sorry", info: "Showing page _PAGE_ of _PAGES_", infoEmpty: "No records available", search: "Search:", - paginate: { - next: "►", - previous: "◄", - first: "|◄", - last: "►|" - }, + paginate: { next: "►", previous: "◄", first: "|◄", last: "►|" }, infoFiltered: "(filtered from _MAX_ total records)" }, fr_FR: { @@ -48520,426 +48831,114 @@ function dataTableSpeciale() { zeroRecords: "Désolé - Aucune donnée trouvée", info: "_PAGE_ sur _PAGES_ pages", infoEmpty: "Pas d'enregistrement", - search: "Recherche:", - paginate: { - next: "►", - previous: "◄", - first: "|◄", - last: "►|" - }, + search: "Recherche :", + paginate: { next: "►", previous: "◄", first: "|◄", last: "►|" }, infoFiltered: "(filtré de _MAX_ total enregistrements)" } }; - // Définition des lengthMenu selon la langue - const lengthMenuOptions = (codeLangue === "en_US") ? [50, 100, 150] : [20, 50, 100]; - + // --- INITIALISATION --- try { - $table.DataTable({ + $oTable.DataTable({ destroy: true, responsive: true, - lengthMenu: lengthMenuOptions, - scrollX: true, - scrollY: "75vh", - pagingType: "full_numbers", autoWidth: false, - searching: false, // équivalent moderne de bFilter:false - ordering: false, - lengthChange: false, // équivalent moderne de bLengthChange:false - orderMulti: true, - language: langOptions[codeLangue] || langOptions.fr_FR + lengthMenu: [10, 50, 100], + scrollX: true, + scrollY: "23vh", // Hauteur compacte pour les filtres + scrollCollapse: true, + pagingType: "full_numbers", + searching: true, // bFilter: true (Indispensable pour le filtrage) + + // On injecte la langue dynamiquement + language: langConfig[codeLangue] || langConfig.fr_FR }); - // Ajuster les colonnes après init - $table.DataTable().columns.adjust().draw(); + // Ajustement des colonnes pour un alignement parfait (indispensable avec scrollY) + setTimeout(() => { + $oTable.DataTable().columns.adjust().draw(); + }, 150); } catch (err) { - console.error("Erreur DataTable:", err); + console.error("Erreur dans datafiltre :", err); return false; } } -function dataTableSpecialeMini(){ - const oTable = $('.tabspecialemini'); - var codeLangue = $("#codeLangue").val(); - - // Détruire l'instance existante si elle existe - if ($.fn.DataTable.isDataTable(oTable)) { - table.DataTable().destroy(); - table.empty(); // Optionnel : vider le contenu si nécessaire + +/** + * Applique la configuration DataTable pour les tableaux de filtrage (.filtreTab) + * Correction de l'erreur de variable et unification de la logique multilingue. + */ +function filtreTab() { + // Sécurité : Vérifier si DataTables est bien chargé avant exécution + if (typeof $.fn.DataTable === 'undefined') return false; + + const $oTable = $('.filtreTab'); + + // On quitte la fonction si le tableau n'est pas présent sur la page actuelle + if ($oTable.length === 0) return; + + // Détection de la langue avec valeur par défaut + const codeLangue = $("#codeLangue").val() || "fr_FR"; + + // --- NETTOYAGE SÉCURISÉ --- + // On détruit l'instance existante pour permettre la réinitialisation sans erreur + if ($.fn.DataTable.isDataTable($oTable)) { + // Correction : Utilisation de $oTable (évite l'erreur fatale "table is undefined") + $oTable.DataTable().clear().destroy(); + // On vide uniquement le corps du tableau pour garder les entêtes HTML (thead) + $oTable.find('tbody').empty(); } - - try{ - - if(codeLangue=="en_US") - { - oTable.DataTable({ - destroy: true, - responsive: true, - "lengthMenu": [ 50, 100, 150], - "scrollX": true, - "scrollY": "34vh", - "pagingType": "full_numbers", - "autoWidth": false, - "bFilter": false, - "bLengthChange": false, - "orderMulti": true, - "language": { - "lengthMenu":"Display _MENU_ records per page", - "zeroRecords": "Nothing found - sorry", - "info": "Showing page _PAGE_ of _PAGES_", - "infoEmpty": "No records available", - "search": "Search:", - "paginate": { - "next": "►", - "previous": "◄", - "first": "|◄", - "last": "►|" - }, - "infoFiltered": "(filtered from _MAX_ total records)" - } - }); - }else{ - oTable.DataTable({ - destroy: true, - responsive: true, - "lengthMenu": [ 50, 100, 150], - "scrollX": true, - "scrollY": "34vh", - "pagingType": "full_numbers", - "autoWidth": false, - "bFilter": false, - "bLengthChange": false, - "orderMulti": true, - "language": { - "lengthMenu":"Affiche _MENU_ par page", - "zeroRecords": "Désolé - Aucune donnée trouvée", - "info": "_PAGE_ sur _PAGES_ pages", - "infoEmpty": "Pas d'enregistrement", - "search": "Recherche:", - "paginate": { - "next": "►", - "previous": "◄", - "first": "|◄", - "last": "►|" + // --- CONFIGURATION DES TRADUCTIONS (Approche centralisée) --- + const langConfig = { + en_US: { + lengthMenu: "Display _MENU_ records per page", + zeroRecords: "Nothing found - sorry", + info: "Showing page _PAGE_ of _PAGES_", + infoEmpty: "No records available", + search: "Search:", + paginate: { next: "►", previous: "◄", first: "|◄", last: "►|" }, + infoFiltered: "(filtered from _MAX_ total records)" + }, + fr_FR: { + lengthMenu: "Affiche _MENU_ par page", + zeroRecords: "Désolé - Aucune donnée trouvée", + info: "_PAGE_ sur _PAGES_ pages", + infoEmpty: "Pas d'enregistrement", + search: "Recherche :", + paginate: { next: "►", previous: "◄", first: "|◄", last: "►|" }, + infoFiltered: "(filtré de _MAX_ total enregistrements)" + } + }; - }, - "infoFiltered": "(filtré de _MAX_ total enregistrements)" - } - }); - } - - //$('.tabspecialemini').columns.adjust().draw(); + // --- INITIALISATION --- + try { + $oTable.DataTable({ + destroy: true, + responsive: true, + autoWidth: false, + lengthMenu: [10, 50, 100], + scrollX: true, + scrollY: "23vh", // Hauteur compacte pour les zones de filtrage + scrollCollapse: true, // Ajuste la hauteur si peu de résultats + pagingType: "full_numbers", + searching: true, // bFilter: true (Indispensable pour filtrer les données) + + // Application dynamique de la langue + language: langConfig[codeLangue] || langConfig.fr_FR + }); - } - catch(err){ - return false; - } -} + // Ajustement forcé des colonnes pour corriger les décalages visuels + setTimeout(() => { + $oTable.DataTable().columns.adjust().draw(); + }, 150); - - -function dataTableMini(){ - - const oTable = $('.tabmini'); - var codeLangue = $("#codeLangue").val(); - - // Détruire l'instance existante si elle existe - if ($.fn.DataTable.isDataTable(oTable)) { - table.DataTable().destroy(); - table.empty(); // Optionnel : vider le contenu si nécessaire + } catch (err) { + console.error("Erreur dans filtreTab :", err); + return false; } - - try{ - if(codeLangue=="en_US") - { - oTable.DataTable({ - destroy: true, - responsive: true, - "lengthMenu": [10], - "scrollX": true, - "scrollY": "20vh", - "pagingType": "full_numbers", - "autoWidth": false, - "bFilter": false, - "bLengthChange": false, - "orderMulti": true, - "language": { - "lengthMenu":"Display _MENU_ records per page", - "zeroRecords": "Nothing found - sorry", - "info": "Showing page _PAGE_ of _PAGES_", - "infoEmpty": "No records available", - "search": "Search:", - "paginate": { - "next": "►", - "previous": "◄", - "first": "|◄", - "last": "►|" - - }, - "infoFiltered": "(filtered from _MAX_ total records)" - } - }); - }else{ - oTable.DataTable({ - destroy: true, - responsive: true, - "lengthMenu": [10], - "scrollX": true, - "scrollY": "20vh", - "pagingType": "full_numbers", - "autoWidth": false, - "bFilter": false, - "bLengthChange": false, - "orderMulti": true, - "language": { - "lengthMenu":"Affiche _MENU_ par page", - "zeroRecords": "Désolé - Aucune donnée trouvée", - "info": "_PAGE_ sur _PAGES_ pages", - "infoEmpty": "Pas d'enregistrement", - "search": "Recherche:", - "paginate": { - "next": "►", - "previous": "◄", - "first": "|◄", - "last": "►|" - - }, - "infoFiltered": "(filtré de _MAX_ total enregistrements)" - } - }); - } - - //$('.tabmini').columns.adjust().draw(); - } - catch(err){ - return false; - } -} - - -function dataTab(){ - - const oTable = $('.datatab'); - var codeLangue = $("#codeLangue").val(); - - // Détruire l'instance existante si elle existe - if ($.fn.DataTable.isDataTable(oTable)) { - table.DataTable().destroy(); - table.empty(); // Optionnel : vider le contenu si nécessaire - } - - try{ - - if(codeLangue=="en_US") - { - oTable.DataTable({ - destroy: true, - responsive: true, - "lengthMenu": [ 10, 50, 100], - "scrollX": true, - "scrollY": "23vh", - "pagingType": "full_numbers", - "autoWidth": false, - "bFilter": true, - "language": { - "lengthMenu":"Display _MENU_ records per page", - "zeroRecords": "Nothing found - sorry", - "info": "Showing page _PAGE_ of _PAGES_", - "infoEmpty": "No records available", - "search": "Search:", - "paginate": { - "next": "►", - "previous": "◄", - "first": "|◄", - "last": "►|" - }, - "infoFiltered": "(filtered from _MAX_ total records)" - } - }); - }else{ - oTable.DataTable({ - destroy: true, - responsive: true, - "lengthMenu": [ 10, 50, 100], - "scrollX": true, - "scrollY": "23vh", - "pagingType": "full_numbers", - "autoWidth": false, - "bFilter": true, - "language": { - "lengthMenu":"Affiche _MENU_ par page", - "zeroRecords": "Désolé - Aucune donnée trouvée", - "info": "_PAGE_ sur _PAGES_ pages", - "infoEmpty": "Pas d'enregistrement", - "search": "Recherche:", - "paginate": { - "next": "►", - "previous": "◄", - "first": "|◄", - "last": "►|" - }, - "infoFiltered": "(filtré de _MAX_ total enregistrements)" - } - }); - } - - } - catch(err){ - - return false; - - } -} - -function datafiltre(){ - - const oTable = $('.datafiltre'); - var codeLangue = $("#codeLangue").val(); - - // Détruire l'instance existante si elle existe - if ($.fn.DataTable.isDataTable(oTable)) { - table.DataTable().destroy(); - table.empty(); // Optionnel : vider le contenu si nécessaire - } - - try{ - - if(codeLangue=="en_US") - { - oTable.DataTable({ - destroy: true, - responsive: true, - "lengthMenu": [ 10, 50, 100], - "scrollX": true, - "scrollY": "23vh", - "pagingType": "full_numbers", - "autoWidth": false, - "bFilter": true, - "language": { - "lengthMenu":"Display _MENU_ records per page", - "zeroRecords": "Nothing found - sorry", - "info": "Showing page _PAGE_ of _PAGES_", - "infoEmpty": "No records available", - "search": "Search:", - "paginate": { - "next": "►", - "previous": "◄", - "first": "|◄", - "last": "►|" - }, - "infoFiltered": "(filtered from _MAX_ total records)" - } - }); - }else{ - oTable.DataTable({ - destroy: true, - responsive: true, - "lengthMenu": [ 10, 50, 100], - "scrollX": true, - "scrollY": "23vh", - "pagingType": "full_numbers", - "autoWidth": false, - "bFilter": true, - "language": { - "lengthMenu":"Affiche _MENU_ par page", - "zeroRecords": "Désolé - Aucune donnée trouvée", - "info": "_PAGE_ sur _PAGES_ pages", - "infoEmpty": "Pas d'enregistrement", - "search": "Recherche:", - "paginate": { - "next": "►", - "previous": "◄", - "first": "|◄", - "last": "►|" - }, - "infoFiltered": "(filtré de _MAX_ total enregistrements)" - } - }); - } - - } - catch(err){ - - return false; - - } -} - - -function filtreTab(){ - - const oTable = $('.filtreTab'); - var codeLangue = $("#codeLangue").val(); - - // Détruire l'instance existante si elle existe - if ($.fn.DataTable.isDataTable(oTable)) { - table.DataTable().destroy(); - table.empty(); // Optionnel : vider le contenu si nécessaire - } - - try{ - - if(codeLangue=="en_US") - { - oTable.DataTable({ - destroy: true, - responsive: true, - "lengthMenu": [ 10, 50, 100], - "scrollX": true, - "scrollY": "23vh", - "pagingType": "full_numbers", - "autoWidth": false, - "bFilter": true, - "language": { - "lengthMenu":"Display _MENU_ records per page", - "zeroRecords": "Nothing found - sorry", - "info": "Showing page _PAGE_ of _PAGES_", - "infoEmpty": "No records available", - "search": "Search:", - "paginate": { - "next": "►", - "previous": "◄", - "first": "|◄", - "last": "►|" - }, - "infoFiltered": "(filtered from _MAX_ total records)" - } - }); - }else{ - oTable.DataTable({ - destroy: true, - responsive: true, - "lengthMenu": [ 10, 50, 100], - "scrollX": true, - "scrollY": "23vh", - "pagingType": "full_numbers", - "autoWidth": false, - "bFilter": true, - "language": { - "lengthMenu":"Affiche _MENU_ par page", - "zeroRecords": "Désolé - Aucune donnée trouvée", - "info": "_PAGE_ sur _PAGES_ pages", - "infoEmpty": "Pas d'enregistrement", - "search": "Recherche:", - "paginate": { - "next": "►", - "previous": "◄", - "first": "|◄", - "last": "►|" - }, - "infoFiltered": "(filtré de _MAX_ total enregistrements)" - } - }); - } - - } - catch(err){ - - return false; - - } } function datatab_plus(){