Advertisement
valeraplusplus

folder-block-lpc 1)

Nov 30th, 2023
710
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     class FolderBlockButton {
  2.         constructor($self) {
  3.             var _this = this;
  4.             this.$block = $self;
  5.             this.items = null,
  6.             this.$block = $self;
  7.             //this.items = this.getFolderFetch();
  8.             this.itemsFolderId = this.$block.find('.items-folder-id');
  9.             this.queryFolder = this.$block.find(`.lpc-query-folder`); // Logic query
  10.             this.selectFolder = this.queryFolder.find('.lpc-query-folder__select');
  11.  
  12.             this.arrayItemsFolder = null;
  13.             if(_this.itemsFolderId.text() && _this.itemsFolderId.text() != 'not_found'){
  14.                 this.arrayItemsFolder = this.itemsFolderId.text().split(',');
  15.             }
  16.             this.helperFunction = {
  17.                 selectOpen(){
  18.                     _this.queryFolder
  19.                         .find('.lpc-query-folder__input')
  20.                         .on('click', function (e) {
  21.                             _this.selectFolder.toggleClass("open");
  22.                         });
  23.                 },
  24.                 in_array(needle, haystack, strict) {
  25.                     var found = false, key, strict = !!strict;
  26.                
  27.                     for (key in haystack) {
  28.                         if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
  29.                             found = true;
  30.                             break;
  31.                         }
  32.                     }
  33.                
  34.                     return found;
  35.                 }
  36.                
  37.             }
  38.             this.eventHandler = {
  39.                 selected(e){
  40.                    
  41.                 },
  42.             }
  43.             this.topLevelEventHendler = function(){
  44.                
  45.             };
  46.             this.createSelectOption = async function(){
  47.                 _this.items = await _this.getFolderFetch(() => { // get ITEMS and callback
  48.                     _this.queryFolder.addClass('lpc-shop-not-found');
  49.                 });
  50.                 let dropDownList = _this.dropDownListHtml(_this.items);
  51.  
  52.                 _this.queryFolder
  53.                     .removeClass('load')
  54.                     .addClass('loaded')
  55.                     .find('.lpc-query-folder__body')
  56.                     .append(dropDownList);
  57.  
  58.                 let allUl = $(dropDownList).find('ul');
  59.                 let counterItem = function(elem){
  60.                     $(elem).each( function(i, el){
  61.                         let $this = $(this);
  62.                         let $li = $this.children('li');
  63.                         let $div = $this.prev();
  64.                    
  65.                         $div.append( `<i>(${$li.length})</i>` );
  66.                     });
  67.                  }
  68.                  counterItem(dropDownList);
  69.                  counterItem(allUl);
  70.  
  71.                 return true;
  72.             }
  73.         }
  74.         createButton(){
  75.             let $list = this.$block.find('.lpc-menu-horizontal__list');
  76.    
  77.             let lpcMenuView = $list.attr('data-lpc-menu-view');
  78.             let lpcButtons = $list.attr('data-lpc-buttons');
  79.             let itemsFolder = this.itemsFolderId.text().split(',');
  80.             let lpcRowButtonClone = $list.find('.lpc-row-button').removeClass('show').clone();
  81.             $list.find('.lpc-row-button').remove()
  82.  
  83.        
  84.             let templatesContainer = '';
  85.             this.items.forEach(item => {
  86.    
  87.                 for(let i = 0; i < itemsFolder.length; i++){
  88.                     if(itemsFolder[i] == item.folder_id){
  89.                        
  90.                         let link = '/' + item.alias;
  91.                         //var image = item.folder_image ? '/d/' + item.folder_image.filename : null;
  92.                         let name = item.folder_name;
  93.                         let template = `<li class="lpc-menu-horizontal__item ${lpcMenuView}" data-lp-selector=".lpc-menu-horizontal__item" data-elem-type="container">
  94.                             <a class="lpc-menu-horizontal__link lp-button ${lpcButtons}" href="${link}" data-lp-selector=".lpc-menu-horizontal__link" data-elem-type="text">
  95.                                 ${name}
  96.                                 <span class="lpc-menu-horizontal__arrow" data-elem-type="container" data-lp-selector=".lpc-menu-horizontal__arrow-line">
  97.                                     <span class="lpc-menu-horizontal__arrow-line"></span>
  98.                                     <span class="lpc-menu-horizontal__arrow-line"></span>
  99.                                 </span>
  100.                             </a>
  101.                         </li>`;
  102.                        
  103.                         //let tempDiv = document.createElement( "div" );
  104.                         //tempDiv.innerHTML = template;
  105.                        
  106.                         //$list.prepend( tempDiv.childNodes[0] );
  107.                         templatesContainer += template;
  108.  
  109.                     }
  110.                 }
  111.             });
  112.    
  113.             //$list.find('.items-folder-remove').remove();
  114.             $list.html(templatesContainer);
  115.             $list.append(lpcRowButtonClone);
  116.    
  117.             if(!this.$block.hasClass('lpc-simple-menu')){
  118.                 this.$block.addClass('lpc-row-menu');
  119.                 lpc_template.queue.rowMenu($('body'));
  120.             }
  121.    
  122.         }
  123.         dropDownListHtml(data) {
  124.             var rootUL = document.createElement('ul');
  125.             var levelObject = {};
  126.             var parentLi = null;
  127.             data.shift();
  128.  
  129.             data.forEach(item => {
  130.                 var li = document.createElement('li');
  131.                 var div = document.createElement('div');
  132.                 div.className = 'lpc-query-folder__option lpc-query__option';
  133.                 div.setAttribute('data-folder_id', item.folder_id);
  134.        
  135.                 var span = document.createElement('span');
  136.                
  137.                 function decodeHtmlEntities(input) {
  138.                     var doc = new DOMParser().parseFromString(input, "text/html");
  139.                     return doc.documentElement.textContent;
  140.                 }
  141.                 span.textContent = decodeHtmlEntities( item.folder_name );
  142.                 div.title = decodeHtmlEntities( item.folder_name );
  143.    
  144.                 //var i = document.createElement('i');
  145.                 //i.textContent = `(${item.items})`;
  146.        
  147.                 div.appendChild(span);
  148.                 //div.appendChild(i);
  149.                 li.appendChild(div);
  150.  
  151.                 if(this.arrayItemsFolder){
  152.                     if(this.helperFunction.in_array(item.folder_id, this.arrayItemsFolder)){
  153.                         div.classList.add('active');
  154.                     }
  155.                 }
  156.        
  157.                 let level = Number(item._level);
  158.        
  159.                 if (level == 1) {
  160.                     li.classList.add('first-level')
  161.                     rootUL.appendChild(li);
  162.                     parentLi = li;
  163.                     levelObject = {};
  164.                 } else {
  165.                     if (!levelObject[level]) {
  166.                         levelObject[level] = document.createElement('ul');
  167.                         parentLi.appendChild(levelObject[level]);
  168.                         parentLi.classList.add('hasChild')
  169.                     }
  170.                     levelObject[level].appendChild(li);
  171.                     parentLi = li;
  172.                 }
  173.             });
  174.        
  175.             return rootUL;
  176.         }
  177.         async getFolderFetch(notFolder) {
  178.             try {
  179.                 // Создаем параметры запроса
  180.                 let params = new URLSearchParams();
  181.                 params.append('param[type]', 'shop2');
  182.                 params.append('param[depth]', 99);
  183.    
  184.                 // Формируем URL для GET-запроса
  185.                 let url = '/my/s3/xapi/public/?method=folder/getTree&' + params.toString();
  186.    
  187.                 // Отправляем GET-запрос с использованием fetch
  188.                 let response = await fetch(url, {
  189.                     method: 'GET',
  190.                     headers: {
  191.                         'Content-Type': 'application/json'
  192.                     }
  193.                 });
  194.    
  195.                 if (!response.ok) {
  196.                     throw new Error('Ошибка при выполнении запроса');
  197.                 }
  198.    
  199.                 let data = await response.json();
  200.    
  201.                 if (data.result.success) {
  202.                     let items = data.result.items;
  203.    
  204.                     // Нет категории магазина
  205.                     if (!items.length) {
  206.                         notFolder();
  207.                         return false;
  208.                     }
  209.    
  210.                     return items;
  211.                 }
  212.             } catch (error) {
  213.                 console.error('Ошибка при выполнении запроса:', error);
  214.                 return false;
  215.             }
  216.         }
  217.         initSelect(){
  218.             let _this = this;
  219.             (async function () {
  220.                
  221.                 _this.helperFunction.selectOpen();
  222.  
  223.                 await _this.createSelectOption();
  224.  
  225.                 let queryFolderOption = _this.queryFolder.find('.lpc-query-folder__option'); /* option select */
  226.    
  227.                 queryFolderOption.on('click', function (e) {
  228.                     queryFolderOption.removeClass('active');
  229.  
  230.                     let $this = $(this);
  231.                     let $li = $this.closest('li');
  232.                     let $ul = $li.children(' ul');
  233.  
  234.                     var $firstLevel = _this.queryFolder.find('.first-level')
  235.                    
  236.                     let $option = $ul.children('li').children('.lpc-query-folder__option');
  237.                     if($this.hasClass('all-folders')){
  238.                         $option = $firstLevel.find(' > .lpc-query-folder__option');
  239.                     }
  240.  
  241.                     $option.addClass('active');
  242.    
  243.  
  244.                     let srtBlock = '';
  245.                     let len = $option.length - 1;
  246.  
  247.                     $option.each(function(index){
  248.                         let last = ',';
  249.                         if(index == len){
  250.                             last = '';
  251.                         }
  252.                         srtBlock += $(this).attr('data-folder_id') + last;
  253.                     });
  254.                     //console.log( srtBlock )
  255.                    
  256.                     _this.itemsFolderId
  257.                         .text(srtBlock)
  258.                         .addClass('modified modified-text');
  259.    
  260.                     _this.createButton();
  261.    
  262.                     // if (!flagLoadFolder) {
  263.                     //  queryFolder.addClass('folder-selected')
  264.                     // }
  265.    
  266.                 });
  267.    
  268.                 if(_this.itemsFolderId.text() && _this.itemsFolderId.text() != 'not_found'){
  269.                     _this.createButton();
  270.                 }
  271.             })();
  272.         }
  273.         init(){
  274.             this.initSelect();
  275.         }
  276.     };
  277.    
  278.     lpc_template.queue.folderBlock = function ($self) {
  279.    
  280.         let $blocks = $self.hasClass('lpc-folder-block') ? $self : $self.find('.lpc-folder-block');
  281.    
  282.         if ($blocks.length) {
  283.    
  284.             $blocks.each(function () {
  285.                 let $block = $(this);
  286.                
  287.                 if (s3LP.is_cms) {
  288.                     var folderBlock = new FolderBlockButton($block);
  289.                     folderBlock.init();
  290.                 }
  291.    
  292.             })
  293.         }
  294.     };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement