Buy $69.98 Free shipping

(đŸ”„HOT SALE NOW 49% OFF) - Household High-Pressure Toilet Unblocker

$39.99
$49.00
1 Sold
Save $9.01
const TAG = "spz-custom-product-automatic"; class SpzCustomProductAutomatic extends SPZ.BaseElement { constructor(element) { super(element); this.variant_id = 'bad5eb26-4b0c-4d33-9f56-7f62f57c76e4'; this.isRTL = SPZ.win.document.dir === 'rtl'; this.isAddingToCart_ = false; // ćŠ èŽ­äž­çŠ¶æ€ } static deferredMount() { return false; } buildCallback() { this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); this.setupAction_(); this.viewport_ = this.getViewport(); } mountCallback() { this.init(); // 监搬äș‹ä»¶ this.bindEvent_(); } async init() { this.handleFitTheme(); const data = await this.getDiscountList(); this.renderApiData_(data); } async getDiscountList() { const productId = 'feec50c3-6a1c-4879-8f2e-248f8f44f71a'; const variantId = this.variant_id; const productType = 'default'; const reqBody = { product_id: productId, variant_id: variantId, discount_method: "DM_AUTOMATIC", customer: { customer_id: window.C_SETTINGS.customer.customer_id, email: window.C_SETTINGS.customer.customer_email }, product_type: productType } const url = `/api/storefront/promotion/display_setting/text/list`; const data = await this.xhr_.fetchJson(url, { method: "post", body: reqBody }).then(res => { return res; }).catch(err => { this.setContainerDisabled(false); }) return data; } async renderDiscountList() { this.setContainerDisabled(true); const data = await this.getDiscountList(); this.setContainerDisabled(false); // 重新æžČ染 æŠ–ćŠšé—źéą˜ć€„ç† this.renderApiData_(data); } clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } async renderApiData_(data) { const parentDiv = document.querySelector('.automatic_discount_container'); const newTplDom = await this.getRenderTemplate(data); if (parentDiv) { parentDiv.innerHTML = ''; parentDiv.appendChild(newTplDom); } else { console.log('automatic_discount_container is null'); } } doRender_(data) { const renderData = data || {}; return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); this.element.appendChild(el); }); } async getRenderTemplate(data) { const renderData = data || {}; return this.templates_ .findAndRenderTemplate(this.element, { ...renderData, isRTL: this.isRTL }) .then((el) => { this.clearDom(); return el; }); } setContainerDisabled(isDisable) { const automaticDiscountEl = document.querySelector('.automatic_discount_container_outer'); if(isDisable) { automaticDiscountEl.setAttribute('disabled', ''); } else { automaticDiscountEl.removeAttribute('disabled'); } } // 绑柚äș‹ä»¶ bindEvent_() { window.addEventListener('click', (e) => { let containerNodes = document.querySelectorAll(".automatic-container .panel"); let bool; Array.from(containerNodes).forEach((node) => { if(node.contains(e.target)){ bool = true; } }) // æ˜ŻćŠpopoveréąæżç‚čć‡»èŒƒć›Ž if (bool) { return; } if(e.target.classList.contains('drowdown-icon') || e.target.parentNode.classList.contains('drowdown-icon')){ return; } const nodes = document.querySelectorAll('.automatic-container'); Array.from(nodes).forEach((node) => { node.classList.remove('open-dropdown'); }) // ć…Œćźč䞻鹘 this.toggleProductSticky(true); }) // ç›‘ćŹć˜äœ“ć˜ćŒ– document.addEventListener('dj.variantChange', async(event) => { // 重新æžČ染 const variant = event.detail.selected; if (variant.product_id == 'feec50c3-6a1c-4879-8f2e-248f8f44f71a' && variant.id != this.variant_id) { this.variant_id = variant.id; this.renderDiscountList(); } }); } // ć…Œćźč䞻鹘 handleFitTheme() { // top ć±žæ€§ćœ±ć“æŠ–ćŠš let productInfoEl = null; if (window.SHOPLAZZA.theme.merchant_theme_name === 'Wind' || window.SHOPLAZZA.theme.merchant_theme_name === 'Flash') { productInfoEl = document.querySelector('.product-info-body .product-sticky-container'); } else if (window.SHOPLAZZA.theme.merchant_theme_name === 'Hero') { productInfoEl = document.querySelector('.product__info-wrapper .properties-content'); } if(productInfoEl){ productInfoEl.classList.add('force-top-auto'); } } // ć…Œćźč wind/flash /hero 䞻鹘 (stickyć±žæ€§ćœ±ć“ popover 求çș§ć±•ç€ș, äŒšèą«ć…¶ä»–ć…ƒçŽ èŠ†ç›–) toggleProductSticky(isSticky) { let productInfoEl = null; if (window.SHOPLAZZA.theme.merchant_theme_name === 'Wind' || window.SHOPLAZZA.theme.merchant_theme_name === 'Flash') { productInfoEl = document.querySelector('.product-info-body .product-sticky-container'); } else if (window.SHOPLAZZA.theme.merchant_theme_name === 'Hero') { productInfoEl = document.querySelector('.product__info-wrapper .properties-content'); } if(productInfoEl){ if(isSticky) { // èż˜ćŽŸèŻ„äž»éą˜ćŽŸæœ‰çš„stickyć±žæ€§ć€Œ productInfoEl.classList.remove('force-position-static'); return; } productInfoEl.classList.toggle('force-position-static'); } } setupAction_() { this.registerAction('handleDropdown', (invocation) => { const discount_id = invocation.args.discount_id; const nodes = document.querySelectorAll('.automatic-container'); Array.from(nodes).forEach((node) => { if(node.getAttribute('id') != `automatic-${discount_id}`) { node.classList.remove('open-dropdown'); } }) const $discount_item = document.querySelector(`#automatic-${discount_id}`); $discount_item && $discount_item.classList.toggle('open-dropdown'); // ć…Œćźč䞻鹘 this.toggleProductSticky(); }); // ćŠ èŽ­äș‹ä»¶ this.registerAction('handleAddToCart', (invocation) => { // é˜»æ­ąäș‹ä»¶ć†’æłĄ const event = invocation.event; if (event) { event.stopPropagation(); event.preventDefault(); } // ćŠ‚æžœæ­ŁćœšćŠ èŽ­äž­ïŒŒç›ŽæŽ„èż”ć›ž if (this.isAddingToCart_) { return; } const quantity = invocation.args.quantity || 1; this.addToCart(quantity); }); } // ćŠ èŽ­æ–čæł• async addToCart(quantity) { // èźŸçœźćŠ èŽ­äž­çŠ¶æ€ this.isAddingToCart_ = true; const productId = 'feec50c3-6a1c-4879-8f2e-248f8f44f71a'; const variantId = this.variant_id; const url = '/api/cart'; const reqBody = { product_id: productId, variant_id: variantId, quantity: quantity }; try { const data = await this.xhr_.fetchJson(url, { method: 'POST', body: reqBody }); // è§Šć‘ćŠ èŽ­æˆćŠŸæç€ș this.triggerAddToCartToast_(); return data; } catch (error) { error.then(err=>{ this.showToast_(err?.message || err?.errors?.[0] || 'Unknown error'); }) } finally { // 无èźșæˆćŠŸć€±èŽ„ïŒŒéƒœé‡çœźćŠ èŽ­çŠ¶æ€ this.isAddingToCart_ = false; } } showToast_(message) { const toastEl = document.querySelector("#apps-match-drawer-add_to_cart_toast"); if (toastEl) { SPZ.whenApiDefined(toastEl).then((apis) => { apis.showToast(message); }); } } // è§Šć‘ćŠ èŽ­æˆćŠŸæç€ș triggerAddToCartToast_() { // ćŠ‚æžœäž»éą˜æœ‰è‡Șć·±çš„ćŠ èŽ­æç€șïŒŒćˆ™äžæ˜Ÿç€ș const themeAddToCartToastEl = document.querySelector('#add-cart-event-proxy'); if (themeAddToCartToastEl) return; // 星ç€șćș”ç”šçš„ćŠ èŽ­æˆćŠŸæç€ș this.showToast_("Added successfully"); } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {}); this.action_.trigger(this.element, name, event); } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } } SPZ.defineElement(TAG, SpzCustomProductAutomatic);
class SpzCustomDiscountBundle extends SPZ.BaseElement { constructor(element) { super(element); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } mountCallback() { // ćŒäž€éĄ”ćŻèƒœæœ‰ć€šäžȘ block 搄è‡ȘæžČæŸ“æœŹ snippetïŒŒćŻŒè‡Žé€»èŸ‘ć…ƒçŽ  spz-custom-discount-toast(#appsAddCartToastFunc) é‡ć€ă€‚ // ä»…äżç•™ DOM 侭第侀äžȘćźžäŸ‹ïŒŒć…¶äœ™é‡ć€ćźžäŸ‹ç§»é™€è‡Șèș«ïŒŒäżèŻé€»èŸ‘ć…ƒçŽ ćŠć…¶ action ćŒ•ç”š(appsAddCartToastFunc)支侀。 const funcs = document.querySelectorAll('#appsAddCartToastFunc'); if (funcs.length > 1 && this.element !== funcs[0]) { this.element.remove(); return; } // ć…šć±€æŠ˜æ‰Ł toast 的ćŒčć‡șç‚čćˆ†æ•Łćœšć€šäžȘæšĄæż/ç»„ä»¶é‡ŒïŒˆć«ćŁ°æ˜ŽćŒ @atcErrorïŒ‰ïŒŒæ— æł•é€äž€ćœšćŒčć‡șć‰ć‰çœźïŒŒ // 故挂蜜时ćč‚ç­‰ćœ°ćŽ»é‡ćč¶æŒ‚ćˆ° bodyïŒ›ćŠ èŽ­ toast æ”čäžșćŒčć‡șć‰æŒ‰éœ€ćŽ»é‡ïŒˆè§ showAddToCartToast this.ensureSingleToastInBody_('cart_match_discount_toast_wrap'); } unmountCallback() {} // ćŒäž€éĄ”éąćŻèƒœæœ‰ć€šäžȘ block 搄è‡ȘæžČæŸ“æœŹ toast snippetïŒˆćŠ‚ć•†èŻŠçš„ discount_automatic + èŽ­ç‰©èœŠæŠœć±‰é‡Œçš„æŠ˜æ‰ŁæšȘćč… // ćŻŒè‡Ž toast 怖求ć‡șçŽ°é‡ć€ idă€‚é‡ć€ id 例 getElementById/querySelector 揊 SPZ ćŠšäœœćŒ•ç”šéƒœćȘć‘œäž­çŹŹäž€äžȘ // äž”èą«ć…łèż›æŠœć±‰çš„é‚Łä»œäŒšèą«æŠœć±‰çš„ transform/overflow èŁć‰Ș/é”™äœă€‚èż™é‡ŒćœšæŒ‚èœœæ—¶ćč‚ç­‰ćŽ»é‡ïŒš // ćȘäżç•™äž€ä»œă€ç§»é™€ć€šäœ™çš„ïŒŒćč¶æŠŠäżç•™çš„æŒ‚ćˆ° bodybody æ˜Ż position:fixed æœ€ćź‰ć…šçš„èœç‚čïŒŒéżć…èą«ä»»äœ•ç„–ć…ˆèŁć‰ȘïŒ‰ă€‚ćŻćć€è°ƒç”šă€‚ ensureSingleToastInBody_(id) { const els = Array.from(document.querySelectorAll('#' + id)); if (!els.length) return; els.slice(1).forEach((el) => el.remove()); const keep = els[0]; if (keep.parentNode !== document.body) { document.body.appendChild(keep); } } // äž»éą˜èŽ­ç‰©èœŠæŠœć±‰æ˜ŻćŠæ‰“ćŒ€ isInCartDrawer_() { return !!document.querySelector('[data-section-type="cart_drawer"] spz-sidebar[open]'); } setupAction_() { this.registerAction('showAddToCartToast', () => { // æŠœć±‰ć†…ćŠ èŽ­ïŒšäž»éą˜æœŹć°±äžäŒšæœ‰ćŠ èŽ­æ•ˆæžœïŒŒç»Ÿäž€ćŒč插件è‡Ș深的 toast // éžæŠœć±‰ïŒšäž»éą˜æœ‰ćŠ èŽ­ä»Łç†ćˆ™æČżç”šäž»éą˜ćŠ èŽ­æ•ˆæžœïŒŒćŠćˆ™æ’ä»¶ć…œćș• const proxyEl = document.getElementById('add-cart-event-proxy'); const inDrawer = this.isInCartDrawer_(); if (!inDrawer && proxyEl) { return; } // ćŒčć‡șć‰æŒ‰éœ€ćŽ»é‡ćč¶æŒ‚ćˆ° bodyćč‚ç­‰ïŒ‰ïŒŒéżć…é‡ć€ id ć‘œäž­é”™ćŻčè±Ąæˆ–èą«æŠœć±‰èŁć‰Ș/错䜍 this.ensureSingleToastInBody_('apps_add_cart_toast_wrap'); const toastEl = document.querySelector('#apps-match-drawer-add_to_cart_toast') SPZ.whenApiDefined(toastEl).then((apis) => { apis.showToast("Added successfully"); }); }); } buildCallback() { this.setupAction_(); }; } SPZ.defineElement('spz-custom-discount-toast', SpzCustomDiscountBundle);
class SpzCustomDiscountFlashsale extends SPZ.BaseElement { constructor(element) { super(element); this.xhr_ = SPZServices.xhrFor(this.win); this.getFlashSaleApi = "\/api\/storefront\/promotion\/flashsale\/display_setting\/product_setting"; this.timer = null; this.variantId = "bad5eb26-4b0c-4d33-9f56-7f62f57c76e4"; // äżƒé”€æŽ»ćŠšæ•°æź this.flashsaleData = {} } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // 挂蜜bindć‡œæ•° è§Łć†łthisæŒ‡ć‘é—źéą˜ this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } mountCallback() { // èŽ·ć–æ•°æź this.getData(); this.element.onclick = (e) => { const cur = this.win.document.querySelector(".app_discount_flashsale_desc"); const setting = this.flashsaleData.product_setting; const landingUrl = `/promotions/discount-default/${this.flashsaleData.discount_info.id}`; const finalUrl = appDiscountUtils.resolveDiscountHref(setting, landingUrl); if (finalUrl && appDiscountUtils.inProductBody(this.element) && e.target !== cur) { this.win.open(finalUrl, '_blank', 'noopener'); } } // 绑柚 this.viewport_.onResize(this.resize); // ç›‘ćŹć­æŹŸćŒćˆ‡æąïŒŒé‡æ–°æžČ染 this.win.document.addEventListener('dj.variantChange', this.switchVariant); } unmountCallback() { // è§Łç»‘ this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); // æž…é™€ćźšæ—¶ć™š if (this.timer) { clearTimeout(this.timer); this.timer = null; } } resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { this.render(); }, 200) } switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == 'feec50c3-6a1c-4879-8f2e-248f8f44f71a' && variant.id != this.variantId) { this.variantId = variant.id; this.getData(); } } getData() { const reqBody = { product_id: "feec50c3-6a1c-4879-8f2e-248f8f44f71a", product_type: "default", variant_id: this.variantId } this.flashsaleData = {}; this.win.fetch(this.getFlashSaleApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { this.flashsaleData = await response.json(); this.render(); } else { this.clearDom(); } }).catch(err => { this.clearDom(); }); } clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } render() { this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), inProductDetail: appDiscountUtils.inProductBody(this.element), flashsaleData: this.flashsaleData, image_domain: this.win.SHOPLAZZA.image_domain, }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) } } SPZ.defineElement('spz-custom-discount-flashsale', SpzCustomDiscountFlashsale);
Buy More Save More!
Quantity
/** @private {string} */ class SpzCustomAnchorScroll extends SPZ.BaseElement { static deferredMount() { return false; } constructor(element) { super(element); /** @private {Element} */ this.scrollableContainer_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { this.viewport_ = this.getViewport(); this.initActions_(); } setTarget(containerId, targetId) { this.containerId = '#' + containerId; this.targetId = '#' + targetId; } scrollToTarget() { const container = document.querySelector(this.containerId); const target = container.querySelector(this.targetId); const {scrollTop} = container; const eleOffsetTop = this.getOffsetTop_(target, container); this.viewport_ .interpolateScrollIntoView_( container, scrollTop, scrollTop + eleOffsetTop ); } initActions_() { this.registerAction( 'scrollToTarget', (invocation) => this.scrollToTarget(invocation?.caller) ); this.registerAction( 'setTarget', (invocation) => this.setTarget(invocation?.args?.containerId, invocation?.args?.targetId) ); } /** * @param {Element} element * @param {Element} container * @return {number} * @private */ getOffsetTop_(element, container) { if (!element./*OK*/ getClientRects().length) { return 0; } const rect = element./*OK*/ getBoundingClientRect(); if (rect.width || rect.height) { return rect.top - container./*OK*/ getBoundingClientRect().top; } return rect.top; } } SPZ.defineElement('spz-custom-anchor-scroll', SpzCustomAnchorScroll); const STRENGTHEN_TRUST_URL = "/api/strengthen_trust/settings"; class SpzCustomStrengthenTrust extends SPZ.BaseElement { constructor(element) { super(element); this.renderElement_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.xhr_ = SPZServices.xhrFor(this.win); const renderId = this.element.getAttribute('render-id'); SPZCore.Dom.waitForChild( document.body, () => !!document.getElementById(renderId), () => { this.renderElement_ = SPZCore.Dom.scopedQuerySelector( document.body, `#${renderId}` ); if (this.renderElement_) { this.render_(); } this.registerAction('track', (invocation) => { this.track_(invocation.args); }); } ); } render_() { this.fetchData_().then((data) => { if (!data) { return; } SPZ.whenApiDefined(this.renderElement_).then((apis) => { apis?.render(data); document.querySelector('#strengthen-trust-render-1651799308132').addEventListener('click',(event)=>{ if(event.target.nodeName == 'A'){ this.track_({type: 'trust_content_click'}); } }) }); }); } track_(data = {}) { const track = window.sa && window.sa.track; if (!track) { return; } track('trust_enhancement_event', data); } parseJSON_(string) { let result = {}; try { result = JSON.parse(string); } catch (e) {} return result; } fetchData_() { return this.xhr_ .fetchJson(STRENGTHEN_TRUST_URL) .then((responseData) => { if (!responseData || !responseData.data) { return null; } const data = responseData.data; const moduleSettings = (data.module_settings || []).reduce((result, moduleSetting) => { return result.concat(Object.assign(moduleSetting, { logos: (moduleSetting.logos || []).map((item) => { return moduleSetting.logos_type == 'custom' ? this.parseJSON_(item) : item; }) })); }, []); return Object.assign(data, { module_settings: moduleSettings, isEditor: window.self !== window.top, }); }); } } SPZ.defineElement('spz-custom-strengthen-trust', SpzCustomStrengthenTrust);
Description

Click "ADD TO CART" To Get Yours Now!


HOW TO PAY

✅Payments Via PayPal¼, Debit and CreditCard.

   Add to cart first, and Check out, then select Shipping method and Payment method.

If you checkout with a Debit / Credit Card, just enter your * Card Number, * Expiration Date, and * Secure Code.

🌎 Worldwide Shipping ✈  

Delivery typically takes different times based on the different destination. You may receive your items earlier. Tracking Numbers will always be sent so you can track it every step of the way! 
🔒 100% Risk-Free Purchase
 
If you bought it and felt that it is not for you, don't worry. Send a message for us, and we will make it right by offering you a replacement or refund. 100% Simple & Risk-Free process.
 
🏭 Our Warehouse Once your order is dispatched, depending on your country or region, products will be delivered to you as soon as possible.
Â