akozhomka

JS (themes/redesign/custom-js/sort.js)

Feb 23rd, 2022 (edited)
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 'use strict';
  2.  
  3. // =============================================================================
  4. // Сортировка
  5. // dependencies:
  6. //  - jQuery
  7. // =============================================================================
  8.  
  9. class AppSortUI {
  10.  
  11.     constructor() {
  12.         this.timeout = 200;
  13.  
  14.         this.selectSort = document.querySelector('.select-sort');
  15.         this.selectSortMob = document.querySelector('#catalog__sort-select-mob');
  16.  
  17.         this._initModules();
  18.         this._eventHandlersInit();
  19.     }
  20.  
  21.     _initModules() {
  22.         this.selectSortMob.customSelect();
  23.     }
  24.  
  25.     _eventHandlersInit() {
  26.         document.querySelector(document).addEventListener('click', this.selectSort.selector, (event) => {
  27.             event.stopImmediatePropagation();
  28.         });
  29.  
  30.         document.querySelector('.select-sort li').addEventListener('click', (event) => {
  31.             this._selectSortChange(event.currentTarget);
  32.         });
  33.  
  34.         document.querySelector('.select-sort-mobile li').addEventListener('click', (event) => {
  35.             this._selectSortChange(event.currentTarget);
  36.         });
  37.  
  38.         document.querySelector('.select-sort-current').addEventListener('click', (event) => {
  39.             let target = event.currentTarget;
  40.             if (globalUI.isMobile && !document.querySelector(target).closest('.select-sort_open').length) {
  41.                 this._sortSelectPopUp(event.currentTarget);
  42.  
  43.                 return;
  44.             }
  45.             document.querySelector(target).closest(this.selectSort.selector).classList.toggle('select-sort_open');
  46.         });
  47.  
  48.         document.querySelector(document).addEventListener('click', '.darkMask:visible', (event) => {
  49.             let sortMobile = document.querySelector('.catalog__sort-form-mobile');
  50.             if (sortMobile.is(':visible')) {
  51.                 sortMobile.css('display', 'none');
  52.                 document.querySelector('.darkMask').remove();
  53.                 sendDeactivateSortGA();
  54.             }
  55.         })
  56.     }
  57.  
  58.     _selectSortChange(target) {
  59.         document.querySelector(target).querySelector('.select-sort-li-current').removeClass('select-sort-li-current');
  60.         document.querySelector(target).classList.add('select-sort-li-current');
  61.         document.querySelector(target).querySelector('.select-sort_open').removeClass('select-sort_open');
  62.         document.querySelector(target).querySelector('.select-sort-current').text(document.querySelector(target).text());
  63.  
  64.         document.querySelector(target).querySelector('.custom-select-text').text(document.querySelector(target).text());
  65.         document.querySelector(`#catalog__sort-select-mob option[value="${document.querySelector(target).data('id')}"]`).prop('selected', true);
  66.  
  67.         let dataUrl = document.querySelector(target).attr('data-url');
  68.  
  69.         if (dataUrl) {
  70.             sendSelectedSortGA(document.querySelector(target).text());
  71.             setTimeout(() => {
  72.                 window.location.href = dataUrl;
  73.             }, 1);
  74.         } else {
  75.             sendDeactivateSortGA();
  76.         }
  77.  
  78.         setTimeout(() => {
  79.             document.querySelector('.catalog__sort-form-mobile').css('display', 'none');
  80.             document.querySelector('.darkMask').remove();
  81.         }, this.timeout)
  82.     }
  83.  
  84.     _sortSelectPopUp(target) {
  85.         if (document.querySelector(target).closest('.select-sort_open').length) {
  86.             return;
  87.         }
  88.  
  89.         let sortSelect = document.querySelector(target).closest('.select-sort').next('.catalog__sort-form-mobile');
  90.  
  91.         document.querySelector('body').insertAdjacentHTML("beforeend",'<span class="darkMask"></span>');
  92.         sortSelect.css('display', 'block');
  93.     }
  94. }
  95.  
  96. document.querySelector(document).addEventListener('ready', function () {
  97.     new AppSortUI();
  98. });
Add Comment
Please, Sign In to add comment