JezK
Edit File: site-reviews.js
!function(){"use strict";const e=["rest_cookie_invalid_nonce","rest_disabled","rest_forbidden","rest_no_route","rest_not_logged_in"];let t=!1;class i extends Error{}const s=(e,t={})=>{let i={};t._action=e;for(let e of Object.keys(t))i[`${GLSR.nameprefix}[${e}]`]=t[e];return i},r=async(e,t={})=>{try{const i=await fetch(GLSR.ajax_url,{body:n(e),headers:Object.assign({},t,{"X-Requested-With":"XMLHttpRequest"}),method:"POST"}),s=await i.json();return{data:s.data,success:s.success}}catch(e){return{data:{message:e.message},success:!1}}},n=e=>{let t=new FormData;const i=Object.prototype.toString.call(e);return"[object FormData]"===i&&(t=e),"[object HTMLFormElement]"===i&&(t=new FormData(e)),"[object Object]"===i&&Object.keys(e).forEach(i=>t.append(i,e[i])),t.append("action",GLSR.action),t.append("_ajax_request",!0),t},a=async({body:s,legacy:n,method:a,params:o,path:l})=>{try{return await(async(t,s,r,n)=>{if(!GLSR.rest_url)throw new i("no REST URL");const a={"X-Requested-With":"XMLHttpRequest"};GLSR.rest_nonce&&(a["X-WP-Nonce"]=GLSR.rest_nonce);const o=await fetch(((e,t={})=>{const i=new URL(GLSR.rest_url);return i.searchParams.has("rest_route")?i.searchParams.set("rest_route",i.searchParams.get("rest_route").replace(/\/$/,"")+"/"+e):i.pathname=i.pathname.replace(/\/$/,"")+"/"+e,Object.entries(t||{}).forEach(([e,t])=>{null!=t&&("[object Object]"===Object.prototype.toString.call(t)?Object.entries(t).forEach(([t,s])=>i.searchParams.append(`${e}[${t}]`,s)):i.searchParams.append(e,t))}),i})(s,r),{body:n,headers:a,method:t});if(!(o.headers.get("content-type")||"").includes("application/json"))throw new i(`unexpected response: HTTP ${o.status}`);const l=await o.json();if(o.ok)return{data:l,success:!0};if([401,403].includes(o.status)||e.includes(l.code))throw new i(l.code||`HTTP ${o.status}`);return{data:l,success:!1}})(a,l,o,s)}catch(e){return c=e.message,t||(console.info(`Site Reviews is using the admin-ajax fallback (${c}).`),t=!0),r(n())}var c};var o={data:s,pagedReviews:e=>a({legacy:()=>{const t={page:e.page,schema:e.schema,url:e.url};return Object.entries(e.atts||{}).forEach(([e,i])=>t[`atts][${e}`]=i),s("fetch-paged-reviews",t)},method:"GET",params:{atts:e.atts,page:e.page,schema:e.schema,url:e.url},path:"render/reviews"}),review:(e,t={})=>a({legacy:()=>s(t.verified?"verified-review":"approved-review",Object.assign({},t,{review_id:e})),method:"GET",params:t,path:`render/reviews/${e}`}),send:a,submit:e=>a({body:e,legacy:()=>e,method:"POST",path:"submissions"})},l={data:(e,t={})=>s(e,t),get:(e,t,i)=>{fetch(e,{headers:Object.assign({},i,{"X-Requested-With":"XMLHttpRequest"})}).then(e=>e.text()).then(e=>t(e)).catch(e=>t(e.message))},post:(e,t,i)=>{r(e,i).then(({data:e,success:i})=>t(e,i))}};const c={},d=function(e,t){const i=c[e]||[],s=[];t&&[].forEach.call(i,e=>{t!==e.fn&&t!==e.fn.once&&s.push(e)}),s.length?c[e]=s:delete c[e]},h=function(e,t,i){(c[e]||(c[e]=[])).push({fn:t,context:i})};var u={events:c,off:d,on:h,once:function(e,t,i){const s=function(){d(e,s),t.apply(i,arguments)};s.once=t,h(e,s,i)},trigger:function(e){const t=[].slice.call(arguments,1),i=(c[e]||[]).slice();[].forEach.call(i,e=>e.fn.apply(e.context,t))}};const p="function",g="isNode",f=(e,t)=>typeof e===t,m=(e,t)=>{null!==t&&(Array.isArray(t)?t.map(t=>m(e,t)):(v[g](t)||(t=document.createTextNode(t)),e.appendChild(t)))};function v(e,t){let i,s,r=arguments,n=1;if(!v.isElement(e)){let t=["circle","clipPath","ellipse","g","line","linearGradient","mask","path","polygon","polyline","radialGradient","rect","stop","svg","text","textPath"].includes(e)?"2000/svg":"1999/xhtml";e=document.createElementNS(`http://www.w3.org/${t}`,e)}if("string"==typeof t&&(t={class:t}),f(t,"object")&&!v[g](t)&&!Array.isArray(t))for(i in n++,t)s=t[i],i=v.attrMap[i]||i,f(i,p)?i(e,s):f(s,p)?e[i]=s:e.setAttribute(i,s);for(;n<r.length;n++)m(e,r[n]);return e}v.attrMap={style:(e,t)=>{f(t,"string")?e.style.cssText=t:f(t,"object")&&Object.assign(e.style,t)}},v.isElement=e=>e instanceof Element,v[g]=e=>e instanceof Node;const _="glsr-read-more",b=".glsr-hidden-text";class y{constructor(e){this.events={click:this._onClick.bind(this)},(e||document).querySelectorAll(b).forEach(e=>this.init(e))}init(e){const t=this._insertLink(e);t&&("expand"===e.dataset.trigger&&(t.dataset.text=e.dataset.showLess,t.removeEventListener("click",this.events.click),t.addEventListener("click",this.events.click)),"modal"===e.dataset.trigger&&(t.dataset.glsrTrigger="glsr-modal-review"))}_insertLink(e){let t=e.parentElement.querySelector("."+_);t&&t.parentElement.removeChild(t);const i=v("a",{href:"#"},e.dataset.showMore),s=v("span",{class:_},i);return e.appendChild(s).querySelector("a")}_onClick(e){e.preventDefault();const t=e.currentTarget,i=t.parentElement,s=t.closest(".glsr-tag-value"),r=s.querySelector(b),n=t.dataset.text,a=t.innerText;t.dataset.text=a,t.innerText=n,t.removeEventListener("click",this.events.click),"false"===s.dataset.expanded?(s.querySelector("p:last-of-type").appendChild(i),s.dataset.expanded="true"):(r.appendChild(i),s.dataset.expanded="false"),t.addEventListener("click",this.events.click),t.focus()}}var w=e=>({el:e,loading:()=>{"false"===e.getAttribute("aria-busy")&&(e.setAttribute("aria-busy",!0),e.setAttribute("disabled",""),e.dataset.text=e.innerText,e.innerHTML='<span class="glsr-loading"></span>'+(e.dataset.loading||e.dataset.text))},loaded:()=>{"true"===e.getAttribute("aria-busy")&&(e.innerHTML=e.dataset.text,e.setAttribute("aria-busy",!1),e.removeAttribute("data-text"),e.removeAttribute("disabled"))}});class E{constructor(e){this.Form=e,this.captcha={friendlycaptcha:"friendlyChallenge",friendlycaptcha_v2:"frcaptcha",hcaptcha:"hcaptcha",procaptcha:"procaptcha",recaptcha_v2_invisible:"grecaptcha",recaptcha_v3:"grecaptcha",turnstile:"turnstile"}[GLSR.captcha.type],this.captchaEl=!1,this.containerEl=this.Form.form.querySelector(".glsr-captcha-holder"),this.loaded=!1,this.token=null,this.widget=-1,this.fixCompatibility()}execute(){if(this.captchaEl&&this.isWidgetLoaded())try{this["execute_"+GLSR.captcha.type]()}catch(e){console.error(e),this.Form.submitForm()}else this.Form.submitForm()}execute_friendlycaptcha(e){1===+this.captchaEl.dataset.error?this._submitFormWithToken("sitekey_invalid"):this.token?this.Form.submitForm():this._retry_execute(e=>this.execute_friendlycaptcha(e),e)}execute_friendlycaptcha_v2(){this.execute_friendlycaptcha()}execute_hcaptcha(){1===+this.captchaEl.dataset.error?this._submitFormWithToken("sitekey_invalid"):this.token?this._submitFormWithToken(this.token):window[this.captcha].execute(this.widget,{action:"submit_review",async:!0}).then(({response:e})=>{this._submitFormWithToken(e)}).catch(e=>{console.error(e)})}execute_procaptcha(){1===+this.captchaEl.dataset.error?this._submitFormWithToken("sitekey_invalid"):this.Form.submitForm()}execute_recaptcha_v2_invisible(){this.execute_recaptcha_v3()}execute_recaptcha_v3(){1===+this.captchaEl.dataset.error?this._submitFormWithToken("sitekey_invalid"):window[this.captcha].execute(this.widget,{action:"submit_review"})}execute_turnstile(e){let t=window[this.captcha].getResponse(this.widget);1===+this.captchaEl.dataset.error||this.token||void 0===t?this.Form.submitForm():this._retry_execute(e=>this.execute_turnstile(e),e)}fixCompatibility(){"hcaptcha"===GLSR.captcha.type&&void 0!==window.hCaptchaOnLoad&&document.body.click()}isLoaded(e){for(let t=0;t<document.scripts.length;t++)if(e.split("?")[0]===document.scripts[t].src.split("?")[0])return!0;return!1}isWidgetLoaded(){return-1!==this.widget&&null!=this.widget}load(e,t){if(void 0===e||this.isLoaded(e))return Promise.resolve();const i=e.split("?")[0];return E._loading[i]||(E._loading[i]=new Promise((i,s)=>{const r=document.createElement("script");r.onload=i,r.onerror=s,r.src=e,r.type="module"===t?"module":"text/javascript","module"!==t&&void 0!==GLSR.captcha.urls.module&&r.setAttribute("nomodule",""),r.setAttribute("async",""),r.setAttribute("defer",""),document.head.append(r)})),E._loading[i]}render(e){if(this.Form.form.onsubmit=null,this.containerEl&&!this.isWidgetLoaded())if(void 0===window[this.captcha])this.loaded?this._retry_render(e=>this.render(e),e):this.load(GLSR.captcha.urls.module,"module").then(()=>{this.load(GLSR.captcha.urls.nomodule,"nomodule")}).then(()=>this.loaded=!0).then(()=>this._retry_render(e=>this.render(e),e)).catch(e=>console.error(e));else{this.reset(),this._buildContainer();try{this["render_"+GLSR.captcha.type]()}catch(e){this.captchaEl.dataset.error=1,console.error(e)}}}render_friendlycaptcha(){this.widget=new window[this.captcha].WidgetInstance(this.captchaEl,{doneCallback:e=>this.token=e,errorCallback:e=>{console.error(e),this.captchaEl.dataset.error=1}})}render_friendlycaptcha_v2(){this.widget=window[this.captcha].createWidget({element:this.captchaEl,sitekey:GLSR.captcha.sitekey,startMode:"focus",theme:GLSR.captcha.theme}),this.captchaEl.addEventListener("frc:widget.complete",e=>{this.token=e?.detail?.response}),this.captchaEl.addEventListener("frc:widget.error",e=>{console.error(e),this.captchaEl.dataset.error=1})}render_hcaptcha(e){void 0!==window[this.captcha]?.render?this.widget=window[this.captcha].render(this.captchaEl,{callback:e=>this.token=e,"chalexpired-callback":()=>this.reset(),"close-callback":()=>this.Form.button.loaded(),"error-callback":()=>this.captchaEl.dataset.error=1,"expired-callback":()=>this.reset()}):this._retry_render(e=>this.render_hcaptcha(e),e)}render_procaptcha(){this.widget=window[this.captcha].render(this.captchaEl,{callback:e=>this.token=e,captchaType:GLSR.captcha.captcha_type,language:GLSR.captcha.language,siteKey:GLSR.captcha.sitekey,theme:GLSR.captcha.theme,"chalexpired-callback":()=>this.reset(),"close-callback":()=>this.Form.button.loaded(),"error-callback":()=>this.captchaEl.dataset.error=1,"expired-callback":()=>this.reset()})||1}render_recaptcha_v2_invisible(){this.render_recaptcha_v3()}render_recaptcha_v3(e){void 0!==window[this.captcha]?.render?this.widget=window[this.captcha].render(this.captchaEl,{callback:e=>this._submitFormWithToken(e),"error-callback":()=>this.captchaEl.dataset.error=1,"expired-callback":()=>this.reset(),isolated:!0}):this._retry_render(e=>this.render_recaptcha_v3(e),e)}render_turnstile(){this.widget=window[this.captcha].render(this.captchaEl,{action:"submit_review",callback:e=>this.token=e,"error-callback":()=>this.captchaEl.dataset.error=1,"expired-callback":()=>this.reset(),language:GLSR.captcha.language,sitekey:GLSR.captcha.sitekey,theme:GLSR.captcha.theme})}reset(){this.token=null,this.captchaEl&&(this.captchaEl.dataset.error=0),this.isWidgetLoaded()&&(["friendlycaptcha","friendlycaptcha_v2"].includes(GLSR.captcha.type)?this.widget.reset():window[this.captcha].reset(this.widget))}_buildContainer(){["friendlycaptcha","friendlycaptcha_v2"].includes(GLSR.captcha.type)&&this.isWidgetLoaded()&&this.widget.destroy(),Array.from(this.containerEl.getElementsByClassName(GLSR.captcha.class)).forEach(e=>e.remove()),this.captchaEl=v("div",{class:GLSR.captcha.class,"data-badge":GLSR.captcha.badge,"data-captcha-type":GLSR.captcha.captcha_type,"data-lang":GLSR.captcha.language,"data-isolated":!0,"data-sitekey":GLSR.captcha.sitekey,"data-size":GLSR.captcha.size,"data-theme":GLSR.captcha.theme,"data-type":GLSR.captcha.type}),this.containerEl.appendChild(this.captchaEl)}_retry_execute(e,t){if(void 0===t&&(t=1e4),t<=0)return console.warn("Site Reviews: captcha execute timed out"),this.captchaEl&&(this.captchaEl.dataset.error=1),void this.Form.submitForm();setTimeout(()=>e(t-100),100)}_retry_render(e,t){void 0===t&&(t=1e4),t<=0?console.warn("Site Reviews: captcha render timed out"):setTimeout(()=>e(t-100),100)}_submitFormWithToken(e){this.Form.form[GLSR.captcha.token_field]&&e&&(this.Form.form[GLSR.captcha.token_field].value=e),this.Form.submitForm()}}E._loading={};const L=(e,t,i=400,s={delay:0,direction:"normal",easing:"cubic-bezier(0.54,1.5,0.38,1.11)",endDelay:0,fill:"forwards",iterations:1})=>new Promise(r=>{t.animate([{opacity:"in"===e?0:1},{opacity:"in"===e?1:0}],{duration:i,...s}).onfinish=()=>r()}),S=(e,t,i)=>{e&&t.split(" ").forEach(t=>e.classList[i?"add":"remove"](t))},x=e=>"."+e.trim().split(" ").join("."),k=e=>{try{return[null,JSON.parse(e)]}catch(t){return[t,e]}},R={contains:(e,t)=>e.includes(t),equals:(e,t)=>{if(Array.isArray(e)){let i=t.split(/\s*(?:,|$)\s*/);return e.sort().toString()===i.sort().toString()}return O(t)?G(e)===+t:String(e)===String(t)},greater:(e,t)=>{const[i,s]=[A(e),A(t)];return null!==i&&null!==s?i>s:!!O(t)&&G(e)>+t},less:(e,t)=>{const[i,s]=[A(e),A(t)];return null!==i&&null!==s?i<s:!!O(t)&&G(e)<+t},not:(e,t)=>!R.equals(e,t)},T=e=>String(e.getAttribute("type")||e.nodeName).toLowerCase(),G=e=>isNaN(e)?e.length:+e,F=/^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}(?::\d{2})?)?$/,A=e=>{const t=String(e).trim();return F.test(t)?Date.parse(t):null},O=e=>""!==String(e).trim()&&!isNaN(Number(e));class C{constructor(e){this.config=GLSR.validation_config,this.elements=Array.from(e.form.elements),this.event=this.onChange.bind(this),this.Form=e}init(){this.eventListeners("add"),this.elements.forEach(e=>e.conditions={criteria:"always",observes:[],triggers:[]}),this._setConditionObserves(),this._setConditionTriggers()}destroy(){this.eventListeners("remove"),this.elements.forEach(e=>delete e.conditions)}eventListeners(e){this.elements.forEach(t=>t[e+"EventListener"](this.eventName(t),this.event))}eventName(e){return["radio","checkbox","select"].includes(T(e))?"change":"input"}onChange(e){e.currentTarget.conditions.triggers.forEach(e=>{let t=[];e.conditions.observes.forEach(e=>t.push(this.test(e))),t=t.filter(e=>e);const i=t.length===e.conditions.observes.length,s=t.length&&"any"===e.conditions.criteria,r=e.closest(x(this.config.field));i||s?(r.classList.remove(this.config.field_hidden),this.Form.validation.initField(e)):(e.validation&&this.Form.validation.destroyField(e.validation),this.resetValue(e),r.classList.add(this.config.field_hidden))})}resetValue(e){const t=T(e);if("select"===t)Array.from(e.options).forEach(e=>e.selected=e.defaultSelected);else if(["checkbox","radio"].includes(t)){let t=this.Form.form.elements[e.name];Array.from(t.length?t:[t]).forEach(e=>e.checked=e.defaultChecked)}else e.value=e.defaultValue||"";e.dispatchEvent(new Event(this.eventName(e)))}test(e){return!R.hasOwnProperty(e.operator)||R[e.operator](this.value(e.el),e.value)}value(e){const t=e.getAttribute("name"),i=T(e),s=this.Form.form.elements[t];return"radio"===i?s.value:["checkbox","select"].includes(i)?Array.from(s.length?s:[s]).filter(e=>e["checkbox"===i?"checked":"selected"]).map(e=>e.value):new String(e.value)}_setConditionObserves(){this.elements.filter(e=>e.dataset.conditions).forEach(e=>{let[t,i]=k(e.dataset.conditions);null===t&&i?.conditions?.length&&(i.conditions.forEach(t=>{const i=this.elements.filter(e=>e.closest(`[data-field="${t.name}"]`)).shift();i&&e.conditions.observes.push({el:i,...t})}),e.conditions.observes.length&&(e.conditions.criteria=i.criteria))})}_setConditionTriggers(){this.elements.forEach(e=>{this.elements.filter(e=>e.dataset.conditions).forEach(t=>{t.conditions.observes.forEach(i=>{i.el.getAttribute("name")===e.getAttribute("name")&&e.conditions.triggers.push(t)})})})}}const N=e=>"checkbox"===e.type?e.name+e.value:e.name,M=e=>sessionStorage.setItem(N(e.target),e.target.value);class j{constructor(e){this.fields=[],e.classList.contains("glsr-persist-data")&&[...e.elements].forEach(e=>{e.disabled||e.readonly||["file","hidden","password","submit"].includes(e.type)||!["input","select","textarea"].includes(e.localName)||this.fields.push(e)})}clear(){this.fields.length&&sessionStorage.clear()}destroy(){this.fields.forEach(e=>(e=>e.removeEventListener("change",M))(e))}init(){this.fields.forEach(e=>{(e=>{const t=sessionStorage.getItem(N(e));null!==t&&(["checkbox","radio"].includes(e.type)?e.checked=e.value===t:e.value=t,e.dispatchEvent(new Event("change")))})(e),(e=>{e.addEventListener("change",M)})(e)})}}function P(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function q(e,t,i){return t&&function(e,t){for(var i=0;i<t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&&(s.writable=!0),Object.defineProperty(e,s.key,s)}}(e.prototype,t),e}var $={classNames:{active:"gl-active",base:"gl-star-rating",selected:"gl-selected"},clearable:!0,maxStars:10,prebuilt:!1,stars:null,tooltip:"Select a Rating"},H=function(e,t,i){e.classList[t?"add":"remove"](i)},D=function(e){var t=document.createElement("span");for(var i in e=e||{})t.setAttribute(i,e[i]);return t},I=function(e,t,i){var s=D(i);return e.parentNode.insertBefore(s,t?e.nextSibling:e),s},W=function e(){for(var t=arguments.length,i=new Array(t),s=0;s<t;s++)i[s]=arguments[s];var r={};return i.forEach(function(t){Object.keys(t||{}).forEach(function(s){if(void 0!==i[0][s]){var n=t[s];"Object"!==z(n)||"Object"!==z(r[s])?r[s]=n:r[s]=e(r[s],n)}})}),r},z=function(e){return{}.toString.call(e).slice(8,-1)},V=function(){function e(t,i){var s,r,n,a;P(this,e),this.direction=window.getComputedStyle(t,null).getPropertyValue("direction"),this.el=t,this.events={change:this.onChange.bind(this),keydown:this.onKeyDown.bind(this),mousedown:this.onPointerDown.bind(this),mouseleave:this.onPointerLeave.bind(this),mousemove:this.onPointerMove.bind(this),reset:this.onReset.bind(this),touchend:this.onPointerDown.bind(this),touchmove:this.onPointerMove.bind(this)},this.indexActive=null,this.indexSelected=null,this.props=i,this.tick=null,this.ticking=!1,this.values=(n=t,a=[],[].forEach.call(n.options,function(e){var t=parseInt(e.value,10)||0;t>0&&a.push({index:e.index,text:e.text,value:t})}),a.sort(function(e,t){return e.value-t.value})),this.widgetEl=null,this.el.widget&&this.el.widget.destroy(),s=this.values.length,r=this.props.maxStars,/^\d+$/.test(s)&&1<=s&&s<=r?this.build():this.destroy()}return q(e,[{key:"build",value:function(){this.destroy(),this.buildWidget(),this.selectValue(this.indexSelected=this.selected(),!1),this.handleEvents("add"),this.el.widget=this}},{key:"buildWidget",value:function(){var e=this,t=null,i=null;this.props.prebuilt&&(t=this.el.parentNode,i=t.querySelector("."+this.props.classNames.base+"--stars")),null===i&&((t=I(this.el,!1,{class:this.props.classNames.base})).appendChild(this.el),i=I(this.el,!0,{class:this.props.classNames.base+"--stars"}),this.values.forEach(function(t,s){var r=D({"data-index":s,"data-value":t.value});"function"==typeof e.props.stars&&e.props.stars.call(e,r,t,s),[].forEach.call(r.children,function(e){return e.style.pointerEvents="none"}),i.innerHTML+=r.outerHTML})),t.dataset.starRating="",t.classList.add(this.props.classNames.base+"--"+this.direction),this.props.tooltip&&i.setAttribute("role","tooltip"),this.widgetEl=i}},{key:"changeIndexTo",value:function(e,t){var i=this;if(this.indexActive!==e||t){if([].forEach.call(this.widgetEl.children,function(t,s){H(t,s<=e,i.props.classNames.active),H(t,s===i.indexSelected,i.props.classNames.selected)}),this.widgetEl.setAttribute("data-rating",e+1),"function"==typeof this.props.stars||this.props.prebuilt||(this.widgetEl.classList.remove("s"+10*(this.indexActive+1)),this.widgetEl.classList.add("s"+10*(e+1))),this.props.tooltip){var s,r=e<0?this.props.tooltip:null===(s=this.values[e])||void 0===s?void 0:s.text;this.widgetEl.setAttribute("aria-label",r)}this.indexActive=e}this.ticking=!1}},{key:"destroy",value:function(){this.indexActive=null,this.indexSelected=this.selected();var e=this.el.parentNode;e.classList.contains(this.props.classNames.base)&&(this.props.prebuilt?(this.widgetEl=e.querySelector("."+this.props.classNames.base+"--stars"),e.classList.remove(this.props.classNames.base+"--"+this.direction),delete e.dataset.starRating):e.parentNode.replaceChild(this.el,e),this.handleEvents("remove")),delete this.el.widget}},{key:"eventListener",value:function(e,t,i,s){var r=this;i.forEach(function(i){return e[t+"EventListener"](i,r.events[i],s||!1)})}},{key:"handleEvents",value:function(e){var t=this.el.closest("form");t&&"FORM"===t.tagName&&this.eventListener(t,e,["reset"]),this.eventListener(this.el,e,["change"]),"add"===e&&this.el.disabled||(this.eventListener(this.el,e,["keydown"]),this.eventListener(this.widgetEl,e,["mousedown","mouseleave","mousemove","touchend","touchmove"],!1))}},{key:"indexFromEvent",value:function(e){var t,i,s=(null===(t=e.touches)||void 0===t?void 0:t[0])||(null===(i=e.changedTouches)||void 0===i?void 0:i[0])||e,r=document.elementFromPoint(s.clientX,s.clientY);return r.parentNode===this.widgetEl?[].slice.call(r.parentNode.children).indexOf(r):this.indexActive}},{key:"onChange",value:function(){this.changeIndexTo(this.selected(),!0)}},{key:"onKeyDown",value:function(e){var t=e.key.slice(5);if(~["Left","Right"].indexOf(t)){e.preventDefault();var i="Left"===t?-1:1;"rtl"===this.direction&&(i*=-1);var s=this.values.length-1,r=Math.min(Math.max(this.selected()+i,-1),s);this.selectValue(r,!0)}}},{key:"onPointerDown",value:function(e){e.preventDefault();var t=this.indexFromEvent(e);this.props.clearable&&t===this.indexSelected&&(t=-1),this.selectValue(t,!0)}},{key:"onPointerLeave",value:function(e){var t=this;e.preventDefault(),cancelAnimationFrame(this.tick),requestAnimationFrame(function(){return t.changeIndexTo(t.indexSelected)})}},{key:"onPointerMove",value:function(e){var t=this;e.preventDefault(),this.ticking||(this.tick=requestAnimationFrame(function(){return t.changeIndexTo(t.indexFromEvent(e))}),this.ticking=!0)}},{key:"onReset",value:function(){var e,t=this.valueIndex(null===(e=this.el.querySelector("[selected]"))||void 0===e?void 0:e.value);this.selectValue(t||-1,!1)}},{key:"selected",value:function(){return this.valueIndex(this.el.value)}},{key:"selectValue",value:function(e,t){var i;this.el.value=(null===(i=this.values[e])||void 0===i?void 0:i.value)||"",this.indexSelected=this.selected(),!1===t?this.changeIndexTo(this.selected(),!0):this.el.dispatchEvent(new Event("change"))}},{key:"valueIndex",value:function(e){return this.values.findIndex(function(t){return t.value===+e})}}]),e}(),X=function(){function e(t,i){P(this,e),this.destroy=this.destroy.bind(this),this.props=i,this.rebuild=this.rebuild.bind(this),this.selector=t,this.widgets=[],this.build()}return q(e,[{key:"build",value:function(){var e=this;this.queryElements(this.selector).forEach(function(t){var i=W($,e.props,JSON.parse(t.getAttribute("data-options")));"SELECT"!==t.tagName||t.widget||(!i.prebuilt&&t.parentNode.classList.contains(i.classNames.base)&&e.unwrap(t),e.widgets.push(new V(t,i)))})}},{key:"destroy",value:function(){this.widgets.forEach(function(e){return e.destroy()}),this.widgets=[]}},{key:"queryElements",value:function(e){return"HTMLSelectElement"===z(e)?[e]:"NodeList"===z(e)?[].slice.call(e):"String"===z(e)?[].slice.call(document.querySelectorAll(e)):[]}},{key:"rebuild",value:function(){this.destroy(),this.build()}},{key:"unwrap",value:function(e){var t=e.parentNode,i=t.parentNode;i.insertBefore(e,t),i.removeChild(t)}}]),e}();const Y={classNames:{base:"glsr-star-rating"},clearable:!1,tooltip:!1},J=["required","max","maxlength","min","minlength","pattern"],B=e=>{const t=e.getAttribute("name");return e.validation.form.querySelectorAll(`input[name="${t}"]:checked`).length},U={email:{fn:function(e){return!e||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)}},max:{fn:function(e,t){return!e||("checkbox"===this.type?B(this)<=parseInt(t):parseFloat(e)<=parseFloat(t))}},maxlength:{fn:function(e,t){return!e||e.length<=parseInt(t)}},min:{fn:function(e,t){return!e||("checkbox"===this.type?B(this)>=parseInt(t):parseFloat(e)>=parseFloat(t))}},minlength:{fn:function(e,t){return!e||e.length>=parseInt(t)}},number:{fn:function(e){return!e||!isNaN(parseFloat(e))&&isFinite(e)},priority:2},pattern:{fn:function(e,t){let i=t.match(new RegExp("^/(.*?)/([gimy]*)$"));return!e||!i||new RegExp(i[1],i[2]).test(e)}},required:{fn:function(e){return~["checkbox","radio"].indexOf(this.type)?B(this):null!=e&&String(e).replace(/\s/g,"").length>0},priority:99,halt:!0},tel:{fn:function(e){if(!e)return!0;let t=e.replace(/[^0-9]/g,"").length;return 4<=t&&15>=t&&new RegExp("^[+]?[\\d\\s()-]*$").test(e)}},url:{fn:function(e){return!e||new RegExp("^(https?)://([\\p{L}\\p{N}\\p{S}\\-_.])+(\\.?([\\p{L}\\p{N}]|xn--[\\p{L}\\p{N}\\-]+)+\\.?)(:[0-9]+)?(?:/(?:[\\p{L}\\p{N}\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})*)*(?:\\?(?:[\\p{L}\\p{N}\\-._~!$&'\\[\\]()*+,;=:@/?]|%[0-9A-Fa-f]{2})*)?(?:#(?:[\\p{L}\\p{N}\\-._~!$&'()*+,;=:@/?]|%[0-9A-Fa-f]{2})*)?$","iu").test(e)}}};class K{constructor(e){this.config=GLSR.validation_config,this.event=this._onChange.bind(this),this.fields=[],this.form=e,this.form.setAttribute("novalidate",""),this.strings=GLSR.validation_strings}destroy(){for(;this.fields.length;)this.destroyField(this.fields[0])}destroyField(e){this.resetField(e),this._eventListener("remove",e.input),delete e.input.validation,this.fields=this.fields.filter(t=>t.input!==e.input)}init(){this.form.querySelectorAll("input:not([type=hidden]):not([type=submit]), select, textarea, [data-glsr-validate]").forEach(e=>this.initField(e))}initField(e){if(this.fields.find(t=>t.input.name===e.name&&"radio"!==e.type&&!e.name.endsWith("[]")))return;const t=e.closest(x(this.config.field));t?.offsetParent&&this.fields.push(this._initField(e))}reset(){this.fields.forEach(e=>this.resetField(e))}resetField(e){let t=e.input.closest(x(this.config.field));S(e.input,this.config.input_error,!1),S(e.input,this.config.input_valid,!1),t&&(S(t,this.config.field_error,!1),S(t,this.config.field_valid,!1)),e.errors=[]}setErrors(e,t){e.hasOwnProperty("validation")||this._initField(e),e.validation.errors=t}setInvalid(e){this.toggleError(e,!0)}setValid(e){this.toggleError(e,!1)}toggleError(e,t){let i=e.input.closest(x(this.config.field)),s=[e.input];if(e?.input?.form instanceof HTMLFormElement&&(s=e.input.form.querySelectorAll(`[name="${e.input.name}"]`)),s.forEach(e=>{S(e,this.config.input_error,t),S(e,this.config.input_valid,!t)}),i){S(i,this.config.field_error,t),S(i,this.config.field_valid,!t);let s=i.querySelector(x(this.config.field_message));s&&(s.innerHTML=t?e.errors.join("<br>"):"",s.style.display=t?"":"none")}}validate(e){let t=!0,i=this.fields;return e instanceof HTMLElement&&e.hasOwnProperty("validation")&&(i=[e.validation]),i.forEach(e=>{this._validateField(e)?this.toggleError(e,!1):(this.toggleError(e,!0),t=!1)}),t}_addValidators(e,t,i){[].forEach.call(e,e=>{let s=e.name.replace("data-","");~J.indexOf(s)?this._addValidatorToField(t,i,s,e.value):"type"===e.name&&this._addValidatorToField(t,i,e.value)})}_addValidatorToField(e,t,i,s){if(U.hasOwnProperty(i)&&(U[i].name=i,e.push(U[i]),s)){let e="pattern"===i?[s]:s.split(",");e.unshift(null),t[i]=e}}_eventListener(e,t){const i=t.getAttribute("type")||t.nodeName,s=~["radio","checkbox","SELECT"].indexOf(i)?"change":"input";t[e+"EventListener"](s,this.event)}_onChange(e){this.validate(e.currentTarget)}_initField(e){let t={},i=[];return null!==e.offsetParent&&(this._addValidators(e.attributes,i,t),this._sortValidators(i),this._eventListener("add",e)),e.validation={form:this.form,input:e,params:t,validate:()=>this.validate(e),validators:i}}_sortValidators(e){e.sort((e,t)=>(t.priority||1)-(e.priority||1))}_validateField(e){let t=[],i=!0;for(let s in e.validators){if(!e.validators.hasOwnProperty(s))continue;let r=e.validators[s],n=e.params[r.name]?e.params[r.name]:[];if(n[0]=e.input.value,!r.fn.apply(e.input,n)){i=!1;let e=this.strings[r.name];if(t.push(e.replace(/(\%s)/g,n[1])),!0===r.halt)break}}return e.errors=t,i}}class Q{constructor(e,t){this.button=w(t),this.config=GLSR.validation_config,this.events={reset:this._onReset.bind(this),submit:this._onSubmit.bind(this)},this.form=e,this.isActive=!1,this.stars=(()=>{let e=null;const t=()=>!!e&&(e.rebuild(),!0);return{init:(i,s={})=>(t()||(e=new X(i,Object.assign({},Y,s))),e),destroy:()=>!!e&&(e.destroy(),!0),rebuild:t}})(),this.strings=GLSR.validation_strings,this.captcha=new E(this),this.conditions=new C(this),this.validation=new K(e),this.reviewsEl=document.getElementById(e.closest(".glsr")?.dataset?.reviews_id),this.session=new j(e),this.summaryEl=document.getElementById(e.closest(".glsr")?.dataset?.summary_id)}destroy(){this._destroyForm(),this.stars.destroy(),this.captcha.reset(),this.isActive=!1}init(){this.isActive||(this._initForm(),this.stars.init(this.form.querySelectorAll(".glsr-field-rating select"),GLSR.stars_config),this.captcha.render(),this.isActive=!0)}submitForm(){this.button.loading(),o.submit(this._data()).then(e=>this._handleResponse(e.data,e.success))}_data(){const e=new FormData(this.form),t={_reviews_atts:this.reviewsEl,_summary_atts:this.summaryEl};this.reviewsEl&&(e.append([`${GLSR.nameprefix}[_pagination_atts][page]`],1),e.append([`${GLSR.nameprefix}[_pagination_atts][url]`],location.href));for(let i in t)if(t[i])try{const s=JSON.parse(JSON.stringify(t[i].dataset));for(let t of Object.keys(s)){let r;try{r=JSON.parse(s[t])}catch(e){r=s[t]}e.append(`${GLSR.nameprefix}[${i}][${t}]`,r)}}catch(e){console.error(e)}return e}_destroyForm(){this.form.removeEventListener("reset",this.events.reset),this.form.removeEventListener("submit",this.events.submit),this._resetErrors(),this.conditions.destroy(),this.session.destroy(),this.validation.destroy()}_handleResponse(e,t){const i=!0===t&&void 0!==e;if(this.captcha.reset(),i&&(this.form.reset(),this.session.clear()),this._showFieldErrors(e?.errors),this._showResults(e?.message,i),this.button.loaded(),GLSR.Event.trigger("site-reviews/form/handle",e,this.form),i){if(e.redirect&&""!==e.redirect)return void(window.location=e.redirect);if(this.reviewsEl&&e.reviews&&(this.reviewsEl.innerHTML=e.reviews,GLSR.url_parameter)){let e=new URL(location.href);e.searchParams.delete(GLSR.url_parameter),window.history.replaceState({},"",e.toString())}this.summaryEl&&e.summary&&(this.summaryEl.innerHTML=e.summary),GLSR.Event.trigger("site-reviews/init")}}_initForm(){this._destroyForm(),this.form.addEventListener("reset",this.events.reset),this.form.addEventListener("submit",this.events.submit),this.conditions.init(),this.session.init(),this.validation.init()}_onReset(e){this.conditions.destroy(),this.conditions.init()}_onSubmit(e){if(!this.validation.validate())return e.preventDefault(),void this._showResults(this.strings.errors,!1);e.preventDefault(),this._resetErrors(),this.button.loading(),this.captcha.execute()}_resetErrors(){S(this.form,this.config.form_error,!1),this._showResults("",null),this.validation.reset()}_showFieldErrors(e){if(e)for(let t in e){if(!e.hasOwnProperty(t))continue;const i=GLSR.nameprefix?GLSR.nameprefix+"["+t+"]":t,s=this.form.querySelector('[name="'+i+'"]');s&&(this.validation.setErrors(s,e[t]),this.validation.toggleError(s.validation,"add"))}}_showResults(e,t){if(!e)return;const i=this.form.querySelector(x(this.config.form_message));null!==i&&(S(this.form,this.config.form_error,!1===t),S(i,this.config.form_message_failed,!1===t),S(i,this.config.form_message_success,!0===t),i.innerHTML=e)}}var Z=':host{display:contents;font-size:var(--wp--preset--font-size--normal,1rem)}dialog{background-color:var(--glsr-modal-bg,#fff);border:0;border-radius:var(--glsr-modal-radius,3px);box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);box-sizing:border-box;color:inherit;flex-direction:column;height:-moz-fit-content;height:fit-content;max-height:min(1024px,calc(100vh - 2em));max-width:min(768px,calc(100vw - 2em));min-height:160px;min-width:320px;opacity:0;overflow:hidden;padding:0;transform:scale(.92);transition:display var(--glsr-duration-fast,.15s) allow-discrete,height var(--glsr-duration-fast,.15s) cubic-bezier(0,0,.2,1),opacity var(--glsr-duration-fast,.15s) cubic-bezier(0,0,.2,1),overlay var(--glsr-duration-fast,.15s) allow-discrete,transform var(--glsr-duration-fast,.15s) cubic-bezier(0,0,.2,1);width:100vw}dialog[open]{display:flex;opacity:1;transform:scale(1);transition-duration:var(--glsr-duration-slow,.3s),var(--glsr-duration-fast,.15s),var(--glsr-duration-slow,.3s),var(--glsr-duration-slow,.3s),var(--glsr-duration-slow,.3s)}@starting-style{dialog[open]{opacity:0;transform:scale(.92)}}dialog::backdrop{background:rgba(0,0,0,.6);opacity:0;transition:display var(--glsr-duration-fast,.15s) allow-discrete,opacity var(--glsr-duration-fast,.15s) cubic-bezier(0,0,.2,1),overlay var(--glsr-duration-fast,.15s) allow-discrete}dialog[open]::backdrop{opacity:1;transition-duration:var(--glsr-duration-slow,.3s)}@starting-style{dialog[open]::backdrop{opacity:0}}:host(.glsr-modal-small) dialog{min-height:auto;width:480px}:host(.glsr-modal-fullscreen) dialog{height:100vh;max-height:calc(100vh - 2em);max-width:calc(100vw - 2em);width:100vw}button.close{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;border-radius:2px;box-shadow:none;color:inherit;cursor:pointer;display:flex;font-size:1em;height:1.5em;inset-block-start:0;inset-inline-end:0;justify-content:center;line-height:1;margin:.75em 1em;padding:0;position:absolute;transform:scale(1);transition:transform var(--glsr-duration-fast,.15s) ease-in;width:1.5em;z-index:10}button.close:hover{transform:scale(1.1)}button.close:focus-visible{outline:2px solid currentColor;outline-offset:2px}button.close:before{content:"\\2715";font-family:arial,sans-serif;font-size:1.5em;font-weight:700;line-height:1}dialog.is-blocked{animation:glsr-modal-blocked .3s cubic-bezier(.25,.46,.45,.94)}@keyframes glsr-modal-blocked{0%,to{transform:translateX(0)}25%{transform:translateX(-.375em)}75%{transform:translateX(.375em)}}@media (prefers-reduced-motion:reduce){button.close,dialog,dialog::backdrop{transition-duration:.01ms}dialog.is-blocked{animation:none}}';const ee=["[contenteditable]",'[tabindex]:not([tabindex^="-"])',"a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])"],te={focus:!1,onClose:()=>{},onOpen:()=>{}},ie="data-glsr-close",se="glsr-modal",re="data-glsr-trigger",ne="undefined"!=typeof HTMLDialogElement&&!!HTMLDialogElement.prototype.showModal&&!!Element.prototype.attachShadow;let ae=0;const oe=[],le=(e,t)=>{oe.includes(e)||(oe.push(e),console.info(`[site-reviews] ${e} is deprecated; use ${t} instead.`))},ce=e=>{try{e()}catch(e){console.error("[site-reviews] a modal callback failed:",e)}},de=(e,t={})=>(t.class=se+"__"+e,t);class he{constructor(e,t={}){this.id=e,this.events={_cancel:this._onCancel.bind(this),_click:this._onClick.bind(this),_closed:this._onClosed.bind(this),_dialogClick:this._onDialogClick.bind(this),_open:this._openModal.bind(this),_transitionend:this._onTransitionEnd.bind(this)},this.triggers=[],this._config(t),this._reset()}get dom(){return le("Modal.dom","the modal instance API (style, hideClose, header/content/footer)"),this._dom||(this._dom={body:this._body,close:this._close,content:this._regions?this._regions.content:null,dialog:this._dialog,footer:this._regions?this._regions.footer:null,header:this._regions?this._regions.header:null}),this._dom}get isOpen(){return!!this.root}get trigger(){return this._trigger}close(){this._closeModal()}content(e,t){return this._region("content",e,t)}footer(e,t){return this._region("footer",e,t)}header(e,t){const i=this._region("header",e,t);if(i&&this._dialog){const e=i.textContent.trim();e?this._dialog.setAttribute("aria-label",e):this._dialog.removeAttribute("aria-label")}return i}hideClose(){this._close&&(this._close.hidden=!0)}style(e){this._dialog&&("string"==typeof e?this._dialog.style.cssText=e:e&&"object"==typeof e&&Object.assign(this._dialog.style,e))}_animateResize(){const e=this._dialog,t=this._lastHeight;if(!e||!e.open||null==t)return;e.style.height="";const i=e.offsetHeight;Math.abs(i-t)<1||(e.style.height=t+"px",e.offsetHeight,e.style.height=i+"px")}_closeModal(e=null){this._dialog&&this._dialog.open&&this._dialog.close()}_config(e){return this.config=Object.assign({},te,e),this}_insertModal(){const e=v("div",{class:se,id:this.id}),t=e.attachShadow({mode:"open"}),i=v("button",{"aria-label":GLSR.text.close_modal,class:"close",part:"close",type:"button"}),s=v("dialog",{part:"dialog"},i,v("slot",{name:"header"}),v("slot",{name:"body"}),v("slot",{name:"footer"}));(e=>{try{const t=new CSSStyleSheet;return t.replaceSync(Z),e.adoptedStyleSheets=[t],!0}catch(e){return!1}})(t)||t.appendChild(v("style",{},Z)),t.appendChild(s);const r=v("div",de("content",{tabindex:-1})),n=v("div",de("header",{slot:"header"})),a=v("div",de("footer",{slot:"footer"})),o=v("div",de("body",{slot:"body"}),v("div",de("inner"),r));e.append(n,o,a),this._body=o,this._close=i,this._dialog=s,this._regions={content:r,footer:a,header:n},this.root=document.body.appendChild(e),i.addEventListener("click",this.events._click),s.addEventListener("cancel",this.events._cancel),s.addEventListener("click",this.events._dialogClick),s.addEventListener("close",this.events._closed),s.addEventListener("transitionend",this.events._transitionend),e.addEventListener("click",this.events._click),this._observer=new MutationObserver(()=>this._animateResize()),this._observer.observe(e,{attributeFilter:["hidden"],childList:!0,subtree:!0}),this._resizeObserver=new ResizeObserver(()=>{this._dialog&&(this._lastHeight=this._dialog.offsetHeight)}),this._resizeObserver.observe(s)}_isDirtyGuarded(){return!this._cancelWarned&&!!Array.from(this.root.querySelectorAll("input, textarea, select")).some(e=>"hidden"!==e.type&&("checkbox"===e.type||"radio"===e.type?e.checked!==e.defaultChecked:"SELECT"===e.tagName?Array.from(e.options).some(e=>e.selected!==e.defaultSelected):e.value!==e.defaultValue))&&(this._cancelWarned=!0,this._dialog.classList.add("is-blocked"),setTimeout(()=>this._dialog&&this._dialog.classList.remove("is-blocked"),400),!0)}_onCancel(e){this._isDirtyGuarded()&&e.preventDefault()}_onClick(e){(e.target.closest(`[${ie}]`)||e.target===this._close)&&(e.preventDefault(),this._closeModal(e))}_onClosed(e){ae=Math.max(0,ae-1),0===ae&&document.documentElement.classList.remove("glsr-modal-open"),ce(()=>this.config.onClose(this,e)),ce(()=>GLSR.Event.trigger("site-reviews/modal/close",this,e)),this._trigger&&this._trigger.focus&&this._trigger.focus();const t=this.root,i=this._dialog;this._reset();const s=setTimeout(()=>t.remove(),500);i.addEventListener("transitionend",()=>{clearTimeout(s),t.remove()},{once:!0})}_onDialogClick(e){if(e.target!==this._dialog)return;const t=this._dialog.getBoundingClientRect();t.top<=e.clientY&&e.clientY<=t.bottom&&t.left<=e.clientX&&e.clientX<=t.right||this._isDirtyGuarded()||this._closeModal(e)}_onTransitionEnd(e){"height"===e.propertyName&&e.target===this._dialog&&(this._dialog.style.height="")}_openModal(e){this.root||(this._trigger=document.activeElement,e&&(e.preventDefault(),this._trigger=e.currentTarget),this._insertModal(),ae++,document.documentElement.classList.add("glsr-modal-open"),ce(()=>this.config.onOpen(this,e)),ce(()=>GLSR.Event.trigger("site-reviews/modal/open",this,e)),this._dialog.showModal(),this.config.focus&&this._setFocusToFirstNode())}_region(e,t,i=null){if(!this._regions||!this._regions[e])return null;const s=this._regions[e];if(null==t)return s;if(s.textContent="",t instanceof Node)s.appendChild(v("div",i||{},t));else if(""!==t){const e=v("div",i||{});e.innerHTML=t,s.appendChild(e)}return s}_registerTrigger(e){this._removeTrigger(e),e.addEventListener("click",this.events._open),this.triggers.push(e)}_removeTrigger(e){this.triggers=this.triggers.filter(t=>t!==e),e.removeEventListener("click",this.events._open)}_removeTriggers(){this.triggers.forEach(e=>this._removeTrigger(e)),this.triggers=[]}_reset(){this._observer&&this._observer.disconnect(),this._resizeObserver&&this._resizeObserver.disconnect(),this.root=null,this._body=null,this._cancelWarned=!1,this._close=null,this._dialog=null,this._dom=null,this._lastHeight=null,this._observer=null,this._regions=null,this._resizeObserver=null,this._trigger=null}_setFocusToFirstNode(){const e=Array.from(this.root.querySelectorAll(ee)).find(e=>!e.hasAttribute(ie)&&null!==e.offsetParent);e&&e.focus()}}const ue={},pe=e=>ue[e]||null;var ge={close:e=>{if(e)ue[e]&&ue[e]._closeModal();else for(let e in ue)ue[e]._closeModal()},get:pe,init:(e,t)=>{if(!ne)return;let i;ue[e]?(i=ue[e],i._removeTriggers(),t&&i._config(t)):i=new he(e,t),document.querySelectorAll(`[${re}]`).forEach(t=>{e===t.getAttribute(re)&&i._registerTrigger(t)}),ue[e]=i},modify:(e,t)=>{le("GLSR.Modal.modify()","GLSR.Modal.get()");const i=pe(e);i&&t(i)},open:(e,t)=>{if(!ne)return;let i;ue[e]?(i=ue[e],t&&i._config(t)):i=new he(e,t),ue[e]=i,i._openModal()}};const fe="glsr-hide";class me{constructor(e,t){this.events={button:{click:this._onLoadMore.bind(this)},link:{click:this._onPaginate.bind(this)},window:{popstate:this._onPopstate.bind(this)}},this.paginationEl=t,this.reviewsEl=e.querySelector(".glsr-reviews, [data-reviews]"),this.wrapperEl=e}destroy(){this._eventHandler("remove")}init(){this._eventHandler("add");const e=this.paginationEl.querySelector(".current");if(e){const t=this._data(e),i=e.nextElementSibling;t&&i&&2===+i.dataset.page&&GLSR.url_parameter&&window.history.replaceState(t,"",window.location)}}_data(e){try{const i=JSON.parse(JSON.stringify(this.paginationEl.dataset)),s={_action:"fetch-paged-reviews",atts:{},page:e.dataset.page||1,schema:!1,url:e.href||location.href};for(var t of Object.keys(i))try{s.atts[t]=JSON.parse(i[t])}catch(e){s.atts[t]=i[t]}return s}catch(e){return console.error("Invalid pagination config."),!1}}_eventHandler(e){this._eventListener(window,e,this.events.window),this.wrapperEl.querySelectorAll("button.glsr-button-loadmore").forEach(t=>{this._eventListener(t,e,this.events.button)}),this.wrapperEl.querySelectorAll(".glsr-pagination a[data-page]").forEach(t=>{this._eventListener(t,e,this.events.link)})}_eventListener(e,t,i){Object.keys(i).forEach(s=>e[t+"EventListener"](s,i[s]))}_handleLoadMore(e,t,i,s){if(!s)return void(window.location=location);e.loaded();const r=Number(e.el.dataset.page)+1;e.el.dataset.page=r,i.max_num_pages<r&&(this.paginationEl.innerHTML=""),this.reviewsEl.insertAdjacentHTML("beforeend",i.reviews),GLSR.Event.trigger("site-reviews/pagination/handle",i,this)}_handlePagination(e,t,i,s){s?(this._paginate(i),GLSR.url_parameter&&window.history.pushState(t,"",e.href)):window.location=e.href}_handlePopstate(e,t,i){i?this._paginate(t):console.error(t)}_loaded(){const e=this.paginationEl.querySelector(".glsr-spinner");e&&this.paginationEl.removeChild(e),this.wrapperEl.classList.remove(fe)}_loading(){this.wrapperEl.classList.add(fe),this.paginationEl.insertAdjacentHTML("beforeend",'<div class="glsr-spinner"></div>')}_onLoadMore(e){const t=e.currentTarget,i=this._data(t);if(i){const s=w(t);s.loading(),e.preventDefault(),o.pagedReviews(i).then(e=>this._handleLoadMore(s,i,e.data,e.success))}}_onPaginate(e){const t=e.currentTarget,i=this._data(t);i&&(this._loading(),e.preventDefault(),o.pagedReviews(i).then(e=>this._handlePagination(t,i,e.data,e.success)))}_onPopstate(e){GLSR.Event.trigger("site-reviews/pagination/popstate",e,this),e.state&&"fetch-paged-reviews"===e.state._action?(this._loading(),o.pagedReviews(e.state).then(t=>this._handlePopstate(e.state,t.data,t.success))):e.state&&e.state[`${GLSR.nameprefix}[_action]`]&&(this._loading(),GLSR.ajax.post(e.state,this._handlePopstate.bind(this,e.state)))}_paginate(e){this.destroy(),this.paginationEl.innerHTML=e.pagination,this.reviewsEl.innerHTML=e.reviews,this.init(),this._scrollToTop(),this._loaded(),GLSR.Event.trigger("site-reviews/pagination/handle",e,this)}_scrollStep(e){const t=Math.min(1,(window.performance.now()-e.startTime)/468),i=.5*(1-Math.cos(Math.PI*t)),s=e.startY+(e.endY-e.startY)*i;window.scroll(0,e.offset+s),s!==e.endY&&window.requestAnimationFrame(this._scrollStep.bind(this,e))}_scrollToTop(){let e=16;[].forEach.call(GLSR.ajax_pagination,t=>{const i=document.querySelector(t);i&&"fixed"===window.getComputedStyle(i).getPropertyValue("position")&&(e+=i.clientHeight)});const t=this.reviewsEl.getBoundingClientRect().top-e;t>0||this._scrollStep({endY:t,offset:window.pageYOffset,startTime:window.performance.now(),startY:this.reviewsEl.scrollTop})}}const ve="site-reviews/excerpts/init",_e="site-reviews/forms/init",be="site-reviews/init",ye="site-reviews/modal/init",we="site-reviews/pagination/init",Ee=e=>{new y(e),u.trigger(ye)},Le=()=>{GLSR.forms=GLSR.forms.filter(e=>!!e.form.closest("body")),document.querySelectorAll("form.glsr-review-form").forEach(e=>{const t=e.querySelector("[type=submit]");if(t){let i,s=GLSR.forms.findIndex(t=>t.form===e);-1!==s?(i=GLSR.forms[s],i.destroy()):(i=new Q(e,t),GLSR.forms.push(i)),i.init()}})},Se=()=>{GLSR.Modal.init("glsr-modal-review",{onOpen:e=>{const t=e.trigger.closest(".glsr"),i=t.cloneNode(!0),s=e.trigger.closest(".glsr-review").cloneNode(!0);s.querySelectorAll('[data-expanded="false"]').forEach(e=>e.dataset.expanded="true"),s.removeAttribute("id"),i.innerHTML="",i.removeAttribute("id"),i.appendChild(s);const r=GLSR.modal_wrapped_by.includes(i.dataset.from)?v("div",{class:t.parentElement.className,id:t.parentElement.parentElement.id,style:t.parentElement.style.cssText},i):i;e.content(r)}})},xe=()=>{GLSR.pagination.forEach(e=>e.destroy()),GLSR.pagination=[],document.querySelectorAll(".glsr").forEach(e=>{const t=e.querySelector(".glsr-pagination");if(t&&(t.classList.contains("glsr-ajax-loadmore")||t.classList.contains("glsr-ajax-pagination"))){const i=new me(e,t);i.init(),GLSR.pagination.push(i)}})},ke=()=>{document.querySelectorAll(".glsr").forEach(e=>{const t="glsr-"+window.getComputedStyle(e,null).getPropertyValue("direction");e.classList.add(t)}),u.trigger(ve),u.trigger(_e),u.trigger(we),u.trigger("site-reviews/loaded")},Re=()=>{u.on("block:site-reviews/review",Ee),u.on("block:site-reviews/reviews",Ee),u.on("block:site-reviews/form",Le),u.on(ve,Ee),u.on(_e,Le),u.on(ye,Se),u.on(we,xe),u.on(be,ke),u.on("site-reviews/pagination/handle",(e,t)=>{u.trigger(ve,t.wrapperEl)})};window.hasOwnProperty("GLSR")||(window.GLSR={}),window.GLSR.ajax=l,window.GLSR.request=o,window.GLSR.forms=[],window.GLSR.pagination=[],window.GLSR.Event=u,window.GLSR.Modal=ge,window.GLSR.Utils={debounce:(e,t=200)=>{let i=null;return(...s)=>{clearTimeout(i),i=setTimeout(e,t,...s)}},dom:v,fadeIn:async(e,t,i)=>L("in",e,t,i),fadeOut:async(e,t,i)=>L("out",e,t,i),isEmpty:e=>[Object,Array].includes((e||{}).constructor)&&!Object.entries(e||{}).length,parseJson:k,throttle:(e,t=32)=>{let i=null,s=0;return function(...r){const n=Date.now(),a=n-s;if(a>=t)return i&&(clearTimeout(i),i=null),s=n,e.apply(this,r);i||(i=setTimeout(()=>{s=Date.now(),i=null,e.apply(this,r)},t-a))}}},window.GLSR_init=(e,...t)=>{0===Object.keys(u.events).length&&Re(),u.trigger(e||be,...t)},document.addEventListener("DOMContentLoaded",()=>{Re(),setTimeout(()=>u.trigger(be),5),setTimeout(()=>(()=>{const e=new URL(location.href),t=Object.fromEntries(e.searchParams);if(!t.review_id)return;const i=t.verified?"verified":"approved",s=["form","review_id","theme","verified"],r=Object.fromEntries(s.filter(e=>e in t).map(e=>[e,t[e]]));s.forEach(t=>e.searchParams.delete(t)),history.replaceState({},"",e),o.review(t.review_id,r).then(({data:e,success:t})=>{if(!t)return console.error({request:r,response:e});GLSR.Modal.open(`glsr-modal-${i}`,{onOpen:t=>{t.content(e.review,e.attributes).querySelectorAll('[data-expanded="false"]').forEach(e=>e.dataset.expanded="true"),e.message&&t.footer(`<p style="margin:0;padding:0;">${e.message}</p>`)}})})})(),10)})}();