(function() {
'use strict';
// Theme Functions
function portoCalcSliderButtonsPosition($parent, padding) {
var $buttons = $parent.find('.show-nav-title .owl-nav');
if ($buttons.length) {
if (window.theme.rtl) {
$buttons.css('left', padding);
} else {
$buttons.css('right', padding);
}
if ($buttons.closest('.porto-products').length && $buttons.closest('.porto-products').parent().children('.products-slider-title').length) {
var $title = $buttons.closest('.porto-products').parent().children('.products-slider-title'),newMT = $title.offset().top - $parent.offset().top - parseInt($title.css('padding-top'), 10) - parseInt($title.css('line-height'), 10) / 2 + $buttons.children().outerHeight() - parseInt($buttons.children().css('margin-top'), 10);
$buttons.css('margin-top', newMT);
}
}
}
function portoCalcSliderTitleLine($parent_obj) {
$parent_obj.each(function() {
var $parent = jQuery(this);
var $title = $parent.children('.section-title');
if (!$title.length || !$parent.hasClass('title-border-middle')) return;
var $l = $title.find('.line'),
$t = $title.find('.inline-title');
if (!$t.length || !$l.length) return;
var offset = $t.offset().left - $title.offset().left,
title_w = $title.width() - offset,
t_w = $t.width();
if (title_w > t_w + 200) {
var offset_nav_dots = 0;
if ($parent.find('.owl-carousel.show-dots-title-right').length || $parent.find('.owl-carousel.show-nav-title').length) {
offset_nav_dots = 75;
}
if (window.theme.rtl) {
$l.css({
display: 'block',
right: offset + t_w + 20,
width: title_w - t_w - offset_nav_dots
});
} else {
$l.css({
display: 'block',
left: offset + t_w + 20,
width: title_w - t_w - offset_nav_dots
});
}
} else {
$l.css({
display: 'none'
});
}
});
}
// Woocommerce Widget Toggle
(function(theme, $) {
theme = theme || {};
var instanceName = '__wooWidgetToggle';
var WooWidgetToggle = function($el, opts) {
return this.initialize($el, opts);
};
WooWidgetToggle.defaults = {
};
WooWidgetToggle.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, WooWidgetToggle.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
var $el = this.options.wrapper;
$el.parent().removeClass('closed');
if (!$el.find('.toggle').length) {
$el.append('');
}
$el.find('.toggle').click(function() {
if ($el.next().is(":visible")){
$el.parent().addClass('closed');
} else {
$el.parent().removeClass('closed');
}
$el.next().stop().slideToggle(200);
theme.refreshVCContent();
});
return this;
}
};
// expose to scope
$.extend(theme, {
WooWidgetToggle: WooWidgetToggle
});
// jquery plugin
$.fn.themeWooWidgetToggle = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new theme.WooWidgetToggle($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Woocommerce Widget Accordion
(function(theme, $) {
theme = theme || {};
var instanceName = '__wooWidgetAccordion';
var WooWidgetAccordion = function($el, opts) {
return this.initialize($el, opts);
};
WooWidgetAccordion.defaults = {
};
WooWidgetAccordion.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, WooWidgetAccordion.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
var self = this,
$el = this.options.wrapper;
$el.find('ul.children').each(function() {
var $this = $(this);
if (!$this.prev().hasClass('toggle')) {
$this.before(
$('').click(function() {
var $that = $(this);
if ($that.next().is(":visible")) {
$that.parent().removeClass('open').addClass('closed');
} else {
$that.parent().addClass('open').removeClass('closed');
}
$that.next().stop().slideToggle(200);
theme.refreshVCContent();
})
);
}
});
$el.find('li[class*="current-"]').addClass('current');
return this;
}
};
// expose to scope
$.extend(theme, {
WooWidgetAccordion: WooWidgetAccordion
});
// jquery plugin
$.fn.themeWooWidgetAccordion = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new theme.WooWidgetAccordion($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Woocommerce Products Slider
(function(theme, $) {
theme = theme || {};
var instanceName = '__wooProductsSlider';
var WooProductsSlider = function($el, opts) {
return this.initialize($el, opts);
};
WooProductsSlider.defaults = {
rtl: theme.rtl,
autoplay : theme.slider_autoplay == '1' ? true : false,
autoplayTimeout: theme.slider_speed ? theme.slider_speed : 5000,
loop: theme.slider_loop,
nav: false,
navText: ["", ""],
dots: false,
autoplayHoverPause : true,
items : 1,
responsive : {},
autoHeight : true,
lazyLoad: true
};
WooProductsSlider.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, WooProductsSlider.defaults, opts, {
wrapper: this.$el
});
return this;
},
calcOwlHeight: function($el) {
var h = 0;
$el.find('.owl-item.active').each(function() {
if (h < $(this).height())
h = $(this).height();
});
$el.find('.owl-stage-outer').height( h );
},
build: function() {
var self = this,
$el = this.options.wrapper,
lg = this.options.lg,
md = this.options.md,
xs = this.options.xs,
ls = this.options.ls,
$slider_wrapper = $el.closest('.slider-wrapper'),
single = this.options.single,
dots = this.options.dots,
nav = this.options.nav,
responsive = {},
items,
scrollWidth = theme.getScrollbarWidth(),
count = $el.find('> *').length,
w_xs = 576 - scrollWidth,
w_md = 768 - scrollWidth,
w_lg = 992 - scrollWidth,
w_sl = 1400 - scrollWidth;
if ($el.find('.product-col').get(0)) {
portoCalcSliderButtonsPosition($slider_wrapper, $el.find('.product-col').css('padding-left'));
}
if (single) {
items = 1;
} else {
items = lg ? lg : 1;
if (this.options.xl) {
responsive[w_sl] = { items: this.options.xl, loop: (this.options.loop && count > this.options.xl) ? true : false };
}
if (lg) responsive[w_lg] = { items: lg, loop: (this.options.loop && count > lg) ? true : false };
if (md) responsive[w_md] = { items: md, loop: (this.options.loop && count > md) ? true : false };
if (xs) responsive[w_xs] = { items: xs, loop: (this.options.loop && count > xs) ? true : false };
if (ls) responsive[0] = { items: ls, loop: (this.options.loop && count > ls) ? true : false };
}
this.options = $.extend(true, {}, this.options, {
loop: (this.options.loop && count > items) ? true : false,
items: items,
responsive: responsive,
onRefresh: function() {
if ($el.find('.product-col').get(0)) {
portoCalcSliderButtonsPosition($slider_wrapper, $el.find('.product-col').css('padding-left'));
}
$el.find('.porto-lazyload:not(.lazy-load-loaded)').trigger('appear');
},
onInitialized: function() {
if ($el.find('.product-col').get(0)) {
portoCalcSliderButtonsPosition($slider_wrapper, $el.find('.product-col').css('padding-left'));
}
//$el.find('.cloned .porto-lazyload:not(.lazy-load-loaded)').themePluginLazyLoad();
},
touchDrag: (count == 1) ? false : true,
mouseDrag: (count == 1) ? false : true
});
// Auto Height Fixes
if (this.options.autoHeight) {
var thisobj = this;
$(window).on('resize', function() {
thisobj.calcOwlHeight($el);
});
$(window).on('load', function() {
thisobj.calcOwlHeight($el);
});
}
$el.owlCarousel(this.options);
return this;
}
};
// expose to scope
$.extend(theme, {
WooProductsSlider: WooProductsSlider
});
// jquery plugin
$.fn.themeWooProductsSlider = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new theme.WooProductsSlider($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Woocommerce Add to Cart, View Cart Events
(function(theme, $) {
var $supports_html5_storage;
try {
$supports_html5_storage = ( 'sessionStorage' in window && window.sessionStorage !== null );
window.sessionStorage.setItem( 'wc', 'test' );
window.sessionStorage.removeItem( 'wc' );
} catch( err ) {
$supports_html5_storage = false;
}
var setCartCreationTimestamp = function() {
if ( $supports_html5_storage ) {
sessionStorage.setItem( 'wc_cart_created', ( new Date() ).getTime() );
}
};
var setCartHash = function(cart_hash) {
if ( $supports_html5_storage && wc_cart_fragments_params ) {
localStorage.setItem( wc_cart_fragments_params.cart_hash_key, cart_hash );
sessionStorage.setItem( wc_cart_fragments_params.cart_hash_key, cart_hash );
}
};
var initAjaxRemoveCartItem = function() {
if (!$.fn.scrollbar && !$('#porto-script-jquery-scrollbar').length) {
var js = document.createElement('script');
js.id = 'porto-script-jquery-scrollbar';
$(js).appendTo('body').on('load', function() {
if ($.fn.scrollbar) {
$('#mini-cart .cart_list').scrollbar();
}
}).attr('src', js_porto_vars.ajax_loader_url.replace('/images/ajax-loader@2x.gif', '/js/libs/jquery.scrollbar.min.js'));
} else if ($.fn.scrollbar) {
$('#mini-cart .cart_list').scrollbar();
}
$(document).off('click', '.widget_shopping_cart .remove-product, .shop_table.cart .remove-product').on('click', '.widget_shopping_cart .remove-product, .shop_table.cart .remove-product', function(e){
e.preventDefault();
var $this = $(this);
var cart_id = $this.data("cart_id");
var product_id = $this.data("product_id");
$this.closest('li').find('.ajax-loading').show();
$.ajax({
type: 'POST',
dataType: 'json',
url: theme.ajax_url,
data: {
action: "porto_cart_item_remove",
nonce: js_porto_vars.porto_nonce,
cart_id: cart_id
},
success: function( response ) {
var this_page = window.location.toString(),
item_count = $(response.fragments['div.widget_shopping_cart_content']).find('.mini_cart_item').length;
this_page = this_page.replace( 'add-to-cart', 'added-to-cart' );
updateCartFragment(response);
$( document.body ).trigger( 'wc_fragments_refreshed' );
$('.viewcart-' + product_id).removeClass('added');
$('.porto_cart_item_' + cart_id).remove();
// Block widgets and fragments
if ( item_count == 0 && ($('body').hasClass('woocommerce-cart') || $('body').hasClass('woocommerce-checkout')) ) {
$( '.page-content' ).fadeTo( '400', '0.8' ).block({
message: null,
overlayCSS: {
opacity: 0.2
}
});
} else {
$( '.shop_table.cart, .shop_table.review-order, .updating, .cart_totals' ).fadeTo( '400', '0.8' ).block({
message: null,
overlayCSS: {
opacity: 0.2
}
});
}
// Unblock
$( '.widget_shopping_cart, .updating' ).stop( true ).css( 'opacity', '1' ).unblock();
// Cart page elements
if ( item_count == 0 && ($('body').hasClass('woocommerce-cart') || $('body').hasClass('woocommerce-checkout')) ) {
$( '.page-content' ).load( this_page + ' .page-content:eq(0) > *', function() {
$( '.page-content' ).stop( true ).css( 'opacity', '1' ).unblock();
});
} else {
$( '.shop_table.cart' ).load( this_page + ' .shop_table.cart:eq(0) > *', function() {
$( '.shop_table.cart' ).stop( true ).css( 'opacity', '1' ).unblock();
});
$( '.cart_totals' ).load( this_page + ' .cart_totals:eq(0) > *', function() {
$( '.cart_totals' ).stop( true ).css( 'opacity', '1' ).unblock();
});
// Checkout page elements
$( '.shop_table.review-order' ).load( this_page + ' .shop_table.review-order:eq(0) > *', function() {
$( '.shop_table.review-order' ).stop( true ).css( 'opacity', '1' ).unblock();
});
}
}
});
return false;
});
};
var refreshCartFragment = function() {
initAjaxRemoveCartItem();
if ( $.cookie( 'woocommerce_items_in_cart' ) > 0 ) {
$( '.hide_cart_widget_if_empty' ).closest( '.widget_shopping_cart' ).show();
} else {
$( '.hide_cart_widget_if_empty' ).closest( '.widget_shopping_cart' ).hide();
}
};
var updateCartFragment = function(data) {
if (data && data.fragments) {
var fragments = data.fragments,
cart_hash = data.cart_hash;
$.each(fragments, function(key, value) {
$(key).replaceWith(value);
});
if ( typeof wc_cart_fragments_params === 'undefined' ) {
return;
}
/* Storage Handling */
if ( $supports_html5_storage ) {
var prev_cart_hash = sessionStorage.getItem( 'wc_cart_hash' );
if ( prev_cart_hash === null || prev_cart_hash === undefined || prev_cart_hash === '' ) {
setCartCreationTimestamp();
}
sessionStorage.setItem( wc_cart_fragments_params.fragment_name, JSON.stringify( fragments ) );
setCartHash( cart_hash );
}
}
};
$(function() {
refreshCartFragment();
// add ajax cart loading
$(document).on('click', '.add_to_cart_button', function(e) {
var $this = $(this);
if ( $this.is('.product_type_simple') ) {
if ( $this.attr('data-product_id') ) {
$this.addClass('product-adding');
}
//add to cart notifaction style 2
if( $this.hasClass('viewcart-style-2') ){
$('body').append('
');
if (!$(this).closest('.product').find('.loader-container').length) {
$(this).closest('.product').find('.product-image').append('');
}
$(this).closest('.product').find('.loader-container').show();
}
}
});
// add to cart action
$(document).on('click', 'span.add_to_cart_button', function(e) {
var $this = $(this);
if ( $this.is('.product_type_simple') ) {
if ( !$this.attr('data-product_id') ) {
window.location.href = $this.attr('href');
}
} else {
window.location.href = $this.attr('href');
}
});
$('body').bind('added_to_cart', function() {
$('ul.products li.product .added_to_cart').remove();
initAjaxRemoveCartItem();
});
$(document.body).bind('wc_fragments_refreshed wc_fragments_loaded', function() {
refreshCartFragment();
});
$(document).on( 'click', '.product-image .viewcart, .after-loading-success-message .viewcart', function( e ){
if (wc_add_to_cart_params.cart_url) {
window.location.href = wc_add_to_cart_params.cart_url;
}
e.preventDefault();
});
var porto_product_add_cart_timer = null;
$(document).on('added_to_cart', 'body', function(event) {
$('.add_to_cart_button.product-adding').each(function() {
var $link = $(this);
$link.removeClass('product-adding');
if ($link.hasClass('viewcart-style-1')) {
$link.closest('.product').find('.viewcart').addClass('added');
} else {
//add to cart notifaction style 2
$('body #loading-mask').remove();
$link.closest('.product').find('.loader-container').hide();
if ($link.closest('li.outofstock').length) {
return;
}
$('.after-loading-success-message .product-name').text($link.closest('.product').find('.woocommerce-loop-product__title').text());
$('.after-loading-success-message .msg-box img').remove();
if ($link.closest('.product').find('.product-image img').length) {
$link.closest('.product').find('.product-image img').eq(0).clone().appendTo('.after-loading-success-message .msg-box');
}
$('.after-loading-success-message').eq(0).stop().show();
if (porto_product_add_cart_timer) {
clearTimeout(porto_product_add_cart_timer);
}
porto_product_add_cart_timer = setTimeout(function() { $('.after-loading-success-message').eq(0).hide(); }, 4000);
$('.continue_shopping').click(function(){ $('.after-loading-success-message').eq(0).fadeOut(200); });
}
});
});
$(document).on("click", ".variations_form .variations .filter-item-list .filter-color, .variations_form .variations .filter-item-list .filter-item", function(e) {
e.preventDefault();
if ($(this).closest("ul").next("select").length < 1 || $(this).hasClass('disabled')) {
return;
}
var value = unescape($(this).data("value")),
selector = $(this).closest("ul").next("select");
if ($(this).closest("li").hasClass("active")) {
$(this).closest("li").removeClass("active");
selector.children("option:selected").removeAttr("selected");
selector.val('');
} else {
$(this).closest("ul").children("li").removeClass("active");
$(this).closest("li").addClass("active");
selector.children("option:selected").removeAttr("selected");
selector.children("option[value='" + value + "']").attr("selected", "selected");
selector.val(selector.children("option[value='" + value + "']").val());
}
selector.change();
});
$(document).on('wc_variation_form', '.variations_form', function() {
$(this).addClass('vf_init');
if ($(this).find('.filter-item-list').length < 1) {
return;
}
$(this).find('.variations select').trigger('focusin');
});
$(document).on('updated_wc_div', function() {
$('.woocommerce-cart-form .porto-lazyload').themePluginLazyLoad();
});
$(document).on('found_variation reset_data', '.variations_form', function(e, args) {
// attribute description
if ($(this).find('.product-attr-description').length) {
if (typeof args == 'undefined') {
$(this).find('.product-attr-description').removeClass('active');
} else {
$(this).find('.product-attr-description').addClass('active');
$(this).find('.product-attr-description .attr-desc').removeClass('active');
$(this).find('.product-attr-description .attr-desc[data-attrid="' + $(this).find('.variations select').val() + '"]').addClass('active');
}
}
if ($(this).find(".filter-item-list").length < 1) {
return;
}
$(this).find(".filter-item-list").each(function() {
if ($(this).next("select").length < 1) {
return;
}
var selector = $(this).next("select"),
//html = '',
$list = $(this);
$list.find('li.active').removeClass('active');
$list.find('.filter-color, .filter-item').removeClass('enabled').removeClass('disabled');
selector.children("option").each(function() {
/*var isColor = typeof $(this).data('color') != 'undefined' ? true : false,
isImage = typeof $(this).data('image') != 'undefined' ? true : false,
spanClass = isColor ? "filter-color" : ( isImage ? "filter-item filter-image" : "filter-item" );*/
if (!$(this).val()) {
return;
}
$list.find('[data-value="' + $(this).val() + '"]').addClass('enabled');
if ($(this).val() == selector.val()) {
$list.find('[data-value="' + $(this).val() + '"]').parent().addClass('active');
}
/*html += '';
if (!isColor) {
html += $(this).text();
}
html += '';*/
});
$list.find('.filter-color:not(.enabled), .filter-item:not(.enabled)').addClass('disabled');
//$(this).html(html);
});
});
// daily sale
$(document).on('found_variation reset_data', '.variations_form', function(e, obj) {
var $timer = $(this).closest('.product').find('.sale-product-daily-deal.for-some-variations');
if (!$timer.length) {
return;
}
if (obj && obj.is_purchasable && typeof obj.porto_date_on_sale_to != 'undefined' && obj.porto_date_on_sale_to) {
var saleTimer = $timer.find('.porto_countdown-dateAndTime');
if (saleTimer.data('terminal-date') != obj.porto_date_on_sale_to) {
var newDate = new Date(obj.porto_date_on_sale_to);
saleTimer.porto_countdown('option', {until: newDate});
saleTimer.data('terminal-date', obj.porto_date_on_sale_to);
}
$timer.slideDown();
} else {
if ($timer.is(':hidden')) {
$timer.hide();
} else {
$timer.slideUp();
}
}
});
$('body').on('click', '.product-attr-description > a', function(e) {
e.preventDefault();
$(this).next().stop().slideToggle(400);
});
});
}).apply(this, [window.theme, jQuery]);
// Woocommerce Category Filter
(function(theme, $) {
/**
Copyright (c) 2010, All Right Reserved, Wong Shek Hei @ shekhei@gmail.com
License: GNU Lesser General Public License (http://www.gnu.org/licenses/lgpl.html)
**/
var expr = /[.#\w].([\S]*)/g, classexpr = /(?!(\[))(\.)[^.#[]*/g, idexpr = /(#)[^.#[]*/, tagexpr = /^[\w]+/, varexpr = /(\w+?)=(['"])([^\2$]*?)\2/, simpleselector = /^[\w]+$/, parseSelector = function (d) {
for (var c = {sel: [], val: []}, a = [], j = !1, h = "", e = [], f = 0, m = d.length; f < m; f++) {
var g = d.charAt(f);
if (j)if ("\\" === g && f + 1 < d.length)e.push(d.charAt(++f)); else if (h === g)h = "", e.push(g); else if (("'" === g || '"' === g) && "" === h)h = g, e.push(g); else if ("]" === g && "" === h)c.val.push(e.join("")), e = [], j = !1; else {
if ("]" !== g || "" !== h)"" === h && "," === g ? (c.val.push(e.join("")),
e = []) : e.push(g)
} else"\\" === g && f + 1 < d.length ? j && e.push(d.charAt(++f)) : "[" === g && "" === h ? j = !0 : " " === g || "+" === g ? (c.sel = c.sel.join(""), a.push(c), "+" === g && a.push({sel: "+", val: ""}), c = {sel: [], val: []}) : " " !== g && "]" !== g && c.sel.push(g)
}
if (0 != c.sel.length || 0 != c.val.length)c.sel = c.sel.join(""), a.push(c);
for (f = 0; f < a.length; f++) {
c = a[f].sel;
if ("+" === c)b.tag = c; else {
var b = [];
b.tag = tagexpr.exec(c);
b.id = idexpr.exec(c);
b.id && $.isArray(b.id) && (b.id = b.id[0].substr(1));
b.tag || (b.tag = "div");
b.vars = [];
for (d = 0; d < a[f].val.length; d++)h =
a[f].val[d].indexOf("="), j = a[f].val[d].substr(0, h), h = a[f].val[d].substr(h + 1), h = h.replace(/^[\s]*[\"\']*|[\"\']*[\s]*$/g, ""), "text" === j ? b.text = h : b.vars.push([j, h]);
c = c.match(classexpr);
j = [];
if (c) {
for (d = 0; d < c.length; d++)j.push(c[d].substr(1));
b.className = j.join(" ")
}
}
a[f] = b
}
return a
}, rmFromParent = function (d) {
var c = d.parentNode, a = d.nextSibling;
c.removeChild(d);
return a ? function () {
c.insertBefore(d, a)
} : function () {
c.appendChild(d)
}
}, nonArrVer = function (d, c) {
var a = [], a = simpleselector.test(d) ? [
{tag: d}
] : parseSelector(d),
j = [];
"undefined" === typeof c && (c = 1);
for (var h = [], e = [], f = [], m = document.createElement("div"), g = 0, b = 0; b < a.length; b++) {
if ("+" == a[b].tag)e = f.slice(), --g; else {
for (var l = 0; l < c; l++) {
var k;
if ("input" == a[b].tag) {
k = [];
k.push("<" + a[b].tag);
a[b].id && k.push("id='" + a[b].id + "'");
a[b].className && (k.push("class='" + a[b].className), b + 1 === a.length && k.push(lastClass), k.push("'"));
if (a[b].vars)for (var n = 0; n < a[b].vars.length; n++)k.push(a[b].vars[n][0] + "='" + a[b].vars[n][1] + "'");
a[b].text && k.push("value='" + a[b].text + "'");
k.push("/>");
f[l] = e[l];
e[l] ? (e[l].innerHTML += k.join(" "), e[l] = e[l].lastChild) : (m.innerHTML = k.join(" "), e[l] = m.removeChild(m.firstChild))
} else {
k = document.createElement(a[b].tag);
if (a[b].vars)for (var n = 0; n < a[b].vars.length; n++)k.setAttribute(a[b].vars[n][0], a[b].vars[n][1]);
a[b].id && (k.id = a[b].id);
a[b].className && (k.className = a[b].className);
a[b].text && k.appendChild(document.createTextNode(a[b].text));
f[l] = e[l];
e[l] = e[l] ? e[l].appendChild(k) : k
}
}
g++ || Array.prototype.push.apply(h, e);
}
j = $.merge(j, e);
}
return $(h)
}, arrVer = function (d, c, a) {
for (var j = d.match(/%[^%]*%/g) || [], h = [], e = 0; e < c.length; e++) {
for (var f = d, m = 0; m < j.length; m++)var g = j[m].substr(1, j[m].length - 2), f = f.replace(j[m], c[e][g]);
h = $.merge(h, nonArrVer(f, a))
}
return $(h)
};
$.porto_jseldom = function (d) {
if (2 == arguments.length && $.isPlainObject(arguments[1]))return arrVer.apply(this, [arguments[0], [arguments[1]]]);
if (1 == arguments.length || 2 == arguments.length && !$.isArray(arguments[1]))return nonArrVer.apply(this, arguments);
if (2 == arguments.length)return arrVer.apply(this, arguments)
};
var refreshPriceSlider = function() {
var $price_slider = $('.price_slider');
if ($price_slider.length) {
// woocommerce_price_slider_params is required to continue, ensure the object exists
if ( typeof woocommerce_price_slider_params === 'undefined' ) {
return false;
}
// Get markup ready for slider
$( 'input#min_price, input#max_price' ).hide();
$( '.price_slider, .price_label' ).show();
// Price slider uses jquery ui
var min_price = $( '.price_slider_amount #min_price' ).data( 'min' ),
max_price = $( '.price_slider_amount #max_price' ).data( 'max' ),
current_min_price = parseInt( $( '.price_slider_amount #min_price').val() ? $( '.price_slider_amount #min_price').val() : min_price, 10 ),
current_max_price = parseInt( $( '.price_slider_amount #max_price').val() ? $( '.price_slider_amount #max_price').val() : max_price, 10 );
$( '.price_slider' ).slider({
range: true,
animate: true,
min: min_price,
max: max_price,
values: [ current_min_price, current_max_price ],
create: function() {
$( '.price_slider_amount #min_price' ).val( current_min_price );
$( '.price_slider_amount #max_price' ).val( current_max_price );
$( document.body ).trigger( 'price_slider_create', [ current_min_price, current_max_price ] );
},
slide: function( event, ui ) {
$( 'input#min_price' ).val( ui.values[0] );
$( 'input#max_price' ).val( ui.values[1] );
$( document.body ).trigger( 'price_slider_slide', [ ui.values[0], ui.values[1] ] );
},
change: function( event, ui ) {
$( document.body ).trigger( 'price_slider_change', [ ui.values[0], ui.values[1] ] );
}
});
}
// remove filter loading
$('.yith-woo-ajax-navigation, .yith-wcan-list-price-filter').removeClass('loading');
};
var categoryAjaxProcess = function(href, updateSelect2) {
var shop_before = '.shop-loop-before',
shop_after = '.shop-loop-after:not(.is-shortcode)',
shop_container = '.archive-products .products:not(.is-shortcode)',
shop_info = '.archive-products .woocommerce-info',
//$wrapper = $('#content.site-main'),
$shop_parent = $(shop_before).parent(),
$shop_container = $(shop_container),
$sticky_sidebar = $('.sidebar [data-plugin-sticky]'),
show_toolbar = $(shop_before).data('show'),
horizontal_filter = '.porto-product-filters:not(.style2)';
if (show_toolbar)
$(shop_before + ',' + shop_after).stop(true).fadeTo('400','1').block({message: null, overlayCSS: {opacity: 0.2}});
if (js_porto_vars.use_skeleton_screen.indexOf('shop') == -1) {
if ($shop_container.length) {
$shop_container.addClass('yith-wcan-loading');
if (!$shop_container.children('.porto-loading-icon').length) {
$shop_container.append('');
}
} else {
$(shop_info).html('').addClass('yith-wcan-loading products');
if (!$(shop_info).children('.porto-loading-icon').length) {
$(shop_info).append('');
}
}
} else {
if ($shop_container.length) {
$shop_container.addClass('skeleton-body');
var lg_cols;
for(var i = 1; i <= 8; i++) {
if ($shop_container.hasClass('pcols-lg-' + i)) {
lg_cols = i;
break;
}
}
if (lg_cols) {
var skeleton_html = '',
product_class = 'product product-col';
$shop_container.empty();
if ($shop_container.data('product_layout')) {
product_class += ' ' + escape( $shop_container.data('product_layout') );
}
for (var i = 0; i < lg_cols * 3; i++) {
$shop_container.append('');
}
} else {
$shop_container.find('.product-col').empty();
}
}
}
if ($(horizontal_filter).length) {
$(horizontal_filter).block({message: null, overlayCSS: {opacity: 0.2}});
}
if ($sticky_sidebar.get(0)) {
//$shop_parent.css('min-height', $sticky_sidebar.height());
theme.refreshStickySidebar(false);
}
theme.scrolltoContainer(show_toolbar ? $(shop_before) : $shop_container);
$('.yith-woo-ajax-navigation, .yith-wcan-list-price-filter').addClass('loading');
var cart_content, widget_cart;
if (widget_cart = $('.sidebar-content .widget_shopping_cart').get(0)) {
cart_content = $(widget_cart).html();
}
$.ajax({
url: href,
data: {portoajax: true},
type: "POST",
success: function (response) {
var $parent = $shop_container.parent(),
$response = $(response);
if ($sticky_sidebar.get(0))
$shop_parent.css('min-height', 0);
// products container
if ($response.find(shop_container).length) {
if ($shop_container.length && $shop_container.data('infinitescroll')) {
try {
$shop_container.data('infinitescroll').destroy();
} catch (e) {
}
}
$parent.html($response.find(shop_container));
} else {
$parent.html($response.find('.woocommerce-info'));
$parent.find('.woocommerce-info').addClass('products');
}
if ($(shop_before + ',' + shop_after).get(0))
$(shop_before + ',' + shop_after).stop(true).css('opacity', '1').unblock();
// top toolbar
if ($response.find(shop_before).length) {
if ($(shop_before).length == 0) {
$.porto_jseldom(shop_before).insertBefore($(shop_container));
}
$(shop_before)
.html($response.find(shop_before).html())
.show();
} else {
$(shop_before).empty();
}
// reset variations form
porto_woocommerce_variations_init($parent);
// horizontal filter
if ($response.find(horizontal_filter).length) {
$(horizontal_filter).html($response.find(horizontal_filter).html());
}
$(horizontal_filter).unblock();
// bottom toolbar
if ($response.find(shop_after).length) {
if ($(shop_after).length == 0) {
$.porto_jseldom(shop_after).insertAfter($(shop_container));
}
$(shop_after).html($response.find(shop_after).html()).show();
} else {
$(shop_after).empty();
}
// infinite scroll
if (typeof theme.PostsInfinite !== 'undefined') {
theme.PostsInfinite.initialize($(shop_container));
}
$('.sidebar-content').each(function(index) {
var $this = $(this),
$that = $($response.find('.sidebar-content').get(index));
$this.html($that.html());
if (typeof updateSelect2 != 'undefined' && updateSelect2) {
// Use Select2 enhancement if possible
if ( jQuery().selectWoo ) {
var porto_wc_layered_nav_select = function() {
$this.find( 'select.woocommerce-widget-layered-nav-dropdown' ).each(function() {
$(this).selectWoo( {
placeholder: $(this).find('option').eq(0).text(),
minimumResultsForSearch: 5,
width: '100%',
allowClear: typeof $(this).attr('multiple') != 'undefined' && $(this).attr('multiple') == 'multiple' ? 'false' : 'true'
} );
});
};
porto_wc_layered_nav_select();
}
$('body').children('span.select2-container').remove();
}
});
var $script = $response.filter('script:contains("var woocommerce_price_slider_params")').first();
if ($script && $script.length && $script.text().indexOf('{') !== -1 && $script.text().indexOf('}') !== -1) {
var arrStr = $script.text().substring($script.text().indexOf('{'), $script.text().indexOf('}') + 1);
window.woocommerce_price_slider_params = JSON.parse(arrStr);
} else {
window.woocommerce_price_slider_params = undefined;
}
//update browser history (IE doesn't support it)
if (!navigator.userAgent.match(/msie/i)) {
window.history.pushState({"pageTitle": response.pageTitle}, "", href);
}
//trigger ready event
$(document).trigger("yith-wcan-ajax-filtered");
if (widget_cart = $('.sidebar-content .widget_shopping_cart').get(0)) {
$('.sidebar-content .widget_shopping_cart').html(cart_content);
if ( $.cookie( 'woocommerce_items_in_cart' ) > 0 ) {
$( '.hide_cart_widget_if_empty' ).closest( '.widget_shopping_cart' ).show();
} else {
$( '.hide_cart_widget_if_empty' ).closest( '.widget_shopping_cart' ).hide();
}
}
}
});
};
function porto_update_url_param(uri, key, value) {
var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
var separator = uri.indexOf('?') !== -1 ? "&" : "?";
if (uri.match(re)) {
return uri.replace(re, '$1' + key + "=" + value + '$2');
} else {
return uri + separator + key + "=" + value;
}
}
var categoryAjax = function () {
// add class in price filter widget
$('.widget_price_filter').addClass('yith-wcan-list-price-filter');
if (theme.category_ajax) {
// order by ajax
$( '.woocommerce-ordering' ).off( 'change', 'select.orderby' ).on( 'change', 'select.orderby', function(e) {
e.preventDefault();
var $this = $(this),
$form = $this.closest('form'),
href = '?' + $form.serialize();
categoryAjaxProcess(href);
});
// view ajax
$( '.woocommerce-viewing' ).off( 'change', 'select.count' ).on( 'change', 'select.count', function(e) {
e.preventDefault();
var $this = $(this),
$form = $this.closest('form'),
href = '?' + $form.serialize();
categoryAjaxProcess(href);
});
// pagination ajax
$( '.woocommerce-pagination:not(.load-more)' ).each(function() {
if ($(this).closest('.porto-products').length) {
return;
}
$(this).off( 'click', 'a.page-numbers' ).on( 'click', 'a.page-numbers', function(e) {
e.preventDefault();
var href = this.href;
categoryAjaxProcess(href);
});
});
// yith filter
$(document).off('click', '.yith-wcan a').on('click', '.yith-wcan a', function (e) {
$(this).yith_wcan_ajax_filters(e, this);
});
// price filter ajax
$( '.widget_price_filter .price_slider_wrapper').off( 'click', '.button').on( 'click', '.button', function(e) {
e.preventDefault();
var $this = $(this),
$form = $this.closest('form'),
action = $form.attr('action'),
href = action + ( -1 === action.indexOf('?') ? '?' : '&' ) + $form.serialize(),
$count = $('.woocommerce-viewing select.count');
if ($count.length) {
var count = $('.woocommerce-viewing select.count').val();
if (count != $count.find('option:not([disabled]):first').val()) {
href += '&count=' + count;
}
}
$('.widget_price_filter').removeClass('yith-wcan-list-price-filter');
categoryAjaxProcess(href);
});
$( '.porto_widget_price_filter').off( 'click', '.button').on( 'click', '.button', function(e) {
e.preventDefault();
var $this = $(this),
$form = $this.closest('form'),
action = $form.attr('action'),
$count = $('.woocommerce-viewing select.count'),
hrefArr = $form.serializeArray(),
href = action;
$.each(hrefArr, function(i, field){
if ($.trim(field.value)) {
if (action.indexOf('?') == -1 && href == action) {
href += '?';
} else {
href += '&';
}
href += (field.name + "=" + $.trim(field.value));
}
});
if ($count.length) {
var count = $('.woocommerce-viewing select.count').val();
if (count != $count.find('option:not([disabled]):first').val()) {
if (href.indexOf('?') == -1) {
href += '?count=' + count;
} else {
href += '&count=' + count;
}
}
}
categoryAjaxProcess(href);
});
// layerd nav filter
$('.widget_layered_nav, .widget_rating_filter, .widget_layered_nav_filters').off('click', 'a').on('click', 'a', function(e) {
if ($(this).hasClass('yit-wcan-select-open'))
return;
e.preventDefault();
var $this = $(this),
href = $this.attr('href'),
$count = $('.woocommerce-viewing select.count');
if ($count.length) {
var count = $('.woocommerce-viewing select.count').val();
if (count != $count.find('option:not([disabled]):first').val()) {
href += '&count=' + count;
}
}
var yith_select = $this.closest('.yith-wcan-select');
if (yith_select.get(0)) {
yith_select.parent().css({"opacity":0, "z-index":-1});
}
categoryAjaxProcess(href);
return false;
});
$('.widget_layered_nav select').off('change').on('change', function(e) {
e.preventDefault();
var $this = $(this),
name = $this.closest('form').find('input[type=hidden]').length ? $this.closest('form').find('input[type=hidden]').attr('name').replace('filter_', '') : $this.attr('class').replace('dropdown_layered_nav_', ''),
slug = $this.val(),
href,
$count = $('.woocommerce-viewing select.count');
href = window.location.href;
href = href.replace(/\/page\/\d+/, "").replace("&", '&').replace("%2C", ',');
href = porto_update_url_param( href, 'filtering', '1' );
href = porto_update_url_param( href, 'filter_' + name, slug );
if ($count.length) {
var count = $('.woocommerce-viewing select.count').val();
if (count != $count.find('option:not([disabled]):first').val()) {
href = porto_update_url_param( href, 'count', count );
}
}
categoryAjaxProcess(href, name);
return false;
});
} else {
$(document).on('change', '.woocommerce-viewing select.count', function() {
$(this).closest('form').submit();
});
}
};
var ajaxFiltered = function(initLoad) {
var shop_before = '.shop-loop-before',
shop_after = '.shop-loop-after',
shop_container = '.archive-products .products',
$shop_parent = $(shop_before).parent(),
$sticky_sidebar = $('.sidebar [data-plugin-sticky]');
if ($sticky_sidebar.get(0)) {
$shop_parent.css('min-height', 0);
}
if ($(shop_before + ',' + shop_after).get(0))
$(shop_before + ',' + shop_after).stop(true).fadeTo('400','1').unblock();
if ($(shop_container).find('.product').get(0) || $(shop_after).closest('.porto-products').length) {
$(shop_before + ',' + shop_after).show().data('show', true);
} else {
$(shop_before + ',' + shop_after).hide().data('show', false);
if ($(shop_before).find('.porto-product-filters.style2').length) {
$(shop_before).show().data('show', true);
}
}
if (typeof initLoad == 'undefined' || !initLoad) {
porto_init();
porto_woocommerce_init();
}
$( '.woocommerce-ordering' ).off( 'change', 'select.orderby' ).on( 'change', 'select.orderby', function() {
$( this ).closest( 'form' ).submit();
});
// category ajax
refreshPriceSlider();
categoryAjax();
};
// initialize woocommerce actions after skeleton loading
var skeletonLoadingTrigger;
$('.skeleton-loading').on('skeleton-loaded', function() {
var $this = $(this);
if (skeletonLoadingTrigger) {
clearTimeout(skeletonLoadingTrigger);
}
porto_woocommerce_variations_init($this);
skeletonLoadingTrigger = setTimeout(function() {
porto_woocommerce_init();
refreshPriceSlider();
if ($('body').hasClass('single-product')) {
theme.WooVariationForm.init();
if ($('.product-image-slider').length && $('.product-image-slider').data('owl.carousel')) {
$('.product-image-slider').trigger('refresh.owl.carousel');
} else {
theme.WooProductImageSlider.initialize();
}
$('.wc-tabs-wrapper, .woocommerce-tabs, #rating').trigger('init');
}
// refresh cart content
if ($this.find('.widget_shopping_cart_content').length) {
$(document.body).trigger('wc_fragment_refresh');
}
}, 100);
});
$(function() {
// yith woo ajax filter events
if (typeof yith_wcan != 'undefined') {
yith_wcan.container = '.archive-products .products';
yith_wcan.pagination = '.shop-loop-before';
yith_wcan.result_count = '.shop-loop-after';
}
$(document).on('click', '.yith-wcan a', function(e){
// add price filter loading
var shop_before = '.shop-loop-before',
shop_after = '.shop-loop-after',
shop_container = '.archive-products .products',
shop_info = '.archive-products .woocommerce-info',
//$shop_parent = $(shop_before).parent(),
$sticky_sidebar = $('.sidebar [data-plugin-sticky]'),
show_toolbar = $(shop_before).data('show');
if (show_toolbar)
$(shop_before + ',' + shop_after).stop(true).show().fadeTo('400','0.8').block({message: null, overlayCSS: {opacity: 0.2}});
if ($(shop_container).length) {
$(shop_container).html('').addClass('yith-wcan-loading');
if (!$(shop_container).children('.porto-loading-icon').length) {
$(shop_container).append('');
}
} else {
$(shop_info).html('').addClass('yith-wcan-loading products');
if (!$(shop_info).children('.porto-loading-icon').length) {
$(shop_info).append('');
}
}
if ($sticky_sidebar.get(0)) {
//$shop_parent.css('min-height', $sticky_sidebar.height());
theme.refreshStickySidebar(false);
}
$('.yith-woo-ajax-navigation, .yith-wcan-list-price-filter').addClass('loading');
theme.scrolltoContainer(show_toolbar ? $(shop_before) : $(shop_container));
});
$(document).ready(function() {
ajaxFiltered(true);
});
$(document).on('yith-wcan-ajax-filtered', function() {
ajaxFiltered();
});
//categoryAjax();
// product filter ajax
if (theme.prdctfltr_ajax) {
// select count
$(document).on( 'change', '.woocommerce-viewing select.count', function() {
$( this ).closest( 'form' ).submit();
});
// page number
$(document).on( 'click', '.woocommerce-pagination:not(.load-more) a.page-numbers', function(e) {
theme.scrolltoContainer($('.shop-loop-before'));
});
}
// woocommerce grid / list
$(document).on('click', '.gridlist-toggle #grid, .gridlist-toggle #list', function(e) {
e.preventDefault();
var $this = $(this);
if ($this.hasClass('active')) {
return false;
}
$('.gridlist-toggle #grid, .gridlist-toggle #list').removeClass('active');
$this.addClass('active');
if ($.cookie) {
$.cookie('gridcookie', $this.attr('id'), { path: '/' });
}
if (js_porto_vars.use_skeleton_screen.indexOf('shop') != -1) {
$('.gridlist-toggle').parent().parent().find('ul.products').removeClass('grid').removeClass('list').addClass($this.attr('id'));
}
categoryAjaxProcess(window.location.href);
return false;
});
});
}).apply(this, [window.theme, jQuery]);
// Woocommerce Product Image Slider
(function(theme, $) {
theme = theme || {};
var duration = 300,
flag = false;
$.extend(theme, {
WooProductImageSlider: {
defaults: {
elements: '.product-image-slider'
},
initialize: function($elements) {
this.$elements = ($elements || $(this.defaults.elements));
this.build();
return this;
},
build: function() {
var self = this,
thumbs_count = theme.product_thumbs_count;
if (theme.product_zoom && (!('ontouchstart' in document) || (('ontouchstart' in document) && theme.product_zoom_mobile))) {
var zoomConfig = {
responsive: true,
zoomWindowFadeIn: 200,
zoomWindowFadeOut: 100,
zoomType: js_porto_vars.zoom_type,
cursor: 'grab'
};
if (js_porto_vars.zoom_type == 'lens') {
zoomConfig.scrollZoom = js_porto_vars.zoom_scroll;
zoomConfig.lensSize = js_porto_vars.zoom_lens_size;
zoomConfig.lensShape = js_porto_vars.zoom_lens_shape;
zoomConfig.containLensZoom = js_porto_vars.zoom_contain_lens;
zoomConfig.lensBorderSize = js_porto_vars.zoom_lens_border;
zoomConfig.borderColour = js_porto_vars.zoom_border_color;
}
if (js_porto_vars.zoom_type == 'inner') {
zoomConfig.borderSize = 0;
} else {
zoomConfig.borderSize = js_porto_vars.zoom_border;
}
}
self.$elements.each(function() {
var $this = $(this),
$product = $this.closest('.product');
if (!$product.length) {
$product = $this.closest('.product_layout');
}
var $thumbs_slider = $product.find('.product-thumbs-slider'),
$thumbs = $product.find('.product-thumbnails-inner'),
$thumbs_vertical_slider = $product.find('.product-thumbs-vertical-slider'),
currentSlide = 0,
count = $this.find('> *').length;
$this.find('> *:first-child').waitForImages(true).done(function() {
$thumbs_slider.owlCarousel({
rtl: theme.rtl,
loop : false,
autoplay : false,
items : thumbs_count,
nav: false,
navText: ["", ""],
dots: false,
rewind: true,
margin: 8,
stagePadding: 1,
lazyLoad: true,
onInitialized: function() {
self.selectThumb(null, $thumbs_slider, 0);
if ($thumbs_slider.find('.owl-item').length >= thumbs_count)
$thumbs_slider.append('');
}
}).on('click', '.owl-item', function() {
self.selectThumb($this, $thumbs_slider, $(this).index());
});
if ($thumbs_vertical_slider.length > 0) {
$thumbs_vertical_slider.slick({
dots: false,
vertical: true,
slidesToShow: thumbs_count > 2 ? thumbs_count - 1 : thumbs_count,
slidesToScroll: 1
}).on('click', '.img-thumbnail', function() {
self.selectVerticalSliderThumb($this, $thumbs_vertical_slider, $(this).data('slick-index'));
});
self.selectVerticalSliderThumb(null, $thumbs_vertical_slider, 0);
if ($thumbs_vertical_slider.find('.porto-lazyload').length) {
setTimeout(function() {
$thumbs_vertical_slider.find('.slick-cloned .porto-lazyload:not(.lazy-load-loaded)').each(function() {
$(this).attr('src', $(this).data('oi')).removeAttr('data-oi').addClass('lazy-load-loaded');
});
}, 100);
}
}
self.selectVerticalThumb(null, $thumbs, 0);
$thumbs.on('click', '.img-thumbnail', function() {
self.selectVerticalThumb($this, $thumbs, $(this).index());
});
$thumbs_slider.on('click', '.thumb-prev', function(e) {
var currentThumb = $thumbs_slider.data('currentThumb');
self.selectThumb($this, $thumbs_slider, --currentThumb);
});
$thumbs_slider.on('click', '.thumb-next', function(e) {
var currentThumb = $thumbs_slider.data('currentThumb');
self.selectThumb($this, $thumbs_slider, ++currentThumb);
});
var links = [];
if (theme.product_image_popup) {
var i = 0;
$this.find('img').each(function() {
var slide = {};
slide.src = $(this).attr('href');
slide.title = $(this).attr('alt');
links[i] = slide;
i++;
});
}
var itemsCount = typeof $this.data('items') != 'undefined' ? $this.data('items') : 1,
itemsResponsive = typeof $this.data('responsive') != 'undefined' ? $this.data('responsive') : {},
centerItem = typeof $this.data('centeritem') != 'undefined' ? true : false;
for (var itemCount in itemsResponsive) {
itemsResponsive[itemCount] = { items: itemsResponsive[itemCount] };
}
$this.owlCarousel({
rtl: theme.rtl,
loop : (count > 1) ? true : false,
autoplay : false,
items : itemsCount,
responsive: itemsResponsive,
autoHeight : true,
nav: true,
navText: ["", ""],
dots: false,
rewind: true,
lazyLoad: true,
center: centerItem,
onInitialized : function() {
//$this.find('.cloned .porto-lazyload:not(.lazy-load-loaded)').themePluginLazyLoad();
if (theme.product_zoom && (!('ontouchstart' in document) || (('ontouchstart' in document) && theme.product_zoom_mobile))) {
$this.find('img').each(function() {
var $this = $(this);
zoomConfig.zoomContainer = $this.parent();
if ($.fn.elevateZoom) {
$this.elevateZoom(zoomConfig);
} else {
setTimeout(function() {
if ($.fn.elevateZoom) {
$this.elevateZoom(zoomConfig);
}
}, 1000);
}
});
}
},
onTranslate : function(event) {
currentSlide = event.item.index - $this.find('.cloned').length / 2;
currentSlide = (currentSlide + event.item.count) % event.item.count;
self.selectThumb(null, $thumbs_slider, currentSlide);
self.selectVerticalThumb(null, $thumbs, currentSlide);
self.selectVerticalSliderThumb(null, $thumbs_vertical_slider, currentSlide);
/*var $obj = event.relatedTarget.items(currentSlide).find('img.owl-lazy:not(.owl-lazy-loaded)');
if ($obj.length) {
var src = $obj.attr('href'),
elevateZoom = $obj.data('elevateZoom'),
smallImage = $obj.data('src') ? $obj.data('src') : $obj.attr('src');
if (typeof elevateZoom != 'undefined') {
elevateZoom.swaptheimage(smallImage, src);
}
}*/
},
onRefreshed: function() {
if (theme.product_zoom && (!('ontouchstart' in document) || (('ontouchstart' in document) && theme.product_zoom_mobile))) {
$this.find('img').each(function() {
var $this = $(this),
src = typeof $this.attr('href') != 'undefined' ? $this.attr('href') : $this.attr('src'),
elevateZoom = $this.data('elevateZoom'),
smallImage = $this.data('src') ? $this.data('src') : $this.attr('src');
if (typeof elevateZoom != 'undefined') {
elevateZoom.startZoom();
elevateZoom.swaptheimage(smallImage, src);
}
});
}
}
});
$this.data('links', links);
if (theme.product_image_popup) {
var $zoom_buttons = $this.next();
$zoom_buttons.off('click').on('click', function(e) {
e.preventDefault();
if ($.fn.magnificPopup) {
$.magnificPopup.close();
$.magnificPopup.open($.extend(true, {}, theme.mfpConfig, {
items: $this.data('links'),
gallery: {
enabled: true
},
type: 'image'
}), currentSlide);
}
});
}
});
});
return self;
},
selectThumb: function($image_slider, $thumbs_slider, index) {
if (flag || !$thumbs_slider.length ) return;
flag = true;
var len = $thumbs_slider.find('.owl-item').length,
actives = [],
i = 0;
index = (index + len) % len;
if ($image_slider) {
$image_slider.trigger('to.owl.carousel', [index, duration, true]);
}
$thumbs_slider.find('.owl-item').removeClass('selected');
$thumbs_slider.find('.owl-item:eq(' + index + ')').addClass('selected');
$thumbs_slider.data('currentThumb', index);
$thumbs_slider.find('.owl-item.active').each(function() {
actives[i++] = $(this).index();
});
if ($.inArray(index, actives) == -1) {
if (Math.abs(index - actives[0]) > Math.abs(index - actives[actives.length - 1])) {
$thumbs_slider.trigger('to.owl.carousel', [(index - actives.length + 1) % len, duration, true]);
} else {
$thumbs_slider.trigger('to.owl.carousel', [index % len, duration, true]);
}
}
flag = false;
},
selectVerticalSliderThumb: function($image_slider, $thumbs_vertical_slider, index) {
if (flag || !$thumbs_vertical_slider.length ) return;
flag = true;
var len = $thumbs_vertical_slider[0].slick.slideCount,
actives = [],
i = 0;
index = (index + len) % len;
if ($image_slider) {
$image_slider.trigger('to.owl.carousel', [index, duration, true]);
}
$thumbs_vertical_slider.find('.img-thumbnail').removeClass('selected');
$thumbs_vertical_slider.find('.img-thumbnail:eq(' + index + ')').addClass('selected');
$thumbs_vertical_slider.data('currentThumb', index);
$thumbs_vertical_slider.find('.img-thumbnail.slick-active').each(function() {
actives[i++] = $(this).index();
});
if ($.inArray(index, actives) == -1) {
if (Math.abs(index - actives[0]) > Math.abs(index - actives[actives.length - 1])) {
$thumbs_vertical_slider.get(0).slick.goTo((index - actives.length + 1) % len, false);
} else {
$thumbs_vertical_slider.get(0).slick.goTo(index % len, false);
}
}
flag = false;
},
selectVerticalThumb: function($image_slider, $thumbs, index) {
if (flag || !$thumbs.length ) return;
flag = true;
var len = $thumbs.find('.img-thumbnail').length,
i = 0;
index = (index + len) % len;
if ($image_slider) {
$image_slider.trigger('to.owl.carousel', [index, duration, true]);
}
$thumbs.find('.img-thumbnail').removeClass('selected');
$thumbs.find('.img-thumbnail:eq(' + index + ')').addClass('selected');
$thumbs.data('currentThumb', index);
flag = false;
}
}
});
}).apply(this, [window.theme, jQuery]);
// Woocommerce Quick View
(function(theme, $) {
theme = theme || {};
$.extend(theme, {
WooQuickView: {
initialize: function() {
this.events();
return this;
},
events: function() {
var self = this;
$(document).on('click', '.quickview', function(e) {
e.preventDefault();
if (!$.fn.elevateZoom && !$('#porto-script-jquery-elevatezoom').length) {
var js = document.createElement('script');
js.id = 'porto-script-jquery-elevatezoom';
$(js).appendTo('body').attr('src', js_porto_vars.ajax_loader_url.replace('/images/ajax-loader@2x.gif', '/js/libs/jquery.elevatezoom.min.js'));
}
var $this = $(this),
pid = $this.attr('data-id');
function init_quick_view_window() {
var args = {
href : theme.ajax_url,
ajax : {
data: {
action: 'porto_product_quickview',
variation_flag: typeof wc_add_to_cart_variation_params !== 'undefined',
pid: pid,
nonce: js_porto_vars.porto_nonce
}
},
type : 'ajax',
helpers : {
overlay: {
locked: true,
fixed: true
}
},
tpl: {
error : '' + theme.request_error + '
',
closeBtn : '',
next : '',
prev : ''
},
autoSize: true,
autoWidth: true,
afterShow: function(flag) {
setTimeout(function() {
if (typeof flag == 'undefined' || flag) {
porto_woocommerce_init();
}
theme.WooProductImageSlider.initialize($('.quickview-wrap-' + pid).find('.product-image-slider'));
// Variation Form
var form_variation = $('.quickview-wrap-' + pid).find('form.variations_form');
if (form_variation.length > 0) {
form_variation.wc_variation_form();
//form_variation.find("select option:selected").removeAttr("selected");
}
$(document.body).trigger('porto_init_countdown', [$('.quickview-wrap-' + pid)]);
}, 200);
},
onUpdate: function() {
setTimeout(function() {
if (js_porto_vars.use_skeleton_screen.indexOf('quickview') == -1 || !js_porto_vars.quickview_skeleton) {
porto_woocommerce_init();
}
var $slider = $('.quickview-wrap-' + pid).find('.product-image-slider');
if (typeof $slider.data('owl.carousel') != 'undefined' && typeof $slider.data('owl.carousel')._invalidated != 'undefined')
$slider.data('owl.carousel')._invalidated.width = true;
$slider.trigger('refresh.owl.carousel');
$(document.body).trigger('porto_init_countdown', [$('.quickview-wrap-' + pid)]);
}, 300);
}
};
if (js_porto_vars.use_skeleton_screen.indexOf('quickview') != -1 && js_porto_vars.quickview_skeleton) {
delete args['href'];
delete args['ajax'];
args['type'] = 'inline';
$.fancybox.open(
js_porto_vars.quickview_skeleton,
args
);
$.ajax({
url: theme.ajax_url,
type: 'post',
dataType: 'html',
data: {
action: 'porto_product_quickview',
variation_flag: typeof wc_add_to_cart_variation_params !== 'undefined',
pid: pid,
nonce: js_porto_vars.porto_nonce
},
success: function(res) {
$(res).waitForImages(function() {
$('.skeleton-body.product').replaceWith($(res));
theme.WooQtyField.initialize();
$(window).trigger('resize');
args['afterShow'].call(false);
});
}
});
} else {
$.fancybox(args);
}
}
if ($.fn.fancybox) {
init_quick_view_window();
} else if (!$('#porto-script-jquery-fancybox').length) {
var js1 = document.createElement('script');
js1.id = 'porto-script-jquery-fancybox';
$(js1).appendTo('body').on('load', function() {
init_quick_view_window();
}).attr('src', js_porto_vars.ajax_loader_url.replace('/images/ajax-loader@2x.gif', '/js/libs/jquery.fancybox.min.js'));
}
return false;
});
// ajax add to cart on quickview
if (typeof wc_add_to_cart_params != 'undefined') {
$(document.body).on('click', '.single-product .single_add_to_cart_button:not(.disabled)', function(e) {
if ($(this).closest('.single-product').hasClass('product-type-external') || $(this).closest('.single-product').hasClass('product-type-grouped')) {
return true;
}
e.preventDefault();
var $button = $(this),
product_id = $button.val(),
variation_id = $button.closest('form').find('input[name="variation_id"]').val(),
quantity = $button.closest('form').find('input[name="quantity"]').val();
if ($button.hasClass('loading')) {
return false;
}
$button.removeClass('added');
$button.addClass('loading');
$button.parent().addClass('porto-ajax-loading');
if (!$button.siblings('.porto-loading-icon').length) {
$('').insertAfter($button);
}
var data = {
product_id: variation_id ? variation_id : product_id,
quantity: quantity
};
// Trigger event.
$(document.body).trigger('adding_to_cart', [$button, data]);
$.ajax({
type: 'POST',
url: wc_add_to_cart_params.wc_ajax_url.toString().replace('%%endpoint%%', 'add_to_cart'),
data: data,
dataType: 'json',
success: function(response) {
$button.parent().removeClass('porto-ajax-loading');
if (!response) {
return;
}
if (response.error && response.product_url) {
window.location = response.product_url;
return;
}
// Redirect to cart option
if (wc_add_to_cart_params.cart_redirect_after_add === 'yes') {
window.location = wc_add_to_cart_params.cart_url;
return;
}
// Trigger event.
$(document.body).trigger('added_to_cart', [response.fragments, response.cart_hash, $button]);
}
});
});
}
return self;
}
}
});
}).apply(this, [window.theme, jQuery]);
// Woocommerce Qty Field
(function(theme, $) {
theme = theme || {};
$.extend(theme, {
WooQtyField: {
initialize: function() {
this.build()
.events();
return this;
},
qty_handler: function() {
var $obj = $(this);
if ($obj.closest('.quantity').next('.add_to_cart_button[data-quantity]').length) {
var count = $obj.val();
if (count) {
$obj.closest('.quantity').next('.add_to_cart_button[data-quantity]').attr('data-quantity', count);
}
}
},
build: function() {
var self = this;
// Quantity buttons
$( 'div.quantity:not(.buttons_added), td.quantity:not(.buttons_added)' ).addClass( 'buttons_added' ).append( '' ).prepend( '' );
// Target quantity inputs on product pages
$( 'input.qty:not(.product-quantity input.qty)' ).each( function() {
var min = parseFloat( $( this ).attr( 'min' ) );
if ( min && min > 0 && parseFloat( $( this ).val() ) < min ) {
$( this ).val( min );
}
});
$( 'input.qty:not(.product-quantity input.qty)' ).off('change', self.qty_handler).on('change', self.qty_handler);
$( document ).off('click', '.quantity .plus, .quantity .minus').on( 'click', '.quantity .plus, .quantity .minus', function() {
// Get values
var $qty = $( this ).closest( '.quantity' ).find( '.qty' ),
currentVal = parseFloat( $qty.val() ),
max = parseFloat( $qty.attr( 'max' ) ),
min = parseFloat( $qty.attr( 'min' ) ),
step = $qty.attr( 'step' );
// Format values
if ( ! currentVal || currentVal === '' || currentVal === 'NaN' ) currentVal = 0;
if ( max === '' || max === 'NaN' ) max = '';
if ( min === '' || min === 'NaN' ) min = 0;
if ( step === 'any' || step === '' || step === undefined || parseFloat( step ) === 'NaN' ) step = 1;
// Change the value
if ( $( this ).is( '.plus' ) ) {
if ( max && ( max == currentVal || currentVal > max ) ) {
$qty.val( max );
} else {
$qty.val( currentVal + parseFloat( step ) );
}
} else {
if ( min && ( min == currentVal || currentVal < min ) ) {
$qty.val( min );
} else if ( currentVal > 0 ) {
$qty.val( currentVal - parseFloat( step ) );
}
}
// Trigger change event
$qty.trigger( 'change' );
});
return self;
},
events: function() {
var self = this;
$(document).ajaxComplete(function(event, xhr, options) {
self.build();
});
return self;
}
}
});
}).apply(this, [window.theme, jQuery]);
// Woocommerce Variation Form
(function(theme, $) {
theme = theme || {};
var duration = 300;
$.extend(theme, {
WooVariationForm: {
initialize: function() {
this.init().events();
return this;
},
init: function() {
$('.variations_form').each(function() {
var $variation_form = $( this ),
$reset_variations = $variation_form.find( '.reset_variations' );
if ($reset_variations.css('visibility') == 'hidden')
$reset_variations.hide();
});
return this;
},
events: function() {
var self = this;
$( document ).on( 'check_variations', '.variations_form', function( event, exclude, focus ) {
var $variation_form = $( this ),
$reset_variations = $variation_form.find( '.reset_variations' );
if ($reset_variations.css('visibility') == 'hidden')
$reset_variations.hide();
});
$( document ).on( 'reset_image', '.variations_form', function(event) {
var $product = $(this).closest( '.product, .product-col' ),
$product_img = $product.find( 'div.product-images .woocommerce-main-image' );
if ( $product.hasClass('product-col') ) { // shop pages
$product_img = $product.find( 'div.product-image .inner img:first-child' );
}
var o_src = $product_img.attr('data-o_src'),
o_title = $product_img.attr('data-o_title'),
o_href = $product_img.attr('data-o_href'),
$thumb_img = $product.find( '.woocommerce-main-thumb' ),
o_thumb_src = $thumb_img.attr('data-o_src');
var $image_slider = $product.find('.product-image-slider'),
$thumbs_slider = $product.find('.product-thumbs-slider'),
links;
if ($image_slider.length) {
$image_slider.trigger('to.owl.carousel', [0, duration, true]);
links = $image_slider.data('links');
}
if ($thumbs_slider.length) {
$thumbs_slider.trigger('to.owl.carousel', [0, duration, true]);
$thumbs_slider.find('.owl-item:eq(0)').click();
}
if ( o_src ) {
$product_img
.attr( 'src', o_src )
.attr( 'srcset', '' )
.attr( 'alt', o_title )
.attr( 'href', o_href );
$product_img.each(function() {
var elevateZoom = $(this).data('elevateZoom');
if (typeof elevateZoom != 'undefined') {
elevateZoom.swaptheimage($(this).attr( 'src' ), $(this).attr( 'src' ));
}
});
if (typeof links != 'undefined') {
links[0].src = o_href;
links[0].title = o_title;
}
}
if (o_thumb_src) {
$thumb_img.attr( 'src', o_thumb_src );
}
});
$( document ).on( 'found_variation', '.variations_form', function(event, variation) {
if (typeof variation == 'undefined') {
return;
}
var $product = $(this).closest( '.product, .product-col' ),
$image_slider = $product.find('.product-image-slider'),
$thumbs_slider = $product.find('.product-thumbs-slider'),
links;
if ($image_slider.length) {
$image_slider.trigger('to.owl.carousel', [0, duration, true]);
links = $image_slider.data('links');
}
if ($thumbs_slider.length) {
$thumbs_slider.trigger('to.owl.carousel', [0, duration, true]);
$thumbs_slider.find('.owl-item:eq(0)').click();
}
var $shop_single_image = $product.find( 'div.product-images .woocommerce-main-image' ).length ? $product.find( 'div.product-images .woocommerce-main-image' ) : $('.single-product div.product-images .woocommerce-main-image'),
productimage = $shop_single_image.attr('data-o_src'),
imagetitle = $shop_single_image.attr('data-o_title'),
imagehref = $shop_single_image.attr('data-o_href'),
$shop_thumb_image = $product.find( '.woocommerce-main-thumb'),
thumbimage = $shop_thumb_image.attr('data-o_src'),
variation_image = variation.image_src,
variation_link = variation.image_link,
variation_title = variation.image_title,
variation_thumb = variation.image_thumb;
if ( $product.hasClass('product-col') ) { // shop pages
$shop_single_image = $product.find( 'div.product-image .inner img:first-child' );
variation_image = variation.image.thumb_src;
}
if ( ! productimage ) {
productimage = $shop_single_image.attr('data-oi') ? $shop_single_image.attr('data-oi') : ( ( ! $shop_single_image.attr('src') ) ? '' : $shop_single_image.attr('src') );
$shop_single_image.attr('data-o_src', productimage );
}
if ( ! imagehref ) {
imagehref = ( ! $shop_single_image.attr('href') ) ? '' : $shop_single_image.attr('href');
$shop_single_image.attr('data-o_href', imagehref );
}
if ( ! imagetitle ) {
imagetitle = ( ! $shop_single_image.attr('alt') ) ? '' : $shop_single_image.attr('alt');
$shop_single_image.attr('data-o_title', imagetitle );
}
if ( ! thumbimage ) {
thumbimage = $shop_thumb_image.attr('data-oi') ? $shop_thumb_image.attr('data-oi') : ( ( ! $shop_thumb_image.attr('src') ) ? '' : $shop_thumb_image.attr('src') );
$shop_thumb_image.attr('data-o_src', thumbimage );
}
if ( variation_image ) {
$shop_single_image.attr( 'src', variation_image );
$shop_single_image.attr( 'srcset', '' );
$shop_single_image.attr( 'alt', variation_title );
$shop_single_image.attr( 'href', variation_link );
$shop_thumb_image.attr( 'src', variation_thumb );
if (typeof links != 'undefined') {
links[0].src = variation_link;
links[0].title = variation_title;
}
} else {
$shop_single_image.attr( 'src', productimage );
$shop_single_image.attr( 'srcset', '' );
$shop_single_image.attr( 'alt', imagetitle );
$shop_single_image.attr( 'href', imagehref );
$shop_thumb_image.attr( 'src', thumbimage );
if (typeof links != 'undefined') {
links[0].src = imagehref;
links[0].title = imagetitle;
}
}
$shop_single_image.each(function() {
var elevateZoom = $(this).data('elevateZoom');
if (typeof elevateZoom != 'undefined') {
elevateZoom.swaptheimage($(this).attr( 'src' ), $(this).attr( 'src' ));
}
});
});
// fix scrolling to top issue on fancybox quickview whenever updating variation
$( document ).on( 'found_variation reset_image', '.variations_form', function(event, variation) {
if ($(this).closest('.fancybox-inner').length && $.fancybox) {
$(window).unbind('resize.fb', $.fancybox.update);
setTimeout(function() {
$(window).bind('resize.fb', $.fancybox.update);
}, 60);
}
});
return self;
}
}
});
}).apply(this, [window.theme, jQuery]);
// Woocommerce Events
(function(theme, $) {
theme = theme || {};
$.extend(theme, {
WooEvents: {
initialize: function() {
this.events();
return this;
},
events: function() {
var self = this;
// wcml currency switcher
$('.wcml-switcher li').on('click', function(){
if ($(this).parent().attr('disabled') == 'disabled')
return;
var currency = $(this).attr('rel');
self.loadCurrency(currency);
});
// woocommerce currency switcher
$('.woocs-switcher li').on('click', function(){
if ($(this).parent().attr('disabled') == 'disabled')
return;
var currency = $(this).attr('rel');
self.loadWoocsCurrency(currency);
});
return self;
},
loadCurrency : function(currency) {
$('.wcml-switcher').attr('disabled', 'disabled');
$('.wcml-switcher').append('');
var data = {action: 'wcml_switch_currency', currency: currency};
$.ajax({
type : 'post',
url : theme.ajax_url,
data : {
action: 'wcml_switch_currency',
currency : currency
},
success: function(response) {
$('.wcml-switcher').removeAttr('disabled');
$('.wcml-switcher').find('.loading').remove();
window.location = window.location.href;
}
});
},
loadWoocsCurrency : function(currency) {
$('.woocs-switcher').attr('disabled', 'disabled');
$('.woocs-switcher').append('');
var l = window.location.href;
l = l.split('?');
l = l[0];
var string_of_get = '?';
woocs_array_of_get.currency = currency;
if (Object.keys(woocs_array_of_get).length > 0) {
jQuery.each(woocs_array_of_get, function (index, value) {
string_of_get = string_of_get + "&" + index + "=" + value;
});
}
window.location = l + string_of_get;
},
removeParameterFromUrl : function(url, parameter) {
return url
.replace(new RegExp('[?&]' + parameter + '=[^]*(#.*)?$'), '$1')
.replace(new RegExp('([?&])' + parameter + '=[^&]*&'), '$1');
}
}
});
}).apply(this, [window.theme, jQuery]);
(function(theme, $) {
$(document).ready(function() {
// Woocommerce Qty Field
if (typeof theme.WooQtyField !== 'undefined') {
theme.WooQtyField.initialize();
}
// Woocommerce Quick View
if (typeof theme.WooQuickView !== 'undefined') {
theme.WooQuickView.initialize();
}
// Woocommerce Events
if (typeof theme.WooEvents !== 'undefined') {
theme.WooEvents.initialize();
}
// disable drop down
if (!('ontouchstart' in document)) {
$('.mini-cart').on('hide.bs.dropdown', function () {
return false;
});
} else {
$('#mini-cart .cart-head').on('click', function(e) {
$(this).parent().toggleClass('open');
});
$('html,body').on('click', function(e) {
if ($('#mini-cart').hasClass('open') && !$(e.target).closest('#mini-cart').length) {
$('#mini-cart').removeClass('open');
}
});
}
$(document).on('tabactivate', '.woocommerce-tabs', function(e, ui) {
var label = $(ui).attr('aria-controls');
var panel = $('[aria-labelledby="' + label + '"');
theme.refreshVCContent(panel);
});
});
}).apply(this, [window.theme, jQuery]);
(function (theme, $, undefined) {
$(document).ready(function(){
// Woocommerce Variation Form
theme.WooVariationForm.initialize();
// Woocommerce Product Image Slider
theme.WooProductImageSlider.initialize();
porto_woocommerce_init();
$(window).bind('vc_reload', function() {
porto_woocommerce_init();
$('.type-product').addClass('product');
});
// Add wishlist popup
if (!$('#yith-wcwl-popup-message').length) {
$('body').prepend($('').attr('id', 'yith-wcwl-popup-message').html('
').hide());
}
// shop horizontal filter
$(document).on('click', '.porto-product-filters-toggle a', function(e) {
e.preventDefault();
$(this).closest('.porto-product-filters-toggle').toggleClass('opened');
var $products_wrapper = $(this).closest('#main').find('.main-content').find('ul.products'), offset, $main = $(this).closest('#main').find('.main-content-wrap');
$main.toggleClass('opened');
if ($main.hasClass('opened')) {
offset = -1;
} else {
offset = 1;
}
if ($products_wrapper.hasClass('grid')) {
var cols_lg_index = 0, cols_md_index = 0, width_lg_index = 0, width_md_index = 0;
for(var i = 1; i <= 8; i++) {
if (!cols_lg_index && $products_wrapper.hasClass('pcols-lg-' + i)) {
cols_lg_index = i;
if (i + offset >= 1) {
$products_wrapper.removeClass('pcols-lg-' + i);
$products_wrapper.addClass('pcols-lg-' + (i + offset));
}
}
if (!cols_md_index && $products_wrapper.hasClass('pcols-md-' + i)) {
cols_md_index = i;
if (i + offset >= 1) {
$products_wrapper.removeClass('pcols-md-' + i);
if (offset === -1) {
$products_wrapper.addClass('pcols-sm-' + i);
}
$products_wrapper.addClass('pcols-md-' + (i + offset));
}
}
if (!width_lg_index && $products_wrapper.hasClass('pwidth-lg-' + i)) {
width_lg_index = i;
if (i + offset >= 1) {
$products_wrapper.removeClass('pwidth-lg-' + i);
$products_wrapper.addClass('pwidth-lg-' + (i + offset));
}
}
if (!width_md_index && $products_wrapper.hasClass('pwidth-md-' + i)) {
width_md_index = i;
if (i + offset >= 1) {
$products_wrapper.removeClass('pwidth-md-' + i);
$products_wrapper.addClass('pwidth-md-' + (i + offset));
}
}
}
}
setTimeout(function() {
$(window).trigger('scroll');
}, 300);
if ($main.hasClass('opened')) {
$.cookie('porto_horizontal_filter', 'opened');
} else {
$.cookie('porto_horizontal_filter', 'closed');
}
return false;
});
if ($.cookie && 'opened' == $.cookie('porto_horizontal_filter') && $('#main .porto-products-filter-body').length && !theme.isTablet()) {
$('.porto-product-filters-toggle a').trigger('click');
$('#main .porto-products-filter-body [data-plugin-sticky]:not(.manual)').addClass('manual');
setTimeout(function() {
var $obj = $('#main .porto-products-filter-body [data-plugin-sticky].manual'),
pluginOptions = $obj.data('plugin-options');
$obj.removeClass('manual').themeSticky(pluginOptions);
setTimeout(function() {
$(window).trigger('scroll');
}, 100);
}, 500);
}
$(document).on('click', '.porto-product-filters.style2 .widget-title', function(e) {
e.preventDefault();
if ($(this).next().is(':hidden')) {
$('.porto-product-filters.style2 .widget-title').next().hide();
$('.porto-product-filters.style2 .widget').removeClass('opened');
$(this).next().show();
$(this).next().find('input[type="text"]:first-child').focus();
} else {
$(this).next().hide();
}
$(this).parent().toggleClass('opened');
return false;
});
$('body').on('click', function(e) {
if (!$(e.target).is('.porto-product-filters') && !$(e.target).is('.porto-product-filters *')) {
$('.porto-product-filters.style2 .widget-title').next().hide();
$('.porto-product-filters.style2 .widget').removeClass('opened');
}
});
// Perform AJAX login on form submit
$('body').on('submit', '#login-form-popup form', function(e){
var $form = $(this), isLogin = $form.hasClass('login');
$form.find('p.status').show().text('Please wait...').addClass('loading');
$form.find('button[type=submit]').attr('disabled', 'disabled');
$.ajax({
type: 'POST',
dataType: 'json',
url: theme.ajax_url,
data: $form.serialize() + '&action=porto_account_login_popup_' + (isLogin ? 'login' : 'register'),
success: function(data) {
$form.find('p.status').html(data.message.replace('/
/s', '')).removeClass('loading');
$form.find('button[type=submit]').removeAttr('disabled');
if (data.loggedin === true){
window.location.reload();
}
}
});
e.preventDefault();
});
// shortcodes
$(document).on('click', '.porto-products.show-category .product-categories a', function(e) {
e.preventDefault();
var $this = $(this), $form = $this.closest('.porto-products').find('.pagination-form');
$(this).parent().siblings().removeClass('current');
$(this).parent().addClass('current');
if (typeof $this.data('sort_id') != 'undefined' ) {
$form.find('input[name="orderby"]').val($this.data('sort_id'));
$form.find('input[name="category"]').val('');
}
if (typeof $this.data('cat_id') != 'undefined' ) {
$form.find('input[name="orderby"]').val($form.find('input[name="original_orderby"]').val());
$form.find('input[name="category"]').val($this.data('cat_id'));
}
var data = $form.serialize() + '&product-page=1&action=porto_woocommerce_shortcodes_products&nonce=' + js_porto_vars.porto_nonce;
$this.closest('.porto-products').find('ul.products').trigger('porto_update_products', [data, '']);
});
$(document).on('click', '.porto-products .page-numbers a', function(e) {
var $this = $(this), pagination_style,
$shop_container = $this.closest('.porto-products').find('ul.products'),
cur_page = $shop_container.data('cur_page'),
max_page = $shop_container.data('max_page'),
$form = $this.closest('.porto-products').find('.pagination-form');
e.preventDefault();
if ($this.closest('.pagination').hasClass('load-more')) {
if (!cur_page || !max_page || ++cur_page > max_page) {
return;
}
pagination_style = 'load_more';
$this.data('text', $this.text());
$this.text(js_porto_vars.loader_text);
} else {
var url = new RegExp("product-page(=|/)([^(&|/)]*)", "i").exec(this.href);
cur_page = url && unescape(url[2]) || "";
pagination_style = 'default';
}
var page_var = cur_page ? '&product-page=' + escape( cur_page ) : '', data = $form.serialize() + page_var + '&action=porto_woocommerce_shortcodes_products&nonce=' + js_porto_vars.porto_nonce;
$shop_container.trigger('porto_update_products', [data, pagination_style, $this]);
if ('default' == pagination_style) {
theme.scrolltoContainer($shop_container);
}
});
$(document).on('porto_update_products', 'ul.products', function(e, data, pagination_style, $obj) {
var $this = $(this);
if ($this.hasClass('loading')) {
return;
}
$this.addClass('loading');
if ('load_more' != pagination_style) {
$this.addClass('yith-wcan-loading');
if (!$this.children('.porto-loading-icon').length) {
$this.append('');
}
}
$.ajax({
url: theme.ajax_url,
data: data,
type: 'post',
success: function(response) {
if ($this.data('cur_page') && $(response).find('ul.products').data('cur_page')) {
$this.data('cur_page', $(response).find('ul.products').data('cur_page'));
}
if ('load_more' == pagination_style) {
$this.append($(response).find('ul.products').html());
} else {
if ($this.hasClass('owl-carousel')) {
$this.parent().css('min-height', $this.parent().height());
}
if ($this.hasClass('grid-creative') && typeof $this.attr('data-plugin-masonry') != 'undefined' ) {
$this.isotope('remove', $this.children());
var newItems = $(response).find('ul.products').children();
$this.append(newItems);
$this.isotope('appended', newItems);
$this.waitForImages(function() {
$this.isotope('layout');
});
} else {
if ($(response).find('ul.products').length) {
$this.html($(response).find('ul.products').html());
} else {
$this.html('');
}
}
}
if ($this.hasClass('owl-carousel')) {
$this.trigger('destroy.owl.carousel');
setTimeout(function() {
var pluginOptions = $this.data('plugin-options'), opts;
if (pluginOptions)
opts = pluginOptions;
$this.data('__wooProductsSlider', '').themeWooProductsSlider(opts);
$this.parent().css('min-height', '');
}, 100);
}
if ($this.closest('.porto-products').find('.shop-loop-after').length) {
if($(response).find('.shop-loop-after').length) {
$this.closest('.porto-products').find('.shop-loop-after').replaceWith($(response).find('.shop-loop-after'));
} else {
$this.closest('.porto-products').find('.shop-loop-after').remove();
}
}
if (typeof $this.data('infinitescroll') != 'undefined') {
var infinitescrollData = $this.data('infinitescroll');
infinitescrollData.options.state.currPage = 1;
$this.data('infinitescroll', infinitescrollData);
}
$this.removeClass('yith-wcan-loading');
if ('load_more' == pagination_style && typeof $obj != 'undefined' && typeof $obj.data('text') != 'undefined') {
$obj.text($obj.data('text'));
}
$(document).trigger("yith-wcan-ajax-filtered");
},
complete: function() {
$this.removeClass('loading');
}
});
});
});
// shortcode: porto_one_page_category_products
$('.porto-onepage-category.show-products .category-section .sub-category').children('.cat-item').addClass('product-col');
$(document).on('click', '.porto-onepage-category .sub-category a', function(e) {
var $this = $(this), category, data;
category = new RegExp("cat-item-([^( |\")]*)", "i").exec($this.parent().attr('class'));
category = category && unescape(category[1]) || "";
if (category) {
data = $this.closest('.category-details').find('.ajax-form').serialize() + '&action=porto_woocommerce_shortcodes_products&category_description=true&category=' + category + '&nonce=' + js_porto_vars.porto_nonce;
e.preventDefault();
$this.closest('.category-section').find('.woocommerce > ul.products').trigger('porto_update_products', [data, '']);
}
});
$(window).load(function() {
if ($('.porto-onepage-category.show-products').length) {
$('body').css('position', 'relative');
$('body').scrollspy({ target: '.porto-onepage-category.show-products .category-list', offset: theme.StickyHeader.sticky_height + theme.adminBarHeight() + theme.sticky_nav_height + 20 });
var previousScrollTop = 0, $loadObj;
$(window).on('scroll', function() {
if (!$('.porto-onepage-category.show-products.ajax-load .category-section:not(.ajax-loaded)').length) {
return;
}
var currentScrollTop = $(window).scrollTop();
if (previousScrollTop > currentScrollTop) { // up
$loadObj = $('.porto-onepage-category.show-products.ajax-load .category-section:not(.ajax-loaded)').last();
} else { //down
$loadObj = $('.porto-onepage-category.show-products.ajax-load .category-section:not(.ajax-loaded)').eq(0);
}
previousScrollTop = $(window).scrollTop();
if(!$loadObj.closest('.porto-onepage-category').hasClass('loading') && ($loadObj.offset().top <= $(window).scrollTop()+$(window).innerHeight()*0.7)) {
$loadObj.trigger('porto_load_category_products');
}
});
}
// sticky add to cart
if ($('.single-product .sticky-product').length) {
$(window).on('scroll', function() {
var scrollTop = $(window).scrollTop(),
offset = theme.adminBarHeight() + theme.StickyHeader.sticky_height;
if ($('form.cart').offset().top + $('form.cart').height() / 2 <= scrollTop + offset) {
$('.single-product .sticky-product').removeClass('hide');
if (!$('.single-product .sticky-product').hasClass('pos-bottom')) {
$('.single-product .sticky-product').css('top', offset);
}
} else {
$('.single-product .sticky-product').addClass('hide');
}
});
$('.sticky-product .add-to-cart .button').on('click', function(e) {
e.preventDefault();
$('.single-product form .quantity .qty').val($('.single-product .sticky-product .add-to-cart .qty').val());
$('.single-product form .single_add_to_cart_button').trigger('click');
});
$('.single-product .entry-summary .quantity').clone().prependTo('.single-product .sticky-product .add-to-cart');
}
});
$(document).on('click', '.porto-onepage-category.show-products .category-list .nav-link', function(e) {
var $target = $($(this).attr('href'));
if (!$target.length) {
return;
}
e.preventDefault();
if ($(this).closest('.porto-onepage-category').hasClass('ajax-load') && !$target.hasClass('ajax-loaded')) {
$target.trigger('porto_load_category_products');
}
$target.closest('.porto-onepage-category').addClass('moving');
$('html, body').stop().animate({
scrollTop: $target.offset().top - theme.StickyHeader.sticky_height - theme.adminBarHeight() - theme.sticky_nav_height - 10
}, 600, 'easeOutQuad', function() {
$target.closest('.porto-onepage-category').removeClass('moving');
});
});
$(document).on('porto_load_category_products', '.category-section', function() {
var $target = $(this), cat_id = $target.attr('id').replace('category-', '');
if ($target.closest('.porto-onepage-category').hasClass('loading') || $target.closest('.porto-onepage-category').hasClass('moving') || $target.hasClass('ajax-loaded')) {
return false;
}
$target.css('min-height', 200);
$target.addClass('yith-wcan-loading');
if (!$target.children('.porto-loading-icon').length) {
$target.append('');
}
$target.closest('.porto-onepage-category').addClass('loading');
var data = $target.closest('.porto-onepage-category').find('.ajax-form').serialize() + '&action=porto_woocommerce_shortcodes_products&category_description=true&category=' + cat_id + '&nonce=' + js_porto_vars.porto_nonce;
$.ajax({
url: theme.ajax_url,
data: data,
type: 'post',
success: function(response) {
$target.addClass('ajax-loaded');
$target.append($(response).html());
$target.removeClass('yith-wcan-loading');
$(document).trigger('yith-wcan-ajax-filtered');
$(window).trigger('resize');
$('body').scrollspy('refresh');
$target.closest('.porto-onepage-category').removeClass('loading');
}
});
});
// cart page accordion
$('.cart-v2 .cart_totals .accordion-toggle.out').removeClass('out');
$(document).ajaxComplete(function(event, xhr, options) {
$('.cart-v2 .cart_totals .accordion-toggle.out').each(function(){
if($($(this).attr('href')).length && $($(this).attr('href')).is(':hidden')) {
$(this).removeClass('collapsed');
$($(this).attr('href')).addClass('show');
}
});
});
portoCalcSliderTitleLine($('.porto-products.title-border-middle'));
$(window).smartresize(function() {
portoCalcSliderTitleLine($('.porto-products.title-border-middle'));
});
// porto products filter element
$('.porto_products_filter_form .btn-submit').on('click', function(e) {
e.preventDefault();
var data = $(this).closest('form').serializeArray(),
submit_data = '';
for(var i in data) {
var param = data[i];
if (param.value) {
if (submit_data) {
submit_data += '&';
}
submit_data += param.name + '=' + param.value;
if ('min_price' == param.name) {
var max_price = $(this).closest('form').find('.porto_dropdown_price_range option:selected').data('maxprice');
if (max_price) {
submit_data += '&max_price=' + max_price;
}
}
}
}
location.href = $(this).closest('form').attr('action') + '?' + submit_data;
});
// yith wishlist
if ($('.wishlist_table.responsive').length) {
$(window).on('resize', function() {
var media = window.matchMedia('(max-width: 768px)');
if (media.matches) {
$('.wishlist_table.responsive').addClass('mobile');
} else {
$('.wishlist_table.responsive').removeClass('mobile');
}
});
}
// pre-order
if (js_porto_vars.pre_order) {
var porto_pre_order = {
init: function() {
this.$add_to_cart_btn = $('.product-summary-wrap .single_add_to_cart_button');
this.add_to_cart_label = this.$add_to_cart_btn.html();
$('.product-summary-wrap form.variations_form').on('show_variation', function(e, v, p) {
if (v.porto_pre_order) {
porto_pre_order.$add_to_cart_btn.html(v.porto_pre_order_label);
if (v.porto_pre_order_date) {
$(this).find('.woocommerce-variation-description').append(v.porto_pre_order_date);
}
} else {
porto_pre_order.$add_to_cart_btn.html(porto_pre_order.add_to_cart_label);
}
}).on('hide_variation', function() {
porto_pre_order.$add_to_cart_btn.html(porto_pre_order.add_to_cart_label);
});
}
};
if ($('div.product.skeleton-loading').length) {
$('div.product.skeleton-loading').on('skeleton-loaded', function() {
porto_pre_order.init();
});
} else {
porto_pre_order.init();
}
}
})( window.theme, jQuery );
})();
function porto_woocommerce_init() {
'use strict';
// Woo Widget Toggle
(function($) {
if ($.isFunction($.fn.themeWooWidgetToggle)) {
$(function() {
$('.widget_product_categories, .widget_price_filter, .widget_layered_nav, .widget_layered_nav_filters, .widget_rating_filter, .porto_widget_price_filter').find('.widget-title').each(function() {
var $this = $(this),
opts;
var pluginOptions = $this.data('plugin-options');
if (pluginOptions)
opts = pluginOptions;
$this.themeWooWidgetToggle(opts);
});
});
}
// Woo Widget Accordion
if ($.isFunction($.fn.themeWooWidgetAccordion)) {
$(function() {
$('.widget_product_categories, .widget_price_filter, .widget_layered_nav, .widget_layered_nav_filters, .widget_rating_filter').each(function() {
var $this = $(this),
opts;
var pluginOptions = $this.data('plugin-options');
if (pluginOptions)
opts = pluginOptions;
$this.themeWooWidgetAccordion(opts);
});
});
}
// Woo Products Slider
if ($.isFunction($.fn.themeWooProductsSlider)) {
$(function() {
$('.products-slider:not(.manual)').each(function() {
var $this = $(this),
opts;
var pluginOptions = $this.data('plugin-options');
if (pluginOptions)
opts = pluginOptions;
$this.themeWooProductsSlider(opts);
});
});
}
})(jQuery);
// Woocommerce Grid/List Toggle
(function($) {
if ($.cookie && $.cookie('gridcookie') == 'grid') {
$('.gridlist-toggle #grid').addClass('active');
$('.gridlist-toggle #list').removeClass('active');
} else if ($.cookie && $.cookie('gridcookie') == 'list') {
$('.gridlist-toggle #list').addClass('active');
$('.gridlist-toggle #grid').removeClass('active');
}
})(jQuery);
}
function porto_woocommerce_variations_init($parent_obj) {
'use strict';
var form_variation = $parent_obj.find('form.variations_form:not(.vf_init)');
if (form_variation.length > 0) {
form_variation.each(function() {
jQuery(this).wc_variation_form();
});
//form_variation.find("select option:selected").removeAttr("selected");
}
}