jQuery(function($){
if(typeof wc_single_product_params==='undefined'){
return false;
}
$('body')
.on('init', '.wc-tabs-wrapper, .woocommerce-tabs', function(){
$(this).find('.wc-tab, .woocommerce-tabs .panel:not(.panel .panel)').hide();
var hash=window.location.hash;
var url=window.location.href;
var $tabs=$(this).find('.wc-tabs, ul.tabs').first();
if(hash.toLowerCase().indexOf('comment-') >=0||hash==='#reviews'||hash==='#tab-reviews'){
$tabs.find('li.reviews_tab a').trigger('click');
}else if(url.indexOf('comment-page-') > 0||url.indexOf('cpage=') > 0){
$tabs.find('li.reviews_tab a').trigger('click');
}else if(hash==='#tab-additional_information'){
$tabs.find('li.additional_information_tab a').trigger('click');
}else{
$tabs.find('li:first a').trigger('click');
}})
.on('click', '.wc-tabs li a, ul.tabs li a', function(e){
e.preventDefault();
var $tab=$(this);
var $tabs_wrapper=$tab.closest('.wc-tabs-wrapper, .woocommerce-tabs');
var $tabs=$tabs_wrapper.find('.wc-tabs, ul.tabs');
$tabs.find('li').removeClass('active');
$tabs_wrapper.find('.wc-tab, .panel:not(.panel .panel)').hide();
$tab.closest('li').addClass('active');
$tabs_wrapper.find($tab.attr('href')).show();
})
.on('click', 'a.woocommerce-review-link', function(){
$('.reviews_tab a').trigger('click');
return true;
})
.on('init', '#rating', function(){
$('#rating')
.hide()
.before('<p class="stars">\
<span>\
<a class="star-1" href="#">1</a>\
<a class="star-2" href="#">2</a>\
<a class="star-3" href="#">3</a>\
<a class="star-4" href="#">4</a>\
<a class="star-5" href="#">5</a>\
</span>\
</p>'
);
})
.on('click', '#respond p.stars a', function(){
var $star=$(this),
$rating=$(this).closest('#respond').find('#rating'),
$container=$(this).closest('.stars');
$rating.val($star.text());
$star.siblings('a').removeClass('active');
$star.addClass('active');
$container.addClass('selected');
return false;
})
.on('click', '#respond #submit', function(){
var $rating=$(this).closest('#respond').find('#rating'),
rating=$rating.val();
if($rating.length > 0&&! rating&&wc_single_product_params.review_rating_required==='yes'){
window.alert(wc_single_product_params.i18n_required_rating_text);
return false;
}});
$('.wc-tabs-wrapper, .woocommerce-tabs, #rating').trigger('init');
var ProductGallery=function($target, args){
this.$target=$target;
this.$images=$('.woocommerce-product-gallery__image', $target);
if(0===this.$images.length){
this.$target.css('opacity', 1);
return;
}
$target.data('product_gallery', this);
this.flexslider_enabled='function'===typeof $.fn.flexslider&&wc_single_product_params.flexslider_enabled;
this.zoom_enabled='function'===typeof $.fn.zoom&&wc_single_product_params.zoom_enabled;
this.photoswipe_enabled=typeof PhotoSwipe!=='undefined'&&wc_single_product_params.photoswipe_enabled;
if(args){
this.flexslider_enabled=false===args.flexslider_enabled ? false:this.flexslider_enabled;
this.zoom_enabled=false===args.zoom_enabled ? false:this.zoom_enabled;
this.photoswipe_enabled=false===args.photoswipe_enabled ? false:this.photoswipe_enabled;
}
if(1===this.$images.length){
this.flexslider_enabled=false;
}
this.initFlexslider=this.initFlexslider.bind(this);
this.initZoom=this.initZoom.bind(this);
this.initZoomForTarget=this.initZoomForTarget.bind(this);
this.initPhotoswipe=this.initPhotoswipe.bind(this);
this.onResetSlidePosition=this.onResetSlidePosition.bind(this);
this.getGalleryItems=this.getGalleryItems.bind(this);
this.openPhotoswipe=this.openPhotoswipe.bind(this);
if(this.flexslider_enabled){
this.initFlexslider(args.flexslider);
$target.on('woocommerce_gallery_reset_slide_position', this.onResetSlidePosition);
}else{
this.$target.css('opacity', 1);
}
if(this.zoom_enabled){
this.initZoom();
$target.on('woocommerce_gallery_init_zoom', this.initZoom);
}
if(this.photoswipe_enabled){
this.initPhotoswipe();
}};
ProductGallery.prototype.initFlexslider=function(args){
var $target=this.$target,
gallery=this;
var options=$.extend({
selector: '.woocommerce-product-gallery__wrapper > .woocommerce-product-gallery__image',
start: function(){
$target.css('opacity', 1);
},
after: function(slider){
gallery.initZoomForTarget(gallery.$images.eq(slider.currentSlide));
}}, args);
$target.flexslider(options);
$('.woocommerce-product-gallery__wrapper .woocommerce-product-gallery__image:eq(0) .wp-post-image').one('load', function(){
var $image=$(this);
if($image){
setTimeout(function(){
var setHeight=$image.closest('.woocommerce-product-gallery__image').height();
var $viewport=$image.closest('.flex-viewport');
if(setHeight&&$viewport){
$viewport.height(setHeight);
}}, 100);
}}).each(function(){
if(this.complete){
$(this).trigger('load');
}});
};
ProductGallery.prototype.initZoom=function(){
this.initZoomForTarget(this.$images.first());
};
ProductGallery.prototype.initZoomForTarget=function(zoomTarget){
if(! this.zoom_enabled){
return false;
}
var galleryWidth=this.$target.width(),
zoomEnabled=false;
$(zoomTarget).each(function(index, target){
var image=$(target).find('img');
if(image.data('large_image_width') > galleryWidth){
zoomEnabled=true;
return false;
}});
if(zoomEnabled){
var zoom_options=$.extend({
touch: false
}, wc_single_product_params.zoom_options);
if('ontouchstart' in document.documentElement){
zoom_options.on='click';
}
zoomTarget.trigger('zoom.destroy');
zoomTarget.zoom(zoom_options);
setTimeout(function(){
if(zoomTarget.find(':hover').length){
zoomTarget.trigger('mouseover');
}}, 100);
}};
ProductGallery.prototype.initPhotoswipe=function(){
if(this.zoom_enabled&&this.$images.length > 0){
this.$target.prepend('<a href="#" class="woocommerce-product-gallery__trigger">🔍</a>');
this.$target.on('click', '.woocommerce-product-gallery__trigger', this.openPhotoswipe);
this.$target.on('click', '.woocommerce-product-gallery__image a', function(e){
e.preventDefault();
});
if(! this.flexslider_enabled){
this.$target.on('click', '.woocommerce-product-gallery__image a', this.openPhotoswipe);
}}else{
this.$target.on('click', '.woocommerce-product-gallery__image a', this.openPhotoswipe);
}};
ProductGallery.prototype.onResetSlidePosition=function(){
this.$target.flexslider(0);
};
ProductGallery.prototype.getGalleryItems=function(){
var $slides=this.$images,
items=[];
if($slides.length > 0){
$slides.each(function(i, el){
var img=$(el).find('img');
if(img.length){
var large_image_src=img.attr('data-large_image'),
large_image_w=img.attr('data-large_image_width'),
large_image_h=img.attr('data-large_image_height'),
alt=img.attr('alt'),
item={
alt:alt,
src:large_image_src,
w:large_image_w,
h:large_image_h,
title: img.attr('data-caption') ? img.attr('data-caption'):img.attr('title')
};
items.push(item);
}});
}
return items;
};
ProductGallery.prototype.openPhotoswipe=function(e){
e.preventDefault();
var pswpElement=$('.pswp')[0],
items=this.getGalleryItems(),
eventTarget=$(e.target),
clicked;
if(0 < eventTarget.closest('.woocommerce-product-gallery__trigger').length){
clicked=this.$target.find('.flex-active-slide');
}else{
clicked=eventTarget.closest('.woocommerce-product-gallery__image');
}
var options=$.extend({
index: $(clicked).index(),
addCaptionHTMLFn: function(item, captionEl){
if(! item.title){
captionEl.children[0].textContent='';
return false;
}
captionEl.children[0].textContent=item.title;
return true;
}}, wc_single_product_params.photoswipe_options);
var photoswipe=new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, options);
photoswipe.init();
};
$.fn.wc_product_gallery=function(args){
new ProductGallery(this, args||wc_single_product_params);
return this;
};
$('.woocommerce-product-gallery').each(function(){
$(this).trigger('wc-product-gallery-before-init', [ this, wc_single_product_params ]);
$(this).wc_product_gallery(wc_single_product_params);
$(this).trigger('wc-product-gallery-after-init', [ this, wc_single_product_params ]);
});
});
;(function (factory){
var registeredInModuleLoader=false;
if(typeof define==='function'&&define.amd){
define(factory);
registeredInModuleLoader=true;
}
if(typeof exports==='object'){
module.exports=factory();
registeredInModuleLoader=true;
}
if(!registeredInModuleLoader){
var OldCookies=window.Cookies;
var api=window.Cookies=factory();
api.noConflict=function (){
window.Cookies=OldCookies;
return api;
};}}(function (){
function extend (){
var i=0;
var result={};
for (; i < arguments.length; i++){
var attributes=arguments[ i ];
for (var key in attributes){
result[key]=attributes[key];
}}
return result;
}
function init (converter){
function api (key, value, attributes){
var result;
if(typeof document==='undefined'){
return;
}
if(arguments.length > 1){
attributes=extend({
path: '/'
}, api.defaults, attributes);
if(typeof attributes.expires==='number'){
var expires=new Date();
expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);
attributes.expires=expires;
}
attributes.expires=attributes.expires ? attributes.expires.toUTCString():'';
try {
result=JSON.stringify(value);
if(/^[\{\[]/.test(result)){
value=result;
}} catch (e){}
if(!converter.write){
value=encodeURIComponent(String(value))
.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
}else{
value=converter.write(value, key);
}
key=encodeURIComponent(String(key));
key=key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
key=key.replace(/[\(\)]/g, escape);
var stringifiedAttributes='';
for (var attributeName in attributes){
if(!attributes[attributeName]){
continue;
}
stringifiedAttributes +='; ' + attributeName;
if(attributes[attributeName]===true){
continue;
}
stringifiedAttributes +='=' + attributes[attributeName];
}
return (document.cookie=key + '=' + value + stringifiedAttributes);
}
if(!key){
result={};}
var cookies=document.cookie ? document.cookie.split('; '):[];
var rdecode=/(%[0-9A-Z]{2})+/g;
var i=0;
for (; i < cookies.length; i++){
var parts=cookies[i].split('=');
var cookie=parts.slice(1).join('=');
if(cookie.charAt(0)==='"'){
cookie=cookie.slice(1, -1);
}
try {
var name=parts[0].replace(rdecode, decodeURIComponent);
cookie=converter.read ?
converter.read(cookie, name):converter(cookie, name) ||
cookie.replace(rdecode, decodeURIComponent);
if(this.json){
try {
cookie=JSON.parse(cookie);
} catch (e){}}
if(key===name){
result=cookie;
break;
}
if(!key){
result[name]=cookie;
}} catch (e){}}
return result;
}
api.set=api;
api.get=function (key){
return api.call(api, key);
};
api.getJSON=function (){
return api.apply({
json: true
}, [].slice.call(arguments));
};
api.defaults={};
api.remove=function (key, attributes){
api(key, '', extend(attributes, {
expires: -1
}));
};
api.withConverter=init;
return api;
}
return init(function (){});
}));