[]
Handheld Hair Steamer for Natural Hair Types | PATTERN – Pattern Beauty `form[action*=’/${t}’]:not([data-nocaptcha=’true’]) input[name=’form_type’][value=’${e}’]`)).join(‘,’);function s(t,e,n=!1){try{const o=window.sessionStorage;for(const[n,c]of Object.entries(JSON.parse(o.getItem(e))))t.elements[n]&&(t.elements[n].value=c);n&&o.removeItem(e)}catch{}}const a=’form_key’,i=[‘recaptcha-v3-token’,’g-recaptcha-response’,’h-captcha-response’,’password’],u=()=>{try{return window.sessionStorage}catch{return}},m=t=>t.elements[a],f=’form_type’,d=’cptcha’;function p(t){t.dataset[d]=!0}const l=window,h=l.document,_=’Shopify’,y=’ce_forms’,E=’captcha’;let v=!1;((t,e)=>{const n=(g=’f06e6c50-85a8-45c8-87d0-21a2b65856fe’,’https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.4.0.iife.js’,T={infoText:’Protected by hCaptcha’,privacyText:’Privacy’,termsText:’Terms’},(t,e,n)=>{const o=l[_][y],c=o.bindForm;if(c)return c(t,g,e,T).then(n);o.q.push([[t,g,e,T],n]),v||(h.body.append(Object.assign(h.createElement(‘script’),{id:’captcha-provider’,async:!0,src:’https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.4.0.iife.js’})),v=!0)});var g,T;l[_]=l[_]||{},l[_][y]=l[_][y]||{},l[_][y].q=[],l[_][E]=l[_][E]||{},l[_][E].protect=function(t,e){n(t,void 0,e),p(t)},Object.freeze(l[_][E]),function(t,e,n,l,h,_){const[y,E,v,g]=function(t,e,n){const s=e?o:[],a=t?c:[],i=[…s,…a],u=[…o],m=r(i),f=r(s),d=n&&r(i.filter((([t,e])=>n.includes(e)))),p=r(u),l=t=>()=>t?[…document.querySelectorAll(t)].map((t=>t.form)):[];return[l(m),l(f),l(d),l(p)]}(l,h,_),T=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},S=t=>y().includes(t);t.addEventListener(‘submit’,(t=>{const e=T(t);if(!e)return;const n=S(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=m(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!u())return;!function(t){const e=u();if(!e)return;const n=m(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join(”);!function(t,e){m(t)||t.append(Object.assign(document.createElement(‘input’),{type:’hidden’,name:a})),t.elements[a].value=e}(t,e),function(t,e){const n=u();if(!n)return;const o=[…t.querySelectorAll(‘input[type=”password”]’)].map((({name:t})=>t)),c=[…i,…o],r={};for(const[s,a]of new FormData(t).entries())c.includes(s)||(r[s]=a);n.setItem(e,JSON.stringify(r))}(t,e)}catch(e){console.error(‘failed to persist form’,e)}}(e),e.submit())}));const w=(t,e)=>{t&&!t.dataset[d]&&(n(t,e.some((e=>e===t))),p(t))};for(const o of[‘focusin’,’change’])t.addEventListener(o,(t=>{const e=T(t);S(e)&&w(e,E())}));const A=e.get(‘form_key’),b=e.get(f),I=A&&b;t.addEventListener(‘DOMContentLoaded’,(()=>{const t=E();if(I)for(const e of t)e.elements[f].value===b&&s(e,A);[…new Set([…v(),…y().filter((t=>’true’===t.dataset.shopifyCaptcha))])].forEach((e=>w(e,t)))}))}(h,new URLSearchParams(l.location.search),n,!0,!0,[‘guest_login’])})()}();]]> index === self.findIndex((t) => t.id === item.id && t.value === item.value && giftThresholds.includes(item.value) ) ); let uniqueGWPGifts = {}; uniqueGWPArray.forEach((item, index) => { uniqueGWPGifts[index] = item; }); gwpJSON.GWPGifts = uniqueGWPGifts; function getUniqueByHandleAndThreshold(obj) { const seen = new Set(); const result = []; Object.values(obj).forEach(item => { const uniqueKey = `${item.handle}-${item.threshold}`; if (!seen.has(uniqueKey)) { seen.add(uniqueKey); result.push(item); } }); return result; } const uniqueGifts = getUniqueByHandleAndThreshold(gwpJSON.gifts); gwpJSON.gifts = uniqueGifts; ]]>
Select Your Free Gift
Freee with your purchase of [[ amount ]] or more
Free gift with any purchase from the [[ collection ]] collection
0 || trident > 0); } if (!isIE()) return; const cartSubmitInput = document.createElement(‘input’); cartSubmitInput.setAttribute(‘name’, ‘checkout’); cartSubmitInput.setAttribute(‘type’, ‘hidden’); document.querySelector(‘#cart’).appendChild(cartSubmitInput); document.querySelector(‘#checkout’).addEventListener(‘click’, function(event) { document.querySelector(‘#cart’).submit(); }); }); ]]> { if(e.target == this) { this.open(false); } }); this.addEventListener(‘open-country-picker’, e => { this.open(true); }) this.addEventListener(‘close-country-picker’, e => { this.open(false); }) this.fetchAsync(‘/browsing_context_suggestions.json’).then(response => { this.geoIP = response.detected_values; this.userLocale = fostrCountryPickerCountries.find(country => { return country.country_code_2 == this.geoIP.country.handle; }); // Dont show if the user is in the same location as the store. if (this.dataset.currentStoreLocale !== this.geoIP.country.handle) { this.setAttribute(‘enabled’,’enabled’); } this.sendUpdatedEvent() this.updateUserLocation(); this.initialiseLocalizationSelector() }) } sendUpdatedEvent() { let storeFound = false; let openMat = false; if (!this.querySelectorAll(‘country-picker-store’)) return; this.querySelectorAll(‘country-picker-store’).forEach(store => { if(store.getStoreLocale() == this.userLocale.country_code_2 || store.getStoreLocale() == this.userLocale.continent_code) { if(store.getStoreAutoRedirect()) { storeFound = true; store.swapToStore(); } if(!store.getStoreDisplay() && !storeFound) { if(store.getStoreDisplayToLocalized()) { store.setStoreDisplay(true); } openMat = true; storeFound = true; } if(store.getStoreDefault() && !storeFound) { openMat = (!store.getStoreCurrent()) ? true : openMat; storeFound = true; } if(store.getStoreCurrent() && !storeFound) { openMat = true; storeFound = true; } if(!storeFound) { openMat = true; storeFound = true; } } }); if(openMat) { if(this.calculateDaysSinceLastShownDate(this.getLastShownDate()) >= showMatAfter) { if(document.referrer.indexOf(currentHost) == -1 || !showOnEntranceOnly) { this.setLastShownDate(); this.open(true); } } } if(!storeFound) { //no store found, redirect if enabled if (!this.querySelectorAll(‘country-picker-store’)) return; this.querySelectorAll(‘country-picker-store’).forEach(store => { if(store.getStoreDefault()) { store.swapToStore(); } }); } } updateUserLocation() { if (!this.querySelector(‘#fostrCountryPickerUserLocale’)) return; this.querySelector(‘#fostrCountryPickerUserLocale’).innerHTML = this.geoIP.country_name; } getLastShownDate() { return localStorage.getItem(‘country-picker-last-shown’); } setLastShownDate() { let now = new Date(); localStorage.setItem(‘country-picker-last-shown’, now.toDateString()); } calculateDaysSinceLastShownDate(lastShown) { const oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds const firstDate = new Date (lastShown); const secondDate = new Date(); return Math.round(Math.abs((firstDate – secondDate) / oneDay)); } initialiseLocalizationSelector() { customElements.define(‘fostr-localization-selector’, FostrLocalizationSelector); } fostrLog(message, data) { console.log(`%c${message}`, ‘color: #FFF; font-size: 17px; background: #000000; padding: 1rem;’) if(data) console.log(data); } open(val) { if(val) { this.setAttribute(‘open’, ”); } else { this.removeAttribute(‘open’); } } async fetchAsync (url) { let response = await fetch(url); let data = await response.json(); return data; } }) class FostrCountryPickerStore extends FostrElement { countryPicker; constructor() { super({ name: ‘Fostr Country Picker Store’, version: fostrCountryPickerVersionNumber }); this.countryPicker = this.parentElement.parentElement.parentElement; } closeCountryPicker() { let event = new Event(“close-country-picker”, {bubbles: true}); this.dispatchEvent(event); } fostrLog(message, data) { console.log(`%c${message}`, ‘color: #FFF; font-size: 17px; background: #000000; padding: 1rem;’) if(data) console.log(data); } swapToStore() { window.location.replace(`https://${this.getStoreUrl()}`); } linkToStore() { window.location.href = `https://${this.getStoreUrl()}`; } cta() { if(this.getStoreCurrent()) { this.closeCountryPicker(); } else { this.linkToStore(); } } /*** Getters for all attributes ***/ getStoreLocale() { return this.getAttribute(‘locale’); } getStoreDisplay() { return this.hasAttribute(‘additional-store’); } getStoreDefault() { return this.hasAttribute(‘default-store’); } getStoreCurrent() { return this.hasAttribute(‘current-store’); } getStoreUrl() { return this.getAttribute(‘url’); } getStoreAutoRedirect() { return this.hasAttribute(‘auto-redirect’); } getStoreDisplayToLocalized() { return this.hasAttribute(‘localized-store’); } /* Setters for all attributes */ setStoreDisplay(value) { if(value) this.classList.add(‘visible’); } } class FostrLocalizationStore extends FostrCountryPickerStore { localizationDetailsElem; constructor() { super(); this.localizationDetailsElem = this.parentElement.parentElement.parentElement; } click() { if(this.getStoreCurrent()) { this.localizationDetailsElem.removeAttribute(‘open’) } else { this.linkToStore(); } } } class FostrLocalizationSelector extends FostrElement { constructor() { super({ name: ‘Fostr Country Picker Localization Selector’, version: fostrCountryPickerVersionNumber }); this.initialiseElements() } initialiseElements() { console.log(this.currentCountryLocale); this.innerHTML = ` ]]> EN / USD ` if(!customElements.get(‘fostr-localization-store’)) { customElements.define(‘fostr-localization-store’, FostrLocalizationStore); } } } customElements.define(‘country-picker-store’, FostrCountryPickerStore); { widgetElement?.setAttribute(“data-cart-empty”, itemCount res.clone().json().then(data => { var cart = { total_price: data.total_price/100, $value: data.total_price/100, total_discount: data.total_discount, original_total_price: data.original_total_price/100, items: data.items } if (item !== ‘undefined’) { cart = Object.assign(cart, item) } if (klAjax) { _learnq.push([‘track’, ‘Added to Cart’, cart]); klAjax = false; } })) }; (function (ns, fetch) { ns.fetch = function() { const response = fetch.apply(this, arguments); response.then(res => { if (`${window.location.origin}/cart/add.js` .includes(res.url)) { addedToCart() } }); return response } }(window, window.fetch)); var klAjax = true; var atcButtons = document.querySelectorAll(“form[action*=’/cart/add’] button[type=’submit’]”); for (var i = 0; i
response.json()) .then(data => { return data.token }); } ]]>