/* ------------------------------------------------------------------------------
 *
 *  # Advanced datatables
 *
 *  Demo JS code for datatable_advanced.html page
 *
 * ---------------------------------------------------------------------------- */

// Setup module
// ------------------------------

var DatatableAdvanced = (function () {
  //
  // Setup module components
  //

  // Basic Datatable examples
  var _componentDatatableAdvanced = function () {
    if (!$().DataTable) {
      console.warn("Warning - datatables.min.js is not loaded.");
      return;
    }

    // Setting datatable defaults
    $.extend($.fn.dataTable.defaults, {
      columnDefs: [
        {
          orderable: false,
          //width: 100,
          targets: [3],
        },
      ],
      dom: '<"datatable-header"fl><"datatable-scroll"t><"datatable-footer"ip>',
      language: {
        search: "<span>Filter:</span> _INPUT_",
        searchPlaceholder: "Type to filter...",
        lengthMenu: "<span>Show:</span> _MENU_",
        paginate: {
          first: "First",
          last: "Last",
          next: $("html").attr("dir") == "rtl" ? "&larr;" : "&rarr;",
          previous: $("html").attr("dir") == "rtl" ? "&rarr;" : "&larr;",
        },
      },
    });

    // Apply custom style to select
    $.extend($.fn.dataTableExt.oStdClasses, {
      sLengthSelect: "custom-select",
    });

    // Datatable 'length' options
    $(".datatable-show-all").DataTable({
      dom: "Bfrtip", // Active la barre avec les boutons
      lengthMenu: [
        [10, 25, 50, -1],
        [10, 25, 50, "Tout"],
      ],
      ordering: false,
      language: {
        searchPlaceholder: "Saisissez votre recherche...",
        emptyTable: "Aucune donnée disponible dans le tableau",
        lengthMenu: "Afficher _MENU_ éléments",
        loadingRecords: "Chargement...",
        processing: "Traitement...",
        zeroRecords: "Aucun élément correspondant trouvé",
        paginate: {
          first: "Premier",
          last: "Dernier",
          previous: "Précédent",
          next: "Suiv",
        },
        aria: {
          sortAscending: ": activer pour trier la colonne par ordre croissant",
          sortDescending:
            ": activer pour trier la colonne par ordre décroissant",
        },
        select: {
          rows: {
            _: "%d lignes sélectionnées",
            1: "1 ligne sélectionnée",
          },
          cells: {
            1: "1 cellule sélectionnée",
            _: "%d cellules sélectionnées",
          },
          columns: {
            1: "1 colonne sélectionnée",
            _: "%d colonnes sélectionnées",
          },
        },
        autoFill: {
          cancel: "Annuler",
          fill: "Remplir toutes les cellules avec <i>%d</i>",
          fillHorizontal: "Remplir les cellules horizontalement",
          fillVertical: "Remplir les cellules verticalement",
        },
        searchBuilder: {
          conditions: {
            date: {
              after: "Après le",
              before: "Avant le",
              between: "Entre",
              empty: "Vide",
              equals: "Egal à",
              not: "Différent de",
              notBetween: "Pas entre",
              notEmpty: "Non vide",
            },
            number: {
              between: "Entre",
              empty: "Vide",
              equals: "Egal à",
              gt: "Supérieur à",
              gte: "Supérieur ou égal à",
              lt: "Inférieur à",
              lte: "Inférieur ou égal à",
              not: "Différent de",
              notBetween: "Pas entre",
              notEmpty: "Non vide",
            },
            string: {
              contains: "Contient",
              empty: "Vide",
              endsWith: "Se termine par",
              equals: "Egal à",
              not: "Différent de",
              notEmpty: "Non vide",
              startsWith: "Commence par",
            },
            array: {
              equals: "Egal à",
              empty: "Vide",
              contains: "Contient",
              not: "Différent de",
              notEmpty: "Non vide",
              without: "Sans",
            },
          },
          add: "Ajouter une condition",
          button: {
            0: "Recherche avancée",
            _: "Recherche avancée (%d)",
          },
          clearAll: "Effacer tout",
          condition: "Condition",
          data: "Donnée",
          deleteTitle: "Supprimer la règle de filtrage",
          logicAnd: "Et",
          logicOr: "Ou",
          title: {
            0: "Recherche avancée",
            _: "Recherche avancée (%d)",
          },
          value: "Valeur",
        },
        searchPanes: {
          clearMessage: "Effacer tout",
          count: "{total}",
          title: "Filtres actifs - %d",
          collapse: {
            0: "Volet de recherche",
            _: "Volet de recherche (%d)",
          },
          countFiltered: "{shown} ({total})",
          emptyPanes: "Pas de volet de recherche",
          loadMessage: "Chargement du volet de recherche...",
        },
        buttons: {
          collection: "Collection",
          colvis: "Visibilité colonnes",
          colvisRestore: "Rétablir visibilité",
          copy: "Copier",
          copySuccess: {
            1: "1 ligne copiée dans le presse-papier",
            _: "%ds lignes copiées dans le presse-papier",
          },
          copyTitle: "Copier dans le presse-papier",
          csv: "CSV",
          excel: "Excel",
          pageLength: {
            "-1": "Afficher toutes les lignes",
            _: "Afficher %d lignes",
          },
          pdf: "PDF",
          print: "Imprimer",
          copyKeys:
            "Appuyez sur ctrl ou u2318 + C pour copier les données du tableau dans votre presse-papier.",
        },
        decimal: ",",
        info: "Affichage de _START_ à _END_ sur _TOTAL_ éléments",
        infoEmpty: "Affichage de 0 à 0 sur 0 éléments",
        infoThousands: ".",
        search: "Filtrer: ",
        thousands: ".",
        infoFiltered: "(filtrés depuis un total de _MAX_ éléments)",
        datetime: {
          previous: "Précédent",
          next: "Suivant",
          hours: "Heures",
          minutes: "Minutes",
          seconds: "Secondes",
          unknown: "-",
          amPm: ["am", "pm"],
          months: {
            0: "Janvier",
            2: "Mars",
            3: "Avril",
            4: "Mai",
            5: "Juin",
            6: "Juillet",
            7: "Aout",
            8: "Septembre",
            9: "Octobre",
            10: "Novembre",
            1: "Février",
            11: "Décembre",
          },
          weekdays: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"],
        },
        editor: {
          close: "Fermer",
          create: {
            title: "Créer une nouvelle entrée",
            submit: "Envoyer",
            button: "Nouveau",
          },
          edit: {
            button: "Editer",
            title: "Editer Entrée",
            submit: "Modifier",
          },
          remove: {
            button: "Supprimer",
            title: "Supprimer",
            submit: "Supprimer",
            confirm: {
              _: "Êtes-vous sûr de vouloir supprimer %d lignes ?",
              1: "Êtes-vous sûr de vouloir supprimer 1 ligne ?",
            },
          },
          error: {
            system: "Une erreur système s'est produite",
          },
          multi: {
            noMulti:
              "Ce champ peut être édité individuellement, mais ne fait pas partie d'un groupe. ",
            info: "Les éléments sélectionnés contiennent différentes valeurs pour ce champ. Pour  modifier et ",
            title: "Valeurs multiples",
            restore: "Rétablir modification",
          },
        },
      },
    });

    // DOM positioning
    $(".datatable-dom-position").DataTable({
      dom: '<"datatable-header length-left"lp><"datatable-scroll"t><"datatable-footer info-right"fi>',
    });

    // Highlighting rows and columns on mouseover
    var lastIdx = null;
    var table = $(".datatable-highlight").DataTable();

    $(".datatable-highlight tbody")
      .on("mouseover", "td", function () {
        var colIdx = table.cell(this).index().column;

        if (colIdx !== lastIdx) {
          $(table.cells().nodes()).removeClass("active");
          $(table.column(colIdx).nodes()).addClass("active");
        }
      })
      .on("mouseleave", function () {
        $(table.cells().nodes()).removeClass("active");
      });

    // Columns rendering
    $(".datatable-columns").dataTable({
      columnDefs: [
        {
          // The `data` parameter refers to the data for the cell (defined by the
          // `data` option, which defaults to the column being worked with, in
          // this case `data: 0`.
          render: function (data, type, row) {
            return data + " (" + row[3] + ")";
          },
          targets: 0,
        },
        { visible: false, targets: [3] },
      ],
    });
  };

  //
  // Return objects assigned to module
  //

  return {
    init: function () {
      _componentDatatableAdvanced();
    },
  };
})();

// Initialize module
// ------------------------------

document.addEventListener("DOMContentLoaded", function () {
  DatatableAdvanced.init();
});
