templates/partials/footer.html.twig line 1

Open in your IDE?
  1. <!-- Start Footer Area -->
  2. <section class="footer-area">
  3.     <div class="container">
  4.         <div class="row">
  5.             <div class="col-lg-6 col-md-12 col-sm-12 ">
  6.                 <div class="single-footer-widget pl-5">
  7.                     <h3>About Us</h3>
  8.                     <p>
  9.                         Boost Your Online Presence with {{ get_env('SITE_NAME') }} <br>
  10.                         {{ get_env('SITE_NAME') }} is your trusted partner for promoting your page or website quickly at highly competitive rates. 
  11.                         We promise swift delivery and top-quality service at great prices!
  12.                     </p>
  13.                 </div>
  14.             </div>
  15.             <div class="col-lg-6 col-md-6 col-sm-6">
  16.                 <div class="single-footer-widget">
  17.                     <h3>Contact Info</h3>
  18.                     
  19.                     <ul class="footer-contact-info">
  20.                         <li>
  21.                             <i class="fa fa-envelope"></i>
  22.                             <span>Do You Have a Question?</span>
  23.                             <a href="{{ path('contact') }}">{{ get_env('CONTACT_EMAIL') }}</a>
  24.                         </li>
  25.                         <li>
  26.                             <i class="fa fa-globe"></i>
  27.                             <span>Socials Network</span>
  28.                             <ul class="social">
  29.                                 <li><a href=""><i class="fab fa-facebook"></i></a></li>
  30.                                 <li><a href=""><i class="fab fa-instagram"></i></a></li>
  31.                             </ul>
  32.                         </li>
  33.                     </ul>
  34.                 </div>
  35.             </div>
  36.         </div>
  37.         <div class="copyright-area">
  38.             <div class="row align-items-center">
  39.                 <div class="col-lg-6 col-sm-6 col-md-6">
  40.                     <p>
  41.                         &copy; Copyright 2023. All rights reserved
  42.                     </p>
  43.                 </div>
  44.                 <div class="col-lg-6 col-sm-6 col-md-6">
  45.                     <ul>
  46.                         <li><a routerLink="/">Terms & Conditions</a></li>
  47.                         <li><a routerLink="/">Privacy Policy</a></li>
  48.                     </ul>
  49.                 </div>
  50.             </div>
  51.         </div>
  52.     </div>
  53. </section>
  54. <!-- End Footer Area -->
  55. <div class="custom-social-proof">
  56.     <div class="custom-notification">
  57.         <div class="custom-notification-container">
  58.             {# <div class="custom-notification-image-wrapper">
  59.                 <img src="https://static.cashbacker.com/imgs/blank-avatar.png">
  60.             </div> #}
  61.             <div class="custom-notification-content-wrapper">
  62.                 <p class="custom-notification-content" id="customername">
  63.                     <span id="sp_customername"></span> in <span id="sp_location"></span>
  64.                     <br>
  65.                     <strong><span id="sp_actionname"></span></strong> 
  66.                     <small id="sp_time"></small>
  67.                 </p>
  68.             </div>
  69.         </div>
  70.         <div class="custom-close"></div>
  71.     </div>
  72. </div>
  73. <div class="go-top"><i class="fas fa-chevron-up"></i></div>
  74. <div class="scroll-top">
  75.     <svg class="progress-circle svg-content" width="100%" height="100%" viewBox="-1 -1 102 102">
  76.         <path d="M50,1 a49,49 0 0,1 0,98 a49,49 0 0,1 0,-98"
  77.             style="transition: stroke-dashoffset 10ms linear 0s; stroke-dasharray: 307.919, 307.919; stroke-dashoffset: 307.919;">
  78.         </path>
  79.     </svg>
  80.     <i class="fa fa-arrow-up"></i>
  81. </div>
  82. {% block javascripts %}
  83.     {{ encore_entry_script_tags('app') }}
  84.     {{ encore_entry_script_tags('custom') }}
  85.     <script src="https://code.jquery.com/jquery-3.7.0.min.js" integrity="sha256-2Pmvv0kuTBOenSvLm6bvfBSSHrUJ+3A7x6P5Ebd07/g=" crossorigin="anonymous"></script>
  86.     {#<script type="text/javascript" charset="UTF-8" src="//cdn.cookie-script.com/s/6d2939c2f3b131c795588efad23a8079.js"></script>#}
  87.     <script src="{{ asset('build/js/owl.carousel/dist/owl.carousel.js') }}"></script>
  88.     <script src="https://cdn.jsdelivr.net/gh/philfung/[email protected]/dist/add-to-homescreen.min.js"></script>
  89.     <script src="{{ asset('build/js/cookies/jquery.ihavecookies.js') }}"></script>
  90.     <script>
  91.         var options = {
  92.             title: '&#x1F36A; Accept Cookies & Privacy Policy?',
  93.             message: 'There are no cookies used on this site, but if there were this message could be customised to provide more details. Click the <strong>accept</strong> button below to see the optional callback in action...',
  94.             delay: 600,
  95.             expires: 36500,
  96.             link: '#privacy',
  97.             onAccept: function(){
  98.                 var myPreferences = $.fn.ihavecookies.cookie();
  99.                 console.log('Yay! The following preferences were saved...');
  100.                 console.log(myPreferences);
  101.             },
  102.             uncheckBoxes: true,
  103.             acceptBtnLabel: 'Accept Cookies',
  104.             moreInfoLabel: 'More information',
  105.             cookieTypesTitle: 'Select which cookies you want to accept',
  106.             fixedCookieTypeLabel: 'Essential',
  107.             fixedCookieTypeDesc: 'These are essential for the website to work correctly.'
  108.         }
  109.         $(document).ready(function() {
  110.             $('body').ihavecookies(options);
  111.             if ($.fn.ihavecookies.preference('marketing') === true) {
  112.                 console.log('This should run because marketing is accepted.');
  113.             }
  114.             $('#ihavecookiesBtn').on('click', function(){
  115.                 $('body').ihavecookies(options, 'reinit');
  116.             });
  117.         });
  118.     </script>
  119.     <script>
  120.         var button = document.querySelector('.add-to-btn');
  121.         button.addEventListener('click', (e) => {
  122.             window.AddToHomeScreenInstance = new window.AddToHomeScreen({
  123.                 appName: '{{ get_env('SITE_NAME') }}',                                  
  124.                 appIconUrl: 'https://wizzsocial.com/build/img/logo.png',                   
  125.                 assetUrl: 'https://cdn.jsdelivr.net/gh/philfung/[email protected]/dist/assets/img/', 
  126.                 showErrorMessageForUnsupportedBrowsers: window.AddToHomeScreen.SHOW_ERRMSG_UNSUPPORTED.ALL,
  127.                 allowUserToCloseModal: false,
  128.                 maxModalDisplayCount: -1
  129.             });
  130.             ret = window.AddToHomeScreenInstance.show();            
  131.         });
  132.     </script>
  133.     <script type="text/javascript">
  134.         $(document).ready(function() {
  135.             // Feedback Slides
  136.             $('.offers-slides').owlCarousel({
  137.                 loop: true,
  138.                 nav: true,
  139.                 dots: true,
  140.                 autoplayHoverPause: false,
  141.                 autoplay: false,
  142.                 margin: 15,
  143.                 center: false,
  144.                 navText: [
  145.                     "<i class='flaticon-left-chevron'></i>",
  146.                     "<i class='flaticon-right-chevron'></i>"
  147.                 ],
  148.                 responsive: {
  149.                     0: {
  150.                         items: 1.25,
  151.                         margin: 15,
  152.                         nav: false,
  153.                         dots: false,
  154.                     },
  155.                     768: {
  156.                         items: 1.25,
  157.                         margin: 15,
  158.                     },
  159.                     1200: {
  160.                         items: 4.35,
  161.                     },
  162.                     1550: {
  163.                         items: 4.35,
  164.                     }
  165.                 }
  166.             });
  167.         });
  168.         $(document).click(function(e) {
  169.             
  170.                 var container = $("#navbarSupportedContent");
  171.                 var buttonToggler = $("button[data-bs-target='#navbarSupportedContent']");
  172.                 // if the target of the click isn't the container nor a descendant of the container
  173.                 if (!buttonToggler.is(e.target) && container.has(e.target).length === 0 && container.hasClass("show")) 
  174.                 {
  175.                     buttonToggler.trigger("click");
  176.                 }
  177.         })
  178.         /**
  179.         * Add To home Screen script
  180.         */
  181.         {# if ('serviceWorker' in navigator) {
  182.             window.addEventListener('load', function() {
  183.                 navigator.serviceWorker.register('build/hss/serviceworker.js').then(function(registration) {
  184.                     // Registration was successful
  185.                     console.log('ServiceWorker registration successful with scope: ', registration.scope);
  186.                 }, function(err) {
  187.                     // registration failed :(
  188.                     console.log('ServiceWorker registration failed: ', err);
  189.                 });
  190.             });
  191.         }
  192.         let deferredPrompt;
  193.         var div = document.querySelector('.add-to');
  194.         var button = document.querySelector('.add-to-btn');
  195.         //div.style.display = 'none';
  196.         window.addEventListener('beforeinstallprompt', (e) => {
  197.             // Prevent Chrome 67 and earlier from automatically showing the prompt
  198.             e.preventDefault();
  199.             // Stash the event so it can be triggered later.
  200.             deferredPrompt = e;
  201.             div.style.display = 'block';
  202.             button.addEventListener('click', (e) => {
  203.                 alert("button clicked :: footer.html.twig");
  204.                 // hide our user interface that shows our A2HS button
  205.                 // div.style.display = 'none';
  206.                 // Show the prompt
  207.                 deferredPrompt.prompt();
  208.                 // Wait for the user to respond to the prompt
  209.                 deferredPrompt.userChoice
  210.                     .then((choiceResult) => {
  211.                         if (choiceResult.outcome === 'accepted') {
  212.                             console.log('User accepted the A2HS prompt');
  213.                         } else {
  214.                             console.log('User dismissed the A2HS prompt');
  215.                         }
  216.                         deferredPrompt = null;
  217.                     });
  218.             });
  219.         }); #}
  220.         
  221.     </script>
  222.     <script type="text/javascript">
  223.         /**
  224.         * Get the submit buttons from the given form
  225.         */
  226.         function getSubmitButtons(form) {
  227.             var buttons = form.querySelectorAll('button, input');
  228.             var submitButtons = [];
  229.             for (var i= 0; i < buttons.length; i++) {
  230.                 var button = buttons[i];
  231.                 if (button.getAttribute('type') == 'submit') {
  232.                     submitButtons.push(button);
  233.                 }
  234.             }
  235.             return submitButtons;
  236.         }
  237.         /**
  238.         * Prevent the submit buttons from submitting a form
  239.         * and invoke the challenge for the given widget id
  240.         */
  241.         function bindChallengeToSubmitButtons(form, reCaptchaId) {
  242.             getSubmitButtons(form).forEach(function (button) {
  243.                 button.addEventListener('click', function (e) {
  244.                     e.preventDefault();
  245.                     grecaptcha.execute(reCaptchaId);
  246.                 });
  247.             });
  248.         }
  249.         /**
  250.         * Render a reCAPTCHA from the type
  251.         */
  252.         function renderReCaptcha(widget) {
  253.             var form = widget.closest('form');
  254.             var widgetType = widget.getAttribute('data-type');
  255.             var widgetParameters = {
  256.                 'sitekey': '{{ gg_recaptcha_site_key }}'
  257.             };
  258.             if (widgetType == 'invisible') {
  259.                 widgetParameters['callback'] = function () {
  260.                     form.submit()
  261.                 };
  262.                 widgetParameters['size'] = "invisible";
  263.             }
  264.             var widgetId = grecaptcha.render(widget, widgetParameters);
  265.             if (widgetType == 'invisible') {
  266.                 bindChallengeToSubmitButtons(form, widgetId)
  267.             }
  268.         }
  269.         /**
  270.         * The callback function executed
  271.         * once all the Google dependencies have loaded
  272.         */
  273.         function onGoogleReCaptchaLoad() {
  274.             var widgets = document.querySelectorAll('[data-toggle="recaptcha"]');
  275.             for (var i = 0; i < widgets.length; i++) {
  276.                 renderReCaptcha(widgets[i]);
  277.             }
  278.         }
  279.     </script>
  280.     <script type="text/javascript" src="https://www.google.com/recaptcha/api.js?onload=onGoogleReCaptchaLoad&render=explicit"></script>
  281.     <script type="text/javascript">
  282.         {% if services is defined %}
  283.         var services = {{ services | json_encode | raw }};
  284.         {% else %}
  285.         var services = [];
  286.         {% endif %}
  287.         /***********************************/
  288.         // Get a random service index within the range of the array length
  289.         var randomServicesIndex = Math.floor(Math.random() * services.length);
  290.         // Get the object at the random service index
  291.         var randomObject = services[randomServicesIndex];
  292.         /***********************************/
  293.         /***********************************/
  294.         // Get a random sub index within the range of the array length
  295.         var randomSubsIndex = Math.floor(Math.random() * randomObject.subs.length);
  296.         // Get the object at the sub random index
  297.         var randomSubObject = randomObject.subs[randomSubsIndex];
  298.         /***********************************/
  299.         
  300.         /***********************************/
  301.         // Get a random offer index within the range of the array length
  302.         var randomOffersIndex = Math.floor(Math.random() * randomSubObject.offers.length);
  303.         // Get the object at the random offer index
  304.         var randomOfferObject = randomSubObject.offers[randomOffersIndex];
  305.         /***********************************/
  306.         /* ---------------------------------------------
  307.                   Social-Proof
  308.         ------------------------------------------------ */
  309.         var sp_freqency = 20000;
  310.         var sp_timeout = 3000;
  311.         var popbackup = "";
  312.         var names = ["Anonymous", "Anonymous", "Anonymous", "Someone", "Someone", "Irma", "Frank", "Ella", "Liz", "Sasha", "Mariella", "Jeremy", "Virginia", "Charles", "Karina", "Vihaan", "Reyansh", "Krishna", "Akshay", "Rajesh"];
  313.         var towns = ["Portland","Hillsboro","Beaverton","Bethany","Aloha","Tigard","King City","Forest Grove","Rock Creek","Raleigh Hills","Garden Home","East Portland","Tualatin"];
  314.         {% if (app.request.attributes.get('_route') != 'home') %}
  315.             // set interval for popping up/down
  316.             var togglevar = setInterval( function() { 
  317.                 fn_ToggleSocialProof();
  318.             }, sp_freqency); //every 14 seconds as defined by sp_freqency var
  319.         {% endif %}
  320.         // set what to do on close
  321.         $(".custom-close").click(function() {
  322.             //Stop all timers and hide social proof
  323.             clearTimeout(popbackup);
  324.             clearTimeout(togglevar);
  325.             $(".custom-social-proof").stop().slideToggle('slow');
  326.         });
  327.         function fn_UpdateSocialProofData() {
  328.             var selectedname = names[Math.floor(Math.random() * names.length)];
  329.             var selectedtown = towns[Math.floor(Math.random() * towns.length)];  
  330.             
  331.             // always select a recent action as a fallback
  332.             var selectedaction = ` purchased ${randomOfferObject.Quantity} ${randomSubObject.Text}`;
  333.             var timeperiod = fn_RecentTimeGen();
  334.             // sometimes choose something older
  335.             if (fn_Percentage(80)) {
  336.                 // selectedaction = pastactions[Math.floor(Math.random() * pastactions.length)];
  337.                 // timeperiod = fn_PastTimeGen();
  338.             }
  339.             // sometimes choose something tomorrow
  340.             if (fn_Percentage(33)) {
  341.                 // selectedaction = futureactions[Math.floor(Math.random() * futureactions.length)];
  342.                 // timeperiod = fn_FutureTimeGen();
  343.             }
  344.             $( "#sp_customername" ).text( selectedname );
  345.             $( "#sp_location" ).text( selectedtown );
  346.             $( "#sp_actionname" ).text( selectedaction );
  347.             $( "#sp_time" ).text( timeperiod );
  348.             // console.log("updated socialproof");
  349.         }
  350.         function fn_ToggleSocialProof() {
  351.             $(".custom-social-proof").stop().slideToggle('slow', function() {
  352.             // console.log("gone down")
  353.             fn_UpdateSocialProofData();
  354.             });
  355.             //   
  356.             popbackup = setTimeout( function() {
  357.             $(".custom-social-proof").stop().slideToggle('slow');
  358.             // console.log("popped up")
  359.             }, sp_timeout);
  360.         }
  361.         function fn_Percentage(para_percent) {
  362.             if (Math.random() < para_percent/100) {
  363.                 return true;
  364.             }
  365.             return false;
  366.         }
  367.         function fn_RecentTimeGen() {
  368.             if (fn_Percentage(80)) {
  369.                 return fn_PluralReturn(10,"hour","hours") + " ago";
  370.             }
  371.             return fn_PluralReturn(59,"min","mins") + " ago";
  372.         }
  373.         function fn_FutureTimeGen() {
  374.             if (fn_Percentage(80)) {
  375.             return fn_PluralReturn(6,"day","days") + " from now"; 
  376.             }
  377.             return fn_PluralReturn(1,"week","weeks") + " from now"; 
  378.         }
  379.         function fn_PastTimeGen() {
  380.             if (fn_Percentage(80)) {
  381.             return fn_PluralReturn(6,"day","days") + " ago";
  382.             }
  383.             return fn_PluralReturn(1,"week","weeks") + " ago";
  384.         }
  385.         function fn_PluralReturn(para_number,para_nonplural,para_plural) {
  386.             var l_number = Math.ceil(Math.random() * para_number)
  387.             if (l_number == 1) {
  388.                 return "" + l_number + " " + para_nonplural
  389.             }
  390.             return "" + l_number + " " + para_plural
  391.         }
  392.     </script>
  393. {% endblock %}
  394. </body>
  395. </html>