Untitled

 avatar
unknown
plain_text
a year ago
9.3 kB
4
Indexable
(function () {
  try {
    var debug = 0;
    var variation_name = "";
    var testData = {
      "cpnSubmsg": "",
      progreesteps: {
        "step1ElSel": 'html body .checkout .progressbar.step1',
        "step2ElSel": 'html body .checkout .progressbar.step2',
        "step3ElSel": 'html body .checkout .progressbar.step3'
      }
    }

    var live = function (selector, event, callback, context) {
      /****Helper Functions****/
      // helper for enabling IE 8 event bindings
      var addEvent = function (el, type, handler) {
        if (el.attachEvent) el.attachEvent("on" + type, handler);
        else el.addEventListener(type, handler);
      }
      // matches polyfill
      this.Element &&
        (function (ElementPrototype) {
          ElementPrototype.matches =
            ElementPrototype.matches ||
            ElementPrototype.matchesSelector ||
            ElementPrototype.webkitMatchesSelector ||
            ElementPrototype.msMatchesSelector ||
            function (selector) {
              var node = this,
                nodes = (node.parentNode || node.document).querySelectorAll(selector),
                i = -1;
              while (nodes[++i] && nodes[i] != node);
              return !!nodes[i];
            };
        })(Element.prototype);
      // live binding helper using matchesSelector
      var live = function (selector, event, callback, context) {
        addEvent(context || document, event, function (e) {
          var found,
            el = e.target || e.srcElement;
          while (el && el.matches && el !== context && !(found = el.matches(selector))) el = el.parentElement;
          if (el && found) callback.call(el, e);
        });
      }
      live(selector, event, callback, context);
    }

    var waitForElement = function (selector, trigger, delayInterval, delayTimeout) {
      var interval = setInterval(function () {
        if (
          document &&
          document.querySelector(selector) &&
          document.querySelectorAll(selector).length > 0
        ) {
          clearInterval(interval);
          trigger();
        }
      }, delayInterval);
      setTimeout(function () {
        clearInterval(interval);
      }, delayTimeout);
    }

    var init = function () {
      // move coupon block just above "Sous-total"
      moveCoupon();
      // move progreesteps altogether
      moveProgressSteps();
      // change cta text
      changeText();
    }

    var testEvents = function () {
      if (!document.querySelector('eg-events-added')) {
        document.body.classList.add('eg-events-added');
        // evnts
        live('.eg-coupon-toggle-cta', 'click', function () {
          this.classList.toggle('eg-show');
        });

        live('.eg-cpn-submit', 'click', submitCpnDynamic);

        live('.eg-new-step', 'click', function () {
          var key = this.getAttribute('data-key');
          var sel = testData.progreesteps[key];
          if (sel) {
            var el = document.querySelector(sel);
            if (el) {
              el.click();
            }
          }

        });

        // to make active progressbar
        var targetNode = document.querySelector('html body .checkout');
        var config = {
          attributes: true,
          childList: true,
          subtree: true,
          attributeFilter: ['style']
        };
        // Callback function to execute when mutations are observed
        var callback = function (mutationsList, observer) {
          mutationsList.forEach(function (mutation) {
            if (mutation.type === 'attributes') {
              var actEl1 = document.querySelector(testData.progreesteps.step1ElSel + ' + .step-content[style="display: block;"]') || document.querySelector(testData.progreesteps.step1ElSel + ' + .step-content:not([style="display: none;"])');
              var actEl2 = document.querySelector(testData.progreesteps.step2ElSel + ' + .step-content[style="display: block;"]') || document.querySelector(testData.progreesteps.step2ElSel + ' + .step-content:not([style="display: none;"])');
              var actEl3 = document.querySelector(testData.progreesteps.step3ElSel + ' + .step-content[style="display: block;"]') || document.querySelector(testData.progreesteps.step3ElSel + ' + .step-content:not([style="display: none;"])');

              var newel1 = document.querySelector('.eg-new-step.eg-step-1');
              var newel2 = document.querySelector('.eg-new-step.eg-step-2');
              var newel3 = document.querySelector('.eg-new-step.eg-step-3');
              if (actEl1 && newel1 && newel2 && newel3) {
                newel1.classList.add('eg-active');
                // rm
                newel2.classList.remove('eg-active');
                newel3.classList.remove('eg-active');
              }
              if (actEl2 && newel1 && newel2 && newel3) {
                newel1.classList.add('eg-active');
                newel2.classList.add('eg-active');
                // rm
                newel3.classList.remove('eg-active');
              }
              if (actEl3 && newel1 && newel2 && newel3) {
                newel1.classList.add('eg-active');
                newel2.classList.add('eg-active');
                newel3.classList.add('eg-active');
              }
            }
          });
        };
        var observer = new MutationObserver(callback);
        observer.observe(targetNode, config);

        // monitor requests
        monitorRequest();
      }
    }

    var monitorRequest = function () {
      var send = XMLHttpRequest.prototype.send
      XMLHttpRequest.prototype.send = function () {
        this.addEventListener('load', function () {
          if (this.responseURL.includes('?wc-ajax=apply_coupon')
            || this.responseURL.includes('?wc-ajax=update_order_review')
            || this.responseURL.includes('sync_user_data.php')
          ) {
            // coupon response check
            if (this.responseURL.includes('?wc-ajax=apply_coupon')) {
              testData.cpnSubmsg = this.response;
            }
            waitForElement('footer', init, 50, 15000);
          }
        })
        return send.apply(this, arguments)
      }
    }

    var moveCoupon = function () {
      var msg = testData.cpnSubmsg;
      waitForElement('html body .cart_total_checkout', function () {
        if (!document.querySelector('html body .cart_total_checkout .eg-coupon-block')) {
          var putTarget = document.querySelector('html body .cart_total_checkout');
          var couponNewHTML = '' +
            '  <div class="eg-coupon-block">' +
            '      <span class="eg-coupon-toggle-cta">Code promo</span>' +
            '      <div class="eg-coupon-box">' +
            '          <span class="eg-coupon-err">' + msg + '</span>' +
            '          <div class="eg-coupon-group coupon">' +
            '              <input type="text" class="eg-newcpn-input input-text" id="coupon_code" value="" placeholder="Code promo">' +
            '              <button type="button" class="eg-cpn-submit button action-button" value="Appliquer le code promo">Appliquer</button>' +
            '          </div>' +
            '      </div>' +
            '  </div>';;
          putTarget.insertAdjacentHTML('afterbegin', couponNewHTML);
        }
      }, 50, 15000);
    }

    var submitCpnDynamic = function () {
      var cpnVal = document.querySelector('.eg-newcpn-input').value;
      var oriCpnInput = document.querySelector('html body .checkout_coupon #coupon_code');
      if (oriCpnInput) {
        oriCpnInput.value = cpnVal;
        oriCpnInput.dispatchEvent(new Event('input'));
        document.querySelector('html body .checkout_coupon .action-button').click();
      }
    }

    var moveProgressSteps = function () {
      waitForElement('html body .checkout #customer_details', function () {
        var newProgressHTML = '' +
          '  <div class="eg-new-progress-step-wrapper">' +
          '      <span class="eg-new-step eg-step-1" data-key="step1ElSel">Coordonnées</span>' +
          '      <span class="eg-new-step eg-step-2" data-key="step2ElSel">Livraison</span>' +
          '      <span class="eg-new-step eg-step-3" data-key="step3ElSel">Paiement</span>' +
          '  </div>';;
        if (!document.querySelector('.eg-new-progress-step-wrapper')) {
          document.querySelector('html body .checkout #customer_details').insertAdjacentHTML('afterbegin', newProgressHTML);
        }
      }, 50, 15000);
    }

    var changeText = function () {
      // big yello cta text update
      waitForElement('html body #place_order', function () {
        document.querySelector('html body #place_order').innerText = "Commander";
      }, 50, 15000);
      // removing text from check box text
      waitForElement('html body .checkbox.terms-and-conditions', function () {
        document.querySelector('html body .checkbox.terms-and-conditions').innerHTML = document.querySelector('html body .checkbox.terms-and-conditions').innerHTML.replace("sans réserve", '');
      }, 50, 15000);
    }
    waitForElement('footer', init, 50, 15000);
    waitForElement('footer', testEvents, 50, 15000);
  } catch (e) {
    if (debug) console.log(e, "error in Test" + variation_name);
  }
})();


Leave a Comment