define([ 'jquery', 'owlslider' ], function($){ var breakPoint = 768; $.widget('codazon.featuredLooks', { options: { productWidth: 200, dots: true, nav: false, top: 40 }, _create: function() { this._assignVariables(); this._bindEvents(); }, _assignVariables: function() { var self = this, conf = this.options; this.$points = this.element.find('[data-role="small-item-points"]'); this.$products = this.element.find('[data-role="product-html-data"]'); this.$modal = $('
').appendTo('body'); this.sliderConfig = conf.sliderConfig; this.sliderConfig.rtl = $('body').hasClass('rtl-layout'); this.sliderConfig.lazyLoad = true; this.sliderConfig.navElement = 'div'; this.$lookSlider = this.element.find('[data-role="look-slider"]').owlCarousel(this.sliderConfig); conf.productWidth = parseFloat(conf.productWidth); self.element.find('[data-role="slider-loader"]').remove(); }, _bindEvents: function() { var self = this, conf = this.options; this.$modal.modal({ innerScroll: false, modalClass: 'mb-look-modal ' + self.element.parents('.base-slider').first().attr('class'), buttons: [], opened: function() {} }); this.$points.find('[data-productid]').each(function() { var $point = $(this); var productId = $point.data('productid'); $product = self.$products.find('[data-productid="' + productId + '"]'); if ($product.length) { var $dropdown = $('
').hide().css({position: 'absolute'}); $dropdown.appendTo($point); var $cloneProduct = $product.clone().appendTo($dropdown); var pw = parseFloat($point.innerWidth()); var $parent = $point.parents('[data-role="item"]').first(); $point.find('.item-point').click(function() { $point.toggleClass('active'); $cloneProduct.find('img.owl-lazy').each(function() { $(this).attr('src', $(this).data('src')); $(this).removeClass('owl-lazy'); }); if (window.innerWidth >= breakPoint) { var left = $point.data('left'), top = $point.data('top'); $dropdown.css({ height: 'auto', width: conf.productWidth, left: -(conf.productWidth - pw)/2, top: conf.top, }); $dropdown.fadeToggle(300, 'linear').toggleClass('drop-active'); var dol = parseFloat($dropdown.offset().left); var eol = parseFloat($parent.offset().left); var ew = parseFloat($parent.innerWidth()); var dot = parseFloat($dropdown.offset().top); var dh = parseFloat($dropdown.innerHeight()); var eot = parseFloat($parent.offset().top); var eh = parseFloat($parent.innerHeight()); if (dol < eol) { var left = -(conf.productWidth - pw)/2 + (eol - dol) + 10; $dropdown.css({left: left + 'px'}); } if ( (dol + conf.productWidth) > (eol + ew)) { var left = -(conf.productWidth - pw)/2 - ((dol + conf.productWidth) - (eol + ew)) - 10; $dropdown.css({left: left + 'px'}); } if (dot + dh > eot + eh) { var top = conf.top - ((dot + dh) - (eot + eh)) - 10; $dropdown.css({top: top + 'px'}); } } else { $cloneProduct.clone().appendTo(self.$modal.empty()); self.$modal.modal('openModal'); $('body').trigger('contentUpdated'); } }); $('body').on('click', function(e) { if (window.innerWidth >= breakPoint) { if ($point.hasClass('active')) { var $target = $(e.target); if ( !($target.is($point) || $point.has($target).length) ) { $point.removeClass('active'); $dropdown.hide().removeClass('drop-active'); } } } }); } }); $('body').trigger('contentUpdated'); var curWidth = window.innerWidth; $(window).on('resize', function() { if (window.innerWidth != curWidth) { curWidth = window.innerWidth; if (curWidth < breakPoint) { self.element.find('.product-container').hide().parents('.item-hook').first().removeClass('active'); } else { self.$modal.modal('closeModal'); } } }); } }); return $.codazon.featuredLooks; });