Advertisement
artemsemkin

Untitled

Aug 30th, 2023
878
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class Form {
  2.   constructor({
  3.     scope,
  4.     target
  5.   }) {
  6.     this.$scope = scope;
  7.     this.$target = target;
  8.  
  9.     if (this.$scope.length) {
  10.       this.set();
  11.       this.run();
  12.     }
  13.   }
  14.  
  15.   set() {
  16.     this.input = '.input-float__input';
  17.     this.inputClassNotEmpty = 'input-float__input_not-empty';
  18.     this.inputClassFocused = 'input-float__input_focused';
  19.     this.$inputs = this.$scope.find(this.input);
  20.   }
  21.  
  22.   run() {
  23.     this._floatLabels();
  24.     this._bindEvents();
  25.  
  26.     if (typeof window.theme !== 'undefined' && window.theme.contactForm7.customModals) {
  27.       if ($('.wpcf7-form').length) {
  28.         window.kinsey.components.AssetsManager.loadBootstrapModal().then(() => this._attachModalsEvents());
  29.       }
  30.     }
  31.   }
  32.  
  33.   _floatLabels() {
  34.     const self = this;
  35.  
  36.     if (!this.$inputs || !this.$inputs.length) {
  37.       return false;
  38.     }
  39.  
  40.     this.$inputs.each(function () {
  41.       const
  42.         $el = $(this),
  43.         $controlWrap = $el.parent('.wpcf7-form-control-wrap');
  44.  
  45.       // not empty value
  46.       if ($el.val()) {
  47.         $el.addClass(self.inputClassNotEmpty);
  48.         $controlWrap.addClass(self.inputClassNotEmpty);
  49.         // empty value
  50.       } else {
  51.         $el.removeClass([self.inputClassFocused, self.inputClassNotEmpty]);
  52.         $controlWrap.removeClass([self.inputClassFocused, self.inputClassNotEmpty]);
  53.       }
  54.  
  55.       // has placeholder & empty value
  56.       if ($el.attr('placeholder') && !$el.val()) {
  57.         $el.addClass(self.inputClassNotEmpty);
  58.         $controlWrap.addClass(self.inputClassNotEmpty);
  59.       }
  60.     });
  61.  
  62.   }
  63.  
  64.   _bindEvents() {
  65.     const self = this;
  66.  
  67.     this.$scope
  68.       .off('focusin')
  69.       .on('focusin', self.input, function () {
  70.         const
  71.           $el = $(this),
  72.           $controlWrap = $el.parent('.wpcf7-form-control-wrap');
  73.  
  74.         $el.addClass(self.inputClassFocused).removeClass(self.inputClassNotEmpty);
  75.         $controlWrap.addClass(self.inputClassFocused).removeClass(self.inputClassNotEmpty);
  76.  
  77.       })
  78.       .off('focusout')
  79.       .on('focusout', self.input, function () {
  80.  
  81.         const
  82.           $el = $(this),
  83.           $controlWrap = $el.parent('.wpcf7-form-control-wrap');
  84.  
  85.         // not empty value
  86.         if ($el.val()) {
  87.           $el.removeClass(self.inputClassFocused).addClass(self.inputClassNotEmpty);
  88.           $controlWrap.removeClass(self.inputClassFocused).addClass(self.inputClassNotEmpty);
  89.         } else {
  90.           // has placeholder & empty value
  91.           if ($el.attr('placeholder')) {
  92.             $el.addClass(self.inputClassNotEmpty);
  93.             $controlWrap.addClass(self.inputClassNotEmpty);
  94.           }
  95.  
  96.           $el.removeClass(self.inputClassFocused);
  97.           $controlWrap.removeClass(self.inputClassFocused);
  98.         }
  99.  
  100.       });
  101.  
  102.   }
  103.  
  104.   _attachModalsEvents() {
  105.     window.$document
  106.       .off('wpcf7submit')
  107.       .on('wpcf7beforesubmit', (e) => {
  108.         const
  109.           $form = $(e.target),
  110.           $submit = $form.find('[type="submit"]');
  111.  
  112.         $form.addClass('pointer-events-none');
  113.         window.$body.addClass('cursor-progress');
  114.  
  115.  
  116.         if ($submit.length) {
  117.           const
  118.             $title = $submit.find('.button__label-hover .button__title'),
  119.             $icons = $submit.find('.button__icon');
  120.  
  121.           $title.data('original-title', $title.text());
  122.  
  123.           $submit.addClass('button_hovered');
  124.           $title.html('<svg class="spinner spinner_small" width="65px" height="65px" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"><circle class="spinner__path" fill="none" stroke-width="6" stroke-linecap="round" cx="33" cy="33" r="30"></circle></svg>');
  125.  
  126.           if ($icons.length) {
  127.             gsap.set($icons, {
  128.               autoAlpha: 0
  129.             });
  130.           }
  131.         }
  132.  
  133.         // Set loading cursor follower
  134.         if (window.$cursor && window.$cursor.length) {
  135.           window.$cursor.trigger('startLoading');
  136.         }
  137.       })
  138.       .on('wpcf7submit', (e) => {
  139.  
  140.         const
  141.           $modal = $('#modalContactForm7'),
  142.           $form = $(e.target),
  143.           $submit = $form.find('[type="submit"]');
  144.         let template;
  145.  
  146.         $modal.modal('dispose').remove();
  147.  
  148.         if (e.detail.apiResponse.status === 'mail_sent') {
  149.  
  150.           template = this._getModalTemplate({
  151.             icon: 'icon-success.svg',
  152.             message: e.detail.apiResponse.message,
  153.           });
  154.  
  155.           this._createModal({
  156.             template,
  157.             onDismiss: () => {
  158.               $(e.target).find(this.input).parent().val('').removeClass(this.inputClassFocused).removeClass(this.inputClassNotEmpty);
  159.             }
  160.           });
  161.         }
  162.  
  163.         if (e.detail.apiResponse.status === 'mail_failed') {
  164.           template = this._getModalTemplate({
  165.             icon: 'icon-error.svg',
  166.             message: e.detail.apiResponse.message
  167.           });
  168.  
  169.           this._createModal({
  170.             template
  171.           });
  172.         }
  173.  
  174.         $form.removeClass('pointer-events-none');
  175.         window.$body.removeClass('cursor-progress');
  176.  
  177.         // Hide loading cursor follower
  178.         if (window.$cursor && window.$cursor.length) {
  179.           window.$cursor.trigger('finishLoading');
  180.         }
  181.  
  182.         if ($submit.length) {
  183.           const
  184.             $title = $submit.find('.button__label-hover .button__title'),
  185.             originalTitle = $title.data('original-title'),
  186.             $icons = $submit.find('.button__icon');
  187.  
  188.           $submit.removeClass('button_hovered');
  189.  
  190.           if ($title.length && originalTitle) {
  191.             $title.text(originalTitle);
  192.           }
  193.  
  194.           if ($icons.length) {
  195.             gsap.set($icons, {
  196.               clearProps: 'opacity,visibility'
  197.             });
  198.           }
  199.         }
  200.  
  201.       });
  202.   }
  203.  
  204.   _getModalTemplate({
  205.     icon,
  206.     message
  207.   }) {
  208.     return `
  209.       <div class="modal fade" id="modalContactForm">
  210.         <div class="modal-dialog modal-dialog-centered">
  211.           <div class="modal-content radius-img">
  212.             <div class="modal__close" data-dismiss="modal"><img src="${window.theme.themeURL}/img/modal/icon-close.svg"/></div>
  213.               <header class="text-center mb-1">
  214.                 <img src="${window.theme.themeURL}/img/modal/${icon}" width="80px" height="80px" alt=""/>
  215.                 <p class="modal__message h4"><strong>${message}</strong></p>
  216.               </header>
  217.               <button type="button" class="button button_solid bg-dark-1 button_fullwidth" data-dismiss="modal"><span class="button__label button__label-normal"><span class="button__title">OK</span></span><span class="button__label button__label-hover"><span class="button__title">OK</span></span>
  218.               </button>
  219.           </div>
  220.         </div>
  221.       </div>
  222.     `;
  223.   }
  224.  
  225.   _createModal({
  226.     template,
  227.     onDismiss
  228.   }) {
  229.  
  230.     if (!template) {
  231.       return false;
  232.     }
  233.  
  234.     let $modal;
  235.     window.$body.append(template);
  236.     $modal = $('#modalContactForm');
  237.  
  238.     $modal.modal('show');
  239.     $modal.on('hidden.bs.modal', () => {
  240.       if (typeof onDismiss === 'function') {
  241.         onDismiss();
  242.       }
  243.       $modal.modal('dispose').remove();
  244.     });
  245.   }
  246. }
  247.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement