templates/partials/_footer-js.html.twig line 1

Open in your IDE?
  1. {% block javascripts %}
  2.   <script src="{{ asset('assets/js/jquery-3.6.3.min.js') }}" crossorigin="anonymous"></script>
  3.   <script src="{{ asset('assets/js/jquery-ui.js') }}"></script>
  4.   <script src="{{ asset('assets/js/bootstrap.bundle.min.js') }}"></script>
  5.   <script src="{{ asset('assets/js/aos.js') }}"></script>
  6.   <script src="{{ asset('assets/js/jquery-animated-headline.min.js') }}"></script>
  7.   <script src="{{ asset('assets/js/slick.min.js') }}?v=1"></script>
  8.   <script src="{{ asset('assets/js/scripts.js') }}?v=8"></script>
  9.   {% if captcha_enabled %}
  10.     <script src="https://www.google.com/recaptcha/api.js?hl=fr" async="" defer=""></script>
  11.   {% endif %}
  12.   <script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
  13.   <script type="text/javascript">
  14.   function googleTranslateElementInit() {
  15.       new google.translate.TranslateElement({pageLanguage: 'fr'}, 'google_translate_element');
  16.   }
  17.   </script>
  18.   <script type="text/javascript">
  19.     document.addEventListener("DOMContentLoaded", function () {
  20.       const buttons = document.querySelectorAll(".floating");
  21.       buttons.forEach((btn) => {
  22.           let collapseTimeout;
  23.           // Sau 4s thì tự collapsed
  24.           setTimeout(() => {
  25.               btn.classList.add("collapsed");
  26.           }, 4000);
  27.           btn.addEventListener("mouseenter", () => {
  28.               btn.classList.remove("collapsed");
  29.               clearTimeout(collapseTimeout);
  30.           });
  31.           btn.addEventListener("mouseleave", () => {
  32.               collapseTimeout = setTimeout(() => {
  33.                   btn.classList.add("collapsed");
  34.               }, 4000);
  35.           });
  36.           btn.addEventListener("click", () => {
  37.               const targetUrl = btn.dataset.url;
  38.               if (targetUrl) {
  39.                   // Mở tab mới ngay lập tức để tránh bị chặn
  40.                   const newWin = window.open("", "_blank");
  41.                   if (window.innerWidth <= 991) {
  42.                       btn.classList.remove("collapsed");
  43.                       // Sau 1s mới chuyển URL trong tab mới
  44.                       setTimeout(() => {
  45.                           newWin.location.href = targetUrl;
  46.                       }, 1000);
  47.                   } else {
  48.                       // Desktop: chuyển ngay
  49.                       newWin.location.href = targetUrl;
  50.                   }
  51.               }
  52.           });
  53.       });
  54.     });
  55.     // set cookie
  56.     $(document).ready(function () {
  57.         if (!document.cookie.includes("Estiam France")) {
  58.           $('.cookie-consent-banner').fadeIn();
  59.         }
  60.         $('.cookie-consent-banner').on('click', '.cookie-action', function () {
  61.           let $this = $(this);
  62.           let $cookie_consent = $this.closest('.cookie-consent-banner');
  63.           let action = $this.attr('data-action');
  64.           console.log('cookie action ', action);
  65.           $cookie_consent.fadeOut();
  66.           switch (action) {
  67.             case 'accept':
  68.               document.cookie = "cookieBy= Estiam France; max-age=" + 60 * 60 * 24 * 365;
  69.               break;
  70.             case 'refuse':
  71.             default:
  72.               document.cookie = "cookieBy= Estiam France; max-age=" + 60 * 60 * 24 * 30;
  73.               break;
  74.           }
  75.         });
  76.     });
  77.     // Login form
  78.     $('#login-form').on('submit', function (event) {
  79.         event.preventDefault();
  80.         let data = $(this).serialize();
  81.         let $button = $(this).find('#btn-login');
  82.         $button.prepend('<i class="fas fa-spinner fa-pulse mr-1"></i>');
  83.         $button.prop('disabled', true);
  84.         $.ajax({
  85.           url: "{{ path('user.login') }}",
  86.           type: "POST",
  87.           dataType: 'json',
  88.           data : data,
  89.           success: function(res) {
  90.             if(res.success){
  91.               $('#signinModal .user-error').hide();
  92.               window.location.href = res.target_url;
  93.             }else{
  94.               $('#signinModal .user-error').show();
  95.             }
  96.           }
  97.         }).always(function () {
  98.           $button.find('.fa-pulse').remove();
  99.           $button.prop('disabled', false);
  100.         });
  101.     });
  102.     // Forgot password
  103.     $('.btn-forgot').click(function (){
  104.       if($('#forgotPasswordModal #field-email').val() == '') return;
  105.       $('.valid-email-forgot').hide();
  106.       let $button = $('#forgotPasswordModal').find('.btn-forgot');
  107.       $button.prepend('<i class="fas fa-spinner fa-pulse mr-1"></i>');
  108.       $button.prop('disabled', true);
  109.       var emailReset = $('#forgotPasswordModal').find('#field-email').val();
  110.       $.ajax({
  111.         url: "{{ path('user.request_reset_password') }}",
  112.         type: "POST",
  113.         dataType: 'json',
  114.         data : {email: $('#forgotPasswordModal').find('#field-email').val()},
  115.         success: function(res) {
  116.           if(res.status == 'failed'){
  117.             $('.valid-email-forgot').show();
  118.           }
  119.           else{
  120.             $('.append-email').text(emailReset);
  121.             $('.sent-email-forgot').show();
  122.             $('.hide-success').hide();
  123.           }
  124.         }
  125.       }).always(function () {
  126.         $button.find('.fa-pulse').remove();
  127.         $button.prop('disabled', false);
  128.       });
  129.     });
  130.     function checkFile(inputFile) {
  131.       if (inputFile[0].files[0].name.match(/.(pdf|docx|doc|png|jpg)$/i)) {
  132.         var size = parseInt(inputFile[0].files[0].size) / 1024;
  133.         if (size > 110485760) {
  134.           return "{% trans %}Grande taille de fichier. Vous pouvez télécharger un maximum de 5 Mo{% endtrans %}";
  135.         }
  136.       } else {
  137.         return "{% trans %}Type de fichier invalide. Vous ne pouvez télécharger que des fichiers PDF/Word{% endtrans %}";
  138.       }
  139.     }
  140.     function DataURIToBlob(dataURI) {
  141.       const splitDataURI = dataURI.split(',')
  142.       const byteString = splitDataURI[0].indexOf('base64') >= 0 ? atob(splitDataURI[1]) : decodeURI(splitDataURI[1])
  143.       const mimeString = splitDataURI[0].split(':')[1].split(';')[0]
  144.       const ia = new Uint8Array(byteString.length)
  145.       for (let i = 0; i < byteString.length; i++)
  146.         ia[i] = byteString.charCodeAt(i)
  147.       return new Blob([ia], { type: mimeString })
  148.     }
  149.     function showMessage(text) {
  150.       $('.notification-error').text(text).show();
  151.       handleNotification($('.notification-error'));
  152.       removeLoadButton($('#btn-submit'));
  153.     }
  154.     function handleNotification(element) {
  155.       setTimeout(function () {
  156.         element.fadeOut();
  157.       }, 3000);
  158.     }
  159.     function loadButton(element) {
  160.       element.find('i').removeClass('far fa-arrow-right');
  161.       element.find('i').addClass('fas fa-spinner fa-pulse ml-1');
  162.       element.prop('disabled', true);
  163.     }
  164.     function removeLoadButton(element) {
  165.       element.find('i').removeClass('fas fa-spinner fa-pulse ml-1');
  166.       element.find('i').addClass('far fa-arrow-right');
  167.       element.prop('disabled', false);
  168.     }
  169.     function isChecked(element){
  170.       if($(element).find('input:checkbox:checked').length > 0){
  171.         return 0;
  172.       }
  173.       return 1;
  174.     }
  175.     function requiredFile(element){
  176.       let error = 0;
  177.      
  178.       if(!$(`#${element}`).val()){
  179.         $(`.${element}`).addClass('text-red');
  180.         error = 1;
  181.         removeLoadButton($('#btn-submit'));
  182.       }
  183.       if(!error){
  184.         $(`.${element}`).removeClass('text-red');
  185.       }
  186.       return error;
  187.     }
  188.   </script>
  189. {% endblock %}