/** * Copyright © 2013-2017 Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ define([ 'jquery', 'mage/translate', 'jquery-ui-modules/widget', 'Magento_Ui/js/modal/modal' ], function($, $t, widget, modal) { "use strict"; return function (widget) { $.widget('mage.catalogAddToCart', widget, { _create: function() { this._super(); }, ajaxSubmit: function(form) { this.$form = form; form.trigger('addToCartBegin'); this.oldAction = form.attr('action'); if (this.oldAction.search('options=cart') > -1) { this.getProductOptions(form, this.oldAction.replace('checkout/cart', 'shoppingcart/cart/add')); return false; } window.ajaxShoppingCart.latestAddedProductId = form.find('[name=product]').val(); if (window.ajaxShoppingCart.miniCartStyle == 2) { this._flyingCart(form, 'footer'); } if (window.ajaxShoppingCart.miniCartStyle == 3) { this._flyingCart(form, 'sidebar'); } if (window.ajaxShoppingCart.miniCartStyle == 2 || window.ajaxShoppingCart.miniCartStyle == 3) { var _super = this._super.bind(this); setTimeout(() => { _super(form); }, 1000); } else { this._super(form); } }, _redirect: function(url) { if (this.$form) { var form = this.$form; var action = this.oldAction.replace('checkout/cart', 'shoppingcart/cart/add'); if (form.parents('.product-item').length) { var hasOptions = form.parents('.product-item').first().find('[data-hasoptions]').first().data('hasoptions'); if (hasOptions == '1') { this.getProductOptions(form, action); return false; } else { this._super(url); } } if (action.search('options=cart') > -1) { this.getProductOptions(form, action); return false; } else { this._super(url); } } else { this._super(url); } }, enableAddToCartButton: function(form, normal) { var self = this; if (normal) return this._super(form); if (!form.attr('buy_now')) { this._super(form); form.trigger('addToCartCompleted'); if (this.oldAction) { form.attr('action', this.oldAction); } } else { form.trigger('addToCartCompleted'); if (this.oldAction) { form.attr('action', this.oldAction); } return false; } if (form.parents('#quickshop').length) { $('#quickshop').modal('closeModal'); if (window.ajaxShoppingCart.miniCartStyle == 1) { setTimeout(function() { self.showInformedPopup(form); }, 200); } } else if (form.parents('.product-options-modal').length) { window.ajaxcartModal.modal('closeModal'); if (window.ajaxShoppingCart.miniCartStyle == 1) { setTimeout(function() { self.showInformedPopup(form); }, 200); } } else { if (window.ajaxShoppingCart.miniCartStyle == 1) { this.showInformedPopup(form); } } }, disableAddToCartButton: function(form) { if (!form.attr('buy_now')) { this._super(form); } }, getProductOptions: function(form) { var self = this, conf = this.options, $modal = $('#product-options-modal'); if (typeof window.ajaxcartModal === 'undefined') { var $modal = $('
'); $modal.appendTo('body'); window.ajaxcartModal = $modal; modal({ innerScroll: true, buttons: [], wrapperClass: 'qs-modal product-options-modal', closed: function() { $('[data-gallery-role="gallery"]', $modal).first().data('fotorama').destroy(); $modal.find('.qs-content').html(''); $('body').removeClass('cdz-qs-view'); } }, $modal); } var $content = $modal.find('.qs-content').first(); this.enableAddToCartButton(form, true); $.ajax({ url: window.ajaxShoppingCart.optionUrl, data: {id: form.find('[name=product]').val()}, type: 'get', showLoader: true, success: function(res) { $('body').addClass('cdz-qs-view'); res = res.replace(/Magento_Swatches\/js\/swatch-renderer/g, 'Codazon_QuickShop/js/swatch-renderer'); res = res.replace(/"configurable": {/g, '"Codazon_QuickShop/js/configurable": {'); res = res.replace(/"configurable":{/g, '"Codazon_QuickShop/js/configurable":{'); res = res.replace(/#review-form/g, '#reviews'); res = res.replace(/\[data-gallery-role=gallery-placeholder\]/g, '.quickshop-index-view [data-gallery-role=gallery-placeholder]'); res = res.replace(/"#product_addtocart_form"/g, '".quickshop-index-view #product_addtocart_form"'); $content.html(res); $content.find('form [name="form_key"]').val($('[name="form_key"]').first().val()); if (typeof window.angularCompileElement != 'undefined') { window.angularCompileElement($content); } $content.show().trigger('contentUpdated'); window.ajaxcartModal.modal('openModal'); $('[data-block=minicartpro]').removeClass('opened'); if ($content.find('#bundle-slide').length > 0) { var $bundleBtn = $content.find('#bundle-slide'); var $bundleTabLink = $('#tab-label-quickshop-product-bundle-title'); setTimeout(function(){ $bundleBtn.off('click').click(function(e){ e.preventDefault(); $bundleTabLink.parent().show(); $bundleTabLink.click(); return false; }); $bundleBtn.click(); },500); } } }); }, showInformedPopup: function(form) { var self = this, config = this.options, popupId = window.ajaxShoppingCart.popupId, $popup = $('#' + popupId); if ($popup.length) { if ($('.cart-informed-modal').length == 0) { modal({ innerScroll: true, buttons: [], wrapperClass: 'cart-informed-modal', opened: function() { $('body').addClass('cart-informed-modal-opened'); $('[data-block=\'minicartpro\']').trigger('dropdowndialogopen'); $('.cart-informed-modal .modal-content').addClass('nice-scroll'); }, closed: function() { $('body').removeClass('cart-informed-modal-opened'); } }, $popup); } $popup.trigger('cartLoading'); if (!$('body').hasClass('cart-informed-modal-opened')) { $popup.modal('openModal'); } else { $('[data-block=\'minicartpro\']').trigger('dropdowndialogopen'); } } }, _flyingCart: function(form, type) { var $container = $('[data-block=minicartpro]'), $img, $effImg, $parent, src, $destination, $panelContent; $container.trigger('cartLoading'); if ((window.innerWidth < 768) && ($('.js-footer-cart a').length)) { $destination = $('.js-footer-cart a').first(); } else { if (type == 'footer') { $destination = $('[data-block=minicartpro] [data-role=flying-destination]').first(); } else { $destination = $('#desk_cart-wrapper'); } } $panelContent = $('[data-block=minicartpro] .block-minicartpro'); if (form.parents('.product-item').length) { $parent = form.parents('.product-item').first(); $img = $parent.find('.product-item-photo img').first(); } else { $img = $('.fotorama__active img.fotorama__img'); } if ($img.length) { $effImg = $(''); $('body').append($effImg); src = $img.attr('src'); var width = $img.width(), height = $img.height(); var step01Css = { top: (($img.offset().top > $(window).scrollTop()) ? $img.offset().top : ($(window).scrollTop() + 10)), left: $img.offset().left, width: width, height: height } $effImg.attr('src', src).css(step01Css); var flyImage = function () { $effImg.show(); var newWidth = 0.1*width, newHeight = 0.1*height; var step02Css = { top: $destination.offset().top, left: $destination.offset().left, width: newWidth, height: newHeight } $effImg.animate(step02Css, 1000, 'linear', function () { $effImg.fadeOut(100, 'swing', function () { $effImg.remove(); if (type == 'sidebar') { $container.addClass('opened'); } }); }); } if (type == 'footer') { if ( !$panelContent.is('*:visible') ) { $panelContent.css({minHeight:'none'}).slideDown(300, 'swing', flyImage); } else { flyImage(); } } else { flyImage(); } } } }); }; });