templates/layout.html.twig line 1

Open in your IDE?
  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <title>{% block title %}{% endblock %} | Espace Pro Outback Import</title>
  5.         {% include 'head.html.twig' %}
  6.         <script src="{{ asset('js_ep/jquery.min.js') }}"></script>
  7.         <link href="/bootstrap/bower_components/datatables-responsive/css/dataTables.responsive.css" rel="stylesheet">
  8.         <link href="/bootstrap/bower_components/datatables-responsive/css/dataTables.responsive.css" rel="stylesheet">
  9.         <script src="/js/datatable/jquery.dataTables.min.js"></script>
  10.         <script src="/js/datatable/dataTables.bootstrap.min.js"></script>
  11.         <script src="/js/datatable/dataTables.buttons.min.js"></script>
  12.         <script src="/js/datatable/buttons.flash.min.js"></script>
  13.         <script src="/js/datatable/jszip.min.js"></script>
  14.         <script src="/js/datatable/pdfmake.min.js"></script>
  15.         <script src="/js/datatable/vfs_fonts.js"></script>
  16.         <script src="/js/datatable/buttons.html5.min.js"></script>
  17.         <script src="/js/datatable/buttons.print.min.js"></script>
  18.         <script src="{{ asset('js_ep/bootstrap.bundle.min.js') }}"></script>
  19.         <!-- FastClick -->
  20.         <script src="{{ asset('js_ep/fastclick.js') }}"></script>
  21.         <!-- NProgress -->
  22.         <script src="{{ asset('js_ep/nprogress.js') }}"></script>
  23.         <!-- Chart.js -->
  24.         <script src="{{ asset('js_ep/Chart.min.js') }}"></script>
  25.         <!-- gauge.js -->
  26.         <script src="{{ asset('js_ep/gauge.min.js') }}"></script>
  27.         <!-- bootstrap-progressbar -->
  28.         <script src="{{ asset('js_ep/bootstrap-progressbar.min.js') }}"></script>
  29.         <!-- iCheck -->
  30.         <script src="{{ asset('js_ep/icheck.min.js') }}"></script>
  31.         <!-- Skycons -->
  32.         <script src="{{ asset('js_ep/skycons.js') }}"></script>
  33.         <!-- Flot -->
  34.         <script src="{{ asset('js_ep/jquery.flot.js') }}"></script>
  35.         <script src="{{ asset('js_ep/jquery.flot.pie.js') }}"></script>
  36.         <script src="{{ asset('js_ep/jquery.flot.time.js') }}"></script>
  37.         <script src="{{ asset('js_ep/jquery.flot.stack.js') }}"></script>
  38.         <script src="{{ asset('js_ep/jquery.flot.resize.js') }}"></script>
  39.         <!-- Flot plugins -->
  40.         <script src="{{ asset('js_ep/jquery.flot.orderBars.js') }}"></script>
  41.         <script src="{{ asset('js_ep/jquery.flot.spline.min.js') }}"></script>
  42.         <script src="{{ asset('js_ep/curvedLines.js') }}"></script>
  43.         <!-- DateJS -->
  44.         <script src="{{ asset('js_ep/date.js') }}"></script>
  45.         <!-- JQVMap -->
  46.         <script src="{{ asset('js_ep/jquery.vmap.js') }}"></script>
  47.         <script src="{{ asset('js_ep/jquery.vmap.world.js') }}"></script>
  48.         <script src="{{ asset('js_ep/jquery.vmap.sampledata.js') }}"></script>
  49.         <!-- bootstrap-daterangepicker -->
  50.         <script src="{{ asset('js_ep/moment.min.js') }}"></script>
  51.         <script src="{{ asset('js_ep/daterangepicker.js') }}"></script>
  52.         <!-- Switchery -->
  53.         <script src="{{ asset('js_ep/switchery.min.js') }}"></script>
  54.         <script src="{{ asset('js_ep/swiper-bundle.min.js') }}"></script>
  55.         <script src="{{ asset('bundles/fosjsrouting/js/router.min.js') }}"></script>
  56.         <script type="text/javascript">
  57.             const routes = {{ source('@var_directory/fosjsrouter/fos_js_routes.json') }};
  58.             Routing.setRoutingData(routes);
  59.         </script>
  60.         <script src="{{ asset('js_ep/select2.min.js') }}"></script>
  61.         {# <link href="/dev.css" rel="stylesheet">#}
  62.     </head>
  63.     <body class="nav-md page-index invisible-scrollbar ">
  64.         {#% set current_path = path(app.request.get('_route')) %#}
  65.         {% set current_path = app.request.attributes.get('_route') %}
  66.         <div class="container body">
  67.             <div class="main_container">
  68.             {% if current_path != "login" and current_path != "reset_password" %}
  69.                 {% include 'FO/FO/menu.html.twig' %}
  70.             {% endif %}
  71.             {% block body %}
  72.             {% endblock %}
  73.                 {% if current_path != "login" and current_path != "reset_password"  %}
  74.                 <!-- footer content -->
  75.                 <footer>
  76.                     <div class="pull-right">
  77.                         Outback Import - <i class="fa fa-copyright"></i> 2025 - Tous droits réservés
  78.                     </div>
  79.                     <div class="clearfix"></div>
  80.                 </footer>
  81.                 <!-- /footer content -->
  82.                 {% endif %}
  83.             </div>
  84.         </div>
  85.         <div>
  86.             {% block fos_user_content %}
  87.             {% endblock fos_user_content %}
  88.         </div>
  89.         {#
  90.         <div class="modal" tabindex="-1" id="blocModal">
  91.             <div class="modal-dialog" {% block modalWidth %}{% endblock %}>
  92.                 <div class="modal-content">
  93.                     <div class="modal-header">
  94.                         <h5 class="modal-title">Modal title</h5>
  95.                         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  96.                             <span aria-hidden="true">&times;</span>
  97.                         </button>
  98.                     </div>
  99.                     <div class="modal-body">
  100.                         <p>Modal body text goes here.</p>
  101.                     </div>
  102.                     <div class="modal-footer">
  103.                         <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
  104.                         <button type="button" class="btn btn-primary">Save changes</button>
  105.                     </div>
  106.                 </div>
  107.             </div>
  108.         </div>
  109.         #}
  110.         <!-- Modal -->
  111.         <div class="modal _fade" id="searchModal"  role="dialog" aria-labelledby="searchModal" aria-hidden="true" data-backdrop="static" data-keyboard="false">
  112.             <div class="modal-dialog">
  113.                 <div class="modal-content _table-responsive">
  114.                     <div class="modal-header" style="background-color: whitesmoke;">
  115.                         <h5 id="modal-titre-search" class="modal-title">Recherche</h5>
  116.                         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  117.                             <span aria-hidden="true">×</span>
  118.                         </button>
  119.                     </div>
  120.                     <div id="conteneur-modal-search">
  121.                         <div class="modal-body">
  122.                             <div id="searchAccordion">
  123.                                 <!-- Recherche simple -->
  124.                                 <div>
  125.                                     <button class="dark btn btn-link btn-block text-left d-flex justify-content-between align-items-center p-0"
  126.                                             data-toggle="collapse" data-target="#collapseSimple" aria-expanded="false" aria-controls="collapseSimple">
  127.                                         <span><i class="fa fa-search mr-2"></i>Recherche rapide</span>
  128.                                         <i class="fa fa-chevron-right"></i>
  129.                                     </button>
  130.                                     <div id="collapseSimple" class="collapse" data-parent="#searchAccordion">
  131.                                         <div class="mt-2">
  132.                                             <div id="dtc_article_recherche_top_mobile_select2_conteneur" style="padding-top:5px;">
  133.                                                 <select style="width:100%;" id="dtc_article_recherche_top_mobile_select2"></select>
  134.                                             </div>
  135.                                         </div>
  136.                                     </div>
  137.                                 </div>
  138.                                 <script>
  139.                                     $(document).ready(function(){
  140.                                         $('#collapseSimple').on('shown.bs.collapse', function () {
  141.                                             $selectMobileArticleRechercheTop.select2('open');
  142.                                         });
  143.                                         $selectMobileArticleRechercheTop = $("#dtc_article_recherche_top_mobile_select2").select2({
  144.                                             ajax: {
  145.                                                 url: Routing.generate('dtc_article_recherche'),
  146.                                                 dataType: 'json',
  147.                                                 delay: 250,
  148.                                                 data: function (params) { return {  q: params.term,page: params.page}; },
  149.                                                 processResults: function (data, params) {
  150.                                                     params.page = params.page || 1;
  151.                                                     return {  results: data.items,  pagination: { more: (params.page * 10) < data.total_count }};},
  152.                                                 cache: true
  153.                                             },
  154.                                             escapeMarkup: function (markup) { return markup; },minimumInputLength: 0,
  155.                                             templateResult:formatRepoSelect2RechercheTop,
  156.                                             templateSelection: formatRepoSelect2RechercheTopSelection,
  157.                                             minimumInputLength: 3,
  158.                                             placeholder: 'Rechercher un produit, une référence.',
  159.                                             language: {
  160.                                                 inputTooShort: function(args) {
  161.                                                     var remainingChars = args.minimum - args.input.length;
  162.                                                     return 'Merci de saisir au moins ' + args.minimum + ' caractères';
  163.                                                 },
  164.                                                 searching: function() {
  165.                                                     return "Recherche en cours…"; // ton texte personnalisé
  166.                                                 },
  167.                                                 noResults: function() {
  168.                                                     return "Aucun résultat trouvé";
  169.                                                 },
  170.                                                 errorLoading: function () {
  171.                                                     return "Les résultats n'ont pas pu être chargés.";
  172.                                                 }
  173.                                             },
  174.                                         });
  175.                                         var isEnterKey = false;
  176.                                         var url_fiche_produit_select2 = "";
  177.                                         $('#dtc_article_recherche_top_mobile_select2').on('select2:open', function(e) {
  178.                                             // On récupère l'input de recherche interne du dropdown
  179.                                             let searchField = $('.select2-container--open .select2-search__field');
  180.                                             // On retire tout ancien handler keydown pour éviter les doublons
  181.                                             searchField.off('keydown').on('keydown', function(e) {
  182.                                                 if (e.key === "Enter" || e.keyCode === 13) {
  183.                                                     e.preventDefault(); // empêche la sélection par défaut
  184.                                                     isEnterKey = true;
  185.                                                     let userInput = $(this).val();
  186.                                                     if (url_fiche_produit_select2 === "") {
  187.                                                         var url = Routing.generate('dtc_article_liste', {mc: userInput});
  188.                                                         window.location.href = url;
  189.                                                         e.stopImmediatePropagation();
  190.                                                     }
  191.                                                     return false;
  192.                                                 }
  193.                                             });
  194.                                         });
  195.                                         $("#dtc_article_recherche_top_mobile_select2").on('change', function(e) {
  196.                                             if (isEnterKey) {
  197.                                             } else {
  198.                                                 var valeur = $(this).val();
  199.                                                 var url = Routing.generate('dtc_article_afficher', {id: valeur});
  200.                                                 url_fiche_produit_select2 = url;
  201.                                                 window.location.href = url;
  202.                                                 e.stopImmediatePropagation();
  203.                                                 return false;
  204.                                             }
  205.                                             isEnterKey = false;
  206.                                         });
  207.                                     });
  208.                                 </script>
  209.                                 <script src="{{ asset('js_ep/moteur_recherche_article_mobile.js') }}"></script>
  210.                                 <script>
  211.                                     $(document).ready(function(){
  212.                                         {% if parametres.mv is defined and parametres.mv != "" and parametres.mv != "0"  %}
  213.                                         var initialData = { id: {{parametres.mv}}, text: "{{parametres.mv_l}}", libelle: "{{parametres.mv_l}}" };
  214.                                         {% else %}
  215.                                         var initialData = { id: 0, text: "Marque", text: "Marque" };
  216.                                         {% endif %}
  217.                                         var option = new Option(initialData.text, initialData.id, true, true);
  218.                                         $selectMobileMarqueVehicule.append(option).trigger('change');
  219.                                         {% if parametres.mov is defined and parametres.mov != "" and parametres.mov != "0"  %}
  220.                                         var initialData = { id: {{parametres.mov}}, text: "{{parametres.mov_l}}" };
  221.                                         {% else %}
  222.                                         var initialData = { id: 0, text: "Modèle"};
  223.                                         {% endif %}
  224.                                         var option = new Option(initialData.text, initialData.id, true, true);
  225.                                         $selectMobileModeleVehicule.append(option).trigger('change');
  226.                                         {% if parametres.tv is defined and parametres.tv != "" and parametres.tv != "0" %}
  227.                                         var initialData = { id: {{parametres.tv}}, text: "{{parametres.tv_l}}" };
  228.                                         {% else %}
  229.                                         var initialData = { id: 0, text: "Type"};
  230.                                         {% endif %}
  231.                                         var option = new Option(initialData.text, initialData.id, true, true);
  232.                                         $selectMobileTypeVehicule.append(option).trigger('change');
  233.                                         {% if parametres.m is defined and parametres.m != "" and parametres.m != "0" %}
  234.                                         var initialData = { id: {{parametres.m}}, text: "{{parametres.m_l}}" };
  235.                                         {% else %}
  236.                                         var initialData = { id: 0, text: "Marque" };
  237.                                         {% endif %}
  238.                                         var option = new Option(initialData.text, initialData.id, true, true);
  239.                                         $selectMobileMarqueArticle.append(option).trigger('change');
  240.                                         {% if parametres.c is defined and parametres.c != "" and parametres.c != "0" %}
  241.                                         var initialData = { id: {{parametres.c}},  text: "{{parametres.c_l}}" };
  242.                                         {% else %}
  243.                                         var initialData = { id: 0, text: "Catégorie" };
  244.                                         {% endif %}
  245.                                         var option = new Option(initialData.text, initialData.id, true, true);
  246.                                         $selectMobileCategorieArticle.append(option).trigger('change');
  247.                                         {% if parametres.cn2 is defined and parametres.cn2 != "" and parametres.cn2 != "0" %}
  248.                                         var initialData = { id: {{parametres.cn2}}, text: "{{parametres.cn2_l}}" };
  249.                                         {% else %}
  250.                                         var initialData = { id: 0, text: "Catégorie N2" };
  251.                                         {% endif %}
  252.                                         var option = new Option(initialData.text, initialData.id, true, true);
  253.                                         $selectMobileCategorieArticleN2.append(option).trigger('change');
  254.                                         {% if parametres.cn3 is defined and parametres.cn3 != "" and parametres.cn3 != "0" %}
  255.                                         var initialData = { id: {{parametres.cn3}}, text: "{{parametres.cn3_l}}" };
  256.                                         {% else %}
  257.                                         var initialData = { id: 0, text: "Catégorie N3" };
  258.                                         {% endif %}
  259.                                         var option = new Option(initialData.text, initialData.id, true, true);
  260.                                         $selectMobileCategorieArticleN3.append(option).trigger('change');
  261.                                     });
  262.                                 </script>
  263.                                 <!-- Recherche avancée -->
  264.                                 <div class="mt-3">
  265.                                     <button class="dark btn btn-link btn-block text-left d-flex justify-content-between align-items-center p-0"
  266.                                             data-toggle="collapse" data-target="#collapseAdvanced" aria-expanded="false" aria-controls="collapseAdvanced">
  267.                                         <span><i class="fa fa-search-plus mr-2"></i>Recherche avancée</span>
  268.                                         <i class="fa fa-chevron-right"></i>
  269.                                     </button>
  270.                                     <div id="collapseAdvanced" class="collapse" data-parent="#searchAccordion">
  271.                                         <div class="recherche_catalogue _mt-2">
  272.                                             <form id="searchForm" method="GET" action="/catalogue" style="padding-bottom:20px;">
  273.                                                 <div class="form-container">
  274.                                                     <!-- Colonne gauche -->
  275.                                                     <div class="form-column">
  276.                                                         <div class="_off column-title"><i class="fa fa-car"></i> Véhicule</div>
  277.                                                         <div class="form-group">
  278.                                                             {# <label for="marque">Marque</label> #}
  279.                                                             <input type="hidden" id="mv_l" name="mv_l" value="{% if parametres.mv_l is defined and parametres.mv_l != ""  %}{{ parametres.mv_l }}{% endif %}">
  280.                                                             <select id="dtc_marque_vehicule_select2_mobile" class="form-control" name="mv"></select>
  281.                                                         </div>
  282.                                                         <div class="form-group">
  283.                                                             {# <label for="modele">Modèle</label> #}
  284.                                                             <input type="hidden" id="mov_l" name="mov_l" value="{% if parametres.mv_l is defined and parametres.mv_l != ""  %}{{ parametres.mv_l }}{% endif %}">
  285.                                                             <select class="form-control" id="dtc_modele_vehicule_select2_mobile" name="mov"></select>
  286.                                                         </div>
  287.                                                         <div class="form-group">
  288.                                                             {#  <label for="type">Type</label> #}
  289.                                                             <input type="hidden" id="tv_l" name="tv_l" value="{% if parametres.tv_l is defined and parametres.tv_l != ""  %}{{ parametres.tv_l }}{% endif %}">
  290.                                                             <select class="form-control" id="dtc_type_vehicule_select2_mobile" name="tv"></select>
  291.                                                         </div>
  292.                                                         <!-- Boutons centrés sous la barre -->
  293.                                                         <div class="btn-recherche-catalogue-default btn-container">
  294.                                                             <button style="width:100%;" type="submit" class="btn btn-success"><i class="fa fa-search"></i> Lancer la recherche </button>
  295.                                                         </div>
  296.                                                     </div>
  297.                                                     <!-- Colonne droite -->
  298.                                                     <div class="form-column">
  299.                                                         <div class="_off column-title"><i class="fa fa-bars"></i> Catégories</div>
  300.                                                         <div class="form-group">
  301.                                                             <input type="hidden" id="c_l" name="c_l" value="{% if parametres.c_l is defined and parametres.c_l != ""  %}{{ parametres.c_l }}{% endif %}">
  302.                                                             <select class="form-control" id="dtc_categorie_article_n1_select2_mobile" name="c"></select>
  303.                                                         </div>
  304.                                                         <div class="form-group">
  305.                                                             <input type="hidden" id="cn2_l" name="cn2_l" value="{% if parametres.cn2_l is defined and parametres.cn2_l != ""  %}{{ parametres.cn2_l }}{% endif %}">
  306.                                                             <select class="form-control" id="dtc_categorie_article_n2_select2_mobile" name="cn2"></select>
  307.                                                         </div>
  308.                                                         <div class="form-group">
  309.                                                             <input type="hidden" id="cn3_l" name="cn3_l" value="{% if parametres.cn3_l is defined and parametres.cn3_l != ""  %}{{ parametres.cn3_l }}{% endif %}">
  310.                                                             <select class="form-control" id="dtc_categorie_article_n3_select2_mobile" name="cn3"></select>
  311.                                                         </div>
  312.                                                         <div class="form-group">
  313.                                                             <div class="_off column-title"><i class="fa fa-star"></i> Marque</div>
  314.                                                             <input type="hidden" id="m_l" name="m_l" value="{% if parametres.m_l is defined and parametres.m_l != ""  %}{{ parametres.m_l }}{% endif %}">
  315.                                                             <select class="form-control" id="dtc_marque_article_select2_mobile" name="m"></select>
  316.                                                         </div>
  317.                                                         <div class="form-group">
  318.                                                             <div class="_off column-title"><i class="fa fa-search"></i> Recherche</div>
  319.                                                             <input type="text" class="form-control" name="mc" placeholder="Entrez un mot clé">
  320.                                                         </div>
  321.                                                         <div class="form-group " style="margin-bottom:5px;">
  322.                                                             <div class="_off column-title"><i class="fa fa-cubes"></i> Stock</div>
  323.                                                             <div class="pl-0 col-md-12 col-sm-12">
  324.                                                                 <label>
  325.                                                                     <input type="checkbox" name="st" value="1" class="js-switch" /> En stock uniquement
  326.                                                                 </label>
  327.                                                             </div>
  328.                                                         </div>
  329.                                                         <div class="btn-recherche-catalogue-reponsive btn-container">
  330.                                                             <button style="width:100%;" type="submit" class="btn btn-success"><i class="fa fa-search"></i> Lancer la recherche </button>
  331.                                                         </div>
  332.                                                     </div>
  333.                                                 </div>
  334.                                             </form>
  335.                                         </div>
  336.                                     </div>
  337.                                 </div>
  338.                             </div>
  339.                         </div>
  340.                         <style>
  341.                             #searchAccordion button.btn-link {
  342.                                 text-decoration: none;
  343.                                 color: inherit; /* couleur par défaut */
  344.                             }
  345.                             #searchAccordion button.btn-link:hover {
  346.                                 text-decoration: none; /* pas de soulignure */
  347.                                 color: #34495E;        /* couleur au survol */
  348.                             }
  349.                         </style>
  350.                         <script>
  351.                             // Animation icône flèche
  352.                             $('#searchAccordion .collapse').on('show.bs.collapse', function () {
  353.                                 $(this).siblings('button').find('i.fa-chevron-right').removeClass('fa-chevron-right').addClass('fa-chevron-down');
  354.                             }).on('hide.bs.collapse', function () {
  355.                                 $(this).siblings('button').find('i.fa-chevron-down').removeClass('fa-chevron-down').addClass('fa-chevron-right');
  356.                             });
  357.                         </script>
  358.                         <div class="modal-footer">
  359.                             <button type="button" class="btn btn-light" data-dismiss="modal">Fermer</button>
  360.                         </div>
  361.                     </div>
  362.                 </div>
  363.                 <!-- /.modal-content -->
  364.             </div>
  365.             <!-- /.modal-dialog -->
  366.         </div>
  367.         <!-- /.modal -->
  368.         <!-- Modal -->
  369.         <div class="modal _fade" id="blocModal"  role="dialog" aria-labelledby="ModalLabel" aria-hidden="true" data-backdrop="static" data-keyboard="false">
  370.             <div class="modal-dialog" {% block modalWidth %}{% endblock %}>
  371.                 <div class="modal-content _table-responsive">
  372.                     <form novalidate data-async method="POST" data-target="#conteneur-modal" action="" class="formModal" id="formulaire-modal">
  373.                         <div class="modal-header">
  374.                             <h5 id="modal-titre" class="modal-title" id="ModalLabel">{% trans %}En attente{% endtrans %}</h5>
  375.                             <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  376.                                 <span aria-hidden="true">&times;</span>
  377.                             </button>
  378.                         </div>
  379.                         <div id="conteneur-modal">
  380.                         </div>
  381.                     </form>
  382.                 </div>
  383.                 <!-- /.modal-content -->
  384.             </div>
  385.             <!-- /.modal-dialog -->
  386.         </div>
  387.         <!-- /.modal -->
  388.     <!-- /#wrapper -->
  389.     {% block javascripts %}{% endblock %}
  390.     <script src="{{ asset('js_ep/custom.js') }}"></script>
  391.     <script>
  392.         $(function() {
  393.             $('body').on('click', '.open-modal-form', function (event) {
  394.                 $('#modal-titre').html("Chargement <img style='width:20px;' src='/images/balle.gif'><img style='width:20px;' src='/images/balle.gif'><img style='width:20px;' src='/images/balle.gif'>");
  395.                 event.preventDefault();
  396.                 var $a = $(this);
  397.                 var link = $a.attr('data-link');
  398.                 var idFormulaire = $a.attr('data-idFormulaire');
  399.                 var $a = $(this);
  400.                 var $target = $($a.attr('data-target'));
  401.                 var $width = $a.attr('data-width');
  402.                 var $tailleModal = $a.attr('data-taille');
  403.                 //console.log($width);
  404.                 if ($(window).width() < $width) $width = $(window).width() - 25;
  405.                 if ($.isNumeric($width)) {
  406.                     $('.modal-dialog').css('width', $width + 'px');
  407.                     $('.modal-dialog').css('max-width', $width + 'px');
  408.                     $('.modal-dialog').width($width);
  409.                 } else {
  410.                    // $('.modal-dialog').css('width', '600px');
  411.                    // $('.modal-dialog').css('max-width', '600px');
  412.                 }
  413.                 $.ajax({
  414.                     type: 'GET',
  415.                     url: link,
  416.                     dataType: "json",
  417.                     success: function (data, status) {
  418.                         if (typeof (data.width) != 'undefined') $('.modal-dialog').width(data.width);
  419.                         $('.modal-dialog').removeClass("modal-sm");
  420.                         $('.modal-dialog').removeClass("modal-lg");
  421.                         $('.modal-dialog').removeClass("modal-xl");
  422.                         if($tailleModal != "") {
  423.                             $('.modal-dialog').addClass($tailleModal);
  424.                         }
  425.                         $('#modal-titre').html(data.titre);
  426.                         $('#modal-titre').parent(".modal-header").css("backgroundColor", "whitesmoke");
  427.                         $('#conteneur-modal').html(data.rendu);
  428.                         var form = $('#conteneur-modal').parent('form');
  429.                         form.attr("action", link);
  430.                         form.attr("id", idFormulaire);
  431.                         $('#modal-titre').html(data.titre);
  432.                         $('#blocModal').modal('show');
  433.                         if (data.link !== undefined) {
  434.                             //alert("baba");
  435.                             form.attr("action", data.link);
  436.                         }
  437.                         for (var i = 0, l = document.getElementsByTagName('input').length; i < l; i++) {
  438.                             if (document.getElementsByTagName('input').item(i).type == 'text' || document.getElementsByTagName('input').item(i).type == 'email' || document.getElementsByTagName('input').item(i).type == 'number') {
  439.                                 document.getElementsByTagName('input').item(i).setAttribute('autocomplete', 'off');
  440.                             }
  441.                             ;
  442.                         }
  443.                         ;
  444.                         var isMobile = false;
  445.                         if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)
  446.                             || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0, 4))) {
  447.                             isMobile = true;
  448.                         }
  449.                         if (isMobile) {
  450.                         } else {
  451.                             $('#conteneur-modal :input:first').focus();
  452.                         }
  453.                         //onglet_p
  454.                     }
  455.                 });
  456.                 if (!$(this).hasClass("divers")) {
  457.                     event.stopImmediatePropagation();
  458.                 }
  459.             });
  460.             function callBackEditAdresse(data) {
  461.                 $('#blocModal').modal('hide');
  462.                 $('#dta-adresses').DataTable().ajax.reload(function () { }, false);
  463.             }
  464.             $('form[data-async]').on('submit', function(e) {
  465.                 //console.log('submit data-async');
  466.                 if($(this).hasClass('submit')){
  467.                     return true;
  468.                 }
  469.                 var $form = $(this);
  470.                 $form.addClass("flou");
  471.                 var $target = $($form.attr('data-target'));
  472.                 try {
  473.                     tinyMCE.triggerSave(true, true);
  474.                 }
  475.                 catch (e) {
  476.                 }
  477.                 var datas = $form.serialize();
  478.                 $.ajax({
  479.                     type: $form.attr('method'),
  480.                     url: $form.attr('action'),
  481.                     data: datas,
  482.                     dataType: "json",
  483.                     success: function(data, status) {
  484.                         setTimeout(function(){ $form.removeClass("flou"); }, 500);
  485.                         if(data.type=="adresse_livraison" || data.type=="adresse_facturation")
  486.                         {
  487.                             //callbackNouvelleAdresseClient(data);
  488.                             return false;
  489.                         }
  490.                         else if(data.type=="callBackEditAdresse") {
  491.                             callBackEditAdresse(data);
  492.                             return false;
  493.                         }
  494.                         else if(data.type=="callbackChangeClient") {
  495.                             $('#blocModal').modal('hide');
  496.                             const client_rattache = document.getElementById("client_rattache");
  497.                             client_rattache.innerHTML = 'CLIENT RATTACHÉ : <b id="">'+data.referenceClient+' - '+data.nomClient+'</b>.';
  498.                             const msg = document.getElementById("contenu_bandeau_admin");
  499.                             msg.classList.remove("pulse"); // reset si animation déjà jouée
  500.                             void msg.offsetWidth;          // hack pour relancer l'animation
  501.                             msg.classList.add("pulse");
  502.                             location.reload();
  503.                         }
  504.                         else if(data.type=="callBackAddAdresse") {
  505.                             //alert("Add adresse");
  506.                         }
  507.                         else if(data.type=="callBackContactProduit") {
  508.                             $("#conteneur-modal").html('<ul style="border-radius:0px;" class="alert  alert-success alert-dismissable"><li>Message envoyée avec succès !</li></ul><div class="text-center"><button style="margin-top:0px;margin-bottom:15px;" type="button" class="btn btn-light" data-dismiss="modal">Fermer</button></div>');
  509.                             return false;
  510.                         }
  511.                         else if(data.valide==1) {
  512.                             var url = window.location.href;
  513.                             var arr = url.split("/");
  514.                             var result = arr[0] + "//" + arr[2]
  515.                             if(window.location.href == result+data.url) {
  516.                                 location.reload();
  517.                             }
  518.                             else {
  519.                                 window.location.href = data.url;
  520.                             }
  521.                         }
  522.                         else {
  523.                             $target.html(data.rendu);
  524.                         }
  525.                     }
  526.                 });
  527.                 e.preventDefault();
  528.                 return false;
  529.             });
  530.         });
  531.     </script>
  532.         <link rel="stylesheet" href="/css_ep/cookieconsent.css">
  533.         <script type="module" src="/js_ep/cookieconsent-config.js"></script>
  534.     </body>
  535. </html>