1export function readCredentials(doc){const cfg=doc.getElementById("pr-config");return cfg?{api_key:cfg.dataset.apiKey,merchant_group_id:cfg.dataset.merchantGroupId,merchant_id:cfg.dataset.merchantId,locale:cfg.dataset.locale}:{}}export function wireSnippetScroll(doc){const snippet=doc.getElementById("pr-reviewsnippet"),display=doc.getElementById("pr-reviewdisplay");!snippet||!display||snippet.addEventListener("click",event=>{event.target.closest(".pr-snippet-review-count")&&(event.preventDefault(),display.scrollIntoView({behavior:"smooth"}))})}export function buildSubject(dataset){if(dataset.prSubject)try{return JSON.parse(dataset.prSubject)}catch{return}}export function readTestPageId(doc){const cfg=doc.getElementById("pr-config");return cfg&&cfg.dataset.testPageId||""}export function buildPdpElement(doc){const snippet=doc.getElementById("pr-reviewsnippet"),display=doc.getElementById("pr-reviewdisplay"),identitySource=snippet||display;if(!identitySource)return null;const credentials=readCredentials(doc),testPageId=readTestPageId(doc),{prPageId,prPageIdVariant,prVariantName,prReviewWrapperUrl}=identitySource.dataset,components={};snippet&&(components.ReviewSnippet="pr-reviewsnippet"),display&&(components.ReviewDisplay="pr-reviewdisplay");const element={...credentials,page_id:testPageId||prPageId,review_wrapper_url:prReviewWrapperUrl,REVIEW_DISPLAY_PAGINATION_TYPE:"VERTICAL",components};testPageId||(element.product={variants:[{page_id_variant:prPageIdVariant,name:prVariantName}]}),element.ENABLE_CLIENT_SIDE_STRUCTURED_DATA=!1;const subject=buildSubject(identitySource.dataset);return subject&&(element.subject=subject),snippet&&display&&(element.on_render=()=>wireSnippetScroll(doc)),element}const WAR_MSQS=[{id:"pr-size-input",label:"Size"},{id:"pr-finish-input",label:"Finish"},{id:"pr-fulfillmentpath-input",label:"Fulfillment"}];export function renderWriteMsqSummary(doc){const form=doc.getElementById("pr-war-form");if(!form||doc.getElementById("pr-msq-summary"))return;const rows=WAR_MSQS.map(({id,label})=>({label,value:(doc.getElementById(id)?.value||"").trim()})).filter(row=>row.value);if(!rows.length)return;const summary=doc.createElement("div");summary.id="pr-msq-summary",summary.className="pr-msq-summary";const dl=doc.createElement("dl");for(const{label,value}of rows){const dt=doc.createElement("dt");dt.textContent=label;const dd=doc.createElement("dd");dd.textContent=value,dl.append(dt,dd)}summary.appendChild(dl),form.prepend(summary)}export function buildWriteElement(doc){return doc.getElementById("pr-write")?{...readCredentials(doc),on_render:()=>renderWriteMsqSummary(doc),on_submit:()=>window.scrollTo(0,0),components:{Write:"pr-write"}}:null}export function buildPwrElements(doc){return[buildPdpElement(doc),buildWriteElement(doc)].filter(Boolean)}export function loadPowerReviews(pwr,doc){const elements=buildPwrElements(doc);elements.length&&pwr("render",elements)}const PWR_REVIEW_SURFACES=[{title:".pr-rd-review-headline",body:".pr-rd-description-text"},{title:".pr-faceoff-title",body:".pr-faceoff-review"}],DERIVED_TITLE_MIN_LENGTH=40;function normalizeReviewText(s){return String(s).replace(/\s+/g," ").trim()}function findReviewBody(headline,surface,root){for(let el=headline.parentElement;el;el=el.parentElement){if(el.querySelectorAll(surface.title).length>1)return null;const body=el.querySelector(surface.body);if(body)return body;if(el===root||el.id==="pr-reviewdisplay")return null}return null}function isDerivedTitle(title,body){return title.length>=DERIVED_TITLE_MIN_LENGTH&&body.length>title.length&&body.startsWith(title)&&!/[.!?]$/.test(title)}function formatDerivedTitle(title,body){const lastWordComplete=/[^\w'â-]/.test(body.charAt(title.length)),withoutFragment=title.replace(/\s*\S+$/,"");return`${(lastWordComplete||!withoutFragment?title:withoutFragment).replace(/[,;:]+$/,"")}\u2026`}export function applyDerivedTitles(root){const rootElement=root.nodeType===1?root:null;for(const surface of PWR_REVIEW_SURFACES)for(const headline of root.querySelectorAll(surface.title)){const bodyElement=findReviewBody(headline,surface,rootElement);if(!bodyElement)continue;const title=normalizeReviewText(headline.textContent),body=normalizeReviewText(bodyElement.textContent);isDerivedTitle(title,body)&&(headline.textContent=formatDerivedTitle(title,body))}}export function observeDerivedTitles(doc){const display=doc.getElementById("pr-reviewdisplay");if(!display||typeof MutationObserver>"u")return null;const observer=new MutationObserver(()=>{applyDerivedTitles(display),observer.takeRecords()});return observer.observe(display,{childList:!0,subtree:!0,characterData:!0}
1),applyDerivedTitles(display),observer}const JSON_LD_SELECTOR='script[type="application/ld+json"]';function rewriteReviews(review){if(Array.isArray(review))return review.reduce((changed,item)=>rewriteReviews(item)||changed,!1);if(!review||typeof review!="object"||typeof review.name!="string"||typeof review.reviewBody!="string")return!1;const name=normalizeReviewText(review.name),body=normalizeReviewText(review.reviewBody);return isDerivedTitle(name,body)?(review.name=formatDerivedTitle(name,body),!0):!1}function rewriteJsonLdReviewNames(node){if(Array.isArray(node))return node.reduce((changed2,item)=>rewriteJsonLdReviewNames(item)||changed2,!1);if(!node||typeof node!="object")return!1;let changed=!1;for(const[key,value]of Object.entries(node))!value||typeof value!="object"||(changed=rewriteJsonLdReviewNames(value)||changed,key==="review"&&(changed=rewriteReviews(value)||changed));return changed}export function applyJsonLdDerivedTitles(root){for(const script of root.querySelectorAll(JSON_LD_SELECTOR)){let parsed;try{parsed=JSON.parse(script.textContent)}catch{continue}rewriteJsonLdReviewNames(parsed)&&(script.textContent=JSON.stringify(parsed))}}export const CLIENT_SIDE_AGGREGATE_RATING=!0;const RATING_DECIMAL_SELECTOR=".pr-snippet-rating-decimal",REVIEW_COUNT_SELECTOR=".pr-snippet-review-count";export function readRenderedRating(doc){const decimal=doc.querySelector(RATING_DECIMAL_SELECTOR),count=doc.querySelector(REVIEW_COUNT_SELECTOR);if(!decimal||!count)return null;const ratingValue=Number.parseFloat(decimal.textContent),reviewCount=Number.parseInt(count.textContent.replace(/[^\d]/g,""),10);return!Number.isFinite(ratingValue)||ratingValue<=0||ratingValue>5||!Number.isInteger(reviewCount)||reviewCount<=0?null:{ratingValue,reviewCount}}export function applyAggregateRating(doc){const rating=readRenderedRating(doc);if(!rating)return!1;const aggregateRating={"@type":"AggregateRating",ratingValue:rating.ratingValue,reviewCount:rating.reviewCount};for(const script of doc.querySelectorAll(JSON_LD_SELECTOR)){let parsed;try{parsed=JSON.parse(script.textContent)}catch{continue}const product=(Array.isArray(parsed["@graph"])?parsed["@graph"]:[parsed]).find(node=>node&&node["@type"]==="Product");if(!product)continue;const current=product.aggregateRating;return current&¤t.ratingValue===aggregateRating.ratingValue&¤t.reviewCount===aggregateRating.reviewCount?!1:(product.aggregateRating=aggregateRating,script.textContent=JSON.stringify(parsed),!0)}return!1}export function observeAggregateRating(doc){if(!CLIENT_SIDE_AGGREGATE_RATING)return null;const container=doc.getElementById("pr-reviewsnippet")||doc.getElementById("pr-reviewdisplay");if(!container||typeof MutationObserver>"u")return null;const observer=new MutationObserver(()=>applyAggregateRating(doc));return observer.observe(container,{childList:!0,subtree:!0,characterData:!0}),applyAggregateRating(doc),observer}if(typeof window<"u"){const init=()=>{loadPowerReviews(window.pwr,document),observeDerivedTitles(document),observeAggregateRating(document)};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",init):init()} 2//# sourceMappingURL=/cdn/shop/t/18/assets/powerreviews.js.map?v=175707233708473138651789479861
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.