/* global jQuery, location, wccom */ ( function() { var supportFeedback = {}; var feedbackQuestionOrder = { type: { happy: [ 'wccom-support-feedback-timelength' ], neutral: [ 'wccom-support-feedback-contacted' ], sad: [ 'wccom-support-feedback-contacted' ], }, contacted: { yes: [ 'wccom-support-feedback-timelength' ], no: [ 'wccom-support-feedback-additional', 'wccom-support-feedback-submit' ], }, timelength: { hours: [ 'wccom-support-feedback-additional', 'wccom-support-feedback-submit' ], day: [ 'wccom-support-feedback-additional', 'wccom-support-feedback-submit' ], days: [ 'wccom-support-feedback-additional', 'wccom-support-feedback-submit' ], }, resolved: { yes: [ 'wccom-support-feedback-additional', 'wccom-support-feedback-submit' ], no: [ 'wccom-support-feedback-takelook' ], }, takelook: { yes: [ 'wccom-support-feedback-changed', 'wccom-support-feedback-submit' ], no: [ 'wccom-support-feedback-additional', 'wccom-support-feedback-submit' ], }, text: { additional: [ 'wccom-support-feedback-submit' ], changed: [ 'wccom-support-feedback-submit' ], positive: [ 'wccom-support-feedback-submit' ], }, }; function init() { var openButton = document .getElementById( 'wccom-support-modal-open-button' ); if ( openButton ) { openButton.addEventListener( 'click', addUrlParam ); } var queryParams = getQueryParameters(); if ( queryParams.support ) { openModal( queryParams.support, 'support' ); } else if ( queryParams.supportthankyou ) { openModal( queryParams.supportthankyou, 'thankyou' ); } else if ( queryParams.supportfeedback ) { openModal( queryParams.supportfeedback, 'feedback' ); document .getElementById( 'wccom-support-feedback' ) .addEventListener( 'click', handleFeedbackChoice ); var textareas = document.querySelectorAll( '#wccom-support-feedback textarea' ); [].forEach.call( textareas, function( textarea ) { textarea.addEventListener( 'input', handleTextareaInput ); } ); handleFeedbackDirection( queryParams.feedbackdirection || 'happy' ); // eslint-disable-next-line if ( 'undefined' !== typeof wccom.fireTracksEvent ) { /** * Username is a hidden field in the CSAT form * file: template-wccom-support-feedback.php */ const username = document.getElementById( 'wccom-support-feedback-username' ).value; const feedbackProperties = { parentTicketId: queryParams.ticket_id, feedbackScore: queryParams.feedbackdirection, productSlug: queryParams.supportfeedback, vendor: queryParams.vendor ?? '', username: username, }; wccom.fireTracksEvent( 'vendor_feedback_modal_open', feedbackProperties ); } } } /** * Add Url Param * * @param {object} e The click event. */ function addUrlParam( e ) { e.preventDefault(); window.location.href = appendToQueryString( 'support', e.currentTarget.dataset.extension, ); } /** * Adds param to query string * * @param {string} param The param key * @param {string} val The value of the parameter * @returns {string} The url */ function appendToQueryString( param, val ) { var parameterList = getQueryParameters(); parameterList[ param ] = val; var newQueryString = serializeUrlParams( parameterList ); return location.origin + location.pathname + newQueryString; } /** * Close modal */ function closeModal() { var modalContainer = document.getElementById( 'wccom-support-modal' ); document.body.classList.remove( 'support-modal__prevent-scroll' ); modalContainer.classList.remove( 'support-modal__open' ); var paramsToRemove = [ 'support', 'supportfeedback', 'supportthankyou', ]; var queryString = deleteFromQueryString( paramsToRemove ); var url = location.origin + location.pathname; window.location.href = url + queryString; } /** * Removes param to query string * * @param {Array} params Parameters to delete * @returns {string} the url with deleted parameter */ function deleteFromQueryString( params ) { var parameterList = getQueryParameters(); params.forEach( function( param ) { delete parameterList[ param ]; } ); var newQueryString = serializeUrlParams( parameterList ); if ( '?' === newQueryString ) { newQueryString = ''; } return newQueryString; } /** * Returns object with url params * * @returns {object} object of params */ function getQueryParameters() { var queryString = {}; var query = window.location.search.substring( 1 ); var vars = query.split( '&' ); if ( '' === vars[ 0 ] ) { return queryString; } for ( var i = 0; i < vars.length; i++ ) { var pair = vars[ i ].split( '=' ); // If first entry with this name if ( 'undefined' === typeof queryString[ pair[ 0 ] ] ) { queryString[ pair[ 0 ] ] = decodeURIComponent( pair[ 1 ] ); // If second entry with this name } else if ( 'string' === typeof queryString[ pair[ 0 ] ] ) { var arr = [ queryString[ pair[ 0 ] ], decodeURIComponent( pair[ 1 ] ) ]; queryString[ pair[ 0 ] ] = arr; // If third or later entry with this name } else { queryString[ pair[ 0 ] ].push( decodeURIComponent( pair[ 1 ] ) ); } } return queryString; } /** * Update local data store when textarea is updated. * * @param {object} e input event */ function handleTextareaInput( e ) { var action = e.target.dataset; if ( ! action.name ) { return; } supportFeedback[ e.target.name ] = e.target.value; } /** * Handle support feedback user choice * * @param {object} e click event */ function handleFeedbackChoice( e ) { var action = e.target.dataset; if ( ! action.name ) { return; } var clearFromNode = e.target; if ( 'type' === action.name ) { handleFeedbackDirection( action.value ); clearFromNode = document.getElementById( 'wccom-support-feedback-start' ); } supportFeedback[ action.name ] = action.value; removeChildQuestions( clearFromNode ); updateFeedbackForm( action ); } /** * Handle support feedback user choice * * @param {object} action action name and value */ function updateFeedbackForm( action ) { // Check what IDs should be revealed. var showIds = feedbackQuestionOrder[ action.name ][ action.value ]; // Highlight selected feedback if the action is about the feedback type if ( 'type' === action.name ) { // Find selected feedback var selectedFeedbackButtons = document.getElementsByClassName( 'support-modal__feedback-button--selected', ); // Reset selected feedback for ( var i = 0; i < selectedFeedbackButtons.length; i++ ) { var selectedFeedbackButton = selectedFeedbackButtons[ i ]; selectedFeedbackButton.classList.remove( 'support-modal__feedback-button--selected', ); } // Highlight the new feedback; var button = document.querySelector( 'button[data-value="' + action.value + '"]' ); button.classList.add( 'support-modal__feedback-button--selected' ); } // Deal with a special case. if ( 'happy' === supportFeedback.type && 0 >= showIds.indexOf( 'wccom-support-feedback-additional' ) && 'resolved' === action.name && 'yes' === action.value ) { // Customer is happy, and problem is resolved, so show // an extra-positive message with the comment textarea. showIds.splice( showIds.indexOf( 'wccom-support-feedback-additional' ), 1 ); showIds.push( 'wccom-support-feedback-positive' ); } // Reveal IDs. showIds.forEach( function( showId ) { document .getElementById( showId ) .classList .remove( 'support-modal__feedback-hidden' ); } ); } /** * Handle feedback direction choice * * @param {string} direction 'happy' or 'sad' */ function handleFeedbackDirection( direction ) { supportFeedback.type = direction; var container = document.querySelector( '.support-modal__feedback-header' ); container.classList.remove( 'support-modal__feedback-happy' ); container.classList.remove( 'support-modal__feedback-sad' ); container.classList.remove( 'support-modal__feedback-neutral' ); container.classList.add( 'support-modal__feedback-' + direction ); updateFeedbackForm( { name: 'type', value: direction } ); } /** * Remove questions before showing next * * @param {object} clickedNode node that was clicked */ function removeChildQuestions( clickedNode ) { var currentNode = clickedNode; while ( 'DIV' !== currentNode.tagName ) { currentNode = currentNode.parentNode; } while ( currentNode ) { currentNode = currentNode.nextElementSibling; if ( currentNode ) { currentNode.classList.add( 'support-modal__feedback-hidden' ); Array.prototype.slice.call( currentNode.querySelectorAll( 'input[type="radio"]' ), ).forEach( function( radio ) { radio.checked = false; } ); } } document.getElementById( 'wccom-support-feedback-submit' ) .classList.add( 'support-modal__feedback-hidden' ); } /** * Submits a user choice */ function submitChoice() { var queryParams = getQueryParameters(); supportFeedback.action = 'support_modal_feedback'; // eslint-disable-next-line supportFeedback.ticket_id = queryParams.ticket_id; // Send data to server jQuery.ajax( { type: 'POST', data: supportFeedback, url: '/wp-admin/admin-ajax.php', success: function( response ) { if ( 'ok' !== response.status ) { window.alert( 'There was a problem saving your response. Please try again later.', ); return; } document.querySelector( '.support-modal__feedback' ) .style.display = 'none'; document.querySelector( '.support-modal__feedback-thank-you' ) .style.display = 'block'; }, // eslint-disable-next-line }).fail(function (response) { window.alert( 'There was a problem saving your response. Please try again later.' ); } ); } /** * Opens modal * * @param {string} extension Slug of extension * @param {string} modalType Type of modal, support or question */ function openModal( extension, modalType ) { if ( ! document.querySelector( 'body.logged-in' ) ) { var path = '/sso?next=' + encodeURIComponent( document.location.pathname + document.location.search ); window.location.href = location.origin + path; } var modalContainer = document.getElementById( 'wccom-support-modal' ); modalContainer.classList.add( 'support-modal__open' ); document.body.classList.add( 'support-modal__prevent-scroll' ); var modalTypeId; if ( 'support' === modalType ) { modalTypeId = 'wccom-support-question'; } else if ( 'thankyou' === modalType ) { modalTypeId = 'wccom-support-thank-you'; } else if ( 'feedback' === modalType ) { modalTypeId = 'wccom-support-feedback'; } var modalTypeElement = document.getElementById( modalTypeId ); modalTypeElement.classList.add( 'support-modal__open' ); modalContainer.dataset.extension = extension; var modalCloseButtons = document.getElementsByClassName( 'close-support-modal' ); for ( let i = 0; i < modalCloseButtons.length; i++ ) { var closeButton = modalCloseButtons[ i ]; closeButton.addEventListener( 'click', closeModal ); } Array.prototype.slice.call( document.querySelectorAll( '.support-modal__cancel' ), ).forEach( function( button ) { button.addEventListener( 'click', closeModal ); } ); document .getElementById( 'wccom-support-feedback-submit-button' ) .addEventListener( 'click', submitChoice ); } /** * Returns serialized url params * * @param {object} params Object of params * @returns {string} Url string */ function serializeUrlParams( params ) { var urlParams = '?'; for ( var key in params ) { urlParams += key + '=' + encodeURIComponent( params[ key ] ); urlParams += '&'; } urlParams.replace( /&$/, '' ); return urlParams; } document.addEventListener( 'DOMContentLoaded', init ); }() ); ; jQuery(function(t){if("undefined"==typeof wc_single_product_params)return!1;var e;t("body").on("init",".wc-tabs-wrapper, .woocommerce-tabs",function(){t(this).find(".wc-tab, .woocommerce-tabs .panel:not(.panel .panel)").hide();var e=window.location.hash,i=window.location.href,o=t(this).find(".wc-tabs, ul.tabs").first();e.toLowerCase().indexOf("comment-")>=0||"#reviews"===e||"#tab-reviews"===e?o.find("li.reviews_tab a").trigger("click"):i.indexOf("comment-page-")>0||i.indexOf("cpage=")>0?o.find("li.reviews_tab a").trigger("click"):"#tab-additional_information"===e?o.find("li.additional_information_tab a").trigger("click"):o.find("li:first a").trigger("click")}).on("click",".wc-tabs li a, ul.tabs li a",function(e){e.preventDefault();var i=t(this),o=i.closest(".wc-tabs-wrapper, .woocommerce-tabs"),a=o.find(".wc-tabs, ul.tabs");a.find("li").removeClass("active"),a.find('a[role="tab"]').attr("aria-selected","false").attr("tabindex","-1"),o.find(".wc-tab, .panel:not(.panel .panel)").hide(),i.closest("li").addClass("active"),i.attr("aria-selected","true").attr("tabindex","0"),o.find("#"+i.attr("href").split("#")[1]).show()}).on("keydown",".wc-tabs li a, ul.tabs li a",function(e){var i=e.key,o="ArrowRight",a="ArrowLeft",r="Home",n="End";if([o,a,n,r].includes(i)){e.preventDefault();var s=t(this),l=s.closest(".wc-tabs-wrapper, .woocommerce-tabs").find(".wc-tabs, ul.tabs").find('a[role="tab"]'),c=l.length-1,d=l.index(s),p=i===a?d-1:d+1;i===a&&0===d||i===n?p=c:(o===i&&d===c||i===r)&&(p=0),l.eq(p).focus()}}).on("focusout",".wc-tabs li a, ul.tabs li a, #respond p.stars a",function(){e.data("flexslider")&&setTimeout(function(){t(document.activeElement).closest([".stars",".tabs",".wc-tabs"].join(", ")).length?e.data("flexslider").animating=!0:e.data("flexslider").animating=!1},0)}).on("click","a.woocommerce-review-link",function(){return t(".reviews_tab a").trigger("click"),!0}).on("init","#rating",function(){t("#rating").hide().before('
\t\t\t\t\t\t\t\t\t\t\t\t\t'+wc_single_product_params.i18n_rating_options[0]+'\t\t\t\t\t\t\t'+wc_single_product_params.i18n_rating_options[1]+'\t\t\t\t\t\t\t'+wc_single_product_params.i18n_rating_options[2]+'\t\t\t\t\t\t\t'+wc_single_product_params.i18n_rating_options[3]+'\t\t\t\t\t\t\t'+wc_single_product_params.i18n_rating_options[4]+"\t\t\t\t\t\t\t\t\t\t\t
")}).on("click","#respond p.stars a",function(){var e=t(this),i=e.closest("p.stars").find("a").index(e)+1,o=t(this).closest("#respond").find("#rating"),a=t(this).closest(".stars");return o.val(i),e.siblings("a").removeClass("active").attr("aria-checked","false").attr("tabindex","-1"),e.addClass("active").attr("aria-checked","true").attr("tabindex","0"),a.addClass("selected"),!1}).on("click","#respond #submit",function(){var e=t(this).closest("#respond").find("#rating"),i=e.val();if(e.length>0&&!i&&"yes"===wc_single_product_params.review_rating_required)return window.alert(wc_single_product_params.i18n_required_rating_text),!1}).on("keydown","#respond p.stars a",function(e){var i=e.key,o=["ArrowRight","ArrowDown"];o.concat(["ArrowLeft","ArrowUp"]).includes(i)&&(e.preventDefault(),o.includes(i)?t(this).next().focus().click():t(this).prev().focus().click())}),t(".wc-tabs-wrapper, .woocommerce-tabs, #rating").trigger("init");var i=function(e,i){this.$target=e,this.$images=t(".woocommerce-product-gallery__image",e),0!==this.$images.length?(e.data("product_gallery",this),this.flexslider_enabled="function"==typeof t.fn.flexslider&&wc_single_product_params.flexslider_enabled,this.zoom_enabled="function"==typeof t.fn.zoom&&wc_single_product_params.zoom_enabled,this.photoswipe_enabled="undefined"!=typeof PhotoSwipe&&wc_single_product_params.photoswipe_enabled,i&&(this.flexslider_enabled=!1!==i.flexslider_enabled&&this.flexslider_enabled,this.zoom_enabled=!1!==i.zoom_enabled&&this.zoom_enabled,this.photoswipe_enabled=!1!==i.photoswipe_enabled&&this.photoswipe_enabled),1===this.$images.length&&(this.flexslider_enabled=!1),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),this.trapFocusPhotoswipe=this.trapFocusPhotoswipe.bind(this),this.handlePswpTrapFocus=this.handlePswpTrapFocus.bind(this),this.flexslider_enabled?(this.initFlexslider(i.flexslider),e.on("woocommerce_gallery_reset_slide_position",this.onResetSlidePosition)):this.$target.css("opacity",1),this.zoom_enabled&&(this.initZoom(),e.on("woocommerce_gallery_init_zoom",this.initZoom)),this.photoswipe_enabled&&this.initPhotoswipe()):this.$target.css("opacity",1)};i.prototype.initFlexslider=function(e){var i=this.$target,o=this,a=t.extend({selector:".woocommerce-product-gallery__wrapper > .woocommerce-product-gallery__image",start:function(){i.css("opacity",1)},after:function(t){o.initZoomForTarget(o.$images.eq(t.currentSlide))}},e);i.flexslider(a),t(".woocommerce-product-gallery__wrapper .woocommerce-product-gallery__image:eq(0) .wp-post-image").one("load",function(){var e=t(this);e&&setTimeout(function(){var t=e.closest(".woocommerce-product-gallery__image").height(),i=e.closest(".flex-viewport");t&&i&&i.height(t)},100)}).each(function(){this.complete&&t(this).trigger("load")})},i.prototype.initZoom=function(){this.initZoomForTarget(this.$images.first())},i.prototype.initZoomForTarget=function(e){if(!this.zoom_enabled)return!1;var i=this.$target.width(),o=!1;if(t(e).each(function(e,a){if(t(a).find("img").data("large_image_width")>i)return o=!0,!1}),o){var a=t.extend({touch:!1,callback:function(){var t=this;setTimeout(function(){t.removeAttribute("role"),t.setAttribute("alt",""),t.setAttribute("aria-hidden","true")},100)}},wc_single_product_params.zoom_options);"ontouchstart"in document.documentElement&&(a.on="click"),e.trigger("zoom.destroy"),e.zoom(a),setTimeout(function(){e.find(":hover").length&&e.trigger("mouseover")},100)}},i.prototype.initPhotoswipe=function(){this.zoom_enabled&&this.$images.length>0?(this.$target.prepend(' '),this.$target.on("click",".woocommerce-product-gallery__trigger",this.openPhotoswipe),this.$target.on("click",".woocommerce-product-gallery__image a",function(t){t.preventDefault()}),this.flexslider_enabled||this.$target.on("click",".woocommerce-product-gallery__image a",this.openPhotoswipe)):this.$target.on("click",".woocommerce-product-gallery__image a",this.openPhotoswipe)},i.prototype.onResetSlidePosition=function(){this.$target.flexslider(0)},i.prototype.getGalleryItems=function(){var e=this.$images,i=[];return e.length>0&&e.each(function(e,o){var a=t(o).find("img");if(a.length){var r=a.attr("data-large_image"),n=a.attr("data-large_image_width"),s=a.attr("data-large_image_height"),l={alt:a.attr("alt"),src:r,w:n,h:s,title:a.attr("data-caption")?a.attr("data-caption"):a.attr("title")};i.push(l)}}),i},i.prototype.openPhotoswipe=function(e){e.preventDefault();var i,o=t(".pswp")[0],a=this.getGalleryItems(),r=t(e.target),n=e.currentTarget,s=this;i=0