PageSourceSearch

https://smartdry.ai/cdn/shop/t/9/assets/sd-partnership.js?v=44202199093144856291786372057

js smartdry.ai collected 2026-10-05 12:38:29 UTC 7,481 bytes, 2 lines download raw bytes

1(function(){"use strict";var root=document.querySelector("[data-sd-calc]");if(!root)return;var reduceMotion=window.matchMedia("(prefers-reduced-motion: reduce)").matches,currency=new Intl.NumberFormat("en-GB",{style:"currency",currency:"GBP",maximumFractionDigits:0});function num(attr,fallback){var value=parseFloat(root.getAttribute(attr));return Number.isFinite(value)?value:fallback}var config={supplyRate:num("data-supply-rate",.2),partsRate:num("data-parts-rate",.28),priceFirst:num("data-price-first",99),priceExtra:num("data-price-extra",29),presets:{small:{supplies:num("data-preset-small-supplies",400),parts:num("data-preset-small-parts",2500),locations:num("data-preset-small-locations",1)},busy:{supplies:num("data-preset-busy-supplies",800),parts:num("data-preset-busy-parts",6e3),locations:num("data-preset-busy-locations",1)},multi:{supplies:num("data-preset-multi-supplies",1200),parts:num("data-preset-multi-parts",9e3),locations:num("data-preset-multi-locations",3)}}},els={annual:root.querySelectorAll("[data-sd-calc-annual], [data-sd-calc-annual-secondary], [data-sd-calc-annual-tertiary]"),monthly:root.querySelector("[data-sd-calc-monthly]"),alone:root.querySelector("[data-sd-calc-alone]"),partner:root.querySelector("[data-sd-calc-partner]"),compare:root.querySelector("[data-sd-calc-compare]"),suppliesSaving:root.querySelector("[data-sd-calc-supplies-saving]"),partsSaving:root.querySelector("[data-sd-calc-parts-saving]"),suppliesLabel:root.querySelector("[data-sd-calc-supplies-label]"),partsLabel:root.querySelector("[data-sd-calc-parts-label]"),locationsLabel:root.querySelector("[data-sd-calc-locations-label]"),software:root.querySelector("[data-sd-calc-software]"),paybackMonths:root.querySelector("[data-sd-calc-payback-months]"),net:root.querySelector("[data-sd-calc-net]"),suppliesRange:root.querySelector("[data-sd-calc-supplies-range]"),partsRange:root.querySelector("[data-sd-calc-parts-range]"),locationsInput:root.querySelector("[data-sd-calc-locations-input]"),locationsDec:root.querySelector("[data-sd-calc-locations-dec]"),locationsInc:root.querySelector("[data-sd-calc-locations-inc]"),presets:root.querySelectorAll("[data-sd-calc-preset]")},state={supplies:config.presets.busy.supplies,parts:config.presets.busy.parts,locations:config.presets.busy.locations,revealed:!1,displayedAnnual:0,animFrame:null};function clamp(value,min,max){return Math.min(max,Math.max(min,value))}function money(value){return currency.format(Math.round(value||0))}function calculate(input){var locations=Math.max(1,Math.round(input.locations||1)),suppliesSaving=input.supplies*12*config.supplyRate*locations,partsSaving=input.parts*config.partsRate*locations,annualSaving=suppliesSaving+partsSaving,annualSpend=(input.supplies*12+input.parts)*locations,partnerSpend=Math.max(annualSpend-annualSaving,0),extraLocations=Math.max(0,locations-1),annualSub=config.priceFirst*12+extraLocations*config.priceExtra*12,netBenefit=annualSaving-annualSub,paybackMonths=annualSaving>0?Math.max(Math.round(annualSub/(annualSaving/12)*10)/10,.1):0;return{suppliesSaving:suppliesSaving,partsSaving:partsSaving,annualSaving:annualSaving,annualSpend:annualSpend,partnerSpend:partnerSpend,annualSub:annualSub,netBenefit:netBenefit,paybackMonths:paybackMonths,monthly:annualSaving/12}}function syncLabels(){els.suppliesLabel&&(els.suppliesLabel.textContent=money(state.supplies)+" / month"),els.partsLabel&&(els.partsLabel.textContent=money(state.parts)+" / year"),els.locationsLabel&&(els.locationsLabel.textContent=String(state.locations)),els.locationsInput&&(els.locationsInput.value=String(state.locations)),els.suppliesRange&&(els.suppliesRange.value=String(state.supplies)),els.partsRange&&(els.partsRange.value=String(state.parts))}function applyPreset(name){var preset=config.presets[name]||config.presets.busy;state.supplies=preset.supplies,state.parts=preset.parts,state.locations=preset.locations,syncLabels(),render(!0)}function setAnnualTexts(value){var formatted=money(value);els.annual.forEach(function(el){el.textContent=formatted})}function animateAnnual(toValue){if(state.animFrame&&cancelAnimationFrame(state.animFrame),reduceMotion||!state.revealed){state.displayedAnnual=toValue,setAnnualTexts(toValue);return}var from=state.displayedAnnual,diff=toValue-from;if(Math.abs(diff)<1){state.displayedAnnual=toValue,setAnnualTexts(toValue);return}var start=null,duration=Math.min(900,360+Math.abs(diff)/14);function step(ts){start||(start=ts);var t=Math.min(1,(ts-start)/duration),eased=1-Math.pow(1-t,3),current=from+diff*eased;state.displayedAnnual=current,setAnnualTexts(current),t<1?state.animFrame=requestAnimationFrame(step):(state.displayedAnnual=toValue,setAnnualTexts(toValue),state.animFrame=null)}state.animFrame=requestAnimationFrame(step)}function render(animateHero){var result=calculate(state),partnerPct=Math.max(8,Math.round(result.partnerSpend/Math.max(result.annualSpend,1)*100));animateHero?animateAnnual(result.annualSaving):(state.displayedAnnual=result.annualSaving,setAnnualTexts(result.annualSaving)),els.monthly&&(els.monthly.textContent=money(result.monthly)),els.alone&&(els.alone.textContent=money(result.annualSpend)),els.partner&&(els.partner.textContent=money(result.partnerSpend)),els.suppliesSaving&&(els.suppliesSaving.textContent=money(result.suppliesSaving)),els.partsSaving&&(els.partsSaving.textContent=money(result.partsSaving)),els.software&&(els.software.textContent=money(result.annualSub)),els.net&&(els.net.textContent=money(result.netBenefit)),els.paybackMonths&&(els.paybackMonths.textContent=Number.isInteger(result.paybackMonths)?String(result.paybackMonths):result.paybackMonths.toFixed(1)),els.compare&&els.compare.style.setProperty("--partner",partnerPct+"%"),syncLabels();try{var profileInput=root.querySelector("[data-sd-calc-preset]:checked"),profileLabel=profileInput&&(profileInput.closest("label")||{}).textContent||"Busy cleaner";profileLabel=String(profileLabel).replace(/\s+/g," ").trim(),sessionStorage.setItem("sd_partner_estimate",JSON.stringify({annual:money(result.annualSaving),profile:profileLabel,annualValue:Math.round(result.annualSaving),net:money(result.netBenefit)})),window.dispatchEvent(new CustomEvent("sd:partner-estimate"))}catch(e){}}
1function bindControls(){els.presets.forEach(function(input){input.addEventListener("change",function(){input.checked&&applyPreset(input.value)})}),els.suppliesRange&&els.suppliesRange.addEventListener("input",function(){state.supplies=clamp(parseFloat(els.suppliesRange.value)||0,100,3e3),render(!0)}),els.partsRange&&els.partsRange.addEventListener("input",function(){state.parts=clamp(parseFloat(els.partsRange.value)||0,0,25e3),render(!0)});function bumpLocations(delta){state.locations=clamp(state.locations+delta,1,12),render(!0)}els.locationsDec&&els.locationsDec.addEventListener("click",function(){bumpLocations(-1)}),els.locationsInc&&els.locationsInc.addEventListener("click",function(){bumpLocations(1)})}function startWhenVisible(){function kickoff(){state.revealed||(state.revealed=!0,render(!0))}if(render(!1),!("IntersectionObserver"in window)){kickoff();return}var observer=new IntersectionObserver(function(entries){entries.forEach(function(entry){entry.isIntersecting&&entry.intersectionRatio>=.2&&(kickoff(),observer.disconnect())})},{threshold:[.2,.35]});observer.observe(root)}syncLabels(),bindControls(),startWhenVisible()})();
2//# sourceMappingURL=/cdn/shop/t/9/assets/sd-partnership.js.map?v=44202199093144856291786372057

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.