PageSourceSearch

https://www.chemicalguys.com/cdn/shop/t/5/assets/wls-reviews.js?v=78377219631146142751787733456

js chemicalguys.com collected 2026-09-24 09:18:18 UTC 8,306 bytes, 2 lines download raw bytes

1(()=>{const REVIEW_CACHE_KEY="wls-okendo-review-pool-v1",createElement=(tag,className,text)=>{const element=document.createElement(tag);return className&&(element.className=className),text&&(element.textContent=text),element},getReviewImage=review=>review.media?.find(item=>item.type==="image"&&!item.isHidden&&(item.largeUrl||item.fullSizeUrl||item.thumbnailUrl)),isEligibleReview=review=>Number(review.rating)>4&&!!review.title?.trim()&&!!review.body?.trim()&&!!getReviewImage(review),createStars=(rating,section)=>{const stars=createElement("div","wls-reviews__review-stars"),starTemplate=section.querySelector("[data-wls-review-star]");stars.setAttribute("aria-label",`Rated ${rating} out of 5 stars`);for(let index=0;index<Math.round(rating);index+=1)stars.append(starTemplate.content.cloneNode(!0));return stars},createReviewSlide=(review,section)=>{const media=getReviewImage(review),slide=createElement("div","wls-slider__slide swiper-slide"),container=createElement("div","wls-reviews__review-container"),inner=createElement("div","wls-reviews__review-inner"),imageWrap=createElement("div","wls-reviews__review-image"),image=createElement("img"),content=createElement("div","wls-reviews__review-content"),top=createElement("div","wls-reviews__review-top-content"),headline=createElement("h3","wls-reviews__review-headline",review.title.trim()),body=createElement("div","wls-reviews__review-text",review.body.trim()),bottomWrap=createElement("div","wls-reviews__review-bottom-content-wrapper"),separator=createElement("span","wls-reviews__review-content-separator"),bottom=createElement("div","wls-reviews__review-bottom-content"),reviewerName=createElement("span","wls-reviews__review-reviewer-name",review.reviewer?.displayName||"Okendo Customer");if(image.src=media.largeUrl||media.fullSizeUrl||media.thumbnailUrl,image.alt=review.title.trim(),image.loading="lazy",image.width=500,image.height=453,imageWrap.append(image),top.append(createStars(Number(review.rating),section),headline,body),bottom.append(reviewerName),review.reviewer?.isVerified){const verified=createElement("div","wls-reviews__review-reviewer-verified"),label=createElement("span","wls-reviews__review-reviewer-verified-text","Verified Customer"),badgeTemplate=section.querySelector("[data-wls-review-verified-badge]");verified.append(badgeTemplate.content.cloneNode(!0),label),bottom.append(verified)}return bottomWrap.append(separator,bottom),content.append(top,bottomWrap),inner.append(imageWrap,content),container.append(inner),slide.append(container),slide},getNextUrl=data=>{const nextUrl=data.reviewsNextUrl||data.nextUrl;return nextUrl?nextUrl.startsWith("http")?nextUrl:`https://api.okendo.io/v1${nextUrl.startsWith("/")?"":"/"}${nextUrl}`:null},shuffleReviews=reviews=>{const shuffled=[...reviews];for(let index=shuffled.length-1;index>0;index-=1){const randomIndex=Math.floor(Math.random()*(index+1));[shuffled[index],shuffled[randomIndex]]=[shuffled[randomIndex],shuffled[index]]}return shuffled},orderReviews=(reviews,order,limit)=>(order==="newest"?reviews:shuffleReviews(reviews)).slice(0,limit),getCachedReviews=()=>{try{const cached=JSON.parse(localStorage.getItem(REVIEW_CACHE_KEY));return!cached?.reviews?.length||Date.now()-cached.timestamp>18e5?(localStorage.removeItem(REVIEW_CACHE_KEY),null):cached.reviews}catch{return null}},cacheReviews=reviews=>{if(reviews.length)try{localStorage.setItem(REVIEW_CACHE_KEY,JSON.stringify({timestamp:Date.now(),reviews}))}catch{}},updatePaginationVisibility=section=>{const slideCount=section.querySelectorAll(".swiper-slide").length;section.classList.toggle("has-overflowing-pagination",slideCount>20)},prepareReviewText=section=>{section.querySelectorAll(".wls-reviews__review-text").forEach(reviewText=>{const fullText=reviewText.dataset.fullReview||reviewText.innerText.trim();if(!fullText)return;reviewText.dataset.fullReview=fullText;const excerpt=createElement("span","wls-reviews__review-excerpt",fullText);if(reviewText.replaceChildren(excerpt),excerpt.scrollHeight<=excerpt.clientHeight+1)return;const readMore=createElement("button","wls-reviews__read-more","Read more");readMore.type="button",readMore.setAttribute("aria-haspopup","dialog"),reviewText.append(readMore)})},initReviewDialog=section=>{if(section.dataset.dialogInitialized==="true")return;section.dataset.dialogInitialized="true";const dialog=section.querySelector("[data-wls-review-dialog]"),dialogText=section.querySelector("[data-wls-review-dialog-text]"),closeButton=section.querySelector("[data-wls-review-dialog-close]");!dialog||!dialogText||!closeButton||(section.addEventListener("click",event=>{const readMore=event.target.closest(".wls-reviews__read-more");readMore&&(event.preventDefault(),event.stopPropagation(),dialogText.textContent=readMore.closest(".wls-reviews__review-text")?.dataset.fullReview||"",section.classList.add("is-dialog-open"),section.setAttribute("tabindex","-1"),section.focus({preventScroll:!0}),dialog.showModal())}),closeButton.addEventListener("click",event=>{event.preventDefault(),event.stopPropagation(),dialog.close()}),dialog.addEventListener("close",()=>section.classList.remove("is-dialog-open")),dialog.addEventListener("pointerdown",event=>{event.preventDefault(),event.stopImmediatePropagation()}),dialog.addEventListener("pointerup",event=>{event.preventDefault(),event.stopImmediatePropagation()}),dialog.addEventListener("click",event=>{event.preventDefault(),event.stopImmediatePropagation();const bounds=dialog.getBoundingClientRect();(event.clientX<bounds.left||event.clientX>
1bounds.right||event.clientY<bounds.top||event.clientY>bounds.bottom)&&requestAnimationFrame(()=>dialog.close())}))},fetchReviews=async(endpoint,limit,order,onReady)=>{const reviews=[];let url=endpoint,page=0,hasRendered=!1;for(;url&&page<10;){const response=await fetch(url);if(!response.ok)throw new Error(`Okendo request failed with ${response.status}`);const data=await response.json();reviews.push(...(data.reviews||[]).filter(isEligibleReview)),url=getNextUrl(data),page+=1,!hasRendered&&reviews.length>=limit&&(hasRendered=!0,onReady(orderReviews(reviews,order,limit)))}return cacheReviews(reviews),{reviews:orderReviews(reviews,order,limit),hasRendered}},initSection=async section=>{if(initReviewDialog(section),prepareReviewText(section),updatePaginationVisibility(section),section.dataset.source!=="okendo"||section.dataset.okendoInitialized==="true")return;section.dataset.okendoInitialized="true";const slider=section.querySelector("wls-slider"),wrapper=section.querySelector(".swiper-wrapper"),limit=Number(section.dataset.limit)||8,order=section.dataset.order||"random";if(!slider||!wrapper)return;const renderReviews=reviews=>{reviews.length&&(section.classList.remove("is-loading"),wrapper.replaceChildren(...reviews.map(review=>createReviewSlide(review,section))),updatePaginationVisibility(section),slider.setAttribute("aria-busy","false"),slider.dispatchEvent(new CustomEvent("wls:slider:reinit")),requestAnimationFrame(()=>prepareReviewText(section)))};try{const cachedReviews=getCachedReviews();if(cachedReviews){renderReviews(orderReviews(cachedReviews,order,limit));return}const result=await fetchReviews(section.dataset.endpoint,limit,order,renderReviews);if(!result.reviews.length)throw new Error("No eligible Okendo reviews found");result.hasRendered||renderReviews(result.reviews)}catch(error){section.classList.remove("is-loading"),slider.setAttribute("aria-busy","false"),slider.dispatchEvent(new CustomEvent("wls:slider:reinit")),requestAnimationFrame(()=>prepareReviewText(section)),console.warn("[WLS Reviews] Using manual review fallback.",error)}},initAll=(root=document)=>root.querySelectorAll("[data-wls-reviews]").forEach(initSection);document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>initAll()):initAll(),document.addEventListener("shopify:section:load",event=>initAll(event.target)),document.fonts?.ready.then(()=>document.querySelectorAll("[data-wls-reviews]").forEach(prepareReviewText));let resizeFrame;window.addEventListener("resize",()=>{cancelAnimationFrame(resizeFrame),resizeFrame=requestAnimationFrame(()=>document.querySelectorAll("[data-wls-reviews]").forEach(prepareReviewText))})})();
2//# sourceMappingURL=/cdn/shop/t/5/assets/wls-reviews.js.map?v=78377219631146142751787733456

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.