Advertisement
valeraplusplus

new product_preview_popup.js

Jun 8th, 2022
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. $(function(){
  2.     var quick_view_class = "product-quick-view2";
  3.     var $quick_view_trigger;
  4.     var previewEvent = new Event(`productPrevievInit`, {bubbles: true});
  5.    
  6.     $(document).on('click', '.card_popup_close', function(){
  7.         myo.close();
  8.     });
  9.     var obj = {
  10.         popupFlag: true
  11.     };
  12.    
  13.     $(document).on("click", ".shop-product-btn", function (e) {
  14.         var $this = $(this);
  15.         var url = $this.attr("data-url") || $this.attr("href");
  16.        
  17.         obj.currentProductUrl = url;
  18.         obj.currentPrice = false;
  19.        
  20.         if( shop2.cf_margin_price_enabled ){
  21.             obj.currentPrice = $this.closest('form').find('.product-price');
  22.         }
  23.        
  24.         if ($this.parents('.popover-body').length>0 || $this.parents('.promo-products-list').length>0) {
  25.             obj.popupFlag = false;
  26.         } else {
  27.             obj.popupFlag = true;
  28.         }
  29.        
  30.         return obj
  31.     });
  32.    
  33.     shop2.on('afterCartAddItem', function(d, status) {
  34.         if (!d.errstr && obj.popupFlag) { // если ошибок нет
  35.             $('#shop2-msg').hide();
  36.             loadProduct(obj.currentProductUrl);
  37.         }
  38.     });
  39.  
  40.     if (shop2 && shop2.product && shop2.product._reload) {
  41.         var reload = shop2.product._reload;
  42.        
  43.         shop2.product._reload = function(node) {
  44.             var args = Array.prototype.slice.call(arguments, 0);
  45.             var popoverDiv = $(node).closest("." + quick_view_class);
  46.             if (popoverDiv.length) {
  47.                 reloadProduct(node);
  48.             } else {
  49.                 reload.apply(this, args);
  50.             }
  51.         }
  52.     }
  53.  
  54.     function loadProduct (url, callback) {
  55.        
  56.         if (!myo) return false;
  57.         if ($('.product-quick-view2').length>0) {
  58.             myo.close();
  59.         };      
  60.         myo.open({
  61.             ajax: url + '?&products_only=1&product_preview=1',
  62.             wrapClass: quick_view_class,
  63.             onLoad: function () {
  64.                
  65.                 if (typeof amountInit === "function") {
  66.                     amountInit();
  67.                 };
  68.                
  69.                 if (typeof shop2_gr.methods.amountInit === "function") {
  70.                     shop2_gr.methods.amountInit();
  71.                 };
  72.                
  73.                 const imageObserver = new IntersectionObserver((entries, imgObserver) => {
  74.                     entries.forEach((entry) => {
  75.                         if (entry.isIntersecting) {
  76.                             const lazyImage = entry.target
  77.                             lazyImage.src = lazyImage.dataset.src
  78.                             lazyImage.classList.remove("gr_lazy_load");
  79.                             imgObserver.unobserve(lazyImage);
  80.                         }
  81.                     })
  82.                 });
  83.                 const arr = document.querySelectorAll("img.gr_lazy_load")
  84.                 arr.forEach((v) => {
  85.                     imageObserver.observe(v);
  86.                 });
  87.                
  88.                 if( obj.currentPrice ){
  89.  
  90.                     this.bodyDiv.find('.card-product-preview__item .card-product-preview__price').html(
  91.                         obj.currentPrice.html()
  92.                     );
  93.                 }
  94.                
  95.                 var $popupKindClass = $(".popup_kinds_slider");
  96.                
  97.                 if ($popupKindClass.length>0) {
  98.                     var sliderAutoplay = $(".popup_kinds_slider").data("autoplay");
  99.                     // forEach function from Todd Motto"s  blog, as mentioned above
  100.                     var forEachSlider = function(array, callback, scope) {
  101.                         for (var i = 0; i < array.length; i++) {
  102.                             callback.call(scope, i, array[i]); // passes back stuff we need
  103.                         }
  104.                     };
  105.                     // tiny-slider initialisation
  106.                     var sliders = document.querySelectorAll(".popup_kinds_slider");
  107.                     forEachSlider(sliders, function(index, value) {
  108.                         let thumbnail = value.dataset.name;
  109.                         let multislider = tns({
  110.                             loop: true,
  111.                             container: value,
  112.                             slideBy: 1,
  113.                             autoplayTimeout: 3000,
  114.                             autoplayHoverPause: true,
  115.                             mode: "carousel",
  116.                             axis: "horizontal",
  117.                             autoplay: sliderAutoplay,
  118.                             autoplayButtonOutput: false,
  119.                             mouseDrag: true,
  120.                             center: false,
  121.                             autoWidth: false,
  122.                             nav: true,
  123.                             navPosition: "bottom",
  124.                             controlsText: ['<svg class="gr-svg-icon"><use xlink:href="#icon_shop_slider_prev"></use></svg><svg class="gr-svg-icon gr_small_icon"><use xlink:href="#icon_shop_slider_prev_small"></use></svg>', '<svg class="gr-svg-icon"><use xlink:href="#icon_shop_slider_next"></use></svg><svg class="gr-svg-icon gr_small_icon"><use xlink:href="#icon_shop_slider_next_small"></use></svg>'],
  125.                             preventActionWhenRunning: true,
  126.                             responsive: {
  127.                                 320: {
  128.                                     items: 1,
  129.                                     gutter: 0,
  130.                                     controls: false
  131.                                 },
  132.                                 480: {
  133.                                     items: 1,
  134.                                     gutter: 0,
  135.                                     controls: false
  136.                                 },
  137.                                 768: {
  138.                                     items: 2,
  139.                                     gutter: 20,
  140.                                     controls: true
  141.                                 },
  142.                                 1024: {
  143.                                     items: 2,
  144.                                     gutter: 20,
  145.                                     controls: true
  146.                                 }
  147.                             }
  148.                         });
  149.                     });
  150.                 }
  151.                
  152.                 if ($.isFunction(callback)) {
  153.                     callback();
  154.                 };
  155.                 document.dispatchEvent(previewEvent);
  156.             }
  157.         });
  158.     };
  159.  
  160.     function reloadProduct (node) {
  161.         var $node = $(node),
  162.             kinds = shop2.product.getNodeData(node, 'kinds', true),
  163.             paramName = shop2.product.getNodeData(node, 'name'),
  164.             paramValue = shop2.product.getNodeData(node, 'value'),
  165.             $form = $node.closest('form'),
  166.             form = $form.get(0),
  167.             meta, kind_id, product_id;
  168.            
  169.         if (kinds && $.type(paramName) !== 'undefined' && $.type(paramValue) !== 'undefined' && form) {
  170.  
  171.             if (form.elements.meta) {
  172.                 meta = $.parseJSON(form.elements.meta.value);
  173.             }
  174.  
  175.             product_id = form.elements.product_id.value;
  176.  
  177.             $form.find('[name=submit]').prop('disabled', true);
  178.  
  179.             kind_id = shop2.product.findKindId(product_id, kinds, paramName, paramValue, meta);
  180.  
  181.             if (kind_id === 0) return false;
  182.  
  183.             var url = window.location.protocol + "//" + window.location.host + shop2.uri + "/product/" + kind_id;
  184.  
  185.             loadProduct(url);
  186.         }
  187.     };
  188. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement