403Webshell
Server IP : 104.171.130.249  /  Your IP : 216.73.216.146
Web Server : nginx/1.25.5
System : Linux 0dac65491b7e 6.8.0-134-generic #134-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun 26 18:43:11 UTC 2026 x86_64
User : root ( 0)
PHP Version : 8.4.23
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/html/wp-content/themes/matreshka/assets/js/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/wp-content/themes/matreshka/assets/js/checkout-loader.js
/**
 * Matreshka — Checkout Order Loader
 * Красивый оверлей с обратным отсчётом при оформлении заказа
 *
 * Зависимости: jQuery
 */
(function ($) {
  'use strict';

  var COUNTDOWN_SECONDS = 5;
  var overlay = null;
  var interval = null;
  var progressTimeout = null;

  /* ── Build overlay DOM ────────────────────── */
  function buildOverlay() {
    if ($('#matreshka-checkout-loader').length) return;

    var html =
      '<div id="matreshka-checkout-loader" class="matreshka-checkout-loader">' +
        '<div class="mcl-spinner">' +
          '<div class="mcl-spinner-ring"></div>' +
          '<svg class="mcl-spinner-icon" viewBox="0 -960 960 960" focusable="false" aria-hidden="true">' +
            '<path fill="currentColor" d="M240-80q-33 0-56.5-23.5T160-160v-480q0-33 23.5-56.5T240-720h80q0-66 47-113t113-47q66 0 113 47t47 113h80q33 0 56.5 23.5T800-640v480q0 33-23.5 56.5T720-80H240Zm0-80h480v-480h-80v80q0 17-11.5 28.5T600-520q-17 0-28.5-11.5T560-560v-80H400v80q0 17-11.5 28.5T360-520q-17 0-28.5-11.5T320-560v-80h-80v480Zm160-560h160q0-33-23.5-56.5T480-800q-33 0-56.5 23.5T400-720Z" />' +
          '</svg>' +
        '</div>' +
        '<div class="mcl-text">' +
          '<p class="mcl-title">Создаём ваш заказ</p>' +
          '<p class="mcl-subtitle">Пожалуйста, подождите…</p>' +
          '<p class="mcl-countdown">Осталось <span class="mcl-seconds">' + COUNTDOWN_SECONDS + '</span> сек</p>' +
          '<div class="mcl-progress"><div class="mcl-progress-bar"></div></div>' +
        '</div>' +
      '</div>';

    $('body').append(html);
    overlay = $('#matreshka-checkout-loader');
  }

  /* ── Show loader ──────────────────────────── */
  function showLoader() {
    buildOverlay();

    var remaining = COUNTDOWN_SECONDS;
    var $seconds  = overlay.find('.mcl-seconds');
    var $bar      = overlay.find('.mcl-progress-bar');

    // Activate overlay
    overlay.addClass('active');

    // Start progress bar animation
    progressTimeout = setTimeout(function () {
      $bar.css('width', '100%');
    }, 50);

    // Countdown
    $seconds.text(remaining);

    interval = setInterval(function () {
      remaining--;
      if (remaining <= 0) {
        $seconds.text('0');
        clearInterval(interval);
        interval = null;
        return;
      }
      $seconds.text(remaining);
    }, 1000);
  }

  /* ── Hide loader ──────────────────────────── */
  function hideLoader() {
    if (interval) { clearInterval(interval); interval = null; }
    if (progressTimeout) { clearTimeout(progressTimeout); progressTimeout = null; }
    if (overlay) {
      overlay.removeClass('active');
    }
  }

  function isCheckoutFormValid() {
    var form = $('form.checkout').get(0);
    return !form || form.checkValidity();
  }

  /* ── Bind to place-order submit ───────────── */
  $(function () {
    // Build overlay on page load so it's ready
    buildOverlay();

    // WooCommerce fires checkout_place_order before AJAX submit
    $('form.checkout').on('checkout_place_order', function () {
      // Small delay to let WooCommerce validate first
      setTimeout(function () {
        // Only show if no validation errors visible
        if (isCheckoutFormValid() && $('.woocommerce-error').length === 0 && $('.woocommerce-NoticeGroup-checkout').length === 0) {
          showLoader();
        }
      }, 300);
    });

    // Also catch direct click on our submit button (fallback)
    $(document).on('click', '#place_order', function () {
      setTimeout(function () {
        if (isCheckoutFormValid() && $('.woocommerce-error').length === 0 && $('.woocommerce-NoticeGroup-checkout').length === 0) {
          showLoader();
        }
      }, 400);
    });

    // Hide on checkout error (WooCommerce triggers this)
    $(document.body).on('checkout_error', function () {
      hideLoader();
    });

    // Hide when WooCommerce AJAX completes with error
    $(document).ajaxComplete(function (event, xhr) {
      try {
        var data = JSON.parse(xhr.responseText);
        if (data && data.result === 'failure') {
          hideLoader();
        }
      } catch (e) { /* not JSON, ignore */ }
    });
  });

})(jQuery);

Youez - 2016 - github.com/yon3zu
LinuXploit