www.hooshops.com
Open in
urlscan Pro
104.17.246.119
Public Scan
Submitted URL: http://www.hooshops.com/products/csmdf240617-3nh-gcg4-1ex9-ezef-3ltd-fmsj-jq8z-zjx3-281e-c0v3-ivrm-ua0x-yava-zfx0-i8gb?u...
Effective URL: https://www.hooshops.com/products/csmdf240617-3nh-gcg4-1ex9-ezef-3ltd-fmsj-jq8z-zjx3-281e-c0v3-ivrm-ua0x-yava-zfx0-i8gb?u...
Submission: On July 11 via api from US — Scanned from DE
Effective URL: https://www.hooshops.com/products/csmdf240617-3nh-gcg4-1ex9-ezef-3ltd-fmsj-jq8z-zjx3-281e-c0v3-ivrm-ua0x-yava-zfx0-i8gb?u...
Submission: On July 11 via api from US — Scanned from DE
Form analysis
7 forms found in the DOM<form>
<input name="variant_id" type="hidden" value="${data.variants[0].id}">
<button type="button" class="product-snippet__quick-shop-icon" role="addToCart" data-quick-shop="${data.handle}" data-track-product-id="${data.id}" data-track="click" data-track-content="add_to_cart" data-track-source="quick_shop">
<svg class="" width="16" height="16" xmlns="http://www.w3.org/2000/svg">
<path d="M8.6 1.9a.3.3 0 0 0-.3-.3h-.6a.3.3 0 0 0-.3.3v5.5H1.9a.3.3 0 0 0-.3.3v.6a.3.3 0 0 0 .3.3h5.5v5.5a.3.3 0 0 0 .3.3h.6a.3.3 0 0 0 .3-.3V8.6h5.5a.3.3 0 0 0 .3-.3v-.6a.3.3 0 0 0-.3-.3H8.6V1.9z" fill="currentColor"></path>
</svg>
</button>
</form>
GET /search
<form class="flex items-center" action="/search" method="get">
<button type="submit" class="clear text-0 text-inherit cursor-pointer">
<svg class="" width="26" height="26" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M17.925 20.057A9.955 9.955 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10a9.968 9.968 0 0 1-2.864 7.006l4.929 4.928a.8.8 0 0 1-1.132 1.132l-5-5-.008-.01zM20.4 12a8.4 8.4 0 1 1-16.8 0 8.4 8.4 0 0 1 16.8 0z"
fill="currentColor"></path>
</svg>
</button>
<input @input-debounced="header_search_predictive_render-sidebar.rerender(data=event.value, redo=true);" class="header__search_sidebar-input flex-1 text-base leading-none type-text-font-family clear" type="text" autocomplete="off" name="q"
placeholder="Search products">
<button type="reset" class="header__search-modal-close text-0 text-inherit clear cursor-pointer" @tap="header_search_sidebar.close()">
<svg class="" width="26" height="26" xmlns="http://www.w3.org/2000/svg">
<path d="M21.502 5.732A.85.85 0 0 0 20.3 4.53l-7.32 7.32L5.734 4.6a.85.85 0 0 0-1.202 1.203l7.248 7.247L4.53 20.3A.85.85 0 0 0 5.733 21.5l7.248-7.248 7.319 7.319a.85.85 0 0 0 1.202-1.202l-7.319-7.319 7.319-7.319z" fill="currentColor"></path>
</svg>
</button>
</form>
GET
<form id="smart-search-form" class="smart-search-form" method="GET" is="spz-form" @submit="smart-search.handleSearchSubmit(value=event.q);">
<div class="smart-search-input-content">
<svg class="icon-search " width="18" height="18" xmlns="http://www.w3.org/2000/svg">
<path opacity=".01" fill="currentColor" d="M0 0h18v18H0z"></path>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.41 13.885a6.923 6.923 0 1 1 .839-.728l3.412 3.413a.554.554 0 0 1-.783.783l-3.462-3.462a.383.383 0 0 1-.006-.006Zm1.713-5.577a5.815 5.815 0 1 1-11.63 0 5.815 5.815 0 0 1 11.63 0Z"
fill="currentColor"></path>
</svg>
<input class="smart-search-input" type="search" name="q" spz-if="${data.isOpenAutoThink}" @input-debounced="smart-search.handleFormInput(keyword=event.value);" autocorrect="off" autocomplete="off" autocapitalize="off" spellcheck="false">
<input class="smart-search-input" type="search" name="q" spz-else="">
<spz-carousel class="hot-keyword-carousel" spz-if="${data.isOpenFindKeyword}" layout="container" loop="" autoplay="" delay="3000" direct="vertical" @slideend="smart-search.handleFindKeyword(index=event.index);">
<span class="hot-keyword line-clamp-1" spz-for="(item,index) in data.findKeywordList" key="index">${item}</span>
</spz-carousel>
<button class="smart-search-reset-btn" type="reset" @tap="smart-search-form.clear();smart-search.handleFormInput(keyword='');">
<svg class="icon_header_input_close icon-smart-search-reset" width="12" height="12" xmlns="http://www.w3.org/2000/svg">
<path
d="M2.746 1.992a.2.2 0 0 0-.283 0l-.471.471a.2.2 0 0 0 0 .283L5.245 6 1.992 9.25a.2.2 0 0 0 0 .283l.471.472a.2.2 0 0 0 .283 0L6 6.753l3.252 3.253a.2.2 0 0 0 .283 0l.472-.472a.2.2 0 0 0 0-.283L6.753 6l3.253-3.253a.2.2 0 0 0 0-.283l-.472-.471a.2.2 0 0 0-.283 0L6 5.245 2.746 1.992z"
fill="currentColor"></path>
</svg>
</button>
</div>
<button type="submit" class="smart-search-submit-btn button-primary"> Search </button>
</form>
<form role="spz-product-form616b65d7-99fb-48a6-b972-3b4fa34b4cc6">
<div class="product-info-body-inner product-info-body-z-index" id="product-info-body-inner-container">
<div class="flex mt-2">
<div class="text-xs leading-1.3 color-custom-label-text product-info-custom-label bg-custom-label rounded-sm">Anniversary Sale🔥</div>
</div>
<h1 class="product-info-title m-0 leading-1.25 type-heading-font-family break-words product-title-color "> HOO® Stunning Fighter And Pirate Ship Printing Short Sleeve Shirt </h1>
<div class="shoplazza-reviews-rating-wrap d-inline-flex align-items-center notranslate">
<span data-grade="4.5" class="shoplazza-reviews-rating" data-comment_avg_star="4.5">
<span class="shoplazza-reviews__rating-active _click_area" style=" color:rgba(250, 210, 12, 1);">
<svg xmlns="http://www.w3.org/2000/svg" width="14px" height="13px" viewBox="0 0 14 13" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M7 10.024L3.54178 12.2422C3.30844 12.3918 3.01281 12.1771 3.08305 11.9089L4.12399 7.93447L0.94575 5.33096C0.731302 5.15529 0.844223 4.80775 1.12097 4.79168L5.22253 4.55352L6.71649 0.726304C6.81729 0.468066 7.18271 0.468067 7.28351 0.726305L8.77747 4.55352L12.879 4.79168C13.1558 4.80775 13.2687 5.15529 13.0542 5.33096L9.87601 7.93447L10.917 11.9089C10.9872 12.1771 10.6916 12.3918 10.4582 12.2422L7 10.024Z"
fill="rgba(250, 210, 12, 1)" id="star"></path>
</svg>
</span>
<span class="shoplazza-reviews__rating-active _click_area" style=" color:rgba(250, 210, 12, 1);">
<svg xmlns="http://www.w3.org/2000/svg" width="14px" height="13px" viewBox="0 0 14 13" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M7 10.024L3.54178 12.2422C3.30844 12.3918 3.01281 12.1771 3.08305 11.9089L4.12399 7.93447L0.94575 5.33096C0.731302 5.15529 0.844223 4.80775 1.12097 4.79168L5.22253 4.55352L6.71649 0.726304C6.81729 0.468066 7.18271 0.468067 7.28351 0.726305L8.77747 4.55352L12.879 4.79168C13.1558 4.80775 13.2687 5.15529 13.0542 5.33096L9.87601 7.93447L10.917 11.9089C10.9872 12.1771 10.6916 12.3918 10.4582 12.2422L7 10.024Z"
fill="rgba(250, 210, 12, 1)" id="star"></path>
</svg>
</span>
<span class="shoplazza-reviews__rating-active _click_area" style=" color:rgba(250, 210, 12, 1);">
<svg xmlns="http://www.w3.org/2000/svg" width="14px" height="13px" viewBox="0 0 14 13" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M7 10.024L3.54178 12.2422C3.30844 12.3918 3.01281 12.1771 3.08305 11.9089L4.12399 7.93447L0.94575 5.33096C0.731302 5.15529 0.844223 4.80775 1.12097 4.79168L5.22253 4.55352L6.71649 0.726304C6.81729 0.468066 7.18271 0.468067 7.28351 0.726305L8.77747 4.55352L12.879 4.79168C13.1558 4.80775 13.2687 5.15529 13.0542 5.33096L9.87601 7.93447L10.917 11.9089C10.9872 12.1771 10.6916 12.3918 10.4582 12.2422L7 10.024Z"
fill="rgba(250, 210, 12, 1)" id="star"></path>
</svg>
</span>
<span class="shoplazza-reviews__rating-active _click_area" style=" color:rgba(250, 210, 12, 1);">
<svg xmlns="http://www.w3.org/2000/svg" width="14px" height="13px" viewBox="0 0 14 13" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M7 10.024L3.54178 12.2422C3.30844 12.3918 3.01281 12.1771 3.08305 11.9089L4.12399 7.93447L0.94575 5.33096C0.731302 5.15529 0.844223 4.80775 1.12097 4.79168L5.22253 4.55352L6.71649 0.726304C6.81729 0.468066 7.18271 0.468067 7.28351 0.726305L8.77747 4.55352L12.879 4.79168C13.1558 4.80775 13.2687 5.15529 13.0542 5.33096L9.87601 7.93447L10.917 11.9089C10.9872 12.1771 10.6916 12.3918 10.4582 12.2422L7 10.024Z"
fill="rgba(250, 210, 12, 1)" id="star"></path>
</svg>
</span>
<span class="shoplazza-reviews__rating-active _click_area" data-comment_avg_star="4.5" style=" color:rgba(250, 210, 12, 1);">
<svg xmlns="http://www.w3.org/2000/svg" width="14px" height="13px" viewBox="0 0 14 13" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M7 10.024L3.63553 12.182C3.36886 12.3531 3.031 12.1076 3.11127 11.8011L4.12399 7.93447L1.03191 5.40154C0.78683 5.20078 0.915883 4.80359 1.23217 4.78523L5.22253 4.55352L6.67599 0.830062C6.79119 0.534933 7.20881 0.534934 7.32402 0.830063L8.77747 4.55352L12.7678 4.78523C13.0841 4.80359 13.2132 5.20078 12.9681 5.40154L9.87601 7.93447L10.8887 11.8011C10.969 12.1076 10.6311 12.3531 10.3645 12.182L7 10.024Z"
stroke="rgba(250, 210, 12, 1)" stroke-width="0.5" id="star2"></path>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="14px" height="13px" viewBox="0 0 14 13" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M7 10.024L3.54178 12.2422C3.30844 12.3918 3.01281 12.1771 3.08305 11.9089L4.12399 7.93447L0.94575 5.33096C0.731302 5.15529 0.844223 4.80775 1.12097 4.79168L5.22253 4.55352L6.71649 0.726304C6.81729 0.468066 7.18271 0.468067 7.28351 0.726305L8.77747 4.55352L12.879 4.79168C13.1558 4.80775 13.2687 5.15529 13.0542 5.33096L9.87601 7.93447L10.917 11.9089C10.9872 12.1771 10.6916 12.3918 10.4582 12.2422L7 10.024Z"
fill="rgba(250, 210, 12, 1)" id="star"></path>
</svg>
</span>
<style>
.shoplazza-reviews-rating .shoplazza-reviews__rating-active[data-comment_avg_star="4.5"] svg:nth-child(2) {
-webkit-clip-path: polygon(0 0, 50% 0, 50% 100%, 0 100%);
clip-path: polygon(0 0, 50% 0, 50% 100%, 0 100%);
}
html[dir="rtl"] .shoplazza-reviews-rating .shoplazza-reviews__rating-active[data-comment_avg_star="4.5"] svg:nth-child(2) {
-webkit-clip-path: polygon(50% 0, 100% 0, 100% 100%, 50% 100%);
clip-path: polygon(50% 0, 100% 0, 100% 100%, 50% 100%);
}
</style>
</span>
<span class="shoplazza-reviews__rating-view notranslate">(2)<span style="color: rgba(32, 32, 32, 0.7);font-size: 14px;line-height: 16px;margin-left: 8px;">View</span></span>
</div>
<spz-render class="mt-4 lg:mt-5 i-spzhtml-layout-container i-spzhtml-element i-spzhtml-built i-spzhtml-layout" id="product-info-prices" layout="container" manual="" i-spzhtml-layout="container" style="height: auto;">
<template> ${function() { const variantData = data.variant ||
{"id":"b83307f4-9bf1-4ba1-a6d9-0783766e952b","product_id":"616b65d7-99fb-48a6-b972-3b4fa34b4cc6","title":"XS-Multicolor","weight_unit":"g","inventory_quantity":10000,"sku":"cSMDF240617-3nH-XS","barcode":"cSMDF240617-3nH","position":1,"option1":"XS","option2":"Multicolor","option3":"","note":"","image":{"src":"\/\/img.fantaskycdn.com\/834b5fc1784a82b64c62948ed5631d98.jpg","path":"834b5fc1784a82b64c62948ed5631d98.jpg","width":750,"height":1000,"alt":"","aspect_ratio":0.75},"wholesale_price":[{"price":24.95,"min_quantity":1}],"weight":"200","compare_at_price":"27.95","price":"24.95","retail_price":"27.95","available":true,"url":"\/products\/csmdf240617-3nh-gcg4-1ex9-ezef-3ltd-fmsj-jq8z-zjx3-281e-c0v3-ivrm-ua0x-yava-zfx0-i8gb?variant=b83307f4-9bf1-4ba1-a6d9-0783766e952b","available_quantity":10000,"options":[{"name":"Size","value":"XS"},{"name":"Color","value":"Multicolor"}],"off_ratio":11,"flashsale_info":[],"sales":30};
const saveType = "percentage"; const productLabelDiscountOn = true; return ` <div class="flex items-center justify-between">
<div spz-if="${!variantData.price}" class="mr-2 text-2xl leading-1.2 font-semibold color-price flex items-center">
<spz-currency class="mr-2" container-class="product-info__header_price" value="${data.product.price_min}" layout="container"></spz-currency>
<span class="flex" spz-if="${!variantData.price && data.product.price_min < data.product.price_max}"> - <spz-currency class="ml-2" container-class="product-info__header_price" value="${data.product.price_max}"
layout="container"></spz-currency></span>
</div>
<div spz-else="" class="flex items-center flex-wrap">
<spz-currency class="mr-2" container-class="product-info__header_price" value="${variantData.price}" layout="container"></spz-currency>
<spz-currency class="leading-1.2 color-compare-price line-through mr-2 lg:body-plus-2" container-class="product-info__header_compare-at-price" layout="container" value="${variantData.compare_at_price}"
spz-if="${+variantData.price < +variantData.compare_at_price}"></spz-currency>
<div spz-if="${productLabelDiscountOn && variantData.off_ratio > 0}" class="product-info-saved-label inline-block color-save-price whitespace-nowrap font-semibold"> ${saveType == 'percentage' ?
`<span>-${variantData.off_ratio}%</span>` : `<span>-</span><spz-currency class="inline-block" value="${variantData.compare_at_price - variantData.price}" layout="container"></spz-currency>` } </div>
</div>
</div> `; }()} </template>
<div class="flex items-center justify-between">
<div class="flex items-center flex-wrap" spz-else="">
<spz-currency class="mr-2 i-spzhtml-element i-spzhtml-layout-container i-spzhtml-built i-spzhtml-layout" container-class="product-info__header_price" value="24.95" layout="container" i-spzhtml-layout="container">
<div class="money product-info__header_price notranslate">€24.95</div>
</spz-currency><spz-currency class="leading-1.2 color-compare-price line-through mr-2 lg:body-plus-2 i-spzhtml-element i-spzhtml-layout-container i-spzhtml-built i-spzhtml-layout" container-class="product-info__header_compare-at-price"
layout="container" value="27.95" spz-if="true" i-spzhtml-layout="container">
<div class="money product-info__header_compare-at-price notranslate">€27.95</div>
</spz-currency>
<div class="product-info-saved-label inline-block color-save-price whitespace-nowrap font-semibold" spz-if="true">
<span>-11%</span>
</div>
</div>
</div>
</spz-render>
<div class="product-info-desc mt-4 lg:mt-5">
<spz-accordion layout="container" animate="" class="i-spzhtml-layout-container i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="container">
<section class="product-info-desc-item">
<div class="product-info-desc-item-header flex justify-between break-words i-spzhtml-accordion-header" accordion-header="">
<div class="flex-1 mr-3 lg:body-plus-3">Size Guide</div>
<svg class="flex-shrink-0" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none">
<path fill="currentColor" d="M7.543 11.306a.6.6 0 0 0 .848 0l4.455-4.454a.3.3 0 0 0 0-.425l-.34-.339a.3.3 0 0 0-.424 0l-4.115 4.115-4.115-4.115a.3.3 0 0 0-.425 0l-.34.34a.3.3 0 0 0 0 .424l4.456 4.454Z"></path>
</svg>
</div>
<div class="product-info-desc-item-content mce-content i-spzhtml-accordion-content">
<p>We strongly suggest you to take measurements before placing an order.<span class="Apple-converted-space"> </span><br>And then please use the “<strong>Size Guide</strong>” instructions and chart on every product page to help select
the size that best fits you.<br><strong>How to measure:</strong><br>Shoulder: Stand up straight and relax your shoulders, measure from the tip of one shoulder to the other.<br>Chest: Measure 1<span>" </span>under you
armholes around the fullest part of your chest including your shoulder blades.<br>Waist: Measure around your natural waistline, keeping the tape a bit loose.<br>Hip: Measure around the fullest part of the hips (about 7" down from your
natural waistline), keeping tape taut.<br>Length: This is the length of the clothing from where your neck/shoulders/waist meet to the bottom of the clothing.<br>*The measurements chart shown on product pages are measurements for each
garment, by size. Please use the guides and reference and compare them to your own body measurements to determine the best size. </p>
<p><span>If your body measurements </span>close to the maximum of the size, please choose one size up.</p>
<p><spz-img layout="intrinsic" auto-fit="" src="https://img.staticdj.com/21f410fd0c1044c2afcd2148f6d82817.jpeg" alt="" height="600" width="1024"
class="i-spzhtml-layout-intrinsic i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt spz-unresolved i-spzhtml-unresolved" i-spzhtml-layout="intrinsic"><i-spzhtml-sizer class="i-spzhtml-sizer"
slot="i-spzhtml-svc"><img alt="" role="presentation" aria-hidden="true" class="i-spzhtml-intrinsic-sizer"
src="data:image/svg+xml;charset=utf-8,<svg height="600px" width="1024px" xmlns="http://www.w3.org/2000/svg" version="1.1"/>"></i-spzhtml-sizer></spz-img></p>
<p><spz-img layout="intrinsic" src="https://img.fantaskycdn.com/1c4f3eaf795c7dea5c73a3d46ed25e53.jpg" alt="" height="600" width="1024"
class="i-spzhtml-layout-intrinsic i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt spz-unresolved i-spzhtml-unresolved" i-spzhtml-layout="intrinsic"><i-spzhtml-sizer class="i-spzhtml-sizer"
slot="i-spzhtml-svc"><img alt="" role="presentation" aria-hidden="true" class="i-spzhtml-intrinsic-sizer"
src="data:image/svg+xml;charset=utf-8,<svg height="600px" width="1024px" xmlns="http://www.w3.org/2000/svg" version="1.1"/>"></i-spzhtml-sizer></spz-img></p>
<p><spz-img layout="intrinsic" auto-fit="" src="https://img.staticdj.com/1d521343864a174271ffde90335023d7.jpeg" alt="" height="600" width="1024"
class="i-spzhtml-layout-intrinsic i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt spz-unresolved i-spzhtml-unresolved" i-spzhtml-layout="intrinsic"><i-spzhtml-sizer class="i-spzhtml-sizer"
slot="i-spzhtml-svc"><img alt="" role="presentation" aria-hidden="true" class="i-spzhtml-intrinsic-sizer"
src="data:image/svg+xml;charset=utf-8,<svg height="600px" width="1024px" xmlns="http://www.w3.org/2000/svg" version="1.1"/>"></i-spzhtml-sizer></spz-img></p>
<p><spz-img layout="intrinsic" auto-fit="" src="https://img.staticdj.com/c7467cae934628ac296dff7249624f4f.jpeg" alt="" height="600" width="1024"
class="i-spzhtml-layout-intrinsic i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt spz-unresolved i-spzhtml-unresolved" i-spzhtml-layout="intrinsic"><i-spzhtml-sizer class="i-spzhtml-sizer"
slot="i-spzhtml-svc"><img alt="" role="presentation" aria-hidden="true" class="i-spzhtml-intrinsic-sizer"
src="data:image/svg+xml;charset=utf-8,<svg height="600px" width="1024px" xmlns="http://www.w3.org/2000/svg" version="1.1"/>"></i-spzhtml-sizer></spz-img></p>
<p><spz-img layout="intrinsic" auto-fit="" src="https://img.staticdj.com/1f6a90b02cd964ff0257f330f0e09138.jpeg" alt="" height="600" width="1024"
class="i-spzhtml-layout-intrinsic i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt spz-unresolved i-spzhtml-unresolved" i-spzhtml-layout="intrinsic"><i-spzhtml-sizer class="i-spzhtml-sizer"
slot="i-spzhtml-svc"><img alt="" role="presentation" aria-hidden="true" class="i-spzhtml-intrinsic-sizer"
src="data:image/svg+xml;charset=utf-8,<svg height="600px" width="1024px" xmlns="http://www.w3.org/2000/svg" version="1.1"/>"></i-spzhtml-sizer></spz-img><spz-img layout="intrinsic"
auto-fit="" src="https://img.staticdj.com/790f8821622a8dafb9dd55032c63937f.jpeg" alt="" height="600" width="1024"
class="i-spzhtml-layout-intrinsic i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt spz-unresolved i-spzhtml-unresolved" i-spzhtml-layout="intrinsic"><i-spzhtml-sizer class="i-spzhtml-sizer"
slot="i-spzhtml-svc"><img alt="" role="presentation" aria-hidden="true" class="i-spzhtml-intrinsic-sizer"
src="data:image/svg+xml;charset=utf-8,<svg height="600px" width="1024px" xmlns="http://www.w3.org/2000/svg" version="1.1"/>"></i-spzhtml-sizer></spz-img><spz-img layout="intrinsic"
auto-fit="" src="https://img.staticdj.com/72bd8d22aba2ebc4691da7ec4626514a.jpeg" alt="" height="600" width="1024"
class="i-spzhtml-layout-intrinsic i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt spz-unresolved i-spzhtml-unresolved" i-spzhtml-layout="intrinsic"><i-spzhtml-sizer class="i-spzhtml-sizer"
slot="i-spzhtml-svc"><img alt="" role="presentation" aria-hidden="true" class="i-spzhtml-intrinsic-sizer"
src="data:image/svg+xml;charset=utf-8,<svg height="600px" width="1024px" xmlns="http://www.w3.org/2000/svg" version="1.1"/>"></i-spzhtml-sizer></spz-img><spz-img layout="intrinsic"
auto-fit="" src="https://img.staticdj.com/a6b02c7c136aaa10ad25409d71d0b62c.jpeg" alt="" height="600" width="1024"
class="i-spzhtml-layout-intrinsic i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt spz-unresolved i-spzhtml-unresolved" i-spzhtml-layout="intrinsic"><i-spzhtml-sizer class="i-spzhtml-sizer"
slot="i-spzhtml-svc"><img alt="" role="presentation" aria-hidden="true" class="i-spzhtml-intrinsic-sizer"
src="data:image/svg+xml;charset=utf-8,<svg height="600px" width="1024px" xmlns="http://www.w3.org/2000/svg" version="1.1"/>"></i-spzhtml-sizer></spz-img><spz-img layout="intrinsic"
auto-fit="" src="https://img.staticdj.com/b4d11f5161343eb9d9fae4562ea4a1e3.jpeg" alt="" height="600" width="1024"
class="i-spzhtml-layout-intrinsic i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt spz-unresolved i-spzhtml-unresolved" i-spzhtml-layout="intrinsic"><i-spzhtml-sizer class="i-spzhtml-sizer"
slot="i-spzhtml-svc"><img alt="" role="presentation" aria-hidden="true" class="i-spzhtml-intrinsic-sizer"
src="data:image/svg+xml;charset=utf-8,<svg height="600px" width="1024px" xmlns="http://www.w3.org/2000/svg" version="1.1"/>"></i-spzhtml-sizer></spz-img><spz-img layout="intrinsic"
auto-fit="" src="https://img.staticdj.com/d6f61a2bbc413adf5f44a8ddc2c9d168.jpeg" alt="" height="536" width="1024"
class="i-spzhtml-layout-intrinsic i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt spz-unresolved i-spzhtml-unresolved" i-spzhtml-layout="intrinsic"><i-spzhtml-sizer class="i-spzhtml-sizer"
slot="i-spzhtml-svc"><img alt="" role="presentation" aria-hidden="true" class="i-spzhtml-intrinsic-sizer"
src="data:image/svg+xml;charset=utf-8,<svg height="536px" width="1024px" xmlns="http://www.w3.org/2000/svg" version="1.1"/>"></i-spzhtml-sizer></spz-img></p>
<div><strong>Notes:</strong></div>
<div>a. Please choose a corresponding size according to your measurements.<span class="Apple-converted-space"> </span></div>
<div>b. The size chart listed is based on international sizing system.</div>
<div>c. 1-3cm / 1-1.2 inches is allowed in manual measurements error, the size chart is for reference only. If your body measurements close to the maximum of the size, please choose one size up.</div>
<div>d. The precise color of the items may vary depending on the specific monitor, the settings and lighting conditions.</div>
<div></div>
<div>We wish you a pleasant shopping with HOO!</div>
</div>
</section>
</spz-accordion>
</div>
<div class="plugin-discount-wrap empty-hidden" role="[theme-seat-for-plugin]">
<div class="bootstrap">
<div class="plugin__wrappers d-flex flex-column">
<div class="plugin_modals position-relative plugin_modals-rebate" id="Modal776863" style="order: 8">
<style>
#Modal776863 {
--modal_background: linear-gradient(0deg, #ebc19e, #fff3e8 100%);
--modal_caret_background: #fff2e9;
--modal_title_color: #B83D07;
--modal_close_color: #FFFFFF;
--modal_close_background_color: #F03010;
--list_border_color: #dddddd;
}
@media (max-width: 767.98px) {
#Modal776863 .coupon_plugin__coupon:last-child {
padding-bottom: 0;
}
}
#Modal776863 .modal-footer {
position: relative;
margin-top: -30px;
}
#Modal776863 .modal-footer::before {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 150%;
background-image: url(//img.fantaskycdn.com/oss/operation/e8ebb03dbb710457ca3b4b6a70898ab2.svg);
background-repeat: no-repeat;
background-size: 100%;
pointer-events: none;
}
@media (max-width: 767.98px) {
#Modal776863 .discount-present-item:last-child {
padding-bottom: 40px;
}
#Modal776863 .plugin_modals__wrapper-list>a:last-child {
padding-bottom: 14px;
}
}
</style>
<!-- 弹窗 -->
<div class="fade plugin_modals__modal" data-backdrop="false" role="dialog" id="target_Modal776863">
<div class="plugin_modals__modal-mask" data-dismiss="modal" aria-label="Close"></div>
<div class="modal-dialog m-0" role="document">
<div class="modal-content">
<div class="modal-header justify-content-center p-1">
<h5 class="modal-title p-1">SPECIAL OFFER</h5>
<i type="button" class="modal_close" data-dismiss="modal" aria-label="Close"><svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><defs><style></style></defs><path d="M512 1024C229.805 1024 0 794.195 0 512S229.805 0 512 0s512 229.805 512 512-229.805 512-512 512zm0-47.628C768 976.372 976.372 768 976.372 512S768 47.628 512 47.628 47.628 256 47.628 512 256 976.372 512 976.372z" fill="currentColor"></path><path d="M540.577 507.237l167.888 167.889c9.526 9.525 9.526 23.814 0 33.34s-23.814 9.525-33.34 0l-167.888-167.89-169.079 167.89c-9.525 9.525-23.814 9.525-33.34 0-9.525-9.526-9.525-23.815 0-33.34l167.889-167.889-167.888-169.079c-9.526-9.525-9.526-23.814 0-33.34 9.525-9.525 23.814-9.525 33.34 0l167.888 167.889 167.888-167.888c9.525-9.526 23.814-9.526 33.34 0 9.525 9.525 9.525 23.814 0 33.34L540.576 507.236z" fill="currentColor"></path></svg></i>
</div>
<div class="modal-body">
<div class="plugin_modals__wrapper">
<!-- modal头部 -->
<img alt="product rebate" class="plugin_modals__wrapper-top w-100"
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAAAyCAYAAAB1ROw8AAAID0lEQVR4Xu3dsY7URhgAYBvlXoE3CBQUkajoiQQFSgG55iLyDEjkAehowiPQBInmQoqkoeB6qgiKQwLeIG26nBRnzHqP3LF3O157PLO+75pIMDvj//t/536bWbu+9eBOlfvn15tXm9zHELP+9wfv65hxY4/J5SPesTO5ej75ncZZPU/jrJ6ncVbP0zir52mcY1bJVfNnHdulmIM2ZiHw27dXvp7aIseayxhzrJ1jTfFOV9XyO29r+ZXfVAI5aivHmhf191FM3eTMx6rjy95AlwZyXhKbproRk+Qxx+RYc3n8OdbOsaZ4x6zY8+eS33lby6/8phLIUVs51ryov49S1U3KebM30CmDG3vupqpvjz3nuvlyrHl8Aot3XXoG/738DiaMniCHdY41nb/RJTF4oPwOJoyeIId1jjUv6vkbXQgFDczeQOe8wtsgD7tT3jHv1trd4DjH+oh4x5JcMY/8JsRdPbV6TkiunhPiqudWwPmbsMQKOH/XRldav5i9ga6q+vJatXIG7Pzb1I+mOpxurZ2p1luxjngT4stvQtzVU6vnhOTqOSGuem4FnL8JS6yA8zciurL6xewNdHj8xvUItZKG7L24efVh6gN6cfPK/bDGXup1IuYXbwRS3yHy21dstPHqeTTKzxOp5wSocVOq5zinXqPUcy+uyQaX1i9mb6DDc+GuTaY/0kIhiY+7E2ykGU9O084d9l49TTL5BpOKdwO0cz4iv+N69p1NPfcVO3+8eh7Xs+9s6rmvmHr+v0Bp5+952SmtX8zaQLd7bsLJ/8245T/JbDuhwf0lxZ3ods527hBFzq0bpxHFO1JZye9IkMOmUc/D/I4/rZ5Hghw2jXoe5qeey+o3zsxm2y9O+T20dWVV53yRSnfl0zaL2/pzFK6I3tV1s3v31YePQ4L4dDHR1PuFX1CId8Mky++GcGk/pp439FXPG8Kl/Zh63tBXPW8Il+FjddX8eO/gw7MMS3+xZOYG+uqbwhvGmBwddYP2L9XNo76NdHvidpv326dtlHTX+azYxRtTFd0Y+e2BlWeoeu7hrp57YOUZqp57uKvnHljlDH0e3kj4QwmHk62B7gr3cEuaxuhchTvSb8NFwWG4SnpZ19Xr0w314kq3utE+X7Ldz7PtFxDiPfkvD/K7lVuyjs9v9aye/f85+tddcQOdv/M+f7uCOwo3K6/1vVmZolizNdCLvXPVzymCKmDO9i7AurvJMWMKCCXqEGJiiRkTtVgBg2JiiRlTQChRhxATS8yYqMUKGBQTS8yYAkKJOoSYWGLGRC1WwKCYWGLGFBBK1CHExBIzJmqxAgbFxBIzpoBQog4hJpaYMVGLlTAoXCj9dO/g/ZPcx5LzS4TtY9rm+rOueW7jjhmzLT4xscSMEW+ZAjG5ixlTZnRfHlVMLDFjxFumQEzuYsaUGZ16jsldzBj5LVegiP4xSwO9+PLgdv9Tb7l15cgIECBAgAABAvMUaPvHlI8SjlXL0kCHtw8mfxFJLIBxBAgQIECAAAEC2ySQv4+cvIHu9j5v47Oft6myHCsBAgQIECBAYJYCi7vQ6d8KfR7epA109+KUx7PMpqAIECBAgAABAgSmEDhq38KZ88UqkzbQ3fOO57R5f4oisQYBAgQIECBAgMBngU+9ZNdXZnGZrIHuNnzvZYnSogQIECBAgAABAnMSaJvovVxfKJykgV5s3aifzilrYiFAgAABAgQIEMgr0PaXObZyJG+gl++YD7y2buStMasTIECAAAECBOYmsNM09f7UTXTyBroNyjOf51ar4iFAgAABAgQIlCHQ9pltvznl0SRtoMMjRt5onqdMp7UIECBAgAABAhdPoHu03ZupIv8qxULLbRua5xS65iRAgAABAgQIEDgtsGyi67rZvfvqw8eUQqPfgdY8p0yXuQkQIECAAAECBM4SWG7nSL0netQGun2USHgm36E7zwqbAAECBAgQIEAgh0Dbh7b9aMpH3NW3HtwZHFvb5XcPs/ac58GaJiBAgAABAgQIEBhJ4Pmlunk09paOwXegl3edQ5Ca55EybRoCBAgQIECAAIFRBPZS3I3e+A704rZ4/bDbrnEUQvSc51HybBICBAgQIECAAIGRBNoetf3ZqavqbVU1T+4dfHg2dO5eDXT3BcHvwqL37XMeSu/zBAgQIECAAAECUwssGunqWXhax++bbu1Y20AvmubqRnhV4u2w2K47zVOn2XoECBAgQIAAAQIjCyzvTO/XVfOyrqvXfZrp4wZ6+biPtlkOWzMuhzvM10OHfs2d5pHTZToCBAgQIECAAIHSBI5C3/su9L2H4b9/hq0ef53XVNd///Hwn1N3lY/3ipQWmeMhQIAAAQIECBAgkFhgVS984s/aNxGe/vKfLwMmzorpCRAgQIAAAQIEihVY1Quf+LPBj7ErNnQHRoAAAQIECBAgQCCBgAY6AaopCRAgQIAAAQIE5iuggZ5vbkVGgAABAgQIECCQQEADnQDVlAQIECBAgAABAvMV0EDPN7ciI0CAAAECBAgQSCCggU6AakoCBAgQIECAAIH5Cmig55tbkREgQIAAAQIECCQQ0EAnQDUlAQIECBAgQIDAfAU00PPNrcgIECBAgAABAgQSCGigE6CakgABAgQIECBAYL4CGuj55lZkBAgQIECAAAECCQQ00AlQTUmAAAECBAgQIDBfAQ30fHMrMgIECBAgQIAAgQQCGugEqKYkQIAAAQIECBCYr4AGer65FRkBAgQIECBAgEACgf8ADWHGqni73L8AAAAASUVORK5CYII=">
<div class="plugin_modals__wrapper-bg">
<div class="plugin_modals__wrapper-list">
<style>
a.product_detail_rebate_list {
display: inline-flex;
gap: 4px;
align-items: start;
color: #EB391B;
}
a.product_detail_rebate_list:hover {
color: #EB391B;
}
a.product_detail_rebate_list .money {
white-space: nowrap;
}
.plugin_modals__modal .rebate-icon {
display: none;
}
.rebate-icon {
padding-top: 4px;
}
</style>
<a class="product_detail_rebate_list" impr="1" imprevt="1" href="/promotions/rebate/23f2b003-82fb-46cc-acf4-1f5e1c9fba32">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="24" fill="none" class="rebate-icon">
<g clip-path="url(#a)">
<path fill="#EB391B" fill-rule="evenodd" d="M9.127 1.275a1.576 1.576 0 0 0-2.255 0l-.693.709a1.576 1.576 0 0 1-1.146.475l-.991-.012a1.576 1.576 0 0 0-1.595 1.595l.011.991a1.576 1.576 0 0 1-.475 1.146l-.708.693a1.576 1.576 0 0 0 0 2.255l.709.693c.308.3.48.716.475 1.146l-.012.992a1.576 1.576 0 0 0 1.595 1.594l.991-.011a1.577 1.577 0 0 1 1.146.475l.693.709a1.575 1.575 0 0 0 2.255 0l.693-.71a1.576 1.576 0 0 1 1.146-.475l.992.012a1.575 1.575 0 0 0 1.594-1.594l-.011-.992a1.577 1.577 0 0 1 .475-1.146l.709-.693a1.575 1.575 0 0 0 0-2.255l-.71-.693a1.576 1.576 0 0 1-.475-1.146l.012-.991a1.576 1.576 0 0 0-1.594-1.595l-.992.011a1.576 1.576 0 0 1-1.146-.475l-.693-.708ZM5.84 6.92a1.08 1.08 0 1 0 0-2.16 1.08 1.08 0 0 0 0 2.16Zm4.32 4.32a1.08 1.08 0 1 0 0-2.161 1.08 1.08 0 0 0 0 2.16Zm.56-5.96a.793.793 0 0 1 0 1.12L6.4 10.72A.792.792 0 0 1 5.28 9.6L9.6 5.28a.792.792 0 0 1 1.12 0Z" clip-rule="evenodd"></path>
</g>
<defs>
<clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"></path></clipPath>
</defs>
</svg>
<div style="flex: 1;word-break: break-word">
<li id="pdr__rule" class="pdr__rule">
Buy <b><span class="money notranslate">€54.35</span></b> more and save <b><span class="money notranslate">€9.21</span></b>
</li>
<li id="pdr__rule" class="pdr__rule">
Buy <b><span class="money notranslate">€91.20</span></b> more and save <b><span class="money notranslate">€18.43</span></b>
</li>
<li id="pdr__rule" class="pdr__rule">
Buy <b><span class="money notranslate">€128.05</span></b> more and save <b><span class="money notranslate">€27.64</span></b>
</li>
<li id="pdr__rule" class="pdr__rule">
Buy <b><span class="money notranslate">€183.33</span></b> more and save <b><span class="money notranslate">€46.06</span></b>
</li>
</div>
</a>
</div>
</div>
<!-- modal底部 -->
<img alt="product rebate" class="plugin_modals__wrapper-bottom w-100"
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAAAyCAYAAAB1ROw8AAAHlUlEQVR4Xu3dz2pdRRgA8HOk9Ql8hSZFt10LJYEKbcHSItSNDyCVQsGtdCu4UfoAroTSYEACXbQWXHetvekrdOcyi+PMTaLXkOSefzNzevK7ILU6Z76Z33yHfpnOPaf++7dHTeVDgAABAgQIECBAgEArgQ9atdKIAAECBAgQIECAAIGlgAJaIhAgQIAAAQIECBDoIKCA7oClKQECBAgQIECAAAEFtBwgQIAAAQIECBAg0EFAAd0BS1MCBAgQIECAAAECCmg5QIAAAQIECBAgQKCDgAK6A5amBAgQIECAAAECBBTQcoAAAQIECBAgQIBABwEFdAcsTQkQIECAAAECBAgooOUAAQIECBAgQIAAgQ4CCugOWJoSIECAAAECBAgQUEDLAQIECBAgQIAAAQIdBBTQHbA0JUCAAAECBAgQIKCAlgMECBAgQIAAAQIEOggooDtgaUqAAAECBAgQIEAgFtAHGAgQIECAAAECBAgQOFMg1sv/1syX7r1cfBib7mxvXFle0lTXqrr+qGmaj6uqvh7+yyZMAgQIECBAgAABAjMXWIRC+FVd139WTfOuqqvXcb53X+y/PTnv+sbDW+daLAvrUFQ3Vf1FaHgz/HN55nimR4AAAQIECBAgMH+BuKO8V1fN01gsn1Yon0WwtoBevfBwl7r+rGmqr+1Mzz+rzJAAAQIECBAgMEOBRV1XT8Ju8/MuRfOqQ6cC+n/F9NbG/bAr/Z1CeoZpZUoECBAgQIAAgfkJLMJu8+O7L/d/GTq13gX0ceCd7c0HYUf6h/B7RzuGrobrCRAgQIAAAQIExhRYfvEv7Dg/uvti8dNYHQ9+jF0czNEXEXfHGpR+CBAgQIAAAQIECIwgsFfXzSdjFs9xTIML6OOJhSL6TtgW/zL83mPxRlhtXRAgQIAAAQIECPQWOIh1aaxP+55zPi/yaAV0DBLPlMQqP/xreAyIDwECBAgQIECAAIHsAuFLgmHXeYSzzmeNfNQCellEh2flhUHfVkRnTxYBCRAgQIAAAQIXWSCegojF8+0Uu86rsIO/RHjeKj3b2nwT/r8XsVzkVDZ3AgQIECBAgEAegd14ZCNHqNF3oFcHHSZx1U50jmUUgwABAgQIECBwoQUWuYrnqJy0gI4BHOe40Mls8gQIECBAgACB1ALLYxupg6z2n7yAXjkT7ekcOVdWLAIECBAgQIDA/AUOcpx5PsmYvICOAQ+L6OrR/NfQDAkQIECAAAECBHIJHL4gZf9trnjHcbIU0IdF9PLtL7u5JygeAQIECBAgQIDALAV2x35BSlulbAV0HFDYYv82/OIoR9vV0Y4AAQIECBAgQOA0gXh0I9aVRT5ZC2hHOYqssaAECBAgQIAAgVkJlDq6cYyYtYCOQY+22r2pcFZpbDIECBAgQIAAgWwCi1JHN4oV0DFweDf542zEAhEgQIAAAQIECMxGYAp1ZPYd6OUu9OG7ye1CzyaVTYQAAQIECBAgkEVgcVRHZgl2VpAiBfRyF7qunhSdueAECBAgQIAAAQLvlcBU6sdL5dSa56GMjk/kuFxuDEkih5315lVdVX+EsyqvTz6bcGd740rVVNeaqvo0zP96GMFmklHk69R8V6ytr3zOd+uNEsn96/7159Eot1KRTi7a/RuRQ90Y68fyn/rGw1vFRvFsa/PXEPzzYgMYL3D8QWAvPk6l68O8Y8HVNPX34fqb79EPE+bbMnesb0uoss3kc0t/+dwSqmwz+dzSXz63hJpWs917Lxd3pjCkogX0zvbmg6apfpwCxIAx7PYpnE/GW7mRp/4Dhfn2SBbr2wMtzyXyuYezfO6BlucS+dzDWT73QCt0STi+8U3pp28cT71wAb3cfd0vtA6Dw6ZYyCn/UGG+g1Omsr7DDcfqQT4Pl5TPww3H6kE+D5eUz8MNU/cQNiw3uv5Nf6oxFS2g46TCMY434Zf37RzwQXiEylepvgW6s7Vxv6nqn4PLVM6Hm++Id6D1HRGzX1fyuZ/bqVfJ5xEx+3Uln/u5yecgMMH797zVXITjG1dHXO5BXRV7CsfKqP8aNIMCFy/ffnP4KL4kn9h3jJGk8x6dmm8PtHMusb7jenbtTT53FTu/vXwe17Nrb/K5q5h8XhWY2v27ZjUnVS8WL6DDzf/7uOmfvLfdHOdvjmLsJp/N+gDmu96ocwvr25lsrAvk81iSK/3I5wSo7bqUz+2cOrWSz524sjWeWr1YvICumuZdNv3hgQ7iFwaHd9Ouh6NY8RvVpT7mm1De+ibEPb1r+ZyQXD4nxJXPUcD9mzDFJnD/rp/dxOrF8gV0eFbyerXJtNjLeXj9KNZewdmbb0J865sQ9/Su5XNCcvmcEFc+RwH3b8IUm8D9u352E6sXyxfQ68km0yJ8cfBp7sGUiHk8xxKxS8Q033xZbX3nbW19rW8qgRK5VSLmRf3zKFXepOy3eAGdc0d3MGSJn35KxPzvDs7/twPmOzhNW3dQwrpETPncOiUGN7S+gwlbd1DCukRM92/rlBjcsOT6Dh58/g6KP8YuTjk8yi682Xr6n/D4lPCG7vyfUj7mm2etrW8eZ/mcx1k+53GWz3mc5XMe5zZRSuX8WWP7Bxil8XEJz7ZOAAAAAElFTkSuQmCC">
</div>
</div>
<div class="modal-footer d-md-none">
<a type="button" class="footer_close" style="border-radius: 100px;" data-dismiss="modal">CLOSE</a>
</div>
</div>
</div>
</div>
<!-- 入口 -->
<div class="plugin_modals__list" data-toggle="modal" data-target="#target_Modal776863" impr="1" imprevt="1" imprsd="true">
<div class="plugin_modals__list-name">
<style>
a.product_detail_rebate_list {
display: inline-flex;
gap: 4px;
align-items: start;
color: #EB391B;
}
a.product_detail_rebate_list:hover {
color: #EB391B;
}
a.product_detail_rebate_list .money {
white-space: nowrap;
}
.plugin_modals__modal .rebate-icon {
display: none;
}
.rebate-icon {
padding-top: 4px;
}
</style>
<a class="product_detail_rebate_list" impr="1" imprevt="1" href="/promotions/rebate/23f2b003-82fb-46cc-acf4-1f5e1c9fba32" imprsd="true">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="24" fill="none" class="rebate-icon">
<g clip-path="url(#a)">
<path fill="#EB391B" fill-rule="evenodd" d="M9.127 1.275a1.576 1.576 0 0 0-2.255 0l-.693.709a1.576 1.576 0 0 1-1.146.475l-.991-.012a1.576 1.576 0 0 0-1.595 1.595l.011.991a1.576 1.576 0 0 1-.475 1.146l-.708.693a1.576 1.576 0 0 0 0 2.255l.709.693c.308.3.48.716.475 1.146l-.012.992a1.576 1.576 0 0 0 1.595 1.594l.991-.011a1.577 1.577 0 0 1 1.146.475l.693.709a1.575 1.575 0 0 0 2.255 0l.693-.71a1.576 1.576 0 0 1 1.146-.475l.992.012a1.575 1.575 0 0 0 1.594-1.594l-.011-.992a1.577 1.577 0 0 1 .475-1.146l.709-.693a1.575 1.575 0 0 0 0-2.255l-.71-.693a1.576 1.576 0 0 1-.475-1.146l.012-.991a1.576 1.576 0 0 0-1.594-1.595l-.992.011a1.576 1.576 0 0 1-1.146-.475l-.693-.708ZM5.84 6.92a1.08 1.08 0 1 0 0-2.16 1.08 1.08 0 0 0 0 2.16Zm4.32 4.32a1.08 1.08 0 1 0 0-2.161 1.08 1.08 0 0 0 0 2.16Zm.56-5.96a.793.793 0 0 1 0 1.12L6.4 10.72A.792.792 0 0 1 5.28 9.6L9.6 5.28a.792.792 0 0 1 1.12 0Z" clip-rule="evenodd"></path>
</g>
<defs>
<clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"></path></clipPath>
</defs>
</svg>
<div style="flex: 1;word-break: break-word">
<li id="pdr__rule" class="pdr__rule">
Buy <b><span class="money notranslate">€54.35</span></b> more and save <b><span class="money notranslate">€9.21</span></b>
</li>
<li id="pdr__rule" class="pdr__rule">
Buy <b><span class="money notranslate">€91.20</span></b> more and save <b><span class="money notranslate">€18.43</span></b>
</li>
<li id="pdr__rule" class="pdr__rule">
Buy <b><span class="money notranslate">€128.05</span></b> more and save <b><span class="money notranslate">€27.64</span></b>
</li>
<li id="pdr__rule" class="pdr__rule">
Buy <b><span class="money notranslate">€183.33</span></b> more and save <b><span class="money notranslate">€46.06</span></b>
</li>
</div>
</a>
</div>
<div class="plugin_modals__list-labels text-right"></div>
<i class="plugin_modals__list-icon">
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="18" height="18"><defs><style></style></defs><path d="M636.48 512.32l-366.4 366.4a48 48 0 0067.84 67.872l384.672-384.64a48 48 0 0011.456-49.6 48 48 0 00-11.456-49.6L337.952 78.016a48 48 0 00-67.904 67.904l366.4 366.4z"></path></svg>
</i>
</div>
</div>
<div class="plugin_modals position-relative plugin_modals-discount_gifts" id="Modal397318" style="order: 9">
<style>
#Modal397318 {
--modal_background: linear-gradient(135deg, #ff4848, #ff0d7d);
--modal_caret_background: #ff0d7d;
--modal_title_color: #fff;
--modal_close_color: #D30808;
--modal_close_background_color: #FFE6D0;
--list_border_color: #ddd;
}
@media (max-width: 767.98px) {
#Modal397318 .coupon_plugin__coupon:last-child {
padding-bottom: 0;
}
}
#Modal397318 .modal-footer {
position: relative;
margin-top: -30px;
}
#Modal397318 .modal-footer::before {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 150%;
background-image: url(//img.fantaskycdn.com/oss/operation/1eb91360306015b21548cd2f1747bc0e.svg);
background-repeat: no-repeat;
background-size: 100%;
pointer-events: none;
}
@media (max-width: 767.98px) {
#Modal397318 .discount-present-item:last-child {
padding-bottom: 40px;
}
#Modal397318 .plugin_modals__wrapper-list>a:last-child {
padding-bottom: 14px;
}
}
</style>
<!-- 弹窗 -->
<div class="fade plugin_modals__modal" data-backdrop="false" role="dialog" id="target_Modal397318">
<div class="plugin_modals__modal-mask" data-dismiss="modal" aria-label="Close"></div>
<div class="modal-dialog m-0" role="document">
<div class="modal-content">
<div class="modal-header justify-content-center p-1">
<h5 class="modal-title p-1">GIFT OFFER</h5>
<i type="button" class="modal_close" data-dismiss="modal" aria-label="Close"><svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><defs><style></style></defs><path d="M512 1024C229.805 1024 0 794.195 0 512S229.805 0 512 0s512 229.805 512 512-229.805 512-512 512zm0-47.628C768 976.372 976.372 768 976.372 512S768 47.628 512 47.628 47.628 256 47.628 512 256 976.372 512 976.372z" fill="currentColor"></path><path d="M540.577 507.237l167.888 167.889c9.526 9.525 9.526 23.814 0 33.34s-23.814 9.525-33.34 0l-167.888-167.89-169.079 167.89c-9.525 9.525-23.814 9.525-33.34 0-9.525-9.526-9.525-23.815 0-33.34l167.889-167.889-167.888-169.079c-9.526-9.525-9.526-23.814 0-33.34 9.525-9.525 23.814-9.525 33.34 0l167.888 167.889 167.888-167.888c9.525-9.526 23.814-9.526 33.34 0 9.525 9.525 9.525 23.814 0 33.34L540.576 507.236z" fill="currentColor"></path></svg></i>
</div>
<div class="modal-body">
<div class="discount-present">
<div class="gift-offer-entry position-relative d-flex flex-row discount-present-item" data-id="ab6fddeb-1775-4208-bf84-15922900afc9">
<div class="activity-rules d-flex align-items-center" data-toggle="modal" data-target="#gift-offer-modal">
<!-- view the gift svg图标 -->
<img alt="plugin discount gift" class="lazyload" loading="lazy" src="//img.fantaskycdn.com/oss/operation/287876a2c3f514fadb32ecfa592ce1f7.png">
<div class="activity-rules-contennt"> View the <span class="gift_offer">GIFT OFFER</span>
</div>
</div>
</div>
<div class="discount-present-item position-relative d-flex flex-row">
<a class="rules w-100">
<div class="activity-rules-contennt">
<li>Spend <span class="money notranslate">€100.42</span> to get <span>1</span> free gift(s)</li>
</div>
</a>
</div>
</div>
</div>
<div class="modal-footer d-md-none">
<a type="button" class="footer_close" style="border-radius: 21px;" data-dismiss="modal">CLOSE</a>
</div>
</div>
</div>
</div>
<!-- 入口 -->
<div class="plugin_modals__list" data-toggle="modal" data-target="#target_Modal397318" impr="1" imprevt="1" imprsd="true">
<div class="plugin_modals__list-name"><a class="rules w-100">
<i>
<svg width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.31421 2.57895C4.31421 2.03589 4.82263 1.47368 5.61842 1.47368C6.39063 1.47368 7.26158 2.11474 7.26158 3.19274V3.68421H6.63821C6.04505 3.68421 5.418 3.6761 4.93905 3.5C4.71653 3.41747 4.57211 3.31358 4.48148 3.19568C4.39674 3.08516 4.31421 2.90316 4.31421 2.57895ZM9.35863 3.68421H8.73526V3.19274C8.73526 2.11474 9.60547 1.47368 10.3784 1.47368C11.1742 1.47368 11.6826 2.03589 11.6826 2.57895C11.6826 2.90316 11.6001 3.08442 11.5154 3.19568C11.4247 3.31358 11.2803 3.41674 11.0578 3.49926C10.5788 3.6761 9.95252 3.68421 9.35863 3.68421ZM13.1563 2.57895C13.1563 2.9901 13.0804 3.36 12.9308 3.68421H14.2616C14.5547 3.68421 14.8358 3.80066 15.0431 4.00793C15.2504 4.21521 15.3668 4.49634 15.3668 4.78947V6.63158H0.630005V4.78947C0.630005 4.49634 0.746452 4.21521 0.953729 4.00793C1.16101 3.80066 1.44213 3.68421 1.73527 3.68421H3.066C2.91128 3.3366 2.83434 2.95939 2.84053 2.57895C2.84053 1.08316 4.15432 0 5.61842 0C6.47684 0 7.38537 0.402317 7.99842 1.12663C8.61147 0.402317 9.52 0 10.3784 0C11.8433 0 13.1563 1.08316 13.1563 2.57895ZM7.26158 14V8.10526H1.36685V12.8947C1.36685 13.5063 1.86053 14 2.47211 14H7.26158ZM8.73526 14V8.10526H14.63V12.8947C14.63 13.5063 14.1363 14 13.5247 14H8.73526Z" fill="#EB391B"></path>
</svg>
</i>
<div class="activity-rules-contennt">
<li>Spend <span class="money notranslate">€100.42</span> to get <span>1</span> free gift(s)</li>
</div>
</a></div>
<div class="plugin_modals__list-labels text-right"></div>
<i class="plugin_modals__list-icon">
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="18" height="18"><defs><style></style></defs><path d="M636.48 512.32l-366.4 366.4a48 48 0 0067.84 67.872l384.672-384.64a48 48 0 0011.456-49.6 48 48 0 00-11.456-49.6L337.952 78.016a48 48 0 00-67.904 67.904l366.4 366.4z"></path></svg>
</i>
</div>
</div>
</div>
</div>
</div>
<spz-variants class="product-info__variants flex flex-col items-start i-spzhtml-layout-container i-spzhtml-element i-spzhtml-built i-spzhtml-layout" layout="container" id="product-info-variants" src="script:product-json" switch-slide="[]"
slide="product-detail-images" manual="" interference="" select-soldout-suffix=" - Sold out" interact="hover" inherit-url-variant=""
@mouseout="product-info-selected-variant-option1.rerender(data=event);product-info-selected-variant-option2.rerender(data=event);" @sizemouseover="product-info-selected-variant-option1.rerender(data=event);"
@colormouseover="product-info-selected-variant-option2.rerender(data=event);" i-spzhtml-layout="container">
<div class="variants_combination_box" impr="1" imprevt="1" imprsd="true">
<div class="combination_title product-info__variants_title" data-role="plugin-variants"> Style </div>
<div class="combination_list_container">
<a class="combination_list_item " href="/products/csmdf240612-1yh-zat8-cbcs-urty-3kdq-xr1m-zdxq-byzr-jzyq-5a2w-202t">
<img class="combination_list_item_img" src="//img.staticdj.com/a5eb707804eafc321e0ecc927b7415c0.jpg" alt="">
</a>
<a class="combination_list_item " href="/products/csmdf240619-4yh-p5wa-pkzt-heok-7l65-uftj-ncss-sdlr-o98s-evbq-08qu-ozmy-ve71-891m-vmhm-bru2-ojlu">
<img class="combination_list_item_img" src="//img.staticdj.com/b4ec5180cc5927ebed9627ee17174a16.jpg" alt="">
</a>
<a class="combination_list_item " href="/products/hoo®-csmdf240604-5nh-printing-short-sleeve-shirt">
<img class="combination_list_item_img" src="//img.staticdj.com/902d7351872b9c7a73056fa604d3b780.jpg" alt="">
</a>
<a class="combination_list_item " href="/products/csmdf240611-3yh-8cyl-ja0q-cwgk-6y92-h5ph-cydk-3cn6-bgm4-57l5-0isx">
<img class="combination_list_item_img" src="//img.staticdj.com/7612862e8bd14ba75acc6e15f4199c84.jpg" alt="">
</a>
<a class="combination_list_item " href="/products/csmdf240617-1nh-9i48-0ms0-rvvg-v1er-sw2n-pq01-xpgq-sv51-gv83-lq0e-ff02-1c6y-81ja-nuyp">
<img class="combination_list_item_img" src="//img.staticdj.com/a26bac3f1e6c4f7894e2dc6aa1ea0afe.jpg" alt="">
</a>
<a class="combination_list_item " href="/products/csmdf240612-3yh-8cyl-ja0q-cwgk-6y92-h5ph-cydk-3cn6-bgm4-57l5-0isx-3dq6">
<img class="combination_list_item_img" src="//img.staticdj.com/d644a4da096a7b6ef6edcb7c43cfbcbd.jpg" alt="">
</a>
<a class="combination_list_item " href="/products/csmdf240611-2nh-imdw-0k98-mti9-gjlv-k57r-cihz-8kaj-2fsj-rfn8">
<img class="combination_list_item_img" src="//img.staticdj.com/3d52fafd821f06aa9d14e41c0b790438.jpg" alt="">
</a>
<a class="combination_list_item combination_list_item_selectd " href="/products/csmdf240617-3nh-gcg4-1ex9-ezef-3ltd-fmsj-jq8z-zjx3-281e-c0v3-ivrm-ua0x-yava-zfx0-i8gb">
<img class="combination_list_item_img" src="//img.staticdj.com/834b5fc1784a82b64c62948ed5631d98.jpg" alt="">
</a>
<a class="combination_list_item " href="/products/csmdf240604-2yh-gj2m-3ax5-xq7v-57c6-hwyq-fcl7">
<img class="combination_list_item_img" src="//img.staticdj.com/4496f2759a4e05f85b2f69265d4c0459.jpg" alt="">
</a>
<a class="combination_list_item " href="/products/csmdf240617-4yh-p5wa-pkzt-heok-7l65-uftj-ncss-sdlr-o98s-evbq-08qu-ozmy-ve71-891m-vmhm">
<img class="combination_list_item_img" src="//img.staticdj.com/4dbe7613dc8c4140e02f58d129809bd6.jpg" alt="">
</a>
<a class="combination_list_item " href="/products/csmdf240620-1nh-9i48-0ms0-rvvg-v1er-sw2n-pq01-xpgq-sv51-gv83-lq0e-ff02-1c6y-81ja-nuyp-0sla-ufav-h8k2">
<img class="combination_list_item_img" src="//img.staticdj.com/cff323f483f2430390c4cb327fb65408.jpg" alt="">
</a>
</div>
</div>
<fieldset class="product-info__variants_content mx-0 mt-4 lg:mt-5 max-w-full min-w-[0px]" name="Size">
<legend class="w-full m-0 p-0 flex items-center product-info__variants_title">
<span class="lg:body-plus-2 font-semibold leading-1.25 flex-shrink-0">Size: </span>
<spz-render class="product-info-selected-variant-option-text inline-block color-body-70 leading-1.3125 lg:body-minus-2 flex-grow flex items-center min-w-[0px] i-spzhtml-layout-container i-spzhtml-element i-spzhtml-built i-spzhtml-layout"
id="product-info-selected-variant-option1" layout="container" manual="" i-spzhtml-layout="container" style="height: 18px;">
<template> ${function(){ const optName = "Size"; const optionValue = data.originData.selectData ? data.originData.selectData[optName].value : data.originData.value; const optionValueText = optionValue ? (optionValue) : ''; return `<span
class="inline-block truncate max-w-full" title="${optionValueText}">${optionValueText}</span>`; }()} </template>
<span class="inline-block truncate max-w-full">XS</span></spz-render>
</legend>
<div class="flex flex-wrap product-info-variant-container ">
<div class="relative mt-3 mr-3">
<input type="radio" option="XS" id="product-info-variant-XS-0" class="pointer-events-auto" name="product-info-variant-Size" value="XS" form="product-info-body" @input-debounced="product-info-selected-variant-option1.rerender(data=event);"
checked="">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-btn-fixed
" data-type="text">
<span class="break-words text-center">XS</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="S" id="product-info-variant-S-1" class="pointer-events-auto" name="product-info-variant-Size" value="S" form="product-info-body" @input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-btn-fixed
" data-type="text">
<span class="break-words text-center">S</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="M" id="product-info-variant-M-2" class="pointer-events-auto" name="product-info-variant-Size" value="M" form="product-info-body" @input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-btn-fixed
" data-type="text">
<span class="break-words text-center">M</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="L" id="product-info-variant-L-3" class="pointer-events-auto" name="product-info-variant-Size" value="L" form="product-info-body" @input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-btn-fixed
" data-type="text">
<span class="break-words text-center">L</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="XL" id="product-info-variant-XL-4" class="pointer-events-auto" name="product-info-variant-Size" value="XL" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-btn-fixed
" data-type="text">
<span class="break-words text-center">XL</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="2XL" id="product-info-variant-2XL-5" class="pointer-events-auto" name="product-info-variant-Size" value="2XL" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-btn-fixed
" data-type="text">
<span class="break-words text-center">2XL</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="3XL" id="product-info-variant-3XL-6" class="pointer-events-auto" name="product-info-variant-Size" value="3XL" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-btn-fixed
" data-type="text">
<span class="break-words text-center">3XL</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="4XL" id="product-info-variant-4XL-7" class="pointer-events-auto" name="product-info-variant-Size" value="4XL" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-btn-fixed
" data-type="text">
<span class="break-words text-center">4XL</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="4XLT" id="product-info-variant-4XLT-8" class="pointer-events-auto" name="product-info-variant-Size" value="4XLT" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-btn-fixed
" data-type="text">
<span class="break-words text-center">4XLT</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="5XL" id="product-info-variant-5XL-9" class="pointer-events-auto" name="product-info-variant-Size" value="5XL" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-btn-fixed
" data-type="text">
<span class="break-words text-center">5XL</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="5XLT" id="product-info-variant-5XLT-10" class="pointer-events-auto" name="product-info-variant-Size" value="5XLT" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-btn-fixed
" data-type="text">
<span class="break-words text-center">5XLT</span>
</label>
</div>
</div>
</fieldset>
<spz-render id="product-variant-option1-error-tip" manual="" layout="container" class="i-spzhtml-layout-container i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="container">
<template> ${function(){ const tipText = "Please select a {{ name }}".replace(/\{\{\s+name\s+\}\}/g, data); return `<div class="product-info__variants-tips font-bold">${tipText}</div>` }()} </template>
</spz-render>
<fieldset class="product-info__variants_content mx-0 mt-4 lg:mt-5 max-w-full min-w-[0px]" name="Color">
<legend class="w-full m-0 p-0 flex items-center product-info__variants_title">
<span class="lg:body-plus-2 font-semibold leading-1.25 flex-shrink-0">Color: </span>
<spz-render class="product-info-selected-variant-option-text inline-block color-body-70 leading-1.3125 lg:body-minus-2 flex-grow flex items-center min-w-[0px] i-spzhtml-layout-container i-spzhtml-element i-spzhtml-built i-spzhtml-layout"
id="product-info-selected-variant-option2" layout="container" manual="" i-spzhtml-layout="container" style="height: 18px;">
<template> ${function(){ const optName = "Color"; const optionValue = data.originData.selectData ? data.originData.selectData[optName].value : data.originData.value; const optionValueText = optionValue ? (optionValue) : ''; return `<span
class="inline-block truncate max-w-full" title="${optionValueText}">${optionValueText}</span>`; }()} </template>
<span class="inline-block truncate max-w-full">Multicolor</span></spz-render>
</legend>
<div class="flex flex-wrap ">
<div class="relative mt-3 mr-3">
<input type="radio" option="Multicolor" id="product-info-variant-Multicolor-0" class="pointer-events-auto" name="product-info-variant-Color" value="Multicolor" form="product-info-body"
@input-debounced="product-info-selected-variant-option2.rerender(data=event);" checked="">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-btn-fixed
" data-type="image">
<spz-img src="//img.fantaskycdn.com/834b5fc1784a82b64c62948ed5631d98_48x.jpg" layout="responsive" width="44" height="44" alt="" object-fit="cover" auto-fit=""
class="i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top:100%;"></i-spzhtml-sizer><img
decoding="async" alt="" src="//img.fantaskycdn.com/834b5fc1784a82b64c62948ed5631d98_48x.jpg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></spz-img>
</label>
</div>
</div>
</fieldset>
<spz-render id="product-variant-option2-error-tip" manual="" layout="container" class="i-spzhtml-layout-container i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="container">
<template> ${function(){ const tipText = "Please select a {{ name }}".replace(/\{\{\s+name\s+\}\}/g, data); return `<div class="product-info__variants-tips font-bold">${tipText}</div>` }()} </template>
</spz-render>
</spz-variants>
<div class=" mt-4 lg:mt-5">
<div class="leading-1.25 font-semibold lg:body-plus-2">Quantity</div>
<spz-quantity class="product-info-qty mt-2 lg:mt-3 i-spzhtml-layout-fixed-height i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-built i-spzhtml-layout" id="product-info-quantity" name="quantity" value="1" min="1" max="10000"
icon-class="product-info-qty-btn clear flex items-center justify-center flex-shrink-0" input-class="product-info-qty-input clear flex-shrink-0 body-plus-2 text-center" height="40" layout="fixed-height" style="height:40px;"
i-spzhtml-layout="fixed-height">
<div class="i-spzhtml-fill-content i-spzhtml-replaced-content"><span role="button" class="i-spzhtml-quantity-number-decrease product-info-qty-btn clear flex items-center justify-center flex-shrink-0" disabled=""><svg role="decrease" class=""
width="16" height="16" xmlns="http://www.w3.org/2000/svg">
<path d="M13.7 7.4a.3.3 0 0 1 .3.3v.6a.3.3 0 0 1-.3.3H2.3a.3.3 0 0 1-.3-.3v-.6a.3.3 0 0 1 .3-.3h11.4z" fill="currentColor"></path>
</svg></span><input type="number" name="quantity" min="1" max="10000" class="i-spzhtml-quantity-number-input product-info-qty-input clear flex-shrink-0 body-plus-2 text-center"><span role="button"
class="i-spzhtml-quantity-number-increase product-info-qty-btn clear flex items-center justify-center flex-shrink-0"><svg role="increase" class="" width="16" height="16" xmlns="http://www.w3.org/2000/svg">
<path d="M8.3 14a.3.3 0 0 0 .3-.3V8.6h5.1a.3.3 0 0 0 .3-.3v-.6a.3.3 0 0 0-.3-.3H8.6V2.3a.3.3 0 0 0-.3-.3h-.6a.3.3 0 0 0-.3.3v5.1H2.3a.3.3 0 0 0-.3.3v.6a.3.3 0 0 0 .3.3h5.1v5.1a.3.3 0 0 0 .3.3h.6z" fill="currentColor"></path>
</svg></span></div>
</spz-quantity>
</div>
<div class="product-info__btn mt-4 lg:mt-5">
<button class="relative button-secondary flex items-center justify-center w-full body-plus-2 leading-1.25 type-text-font-family rounded-btn product-info_atc_btn" type="button" role="addToCart" data-track="click" data-track-content="add_to_cart"
data-track-source="add_to_cart">
<span role="content">Add to cart</span>
<spz-render id="product-info-btn-price" layout="container" template="product-info-btn-price-template" manual="" class="i-spzhtml-layout-container i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="container"
style="height: auto;">
<div class="flex"><span class="product_price_before"></span><spz-currency value="24.95" layout="container" class="i-spzhtml-element i-spzhtml-layout-container i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="container">
<div class="money notranslate">€24.95</div>
</spz-currency></div>
</spz-render>
<style>
.product_price_before::before {
content: ' - ';
display: block;
width: 20px;
}
</style>
<template id="product-info-btn-price-template"> ${function(){ const wholesale_enabled = false; const qty = data.quantity || 1; const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants
&& data.product.variants[0]); const productVariant =
{"id":"b83307f4-9bf1-4ba1-a6d9-0783766e952b","product_id":"616b65d7-99fb-48a6-b972-3b4fa34b4cc6","title":"XS-Multicolor","weight_unit":"g","inventory_quantity":10000,"sku":"cSMDF240617-3nH-XS","barcode":"cSMDF240617-3nH","position":1,"option1":"XS","option2":"Multicolor","option3":"","note":"","image":{"src":"\/\/img.fantaskycdn.com\/834b5fc1784a82b64c62948ed5631d98.jpg","path":"834b5fc1784a82b64c62948ed5631d98.jpg","width":750,"height":1000,"alt":"","aspect_ratio":0.75},"wholesale_price":[{"price":24.95,"min_quantity":1}],"weight":"200","compare_at_price":"27.95","price":"24.95","retail_price":"27.95","available":true,"url":"\/products\/csmdf240617-3nh-gcg4-1ex9-ezef-3ltd-fmsj-jq8z-zjx3-281e-c0v3-ivrm-ua0x-yava-zfx0-i8gb?variant=b83307f4-9bf1-4ba1-a6d9-0783766e952b","available_quantity":10000,"options":[{"name":"Size","value":"XS"},{"name":"Color","value":"Multicolor"}],"off_ratio":11,"flashsale_info":[],"sales":30};
const variantData = currentSelectVariant || defaultVariant || productVariant; const wholesale_price = variantData.wholesale_price || []; if(wholesale_enabled && wholesale_price.length > 0) { let wholesaleIndex =
wholesale_price.findIndex(item => { return item.min_quantity > qty; }); if(wholesaleIndex < 0){ wholesaleIndex = wholesale_price.length - 1; }else if(wholesaleIndex > 0){ wholesaleIndex = wholesaleIndex - 1; } const
wholesalePrice = wholesale_price[wholesaleIndex] || ''; return ` <div class="flex">
<span class="product_price_before"></span><spz-currency value="${wholesalePrice.price}" layout="container"></spz-currency>
</div> ` }else { const price = variantData && variantData.price; return price != undefined ? `<div class="flex"><span class="product_price_before"></span><spz-currency value="${price}" layout="container"></spz-currency></div>` :
'<span></span>'; } }()} </template>
<div class="loading items-center justify-center absolute inset-0 flex" role="loading" show="">
<div class="loading-bounce"></div>
</div>
</button>
<button class="relative button-primary w-full body-plus-2 leading-1.25 type-text-font-family rounded-btn mt-2 lg:mt-3 product-info_atc_btn" role="buyNow" type="button" data-track="click" data-track-content="checkout"
data-track-source="buy_now">
<span role="content">Buy now</span>
<div class="loading items-center justify-center absolute inset-0 flex" role="loading" show="">
<div class="loading-bounce"></div>
</div>
</button>
<spz-paypal class="mt-3 rounded-btn i-spzhtml-layout-fixed-height i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-built i-spzhtml-layout" id="paypal-express-button-container" variant="#product-info-variants"
quantity="#product-info-quantity" product-id="616b65d7-99fb-48a6-b972-3b4fa34b4cc6" variant-id="b83307f4-9bf1-4ba1-a6d9-0783766e952b" product-form="#product-info-body" role="paypal" layout="fixed-height" height="52"
paypal-js="https://www.paypal.com/sdk/js?client-id=AUwoRlv3iZ3jt3o3hhcft_tZ5g6tvefEpjCf9YNGeH7q8p_WraleitkKfLnWIs8HLpzalgRA5AMT0BYO&currency=EUR&disable-funding=card%2Cbancontact%2Cblik%2Ceps%2Cgiropay%2Cideal%2Cmercadopago%2Cmybank%2Cp24%2Csepa%2Csofort%2Cvenmo&enable-funding=paylater"
style="height:52px;" i-spzhtml-layout="fixed-height">
<div id="zoid-paypal-buttons-uid_06e5f4d8c1_mji6ndm6mze" class="paypal-buttons paypal-buttons-context-iframe paypal-buttons-label-unknown paypal-buttons-layout-horizontal" data-paypal-smart-button-version="5.0.449"
style="height: 52px; transition: all 0.2s ease-in-out 0s;">
<style nonce="">
#zoid-paypal-buttons-uid_06e5f4d8c1_mji6ndm6mze {
position: relative;
display: inline-block;
width: 100%;
min-height: 25px;
min-width: 150px;
font-size: 0;
}
#zoid-paypal-buttons-uid_06e5f4d8c1_mji6ndm6mze>iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
#zoid-paypal-buttons-uid_06e5f4d8c1_mji6ndm6mze>iframe.component-frame {
z-index: 100;
}
#zoid-paypal-buttons-uid_06e5f4d8c1_mji6ndm6mze>iframe.prerender-frame {
transition: opacity .2s linear;
z-index: 200;
}
#zoid-paypal-buttons-uid_06e5f4d8c1_mji6ndm6mze>iframe.visible {
opacity: 1;
}
#zoid-paypal-buttons-uid_06e5f4d8c1_mji6ndm6mze>iframe.invisible {
opacity: 0;
pointer-events: none;
}
#zoid-paypal-buttons-uid_06e5f4d8c1_mji6ndm6mze>.smart-menu {
position: absolute;
z-index: 300;
top: 0;
left: 0;
width: 100%;
}
</style><iframe allowtransparency="true"
name="__zoid__paypal_buttons__eyJzZW5kZXIiOnsiZG9tYWluIjoiaHR0cHM6Ly93d3cuaG9vc2hvcHMuY29tIn0sIm1ldGFEYXRhIjp7IndpbmRvd1JlZiI6eyJ0eXBlIjoicGFyZW50IiwiZGlzdGFuY2UiOjB9fSwicmVmZXJlbmNlIjp7InR5cGUiOiJyYXciLCJ2YWwiOiJ7XCJ1aWRcIjpcInpvaWQtcGF5cGFsLWJ1dHRvbnMtdWlkXzA2ZTVmNGQ4YzFfbWppNm5kbTZtemVcIixcImNvbnRleHRcIjpcImlmcmFtZVwiLFwidGFnXCI6XCJwYXlwYWwtYnV0dG9uc1wiLFwiY2hpbGREb21haW5NYXRjaFwiOntcIl9fdHlwZV9fXCI6XCJyZWdleFwiLFwiX192YWxfX1wiOlwiXFxcXC5wYXlwYWxcXFxcLihjb218Y24pKDpcXFxcZCspPyRcIn0sXCJ2ZXJzaW9uXCI6XCIxMF8zXzNcIixcInByb3BzXCI6e1wiZW52XCI6XCJwcm9kdWN0aW9uXCIsXCJjb21taXRcIjp0cnVlLFwic3R5bGVcIjp7XCJsYWJlbFwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJsYXlvdXRcIjpcImhvcml6b250YWxcIixcImNvbG9yXCI6XCJnb2xkXCIsXCJzaGFwZVwiOlwicmVjdFwiLFwidGFnbGluZVwiOmZhbHNlLFwiaGVpZ2h0XCI6NTIsXCJwZXJpb2RcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwibWVudVBsYWNlbWVudFwiOlwiYmVsb3dcIixcImRpc2FibGVNYXhXaWR0aFwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJkaXNhYmxlTWF4SGVpZ2h0XCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcImJvcmRlclJhZGl1c1wiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn19LFwiZnVuZGluZ1wiOntcImRpc2FsbG93ZWRcIjpbXCJjcmVkaXRcIl19LFwib25BcHByb3ZlXCI6e1wiX190eXBlX19cIjpcImNyb3NzX2RvbWFpbl9mdW5jdGlvblwiLFwiX192YWxfX1wiOntcImlkXCI6XCJ1aWRfMmNkZGMxY2UwYV9tamk2bmRtNm16ZVwiLFwibmFtZVwiOlwiYm91bmQgdmFsdWVcIn19LFwiY3JlYXRlT3JkZXJcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF80MDUwOWI0ZjU1X21qaTZuZG02bXplXCIsXCJuYW1lXCI6XCJib3VuZCB2YWx1ZVwifX0sXCJjc3BOb25jZVwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJhbGxvd0JpbGxpbmdQYXltZW50c1wiOnRydWUsXCJhbW91bnRcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwiYXBpU3RhZ2VIb3N0XCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcImFwcGxlUGF5XCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcImFwcGxlUGF5U3VwcG9ydFwiOmZhbHNlLFwiYnJhbmRlZFwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJidXR0b25Mb2NhdGlvblwiOlwid3d3Lmhvb3Nob3BzLmNvbVwiLFwiYnV0dG9uU2Vzc2lvbklEXCI6XCJ1aWRfNTI1MTg2ZDc5Nl9tamk2bmRtNm16ZVwiLFwiYnV0dG9uU2l6ZVwiOlwibGFyZ2VcIixcImJ1eWVyQ291bnRyeVwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJjbGllbnRBY2Nlc3NUb2tlblwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJjdXN0b21lcklkXCI6XCJcIixcImNsaWVudElEXCI6XCJBVXdvUmx2M2laM2p0M28zaGhjZnRfdFo1ZzZ0dmVmRXBqQ2Y5WU5HZUg3cThwX1dyYWxlaXRrS2ZMbldJczhITHB6YWxnUkE1QU1UMEJZT1wiLFwiY2xpZW50TWV0YWRhdGFJRFwiOlwidWlkXzAwYmNlNGNlNTBfbWppNm5kbTZtemVcIixcImNvbXBvbmVudHNcIjpbXCJidXR0b25zXCJdLFwiY3JlYXRlQmlsbGluZ0FncmVlbWVudFwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJjcmVhdGVTdWJzY3JpcHRpb25cIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwiY3JlYXRlVmF1bHRTZXR1cFRva2VuXCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcImNzcFwiOntcIm5vbmNlXCI6XCJcIn0sXCJjdXJyZW5jeVwiOlwiRVVSXCIsXCJkZWJ1Z1wiOmZhbHNlLFwiZGlzYWJsZUNhcmRcIjpbXSxcImRpc2FibGVGdW5kaW5nXCI6W1wiY2FyZFwiLFwiYmFuY29udGFjdFwiLFwiYmxpa1wiLFwiZXBzXCIsXCJnaXJvcGF5XCIsXCJpZGVhbFwiLFwibWVyY2Fkb3BhZ29cIixcIm15YmFua1wiLFwicDI0XCIsXCJzZXBhXCIsXCJzb2ZvcnRcIixcInZlbm1vXCJdLFwiZGlzYWJsZVNldENvb2tpZVwiOnRydWUsXCJkaXNwbGF5T25seVwiOltdLFwiZW5hYmxlRnVuZGluZ1wiOltcInBheWxhdGVyXCJdLFwiZW5hYmxlVGhyZWVEb21haW5TZWN1cmVcIjpmYWxzZSxcImVuYWJsZVZhdWx0XCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcImV4cGVyaW1lbnRcIjp7XCJlbmFibGVWZW5tb1wiOmZhbHNlLFwidmVubW9WYXVsdFdpdGhvdXRQdXJjaGFzZVwiOmZhbHNlfSxcImV4cGVyaW1lbnRhdGlvblwiOnt9LFwiZmxvd1wiOlwicHVyY2hhc2VcIixcImZ1bmRpbmdFbGlnaWJpbGl0eVwiOntcInBheXBhbFwiOntcImVsaWdpYmxlXCI6dHJ1ZSxcInZhdWx0YWJsZVwiOmZhbHNlfSxcInBheWxhdGVyXCI6e1wiZWxpZ2libGVcIjpmYWxzZSxcInZhdWx0YWJsZVwiOmZhbHNlLFwicHJvZHVjdHNcIjp7XCJwYXlJbjNcIjp7XCJlbGlnaWJsZVwiOmZhbHNlLFwidmFyaWFudFwiOm51bGx9LFwicGF5SW40XCI6e1wiZWxpZ2libGVcIjpmYWxzZSxcInZhcmlhbnRcIjpudWxsfSxcInBheWxhdGVyXCI6e1wiZWxpZ2libGVcIjpmYWxzZSxcInZhcmlhbnRcIjpudWxsfX19LFwiY2FyZFwiOntcImVsaWdpYmxlXCI6ZmFsc2UsXCJicmFuZGVkXCI6dHJ1ZSxcImluc3RhbGxtZW50c1wiOmZhbHNlLFwidmVuZG9yc1wiOntcInZpc2FcIjp7XCJlbGlnaWJsZVwiOnRydWUsXCJ2YXVsdGFibGVcIjp0cnVlfSxcIm1hc3RlcmNhcmRcIjp7XCJlbGlnaWJsZVwiOnRydWUsXCJ2YXVsdGFibGVcIjp0cnVlfSxcImFtZXhcIjp7XCJlbGlnaWJsZVwiOnRydWUsXCJ2YXVsdGFibGVcIjp0cnVlfSxcImRpc2NvdmVyXCI6e1wiZWxpZ2libGVcIjpmYWxzZSxcInZhdWx0YWJsZVwiOnRydWV9LFwiaGlwZXJcIjp7XCJlbGlnaWJsZVwiOmZhbHNlLFwidmF1bHRhYmxlXCI6ZmFsc2V9LFwiZWxvXCI6e1wiZWxpZ2libGVcIjpmYWxzZSxcInZhdWx0YWJsZVwiOnRydWV9LFwiamNiXCI6e1wiZWxpZ2libGVcIjpmYWxzZSxcInZhdWx0YWJsZVwiOnRydWV9LFwibWFlc3Ryb1wiOntcImVsaWdpYmxlXCI6dHJ1ZSxcInZhdWx0YWJsZVwiOnRydWV9LFwiZGluZXJzXCI6e1wiZWxpZ2libGVcIjp0cnVlLFwidmF1bHRhYmxlXCI6dHJ1ZX0sXCJjdXBcIjp7XCJlbGlnaWJsZVwiOnRydWUsXCJ2YXVsdGFibGVcIjp0cnVlfX0sXCJndWVzdEVuYWJsZWRcIjpmYWxzZX0sXCJ2ZW5tb1wiOntcImVsaWdpYmxlXCI6ZmFsc2UsXCJ2YXVsdGFibGVcIjpmYWxzZX0sXCJpdGF1XCI6e1wiZWxpZ2libGVcIjpmYWxzZX0sXCJjcmVkaXRcIjp7XCJlbGlnaWJsZVwiOmZhbHNlfSxcImFwcGxlcGF5XCI6e1wiZWxpZ2libGVcIjpmYWxzZX0sXCJzZXBhXCI6e1wiZWxpZ2libGVcIjpmYWxzZX0sXCJpZGVhbFwiOntcImVsaWdpYmxlXCI6ZmFsc2V9LFwiYmFuY29udGFjdFwiOntcImVsaWdpYmxlXCI6ZmFsc2V9LFwiZ2lyb3BheVwiOntcImVsaWdpYmxlXCI6ZmFsc2V9LFwiZXBzXCI6e1wiZWxpZ2libGVcIjpmYWxzZX0sXCJzb2ZvcnRcIjp7XCJlbGlnaWJsZVwiOmZhbHNlfSxcIm15YmFua1wiOntcImVsaWdpYmxlXCI6ZmFsc2V9LFwicDI0XCI6e1wiZWxpZ2libGVcIjpmYWxzZX0sXCJ3ZWNoYXRwYXlcIjp7XCJlbGlnaWJsZVwiOmZhbHNlfSxcInBheXVcIjp7XCJlbGlnaWJsZVwiOmZhbHNlfSxcImJsaWtcIjp7XCJlbGlnaWJsZVwiOmZhbHNlfSxcInRydXN0bHlcIjp7XCJlbGlnaWJsZVwiOmZhbHNlfSxcIm94eG9cIjp7XCJlbGlnaWJsZVwiOmZhbHNlfSxcImJvbGV0b1wiOntcImVsaWdpYmxlXCI6ZmFsc2V9LFwiYm9sZXRvYmFuY2FyaW9cIjp7XCJlbGlnaWJsZVwiOmZhbHNlfSxcIm1lcmNhZG9wYWdvXCI6e1wiZWxpZ2libGVcIjpmYWxzZX0sXCJtdWx0aWJhbmNvXCI6e1wiZWxpZ2libGVcIjpmYWxzZX0sXCJzYXRpc3BheVwiOntcImVsaWdpYmxlXCI6ZmFsc2V9LFwicGFpZHlcIjp7XCJlbGlnaWJsZVwiOmZhbHNlfX0sXCJmdW5kaW5nU291cmNlXCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcImdldFBhZ2VVcmxcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF83NjI1YjA5MWY0X21qaTZuZG02bXplXCIsXCJuYW1lXCI6XCJnZXRQYWdlVXJsXCJ9fSxcImdldFBvcHVwQnJpZGdlXCI6e1wiX190eXBlX19cIjpcImNyb3NzX2RvbWFpbl9mdW5jdGlvblwiLFwiX192YWxfX1wiOntcImlkXCI6XCJ1aWRfMjNlOTRhNmY0Nl9tamk2bmRtNm16ZVwiLFwibmFtZVwiOlwiZ2V0UG9wdXBCcmlkZ2VcIn19LFwiZ2V0UHJlcmVuZGVyRGV0YWlsc1wiOntcIl9fdHlwZV9fXCI6XCJjcm9zc19kb21haW5fZnVuY3Rpb25cIixcIl9fdmFsX19cIjp7XCJpZFwiOlwidWlkXzQ5YzNhNGY2YTBfbWppNm5kbTZtemVcIixcIm5hbWVcIjpcImdldFByZXJlbmRlckRldGFpbHNcIn19LFwiZ2V0UXVlcmllZEVsaWdpYmxlRnVuZGluZ1wiOntcIl9fdHlwZV9fXCI6XCJjcm9zc19kb21haW5fZnVuY3Rpb25cIixcIl9fdmFsX19cIjp7XCJpZFwiOlwidWlkX2Q2NzNlM2YxNDhfbWppNm5kbTZtemVcIixcIm5hbWVcIjpcImdldFF1ZXJpZWRFbGlnaWJsZUZ1bmRpbmdcIn19LFwiaG9zdGVkQnV0dG9uSWRcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwiaW50ZW50XCI6XCJjYXB0dXJlXCIsXCJqc1Nka0xpYnJhcnlcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwibG9jYWxlXCI6e1wiY291bnRyeVwiOlwiVVNcIixcImxhbmdcIjpcImVuXCJ9LFwibWVyY2hhbnRJRFwiOltdLFwibWVyY2hhbnRSZXF1ZXN0ZWRQb3B1cHNEaXNhYmxlZFwiOmZhbHNlLFwibWVzc2FnZVwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJub25jZVwiOlwiXCIsXCJvbkNhbmNlbFwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJvbkNsaWNrXCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcIm9uQ29tcGxldGVcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwib25Jbml0XCI6e1wiX190eXBlX19cIjpcImNyb3NzX2RvbWFpbl9mdW5jdGlvblwiLFwiX192YWxfX1wiOntcImlkXCI6XCJ1aWRfOTU0MmU2ZTRiOV9tamk2bmRtNm16ZVwiLFwibmFtZVwiOlwib25Jbml0XCJ9fSxcIm9uTWVzc2FnZUNsaWNrXCI6e1wiX190eXBlX19cIjpcImNyb3NzX2RvbWFpbl9mdW5jdGlvblwiLFwiX192YWxfX1wiOntcImlkXCI6XCJ1aWRfNTgyYmM3MTE4Zl9tamk2bmRtNm16ZVwiLFwibmFtZVwiOlwib25NZXNzYWdlQ2xpY2tcIn19LFwib25NZXNzYWdlSG92ZXJcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF83NzdjMzg5OTRjX21qaTZuZG02bXplXCIsXCJuYW1lXCI6XCJvbk1lc3NhZ2VIb3ZlclwifX0sXCJvbk1lc3NhZ2VSZWFkeVwiOntcIl9fdHlwZV9fXCI6XCJjcm9zc19kb21haW5fZnVuY3Rpb25cIixcIl9fdmFsX19cIjp7XCJpZFwiOlwidWlkX2Y1NTAyYmE0MDZfbWppNm5kbTZtemVcIixcIm5hbWVcIjpcIm9uTWVzc2FnZVJlYWR5XCJ9fSxcIm9uU2hpcHBpbmdBZGRyZXNzQ2hhbmdlXCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcIm9uU2hpcHBpbmdDaGFuZ2VcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwib25TaGlwcGluZ09wdGlvbnNDaGFuZ2VcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwiaGFzU2hpcHBpbmdDYWxsYmFja1wiOmZhbHNlLFwicGFnZVR5cGVcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwicGFydG5lckF0dHJpYnV0aW9uSURcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwicGF5bWVudE1ldGhvZE5vbmNlXCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcInBheW1lbnRNZXRob2RUb2tlblwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJwYXltZW50UmVxdWVzdFwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJwbGF0Zm9ybVwiOlwiZGVza3RvcFwiLFwicmVmZXJyZXJEb21haW5cIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwicmVtZW1iZXJcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF9jZjE5NWZkYTNiX21qaTZuZG02bXplXCIsXCJuYW1lXCI6XCJyZW1lbWJlclwifX0sXCJyZW1lbWJlcmVkXCI6W10sXCJyZW5kZXJlZEJ1dHRvbnNcIjpbXCJwYXlwYWxcIl0sXCJzZXNzaW9uSURcIjpcInVpZF8wMGJjZTRjZTUwX21qaTZuZG02bXplXCIsXCJzZGtDb3JyZWxhdGlvbklEXCI6XCIwMWE3OTJhOTAyMTgwXCIsXCJzZXNzaW9uU3RhdGVcIjp7XCJnZXRcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF9lNGMyNjRmNTExX21qaTZuZG02bXplXCIsXCJuYW1lXCI6XCJnZXRcIn19LFwic2V0XCI6e1wiX190eXBlX19cIjpcImNyb3NzX2RvbWFpbl9mdW5jdGlvblwiLFwiX192YWxfX1wiOntcImlkXCI6XCJ1aWRfZjFlNzc4ZGU1ZV9tamk2bmRtNm16ZVwiLFwibmFtZVwiOlwic2V0XCJ9fX0sXCJnZXRTaG9wcGVySW5zaWdodHNVc2VkXCI6e1wiX190eXBlX19cIjpcImNyb3NzX2RvbWFpbl9mdW5jdGlvblwiLFwiX192YWxfX1wiOntcImlkXCI6XCJ1aWRfODljMGI2MDU2ZF9tamk2bmRtNm16ZVwiLFwibmFtZVwiOlwiQ3JcIn19LFwic3RhZ2VIb3N0XCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcInN0b3JhZ2VJRFwiOlwidWlkX2MxNWIwZDAwMDNfbWppNm5kbTZtemVcIixcInN0b3JhZ2VTdGF0ZVwiOntcImdldFwiOntcIl9fdHlwZV9fXCI6XCJjcm9zc19kb21haW5fZnVuY3Rpb25cIixcIl9fdmFsX19cIjp7XCJpZFwiOlwidWlkXzhmYjZiMGM0NDdfbWppNm5kbTZtemVcIixcIm5hbWVcIjpcImdldFwifX0sXCJzZXRcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF9mNDc2ODY3NDEzX21qaTZuZG02bXplXCIsXCJuYW1lXCI6XCJzZXRcIn19fSxcInN1cHBvcnRlZE5hdGl2ZUJyb3dzZXJcIjpmYWxzZSxcInN1cHBvcnRzUG9wdXBzXCI6dHJ1ZSxcInRlc3RcIjp7XCJhY3Rpb25cIjpcImNoZWNrb3V0XCJ9LFwidXNlckV4cGVyaWVuY2VGbG93XCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcInVzZXJJRFRva2VuXCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcInZhdWx0XCI6ZmFsc2UsXCJ3YWxsZXRcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9fSxcImV4cG9ydHNcIjp7XCJpbml0XCI6e1wiX190eXBlX19cIjpcImNyb3NzX2RvbWFpbl9mdW5jdGlvblwiLFwiX192YWxfX1wiOntcImlkXCI6XCJ1aWRfZmJjM2NkNTBkMF9tamk2bmRtNm16ZVwiLFwibmFtZVwiOlwiaW5pdFwifX0sXCJjbG9zZVwiOntcIl9fdHlwZV9fXCI6XCJjcm9zc19kb21haW5fZnVuY3Rpb25cIixcIl9fdmFsX19cIjp7XCJpZFwiOlwidWlkXzllNGFmM2YzYTVfbWppNm5kbTZtemVcIixcIm5hbWVcIjpcImNsb3NlOjptZW1vaXplZFwifX0sXCJjaGVja0Nsb3NlXCI6e1wiX190eXBlX19cIjpcImNyb3NzX2RvbWFpbl9mdW5jdGlvblwiLFwiX192YWxfX1wiOntcImlkXCI6XCJ1aWRfMzFiZjY4ZjE0YV9tamk2bmRtNm16ZVwiLFwibmFtZVwiOlwiY2hlY2tDbG9zZVwifX0sXCJyZXNpemVcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF84Zjc0NjgxYTdkX21qaTZuZG02bXplXCIsXCJuYW1lXCI6XCJfblwifX0sXCJvbkVycm9yXCI6e1wiX190eXBlX19cIjpcImNyb3NzX2RvbWFpbl9mdW5jdGlvblwiLFwiX192YWxfX1wiOntcImlkXCI6XCJ1aWRfYzBjODk3Mjk2OF9tamk2bmRtNm16ZVwiLFwibmFtZVwiOlwicW5cIn19LFwic2hvd1wiOntcIl9fdHlwZV9fXCI6XCJjcm9zc19kb21haW5fZnVuY3Rpb25cIixcIl9fdmFsX19cIjp7XCJpZFwiOlwidWlkX2UzZDIyOTEwYjRfbWppNm5kbTZtemVcIixcIm5hbWVcIjpcImduXCJ9fSxcImhpZGVcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF85OTQ3MmQ2ZTMyX21qaTZuZG02bXplXCIsXCJuYW1lXCI6XCJ2blwifX0sXCJleHBvcnRcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF9iNWY2MjQzZGY2X21qaTZuZG02bXplXCIsXCJuYW1lXCI6XCJXblwifX19fSJ9fQ__"
title="PayPal" allowpaymentrequest="allowpaymentrequest" scrolling="no" id="jsx-iframe-41171179e5" class="component-frame visible" style="background-color: transparent; border: none;"></iframe>
<div id="smart-menu" class="smart-menu"></div>
<div id="installments-modal" class="installments-modal"></div><iframe name="__detect_close_uid_bcddb24fe7_mji6ndm6mze__" style="display: none;"></iframe>
</div>
</spz-paypal>
<div class="product-info__out_stock mt-2 text-center text-sm leading-1.3 opacity-70 lg:mt-3 hidden"> Product was out of stock. </div>
<div class="product-info__unavailable mt-2 text-center text-sm leading-1.3 opacity-70 lg:mt-3 hidden"> Product is unavailable. </div>
</div>
<div class="product-info-shipping-container mt-4 lg:mt-5">
<div class="flex items-center">
<svg class="flex-shrink-0" xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none">
<path fill="currentColor" d="M12 14.7a.6.6 0 0 1-.6-.6V4.9a1 1 0 0 0-1-1H1c-.5 0-.6-.268-.6-.6 0-.332.1-.6.6-.6h9.4c1.212 0 2.2.988 2.2 2.2v9.2a.6.6 0 0 1-.6.6Zm-8.832.6H1.4c-.6 0-.6-.268-.6-.6 0-.332 0-.6.6-.6h1.768a.6.6 0 1 1 0 1.2Z">
</path>
<path fill="currentColor" d="M13.244 15.3H7.6a.6.6 0 1 1 0-1.2h5.644a.6.6 0 1 1 0 1.2Zm5.356 0h-.656a.6.6 0 1 1 0-1.2h.456v-3.244L16.648 7.7H12.2a.6.6 0 1 1 0-1.2h4.564c.364 0 .696.196.876.516l1.96 3.532v3.756a1 1 0 0 1-1 .996Z"></path>
<path fill="currentColor"
d="M18.6 10.9h-2.8a1 1 0 0 1-1-1V7.5a.6.6 0 1 1 1.2 0v2.2h2.6a.6.6 0 1 1 0 1.2ZM5.2 17.3a2.402 2.402 0 0 1-2.4-2.4c0-1.324 1.076-2.4 2.4-2.4 1.324 0 2.4 1.076 2.4 2.4 0 1.324-1.076 2.4-2.4 2.4Zm0-3.6c-.66 0-1.2.54-1.2 1.2 0 .66.54 1.2 1.2 1.2.66 0 1.2-.54 1.2-1.2 0-.66-.54-1.2-1.2-1.2Zm10.4 3.6a2.402 2.402 0 0 1-2.4-2.4c0-1.324 1.076-2.4 2.4-2.4 1.324 0 2.4 1.076 2.4 2.4 0 1.324-1.076 2.4-2.4 2.4Zm0-3.6c-.66 0-1.2.54-1.2 1.2 0 .66.54 1.2 1.2 1.2.66 0 1.2-.54 1.2-1.2 0-.66-.54-1.2-1.2-1.2Z">
</path>
<path fill="rgba(195, 14, 35, 1)" d="M7 6.9H2.2a.6.6 0 1 1 0-1.2H7a.6.6 0 1 1 0 1.2Zm1.2 2.8H3.8a.6.6 0 1 1 0-1.2h4.4a.6.6 0 1 1 0 1.2Z"></path>
</svg>
<span class="ml-2 leading-1.2">Shipping</span>
</div>
<spz-render class="mt-2 i-spzhtml-layout-container i-spzhtml-element i-spzhtml-built i-spzhtml-layout" id="product-info-delivery-time-render" layout="container" i-spzhtml-layout="container" data-empty="" finish="">
<template> ${function() { const minDays = parseInt('18'); const maxDays = parseInt('28'); const customText = "Estimated Delivery\uff1a{min_date} - {max_date}"; const minDate = new Date(Date.now() + (minDays * 86400000)); const maxDate = new
Date(Date.now() + (maxDays * 86400000)); const formatDate = (minDate.getFullYear() == maxDate.getFullYear() && minDate.getFullYear() == new Date().getFullYear()) ? new Intl.DateTimeFormat('en', { month: 'short', day: '2-digit' }) :
new Intl.DateTimeFormat('en', { month: 'short', day: '2-digit', year: 'numeric' }); const tipText = customText.replace(/\{min_date\}/g, '<b>' + formatDate.format(minDate) + '</b>') .replace(/\{max_date\}/g,
'<b>' + formatDate.format(maxDate) + '</b>'); return ` <div class="break-all body-minus-2 leading-1.2">${tipText}</div> `; }()} </template>
<div class="break-all body-minus-2 leading-1.2">Estimated Delivery:<b>Jul 30</b> - <b>Aug 09</b></div>
</spz-render>
<style>
.product-info-free__shipping-progress-bar {
background: linear-gradient(to right, rgba(184, 170, 135, 1), rgba(184, 170, 135, 1));
transition: width 1.2s ease;
}
</style>
<spz-event target-id="product-info-free-shipping-render" target-api="render" event-name="dj.addToCart" layout="logic" class="i-spzhtml-layout-logic i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="logic"></spz-event>
<spz-render class="mt-2 i-spzhtml-layout-container i-spzhtml-element i-spzhtml-built i-spzhtml-layout" id="product-info-free-shipping-render" src="/api/cart" items="cart" layout="container" i-spzhtml-layout="container" finish="">
<template>
<div> ${function() { const postageFreeAmount = 81.99125; const custom_text = "Buy {amount} more to enjoy FREE Shipping"; const totalPrice = +data.total_price; const diffPrice = postageFreeAmount - totalPrice; const percentDiff = (diffPrice
> 0 ? (totalPrice / postageFreeAmount * 100) : 100) + '%'; let tipText = "Your order is free delivery"; if (diffPrice > 0) { tipText = custom_text.replace('{amount}', `<spz-currency class="inline-block" value="${diffPrice}"
layout="container"></spz-currency>`); } return ` <div class="product-info-free__shipping relative rounded-sm overflow-hidden">
<div class="product-info-free__shipping-progress-bar absolute top-0 left-0 h-full w-0" style="width: ${percentDiff};"></div>
<div class="px-2 py-1 relative z-10 body-minus-2 leading-1.2 font-medium">${tipText}</div>
</div> `; }()} </div>
</template>
<div>
<div class="product-info-free__shipping relative rounded-sm overflow-hidden">
<div class="product-info-free__shipping-progress-bar absolute top-0 left-0 h-full w-0" style="width: 0%;"></div>
<div class="px-2 py-1 relative z-10 body-minus-2 leading-1.2 font-medium">Buy <spz-currency class="inline-block i-spzhtml-element i-spzhtml-layout-container i-spzhtml-built i-spzhtml-layout" value="81.99125" layout="container"
i-spzhtml-layout="container">
<div class="money notranslate">€81.99</div>
</spz-currency> more to enjoy FREE Shipping</div>
</div>
</div>
</spz-render>
</div>
</div>
<div class="plugin__buy_on_others empty-hidden"></div>
<input name="product_id" type="hidden" value="616b65d7-99fb-48a6-b972-3b4fa34b4cc6"><input name="variant_id" type="hidden" value="b83307f4-9bf1-4ba1-a6d9-0783766e952b"><input name="note" type="hidden">
</form>
<form>
<div class="quick-shop-content rounded-global-small">
<div class="quick-shop-inner-content">
<spz-variants name="quick-shop-variant" id="quick-shop-variants" class="pointer-events-none" layout="container" template="quick-shop-variant-template" spz-if="${product_options && product_options.length > 0}"
@mouseout="${mouse_out_event}" interact="hover" interference="" ${mouse_over_event}=""></spz-variants>
<button class="relative mt-5 lg:mt-6 button-primary flex items-center justify-center body-plus-2 type-text-font-family rounded-btn quick-shop_atc_btn" type="button" role="addToCart" data-track="click" data-track-content="add_to_cart"
data-track-source="add_to_cart">
<span role="content">${statusLan}</span>
<spz-render id="quick-shop-btn-price" layout="container" template="quick-shop-button-price-template" manual=""></spz-render>
<div class="loading items-center justify-center absolute inset-0" role="loading" show="">
<div class="loading-bounce"></div>
</div>
</button>
</div>
</div>
</form>
<form class="">
<div class="zb-flex">
<a href="${product.url}?${toQuery({ aid: 'smart_recommend.2.' + data.id, ifb: product.ifb || '', cfb: product.cfb || '', scm: product.scm || data.scm || '', ssp: data.ssp || '' })}" impr="1" imprevt="1" class="zb-w-[132px] zb-mr-4 rtl:zb-ml-4 rtl:zb-mr-0" data-prdct="${product.id}" data-ifb="${product.ifb || ''}" data-cfb="${product.cfb || ''}" data-scm="${product.scm || data.scm || ''}" data-spm="${productIndex}"> <ljs-render layout="container" id="smart_cart_pop_image_${product.id}" template="smart_cart_pop_image_template" manual=""></ljs-render> </a>
<div class="zb-flex zb-flex-col zb-flex-grow zb-justify-between">
<div>
<div class="zb-line-clamp-2 zb-text-sm zb-mb-2">${product.title}</div> <ljs-render layout="container" id="smart_cart_pop_price_${product.id}" template="smart_cart_pop_price_template" manual=""></ljs-render>
</div>
<div>
<div class="zb-relative zb-w-full zb-cursor-pointer">
<div class="zb-border zb-border-solid zb-border-[#eee] zb-px-3 zb-py-[10px] zb-flex zb-items-center zb-justify-between zb-font-semibold zb-text-sm zb-rounded-sm"
@tap="smart_pop_variant-select-${product.id}.toggleClass(class=zb-rotate-180);smart_cart_pop_variant_${product.id}_mobile.toggleClass(class=zb-hidden);smart_cart_pop_variant_${product.id}_pc.toggleClass(class=smart_cart_pop_variant_pc_show,force=true);smart_cart_pop_variant_modal_${product.id}.open"
spz-if="${!!(product.options && product.options.length && product.options.length > 0) && data.config.variant_select_visible}"> <ljs-render manual="" layout="container" id="smart_cart_pop_variant_text_${product.id}"
template="smart_cart_pop_variant_text_template"></ljs-render> <svg id="smart_pop_variant-select-${product.id}" width="12" height="8" class="zb-ml-2" viewBox="0 0 12 8" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M6.00002 7.06738C6.19244 7.06775 6.38498 6.99453 6.5318 6.84772C6.54504 6.83447 6.55769 6.82086 6.56973 6.8069L11.1251 2.25152C11.418 1.95863 11.418 1.48375 11.1251 1.19086C10.8322 0.897968 10.3573 0.897968 10.0645 1.19086L6.00003 5.25529L1.9356 1.19086C1.64271 0.897968 1.16784 0.897968 0.874943 1.19086C0.58205 1.48375 0.58205 1.95863 0.874943 2.25152L5.43033 6.8069C5.44237 6.82086 5.45502 6.83447 5.46826 6.84772C5.61507 6.99453 5.8076 7.06775 6.00002 7.06738Z"
fill="#0A1533"></path>
</svg> </div> <ljs-lightbox layout="nodisplay" disable-unmount="" class="smart_cart_pop_lightbox_pc" id="smart_cart_pop_variant_modal_${product.id}" @close="smart_pop_variant-select-${product.id}.toggleClass(class=zb-rotate-180);">
<div id="smart_cart_pop_variant_${product.id}_pc" class="zb-hidden"><ljs-variants id="smart_cart_pop_variants_${product.id}"
class="md:!zb-absolute md:zb-top-[50px] md:zb-w-full md:zb-left-0 md:zb-z-30 md:zb-bg-white zb-max-h-[280px] zb-overflow-y-auto md:zb-shadow-pop" layout="container" template="smart_cart_pop_variant_template"
onclick="event.stopPropagation()" disabled-dj-event="" interference=""> </ljs-variants></div>
</ljs-lightbox>
</div>
<div class="zb-mt-3"> <button product-id="${product.id}" id="smart_cart_pop_atc_btn_${product.id}"
class="zb-flex zb-items-center zb-justify-center zb-w-full zb-text-white zb-py-[10px] zb-h-9 zb-text-xs zb-font-normal zb-border-none zb-rounded-[4px] smart_cart_pop_atc_btn_bg" type="button" role="addToCart"
@tap="smart_cart_pop_loading_${product.id}.toggleClass(class=zb-hidden);smart_cart_pop_atc_${product.id}.toggleClass(class=zb-hidden);smart_cart_pop_atc_btn_${product.id}.toggleClass(class=zb-pointer-events-none);custom-func.addATCHook(activity_id='${data.id}',ifb='${product.ifb}',cfb='${product.cfb}',scm='${product.scm || data.scm}',ssp='${data.ssp}',spm='${data.spmBase}.${productIndex}')">
<ljs-render layout="container" id="smart_cart_pop_atc_${product.id}" template="smart_cart_pop_atc_template" mamual="" class="notranslate"> </ljs-render>
<div id="smart_cart_pop_added_${product.id}" class="zb-hidden"><span class="zb-flex zb-justify-center zb-gap-1"><svg width="14" height="15" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M8 16.5006C3.58171 16.5006 0 12.9183 0 8.5C0 4.08171 3.58171 0.5 8 0.5C12.4183 0.5 16 4.08171 16 8.5C16 12.9183 12.4183 16.5006 8 16.5006ZM8 2.04344C4.21314 2.04344 1.54287 4.71371 1.54287 8.50057C1.54287 12.2874 4.21314 14.9577 8 14.9577C11.7869 14.9577 14.4571 12.2874 14.4571 8.50057C14.4571 4.71371 11.7869 2.04344 8 2.04344ZM7.26057 11.1909L7.12229 11.3286L7.09543 11.3017C7.02286 11.336 6.94286 11.3577 6.85714 11.3577C6.73543 11.3577 6.62857 11.3109 6.536 11.2463L6.52229 11.2594L6.45371 11.1909C6.45314 11.1903 6.45314 11.1903 6.45257 11.1897L4.09771 8.83486L4.90629 8.02686L6.85714 9.97771L11.1629 5.67143L11.9714 6.48L7.26171 11.1897C7.26114 11.1903 7.26114 11.1903 7.26057 11.1909Z"
fill="white"></path>
</svg>Added</span></div>
<div id="smart_cart_pop_loading_${product.id}" class="zb-hidden">
<div class="smart_cart_pop_loading"></div>
</div>
</button> </div>
</div>
</div>
</div>
<div id="smart_cart_pop_variant_${product.id}_mobile" class="zb-hidden md:zb-hidden"><ljs-variants id="smart_cart_pop_variants_${product.id}"
class="md:!zb-absolute md:zb-top-[50px] md:zb-w-full md:zb-left-0 md:zb-z-30 md:zb-bg-white zb-max-h-[280px] zb-overflow-y-auto md:zb-shadow-pop" layout="container" template="smart_cart_pop_variant_template" onclick="event.stopPropagation()"
disabled-dj-event="" interference=""> </ljs-variants></div>
</form>
POST //translate.googleapis.com/translate_voting?client=te
<form id="goog-gt-votingForm" action="//translate.googleapis.com/translate_voting?client=te" method="post" target="votingFrame" class="VIpgJd-yAWNEb-hvhgNd-aXYTce"><input type="text" name="sl" id="goog-gt-votingInputSrcLang"><input type="text"
name="tl" id="goog-gt-votingInputTrgLang"><input type="text" name="query" id="goog-gt-votingInputSrcText"><input type="text" name="gtrans" id="goog-gt-votingInputTrgText"><input type="text" name="vote" id="goog-gt-votingInputVote"></form>
Text Content
${(function(){ const get_random_six_digits = () => { return Math.random().toString().slice(-6) }; const wholesale_enabled = false; const setting_product_image_display = "natural"; const product_image = data.image; const secondary_image = data.secondImage; const image_width = product_image.width; let image_height = product_image.height; if(setting_product_image_display == '100%'){ image_height = image_width }else if(setting_product_image_display == '133.33%'){ image_height = image_width * 1.3333; }; const product_image_hover_on = true && !!secondary_image.src; const has_save_label = true && ((+data.compare_at_price) > (+data.price)); const is_single_variant = data.variants.length == 1; const min_price_variant_href = (data.min_price_variant && data.min_price_variant.available) ? data.min_price_variant.withinUrl : data.withinUrl; const retail_price_max = data.retail_price_max || data.compare_at_price_max; const THUMBNAILS_MAX_SIZE = 3; const thumbnails = data.thumbVariants.slice(0, THUMBNAILS_MAX_SIZE); const image_wrap_id = 'image_wrap_' + get_random_six_digits(); const image_carousel_id = 'image_carousel_' + get_random_six_digits(); const thumbnails_selector_id = 'thumbnails_selector_' + get_random_six_digits(); const form_id = 'form_' + get_random_six_digits(); const mixed_wholesale = data.mixed_wholesale; return ` ${ data.available ? `${ (+data.compare_at_price > +data.price) ? `Save ${ data.off_ratio }% ` : '' }` : "Sold out" } Mixed Lot ${DATA.TITLE} ${ data.price_min != data.price_max ? `from ` : ` ` } ` })()} Free Gift on Orders Over US$109 $10 off on orders over $59, $20 off on orders over $99 $30 off on orders over $139, $50 off on orders over $199 Free Gift on Orders Over US$109 $10 off on orders over $59, $20 off on orders over $99 $10 off on orders over $59, $20 off on orders over $99 $30 off on orders over $139, $50 off on orders over $199 Free Gift on Orders Over US$99 Free shipping for orders over €81.99 const marketSlot = document.querySelector(".plugin_c_market"); if(marketSlot) { marketSlot.remove(); } const SITE = (window.C_SETTINGS || window[atob('U0hPUExBWlpB')])?.routes?.root || ''; const MARKET_THEME_SETTINGS = `${SITE}/api/markets/theme_setting`; const MARKET_COUNTRIES = `${SITE}/api/markets/countries`; const IP_MATCHING_MARKET = `${SITE}/api/front/station`; const MARKET_LANGUAGES = `${SITE}/api/markets/:id/active_languages`; const URL_REDIRECT = '_market_redirected'; const COOKIE_TIPS_NAME = 'market_no_tips'; const COOKIE_TIPS_EXPIRES = 1000 * 60 * 60 * 24 * 14; const MARKET_COUNTRY_COOKIE = '_shoplazza_market_country'; const MARKET_MODAL_LOADED = '__market_modal_loaded__'; const PROPERTY_SELECTED = 'selected'; const MARKET_PC_HEADER_TRIGGER = 'market-pc-header-trigger'; const MARKET_PC_HEADER_COUNTRY_SELECT_TITLE = 'market-pc-header-country-select-title'; const MARKET_PC_HEADER_LANGUAGE_SELECT_TITLE = 'market-pc-header-language-select-title'; const MARKET_PC_HEADER_LANGUAGE_SELECT_SUB_TITLE = 'market-pc-header-language-select-sub-title'; const MARKET_PC_HEADER_COUNTRY_SELECT_SUB_TITLE = 'market-pc-header-country-select-sub-title'; const MARKET_FLAG = 'market-flag'; const MARKET_SELECT_VALUE = 'market-select-value'; const MARKET_CURRENCY = 'market-currency'; const MARKET_CURRENCY_SYMBOL = 'market-currency-symbol'; const MARKET_SELECT_ITEM = 'market-select-item'; const MARKET_SELECT_ITEM_ID = 'market-select-item-id'; const MARKET_SELECT_LIST = 'market-select-list'; const MARKET_LANGUAGE_SELECT = 'market-language-select'; const MARKET_COUNTRY_SELECT = 'market-country-select'; const MARKET_MODAL = 'market-modal'; const MARKET_GATEWAY_REDIRECT_MODAL = 'market-gateway-redirect-modal'; const MARKET_RESELECT_MODAL = 'market-reselect-modal'; const MARKET_MODAL_FLAG = 'market-modal-flag'; const MARKET_MODAL_COUNTRY_CODE = 'market-modal-country-code'; const MARKET_MODAL_CURRENCY_SYMBOL = 'market-modal-currency-symbol'; const MARKET_MODAL_CLOSE = 'market-modal-close'; const MARKET_MODAL_CONFIRM = 'market-modal-confirm'; const MARKET_MODAL_RESELECT = 'market-modal-reselect'; const MARKET_MODAL_RESELECT_COUNTRY_SELECT = 'market-modal-reselect-country-select'; const DATA_SECTION_TYPE = 'data-section-type'; const SECTION_TYPE_HEADER = 'header'; const SECTION_TYPE_FOOTER = 'footer'; class SpzCustomMarket extends SPZ.BaseElement { constructor(element) { super(element); this.global = null; this.useCountrySelect_ = false; this.useLanguageSelect_ = false; this.useModal_ = false; this.isSingleSelectMode_ = false; this.blockSectionPosition_ = ''; this.isEditMode = false; this.ipMatchingMarket = null; this.marketCountryList = []; this.marketLanguages = []; this.toast = null; } static deferredMount() { return false; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { console.debug('Geolocation'); this.xhr_ = SPZServices.xhrFor(this.win); const platform = SPZServices.platformFor(this.win); this.isIOS_ = platform.isIos(); this.action_ = SPZServices.actionServiceForDoc(this.element); this.global = this.win.C_SETTINGS || this.win[atob('U0hPUExBWlpB')]; this.isEditMode = new URLSearchParams(this.win.location.search).get('preview_theme_id') && new URLSearchParams(this.win.location.search).get('oseid'); this.init_(); } showToast_(content) { if (!this.toast) { this.toast = self.document.createElement('ljs-toast'); this.toast.setAttribute('layout', 'nodisplay'); this.toast.setAttribute('hidden', ''); this.toast.setAttribute('duration', '2000'); this.element.appendChild(this.toast); } SPZ.whenApiDefined(this.toast).then((apis) => { apis.showToast(content); }); } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, `${TAG}.${name}`, data); this.action_.trigger(this.element, name, event); } findBlockSectionPosition() { let current = this.element; while (current) { const dataSectionType = current.getAttribute(DATA_SECTION_TYPE); if ( dataSectionType === SECTION_TYPE_HEADER || dataSectionType === SECTION_TYPE_FOOTER ) { return dataSectionType; } current = current.parentElement; } return ''; } async initSettings_() { await this.getMarketThemeSettings_(); if (this.useCountrySelect_) { this.element.setAttribute('use-country-select', true); } if (this.useLanguageSelect_) { this.element.setAttribute('use-language-select', true); } if (this.useModal_) { this.element.setAttribute('use-modal', true); } if ( (this.useCountrySelect_ && !this.useLanguageSelect_) || (!this.useCountrySelect_ && this.useLanguageSelect_) ) { this.isSingleSelectMode_ = true; } this.blockSectionPosition_ = this.findBlockSectionPosition(); this.isPCLayout_ = this.win.matchMedia('(min-width: 960px)').matches; } renderMarketSelectTemplateNode_(clonedTemplate, data) { this.renderTemplateImg_(clonedTemplate, MARKET_FLAG, { src: data?.flag, width: '24', height: '24', }); this.renderTemplateElement_( clonedTemplate, MARKET_SELECT_VALUE, data.value ); this.renderTemplateElement_( clonedTemplate, MARKET_CURRENCY, data?.currency ); this.renderTemplateElement_( clonedTemplate, MARKET_CURRENCY_SYMBOL, data?.currencySymbol ); } bindDropdownOpenClickEvent_(triggerElement, dropdown) { if (!triggerElement) return; const triggerOpen = () => { SPZ.whenApiDefined(dropdown).then((apis) => { if (!dropdown.hasAttribute('open')) { apis.open(triggerElement); } }); }; if (this.isIOS_) { triggerElement.addEventListener('touchstart', triggerOpen); } else { triggerElement.addEventListener('click', triggerOpen); } } createDropdown_() { const dropdown = self.document.createElement('ljs-dropdown'); dropdown.setAttribute('layout', 'nodisplay'); if (this.blockSectionPosition_ === 'header') { dropdown.setAttribute('overlay-style', 'top: 4px;'); dropdown.setAttribute('placement', 'bottomRight'); } else if (this.blockSectionPosition_ === 'footer') { dropdown.setAttribute('overlay-style', 'top: -4px;'); dropdown.setAttribute('placement', 'top'); } return dropdown; } createDropdownIcon_() { const svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svgElement.setAttribute("class", "market-rotate-180"); svgElement.setAttribute("width", "16"); svgElement.setAttribute("height", "16"); const path1 = document.createElementNS("http://www.w3.org/2000/svg", "path"); path1.setAttribute("d", "M7.47 5.172a.75.75 0 0 1 1.06 0l4.596 4.596a.75.75 0 1 1-1.06 1.06L7.468 6.232a.75.75 0 0 1 0-1.06Z"); path1.setAttribute("fill", "currentColor"); const path2 = document.createElementNS("http://www.w3.org/2000/svg", "path"); path2.setAttribute("d", "M8.533 5.172a.75.75 0 0 1 0 1.06l-4.596 4.596a.75.75 0 1 1-1.061-1.06l4.596-4.596a.75.75 0 0 1 1.06 0Z"); path2.setAttribute("fill", "currentColor"); svgElement.appendChild(path1); svgElement.appendChild(path2); return svgElement; } renderDropdownListWithClickEvent_({ triggerElement, dataList, subTitleRole, listElementWithTemplate, defaultValue, itemHandler, shouldUpdateSelectedItem = false, }) { const dropdown = this.createDropdown_(); const itemTemplate = SPZCore.Dom.scopedQuerySelector( listElementWithTemplate, 'template' ); const clonedItemTemplate = itemTemplate.cloneNode(true); const fragment = self.document.createDocumentFragment(); dataList.forEach((data) => { const tempParentNode = self.document.createElement('div'); const clonedTemplate = self.document.importNode( clonedItemTemplate.content, true ); tempParentNode.appendChild(clonedTemplate); tempParentNode.firstElementChild.classList.add( 'market-select-item' ); this.renderMarketSelectTemplateNode_(tempParentNode, data); const selectItemElement = SPZCore.Dom.scopedQuerySelector( tempParentNode, `[role="${MARKET_SELECT_ITEM}"]` ); if (!selectItemElement) { return; } if (defaultValue === data.value) { if (shouldUpdateSelectedItem) { const clonedSelectItemElement = selectItemElement.cloneNode(true); triggerElement.replaceChild( clonedSelectItemElement, triggerElement.firstElementChild ); } selectItemElement.setAttribute(PROPERTY_SELECTED, ''); } selectItemElement.setAttribute(MARKET_SELECT_ITEM_ID, data.value); fragment.appendChild(tempParentNode.firstElementChild); }); let value = defaultValue; listElementWithTemplate.addEventListener( 'click', (e) => { if (this.isEditMode) { this.showToast_('编辑器下不支持切换国家'); SPZ.whenApiDefined(dropdown).then((apis) => { apis.close(); }); return; } let targetElement = e.target; while (targetElement) { if ( !targetElement || targetElement.getAttribute(MARKET_SELECT_ITEM_ID) ) { break; } targetElement = targetElement.parentNode; } if ( !targetElement || !targetElement.hasAttribute(MARKET_SELECT_ITEM_ID) ) { return; } const selectValue = targetElement.getAttribute(MARKET_SELECT_ITEM_ID); if (value === selectValue) { SPZ.whenApiDefined(dropdown).then((apis) => { apis.close(); }); return; } const selectedData = dataList.find((c) => c.value === selectValue); if (shouldUpdateSelectedItem) { const tempParentNode = self.document.createElement('div'); const clonedTemplate = self.document.importNode( clonedItemTemplate.content, true ); tempParentNode.appendChild(clonedTemplate); this.renderMarketSelectTemplateNode_(tempParentNode, selectedData); tempParentNode.firstElementChild.classList.add( 'market-select-item' ); triggerElement.replaceChild( tempParentNode.firstElementChild, triggerElement.firstElementChild ); } value = selectValue; itemHandler?.(selectedData); SPZ.whenApiDefined(dropdown).then((apis) => { apis.close(); }); }, false ); listElementWithTemplate.removeChild(itemTemplate); listElementWithTemplate.appendChild(fragment); listElementWithTemplate.classList.add('market-select-list'); dropdown.appendChild(listElementWithTemplate); if (subTitleRole) { this.renderSelectTitle_(dropdown, subTitleRole); } return dropdown; } createSelect_({ parent, defaultValue, dataList, listElementWithTemplate, itemHandler, titleRole, }) { const triggerElement = self.document.createElement('div'); triggerElement.classList.add('market-select'); const displayElement = self.document.createElement('div'); triggerElement.appendChild(displayElement); triggerElement.appendChild(this.createDropdownIcon_()); const dropdown = this.renderDropdownListWithClickEvent_({ triggerElement, dataList, listElementWithTemplate, defaultValue, itemHandler, shouldUpdateSelectedItem: true, }); this.bindDropdownOpenClickEvent_(triggerElement, dropdown); const dropdownContainer = self.document.createElement('div'); dropdownContainer.appendChild(triggerElement); dropdownContainer.appendChild(dropdown); dropdownContainer.classList.add('market-select-container'); this.renderSelectTitle_(dropdownContainer, titleRole); parent.appendChild(dropdownContainer); } getListElementWithTemplate_(role) { const template = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${role}"]` ); if (template) { const clonedTemplate = template.cloneNode(true); const tempParent = self.document.createElement("div"); tempParent.appendChild(clonedTemplate.content); const listElementWithTemplate = SPZCore.Dom.scopedQuerySelector( tempParent, `[role="${MARKET_SELECT_LIST}"]` ); return listElementWithTemplate; } return null; } renderSelectTitle_(parent, role) { if (!parent || !role) { return; } const template = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${role}"]` ); const content = self.document.importNode(template.content, true); parent.insertBefore(content, parent.firstElementChild); parent.firstElementChild.classList.add( role.includes('sub') ? 'market-pc-header-select-sub-title' : 'market-pc-header-select-title' ); } initSelect_(rootNode, options) { const parent = rootNode || this.element; if (this.useCountrySelect_) { this.createSelect_({ parent, titleRole: options?.shouldRenderSelectTitle ? MARKET_PC_HEADER_COUNTRY_SELECT_TITLE : undefined, defaultValue: this.getDefaultCountryValue_(), dataList: this.marketCountryList.map(this.mapCountryRenderData_), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_COUNTRY_SELECT ), itemHandler: this.handleCountrySelectChange_.bind(this), }); } if (this.useLanguageSelect_) { this.createSelect_({ parent, titleRole: options?.shouldRenderSelectTitle ? MARKET_PC_HEADER_LANGUAGE_SELECT_TITLE : undefined, defaultValue: this.getDefaultLanguageValue_(), dataList: this.marketLanguages.map(this.mapLanguageRenderData_), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_LANGUAGE_SELECT ), itemHandler: this.handleLanguageSelectChange_.bind(this), }); } } initPcHeaderTriggerElement() { const headerTriggerElementTemplate = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${MARKET_PC_HEADER_TRIGGER}"]` ); const headerTriggerElement = self.document.importNode( headerTriggerElementTemplate.content, true ); const parentDivElement = self.document.createElement('div'); parentDivElement.setAttribute('role', MARKET_PC_HEADER_TRIGGER); parentDivElement.appendChild(headerTriggerElement); this.element.removeChild(headerTriggerElementTemplate); return parentDivElement; } initPanelWithSelect_() { const triggerElement = this.initPcHeaderTriggerElement(); const dropdown = this.createDropdown_(); const panelElement = self.document.createElement('div'); panelElement.classList.add('market-panel'); this.initSelect_(panelElement, {shouldRenderSelectTitle: true}); dropdown.appendChild(panelElement); this.bindDropdownOpenClickEvent_(triggerElement, dropdown); this.element.appendChild(triggerElement); this.element.insertBefore(dropdown, triggerElement); } initSingleSelectDropdown_() { const triggerElement = this.initPcHeaderTriggerElement(); let dropdown; if (this.useCountrySelect_) { dropdown = this.renderDropdownListWithClickEvent_({ triggerElement, subTitleRole: MARKET_PC_HEADER_COUNTRY_SELECT_SUB_TITLE, dataList: this.marketCountryList.map(this.mapCountryRenderData_), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_COUNTRY_SELECT ), defaultValue: this.getDefaultCountryValue_(), itemHandler: this.handleCountrySelectChange_.bind(this), }); } else if (this.useLanguageSelect_) { dropdown = this.renderDropdownListWithClickEvent_({ triggerElement, subTitleRole: MARKET_PC_HEADER_LANGUAGE_SELECT_SUB_TITLE, dataList: this.marketLanguages.map(this.mapLanguageRenderData_), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_LANGUAGE_SELECT ), defaultValue: this.getDefaultLanguageValue_(), itemHandler: this.handleLanguageSelectChange_.bind(this), }); } if (dropdown) { this.bindDropdownOpenClickEvent_(triggerElement, dropdown); this.element.appendChild(triggerElement); this.element.appendChild(dropdown); } } initEntry_() { if (this.blockSectionPosition_ === SECTION_TYPE_HEADER) { if (this.isSingleSelectMode_) { this.initSingleSelectDropdown_(); } else if (this.useCountrySelect_ && this.useLanguageSelect_) { this.initPanelWithSelect_(); } } this.initSelect_(this.element); } async initData_() { const promises = []; if (this.useCountrySelect_ || this.useModal_) { promises.push(this.getCountryList_(), this.getIpMatchingMarket_()); } if (this.useLanguageSelect_) { promises.push(this.getMarketLanguages_(this.global.market.market_id)); } return Promise.all(promises).then((results) => { const ipMatchingMarket = results.find((result) => result.hasOwnProperty('matching_station') ); const marketCountryList = results.find((result) => result.hasOwnProperty('data') ); if (ipMatchingMarket && marketCountryList) { this.ipMatchingMarket = ipMatchingMarket?.matching_station?.find?.( (item) => item.type === 'multiple_market' ) || { img: marketCountryList.length ? marketCountryList?.[0]?.detail && marketCountryList[0].detail?.flag : '', }; } }); } initModal_() { if ( this.isEditMode || !this.ipMatchingMarket?.market_id || !this.useModal_ || this.hasCookie_(COOKIE_TIPS_NAME) || this.win[MARKET_MODAL_LOADED] ) { return; } this.win[MARKET_MODAL_LOADED] = true; const redirectParam = new URLSearchParams(this.win.location.search).get( URL_REDIRECT ); if (redirectParam) { this.initModalEntry_(MARKET_GATEWAY_REDIRECT_MODAL); } else if ( this.ipMatchingMarket.market_id !== this.global?.market?.market_id ) { this.initModalEntry_(MARKET_MODAL); } } async init_() { await this.initSettings_(); await this.initData_(); this.initEntry_(); this.initModal_(); } getDefaultCountryValue_() { return this.getCookie_(MARKET_COUNTRY_COOKIE) || this.marketCountryList[0]?.country_code; } mapCountryRenderData_(country) { return { flag: country?.detail?.flag || '', value: country?.country_code, currency: country?.currency, currencySymbol: country?.symbol?.val || '', url: country?.url, }; } handleCountrySelectChange_(selectedData) { this.setCookie_(MARKET_COUNTRY_COOKIE, selectedData.value); this.handleChangeURL_(selectedData.url); } getDefaultLanguageValue_() { return this.marketLanguages?.find?.( (lang) => lang.code === this.global?.market?.market_lang )?.name; } mapLanguageRenderData_(language) { return { value: language.name, url: language.url, }; } handleLanguageSelectChange_(selectedData) { this.handleChangeURL_(selectedData.url); } renderTemplateElement_(parent, role, value) { const elements = SPZCore.Dom.scopedQuerySelectorAll( parent, `[role="${role}"]` ); elements.forEach((element) => { if (element && value) { element.innerHTML = value; } }); } renderTemplateImg_(parent, role, options) { const flagElement = SPZCore.Dom.scopedQuerySelector( parent, `[role="${role}"]` ); if (flagElement && options?.src && options?.height && options?.width) { const spzImg = self.document.createElement('ljs-img'); spzImg.setAttribute('src', options.src); spzImg.setAttribute('layout', 'responsive'); spzImg.setAttribute('width', options.width); spzImg.setAttribute('height', options.height); spzImg.setAttribute( 'style', `width: ${options.width}px; height: ${options.height}px;` ); flagElement.appendChild(spzImg); } } handleChangeURL_(url) { if (!!url) { let {origin, pathname, search} = this.win.location; pathname = pathname.replace(SITE, url != '/' ? url : ''); this.win.location.href = `${origin}${pathname}${search}`; } else { this.win.location.reload(true); } } initModalEntry_(role) { const marketModalTemplate = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${role}"]` ); if (marketModalTemplate) { const tempParentNode = self.document.createElement('div'); const clonedTemplate = self.document.importNode( marketModalTemplate.content, true ); tempParentNode.appendChild(clonedTemplate); this.renderTemplateImg_(tempParentNode, MARKET_MODAL_FLAG, { src: this.ipMatchingMarket?.img, width: '80', height: '80', }); this.renderTemplateElement_( tempParentNode, MARKET_MODAL_COUNTRY_CODE, this.ipMatchingMarket?.name ); this.renderTemplateElement_( tempParentNode, MARKET_MODAL_CURRENCY_SYMBOL, this.ipMatchingMarket?.currency_with_symbol ); const lightbox = self.document.createElement('ljs-lightbox'); lightbox.setAttribute('layout', 'nodisplay'); lightbox.appendChild(tempParentNode.firstElementChild); self.document.body.appendChild(lightbox); SPZ.whenApiDefined(lightbox).then((apis) => { SPZCore.Dom.scopedQuerySelectorAll( lightbox, `[role="${MARKET_MODAL_CLOSE}"]` ).forEach((ele) => { ele.addEventListener('click', () => { this.setCookie_(COOKIE_TIPS_NAME, 1, COOKIE_TIPS_EXPIRES); apis.close(); }); }); const marketModalConfirmElement = SPZCore.Dom.scopedQuerySelector( lightbox, `[role="${MARKET_MODAL_CONFIRM}"]` ); if (marketModalConfirmElement && this.ipMatchingMarket?.url) { marketModalConfirmElement.addEventListener('click', () => { this.setCookie_(COOKIE_TIPS_NAME, 1, COOKIE_TIPS_EXPIRES); this.setCookie_(MARKET_COUNTRY_COOKIE, this.ipMatchingMarket?.name); this.handleChangeURL_(this.ipMatchingMarket?.url); }); } const marketModalReselectElement = SPZCore.Dom.scopedQuerySelector( lightbox, `[role="${MARKET_MODAL_RESELECT}"]` ); if (marketModalReselectElement) { marketModalReselectElement.addEventListener('click', () => { this.setCookie_(COOKIE_TIPS_NAME, 1, COOKIE_TIPS_EXPIRES); const marketReselectTemplate = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${MARKET_RESELECT_MODAL}"]` ); if (marketReselectTemplate && lightbox.firstElementChild) { const clonedTemplate = self.document.importNode( marketReselectTemplate.content, true ); const selectParent = SPZCore.Dom.scopedQuerySelector( clonedTemplate, `[role="${MARKET_MODAL_RESELECT_COUNTRY_SELECT}"]` ); if (selectParent) { this.createSelect_({ parent: selectParent, defaultValue: this.getDefaultCountryValue_(), dataList: this.marketCountryList.map( this.mapCountryRenderData_ ), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_COUNTRY_SELECT ), itemHandler: this.handleCountrySelectChange_.bind(this), }); } lightbox.replaceChild(clonedTemplate, lightbox.firstElementChild); SPZCore.Dom.scopedQuerySelectorAll( lightbox, `[role="${MARKET_MODAL_CLOSE}"]` ).forEach((ele) => { ele.addEventListener('click', () => { this.setCookie_(COOKIE_TIPS_NAME, 1, COOKIE_TIPS_EXPIRES); apis.close(); }); }); } }); } apis.open(); }); } } async getMarketThemeSettings_() { return this.xhr_.fetchJson(MARKET_THEME_SETTINGS).then((res) => { this.useCountrySelect_ = !!res.country_selector_enabled; this.useLanguageSelect_ = !!res.language_selector_enabled && this.global?.market?.market_id; this.useModal_ = !!res.redirect_pop_enabled; return res; }); } async getCountryList_() { return this.xhr_.fetchJson(MARKET_COUNTRIES).then((res) => { this.marketCountryList = res.data.length ? res.data : []; return res; }); } async getIpMatchingMarket_() { return this.xhr_.fetchJson(IP_MATCHING_MARKET, { method: 'POST', body: { stations: [], }, }); } async getMarketLanguages_(marketId) { return this.xhr_ .fetchJson(MARKET_LANGUAGES.replace(/:id/gim, marketId)) .then((res) => { this.marketLanguages = res?.languages?.length ? res.languages : []; return res; }); } hasCookie_(name) { const m = self.document.cookie .split(';') .filter((pair) => pair.trim().startsWith(name + '=')); return !!(m && m[0]); } getCookie_(name) { const m = self.document.cookie .split(';') .filter((pair) => pair.trim().startsWith(name + '=')); return m && m[0] ? m[0].split('=')[1] : null; } setCookie_(name, value, expires) { const expiresDate = new Date(Date.now() + expires).toGMTString(); self.document.cookie = `${name}=${encodeURIComponent( value )};expires=${expiresDate};path=/`; } } SPZ.defineElement('spz-custom-market', SpzCustomMarket); Region/Country Region/Country ( ) Language Language Switch to based on your location * Purchase with * Get shipping options for Cancel Switch Set to based on your location * Purchase with * Get shipping options for Continue Shopping Modify Country/Region Modify Country/Region Continue Shopping Cancel Region/Country US ( USD $ ) AD ( EUR € ) AT ( EUR € ) BE ( EUR € ) CY ( EUR € ) DE ( EUR € ) EE ( EUR € ) ES ( EUR € ) FI ( EUR € ) FR ( EUR € ) GR ( EUR € ) IE ( EUR € ) IT ( EUR € ) LT ( EUR € ) LU ( EUR € ) LV ( EUR € ) MC ( EUR € ) ME ( EUR € ) MT ( EUR € ) NL ( EUR € ) PT ( EUR € ) SI ( EUR € ) SK ( EUR € ) SM ( EUR € ) VA ( EUR € ) XK ( EUR € ) JP ( JPY ¥ ) GB ( GBP £ ) TH ( THB ฿ ) NZ ( NZD NZ$ ) AU ( AUD A$ ) CA ( CAD CA$ ) CH ( CHF CHF ) DK ( DKK kr ) SG ( SGD S$ ) DE ( EUR € ) US ( USD $ ) AD ( EUR € ) AT ( EUR € ) BE ( EUR € ) CY ( EUR € ) DE ( EUR € ) EE ( EUR € ) ES ( EUR € ) FI ( EUR € ) FR ( EUR € ) GR ( EUR € ) IE ( EUR € ) IT ( EUR € ) LT ( EUR € ) LU ( EUR € ) LV ( EUR € ) MC ( EUR € ) ME ( EUR € ) MT ( EUR € ) NL ( EUR € ) PT ( EUR € ) SI ( EUR € ) SK ( EUR € ) SM ( EUR € ) VA ( EUR € ) XK ( EUR € ) JP ( JPY ¥ ) GB ( GBP £ ) TH ( THB ฿ ) NZ ( NZD NZ$ ) AU ( AUD A$ ) CA ( CAD CA$ ) CH ( CHF CHF ) DK ( DKK kr ) SG ( SGD S$ ) Powered by Google Übersetzer English,Français,Deutsch,Italiano,Español,Português,dansk,日本語,ไทย * Log in * Create an account ${data.data && data.data.count} * SHOP ALL * Tops Short Sleeve Shirts Long Sleeve Shirts Hoodies & Sweatshirts Polo Shirts👕 V-Neck Suit Vest/Tuxedo Waistcoat And Tie 100% Cotton Tees Long Sleeved T-Shirt Shirt with Breast Pocket * Bottoms Men's Short Sets Shorts * Accessories Hats Scarf🧣 Sunglasses Belts & Suspenders Shoes * Chic Matching Set * Dresses 👗 * HOT SALE * HOLIDAY SHIRTS🎉 * Patriots' Day Shirts * Cute Costume Shirts 🤠 * LGBT Pride Month 🌈 * Columbus Day ☠️ * Hippie Festival Shirts 🐙 * Halloween's Day Shirts 🎃 * Thanksgiving Day Tops 🦃 * Christmas Day Shirts 🎅 * New Year Shirts 🎉 * Mardi Gras Shirts 🤡 * Valentine's Day Shirts 💕 * St. Patrick's Day Shirts ☘ * Easter Day Shirts 🐇 * Cinco De Mayo 💃 * Happy Father's Day🎁 * NEW ARRIVALS * SHOP BY CATRGORY New in Short Sleeve Shirts New in Hawaiian Shirts New in Polos New in Shorts * Short Sleeve Shirts * Shop By Category Short Sleeve Shirts Shirt with Breast Pocket Tees Polos Tuxedo Waistcoat And Tie * Shop By Features Funny Holiday 70's Style 🎵 50‘s Style🔥 Ukiyo-e 🌊 Cat 😸 Car 🏁🏎 Music 🎸 Flag Resort🏖️ Beauties Print Costume Shirts🦸♂ Mid Century Style Oriental Culture Inspired 🏮 Hawaiian Shirts 🏄 * LONG SLEEVE TOPS * Long Sleeve Shirts * Hoodies & Sweatshirts * Long Sleeve Polos * Long Sleeve T-Shirts * BOTTOMS & SETS * Summer Chic Set * Fashion Short Sets * Shorts * ⚡CLEARANCE * More links ${(function(){ const formatLinks = (links) => { return links.map(link => { link.tag = tags[link.title.toUpperCase()] || {}; link.target_attr = link.target == '_blank' ? 'target="_blank"' : ''; link.href_attr = link.url ? `href="${link.url}"` : ''; if(link.children && link.children.length){ link.children = formatLinks(link.children); } return link; }) }; const tags = "{}"; let linkList = [ { id: 63889891, title: "SHOP ALL", url: "\/collections\/all-new", target: "", levels: 2, product0: { id: (null) }, children: [ { title: "Tops", url: "\/collections\/tops-new", target: "", levels: 1, children: [ { title: "Short Sleeve Shirts", url: "\/collections\/short-sleeve-shirts-new", target: "", levels: 0, }, { title: "Long Sleeve Shirts", url: "\/collections\/long-sleeve-shirts", target: "", levels: 0, }, { title: "Hoodies & Sweatshirts", url: "\/collections\/hoodies-sweatshirts", target: "", levels: 0, }, { title: "Polo Shirts\ud83d\udc55", url: "\/collections\/polo-shirts", target: "", levels: 0, }, { title: "V-Neck Suit Vest\/Tuxedo Waistcoat And Tie", url: "\/collections\/v-neck-suit-vest-tuxedo-waistcoat-and-tie", target: "", levels: 0, }, { title: "100% Cotton Tees", url: "\/collections\/new-in-100-cotton-tees", target: "", levels: 0, }, { title: "Long Sleeved T-Shirt", url: "\/collections\/long-sleeved-t-shirt", target: "", levels: 0, }, { title: "Shirt with Breast Pocket", url: "\/collections\/shirt-with-breast-pocket", target: "", levels: 0, }, ] }, { title: "Bottoms", url: "\/collections\/bottoms", target: "", levels: 1, children: [ { title: "Men's Short Sets", url: "\/collections\/short-sets", target: "", levels: 0, }, { title: "Shorts", url: "\/collections\/shorts-new", target: "", levels: 0, }, ] }, { title: "Accessories", url: "\/collections\/accessories", target: "", levels: 1, children: [ { title: "Hats", url: "\/collections\/hats", target: "", levels: 0, }, { title: "Scarf\ud83e\udde3", url: "\/collections\/scarf", target: "", levels: 0, }, { title: "Sunglasses", url: "\/collections\/sunglasses", target: "", levels: 0, }, { title: "Belts & Suspenders", url: "\/collections\/belts-suspenders", target: "", levels: 0, }, { title: "Shoes", url: "\/collections\/shoes", target: "", levels: 0, }, ] }, { title: "Chic Matching Set", url: "\/collections\/two-piece-set", target: "", levels: 0, children: [ ] }, { title: "Dresses \ud83d\udc57", url: "\/collections\/womens-dresses", target: "", levels: 0, children: [ ] }, ] }, { id: 63889933, title: "HOT SALE", url: "\/collections\/hot-sale-new", target: "", levels: 0, product0: { id: (null) }, children: [ ] }, { id: 63889935, title: "HOLIDAY SHIRTS\ud83c\udf89", url: "\/collections\/holidays", target: "", levels: 1, product0: { id: (null) }, children: [ { title: "Patriots' Day Shirts", url: "\/collections\/nation", target: "", levels: 0, children: [ ] }, { title: "Cute Costume Shirts \ud83e\udd20", url: "\/collections\/cartoon-costume-shirts-new", target: "", levels: 0, children: [ ] }, { title: "LGBT Pride Month \ud83c\udf08", url: "\/collections\/rainbow-series-new", target: "", levels: 0, children: [ ] }, { title: "Columbus Day \u2620\ufe0f", url: "\/collections\/columbus-day", target: "", levels: 0, children: [ ] }, { title: "Hippie Festival Shirts \ud83d\udc19", url: "\/collections\/hippie-festival", target: "", levels: 0, children: [ ] }, { title: "Halloween's Day Shirts \ud83c\udf83", url: "\/collections\/halloween-day-shirts", target: "", levels: 0, children: [ ] }, { title: "Thanksgiving Day Tops \ud83e\udd83", url: "\/collections\/thanksgiving-tops", target: "", levels: 0, children: [ ] }, { title: "Christmas Day Shirts \ud83c\udf85", url: "\/collections\/christmas", target: "", levels: 0, children: [ ] }, { title: "New Year Shirts \ud83c\udf89", url: "\/collections\/new-year-shirts", target: "", levels: 0, children: [ ] }, { title: "Mardi Gras Shirts \ud83e\udd21", url: "\/collections\/mardi-gras-shirts-1", target: "", levels: 0, children: [ ] }, { title: "Valentine's Day Shirts \ud83d\udc95", url: "\/collections\/valentines-day-shirts", target: "", levels: 0, children: [ ] }, { title: "St. Patrick's Day Shirts \u2618", url: "\/collections\/st-patricks-day", target: "", levels: 0, children: [ ] }, { title: "Easter Day Shirts \ud83d\udc07", url: "\/collections\/easter-series", target: "", levels: 0, children: [ ] }, { title: "Cinco De Mayo \ud83d\udc83", url: "\/collections\/cinco-de-mayo", target: "", levels: 0, children: [ ] }, { title: "Happy Father's Day\ud83c\udf81", url: "\/collections\/happy-fathers-day", target: "", levels: 0, children: [ ] }, ] }, { id: 63889967, title: "NEW ARRIVALS", url: "\/collections\/new-arrivals", target: "", levels: 2, product0: { id: (null) }, children: [ { title: "SHOP BY CATRGORY", url: "", target: "", levels: 1, children: [ { title: "New in Short Sleeve Shirts", url: "\/collections\/new-in-short-sleeve-shirts", target: "", levels: 0, }, { title: "New in Hawaiian Shirts", url: "\/collections\/new-in-hawaiian-shirts", target: "", levels: 0, }, { title: "New in Polos", url: "\/collections\/new-in-polos", target: "", levels: 0, }, { title: "New in Shorts", url: "\/collections\/new-in-shorts", target: "", levels: 0, }, ] }, ] }, { id: 63889991, title: "Short Sleeve Shirts", url: "\/collections\/short-sleeve-shirts-new", target: "", levels: 2, product0: { id: (null) }, children: [ { title: "Shop By Category", url: "", target: "", levels: 1, children: [ { title: "Short Sleeve Shirts", url: "\/collections\/short-sleeve-shirts-new", target: "_blank", levels: 0, }, { title: "Shirt with Breast Pocket", url: "\/collections\/shirts-with-breast-pocket-new", target: "", levels: 0, }, { title: "Tees", url: "\/collections\/tees", target: "", levels: 0, }, { title: "Polos", url: "\/collections\/polos-new", target: "", levels: 0, }, { title: "Tuxedo Waistcoat And Tie", url: "\/collections\/v-neck-suit-vest-tuxedo-waistcoat-and-tie", target: "", levels: 0, }, ] }, { title: "Shop By Features", url: "", target: "", levels: 1, children: [ { title: "Funny Holiday ", url: "\/collections\/holidays", target: "", levels: 0, }, { title: "70's Style \ud83c\udfb5", url: "\/collections\/70s-style-shirts-new", target: "", levels: 0, }, { title: "50\u2018s Style\ud83d\udd25", url: "\/collections\/retro-style-shirts-new", target: "", levels: 0, }, { title: "Ukiyo-e \ud83c\udf0a", url: "\/collections\/art-style-ukiyo-e-printed-new", target: "", levels: 0, }, { title: "Cat \ud83d\ude38", url: "\/collections\/cat-series", target: "", levels: 0, }, { title: "Car \ud83c\udfc1\ud83c\udfce", url: "\/collections\/cars", target: "", levels: 0, }, { title: "Music \ud83c\udfb8", url: "\/collections\/musical-style", target: "", levels: 0, }, { title: "Flag ", url: "\/collections\/nation", target: "", levels: 0, }, { title: "Resort\ud83c\udfd6\ufe0f", url: "\/collections\/resort-shirts-new", target: "", levels: 0, }, { title: "Beauties Print", url: "\/collections\/beauties-print", target: "", levels: 0, }, { title: "Costume Shirts\ud83e\uddb8\u200d\u2642", url: "\/collections\/cartoon-costume-shirts-new", target: "", levels: 0, }, { title: "Mid Century Style", url: "\/collections\/mid-century-style", target: "", levels: 0, }, { title: "Oriental Culture Inspired \ud83c\udfee", url: "\/collections\/mysterious-oriental", target: "", levels: 0, }, { title: "Hawaiian Shirts \ud83c\udfc4", url: "\/collections\/hawaiian-style", target: "", levels: 0, }, ] }, ] }, { id: 63890063, title: "LONG SLEEVE TOPS", url: "\/collections\/long-sleeve", target: "", levels: 1, product0: { id: (null) }, children: [ { title: "Long Sleeve Shirts", url: "\/collections\/long-sleeve-shirts", target: "", levels: 0, children: [ ] }, { title: "Hoodies & Sweatshirts", url: "\/collections\/hoodies-sweatshirts", target: "", levels: 0, children: [ ] }, { title: "Long Sleeve Polos", url: "\/collections\/long-sleeve-polos", target: "", levels: 0, children: [ ] }, { title: "Long Sleeve T-Shirts", url: "\/collections\/long-sleeved-t-shirt", target: "", levels: 0, children: [ ] }, ] }, { id: 63890073, title: "BOTTOMS & SETS", url: "\/collections\/bottoms", target: "", levels: 1, product0: { id: (null) }, children: [ { title: "Summer Chic Set", url: "\/collections\/two-piece-set-new", target: "", levels: 0, children: [ ] }, { title: "Fashion Short Sets", url: "\/collections\/short-sets", target: "", levels: 0, children: [ ] }, { title: "Shorts", url: "\/collections\/shorts-new", target: "", levels: 0, children: [ ] }, ] }, { id: 63890081, title: "\u26a1CLEARANCE", url: "\/collections\/on-sale-items-1", target: "", levels: 0, product0: { id: (null) }, children: [ ] }, ].slice(offset); linkList = formatLinks(linkList); const hasChild = linkList.some(link => !!(link.children && link.children.length || link.product0.id)); return ` * ${link.title} ${link.tag.label} * ${second_link.title} ${second_link.tag.label} ${third_links.title} ${third_links.tag.label} * ${link.title} ${link.tag.label} ` })()} * SHOP ALL * Tops Short Sleeve Shirts Long Sleeve Shirts Hoodies & Sweatshirts Polo Shirts👕 V-Neck Suit Vest/Tuxedo Waistcoat And Tie 100% Cotton Tees Long Sleeved T-Shirt Shirt with Breast Pocket * Bottoms Men's Short Sets Shorts * Accessories Hats Scarf🧣 Sunglasses Belts & Suspenders Shoes * Chic Matching Set * Dresses 👗 * HOT SALE * HOLIDAY SHIRTS🎉 * Patriots' Day Shirts * Cute Costume Shirts 🤠 * LGBT Pride Month 🌈 * Columbus Day ☠️ * Hippie Festival Shirts 🐙 * Halloween's Day Shirts 🎃 * Thanksgiving Day Tops 🦃 * Christmas Day Shirts 🎅 * New Year Shirts 🎉 * Mardi Gras Shirts 🤡 * Valentine's Day Shirts 💕 * St. Patrick's Day Shirts ☘ * Easter Day Shirts 🐇 * Cinco De Mayo 💃 * Happy Father's Day🎁 * NEW ARRIVALS * SHOP BY CATRGORY New in Short Sleeve Shirts New in Hawaiian Shirts New in Polos New in Shorts * Short Sleeve Shirts * Shop By Category Short Sleeve Shirts Shirt with Breast Pocket Tees Polos Tuxedo Waistcoat And Tie * Shop By Features Funny Holiday 70's Style 🎵 50‘s Style🔥 Ukiyo-e 🌊 Cat 😸 Car 🏁🏎 Music 🎸 Flag Resort🏖️ Beauties Print Costume Shirts🦸♂ Mid Century Style Oriental Culture Inspired 🏮 Hawaiian Shirts 🏄 * LONG SLEEVE TOPS * Long Sleeve Shirts * Hoodies & Sweatshirts * Long Sleeve Polos * Long Sleeve T-Shirts * BOTTOMS & SETS * Summer Chic Set * Fashion Short Sets * Shorts * ⚡CLEARANCE * More links ${(function(){ const formatLinks = (links) => { return links.map(link => { link.tag = tags[link.title.toUpperCase()] || {}; link.target_attr = link.target == '_blank' ? 'target="_blank"' : ''; link.href_attr = link.url ? `href="${link.url}"` : ''; if(link.children && link.children.length){ link.children = formatLinks(link.children); } return link; }) }; const tags = "{}"; let linkList = [ { id: 63889891, title: "SHOP ALL", url: "\/collections\/all-new", target: "", levels: 2, product0: { id: (null) }, children: [ { title: "Tops", url: "\/collections\/tops-new", target: "", levels: 1, children: [ { title: "Short Sleeve Shirts", url: "\/collections\/short-sleeve-shirts-new", target: "", levels: 0, }, { title: "Long Sleeve Shirts", url: "\/collections\/long-sleeve-shirts", target: "", levels: 0, }, { title: "Hoodies & Sweatshirts", url: "\/collections\/hoodies-sweatshirts", target: "", levels: 0, }, { title: "Polo Shirts\ud83d\udc55", url: "\/collections\/polo-shirts", target: "", levels: 0, }, { title: "V-Neck Suit Vest\/Tuxedo Waistcoat And Tie", url: "\/collections\/v-neck-suit-vest-tuxedo-waistcoat-and-tie", target: "", levels: 0, }, { title: "100% Cotton Tees", url: "\/collections\/new-in-100-cotton-tees", target: "", levels: 0, }, { title: "Long Sleeved T-Shirt", url: "\/collections\/long-sleeved-t-shirt", target: "", levels: 0, }, { title: "Shirt with Breast Pocket", url: "\/collections\/shirt-with-breast-pocket", target: "", levels: 0, }, ] }, { title: "Bottoms", url: "\/collections\/bottoms", target: "", levels: 1, children: [ { title: "Men's Short Sets", url: "\/collections\/short-sets", target: "", levels: 0, }, { title: "Shorts", url: "\/collections\/shorts-new", target: "", levels: 0, }, ] }, { title: "Accessories", url: "\/collections\/accessories", target: "", levels: 1, children: [ { title: "Hats", url: "\/collections\/hats", target: "", levels: 0, }, { title: "Scarf\ud83e\udde3", url: "\/collections\/scarf", target: "", levels: 0, }, { title: "Sunglasses", url: "\/collections\/sunglasses", target: "", levels: 0, }, { title: "Belts & Suspenders", url: "\/collections\/belts-suspenders", target: "", levels: 0, }, { title: "Shoes", url: "\/collections\/shoes", target: "", levels: 0, }, ] }, { title: "Chic Matching Set", url: "\/collections\/two-piece-set", target: "", levels: 0, children: [ ] }, { title: "Dresses \ud83d\udc57", url: "\/collections\/womens-dresses", target: "", levels: 0, children: [ ] }, ] }, { id: 63889933, title: "HOT SALE", url: "\/collections\/hot-sale-new", target: "", levels: 0, product0: { id: (null) }, children: [ ] }, { id: 63889935, title: "HOLIDAY SHIRTS\ud83c\udf89", url: "\/collections\/holidays", target: "", levels: 1, product0: { id: (null) }, children: [ { title: "Patriots' Day Shirts", url: "\/collections\/nation", target: "", levels: 0, children: [ ] }, { title: "Cute Costume Shirts \ud83e\udd20", url: "\/collections\/cartoon-costume-shirts-new", target: "", levels: 0, children: [ ] }, { title: "LGBT Pride Month \ud83c\udf08", url: "\/collections\/rainbow-series-new", target: "", levels: 0, children: [ ] }, { title: "Columbus Day \u2620\ufe0f", url: "\/collections\/columbus-day", target: "", levels: 0, children: [ ] }, { title: "Hippie Festival Shirts \ud83d\udc19", url: "\/collections\/hippie-festival", target: "", levels: 0, children: [ ] }, { title: "Halloween's Day Shirts \ud83c\udf83", url: "\/collections\/halloween-day-shirts", target: "", levels: 0, children: [ ] }, { title: "Thanksgiving Day Tops \ud83e\udd83", url: "\/collections\/thanksgiving-tops", target: "", levels: 0, children: [ ] }, { title: "Christmas Day Shirts \ud83c\udf85", url: "\/collections\/christmas", target: "", levels: 0, children: [ ] }, { title: "New Year Shirts \ud83c\udf89", url: "\/collections\/new-year-shirts", target: "", levels: 0, children: [ ] }, { title: "Mardi Gras Shirts \ud83e\udd21", url: "\/collections\/mardi-gras-shirts-1", target: "", levels: 0, children: [ ] }, { title: "Valentine's Day Shirts \ud83d\udc95", url: "\/collections\/valentines-day-shirts", target: "", levels: 0, children: [ ] }, { title: "St. Patrick's Day Shirts \u2618", url: "\/collections\/st-patricks-day", target: "", levels: 0, children: [ ] }, { title: "Easter Day Shirts \ud83d\udc07", url: "\/collections\/easter-series", target: "", levels: 0, children: [ ] }, { title: "Cinco De Mayo \ud83d\udc83", url: "\/collections\/cinco-de-mayo", target: "", levels: 0, children: [ ] }, { title: "Happy Father's Day\ud83c\udf81", url: "\/collections\/happy-fathers-day", target: "", levels: 0, children: [ ] }, ] }, { id: 63889967, title: "NEW ARRIVALS", url: "\/collections\/new-arrivals", target: "", levels: 2, product0: { id: (null) }, children: [ { title: "SHOP BY CATRGORY", url: "", target: "", levels: 1, children: [ { title: "New in Short Sleeve Shirts", url: "\/collections\/new-in-short-sleeve-shirts", target: "", levels: 0, }, { title: "New in Hawaiian Shirts", url: "\/collections\/new-in-hawaiian-shirts", target: "", levels: 0, }, { title: "New in Polos", url: "\/collections\/new-in-polos", target: "", levels: 0, }, { title: "New in Shorts", url: "\/collections\/new-in-shorts", target: "", levels: 0, }, ] }, ] }, { id: 63889991, title: "Short Sleeve Shirts", url: "\/collections\/short-sleeve-shirts-new", target: "", levels: 2, product0: { id: (null) }, children: [ { title: "Shop By Category", url: "", target: "", levels: 1, children: [ { title: "Short Sleeve Shirts", url: "\/collections\/short-sleeve-shirts-new", target: "_blank", levels: 0, }, { title: "Shirt with Breast Pocket", url: "\/collections\/shirts-with-breast-pocket-new", target: "", levels: 0, }, { title: "Tees", url: "\/collections\/tees", target: "", levels: 0, }, { title: "Polos", url: "\/collections\/polos-new", target: "", levels: 0, }, { title: "Tuxedo Waistcoat And Tie", url: "\/collections\/v-neck-suit-vest-tuxedo-waistcoat-and-tie", target: "", levels: 0, }, ] }, { title: "Shop By Features", url: "", target: "", levels: 1, children: [ { title: "Funny Holiday ", url: "\/collections\/holidays", target: "", levels: 0, }, { title: "70's Style \ud83c\udfb5", url: "\/collections\/70s-style-shirts-new", target: "", levels: 0, }, { title: "50\u2018s Style\ud83d\udd25", url: "\/collections\/retro-style-shirts-new", target: "", levels: 0, }, { title: "Ukiyo-e \ud83c\udf0a", url: "\/collections\/art-style-ukiyo-e-printed-new", target: "", levels: 0, }, { title: "Cat \ud83d\ude38", url: "\/collections\/cat-series", target: "", levels: 0, }, { title: "Car \ud83c\udfc1\ud83c\udfce", url: "\/collections\/cars", target: "", levels: 0, }, { title: "Music \ud83c\udfb8", url: "\/collections\/musical-style", target: "", levels: 0, }, { title: "Flag ", url: "\/collections\/nation", target: "", levels: 0, }, { title: "Resort\ud83c\udfd6\ufe0f", url: "\/collections\/resort-shirts-new", target: "", levels: 0, }, { title: "Beauties Print", url: "\/collections\/beauties-print", target: "", levels: 0, }, { title: "Costume Shirts\ud83e\uddb8\u200d\u2642", url: "\/collections\/cartoon-costume-shirts-new", target: "", levels: 0, }, { title: "Mid Century Style", url: "\/collections\/mid-century-style", target: "", levels: 0, }, { title: "Oriental Culture Inspired \ud83c\udfee", url: "\/collections\/mysterious-oriental", target: "", levels: 0, }, { title: "Hawaiian Shirts \ud83c\udfc4", url: "\/collections\/hawaiian-style", target: "", levels: 0, }, ] }, ] }, { id: 63890063, title: "LONG SLEEVE TOPS", url: "\/collections\/long-sleeve", target: "", levels: 1, product0: { id: (null) }, children: [ { title: "Long Sleeve Shirts", url: "\/collections\/long-sleeve-shirts", target: "", levels: 0, children: [ ] }, { title: "Hoodies & Sweatshirts", url: "\/collections\/hoodies-sweatshirts", target: "", levels: 0, children: [ ] }, { title: "Long Sleeve Polos", url: "\/collections\/long-sleeve-polos", target: "", levels: 0, children: [ ] }, { title: "Long Sleeve T-Shirts", url: "\/collections\/long-sleeved-t-shirt", target: "", levels: 0, children: [ ] }, ] }, { id: 63890073, title: "BOTTOMS & SETS", url: "\/collections\/bottoms", target: "", levels: 1, product0: { id: (null) }, children: [ { title: "Summer Chic Set", url: "\/collections\/two-piece-set-new", target: "", levels: 0, children: [ ] }, { title: "Fashion Short Sets", url: "\/collections\/short-sets", target: "", levels: 0, children: [ ] }, { title: "Shorts", url: "\/collections\/shorts-new", target: "", levels: 0, children: [ ] }, ] }, { id: 63890081, title: "\u26a1CLEARANCE", url: "\/collections\/on-sale-items-1", target: "", levels: 0, product0: { id: (null) }, children: [ ] }, ].slice(offset); linkList = formatLinks(linkList); const hasChild = linkList.some(link => !!(link.children && link.children.length || link.product0.id)); return ` * ${link.title} ${link.tag.label} * ${second_link.title} ${second_link.tag.label} ${third_links.title} ${third_links.tag.label} * ${link.title} ${link.tag.label} ` })()} const marketSlot = document.querySelector(".plugin_c_market"); if(marketSlot) { marketSlot.remove(); } const SITE = (window.C_SETTINGS || window[atob('U0hPUExBWlpB')])?.routes?.root || ''; const MARKET_THEME_SETTINGS = `${SITE}/api/markets/theme_setting`; const MARKET_COUNTRIES = `${SITE}/api/markets/countries`; const IP_MATCHING_MARKET = `${SITE}/api/front/station`; const MARKET_LANGUAGES = `${SITE}/api/markets/:id/active_languages`; const URL_REDIRECT = '_market_redirected'; const COOKIE_TIPS_NAME = 'market_no_tips'; const COOKIE_TIPS_EXPIRES = 1000 * 60 * 60 * 24 * 14; const MARKET_COUNTRY_COOKIE = '_shoplazza_market_country'; const MARKET_MODAL_LOADED = '__market_modal_loaded__'; const PROPERTY_SELECTED = 'selected'; const MARKET_PC_HEADER_TRIGGER = 'market-pc-header-trigger'; const MARKET_PC_HEADER_COUNTRY_SELECT_TITLE = 'market-pc-header-country-select-title'; const MARKET_PC_HEADER_LANGUAGE_SELECT_TITLE = 'market-pc-header-language-select-title'; const MARKET_PC_HEADER_LANGUAGE_SELECT_SUB_TITLE = 'market-pc-header-language-select-sub-title'; const MARKET_PC_HEADER_COUNTRY_SELECT_SUB_TITLE = 'market-pc-header-country-select-sub-title'; const MARKET_FLAG = 'market-flag'; const MARKET_SELECT_VALUE = 'market-select-value'; const MARKET_CURRENCY = 'market-currency'; const MARKET_CURRENCY_SYMBOL = 'market-currency-symbol'; const MARKET_SELECT_ITEM = 'market-select-item'; const MARKET_SELECT_ITEM_ID = 'market-select-item-id'; const MARKET_SELECT_LIST = 'market-select-list'; const MARKET_LANGUAGE_SELECT = 'market-language-select'; const MARKET_COUNTRY_SELECT = 'market-country-select'; const MARKET_MODAL = 'market-modal'; const MARKET_GATEWAY_REDIRECT_MODAL = 'market-gateway-redirect-modal'; const MARKET_RESELECT_MODAL = 'market-reselect-modal'; const MARKET_MODAL_FLAG = 'market-modal-flag'; const MARKET_MODAL_COUNTRY_CODE = 'market-modal-country-code'; const MARKET_MODAL_CURRENCY_SYMBOL = 'market-modal-currency-symbol'; const MARKET_MODAL_CLOSE = 'market-modal-close'; const MARKET_MODAL_CONFIRM = 'market-modal-confirm'; const MARKET_MODAL_RESELECT = 'market-modal-reselect'; const MARKET_MODAL_RESELECT_COUNTRY_SELECT = 'market-modal-reselect-country-select'; const DATA_SECTION_TYPE = 'data-section-type'; const SECTION_TYPE_HEADER = 'header'; const SECTION_TYPE_FOOTER = 'footer'; class SpzCustomMarket extends SPZ.BaseElement { constructor(element) { super(element); this.global = null; this.useCountrySelect_ = false; this.useLanguageSelect_ = false; this.useModal_ = false; this.isSingleSelectMode_ = false; this.blockSectionPosition_ = ''; this.isEditMode = false; this.ipMatchingMarket = null; this.marketCountryList = []; this.marketLanguages = []; this.toast = null; } static deferredMount() { return false; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { console.debug('Geolocation'); this.xhr_ = SPZServices.xhrFor(this.win); const platform = SPZServices.platformFor(this.win); this.isIOS_ = platform.isIos(); this.action_ = SPZServices.actionServiceForDoc(this.element); this.global = this.win.C_SETTINGS || this.win[atob('U0hPUExBWlpB')]; this.isEditMode = new URLSearchParams(this.win.location.search).get('preview_theme_id') && new URLSearchParams(this.win.location.search).get('oseid'); this.init_(); } showToast_(content) { if (!this.toast) { this.toast = self.document.createElement('ljs-toast'); this.toast.setAttribute('layout', 'nodisplay'); this.toast.setAttribute('hidden', ''); this.toast.setAttribute('duration', '2000'); this.element.appendChild(this.toast); } SPZ.whenApiDefined(this.toast).then((apis) => { apis.showToast(content); }); } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, `${TAG}.${name}`, data); this.action_.trigger(this.element, name, event); } findBlockSectionPosition() { let current = this.element; while (current) { const dataSectionType = current.getAttribute(DATA_SECTION_TYPE); if ( dataSectionType === SECTION_TYPE_HEADER || dataSectionType === SECTION_TYPE_FOOTER ) { return dataSectionType; } current = current.parentElement; } return ''; } async initSettings_() { await this.getMarketThemeSettings_(); if (this.useCountrySelect_) { this.element.setAttribute('use-country-select', true); } if (this.useLanguageSelect_) { this.element.setAttribute('use-language-select', true); } if (this.useModal_) { this.element.setAttribute('use-modal', true); } if ( (this.useCountrySelect_ && !this.useLanguageSelect_) || (!this.useCountrySelect_ && this.useLanguageSelect_) ) { this.isSingleSelectMode_ = true; } this.blockSectionPosition_ = this.findBlockSectionPosition(); this.isPCLayout_ = this.win.matchMedia('(min-width: 960px)').matches; } renderMarketSelectTemplateNode_(clonedTemplate, data) { this.renderTemplateImg_(clonedTemplate, MARKET_FLAG, { src: data?.flag, width: '24', height: '24', }); this.renderTemplateElement_( clonedTemplate, MARKET_SELECT_VALUE, data.value ); this.renderTemplateElement_( clonedTemplate, MARKET_CURRENCY, data?.currency ); this.renderTemplateElement_( clonedTemplate, MARKET_CURRENCY_SYMBOL, data?.currencySymbol ); } bindDropdownOpenClickEvent_(triggerElement, dropdown) { if (!triggerElement) return; const triggerOpen = () => { SPZ.whenApiDefined(dropdown).then((apis) => { if (!dropdown.hasAttribute('open')) { apis.open(triggerElement); } }); }; if (this.isIOS_) { triggerElement.addEventListener('touchstart', triggerOpen); } else { triggerElement.addEventListener('click', triggerOpen); } } createDropdown_() { const dropdown = self.document.createElement('ljs-dropdown'); dropdown.setAttribute('layout', 'nodisplay'); if (this.blockSectionPosition_ === 'header') { dropdown.setAttribute('overlay-style', 'top: 4px;'); dropdown.setAttribute('placement', 'bottomRight'); } else if (this.blockSectionPosition_ === 'footer') { dropdown.setAttribute('overlay-style', 'top: -4px;'); dropdown.setAttribute('placement', 'top'); } return dropdown; } createDropdownIcon_() { const svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svgElement.setAttribute("class", "market-rotate-180"); svgElement.setAttribute("width", "16"); svgElement.setAttribute("height", "16"); const path1 = document.createElementNS("http://www.w3.org/2000/svg", "path"); path1.setAttribute("d", "M7.47 5.172a.75.75 0 0 1 1.06 0l4.596 4.596a.75.75 0 1 1-1.06 1.06L7.468 6.232a.75.75 0 0 1 0-1.06Z"); path1.setAttribute("fill", "currentColor"); const path2 = document.createElementNS("http://www.w3.org/2000/svg", "path"); path2.setAttribute("d", "M8.533 5.172a.75.75 0 0 1 0 1.06l-4.596 4.596a.75.75 0 1 1-1.061-1.06l4.596-4.596a.75.75 0 0 1 1.06 0Z"); path2.setAttribute("fill", "currentColor"); svgElement.appendChild(path1); svgElement.appendChild(path2); return svgElement; } renderDropdownListWithClickEvent_({ triggerElement, dataList, subTitleRole, listElementWithTemplate, defaultValue, itemHandler, shouldUpdateSelectedItem = false, }) { const dropdown = this.createDropdown_(); const itemTemplate = SPZCore.Dom.scopedQuerySelector( listElementWithTemplate, 'template' ); const clonedItemTemplate = itemTemplate.cloneNode(true); const fragment = self.document.createDocumentFragment(); dataList.forEach((data) => { const tempParentNode = self.document.createElement('div'); const clonedTemplate = self.document.importNode( clonedItemTemplate.content, true ); tempParentNode.appendChild(clonedTemplate); tempParentNode.firstElementChild.classList.add( 'market-select-item' ); this.renderMarketSelectTemplateNode_(tempParentNode, data); const selectItemElement = SPZCore.Dom.scopedQuerySelector( tempParentNode, `[role="${MARKET_SELECT_ITEM}"]` ); if (!selectItemElement) { return; } if (defaultValue === data.value) { if (shouldUpdateSelectedItem) { const clonedSelectItemElement = selectItemElement.cloneNode(true); triggerElement.replaceChild( clonedSelectItemElement, triggerElement.firstElementChild ); } selectItemElement.setAttribute(PROPERTY_SELECTED, ''); } selectItemElement.setAttribute(MARKET_SELECT_ITEM_ID, data.value); fragment.appendChild(tempParentNode.firstElementChild); }); let value = defaultValue; listElementWithTemplate.addEventListener( 'click', (e) => { if (this.isEditMode) { this.showToast_('编辑器下不支持切换国家'); SPZ.whenApiDefined(dropdown).then((apis) => { apis.close(); }); return; } let targetElement = e.target; while (targetElement) { if ( !targetElement || targetElement.getAttribute(MARKET_SELECT_ITEM_ID) ) { break; } targetElement = targetElement.parentNode; } if ( !targetElement || !targetElement.hasAttribute(MARKET_SELECT_ITEM_ID) ) { return; } const selectValue = targetElement.getAttribute(MARKET_SELECT_ITEM_ID); if (value === selectValue) { SPZ.whenApiDefined(dropdown).then((apis) => { apis.close(); }); return; } const selectedData = dataList.find((c) => c.value === selectValue); if (shouldUpdateSelectedItem) { const tempParentNode = self.document.createElement('div'); const clonedTemplate = self.document.importNode( clonedItemTemplate.content, true ); tempParentNode.appendChild(clonedTemplate); this.renderMarketSelectTemplateNode_(tempParentNode, selectedData); tempParentNode.firstElementChild.classList.add( 'market-select-item' ); triggerElement.replaceChild( tempParentNode.firstElementChild, triggerElement.firstElementChild ); } value = selectValue; itemHandler?.(selectedData); SPZ.whenApiDefined(dropdown).then((apis) => { apis.close(); }); }, false ); listElementWithTemplate.removeChild(itemTemplate); listElementWithTemplate.appendChild(fragment); listElementWithTemplate.classList.add('market-select-list'); dropdown.appendChild(listElementWithTemplate); if (subTitleRole) { this.renderSelectTitle_(dropdown, subTitleRole); } return dropdown; } createSelect_({ parent, defaultValue, dataList, listElementWithTemplate, itemHandler, titleRole, }) { const triggerElement = self.document.createElement('div'); triggerElement.classList.add('market-select'); const displayElement = self.document.createElement('div'); triggerElement.appendChild(displayElement); triggerElement.appendChild(this.createDropdownIcon_()); const dropdown = this.renderDropdownListWithClickEvent_({ triggerElement, dataList, listElementWithTemplate, defaultValue, itemHandler, shouldUpdateSelectedItem: true, }); this.bindDropdownOpenClickEvent_(triggerElement, dropdown); const dropdownContainer = self.document.createElement('div'); dropdownContainer.appendChild(triggerElement); dropdownContainer.appendChild(dropdown); dropdownContainer.classList.add('market-select-container'); this.renderSelectTitle_(dropdownContainer, titleRole); parent.appendChild(dropdownContainer); } getListElementWithTemplate_(role) { const template = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${role}"]` ); if (template) { const clonedTemplate = template.cloneNode(true); const tempParent = self.document.createElement("div"); tempParent.appendChild(clonedTemplate.content); const listElementWithTemplate = SPZCore.Dom.scopedQuerySelector( tempParent, `[role="${MARKET_SELECT_LIST}"]` ); return listElementWithTemplate; } return null; } renderSelectTitle_(parent, role) { if (!parent || !role) { return; } const template = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${role}"]` ); const content = self.document.importNode(template.content, true); parent.insertBefore(content, parent.firstElementChild); parent.firstElementChild.classList.add( role.includes('sub') ? 'market-pc-header-select-sub-title' : 'market-pc-header-select-title' ); } initSelect_(rootNode, options) { const parent = rootNode || this.element; if (this.useCountrySelect_) { this.createSelect_({ parent, titleRole: options?.shouldRenderSelectTitle ? MARKET_PC_HEADER_COUNTRY_SELECT_TITLE : undefined, defaultValue: this.getDefaultCountryValue_(), dataList: this.marketCountryList.map(this.mapCountryRenderData_), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_COUNTRY_SELECT ), itemHandler: this.handleCountrySelectChange_.bind(this), }); } if (this.useLanguageSelect_) { this.createSelect_({ parent, titleRole: options?.shouldRenderSelectTitle ? MARKET_PC_HEADER_LANGUAGE_SELECT_TITLE : undefined, defaultValue: this.getDefaultLanguageValue_(), dataList: this.marketLanguages.map(this.mapLanguageRenderData_), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_LANGUAGE_SELECT ), itemHandler: this.handleLanguageSelectChange_.bind(this), }); } } initPcHeaderTriggerElement() { const headerTriggerElementTemplate = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${MARKET_PC_HEADER_TRIGGER}"]` ); const headerTriggerElement = self.document.importNode( headerTriggerElementTemplate.content, true ); const parentDivElement = self.document.createElement('div'); parentDivElement.setAttribute('role', MARKET_PC_HEADER_TRIGGER); parentDivElement.appendChild(headerTriggerElement); this.element.removeChild(headerTriggerElementTemplate); return parentDivElement; } initPanelWithSelect_() { const triggerElement = this.initPcHeaderTriggerElement(); const dropdown = this.createDropdown_(); const panelElement = self.document.createElement('div'); panelElement.classList.add('market-panel'); this.initSelect_(panelElement, {shouldRenderSelectTitle: true}); dropdown.appendChild(panelElement); this.bindDropdownOpenClickEvent_(triggerElement, dropdown); this.element.appendChild(triggerElement); this.element.insertBefore(dropdown, triggerElement); } initSingleSelectDropdown_() { const triggerElement = this.initPcHeaderTriggerElement(); let dropdown; if (this.useCountrySelect_) { dropdown = this.renderDropdownListWithClickEvent_({ triggerElement, subTitleRole: MARKET_PC_HEADER_COUNTRY_SELECT_SUB_TITLE, dataList: this.marketCountryList.map(this.mapCountryRenderData_), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_COUNTRY_SELECT ), defaultValue: this.getDefaultCountryValue_(), itemHandler: this.handleCountrySelectChange_.bind(this), }); } else if (this.useLanguageSelect_) { dropdown = this.renderDropdownListWithClickEvent_({ triggerElement, subTitleRole: MARKET_PC_HEADER_LANGUAGE_SELECT_SUB_TITLE, dataList: this.marketLanguages.map(this.mapLanguageRenderData_), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_LANGUAGE_SELECT ), defaultValue: this.getDefaultLanguageValue_(), itemHandler: this.handleLanguageSelectChange_.bind(this), }); } if (dropdown) { this.bindDropdownOpenClickEvent_(triggerElement, dropdown); this.element.appendChild(triggerElement); this.element.appendChild(dropdown); } } initEntry_() { if (this.blockSectionPosition_ === SECTION_TYPE_HEADER) { if (this.isSingleSelectMode_) { this.initSingleSelectDropdown_(); } else if (this.useCountrySelect_ && this.useLanguageSelect_) { this.initPanelWithSelect_(); } } this.initSelect_(this.element); } async initData_() { const promises = []; if (this.useCountrySelect_ || this.useModal_) { promises.push(this.getCountryList_(), this.getIpMatchingMarket_()); } if (this.useLanguageSelect_) { promises.push(this.getMarketLanguages_(this.global.market.market_id)); } return Promise.all(promises).then((results) => { const ipMatchingMarket = results.find((result) => result.hasOwnProperty('matching_station') ); const marketCountryList = results.find((result) => result.hasOwnProperty('data') ); if (ipMatchingMarket && marketCountryList) { this.ipMatchingMarket = ipMatchingMarket?.matching_station?.find?.( (item) => item.type === 'multiple_market' ) || { img: marketCountryList.length ? marketCountryList?.[0]?.detail && marketCountryList[0].detail?.flag : '', }; } }); } initModal_() { if ( this.isEditMode || !this.ipMatchingMarket?.market_id || !this.useModal_ || this.hasCookie_(COOKIE_TIPS_NAME) || this.win[MARKET_MODAL_LOADED] ) { return; } this.win[MARKET_MODAL_LOADED] = true; const redirectParam = new URLSearchParams(this.win.location.search).get( URL_REDIRECT ); if (redirectParam) { this.initModalEntry_(MARKET_GATEWAY_REDIRECT_MODAL); } else if ( this.ipMatchingMarket.market_id !== this.global?.market?.market_id ) { this.initModalEntry_(MARKET_MODAL); } } async init_() { await this.initSettings_(); await this.initData_(); this.initEntry_(); this.initModal_(); } getDefaultCountryValue_() { return this.getCookie_(MARKET_COUNTRY_COOKIE) || this.marketCountryList[0]?.country_code; } mapCountryRenderData_(country) { return { flag: country?.detail?.flag || '', value: country?.country_code, currency: country?.currency, currencySymbol: country?.symbol?.val || '', url: country?.url, }; } handleCountrySelectChange_(selectedData) { this.setCookie_(MARKET_COUNTRY_COOKIE, selectedData.value); this.handleChangeURL_(selectedData.url); } getDefaultLanguageValue_() { return this.marketLanguages?.find?.( (lang) => lang.code === this.global?.market?.market_lang )?.name; } mapLanguageRenderData_(language) { return { value: language.name, url: language.url, }; } handleLanguageSelectChange_(selectedData) { this.handleChangeURL_(selectedData.url); } renderTemplateElement_(parent, role, value) { const elements = SPZCore.Dom.scopedQuerySelectorAll( parent, `[role="${role}"]` ); elements.forEach((element) => { if (element && value) { element.innerHTML = value; } }); } renderTemplateImg_(parent, role, options) { const flagElement = SPZCore.Dom.scopedQuerySelector( parent, `[role="${role}"]` ); if (flagElement && options?.src && options?.height && options?.width) { const spzImg = self.document.createElement('ljs-img'); spzImg.setAttribute('src', options.src); spzImg.setAttribute('layout', 'responsive'); spzImg.setAttribute('width', options.width); spzImg.setAttribute('height', options.height); spzImg.setAttribute( 'style', `width: ${options.width}px; height: ${options.height}px;` ); flagElement.appendChild(spzImg); } } handleChangeURL_(url) { if (!!url) { let {origin, pathname, search} = this.win.location; pathname = pathname.replace(SITE, url != '/' ? url : ''); this.win.location.href = `${origin}${pathname}${search}`; } else { this.win.location.reload(true); } } initModalEntry_(role) { const marketModalTemplate = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${role}"]` ); if (marketModalTemplate) { const tempParentNode = self.document.createElement('div'); const clonedTemplate = self.document.importNode( marketModalTemplate.content, true ); tempParentNode.appendChild(clonedTemplate); this.renderTemplateImg_(tempParentNode, MARKET_MODAL_FLAG, { src: this.ipMatchingMarket?.img, width: '80', height: '80', }); this.renderTemplateElement_( tempParentNode, MARKET_MODAL_COUNTRY_CODE, this.ipMatchingMarket?.name ); this.renderTemplateElement_( tempParentNode, MARKET_MODAL_CURRENCY_SYMBOL, this.ipMatchingMarket?.currency_with_symbol ); const lightbox = self.document.createElement('ljs-lightbox'); lightbox.setAttribute('layout', 'nodisplay'); lightbox.appendChild(tempParentNode.firstElementChild); self.document.body.appendChild(lightbox); SPZ.whenApiDefined(lightbox).then((apis) => { SPZCore.Dom.scopedQuerySelectorAll( lightbox, `[role="${MARKET_MODAL_CLOSE}"]` ).forEach((ele) => { ele.addEventListener('click', () => { this.setCookie_(COOKIE_TIPS_NAME, 1, COOKIE_TIPS_EXPIRES); apis.close(); }); }); const marketModalConfirmElement = SPZCore.Dom.scopedQuerySelector( lightbox, `[role="${MARKET_MODAL_CONFIRM}"]` ); if (marketModalConfirmElement && this.ipMatchingMarket?.url) { marketModalConfirmElement.addEventListener('click', () => { this.setCookie_(COOKIE_TIPS_NAME, 1, COOKIE_TIPS_EXPIRES); this.setCookie_(MARKET_COUNTRY_COOKIE, this.ipMatchingMarket?.name); this.handleChangeURL_(this.ipMatchingMarket?.url); }); } const marketModalReselectElement = SPZCore.Dom.scopedQuerySelector( lightbox, `[role="${MARKET_MODAL_RESELECT}"]` ); if (marketModalReselectElement) { marketModalReselectElement.addEventListener('click', () => { this.setCookie_(COOKIE_TIPS_NAME, 1, COOKIE_TIPS_EXPIRES); const marketReselectTemplate = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${MARKET_RESELECT_MODAL}"]` ); if (marketReselectTemplate && lightbox.firstElementChild) { const clonedTemplate = self.document.importNode( marketReselectTemplate.content, true ); const selectParent = SPZCore.Dom.scopedQuerySelector( clonedTemplate, `[role="${MARKET_MODAL_RESELECT_COUNTRY_SELECT}"]` ); if (selectParent) { this.createSelect_({ parent: selectParent, defaultValue: this.getDefaultCountryValue_(), dataList: this.marketCountryList.map( this.mapCountryRenderData_ ), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_COUNTRY_SELECT ), itemHandler: this.handleCountrySelectChange_.bind(this), }); } lightbox.replaceChild(clonedTemplate, lightbox.firstElementChild); SPZCore.Dom.scopedQuerySelectorAll( lightbox, `[role="${MARKET_MODAL_CLOSE}"]` ).forEach((ele) => { ele.addEventListener('click', () => { this.setCookie_(COOKIE_TIPS_NAME, 1, COOKIE_TIPS_EXPIRES); apis.close(); }); }); } }); } apis.open(); }); } } async getMarketThemeSettings_() { return this.xhr_.fetchJson(MARKET_THEME_SETTINGS).then((res) => { this.useCountrySelect_ = !!res.country_selector_enabled; this.useLanguageSelect_ = !!res.language_selector_enabled && this.global?.market?.market_id; this.useModal_ = !!res.redirect_pop_enabled; return res; }); } async getCountryList_() { return this.xhr_.fetchJson(MARKET_COUNTRIES).then((res) => { this.marketCountryList = res.data.length ? res.data : []; return res; }); } async getIpMatchingMarket_() { return this.xhr_.fetchJson(IP_MATCHING_MARKET, { method: 'POST', body: { stations: [], }, }); } async getMarketLanguages_(marketId) { return this.xhr_ .fetchJson(MARKET_LANGUAGES.replace(/:id/gim, marketId)) .then((res) => { this.marketLanguages = res?.languages?.length ? res.languages : []; return res; }); } hasCookie_(name) { const m = self.document.cookie .split(';') .filter((pair) => pair.trim().startsWith(name + '=')); return !!(m && m[0]); } getCookie_(name) { const m = self.document.cookie .split(';') .filter((pair) => pair.trim().startsWith(name + '=')); return m && m[0] ? m[0].split('=')[1] : null; } setCookie_(name, value, expires) { const expiresDate = new Date(Date.now() + expires).toGMTString(); self.document.cookie = `${name}=${encodeURIComponent( value )};expires=${expiresDate};path=/`; } } SPZ.defineElement('spz-custom-market', SpzCustomMarket); Region/Country Region/Country ( ) Language Language Switch to based on your location * Purchase with * Get shipping options for Cancel Switch Set to based on your location * Purchase with * Get shipping options for Continue Shopping Modify Country/Region Modify Country/Region Continue Shopping Cancel Region/Country US ( USD $ ) AD ( EUR € ) AT ( EUR € ) BE ( EUR € ) CY ( EUR € ) DE ( EUR € ) EE ( EUR € ) ES ( EUR € ) FI ( EUR € ) FR ( EUR € ) GR ( EUR € ) IE ( EUR € ) IT ( EUR € ) LT ( EUR € ) LU ( EUR € ) LV ( EUR € ) MC ( EUR € ) ME ( EUR € ) MT ( EUR € ) NL ( EUR € ) PT ( EUR € ) SI ( EUR € ) SK ( EUR € ) SM ( EUR € ) VA ( EUR € ) XK ( EUR € ) JP ( JPY ¥ ) GB ( GBP £ ) TH ( THB ฿ ) NZ ( NZD NZ$ ) AU ( AUD A$ ) CA ( CAD CA$ ) CH ( CHF CHF ) DK ( DKK kr ) SG ( SGD S$ ) DE ( EUR € ) US ( USD $ ) AD ( EUR € ) AT ( EUR € ) BE ( EUR € ) CY ( EUR € ) DE ( EUR € ) EE ( EUR € ) ES ( EUR € ) FI ( EUR € ) FR ( EUR € ) GR ( EUR € ) IE ( EUR € ) IT ( EUR € ) LT ( EUR € ) LU ( EUR € ) LV ( EUR € ) MC ( EUR € ) ME ( EUR € ) MT ( EUR € ) NL ( EUR € ) PT ( EUR € ) SI ( EUR € ) SK ( EUR € ) SM ( EUR € ) VA ( EUR € ) XK ( EUR € ) JP ( JPY ¥ ) GB ( GBP £ ) TH ( THB ฿ ) NZ ( NZD NZ$ ) AU ( AUD A$ ) CA ( CAD CA$ ) CH ( CHF CHF ) DK ( DKK kr ) SG ( SGD S$ ) English,Français,Deutsch,Italiano,Español,Português,dansk,日本語,ไทย const marketSlot = document.querySelector(".plugin_c_market"); if(marketSlot) { marketSlot.remove(); } const SITE = (window.C_SETTINGS || window[atob('U0hPUExBWlpB')])?.routes?.root || ''; const MARKET_THEME_SETTINGS = `${SITE}/api/markets/theme_setting`; const MARKET_COUNTRIES = `${SITE}/api/markets/countries`; const IP_MATCHING_MARKET = `${SITE}/api/front/station`; const MARKET_LANGUAGES = `${SITE}/api/markets/:id/active_languages`; const URL_REDIRECT = '_market_redirected'; const COOKIE_TIPS_NAME = 'market_no_tips'; const COOKIE_TIPS_EXPIRES = 1000 * 60 * 60 * 24 * 14; const MARKET_COUNTRY_COOKIE = '_shoplazza_market_country'; const MARKET_MODAL_LOADED = '__market_modal_loaded__'; const PROPERTY_SELECTED = 'selected'; const MARKET_PC_HEADER_TRIGGER = 'market-pc-header-trigger'; const MARKET_PC_HEADER_COUNTRY_SELECT_TITLE = 'market-pc-header-country-select-title'; const MARKET_PC_HEADER_LANGUAGE_SELECT_TITLE = 'market-pc-header-language-select-title'; const MARKET_PC_HEADER_LANGUAGE_SELECT_SUB_TITLE = 'market-pc-header-language-select-sub-title'; const MARKET_PC_HEADER_COUNTRY_SELECT_SUB_TITLE = 'market-pc-header-country-select-sub-title'; const MARKET_FLAG = 'market-flag'; const MARKET_SELECT_VALUE = 'market-select-value'; const MARKET_CURRENCY = 'market-currency'; const MARKET_CURRENCY_SYMBOL = 'market-currency-symbol'; const MARKET_SELECT_ITEM = 'market-select-item'; const MARKET_SELECT_ITEM_ID = 'market-select-item-id'; const MARKET_SELECT_LIST = 'market-select-list'; const MARKET_LANGUAGE_SELECT = 'market-language-select'; const MARKET_COUNTRY_SELECT = 'market-country-select'; const MARKET_MODAL = 'market-modal'; const MARKET_GATEWAY_REDIRECT_MODAL = 'market-gateway-redirect-modal'; const MARKET_RESELECT_MODAL = 'market-reselect-modal'; const MARKET_MODAL_FLAG = 'market-modal-flag'; const MARKET_MODAL_COUNTRY_CODE = 'market-modal-country-code'; const MARKET_MODAL_CURRENCY_SYMBOL = 'market-modal-currency-symbol'; const MARKET_MODAL_CLOSE = 'market-modal-close'; const MARKET_MODAL_CONFIRM = 'market-modal-confirm'; const MARKET_MODAL_RESELECT = 'market-modal-reselect'; const MARKET_MODAL_RESELECT_COUNTRY_SELECT = 'market-modal-reselect-country-select'; const DATA_SECTION_TYPE = 'data-section-type'; const SECTION_TYPE_HEADER = 'header'; const SECTION_TYPE_FOOTER = 'footer'; class SpzCustomMarket extends SPZ.BaseElement { constructor(element) { super(element); this.global = null; this.useCountrySelect_ = false; this.useLanguageSelect_ = false; this.useModal_ = false; this.isSingleSelectMode_ = false; this.blockSectionPosition_ = ''; this.isEditMode = false; this.ipMatchingMarket = null; this.marketCountryList = []; this.marketLanguages = []; this.toast = null; } static deferredMount() { return false; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { console.debug('Geolocation'); this.xhr_ = SPZServices.xhrFor(this.win); const platform = SPZServices.platformFor(this.win); this.isIOS_ = platform.isIos(); this.action_ = SPZServices.actionServiceForDoc(this.element); this.global = this.win.C_SETTINGS || this.win[atob('U0hPUExBWlpB')]; this.isEditMode = new URLSearchParams(this.win.location.search).get('preview_theme_id') && new URLSearchParams(this.win.location.search).get('oseid'); this.init_(); } showToast_(content) { if (!this.toast) { this.toast = self.document.createElement('ljs-toast'); this.toast.setAttribute('layout', 'nodisplay'); this.toast.setAttribute('hidden', ''); this.toast.setAttribute('duration', '2000'); this.element.appendChild(this.toast); } SPZ.whenApiDefined(this.toast).then((apis) => { apis.showToast(content); }); } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, `${TAG}.${name}`, data); this.action_.trigger(this.element, name, event); } findBlockSectionPosition() { let current = this.element; while (current) { const dataSectionType = current.getAttribute(DATA_SECTION_TYPE); if ( dataSectionType === SECTION_TYPE_HEADER || dataSectionType === SECTION_TYPE_FOOTER ) { return dataSectionType; } current = current.parentElement; } return ''; } async initSettings_() { await this.getMarketThemeSettings_(); if (this.useCountrySelect_) { this.element.setAttribute('use-country-select', true); } if (this.useLanguageSelect_) { this.element.setAttribute('use-language-select', true); } if (this.useModal_) { this.element.setAttribute('use-modal', true); } if ( (this.useCountrySelect_ && !this.useLanguageSelect_) || (!this.useCountrySelect_ && this.useLanguageSelect_) ) { this.isSingleSelectMode_ = true; } this.blockSectionPosition_ = this.findBlockSectionPosition(); this.isPCLayout_ = this.win.matchMedia('(min-width: 960px)').matches; } renderMarketSelectTemplateNode_(clonedTemplate, data) { this.renderTemplateImg_(clonedTemplate, MARKET_FLAG, { src: data?.flag, width: '24', height: '24', }); this.renderTemplateElement_( clonedTemplate, MARKET_SELECT_VALUE, data.value ); this.renderTemplateElement_( clonedTemplate, MARKET_CURRENCY, data?.currency ); this.renderTemplateElement_( clonedTemplate, MARKET_CURRENCY_SYMBOL, data?.currencySymbol ); } bindDropdownOpenClickEvent_(triggerElement, dropdown) { if (!triggerElement) return; const triggerOpen = () => { SPZ.whenApiDefined(dropdown).then((apis) => { if (!dropdown.hasAttribute('open')) { apis.open(triggerElement); } }); }; if (this.isIOS_) { triggerElement.addEventListener('touchstart', triggerOpen); } else { triggerElement.addEventListener('click', triggerOpen); } } createDropdown_() { const dropdown = self.document.createElement('ljs-dropdown'); dropdown.setAttribute('layout', 'nodisplay'); if (this.blockSectionPosition_ === 'header') { dropdown.setAttribute('overlay-style', 'top: 4px;'); dropdown.setAttribute('placement', 'bottomRight'); } else if (this.blockSectionPosition_ === 'footer') { dropdown.setAttribute('overlay-style', 'top: -4px;'); dropdown.setAttribute('placement', 'top'); } return dropdown; } createDropdownIcon_() { const svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svgElement.setAttribute("class", "market-rotate-180"); svgElement.setAttribute("width", "16"); svgElement.setAttribute("height", "16"); const path1 = document.createElementNS("http://www.w3.org/2000/svg", "path"); path1.setAttribute("d", "M7.47 5.172a.75.75 0 0 1 1.06 0l4.596 4.596a.75.75 0 1 1-1.06 1.06L7.468 6.232a.75.75 0 0 1 0-1.06Z"); path1.setAttribute("fill", "currentColor"); const path2 = document.createElementNS("http://www.w3.org/2000/svg", "path"); path2.setAttribute("d", "M8.533 5.172a.75.75 0 0 1 0 1.06l-4.596 4.596a.75.75 0 1 1-1.061-1.06l4.596-4.596a.75.75 0 0 1 1.06 0Z"); path2.setAttribute("fill", "currentColor"); svgElement.appendChild(path1); svgElement.appendChild(path2); return svgElement; } renderDropdownListWithClickEvent_({ triggerElement, dataList, subTitleRole, listElementWithTemplate, defaultValue, itemHandler, shouldUpdateSelectedItem = false, }) { const dropdown = this.createDropdown_(); const itemTemplate = SPZCore.Dom.scopedQuerySelector( listElementWithTemplate, 'template' ); const clonedItemTemplate = itemTemplate.cloneNode(true); const fragment = self.document.createDocumentFragment(); dataList.forEach((data) => { const tempParentNode = self.document.createElement('div'); const clonedTemplate = self.document.importNode( clonedItemTemplate.content, true ); tempParentNode.appendChild(clonedTemplate); tempParentNode.firstElementChild.classList.add( 'market-select-item' ); this.renderMarketSelectTemplateNode_(tempParentNode, data); const selectItemElement = SPZCore.Dom.scopedQuerySelector( tempParentNode, `[role="${MARKET_SELECT_ITEM}"]` ); if (!selectItemElement) { return; } if (defaultValue === data.value) { if (shouldUpdateSelectedItem) { const clonedSelectItemElement = selectItemElement.cloneNode(true); triggerElement.replaceChild( clonedSelectItemElement, triggerElement.firstElementChild ); } selectItemElement.setAttribute(PROPERTY_SELECTED, ''); } selectItemElement.setAttribute(MARKET_SELECT_ITEM_ID, data.value); fragment.appendChild(tempParentNode.firstElementChild); }); let value = defaultValue; listElementWithTemplate.addEventListener( 'click', (e) => { if (this.isEditMode) { this.showToast_('编辑器下不支持切换国家'); SPZ.whenApiDefined(dropdown).then((apis) => { apis.close(); }); return; } let targetElement = e.target; while (targetElement) { if ( !targetElement || targetElement.getAttribute(MARKET_SELECT_ITEM_ID) ) { break; } targetElement = targetElement.parentNode; } if ( !targetElement || !targetElement.hasAttribute(MARKET_SELECT_ITEM_ID) ) { return; } const selectValue = targetElement.getAttribute(MARKET_SELECT_ITEM_ID); if (value === selectValue) { SPZ.whenApiDefined(dropdown).then((apis) => { apis.close(); }); return; } const selectedData = dataList.find((c) => c.value === selectValue); if (shouldUpdateSelectedItem) { const tempParentNode = self.document.createElement('div'); const clonedTemplate = self.document.importNode( clonedItemTemplate.content, true ); tempParentNode.appendChild(clonedTemplate); this.renderMarketSelectTemplateNode_(tempParentNode, selectedData); tempParentNode.firstElementChild.classList.add( 'market-select-item' ); triggerElement.replaceChild( tempParentNode.firstElementChild, triggerElement.firstElementChild ); } value = selectValue; itemHandler?.(selectedData); SPZ.whenApiDefined(dropdown).then((apis) => { apis.close(); }); }, false ); listElementWithTemplate.removeChild(itemTemplate); listElementWithTemplate.appendChild(fragment); listElementWithTemplate.classList.add('market-select-list'); dropdown.appendChild(listElementWithTemplate); if (subTitleRole) { this.renderSelectTitle_(dropdown, subTitleRole); } return dropdown; } createSelect_({ parent, defaultValue, dataList, listElementWithTemplate, itemHandler, titleRole, }) { const triggerElement = self.document.createElement('div'); triggerElement.classList.add('market-select'); const displayElement = self.document.createElement('div'); triggerElement.appendChild(displayElement); triggerElement.appendChild(this.createDropdownIcon_()); const dropdown = this.renderDropdownListWithClickEvent_({ triggerElement, dataList, listElementWithTemplate, defaultValue, itemHandler, shouldUpdateSelectedItem: true, }); this.bindDropdownOpenClickEvent_(triggerElement, dropdown); const dropdownContainer = self.document.createElement('div'); dropdownContainer.appendChild(triggerElement); dropdownContainer.appendChild(dropdown); dropdownContainer.classList.add('market-select-container'); this.renderSelectTitle_(dropdownContainer, titleRole); parent.appendChild(dropdownContainer); } getListElementWithTemplate_(role) { const template = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${role}"]` ); if (template) { const clonedTemplate = template.cloneNode(true); const tempParent = self.document.createElement("div"); tempParent.appendChild(clonedTemplate.content); const listElementWithTemplate = SPZCore.Dom.scopedQuerySelector( tempParent, `[role="${MARKET_SELECT_LIST}"]` ); return listElementWithTemplate; } return null; } renderSelectTitle_(parent, role) { if (!parent || !role) { return; } const template = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${role}"]` ); const content = self.document.importNode(template.content, true); parent.insertBefore(content, parent.firstElementChild); parent.firstElementChild.classList.add( role.includes('sub') ? 'market-pc-header-select-sub-title' : 'market-pc-header-select-title' ); } initSelect_(rootNode, options) { const parent = rootNode || this.element; if (this.useCountrySelect_) { this.createSelect_({ parent, titleRole: options?.shouldRenderSelectTitle ? MARKET_PC_HEADER_COUNTRY_SELECT_TITLE : undefined, defaultValue: this.getDefaultCountryValue_(), dataList: this.marketCountryList.map(this.mapCountryRenderData_), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_COUNTRY_SELECT ), itemHandler: this.handleCountrySelectChange_.bind(this), }); } if (this.useLanguageSelect_) { this.createSelect_({ parent, titleRole: options?.shouldRenderSelectTitle ? MARKET_PC_HEADER_LANGUAGE_SELECT_TITLE : undefined, defaultValue: this.getDefaultLanguageValue_(), dataList: this.marketLanguages.map(this.mapLanguageRenderData_), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_LANGUAGE_SELECT ), itemHandler: this.handleLanguageSelectChange_.bind(this), }); } } initPcHeaderTriggerElement() { const headerTriggerElementTemplate = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${MARKET_PC_HEADER_TRIGGER}"]` ); const headerTriggerElement = self.document.importNode( headerTriggerElementTemplate.content, true ); const parentDivElement = self.document.createElement('div'); parentDivElement.setAttribute('role', MARKET_PC_HEADER_TRIGGER); parentDivElement.appendChild(headerTriggerElement); this.element.removeChild(headerTriggerElementTemplate); return parentDivElement; } initPanelWithSelect_() { const triggerElement = this.initPcHeaderTriggerElement(); const dropdown = this.createDropdown_(); const panelElement = self.document.createElement('div'); panelElement.classList.add('market-panel'); this.initSelect_(panelElement, {shouldRenderSelectTitle: true}); dropdown.appendChild(panelElement); this.bindDropdownOpenClickEvent_(triggerElement, dropdown); this.element.appendChild(triggerElement); this.element.insertBefore(dropdown, triggerElement); } initSingleSelectDropdown_() { const triggerElement = this.initPcHeaderTriggerElement(); let dropdown; if (this.useCountrySelect_) { dropdown = this.renderDropdownListWithClickEvent_({ triggerElement, subTitleRole: MARKET_PC_HEADER_COUNTRY_SELECT_SUB_TITLE, dataList: this.marketCountryList.map(this.mapCountryRenderData_), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_COUNTRY_SELECT ), defaultValue: this.getDefaultCountryValue_(), itemHandler: this.handleCountrySelectChange_.bind(this), }); } else if (this.useLanguageSelect_) { dropdown = this.renderDropdownListWithClickEvent_({ triggerElement, subTitleRole: MARKET_PC_HEADER_LANGUAGE_SELECT_SUB_TITLE, dataList: this.marketLanguages.map(this.mapLanguageRenderData_), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_LANGUAGE_SELECT ), defaultValue: this.getDefaultLanguageValue_(), itemHandler: this.handleLanguageSelectChange_.bind(this), }); } if (dropdown) { this.bindDropdownOpenClickEvent_(triggerElement, dropdown); this.element.appendChild(triggerElement); this.element.appendChild(dropdown); } } initEntry_() { if (this.blockSectionPosition_ === SECTION_TYPE_HEADER) { if (this.isSingleSelectMode_) { this.initSingleSelectDropdown_(); } else if (this.useCountrySelect_ && this.useLanguageSelect_) { this.initPanelWithSelect_(); } } this.initSelect_(this.element); } async initData_() { const promises = []; if (this.useCountrySelect_ || this.useModal_) { promises.push(this.getCountryList_(), this.getIpMatchingMarket_()); } if (this.useLanguageSelect_) { promises.push(this.getMarketLanguages_(this.global.market.market_id)); } return Promise.all(promises).then((results) => { const ipMatchingMarket = results.find((result) => result.hasOwnProperty('matching_station') ); const marketCountryList = results.find((result) => result.hasOwnProperty('data') ); if (ipMatchingMarket && marketCountryList) { this.ipMatchingMarket = ipMatchingMarket?.matching_station?.find?.( (item) => item.type === 'multiple_market' ) || { img: marketCountryList.length ? marketCountryList?.[0]?.detail && marketCountryList[0].detail?.flag : '', }; } }); } initModal_() { if ( this.isEditMode || !this.ipMatchingMarket?.market_id || !this.useModal_ || this.hasCookie_(COOKIE_TIPS_NAME) || this.win[MARKET_MODAL_LOADED] ) { return; } this.win[MARKET_MODAL_LOADED] = true; const redirectParam = new URLSearchParams(this.win.location.search).get( URL_REDIRECT ); if (redirectParam) { this.initModalEntry_(MARKET_GATEWAY_REDIRECT_MODAL); } else if ( this.ipMatchingMarket.market_id !== this.global?.market?.market_id ) { this.initModalEntry_(MARKET_MODAL); } } async init_() { await this.initSettings_(); await this.initData_(); this.initEntry_(); this.initModal_(); } getDefaultCountryValue_() { return this.getCookie_(MARKET_COUNTRY_COOKIE) || this.marketCountryList[0]?.country_code; } mapCountryRenderData_(country) { return { flag: country?.detail?.flag || '', value: country?.country_code, currency: country?.currency, currencySymbol: country?.symbol?.val || '', url: country?.url, }; } handleCountrySelectChange_(selectedData) { this.setCookie_(MARKET_COUNTRY_COOKIE, selectedData.value); this.handleChangeURL_(selectedData.url); } getDefaultLanguageValue_() { return this.marketLanguages?.find?.( (lang) => lang.code === this.global?.market?.market_lang )?.name; } mapLanguageRenderData_(language) { return { value: language.name, url: language.url, }; } handleLanguageSelectChange_(selectedData) { this.handleChangeURL_(selectedData.url); } renderTemplateElement_(parent, role, value) { const elements = SPZCore.Dom.scopedQuerySelectorAll( parent, `[role="${role}"]` ); elements.forEach((element) => { if (element && value) { element.innerHTML = value; } }); } renderTemplateImg_(parent, role, options) { const flagElement = SPZCore.Dom.scopedQuerySelector( parent, `[role="${role}"]` ); if (flagElement && options?.src && options?.height && options?.width) { const spzImg = self.document.createElement('ljs-img'); spzImg.setAttribute('src', options.src); spzImg.setAttribute('layout', 'responsive'); spzImg.setAttribute('width', options.width); spzImg.setAttribute('height', options.height); spzImg.setAttribute( 'style', `width: ${options.width}px; height: ${options.height}px;` ); flagElement.appendChild(spzImg); } } handleChangeURL_(url) { if (!!url) { let {origin, pathname, search} = this.win.location; pathname = pathname.replace(SITE, url != '/' ? url : ''); this.win.location.href = `${origin}${pathname}${search}`; } else { this.win.location.reload(true); } } initModalEntry_(role) { const marketModalTemplate = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${role}"]` ); if (marketModalTemplate) { const tempParentNode = self.document.createElement('div'); const clonedTemplate = self.document.importNode( marketModalTemplate.content, true ); tempParentNode.appendChild(clonedTemplate); this.renderTemplateImg_(tempParentNode, MARKET_MODAL_FLAG, { src: this.ipMatchingMarket?.img, width: '80', height: '80', }); this.renderTemplateElement_( tempParentNode, MARKET_MODAL_COUNTRY_CODE, this.ipMatchingMarket?.name ); this.renderTemplateElement_( tempParentNode, MARKET_MODAL_CURRENCY_SYMBOL, this.ipMatchingMarket?.currency_with_symbol ); const lightbox = self.document.createElement('ljs-lightbox'); lightbox.setAttribute('layout', 'nodisplay'); lightbox.appendChild(tempParentNode.firstElementChild); self.document.body.appendChild(lightbox); SPZ.whenApiDefined(lightbox).then((apis) => { SPZCore.Dom.scopedQuerySelectorAll( lightbox, `[role="${MARKET_MODAL_CLOSE}"]` ).forEach((ele) => { ele.addEventListener('click', () => { this.setCookie_(COOKIE_TIPS_NAME, 1, COOKIE_TIPS_EXPIRES); apis.close(); }); }); const marketModalConfirmElement = SPZCore.Dom.scopedQuerySelector( lightbox, `[role="${MARKET_MODAL_CONFIRM}"]` ); if (marketModalConfirmElement && this.ipMatchingMarket?.url) { marketModalConfirmElement.addEventListener('click', () => { this.setCookie_(COOKIE_TIPS_NAME, 1, COOKIE_TIPS_EXPIRES); this.setCookie_(MARKET_COUNTRY_COOKIE, this.ipMatchingMarket?.name); this.handleChangeURL_(this.ipMatchingMarket?.url); }); } const marketModalReselectElement = SPZCore.Dom.scopedQuerySelector( lightbox, `[role="${MARKET_MODAL_RESELECT}"]` ); if (marketModalReselectElement) { marketModalReselectElement.addEventListener('click', () => { this.setCookie_(COOKIE_TIPS_NAME, 1, COOKIE_TIPS_EXPIRES); const marketReselectTemplate = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${MARKET_RESELECT_MODAL}"]` ); if (marketReselectTemplate && lightbox.firstElementChild) { const clonedTemplate = self.document.importNode( marketReselectTemplate.content, true ); const selectParent = SPZCore.Dom.scopedQuerySelector( clonedTemplate, `[role="${MARKET_MODAL_RESELECT_COUNTRY_SELECT}"]` ); if (selectParent) { this.createSelect_({ parent: selectParent, defaultValue: this.getDefaultCountryValue_(), dataList: this.marketCountryList.map( this.mapCountryRenderData_ ), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_COUNTRY_SELECT ), itemHandler: this.handleCountrySelectChange_.bind(this), }); } lightbox.replaceChild(clonedTemplate, lightbox.firstElementChild); SPZCore.Dom.scopedQuerySelectorAll( lightbox, `[role="${MARKET_MODAL_CLOSE}"]` ).forEach((ele) => { ele.addEventListener('click', () => { this.setCookie_(COOKIE_TIPS_NAME, 1, COOKIE_TIPS_EXPIRES); apis.close(); }); }); } }); } apis.open(); }); } } async getMarketThemeSettings_() { return this.xhr_.fetchJson(MARKET_THEME_SETTINGS).then((res) => { this.useCountrySelect_ = !!res.country_selector_enabled; this.useLanguageSelect_ = !!res.language_selector_enabled && this.global?.market?.market_id; this.useModal_ = !!res.redirect_pop_enabled; return res; }); } async getCountryList_() { return this.xhr_.fetchJson(MARKET_COUNTRIES).then((res) => { this.marketCountryList = res.data.length ? res.data : []; return res; }); } async getIpMatchingMarket_() { return this.xhr_.fetchJson(IP_MATCHING_MARKET, { method: 'POST', body: { stations: [], }, }); } async getMarketLanguages_(marketId) { return this.xhr_ .fetchJson(MARKET_LANGUAGES.replace(/:id/gim, marketId)) .then((res) => { this.marketLanguages = res?.languages?.length ? res.languages : []; return res; }); } hasCookie_(name) { const m = self.document.cookie .split(';') .filter((pair) => pair.trim().startsWith(name + '=')); return !!(m && m[0]); } getCookie_(name) { const m = self.document.cookie .split(';') .filter((pair) => pair.trim().startsWith(name + '=')); return m && m[0] ? m[0].split('=')[1] : null; } setCookie_(name, value, expires) { const expiresDate = new Date(Date.now() + expires).toGMTString(); self.document.cookie = `${name}=${encodeURIComponent( value )};expires=${expiresDate};path=/`; } } SPZ.defineElement('spz-custom-market', SpzCustomMarket); Region/Country Region/Country ( ) Language Language Switch to based on your location * Purchase with * Get shipping options for Cancel Switch Set to based on your location * Purchase with * Get shipping options for Continue Shopping Modify Country/Region Modify Country/Region Continue Shopping Cancel Region/Country US ( USD $ ) AD ( EUR € ) AT ( EUR € ) BE ( EUR € ) CY ( EUR € ) DE ( EUR € ) EE ( EUR € ) ES ( EUR € ) FI ( EUR € ) FR ( EUR € ) GR ( EUR € ) IE ( EUR € ) IT ( EUR € ) LT ( EUR € ) LU ( EUR € ) LV ( EUR € ) MC ( EUR € ) ME ( EUR € ) MT ( EUR € ) NL ( EUR € ) PT ( EUR € ) SI ( EUR € ) SK ( EUR € ) SM ( EUR € ) VA ( EUR € ) XK ( EUR € ) JP ( JPY ¥ ) GB ( GBP £ ) TH ( THB ฿ ) NZ ( NZD NZ$ ) AU ( AUD A$ ) CA ( CAD CA$ ) CH ( CHF CHF ) DK ( DKK kr ) SG ( SGD S$ ) DE ( EUR € ) US ( USD $ ) AD ( EUR € ) AT ( EUR € ) BE ( EUR € ) CY ( EUR € ) DE ( EUR € ) EE ( EUR € ) ES ( EUR € ) FI ( EUR € ) FR ( EUR € ) GR ( EUR € ) IE ( EUR € ) IT ( EUR € ) LT ( EUR € ) LU ( EUR € ) LV ( EUR € ) MC ( EUR € ) ME ( EUR € ) MT ( EUR € ) NL ( EUR € ) PT ( EUR € ) SI ( EUR € ) SK ( EUR € ) SM ( EUR € ) VA ( EUR € ) XK ( EUR € ) JP ( JPY ¥ ) GB ( GBP £ ) TH ( THB ฿ ) NZ ( NZD NZ$ ) AU ( AUD A$ ) CA ( CAD CA$ ) CH ( CHF CHF ) DK ( DKK kr ) SG ( SGD S$ ) English,Français,Deutsch,Italiano,Español,Português,dansk,日本語,ไทย * Log in * Create an account ${data.data && data.data.count} ${(function(){ if (data === undefined || typeof data !== 'string' || data == '') return ''; const keyword = encodeURIComponent(data); return ` View more Your search for '${data}' did not yield any results. ` })()} ${item} Search Recently searched * ${item} Hot searches * ${item.word} Results ${item.highlightHtml} * SHOP ALL * SHOP ALL * Tops * Tops * Short Sleeve Shirts * Long Sleeve Shirts * Hoodies & Sweatshirts * Polo Shirts👕 * V-Neck Suit Vest/Tuxedo Waistcoat And Tie * 100% Cotton Tees * Long Sleeved T-Shirt * Shirt with Breast Pocket * Bottoms * Bottoms * Men's Short Sets * Shorts * Accessories * Accessories * Hats * Scarf🧣 * Sunglasses * Belts & Suspenders * Shoes * Chic Matching Set * Dresses 👗 * HOT SALE * HOLIDAY SHIRTS🎉 * HOLIDAY SHIRTS🎉 * Patriots' Day Shirts * Cute Costume Shirts 🤠 * LGBT Pride Month 🌈 * Columbus Day ☠️ * Hippie Festival Shirts 🐙 * Halloween's Day Shirts 🎃 * Thanksgiving Day Tops 🦃 * Christmas Day Shirts 🎅 * New Year Shirts 🎉 * Mardi Gras Shirts 🤡 * Valentine's Day Shirts 💕 * St. Patrick's Day Shirts ☘ * Easter Day Shirts 🐇 * Cinco De Mayo 💃 * Happy Father's Day🎁 * NEW ARRIVALS * NEW ARRIVALS * SHOP BY CATRGORY * SHOP BY CATRGORY * New in Short Sleeve Shirts * New in Hawaiian Shirts * New in Polos * New in Shorts * Short Sleeve Shirts * Short Sleeve Shirts * Shop By Category * Shop By Category * Short Sleeve Shirts * Shirt with Breast Pocket * Tees * Polos * Tuxedo Waistcoat And Tie * Shop By Features * Shop By Features * Funny Holiday * 70's Style 🎵 * 50‘s Style🔥 * Ukiyo-e 🌊 * Cat 😸 * Car 🏁🏎 * Music 🎸 * Flag * Resort🏖️ * Beauties Print * Costume Shirts🦸♂ * Mid Century Style * Oriental Culture Inspired 🏮 * Hawaiian Shirts 🏄 * LONG SLEEVE TOPS * LONG SLEEVE TOPS * Long Sleeve Shirts * Hoodies & Sweatshirts * Long Sleeve Polos * Long Sleeve T-Shirts * BOTTOMS & SETS * BOTTOMS & SETS * Summer Chic Set * Fashion Short Sets * Shorts * ⚡CLEARANCE const marketSlot = document.querySelector(".plugin_c_market"); if(marketSlot) { marketSlot.remove(); } const SITE = (window.C_SETTINGS || window[atob('U0hPUExBWlpB')])?.routes?.root || ''; const MARKET_THEME_SETTINGS = `${SITE}/api/markets/theme_setting`; const MARKET_COUNTRIES = `${SITE}/api/markets/countries`; const IP_MATCHING_MARKET = `${SITE}/api/front/station`; const MARKET_LANGUAGES = `${SITE}/api/markets/:id/active_languages`; const URL_REDIRECT = '_market_redirected'; const COOKIE_TIPS_NAME = 'market_no_tips'; const COOKIE_TIPS_EXPIRES = 1000 * 60 * 60 * 24 * 14; const MARKET_COUNTRY_COOKIE = '_shoplazza_market_country'; const MARKET_MODAL_LOADED = '__market_modal_loaded__'; const PROPERTY_SELECTED = 'selected'; const MARKET_PC_HEADER_TRIGGER = 'market-pc-header-trigger'; const MARKET_PC_HEADER_COUNTRY_SELECT_TITLE = 'market-pc-header-country-select-title'; const MARKET_PC_HEADER_LANGUAGE_SELECT_TITLE = 'market-pc-header-language-select-title'; const MARKET_PC_HEADER_LANGUAGE_SELECT_SUB_TITLE = 'market-pc-header-language-select-sub-title'; const MARKET_PC_HEADER_COUNTRY_SELECT_SUB_TITLE = 'market-pc-header-country-select-sub-title'; const MARKET_FLAG = 'market-flag'; const MARKET_SELECT_VALUE = 'market-select-value'; const MARKET_CURRENCY = 'market-currency'; const MARKET_CURRENCY_SYMBOL = 'market-currency-symbol'; const MARKET_SELECT_ITEM = 'market-select-item'; const MARKET_SELECT_ITEM_ID = 'market-select-item-id'; const MARKET_SELECT_LIST = 'market-select-list'; const MARKET_LANGUAGE_SELECT = 'market-language-select'; const MARKET_COUNTRY_SELECT = 'market-country-select'; const MARKET_MODAL = 'market-modal'; const MARKET_GATEWAY_REDIRECT_MODAL = 'market-gateway-redirect-modal'; const MARKET_RESELECT_MODAL = 'market-reselect-modal'; const MARKET_MODAL_FLAG = 'market-modal-flag'; const MARKET_MODAL_COUNTRY_CODE = 'market-modal-country-code'; const MARKET_MODAL_CURRENCY_SYMBOL = 'market-modal-currency-symbol'; const MARKET_MODAL_CLOSE = 'market-modal-close'; const MARKET_MODAL_CONFIRM = 'market-modal-confirm'; const MARKET_MODAL_RESELECT = 'market-modal-reselect'; const MARKET_MODAL_RESELECT_COUNTRY_SELECT = 'market-modal-reselect-country-select'; const DATA_SECTION_TYPE = 'data-section-type'; const SECTION_TYPE_HEADER = 'header'; const SECTION_TYPE_FOOTER = 'footer'; class SpzCustomMarket extends SPZ.BaseElement { constructor(element) { super(element); this.global = null; this.useCountrySelect_ = false; this.useLanguageSelect_ = false; this.useModal_ = false; this.isSingleSelectMode_ = false; this.blockSectionPosition_ = ''; this.isEditMode = false; this.ipMatchingMarket = null; this.marketCountryList = []; this.marketLanguages = []; this.toast = null; } static deferredMount() { return false; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { console.debug('Geolocation'); this.xhr_ = SPZServices.xhrFor(this.win); const platform = SPZServices.platformFor(this.win); this.isIOS_ = platform.isIos(); this.action_ = SPZServices.actionServiceForDoc(this.element); this.global = this.win.C_SETTINGS || this.win[atob('U0hPUExBWlpB')]; this.isEditMode = new URLSearchParams(this.win.location.search).get('preview_theme_id') && new URLSearchParams(this.win.location.search).get('oseid'); this.init_(); } showToast_(content) { if (!this.toast) { this.toast = self.document.createElement('ljs-toast'); this.toast.setAttribute('layout', 'nodisplay'); this.toast.setAttribute('hidden', ''); this.toast.setAttribute('duration', '2000'); this.element.appendChild(this.toast); } SPZ.whenApiDefined(this.toast).then((apis) => { apis.showToast(content); }); } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, `${TAG}.${name}`, data); this.action_.trigger(this.element, name, event); } findBlockSectionPosition() { let current = this.element; while (current) { const dataSectionType = current.getAttribute(DATA_SECTION_TYPE); if ( dataSectionType === SECTION_TYPE_HEADER || dataSectionType === SECTION_TYPE_FOOTER ) { return dataSectionType; } current = current.parentElement; } return ''; } async initSettings_() { await this.getMarketThemeSettings_(); if (this.useCountrySelect_) { this.element.setAttribute('use-country-select', true); } if (this.useLanguageSelect_) { this.element.setAttribute('use-language-select', true); } if (this.useModal_) { this.element.setAttribute('use-modal', true); } if ( (this.useCountrySelect_ && !this.useLanguageSelect_) || (!this.useCountrySelect_ && this.useLanguageSelect_) ) { this.isSingleSelectMode_ = true; } this.blockSectionPosition_ = this.findBlockSectionPosition(); this.isPCLayout_ = this.win.matchMedia('(min-width: 960px)').matches; } renderMarketSelectTemplateNode_(clonedTemplate, data) { this.renderTemplateImg_(clonedTemplate, MARKET_FLAG, { src: data?.flag, width: '24', height: '24', }); this.renderTemplateElement_( clonedTemplate, MARKET_SELECT_VALUE, data.value ); this.renderTemplateElement_( clonedTemplate, MARKET_CURRENCY, data?.currency ); this.renderTemplateElement_( clonedTemplate, MARKET_CURRENCY_SYMBOL, data?.currencySymbol ); } bindDropdownOpenClickEvent_(triggerElement, dropdown) { if (!triggerElement) return; const triggerOpen = () => { SPZ.whenApiDefined(dropdown).then((apis) => { if (!dropdown.hasAttribute('open')) { apis.open(triggerElement); } }); }; if (this.isIOS_) { triggerElement.addEventListener('touchstart', triggerOpen); } else { triggerElement.addEventListener('click', triggerOpen); } } createDropdown_() { const dropdown = self.document.createElement('ljs-dropdown'); dropdown.setAttribute('layout', 'nodisplay'); if (this.blockSectionPosition_ === 'header') { dropdown.setAttribute('overlay-style', 'top: 4px;'); dropdown.setAttribute('placement', 'bottomRight'); } else if (this.blockSectionPosition_ === 'footer') { dropdown.setAttribute('overlay-style', 'top: -4px;'); dropdown.setAttribute('placement', 'top'); } return dropdown; } createDropdownIcon_() { const svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svgElement.setAttribute("class", "market-rotate-180"); svgElement.setAttribute("width", "16"); svgElement.setAttribute("height", "16"); const path1 = document.createElementNS("http://www.w3.org/2000/svg", "path"); path1.setAttribute("d", "M7.47 5.172a.75.75 0 0 1 1.06 0l4.596 4.596a.75.75 0 1 1-1.06 1.06L7.468 6.232a.75.75 0 0 1 0-1.06Z"); path1.setAttribute("fill", "currentColor"); const path2 = document.createElementNS("http://www.w3.org/2000/svg", "path"); path2.setAttribute("d", "M8.533 5.172a.75.75 0 0 1 0 1.06l-4.596 4.596a.75.75 0 1 1-1.061-1.06l4.596-4.596a.75.75 0 0 1 1.06 0Z"); path2.setAttribute("fill", "currentColor"); svgElement.appendChild(path1); svgElement.appendChild(path2); return svgElement; } renderDropdownListWithClickEvent_({ triggerElement, dataList, subTitleRole, listElementWithTemplate, defaultValue, itemHandler, shouldUpdateSelectedItem = false, }) { const dropdown = this.createDropdown_(); const itemTemplate = SPZCore.Dom.scopedQuerySelector( listElementWithTemplate, 'template' ); const clonedItemTemplate = itemTemplate.cloneNode(true); const fragment = self.document.createDocumentFragment(); dataList.forEach((data) => { const tempParentNode = self.document.createElement('div'); const clonedTemplate = self.document.importNode( clonedItemTemplate.content, true ); tempParentNode.appendChild(clonedTemplate); tempParentNode.firstElementChild.classList.add( 'market-select-item' ); this.renderMarketSelectTemplateNode_(tempParentNode, data); const selectItemElement = SPZCore.Dom.scopedQuerySelector( tempParentNode, `[role="${MARKET_SELECT_ITEM}"]` ); if (!selectItemElement) { return; } if (defaultValue === data.value) { if (shouldUpdateSelectedItem) { const clonedSelectItemElement = selectItemElement.cloneNode(true); triggerElement.replaceChild( clonedSelectItemElement, triggerElement.firstElementChild ); } selectItemElement.setAttribute(PROPERTY_SELECTED, ''); } selectItemElement.setAttribute(MARKET_SELECT_ITEM_ID, data.value); fragment.appendChild(tempParentNode.firstElementChild); }); let value = defaultValue; listElementWithTemplate.addEventListener( 'click', (e) => { if (this.isEditMode) { this.showToast_('编辑器下不支持切换国家'); SPZ.whenApiDefined(dropdown).then((apis) => { apis.close(); }); return; } let targetElement = e.target; while (targetElement) { if ( !targetElement || targetElement.getAttribute(MARKET_SELECT_ITEM_ID) ) { break; } targetElement = targetElement.parentNode; } if ( !targetElement || !targetElement.hasAttribute(MARKET_SELECT_ITEM_ID) ) { return; } const selectValue = targetElement.getAttribute(MARKET_SELECT_ITEM_ID); if (value === selectValue) { SPZ.whenApiDefined(dropdown).then((apis) => { apis.close(); }); return; } const selectedData = dataList.find((c) => c.value === selectValue); if (shouldUpdateSelectedItem) { const tempParentNode = self.document.createElement('div'); const clonedTemplate = self.document.importNode( clonedItemTemplate.content, true ); tempParentNode.appendChild(clonedTemplate); this.renderMarketSelectTemplateNode_(tempParentNode, selectedData); tempParentNode.firstElementChild.classList.add( 'market-select-item' ); triggerElement.replaceChild( tempParentNode.firstElementChild, triggerElement.firstElementChild ); } value = selectValue; itemHandler?.(selectedData); SPZ.whenApiDefined(dropdown).then((apis) => { apis.close(); }); }, false ); listElementWithTemplate.removeChild(itemTemplate); listElementWithTemplate.appendChild(fragment); listElementWithTemplate.classList.add('market-select-list'); dropdown.appendChild(listElementWithTemplate); if (subTitleRole) { this.renderSelectTitle_(dropdown, subTitleRole); } return dropdown; } createSelect_({ parent, defaultValue, dataList, listElementWithTemplate, itemHandler, titleRole, }) { const triggerElement = self.document.createElement('div'); triggerElement.classList.add('market-select'); const displayElement = self.document.createElement('div'); triggerElement.appendChild(displayElement); triggerElement.appendChild(this.createDropdownIcon_()); const dropdown = this.renderDropdownListWithClickEvent_({ triggerElement, dataList, listElementWithTemplate, defaultValue, itemHandler, shouldUpdateSelectedItem: true, }); this.bindDropdownOpenClickEvent_(triggerElement, dropdown); const dropdownContainer = self.document.createElement('div'); dropdownContainer.appendChild(triggerElement); dropdownContainer.appendChild(dropdown); dropdownContainer.classList.add('market-select-container'); this.renderSelectTitle_(dropdownContainer, titleRole); parent.appendChild(dropdownContainer); } getListElementWithTemplate_(role) { const template = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${role}"]` ); if (template) { const clonedTemplate = template.cloneNode(true); const tempParent = self.document.createElement("div"); tempParent.appendChild(clonedTemplate.content); const listElementWithTemplate = SPZCore.Dom.scopedQuerySelector( tempParent, `[role="${MARKET_SELECT_LIST}"]` ); return listElementWithTemplate; } return null; } renderSelectTitle_(parent, role) { if (!parent || !role) { return; } const template = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${role}"]` ); const content = self.document.importNode(template.content, true); parent.insertBefore(content, parent.firstElementChild); parent.firstElementChild.classList.add( role.includes('sub') ? 'market-pc-header-select-sub-title' : 'market-pc-header-select-title' ); } initSelect_(rootNode, options) { const parent = rootNode || this.element; if (this.useCountrySelect_) { this.createSelect_({ parent, titleRole: options?.shouldRenderSelectTitle ? MARKET_PC_HEADER_COUNTRY_SELECT_TITLE : undefined, defaultValue: this.getDefaultCountryValue_(), dataList: this.marketCountryList.map(this.mapCountryRenderData_), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_COUNTRY_SELECT ), itemHandler: this.handleCountrySelectChange_.bind(this), }); } if (this.useLanguageSelect_) { this.createSelect_({ parent, titleRole: options?.shouldRenderSelectTitle ? MARKET_PC_HEADER_LANGUAGE_SELECT_TITLE : undefined, defaultValue: this.getDefaultLanguageValue_(), dataList: this.marketLanguages.map(this.mapLanguageRenderData_), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_LANGUAGE_SELECT ), itemHandler: this.handleLanguageSelectChange_.bind(this), }); } } initPcHeaderTriggerElement() { const headerTriggerElementTemplate = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${MARKET_PC_HEADER_TRIGGER}"]` ); const headerTriggerElement = self.document.importNode( headerTriggerElementTemplate.content, true ); const parentDivElement = self.document.createElement('div'); parentDivElement.setAttribute('role', MARKET_PC_HEADER_TRIGGER); parentDivElement.appendChild(headerTriggerElement); this.element.removeChild(headerTriggerElementTemplate); return parentDivElement; } initPanelWithSelect_() { const triggerElement = this.initPcHeaderTriggerElement(); const dropdown = this.createDropdown_(); const panelElement = self.document.createElement('div'); panelElement.classList.add('market-panel'); this.initSelect_(panelElement, {shouldRenderSelectTitle: true}); dropdown.appendChild(panelElement); this.bindDropdownOpenClickEvent_(triggerElement, dropdown); this.element.appendChild(triggerElement); this.element.insertBefore(dropdown, triggerElement); } initSingleSelectDropdown_() { const triggerElement = this.initPcHeaderTriggerElement(); let dropdown; if (this.useCountrySelect_) { dropdown = this.renderDropdownListWithClickEvent_({ triggerElement, subTitleRole: MARKET_PC_HEADER_COUNTRY_SELECT_SUB_TITLE, dataList: this.marketCountryList.map(this.mapCountryRenderData_), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_COUNTRY_SELECT ), defaultValue: this.getDefaultCountryValue_(), itemHandler: this.handleCountrySelectChange_.bind(this), }); } else if (this.useLanguageSelect_) { dropdown = this.renderDropdownListWithClickEvent_({ triggerElement, subTitleRole: MARKET_PC_HEADER_LANGUAGE_SELECT_SUB_TITLE, dataList: this.marketLanguages.map(this.mapLanguageRenderData_), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_LANGUAGE_SELECT ), defaultValue: this.getDefaultLanguageValue_(), itemHandler: this.handleLanguageSelectChange_.bind(this), }); } if (dropdown) { this.bindDropdownOpenClickEvent_(triggerElement, dropdown); this.element.appendChild(triggerElement); this.element.appendChild(dropdown); } } initEntry_() { if (this.blockSectionPosition_ === SECTION_TYPE_HEADER) { if (this.isSingleSelectMode_) { this.initSingleSelectDropdown_(); } else if (this.useCountrySelect_ && this.useLanguageSelect_) { this.initPanelWithSelect_(); } } this.initSelect_(this.element); } async initData_() { const promises = []; if (this.useCountrySelect_ || this.useModal_) { promises.push(this.getCountryList_(), this.getIpMatchingMarket_()); } if (this.useLanguageSelect_) { promises.push(this.getMarketLanguages_(this.global.market.market_id)); } return Promise.all(promises).then((results) => { const ipMatchingMarket = results.find((result) => result.hasOwnProperty('matching_station') ); const marketCountryList = results.find((result) => result.hasOwnProperty('data') ); if (ipMatchingMarket && marketCountryList) { this.ipMatchingMarket = ipMatchingMarket?.matching_station?.find?.( (item) => item.type === 'multiple_market' ) || { img: marketCountryList.length ? marketCountryList?.[0]?.detail && marketCountryList[0].detail?.flag : '', }; } }); } initModal_() { if ( this.isEditMode || !this.ipMatchingMarket?.market_id || !this.useModal_ || this.hasCookie_(COOKIE_TIPS_NAME) || this.win[MARKET_MODAL_LOADED] ) { return; } this.win[MARKET_MODAL_LOADED] = true; const redirectParam = new URLSearchParams(this.win.location.search).get( URL_REDIRECT ); if (redirectParam) { this.initModalEntry_(MARKET_GATEWAY_REDIRECT_MODAL); } else if ( this.ipMatchingMarket.market_id !== this.global?.market?.market_id ) { this.initModalEntry_(MARKET_MODAL); } } async init_() { await this.initSettings_(); await this.initData_(); this.initEntry_(); this.initModal_(); } getDefaultCountryValue_() { return this.getCookie_(MARKET_COUNTRY_COOKIE) || this.marketCountryList[0]?.country_code; } mapCountryRenderData_(country) { return { flag: country?.detail?.flag || '', value: country?.country_code, currency: country?.currency, currencySymbol: country?.symbol?.val || '', url: country?.url, }; } handleCountrySelectChange_(selectedData) { this.setCookie_(MARKET_COUNTRY_COOKIE, selectedData.value); this.handleChangeURL_(selectedData.url); } getDefaultLanguageValue_() { return this.marketLanguages?.find?.( (lang) => lang.code === this.global?.market?.market_lang )?.name; } mapLanguageRenderData_(language) { return { value: language.name, url: language.url, }; } handleLanguageSelectChange_(selectedData) { this.handleChangeURL_(selectedData.url); } renderTemplateElement_(parent, role, value) { const elements = SPZCore.Dom.scopedQuerySelectorAll( parent, `[role="${role}"]` ); elements.forEach((element) => { if (element && value) { element.innerHTML = value; } }); } renderTemplateImg_(parent, role, options) { const flagElement = SPZCore.Dom.scopedQuerySelector( parent, `[role="${role}"]` ); if (flagElement && options?.src && options?.height && options?.width) { const spzImg = self.document.createElement('ljs-img'); spzImg.setAttribute('src', options.src); spzImg.setAttribute('layout', 'responsive'); spzImg.setAttribute('width', options.width); spzImg.setAttribute('height', options.height); spzImg.setAttribute( 'style', `width: ${options.width}px; height: ${options.height}px;` ); flagElement.appendChild(spzImg); } } handleChangeURL_(url) { if (!!url) { let {origin, pathname, search} = this.win.location; pathname = pathname.replace(SITE, url != '/' ? url : ''); this.win.location.href = `${origin}${pathname}${search}`; } else { this.win.location.reload(true); } } initModalEntry_(role) { const marketModalTemplate = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${role}"]` ); if (marketModalTemplate) { const tempParentNode = self.document.createElement('div'); const clonedTemplate = self.document.importNode( marketModalTemplate.content, true ); tempParentNode.appendChild(clonedTemplate); this.renderTemplateImg_(tempParentNode, MARKET_MODAL_FLAG, { src: this.ipMatchingMarket?.img, width: '80', height: '80', }); this.renderTemplateElement_( tempParentNode, MARKET_MODAL_COUNTRY_CODE, this.ipMatchingMarket?.name ); this.renderTemplateElement_( tempParentNode, MARKET_MODAL_CURRENCY_SYMBOL, this.ipMatchingMarket?.currency_with_symbol ); const lightbox = self.document.createElement('ljs-lightbox'); lightbox.setAttribute('layout', 'nodisplay'); lightbox.appendChild(tempParentNode.firstElementChild); self.document.body.appendChild(lightbox); SPZ.whenApiDefined(lightbox).then((apis) => { SPZCore.Dom.scopedQuerySelectorAll( lightbox, `[role="${MARKET_MODAL_CLOSE}"]` ).forEach((ele) => { ele.addEventListener('click', () => { this.setCookie_(COOKIE_TIPS_NAME, 1, COOKIE_TIPS_EXPIRES); apis.close(); }); }); const marketModalConfirmElement = SPZCore.Dom.scopedQuerySelector( lightbox, `[role="${MARKET_MODAL_CONFIRM}"]` ); if (marketModalConfirmElement && this.ipMatchingMarket?.url) { marketModalConfirmElement.addEventListener('click', () => { this.setCookie_(COOKIE_TIPS_NAME, 1, COOKIE_TIPS_EXPIRES); this.setCookie_(MARKET_COUNTRY_COOKIE, this.ipMatchingMarket?.name); this.handleChangeURL_(this.ipMatchingMarket?.url); }); } const marketModalReselectElement = SPZCore.Dom.scopedQuerySelector( lightbox, `[role="${MARKET_MODAL_RESELECT}"]` ); if (marketModalReselectElement) { marketModalReselectElement.addEventListener('click', () => { this.setCookie_(COOKIE_TIPS_NAME, 1, COOKIE_TIPS_EXPIRES); const marketReselectTemplate = SPZCore.Dom.scopedQuerySelector( this.element, `[role="${MARKET_RESELECT_MODAL}"]` ); if (marketReselectTemplate && lightbox.firstElementChild) { const clonedTemplate = self.document.importNode( marketReselectTemplate.content, true ); const selectParent = SPZCore.Dom.scopedQuerySelector( clonedTemplate, `[role="${MARKET_MODAL_RESELECT_COUNTRY_SELECT}"]` ); if (selectParent) { this.createSelect_({ parent: selectParent, defaultValue: this.getDefaultCountryValue_(), dataList: this.marketCountryList.map( this.mapCountryRenderData_ ), listElementWithTemplate: this.getListElementWithTemplate_( MARKET_COUNTRY_SELECT ), itemHandler: this.handleCountrySelectChange_.bind(this), }); } lightbox.replaceChild(clonedTemplate, lightbox.firstElementChild); SPZCore.Dom.scopedQuerySelectorAll( lightbox, `[role="${MARKET_MODAL_CLOSE}"]` ).forEach((ele) => { ele.addEventListener('click', () => { this.setCookie_(COOKIE_TIPS_NAME, 1, COOKIE_TIPS_EXPIRES); apis.close(); }); }); } }); } apis.open(); }); } } async getMarketThemeSettings_() { return this.xhr_.fetchJson(MARKET_THEME_SETTINGS).then((res) => { this.useCountrySelect_ = !!res.country_selector_enabled; this.useLanguageSelect_ = !!res.language_selector_enabled && this.global?.market?.market_id; this.useModal_ = !!res.redirect_pop_enabled; return res; }); } async getCountryList_() { return this.xhr_.fetchJson(MARKET_COUNTRIES).then((res) => { this.marketCountryList = res.data.length ? res.data : []; return res; }); } async getIpMatchingMarket_() { return this.xhr_.fetchJson(IP_MATCHING_MARKET, { method: 'POST', body: { stations: [], }, }); } async getMarketLanguages_(marketId) { return this.xhr_ .fetchJson(MARKET_LANGUAGES.replace(/:id/gim, marketId)) .then((res) => { this.marketLanguages = res?.languages?.length ? res.languages : []; return res; }); } hasCookie_(name) { const m = self.document.cookie .split(';') .filter((pair) => pair.trim().startsWith(name + '=')); return !!(m && m[0]); } getCookie_(name) { const m = self.document.cookie .split(';') .filter((pair) => pair.trim().startsWith(name + '=')); return m && m[0] ? m[0].split('=')[1] : null; } setCookie_(name, value, expires) { const expiresDate = new Date(Date.now() + expires).toGMTString(); self.document.cookie = `${name}=${encodeURIComponent( value )};expires=${expiresDate};path=/`; } } SPZ.defineElement('spz-custom-market', SpzCustomMarket); Region/Country Region/Country ( ) Language Language Switch to based on your location * Purchase with * Get shipping options for Cancel Switch Set to based on your location * Purchase with * Get shipping options for Continue Shopping Modify Country/Region Modify Country/Region Continue Shopping Cancel Region/Country US ( USD $ ) AD ( EUR € ) AT ( EUR € ) BE ( EUR € ) CY ( EUR € ) DE ( EUR € ) EE ( EUR € ) ES ( EUR € ) FI ( EUR € ) FR ( EUR € ) GR ( EUR € ) IE ( EUR € ) IT ( EUR € ) LT ( EUR € ) LU ( EUR € ) LV ( EUR € ) MC ( EUR € ) ME ( EUR € ) MT ( EUR € ) NL ( EUR € ) PT ( EUR € ) SI ( EUR € ) SK ( EUR € ) SM ( EUR € ) VA ( EUR € ) XK ( EUR € ) JP ( JPY ¥ ) GB ( GBP £ ) TH ( THB ฿ ) NZ ( NZD NZ$ ) AU ( AUD A$ ) CA ( CAD CA$ ) CH ( CHF CHF ) DK ( DKK kr ) SG ( SGD S$ ) DE ( EUR € ) US ( USD $ ) AD ( EUR € ) AT ( EUR € ) BE ( EUR € ) CY ( EUR € ) DE ( EUR € ) EE ( EUR € ) ES ( EUR € ) FI ( EUR € ) FR ( EUR € ) GR ( EUR € ) IE ( EUR € ) IT ( EUR € ) LT ( EUR € ) LU ( EUR € ) LV ( EUR € ) MC ( EUR € ) ME ( EUR € ) MT ( EUR € ) NL ( EUR € ) PT ( EUR € ) SI ( EUR € ) SK ( EUR € ) SM ( EUR € ) VA ( EUR € ) XK ( EUR € ) JP ( JPY ¥ ) GB ( GBP £ ) TH ( THB ฿ ) NZ ( NZD NZ$ ) AU ( AUD A$ ) CA ( CAD CA$ ) CH ( CHF CHF ) DK ( DKK kr ) SG ( SGD S$ ) English,Français,Deutsch,Italiano,Español,Português,dansk,日本語,ไทย Log in Create an account (function(){ let w = window.innerWidth; function setHeaderCssVar() { const headerEle = document.getElementById('shoplaza-section-header'); if(!headerEle){ return }; document.body.style.setProperty('--window-height', `${window.innerHeight}px`); document.body.style.setProperty('--header-height', `${headerEle.clientHeight}px`); const mdScorllHideEle = headerEle.querySelector('.header__mobile .header__scroll_hide'); if (mdScorllHideEle) { document.body.style.setProperty('--header-scroll-hide-height-md', `${mdScorllHideEle.clientHeight}px`); } const pcScorllHideEle = headerEle.querySelector('.header__desktop .header__scroll_hide'); if (pcScorllHideEle) { document.body.style.setProperty('--header-scroll-hide-height-pc', `${pcScorllHideEle.clientHeight}px`); } } function handlResize() { if(w == window.innerWidth){return}; w = window.innerWidth; setHeaderCssVar(); }; function init(){ setHeaderCssVar(); window.removeEventListener('resize', window._theme_header_listener) window._theme_header_listener = handlResize; window.addEventListener('resize', window._theme_header_listener); } init(); })(); Home / HOO® Stunning Fighter And Pirate Ship Printing Short Sleeve Shirt 1/4 ${data.index + 1}/${data.total} * * * * ${Array(data.total).fill(0).map((num, index) => ` * `).join('')} Anniversary Sale🔥 HOO® STUNNING FIGHTER AND PIRATE SHIP PRINTING SHORT SLEEVE SHIRT (2)View ${function() { const variantData = data.variant || {"id":"b83307f4-9bf1-4ba1-a6d9-0783766e952b","product_id":"616b65d7-99fb-48a6-b972-3b4fa34b4cc6","title":"XS-Multicolor","weight_unit":"g","inventory_quantity":10000,"sku":"cSMDF240617-3nH-XS","barcode":"cSMDF240617-3nH","position":1,"option1":"XS","option2":"Multicolor","option3":"","note":"","image":{"src":"\/\/img.fantaskycdn.com\/834b5fc1784a82b64c62948ed5631d98.jpg","path":"834b5fc1784a82b64c62948ed5631d98.jpg","width":750,"height":1000,"alt":"","aspect_ratio":0.75},"wholesale_price":[{"price":24.95,"min_quantity":1}],"weight":"200","compare_at_price":"27.95","price":"24.95","retail_price":"27.95","available":true,"url":"\/products\/csmdf240617-3nh-gcg4-1ex9-ezef-3ltd-fmsj-jq8z-zjx3-281e-c0v3-ivrm-ua0x-yava-zfx0-i8gb?variant=b83307f4-9bf1-4ba1-a6d9-0783766e952b","available_quantity":10000,"options":[{"name":"Size","value":"XS"},{"name":"Color","value":"Multicolor"}],"off_ratio":11,"flashsale_info":[],"sales":30}; const saveType = "percentage"; const productLabelDiscountOn = true; return ` - ${saveType == 'percentage' ? `-${variantData.off_ratio}%` : `-` } `; }()} €24.95 €27.95 -11% Size Guide We strongly suggest you to take measurements before placing an order. And then please use the “Size Guide” instructions and chart on every product page to help select the size that best fits you. How to measure: Shoulder: Stand up straight and relax your shoulders, measure from the tip of one shoulder to the other. Chest: Measure 1" under you armholes around the fullest part of your chest including your shoulder blades. Waist: Measure around your natural waistline, keeping the tape a bit loose. Hip: Measure around the fullest part of the hips (about 7" down from your natural waistline), keeping tape taut. Length: This is the length of the clothing from where your neck/shoulders/waist meet to the bottom of the clothing. *The measurements chart shown on product pages are measurements for each garment, by size. Please use the guides and reference and compare them to your own body measurements to determine the best size. If your body measurements close to the maximum of the size, please choose one size up. Notes: a. Please choose a corresponding size according to your measurements. b. The size chart listed is based on international sizing system. c. 1-3cm / 1-1.2 inches is allowed in manual measurements error, the size chart is for reference only. If your body measurements close to the maximum of the size, please choose one size up. d. The precise color of the items may vary depending on the specific monitor, the settings and lighting conditions. We wish you a pleasant shopping with HOO! SPECIAL OFFER Buy €54.35 more and save €9.21 Buy €91.20 more and save €18.43 Buy €128.05 more and save €27.64 Buy €183.33 more and save €46.06 CLOSE Buy €54.35 more and save €9.21 Buy €91.20 more and save €18.43 Buy €128.05 more and save €27.64 Buy €183.33 more and save €46.06 GIFT OFFER View the GIFT OFFER Spend €100.42 to get 1 free gift(s) CLOSE Spend €100.42 to get 1 free gift(s) Style Size: ${function(){ const optName = "Size"; const optionValue = data.originData.selectData ? data.originData.selectData[optName].value : data.originData.value; const optionValueText = optionValue ? (optionValue) : ''; return `${optionValueText}`; }()} XS XS S M L XL 2XL 3XL 4XL 4XLT 5XL 5XLT ${function(){ const tipText = "Please select a {{ name }}".replace(/\{\{\s+name\s+\}\}/g, data); return ` ${tipText} ` }()} Color: ${function(){ const optName = "Color"; const optionValue = data.originData.selectData ? data.originData.selectData[optName].value : data.originData.value; const optionValueText = optionValue ? (optionValue) : ''; return `${optionValueText}`; }()} Multicolor ${function(){ const tipText = "Please select a {{ name }}".replace(/\{\{\s+name\s+\}\}/g, data); return ` ${tipText} ` }()} Quantity Add to cart €24.95 ${function(){ const wholesale_enabled = false; const qty = data.quantity || 1; const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants && data.product.variants[0]); const productVariant = {"id":"b83307f4-9bf1-4ba1-a6d9-0783766e952b","product_id":"616b65d7-99fb-48a6-b972-3b4fa34b4cc6","title":"XS-Multicolor","weight_unit":"g","inventory_quantity":10000,"sku":"cSMDF240617-3nH-XS","barcode":"cSMDF240617-3nH","position":1,"option1":"XS","option2":"Multicolor","option3":"","note":"","image":{"src":"\/\/img.fantaskycdn.com\/834b5fc1784a82b64c62948ed5631d98.jpg","path":"834b5fc1784a82b64c62948ed5631d98.jpg","width":750,"height":1000,"alt":"","aspect_ratio":0.75},"wholesale_price":[{"price":24.95,"min_quantity":1}],"weight":"200","compare_at_price":"27.95","price":"24.95","retail_price":"27.95","available":true,"url":"\/products\/csmdf240617-3nh-gcg4-1ex9-ezef-3ltd-fmsj-jq8z-zjx3-281e-c0v3-ivrm-ua0x-yava-zfx0-i8gb?variant=b83307f4-9bf1-4ba1-a6d9-0783766e952b","available_quantity":10000,"options":[{"name":"Size","value":"XS"},{"name":"Color","value":"Multicolor"}],"off_ratio":11,"flashsale_info":[],"sales":30}; const variantData = currentSelectVariant || defaultVariant || productVariant; const wholesale_price = variantData.wholesale_price || []; if(wholesale_enabled && wholesale_price.length > 0) { let wholesaleIndex = wholesale_price.findIndex(item => { return item.min_quantity > qty; }); if(wholesaleIndex < 0){ wholesaleIndex = wholesale_price.length - 1; }else if(wholesaleIndex > 0){ wholesaleIndex = wholesaleIndex - 1; } const wholesalePrice = wholesale_price[wholesaleIndex] || ''; return ` ` }else { const price = variantData && variantData.price; return price != undefined ? ` ` : ''; } }()} Buy now Product was out of stock. Product is unavailable. Shipping ${function() { const minDays = parseInt('18'); const maxDays = parseInt('28'); const customText = "Estimated Delivery\uff1a{min_date} - {max_date}"; const minDate = new Date(Date.now() + (minDays * 86400000)); const maxDate = new Date(Date.now() + (maxDays * 86400000)); const formatDate = (minDate.getFullYear() == maxDate.getFullYear() && minDate.getFullYear() == new Date().getFullYear()) ? new Intl.DateTimeFormat('en', { month: 'short', day: '2-digit' }) : new Intl.DateTimeFormat('en', { month: 'short', day: '2-digit', year: 'numeric' }); const tipText = customText.replace(/\{min_date\}/g, '' + formatDate.format(minDate) + '') .replace(/\{max_date\}/g, '' + formatDate.format(maxDate) + ''); return ` ${tipText} `; }()} Estimated Delivery:Jul 30 - Aug 09 ${function() { const postageFreeAmount = 81.99125; const custom_text = "Buy {amount} more to enjoy FREE Shipping"; const totalPrice = +data.total_price; const diffPrice = postageFreeAmount - totalPrice; const percentDiff = (diffPrice > 0 ? (totalPrice / postageFreeAmount * 100) : 100) + '%'; let tipText = "Your order is free delivery"; if (diffPrice > 0) { tipText = custom_text.replace('{amount}', ``); } return ` ${tipText} `; }()} Buy €81.99 more to enjoy FREE Shipping DESCRIPTION SPU: cSMDF240617-3nH Pattern Type: Printed Sleeve Type: Short Sleeve Elasticity: Slightly stretchy Thickness: Lightweight Weight: 200g Material: 100%Polyester Neckline: Turndown Collar Occasion: Daily Style: Casual Theme: Summer Size: XS,S,M,L,XL,2XL,3XL,4XL,4XLT,5XL,5XLT Machine wash cold without fabric softener, tumble dry low or line dry, remove promptly, press with cool iron, as needed. Size Chart: WORLDWIDE SHIPPING Total Delivery Time = Processing Time + Shipping Time 1.Processing Time: The amount of time it takes for us to prepare your order for shipment. Our normal processing time for orders is 7-9 business days. This involves the securing of stocks, in some cases, and the checking of product quality. Orders can be cancelled or modified within 8 hours after being placed. 2.Shipping Time: The amount of time it takes to receive your order after your order has shipped. Shipping times can vary depending on your location and shipping methods. Standard Shipping: 12-20 business days Express Shipping: 7-12 bussiness days *For items which have stock in warehouse, items will be shipped in 24 hours. *For some remote areas, it may take up to 20 business days to deliver the parcel. Delay Note Due to Holidays: Due to the Chinese New Year holiday, order processing and shipping times may be 10-15 days longer than usual. We'll work extra hard right after the holiday to get orders out to you! We sincerely apologize for any inconvenience this may cause and appreciate your understanding. SHIPPING FEE Free shipping on orders US$89+ *The actual shipping cost differs depend on the shipping country and the weight of the item. NOTE FOR TAXES: For most of the countries, our customers do not need to pay for importing fees, duties or VAT (Valued Additional Tax). However, for some limited countries (especially for some European countries such as Germany, Italy, UK, etc.) may need to pay duties or VAT according to your countries’ levying rules. For more 👉Shipping Policy HASSLE-FREE RETURNS We're bummed if you're not 100% satisfied with the items you received, and we gladly accept returns within 7 days of receipt for regular items in new condition. Step 1: Email us for the authorization Step 2: Process the exchange/return Step 3: Get your refund / exchange in 3-10 working days Contact us: service@hooshops.com For more 👉Exchange / Return / Refund Policy NOTE: Gifts, blind boxes or clearance items are not available for exchange or return. Customer Reviews Here are what our customers say. Write a Review 4.5 Total reviews: 2 5 4 3 2 1 Write a Review Reviews(2) With Photos(0) Newest Newest Most liked Highest ratings Lowest ratings 1 Customer Reviews Reviews With Photos Wow you reached the bottom Newest Most liked Highest ratings Lowest ratings × ${function(){ const limit = typeof data === 'number' ? data : 0; return ` Pictures/Videos (${limit || 0}/5) ` }()} ${(function(){ const closeIcon = ' '; if (item.type === 'image') { return ` ${closeIcon} ` } return ` ${closeIcon} ` })()} Submit Comments Anonymously class SpzCustomFileUpload extends SPZ.BaseElement { constructor(element) { super(element); this.uploadCount_ = 0; this.fileList_ = []; } buildCallback() { this.action = SPZServices.actionServiceForDoc(this.element); this.registerAction('upload', (data) => { this.handleFileUpload_(data.event?.detail?.data || []); }); this.registerAction('delete', (data) => { this.handleFileDelete_(data?.args?.data); }); this.registerAction('preview', (data) => { this.handleFilePreview_(data?.args?.data); }); this.registerAction('limit', (data) => { this.handleFileLimit_(); }); this.registerAction('sizeLimit', (data) => { this.handleFileSizeLimit_(); }); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } setData_(count, file) { this.uploadCount_ = count; this.fileList_ = file; } handleFileUpload_(data) { data.forEach(i => { if(this.fileList_.some(j => j.url === i.url)) return; this.fileList_.push(i); }) this.uploadCount_++; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileUpload", { count: this.uploadCount_, files: this.fileList_}); if(this.fileList_.length >= 5){ document.querySelector('#review_upload').style.display = 'none'; } if(this.fileList_.length > 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '8px'; } } handleFileDelete_(index) { this.fileList_.splice(index, 1); this.uploadCount_--; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileDelete", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; if(this.fileList_?.length === 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '132px'; } } handleFilePreview_(index) { const finalPreviewData = this.fileList_[index]; const filePreviewModal = document.getElementById('filePreviewModal'); const fullScreenVideo = document.getElementById('fullScreenVideo'); const fullScreenImage = document.getElementById('fullScreenImage'); const previewModalClose = document.getElementById('previewModalClose'); const previewLoading = document.getElementById('previewLoading'); filePreviewModal.style.display = 'block'; previewLoading.style.display = 'flex'; if(finalPreviewData?.type === 'video'){ const media = this.mediaParse_(this.fileList_[index]?.url); fullScreenVideo.addEventListener('canplaythrough', function() { previewLoading.style.display = 'none'; }); fullScreenImage.src = ''; fullScreenImage.style.display = 'none'; fullScreenVideo.style.display = 'block'; fullScreenVideo.src = media.mp4 || ''; } else { fullScreenImage.onload = function() { previewLoading.style.display = 'none'; }; fullScreenVideo.src = ''; fullScreenVideo.style.display = 'none'; fullScreenImage.style.display = 'block'; fullScreenImage.src = finalPreviewData.url; } previewModalClose.addEventListener('click', function() { filePreviewModal.style.display = 'none'; }); } handleFileLimit_() { alert(window.AppReviewsLocale.comment_file_limit || 'please do not upload files more than 5'); this.triggerEvent_("handleFileLimit"); } handleFileSizeLimit_() { alert(window.AppReviewsLocale.comment_file_size_limit || 'File size does not exceed 10M'); } clear(){ this.fileList_ = []; this.uploadCount_ = 0; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleClear", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; } mediaParse_(url) { var result = {}; try { url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (str, key, value) { try { result[key] = decodeURIComponent(value); } catch (e) { result[key] = value; } }); result.preview_image = url.split('?')[0]; } catch (e) {}; return result; } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, name, data); this.action.trigger(this.element, name, event); } } SPZ.defineElement('spz-custom-file-upload', SpzCustomFileUpload); The review would not show in product details on storefront since it does not support to. YOU MAY ALSO LIKE Save 11% Save 11% HOO® STUNNING FIGHTER AND PIRATE SHIP PRINTING SHORT SLEEVE SHIRT (2) from €24.95 €27.95 Save 14% Save 14% HOO® RED BROWN SKY FIGHTER AND FLYING TIGER PRINTING SHORT SLEEVE SHIRT from €23.95 €27.95 HOO® FUNNY ANIMALS BALD PIG PRINTING SHORT SLEEVE SHIRT from €24.95 Save 14% Save 14% HOO® HAWAII FUNNY ANIMAL UNHAPPY DONKEY ART PAINTING PRINTING SHORT SLEEVE SHIRT from €23.95 €27.95 Save 14% Save 14% HOO® NAVY LIGHTNING FIGHTER FLEET AND BALD EAGLE PRINTING SHORT SLEEVE SHIRT from €23.95 €27.95 Save 11% Save 11% HOO® FIGHTER ART POSTER FIGHTER SWARM AND PLAINS PRINTING BREAST POCKET SHORT SLEEVE SHIRT (1) from €24.95 €27.95 HOO® EYE-CATCHING WILD JUNGLE ANIMALS LIONS AND TIGERS PRINTING CUBAN COLLAR HAWAIIAN SHORT SLEEVE SHIRT from €25.95 HOO® GAME ELEMENTS CARTOON COLORFUL JELLYFISH AND YELLOW MOUTH MONSTER MAZE PRINTING SHORT SLEEVE SHIRT (2) from €23.95 HOO® TECHNOLOGY FIGHTER AND EAGLE PATTERN PRINTING SHORT SLEEVE SHIRT (1) from €24.95 HOO® HOO® BLUE SKY FIGHTER AND LIGHTNING HORSE PRINTING SHORT SLEEVE SHIRT from €24.95 HOO® PINK WHITE STRIPES CONTRASTING COLOR AND FLAMINGO PRINTING FUNNY SUMMER HAWAIIAN SHORT SLEEVE SHIRT (10) from €23.95 HOO® NAVY CLOUDY SKY FIGHTER AND ROARING BLACK PANTHER PRINTING SHORT SLEEVE SHIRT from €24.95 HOO® BLUE UKIYO-E ROMANTIC HAND-PAINTED FLOWERS AND BRANCHES PRINTING BREAST POCKET SHORT SLEEVE SHIRT from €24.95 HOO® NAVY CASUAL AEROSPACE MACHINE PRINTING HAWAIIAN SHORT SLEEVE SHIRT (10) from €23.95 HOO® HAWAIIAN FUNNY ANIMALS CUTE COW PRINTING SHORT SLEEVE SHIRT from €24.95 HOO® HAWAIIAN FUNNY ANIMALS SMILING FURRY CAT PRINTING SHORT SLEEVE SHIRT from €24.95 HOO® EYE-CATCHING WILD UNIVERSE GALAXIES AND WILD ANIMALS PRINTING CUBAN COLLAR HAWAIIAN SHORT SLEEVE SHIRT from €25.95 Save 14% Save 14% HOO® GREY FIGHTER AND FIERCE WOLF PRINTING SHORT SLEEVE SHIRT from €23.95 €27.95 HOO® COLORFUL INK SPLASH OSTRICH ART PRINTING SHORT SLEEVE SHIRT from €24.95 Save 14% Save 14% HOO® RETRO CYAN POSTER SPACE WARS SCIENCE FICTION SPACESHIPS AND SNOWFIELDS PRINTING SHORT SLEEVE SHIRT from €23.95 €27.95 Save 11% Save 11% HOO® STUNNING FIGHTER AND PIRATE SHIP PRINTING SHORT SLEEVE SHIRT (2) from €24.95 €27.95 Save 14% Save 14% HOO® RED BROWN SKY FIGHTER AND FLYING TIGER PRINTING SHORT SLEEVE SHIRT from €23.95 €27.95 HOO® FUNNY ANIMALS BALD PIG PRINTING SHORT SLEEVE SHIRT from €24.95 Save 14% Save 14% HOO® HAWAII FUNNY ANIMAL UNHAPPY DONKEY ART PAINTING PRINTING SHORT SLEEVE SHIRT from €23.95 €27.95 Save 14% Save 14% HOO® NAVY LIGHTNING FIGHTER FLEET AND BALD EAGLE PRINTING SHORT SLEEVE SHIRT from €23.95 €27.95 Save 11% Save 11% HOO® FIGHTER ART POSTER FIGHTER SWARM AND PLAINS PRINTING BREAST POCKET SHORT SLEEVE SHIRT (1) from €24.95 €27.95 HOO® EYE-CATCHING WILD JUNGLE ANIMALS LIONS AND TIGERS PRINTING CUBAN COLLAR HAWAIIAN SHORT SLEEVE SHIRT from €25.95 HOO® GAME ELEMENTS CARTOON COLORFUL JELLYFISH AND YELLOW MOUTH MONSTER MAZE PRINTING SHORT SLEEVE SHIRT (2) from €23.95 HOO® TECHNOLOGY FIGHTER AND EAGLE PATTERN PRINTING SHORT SLEEVE SHIRT (1) from €24.95 HOO® HOO® BLUE SKY FIGHTER AND LIGHTNING HORSE PRINTING SHORT SLEEVE SHIRT from €24.95 View more RECENTLY VIEWED INFORMATION * Our Story * Privacy Policy * Terms of Service * Affiliate Program * Influencer Program * Uniforms, Mass Customization and B2B Service * Intellectual Property Rights INFORMATION * Our Story * Privacy Policy * Terms of Service * Affiliate Program * Influencer Program * Uniforms, Mass Customization and B2B Service * Intellectual Property Rights CUSTOMER SERVICES * Size Guide * Payment Methods * Shipping Policy * Exchange / Return / Refund Policy * Order Tracking * Do Not Sell My Personal Information * FAQs CUSTOMER SERVICES * Size Guide * Payment Methods * Shipping Policy * Exchange / Return / Refund Policy * Order Tracking * Do Not Sell My Personal Information * FAQs GET IN TOUCH Contact Us Leave FB Message GET IN TOUCH Contact Us Leave FB Message Follow us * * * * * Follow us * * * * * WE ACCEPT * PayPal * American Express * Diners Club * Discover * Mastercard * Visa * JCB * Maestro WE ACCEPT * PayPal * American Express * Diners Club * Discover * Mastercard * Visa * JCB * Maestro © 2024 HOO® Size Guide Payment Methods Shipping Policy Exchange / Return / Refund Policy Order Tracking Do Not Sell My Personal Information FAQs CART Your shopping bag is empty Continue shopping * ${item.product_title} * ${item.options.map(option => option.value).join('/')} * ${propertie.name}/${propertie.isImage ? `View image` : propertie.value} Free gift Mixed Lot *${item.quantity} ${item.item_text} ${discount_item.title} (-) ${(function(){ var total_price = data.total_price; var postageFreeAmount = 81.99125; var freeAmount = postageFreeAmount - total_price; var isFreeShipping = freeAmount <= 0; var rate = Math.min(total_price / postageFreeAmount * 100, 100).toFixed(2); const textArray = ("Spend {{ amount }} more and get free shipping!").split(/\{\{\s*amount\s*\}\}/); const textArrayHtml = textArray.map((text, index) => { if (index == 0) { return `${text}`; } return `${text}`; }).join(''); return ` ${textArrayHtml} You've got free shipping ${rate}% ` })()} Total: ${function() { const textArray = ("Save {{save_amount}}").split(/\{\{\s*save_amount\}\}/); if (textArray.length > 0 && textArray.length < 2) { textArray.push(''); } return textArray.map((text, index) => { if (index == 0) { return `${text}`; } return ` ${text} `; }).join(''); }()} ${function() { const textArray = ("Save {{save_amount}}").split(/\{\{\s*save_amount\}\}/); if (textArray.length > 0 && textArray.length < 2) { textArray.push(''); } return textArray.map((text, index) => { if (index == 0) { return `${text}`; } return ` ${text} `; }).join(''); }()} * ${discount_application.title}: - ${data.invalid_msg} Check out Taxes and shipping calculated at checkout ${(function(){ var total_price = data.total_price; var postageFreeAmount = 81.99125; var freeAmount = postageFreeAmount - total_price; var isFreeShipping = freeAmount <= 0; var rate = Math.min(total_price / postageFreeAmount * 100, 100).toFixed(2); const textArray = ("Spend {{ amount }} more and get free shipping!").split(/\{\{\s*amount\s*\}\}/); const textArrayHtml = textArray.map((text, index) => { if (index == 0) { return `${text}`; } return `${text}`; }).join(''); return ` ${textArrayHtml} You've got free shipping ${rate}% ` })()} ${data.invalid_msg} Total: ${function() { const textArray = ("Save {{save_amount}}").split(/\{\{\s*save_amount\}\}/); if (textArray.length > 0 && textArray.length < 2) { textArray.push(''); } return textArray.map((text, index) => { if (index == 0) { return `${text}`; } return ` ${text} `; }).join(''); }()} ${function() { const textArray = ("Save {{save_amount}}").split(/\{\{\s*save_amount\}\}/); if (textArray.length > 0 && textArray.length < 2) { textArray.push(''); } return textArray.map((text, index) => { if (index == 0) { return `${text}`; } return ` ${text} `; }).join(''); }()} ${function() { const textArray = ("Save {{save_amount}}").split(/\{\{\s*save_amount\}\}/); if (textArray.length > 0 && textArray.length < 2) { textArray.push(''); } return textArray.map((text, index) => { if (index == 0) { return `${text}`; } return ` ${text} `; }).join(''); }()} * ${discount_application.title}: - Check out ${data.invalid_msg} Check out Taxes and shipping calculated at checkout * Subtotal: * ${discount_application.title}: - Total: Check out Taxes and shipping calculated at checkout const summaryStickyRender = document.querySelector('#cart-drawer-summary-sticky-render'); if (summaryStickyRender) { document.body.style.setProperty('--cart-drawer-summary-sticky-height', summaryStickyRender.clientHeight + 'px'); } View Cart ${function(){ const productData = data.product; let product_change_event = '', mouse_over_event = ' '; mouse_out_event = ''; const product_options = productData.options.filter(Boolean) || []; for (let opt of product_options) { const nameEscape = opt.name.replace(/\/|\\|\s|\'|\"|`|\<|\>/g, '') product_change_event = product_change_event + `quick-shop-selected-variant-${opt.id}.rerender(data=event.selectedValues.${opt.name});`; mouse_out_event = mouse_out_event + `quick-shop-selected-variant-${opt.id}.rerender(data=event.selectData.${opt.name});`; mouse_over_event = mouse_over_event + `@${nameEscape}Mouseover="quick-shop-selected-variant-${opt.id}.rerender(data=event);"`; } const selectedVariant = productData.variants.find(v => v.available) || productData.variants[0]; const statusLan = ((selectedVariant && !selectedVariant.available) || (!selectedVariant && !productData.available)) ? "Sold out" : "Add to cart"; return ` ${statusLan} ` }()} ${function(){ const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants && data.product.variants[0]); const variantData = currentSelectVariant || defaultVariant || data; const retail_price = variantData.retail_price || 0; return ` Retail ` }()} ${function(){ const wholesale_enabled = false; const qty = data.quantity || 1; const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants && data.product.variants[0]); const productVariant = {"id":"b83307f4-9bf1-4ba1-a6d9-0783766e952b","product_id":"616b65d7-99fb-48a6-b972-3b4fa34b4cc6","title":"XS-Multicolor","weight_unit":"g","inventory_quantity":10000,"sku":"cSMDF240617-3nH-XS","barcode":"cSMDF240617-3nH","position":1,"option1":"XS","option2":"Multicolor","option3":"","note":"","image":{"src":"\/\/img.fantaskycdn.com\/834b5fc1784a82b64c62948ed5631d98.jpg","path":"834b5fc1784a82b64c62948ed5631d98.jpg","width":750,"height":1000,"alt":"","aspect_ratio":0.75},"wholesale_price":[{"price":24.95,"min_quantity":1}],"weight":"200","compare_at_price":"27.95","price":"24.95","retail_price":"27.95","available":true,"url":"\/products\/csmdf240617-3nh-gcg4-1ex9-ezef-3ltd-fmsj-jq8z-zjx3-281e-c0v3-ivrm-ua0x-yava-zfx0-i8gb?variant=b83307f4-9bf1-4ba1-a6d9-0783766e952b","available_quantity":10000,"options":[{"name":"Size","value":"XS"},{"name":"Color","value":"Multicolor"}],"off_ratio":11,"flashsale_info":[],"sales":30}; const variantData = currentSelectVariant || defaultVariant || productVariant; const wholesale_price = variantData.wholesale_price || []; if(wholesale_enabled && wholesale_price.length > 0) { let wholesaleIndex = wholesale_price.findIndex(item => { return item.min_quantity > qty; }); if(wholesaleIndex < 0){ wholesaleIndex = wholesale_price.length - 1; }else if(wholesaleIndex > 0){ wholesaleIndex = wholesaleIndex - 1; } const wholesalePrice = wholesale_price[wholesaleIndex] || ''; return ` ` }else { const price = variantData && variantData.price; return price != undefined ? ` ` : ''; } }()} ${function() { let variantImageShowed = false; const currentProduct = data.product; return (currentProduct.options || []).map((option, index) => { const optionName = option.name || ''; const optionId = option.id || ''; const position = `option${index + 1}`; let isThumbImage = false; if (currentProduct.need_variant_image && !variantImageShowed) { const variantNames = ["color"] || []; for (let i = 0, len = variantNames.length; i < len; i++) { const name = variantNames[i].toLowerCase(); if (name === optionName.toLowerCase()) { isThumbImage = true; variantImageShowed = true; } } } const variantType = "button"; const thumbStyle = "image"; return ` ${optionName}: ${option.values.map((value, idx) => { const selected = data.selectedValues[optionName] == value ? 'checked' : ''; let thumbImage = null; if (isThumbImage) { const variants = currentProduct.variants; for (let i = 0, len = variants.length; i < len; i++) { const variant = variants[i]; if (variant[position] == value && thumbImage == null) { thumbImage = variant.image; break; } } } return ` ${value} ` }).join('')} ${optionName} ${option.values.map(value => { const selected = data.selectedValues[optionName] == value ? 'selected' : ''; return `${value}` }).join('')} ` }).join(''); }()} ${data.originData && data.originData.value || data.value} const TAG = 'spz-custom-painter-button-animation'; const MAX_ITERATION_COUNT = 99999999; const SITE = (window.C_SETTINGS && window.C_SETTINGS.routes && window.C_SETTINGS.routes.root) || ''; const ADD_TO_CART_ANIMATION_SETTING = `${SITE}/api/marketing_atmosphere_app/add_to_cart_btn_animation/setting`; class SpzCustomPainterButtonAnimation extends SPZ.BaseElement { /**@override */ static deferredMount() { return false; } /** @param {!SpzElement} element */ constructor(element) { super(element); /** @private {!../../src/service/xhr-impl.Xhr} */ this.xhr_ = SPZServices.xhrFor(this.win); /** @private {Object} */ this.data_ = null; /** @private {Element} */ this.addToCartButton_ = null; /** @private {boolean} */ this.productAvailable_ = true; /** @private {number} */ this.timerId_ = null; /** @private {number} */ this.animationExecutionCount_ = 0; /** @private {boolean} */ this.selectedVariantAvailable_ = true; /** @private {number} */ this.delay_ = 5000; /** @private {number} */ this.iterationCount_ = 5; /** @private {string} */ this.animationClass_ = ''; } /** @override */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** @override */ buildCallback() { this.productAvailable_ = this.element.hasAttribute('product-available'); this.selectedVariantAvailable_ = this.element.hasAttribute('selected-variant-available'); } /** @override */ mountCallback() { this.render_(); } /** @private */ render_() { if (!this.productAvailable_) { return; } this.fetch_().then((data) => { if (!data) { return; } this.data_ = data; this.animationClass_ = `painter-${data.animation_name}-animation`; this.iterationCount_ = data.animation_iteration_count === 'infinite' ? MAX_ITERATION_COUNT : data.animation_iteration_count; const animationDuration = 1; const animationDelay = data.animation_delay || 5; this.delay_ = (animationDuration + animationDelay) * 1000; this.handleButtonEffect_(); }); } /** * @param {JsonObject} data * @return {(null|Object)} * @private */ parseJson_(data) { try { return JSON.parse(data); } catch (e) { return null; } } /** * @return {Promise} * @private */ fetch_() { return this.xhr_.fetchJson(ADD_TO_CART_ANIMATION_SETTING).then((data) => { if (!data || !data.enabled) { return null; } return this.parseJson_(data.detail); }); } /** @private */ getAddToCartButton_() { this.addToCartButton_ = SPZCore.Dom.scopedQuerySelector( document.body, '[data-section-type="product"] [role="addToCart"], [data-section-type="product_detail"] [role="addToCart"], [data-section-type="product_detail"] [data-click="addToCart"], [data-section-type="product"] [data-click="addToCart"]' ); } /** @private */ restartAnimation_() { this.addToCartButton_.classList.remove(this.animationClass_); this.addToCartButton_./* OK */ offsetWidth; this.addToCartButton_.classList.add(this.animationClass_); this.animationExecutionCount_++; } /** @private */ clearTimer_() { this.win.clearInterval(this.timerId_); this.timerId_ = null; } /** @private */ setupTimer_() { this.timerId_ = this.win.setInterval(() => { this.restartAnimation_(); if (this.animationExecutionCount_ >= this.iterationCount_) { this.removeAnimationClass_(); this.clearTimer_(); } }, this.delay_); } /** @private */ restartTimer_() { if (this.animationExecutionCount_ >= this.iterationCount_) { this.removeAnimationClass_(); return; } this.setupTimer_(); } /** @private */ listenVariantChange_() { SPZUtils.Event.listen(self.document, 'dj.variantChange', (e) => { const selectedVariant = e.detail && e.detail.selected; if (!selectedVariant) { return; } const {available} = selectedVariant; if (this.selectedVariantAvailable_ !== available) { this.selectedVariantAvailable_ = available; this.clearTimer_(); if (available) { this.restartTimer_(); } } }); } /** @private */ removeAnimationClass_() { this.win.setTimeout(() => { this.addToCartButton_.classList.remove(this.animationClass_); }, 1000); } /** @private */ handleButtonEffect_() { this.getAddToCartButton_(); if (!this.addToCartButton_) { return; } if (this.selectedVariantAvailable_) { ++this.animationExecutionCount_; this.addToCartButton_.classList.add(this.animationClass_); if (this.iterationCount_ === 1) { this.removeAnimationClass_(); return; } this.setupTimer_(); } this.listenVariantChange_(); } } SPZ.defineElement(TAG, SpzCustomPainterButtonAnimation); 111 111 Item has been added ${(function(){ const products = data.products; const getDefaultVariant = function(product){ if (product.min_price_variant.available){ return product.min_price_variant; }else { const avail_variants = product.variants.filter(function(variant){ return variant.available; }); if (avail_variants.length) { return avail_variants[0]; } } }; const toQuery = obj => Object.keys(obj) .map(k => Array.isArray(obj[k]) ? obj[k].map(v => `${k}[]=${encodeURIComponent(v)}`).join('&') : `${k}=${encodeURIComponent(obj[k])}` ) .join('&'); const getDefaultTrackParams = function(product, index){ const variant = getDefaultVariant(product); const params = { aid: 'smart_recommend.2.' + data.id, scm: product.scm || data.scm || '', spm: data.spmBase + '.' + index, ssp: data.ssp || '', }; const trackParams = Object.keys(params).map(function(key){ return params[key]; }).join('__'); return trackParams; }; const hasMore = (data.products.length - data.target_top_product_num - data.page * data.limit) === 0; return ` ${(function(){ return ` ${data.config.pop_title} ${data.rebate_tips || ''} `; })()} ${product.title} Added `; })()} class SpzCustomComponent extends SPZ.BaseElement { constructor(element) { super(element); this.templates_ = null; this.container_ = null; this._atcLineItem = {}; this.cart_ = {}; this.top_product_ids_ = []; this.products_ = []; this.activityId_ = null; this.rendered_ = false; this.myInterceptor_ = null; this.i18n_ = {}; this.config_ = {}; this.page_ = 1; this.limit_ = 10; this.loading_ = false; } static deferredMount() { return false; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.templates_ = SPZServices.templatesForDoc(this.element); this.setAction_(); } mountCallback() { console.log('pop mounted'); this.i18n_ = window.smartRecommendI18n && window.smartRecommendI18n[document.documentElement.lang || 'en-US'] || {}; const cartPopRenderEl = document.getElementById("smart_cart_pop_render"); const modalEl = document.getElementById("smart_cart_pop_modal"); const spmBase = `smart_recommend_2`; const extra = { spmBase: spmBase, i18n: this.i18n_, }; const that = this; document.addEventListener('dj.addToCart', (event) => { try { const e = event.detail; if (e.source === 'buy_now' || window.__upsell_block || this.rendered_) return; that.fetchActivityData({product_id: e.product_id, variant_id: e.variant_id}).then(data => { if (!data || !data.products || !data.products.length) return; that.config_ = data.config; const recommendStyle = document.createElement('style'); recommendStyle.innerHTML = ` #plugin_recommend_atc_pop { display: none !important; } `; document.head.appendChild(recommendStyle); if (data.config.pop_frequency === 'once' && window.sessionStorage.getItem('smart_pop_times') > 0) return; SPZ.whenApiDefined(cartPopRenderEl).then(function(api){ api.render(Object.assign({}, data, extra), true).then(function() { that.rendered_ = true; if (data.products.length) { const headEl = document.getElementById("smart_cart_pop_head_render"); if (headEl) { SPZ.whenApiDefined(headEl).then(function(head){ head.render({ data: data }); }); } SPZ.whenApiDefined(modalEl).then(function(api){ that.impressListen('#smart_cart_pop_activity', function(){ that.trackPluginImpression_(data); }); api.open(); const intersectionObserver = new IntersectionObserver( function (entries) { if (entries[0].intersectionRatio > 0){ !that.loading_ && (that.products_.length - that.target_top_product_num_) === that.page_ * that.limit_ && that.viewMore(); } }, { threshold: [0.1] } ); intersectionObserver.observe( document.querySelector('#smart_cart_pop_view_more_text') ); }); } }) }); }) } catch (e) { console.error(e); } }); } unmountCallback() { } viewMore () { const cartPopRenderEl = document.getElementById("smart_cart_pop_render"); const that = this; const data = {}; SPZ.whenApiDefined(cartPopRenderEl).then(function(api){ that.fetchActivityData({ page: that.page_ + 1, limit: that.limit_ }).then(function(data) { data.products = that.products_; data.target_top_product_num = that.target_top_product_num_; data.i18n = that.i18n_; data.spmBase = `smart_recommend_2`; api.render(data); }) }) } fetchActivityData(data) { const that = this; if (data.product_id) { that._atcLineItem = data; } that.loading_ = true; return that.getCart().then(cart => { that.cart_ = cart.cart; return fetch(window.SHOPLAZZA.routes.root + "/api/possum/recommend_activities", { method: "POST", headers: { "Content-Type": "application/json", "store-id": window.SHOPLAZZA.shop.shop_id, }, body: JSON.stringify({ "show_type": 2, "line_item": { "product_id": that._atcLineItem.product_id, "variant_id": that._atcLineItem.variant_id, }, line_items: cart.cart.line_items, "page": data.page || 1, "limit": data.limit || 10, }) }).then(function(res){ if(res.ok){ return res.json(); } }).then(function(data){ data.cart = cart.cart; if (data.page === 1) { that.target_top_product_num_ = data.target_top_product_num || 0; } that.products_ = that.products_.concat(data.products || []); that.page_ = data.page || 1; that.limit_ = data.limit || 10; return data; }).catch(function(e){ console.log(e); }).finally(function(){ that.loading_ = false; }) }); }; setAction_() { this.registerAction('changeBannerColor', (data) => { if (!data.args.data || !data.args.data.data || !data.args.data.data.data) return false; const config = data.args.data.data.data.config; const bannerBgEl = document.querySelector('.smart_cart_pop_banner_bg'); if (bannerBgEl && config) { bannerBgEl.style.background = config.banner_bg_color; bannerBgEl.style.color = config.banner_text_color; } }); this.registerAction('handleProductChange', (data) => { const that = this; const imageEl = document.getElementById(`smart_cart_pop_image_${data.args.data.product_id}`); SPZ.whenApiDefined(imageEl).then(function(api){ api.render({ data: data.args.data, config: that.config_ }); }); const atcTextEl = document.getElementById(`smart_cart_pop_atc_${data.args.data.product_id}`); SPZ.whenApiDefined(atcTextEl).then(function(api){ api.render({ data: data.args.data, defaultText: data.args.defaultText, soldOutText: that.i18n_.sold_out }); }); if (data.args.data.variant.available) { document.getElementById(`smart_cart_pop_atc_btn_${data.args.data.product_id}`).classList.remove('zb-pointer-events-none'); } else { document.getElementById(`smart_cart_pop_atc_btn_${data.args.data.product_id}`).classList.add('zb-pointer-events-none'); } }); this.registerAction('handleProduct', (detail) => { const that = this; this.renderProductsForm_(detail.args.data.data); }); this.registerAction('addATCHook', (data) => { const params = data.args; this.myInterceptor_ = window.djInterceptors && window.djInterceptors.track.use({ event: 'dj.addToCart', params: { aid: 'smart_recommend.2.' + params.activity_id, ssp: params.ssp, scm: params.scm, cfb: params.cfb, spm: `..${window.SHOPLAZZA.meta.page.template_name}.${params.spm}`, }, once: true }); }); this.registerAction('handleAtcSuccess', (detail) => { detail.args.data.product = detail.args.data.product || {}; detail.args.data.variant = detail.args.data.variant || {}; const defParams = detail.args.product.split('__'); const product_id = detail.args.data.product.id; const product_title = detail.args.data.product.title; const variant_id = detail.args.data.variant.id; const price = detail.args.data.variant.price; const aid = defParams[0]; const ifb = detail.args.data.product.ifb; const cfb = detail.args.data.product.cfb; const scm = defParams[1]; const spm = defParams[2]; const ssp = defParams[3]; const params = { id: product_id, product_id: product_id, number: 1, name: product_title, variant_id: variant_id, childrenId: variant_id, item_price: price, source: 'add_to_cart', _extra: { aid: aid, ifb: ifb, cfb: cfb, scm: scm, spm: `..${window.SHOPLAZZA.meta.page.template_name}.${spm}`, ssp: ssp, } }; const activity_id = `${detail.args.activity_id}`; const target_drive_way = detail.args.target_drive_way; document.getElementById(`smart_cart_pop_loading_${product_id}`).classList.add('zb-hidden'); document.getElementById(`smart_cart_pop_added_${product_id}`).classList.remove('zb-hidden'); setTimeout(() => { document.getElementById(`smart_cart_pop_added_${product_id}`).classList.add('zb-hidden'); document.getElementById(`smart_cart_pop_atc_${product_id}`).classList.remove('zb-hidden'); document.getElementById(`smart_cart_pop_atc_btn_${product_id}`).classList.remove('zb-pointer-events-none'); }, 1000); this.tranckAddToCart(params); if (target_drive_way === 'rebate') { const bannerEl = document.getElementById(`smart_cart_pop_banner`); this.getRecommendInfo(activity_id).then(res => { if (res && res.rebate_tips) { bannerEl.innerHTML = res.rebate_tips; } }) } }); this.registerAction('handleCartSummary', (event) => { const that = this; const checkoutButtonEle = document.getElementById("smart_cart_pop_checkout_button"); if (checkoutButtonEle) { SPZ.whenApiDefined(checkoutButtonEle).then(function(api){ api.render({ i18n: that.i18n_ }, false); }); } const tipEl = document.getElementById("smart_cart_pop_tip_info"); const cart = event && event.args && event.args.data && event.args.data.data; if (!tipEl || !cart) return; let total_price = cart.total_price; if (!total_price) { SPZ.whenApiDefined(tipEl).then(function(api){ api.render({ total_price: total_price, i18n: that.i18n_ }, false); }); } else { this.getBindDiscount_(cart.line_items).then(res => { if (res && res.discount_code){ const total = cart.line_price - cart.total_discount - res.bundle_discount_value; if (total > 0) { total_price = total; } else { total_price = 0; } } SPZ.whenApiDefined(tipEl).then(function(api){ api.render({ total_price: total_price, i18n: that.i18n_ }, false); }); }) } }); this.registerAction('open', () => { window.sessionStorage.setItem('smart_pop_times', Number(window.sessionStorage.getItem('smart_pop_times')) + 1); }); this.registerAction('close', () => { this.rendered_ = false; this.products_ = []; window.djInterceptors && window.djInterceptors.track.eject(this.myInterceptor_); }); } getCart() { return fetch(`${window.SHOPLAZZA.routes.root || ''}/api/cart`, { method: 'GET', headers: { 'Content-Type': 'application/json; charset=UTF-8', }, }).then(res => res.json()) } getRecommendInfo (activity_id) { return this.getCart().then(cart => { this.cart_ = cart.cart; return fetch(`${window.SHOPLAZZA.routes.root || ''}/api/possum/recommend_info`, { method: 'POST', headers: { 'Content-Type': 'application/json; charset=UTF-8', }, body: JSON.stringify({ show_type: 2, rule_id: `${activity_id}`, line_items: cart.cart.line_items, line_item: this._atcLineItem, }) }).then(res => res.json()) }) } renderProductsForm_(data) { const products = data.products; const listPopRenderEl = document.getElementById("smart_cart_pop_render"); if (!listPopRenderEl) return; listPopRenderEl.querySelectorAll('.smart_cart_pop_atc_btn_bg').forEach(function(el){ el.style.background = data.config.add_to_cart_button_color; }); products.forEach(function(product){ const productId = product.id; const productFormEls = listPopRenderEl.querySelectorAll(`ljs-product-form[product-id="${productId}"]`); let variantsEl = listPopRenderEl.querySelectorAll(`ljs-product-form[product-id="${productId}"] #smart_cart_pop_variant_${productId}_mobile ljs-variants`); if (window.innerWidth > 768) { variantsEl = listPopRenderEl.querySelectorAll(`ljs-product-form[product-id="${productId}"] #smart_cart_pop_variant_${productId}_pc ljs-variants`); } productFormEls.forEach(function(el){ SPZ.whenApiDefined(el).then(function(api){ api.setProduct(product); }); }); variantsEl.forEach(function(el){ SPZ.whenApiDefined(el).then(function(api){ api.handleRender(product); }); }) }); } tranckAddToCart(detail) { if (window.$) { window.$(document.body).trigger('dj.addToCart', detail); } } trackPluginImpression_(rule){ if (window.sa && window.sa.track) { window.sa.track("module_impressions", { aid: `smart_recommend.2.${rule.id}` }); } } getBindDiscount_(carts) { let bundle_sale_ids = []; try { bundle_sale_ids = sessionStorage['bundle_sale_ids'] && JSON.parse(sessionStorage['bundle_sale_ids']).filter((item, index, arr) => arr.indexOf(item, 0) === index).slice(-5); } catch (err) { console.error(err); } if (!carts.length) { Promise.resolve(); } return fetch(`${window.SHOPLAZZA.routes.root || ''}/api/bundle-sales/cart`, { method: 'POST', headers: { 'Content-Type': 'application/json; charset=UTF-8', 'store-id': window.SHOPLAZZA.shop.shop_id, }, body: JSON.stringify({ cart: carts, action_type: 'cart', bundle_sale_ids }) }).then(res => res.json()) } impressListen(selector, cb) { const el = document.querySelector(selector); const onImpress = (e) => { if (e) { e.stopPropagation(); } cb(); }; if (el && !el.getAttribute('imprsd')) { el.addEventListener('impress', onImpress) } else if (el) { onImpress(); } } } SPZ.defineElement('spz-custom-smart', SpzCustomComponent); ${function(){ return ` ${data.data.rebate_tips || ''} `; }()} ${function(){ const getImageHeight = function(image){ const width = image.width || 500; const height = image.height || 500; const image_size = data.config.image_size || 0; let ratio = 0; if(image_size == 0){ ratio = (height / width).toFixed(2); }else if(image_size == 1){ ratio = 1.5; } return 132 * ratio; }; const image = data.data.variant.image || data.data.product.image; return ` `; }()} ${(function(){ const product = data.product; const avail_variants = product.variants.filter(function(variant){ return variant.available; }); const selected_variant = product.min_price_variant.available ? product.min_price_variant : avail_variants.length && avail_variants[0]; return ` ${option.name} ${ option.values.map(function(value, index){ const checked = selected_variant["option"+option.position] == value ? "checked": ""; return ` ${value} ` }).join("") } ` })()} ${(function(){ const variant = data.variant; return ` `; })()} ${(function(){ const variant = data.variant; return ` ${ variant.options.map(function(option){ return option.value; }).join("/") || 'Not exist' } `; })()} ${(function(){ const variant = data.data && data.data.variant; const defaultText = data.defaultText || 'Add To Cart'; const text = (!variant || variant.available) ? defaultText: data.soldOutText; return ` ${text} `; })()} ${(function(){ let cart = data; if(data.data) { cart = data.data; } return ` ${cart.item_count >=0 ? cart.item_count : '..'} `; })()} ${(function(){ return ` ${data.i18n.checkout} `; })()} GIFTS POINTS €0.00 1 Originaltext Diese Übersetzung bewerten Mit deinem Feedback können wir Google Übersetzer weiter verbessern