1(()=>{if(window.__l51BadgesInit)return;window.__l51BadgesInit=!0;const CFG_ID="l51BadgesConfig",SEL_PLACEHOLDER="[data-l51-badges]",MOBILE_MAX=749,OBS_THROTTLE_MS=120,TIME_REFRESH_MS=3e4,toNum=(v,fallback=0)=>{const n=Number(v);return Number.isFinite(n)?n:fallback};function readConfig(){const el=document.getElementById(CFG_ID);if(!el)return null;try{return JSON.parse(el.textContent||"{}")}catch{return null}}function splitTags(raw){return raw?String(raw).split("||").map(t=>String(t||"").trim().toLowerCase()).filter(Boolean):[]}function parseDateTime(raw){const s=String(raw||"").trim();if(!s)return null;let m=/^(\d{4})-(\d{2})-(\d{2})$/.exec(s);if(m){const y=Number(m[1]),mo=Number(m[2]),d=Number(m[3]);return!y||mo<1||mo>12||d<1||d>31?null:new Date(y,mo-1,d,0,0,0,0)}if(m=/^(\d{4})-(\d{2})-(\d{2})[ T](\d{2}):(\d{2})$/.exec(s),m){const y=Number(m[1]),mo=Number(m[2]),d=Number(m[3]),h=Number(m[4]),mi=Number(m[5]);return!y||mo<1||mo>12||d<1||d>31||h<0||h>23||mi<0||mi>59?null:new Date(y,mo-1,d,h,mi,0,0)}return null}function hasExplicitTime(raw){return/[ T]\d{2}:\d{2}$/.test(String(raw||"").trim())}function normalizeStart(raw){const dt=parseDateTime(raw);return dt?hasExplicitTime(raw)?dt:new Date(dt.getFullYear(),dt.getMonth(),dt.getDate(),0,0,0,0):null}function normalizeEnd(raw){const dt=parseDateTime(raw);return dt?hasExplicitTime(raw)?dt:new Date(dt.getFullYear(),dt.getMonth(),dt.getDate(),23,59,59,999):null}function ruleIsActiveNow(rule,now=new Date){const sd=normalizeStart(rule.start_date),ed=normalizeEnd(rule.end_date);return!(sd&&now<sd||ed&&now>ed)}function ruleAppliesToScope(rule,scope){const sc=String(scope||"card").toLowerCase();return sc==="card"?rule.show_on_card!==!1:sc==="pdp"?rule.show_on_pdp===!0:!1}function getCorner(cfg,rule,scope,isMobile){const sc=String(scope||"card").toLowerCase();let pos="";return rule&&rule.use_custom_position?sc==="pdp"?pos=String(isMobile?rule.pos_pdp_mobile:rule.pos_pdp_desktop||"tl").toLowerCase():pos=String(isMobile?rule.pos_card_mobile:rule.pos_card_desktop||"tl").toLowerCase():sc==="pdp"?pos=String(isMobile?cfg?.position?.pdp?.mobile||"tl":cfg?.position?.pdp?.desktop||"tl").toLowerCase():pos=String(isMobile?cfg?.position?.card?.mobile||"tl":cfg?.position?.card?.desktop||"tl").toLowerCase(),pos==="tr"||pos==="bl"||pos==="br"?pos:"tl"}function getFlow(cfg,isMobile){const d=cfg&&cfg.flow&&cfg.flow.desktop?cfg.flow.desktop:{},m=cfg&&cfg.flow&&cfg.flow.mobile?cfg.flow.mobile:{},F=isMobile?m:d,direction=String(F.direction||"column").toLowerCase()==="row"?"row":"column",perRow=Math.max(1,toNum(F.per_row,3)),gap=Math.max(0,toNum(F.gap,6));return{direction,perRow,gap}}function getEdgePadding(cfg,isMobile){const ep=cfg&&cfg.edge_padding?cfg.edge_padding:{};return Math.max(0,toNum(isMobile?ep.mobile:ep.desktop,0))}function getLimit(cfg,scope){const limits=cfg&&cfg.limits?cfg.limits:{};return String(scope).toLowerCase()==="pdp"?Math.max(1,toNum(limits.pdp,99)):Math.max(1,toNum(limits.card,99))}function applyFlowToStack(stack,flow){stack.style.gap=`${flow.gap}px`,flow.direction==="row"?(stack.style.display="grid",stack.style.gridTemplateColumns=`repeat(${flow.perRow}, max-content)`,stack.style.gridAutoFlow="row",stack.style.alignItems="start",stack.style.justifyItems="start",stack.style.flexDirection="",stack.style.flexWrap=""):(stack.style.display="flex",stack.style.flexDirection="column",stack.style.flexWrap="nowrap",stack.style.alignItems="flex-start",stack.style.gridTemplateColumns="",stack.style.gridAutoFlow="",stack.style.justifyItems="")}function ensureCornerStack(placeholder,corner,flow,edgePad){const key=`corner:${corner}`;let stack=placeholder.querySelector(`.l51-badges__stack[data-stack-key="${CSS.escape(key)}"]`);return stack||(stack=document.createElement("div"),stack.className="l51-badges__stack",stack.setAttribute("data-stack-key",key),stack.setAttribute("data-corner",corner),placeholder.appendChild(stack)),stack.style.top="",stack.style.right="",stack.style.bottom="",stack.style.left="",corner==="tl"&&(stack.style.top=`${edgePad}px`,stack.style.left=`${edgePad}px`),corner==="tr"&&(stack.style.top=`${edgePad}px`,stack.style.right=`${edgePad}px`),corner==="bl"&&(stack.style.bottom=`${edgePad}px`,stack.style.left=`${edgePad}px`),corner==="br"&&(stack.style.bottom=`${edgePad}px`,stack.style.right=`${edgePad}px`),applyFlowToStack(stack,flow),stack}function clearInjected(placeholder){placeholder.querySelectorAll(".l51-badges__stack").forEach(el=>el.remove())}function makeBadge(rule,isMobile){const type=String(rule.badge_type||"both").toLowerCase();if(type==="image"&&!rule.image||type==="text"&&!rule.label||type==="both"&&!rule.image&&!rule.label)return null;
1const badge=document.createElement("div");badge.className="l51-badge",badge.setAttribute("data-rule-id",rule.id||""),rule.bg&&(badge.style.background=rule.bg),rule.text&&(badge.style.color=rule.text);const bw=toNum(rule.border_w,0);if(bw>0?(badge.style.borderStyle="solid",badge.style.borderWidth=`${bw}px`,rule.border&&(badge.style.borderColor=rule.border)):(badge.style.borderStyle="none",badge.style.borderWidth="0px"),badge.style.borderRadius=`${toNum(rule.radius,0)}px`,badge.style.fontSize=`${toNum(isMobile?rule.font_m:rule.font_d,12)}px`,(type==="image"||type==="both")&&rule.image){const wrap=document.createElement("span");wrap.className="l51-badge__img-wrap";const w=toNum(isMobile?rule.img_w_m:rule.img_w_d,16);wrap.style.width=`${w}px`;const img=document.createElement("img");img.className="l51-badge__img",img.src=rule.image,img.alt=rule.label||rule.trigger_tag||"badge",img.loading="lazy",wrap.appendChild(img),badge.appendChild(wrap)}if(type==="text"||type==="both"){const span=document.createElement("span");span.className="l51-badge__text",span.textContent=rule.label||"",badge.appendChild(span)}return badge}function buildSignature({tags,scope,isMobile,flow,edgePad,limit,matched,cfg}){const rulesSig=matched.map(r=>[r.id,String(r.trigger_tag||""),String(r.badge_type||""),String(r.label||""),String(r.image||""),String(r.use_custom_position),String(r.pos_card_desktop||""),String(r.pos_card_mobile||""),String(r.pos_pdp_desktop||""),String(r.pos_pdp_mobile||""),String(r.show_on_card),String(r.show_on_pdp),String(r.start_date||""),String(r.end_date||""),String(r.priority||""),String(r.sort_index||"")].join("~")).join("||"),flowSig=`${flow.direction}|${flow.perRow}|${flow.gap}`,globalPosSig=[cfg?.position?.card?.desktop||"tl",cfg?.position?.card?.mobile||"tl",cfg?.position?.pdp?.desktop||"tl",cfg?.position?.pdp?.mobile||"tl"].join("|");return`m:${isMobile?1:0}|s:${scope}|t:${tags.join(",")}|f:${flowSig}|p:${edgePad}|l:${limit}|gp:${globalPosSig}|r:${rulesSig}`}function applyBadges(root=document){const cfg=readConfig();if(!cfg||!cfg.enabled)return;const isMobile=window.matchMedia(`(max-width:${MOBILE_MAX}px)`).matches,flow=getFlow(cfg,isMobile),edgePad=getEdgePadding(cfg,isMobile),now=new Date,rules=Array.isArray(cfg.rules)?cfg.rules.slice():[];rules.sort((a,b)=>{const pa=toNum(a.priority,50),pb=toNum(b.priority,50);if(pa!==pb)return pa-pb;const ia=toNum(a.sort_index,9999),ib=toNum(b.sort_index,9999);return ia-ib}),root.querySelectorAll(SEL_PLACEHOLDER).forEach(ph=>{const scope=String(ph.getAttribute("data-scope")||"card").toLowerCase(),tags=splitTags(ph.getAttribute("data-tags")),limit=getLimit(cfg,scope);if(!tags.length)return;const matched=[];for(const r of rules){if(!r||!r.trigger_tag||!ruleAppliesToScope(r,scope)||!ruleIsActiveNow(r,now))continue;const trig=String(r.trigger_tag).trim().toLowerCase();!trig||!tags.includes(trig)||String(r.badge_type).toLowerCase()==="image"&&!r.image||!makeBadge(r,isMobile)||matched.push(r)}const visibleMatched=matched.slice(0,limit),sig=buildSignature({tags,scope,isMobile,flow,edgePad,limit,matched:visibleMatched,cfg});if(ph.dataset.l51Sig===sig||(ph.dataset.l51Sig=sig,clearInjected(ph),!visibleMatched.length))return;const byCorner={tl:[],tr:[],bl:[],br:[]};visibleMatched.forEach(r=>{const c=getCorner(cfg,r,scope,isMobile);(byCorner[c]||(byCorner[c]=[])).push(r)}),Object.keys(byCorner).forEach(corner=>{const list=byCorner[corner];if(!list||!list.length)return;const stack=ensureCornerStack(ph,corner,flow,edgePad);list.forEach(r=>{const node=makeBadge(r,isMobile);node&&stack.appendChild(node)})})})}function forceTimeRefresh(){document.querySelectorAll(SEL_PLACEHOLDER).forEach(ph=>{delete ph.dataset.l51Sig}),applyBadges(document)}document.addEventListener("shopify:section:load",e=>applyBadges(e.target)),document.addEventListener("shopify:section:reorder",e=>applyBadges(e.target)),document.addEventListener("shopify:section:select",e=>applyBadges(e.target)),document.addEventListener("shopify:section:render",e=>applyBadges(e.target));const _pushState=history.pushState,_replaceState=history.replaceState;function onUrlChange(){setTimeout(()=>forceTimeRefresh(),60),setTimeout(()=>startObserver(),120)}history.pushState=function(){_pushState.apply(this,arguments),onUrlChange()},history.replaceState=function(){_replaceState.apply(this,arguments),onUrlChange()},window.addEventListener("popstate",onUrlChange);let resizeTO=null;window.addEventListener("resize",()=>{clearTimeout(resizeTO),resizeTO=setTimeout(()=>forceTimeRefresh(),180)},{passive:!0});function findObservationRoots(){const selectors=["#CollectionLoop","[data-product-grid]",".product-grid",".grid--products","main"],roots=[];
1return selectors.forEach(sel=>{document.querySelectorAll(sel).forEach(el=>{el&&!roots.includes(el)&&roots.push(el)})}),roots.length||roots.push(document.body),roots}let moTimer=null,observer=null,clockTimer=null;function startObserver(){observer&&observer.disconnect(),observer=new MutationObserver(mutations=>{mutations.some(m=>{if(m.target&&m.target.closest&&m.target.closest(".l51-badges"))return!1;if(m.addedNodes&&m.addedNodes.length){for(const n of m.addedNodes)if(n instanceof Element&&!n.matches(".l51-badges, .l51-badges__stack, .l51-badge")&&!(n.closest&&n.closest(".l51-badges"))&&(n.matches&&n.matches("[data-l51-badges]")||n.querySelector&&n.querySelector("[data-l51-badges]")))return!0}return!1})&&(clearTimeout(moTimer),moTimer=setTimeout(()=>forceTimeRefresh(),OBS_THROTTLE_MS))}),findObservationRoots().forEach(root=>observer.observe(root,{childList:!0,subtree:!0}))}function startTimeRefresh(){clockTimer&&clearInterval(clockTimer),clockTimer=setInterval(()=>{forceTimeRefresh()},TIME_REFRESH_MS)}window.addEventListener("visibilitychange",()=>{document.hidden||(forceTimeRefresh(),startTimeRefresh())}),window.addEventListener("load",()=>{startObserver(),startTimeRefresh(),forceTimeRefresh()}),window.addEventListener("pageshow",()=>{startObserver(),startTimeRefresh(),forceTimeRefresh()}),document.addEventListener("DOMContentLoaded",()=>{startObserver(),startTimeRefresh(),forceTimeRefresh()}),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>forceTimeRefresh()):(forceTimeRefresh(),startTimeRefresh())})(); 2//# sourceMappingURL=/cdn/shop/t/36/assets/l51-badges.js.map?v=6545932506798665501790793707
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.