${(function(){ const get_random_six_digits = () => { return Math.random().toString().slice(-6) }; const wholesale_enabled = false; const setting_product_image_display = "100%"; 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 = false && ((+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 ? `` : "Sold out" }
Mixed Lot
${data.title}
${ data.price_min != data.price_max ? `from
` : `
` }
+${data.remainInvisibleThumbCount}
` })()}
Search products
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); 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
Set to
based on your location
Purchase with
Get shipping options for
Modify Country/Region
Log in
Create an account
${data.data && data.data.count}
Shop All
ATV & UTV Parts
Kohler parts
Briggs & Stratton parts
Kawasaki Parts
Yamaha Parts
Industrial parts
Caterpillar parts
Cummins parts
Komatsu parts
New Holland Parts
Case Parts
Bobcat Parts
Isuzu Parts
Deutz Parts
Komatsu Parts
Fuel Injector 2872331 – Fits Cummins ISL8.3 / ISZ13 / QSZ13 Diesel Engines | Precision Replacement Injector
$148.00
$185.00
Starter Motor
Lawn & Garden Starter
Kohler Starter
Briggs & Stratton starter
Mercury Starter
Toro Starter
Mahindra Starter
Snow Blowers Starter
Industrial starter
Caterpillar Starter
Cummins Starter
Komatsu Starter
Perkins Starter
Deutz Starter
Volvo Starter
Kioti Starter
Thermo King Starter
MTU Starter
Hyundai Starter
Mitsubishi Starter
Agricultural starter
John Deere Starter
Case Starter
Kubota Starter
Lombardini Starter
Yanmar Starter
ATV & UTV Starter
Yamaha Starter
Honda Starter
Suzuki Starter
Kawasaki Starter
POLARIS Starter
Starter parts
Starter Drive
Starter Solenoid
Starter 10479339 – Genuine Delco Remy 50MT 8201091 | Fits Caterpillar & Cummins Engines
$318.00
$356.00
Alternator
Trucks Alternator
Scania Alternator
Cummins Alternator
Mahindra Alternator
Isuzu Alternator
Iveco Alternator
Thermo King Alternator
Agricultural Alternator
Kubota Alternator
Yanmar Alternator
Kioti Alternator
John Deere Alternator
Perkins Alternator
New Holland Alternator
Industrial Alternator
Caterpillar Alternator
Komatsu Alternator
JCB Alternator
MTU Alternator
Fuel Injector Detroit Diesel
Alternator 32A68-04700 102211-9050 – Fits HYDREMA WL480C / WL550C 804C-T (2006-On)
$126.00
$135.00
Fuel Injector
industry Fuel Injector
Fuel Injector Volvo
Fuel Injector Perkins
Fuel Injector Caterpillar
Fuel Injector GMC
Fuel Injector Detroit Diesel
Fuel Injector-Isuzu
Fuel Injector-Deutz
Fuel Injector-Komatsu
Fuel Injector-Cummins
Agricultural Fuel Injectors
Fuel Injector-New Holland
Fuel Injector- Kubota
Fuel Injector Yanmar
Fuel Injector-Bobcat
Fuel Injector-Case
Fuel Injector-John Deere
Fuel Injector 2872331 – Fits Cummins ISL8.3 / ISZ13 / QSZ13 Diesel Engines | Precision Replacement Injector
$148.00
$185.00
Electrical
ATV
Fuel Shut Off Solenoid
Ignition Key Switch
Thermostat
Sensor
Relay
STG93159 Starter relay solenoid valve suitable for various machinery 24V 150A E0634.24
$23.00
$36.00
Engine Parts
Turbocharger
Belt
Fuel Injection Pump
Fuel Lift Pump
Fuel Injector 2872331 – Fits Cummins ISL8.3 / ISZ13 / QSZ13 Diesel Engines | Precision Replacement Injector
$148.00
$185.00
Blog
Fuel Injectors Buying Guide
Starter & Alternator Insights
Home
Help Center
Order Inquiry
Shipping
Payments
Frequently asked questions
Return & Exchange Policy
Terms & Conditions of Sale
Global freight Description
Contact Us
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: 80728181, title: "Shop All", url: "\/collections\/all-collections", target: "", levels: 2, product0: { id: ("e8d33b36-3ac5-4eef-8a3e-7565845a10e5") }, children: [ { title: "ATV & UTV Parts", url: "\/collections\/atv-utv-parts", target: "", levels: 1, children: [ { title: "Kohler parts", url: "\/collections\/kohler-parts", target: "", levels: 0, }, { title: "Briggs & Stratton parts ", url: "\/collections\/briggs-stratton-parts", target: "", levels: 0, }, { title: "Kawasaki Parts", url: "\/collections\/kawasaki-parts", target: "", levels: 0, }, { title: "Yamaha Parts", url: "\/collections\/yamaha-parts", target: "", levels: 0, }, ] }, { title: "Industrial parts", url: "\/collections\/industrial-parts", target: "", levels: 1, children: [ { title: "Caterpillar parts", url: "\/collections\/caterpillar-parts", target: "", levels: 0, }, { title: "Cummins parts", url: "\/collections\/cummins-parts", target: "", levels: 0, }, { title: "Komatsu parts", url: "\/collections\/komatsu-parts", target: "", levels: 0, }, { title: "New Holland Parts", url: "\/collections\/new-holland-parts", target: "", levels: 0, }, { title: "Case Parts", url: "\/collections\/case-parts", target: "", levels: 0, }, { title: "Bobcat Parts", url: "\/collections\/bobcat-parts", target: "", levels: 0, }, { title: "Isuzu Parts", url: "\/collections\/isuzu-parts", target: "", levels: 0, }, { title: "Deutz Parts", url: "\/collections\/deutz-parts", target: "", levels: 0, }, { title: "Komatsu Parts", url: "\/collections\/komatsu-parts-16bv", target: "", levels: 0, }, ] }, ] }, { id: 80728201, title: "Starter Motor", url: "\/collections\/starter-motor-b0cl56l23c", target: "", levels: 2, product0: { id: ("28e7cfc0-2fba-477d-88c0-b93fab7a17e1") }, children: [ { title: "Lawn & Garden Starter", url: "\/collections\/lawn-garden-starter", target: "", levels: 1, children: [ { title: "Kohler Starter", url: "\/collections\/kohler-starter", target: "", levels: 0, }, { title: "Briggs & Stratton starter", url: "\/collections\/briggs-stratton-starter", target: "", levels: 0, }, { title: "Mercury Starter", url: "\/collections\/mercury-starter", target: "", levels: 0, }, { title: "Toro Starter ", url: "\/collections\/toro-starter", target: "", levels: 0, }, { title: "Mahindra Starter", url: "\/collections\/mahindra-starter", target: "", levels: 0, }, { title: "Snow Blowers Starter ", url: "\/collections\/snow-blower-starter", target: "", levels: 0, }, ] }, { title: "Industrial starter", url: "\/collections\/industrial-starter", target: "", levels: 1, children: [ { title: "Caterpillar Starter", url: "\/collections\/caterpillar-starter", target: "", levels: 0, }, { title: "Cummins Starter", url: "\/collections\/cummins-starter", target: "", levels: 0, }, { title: "Komatsu Starter", url: "\/collections\/komatsu-starter", target: "", levels: 0, }, { title: "Perkins Starter", url: "\/collections\/perkins-starter", target: "", levels: 0, }, { title: "Deutz Starter", url: "\/collections\/deutz-starter", target: "", levels: 0, }, { title: "Volvo Starter", url: "\/collections\/volvo-starter", target: "", levels: 0, }, { title: "Kioti Starter ", url: "\/collections\/kioti-starter", target: "", levels: 0, }, { title: "Thermo King Starter", url: "\/collections\/thermo-king-starter", target: "", levels: 0, }, { title: "MTU Starter", url: "\/collections\/mtu-starter", target: "", levels: 0, }, { title: "Hyundai Starter", url: "\/collections\/hyundai-starter", target: "", levels: 0, }, { title: "Mitsubishi Starter", url: "\/collections\/mitsubishi-starter", target: "", levels: 0, }, ] }, { title: "Agricultural starter", url: "\/collections\/agricultural-starter", target: "", levels: 1, children: [ { title: "John Deere Starter", url: "\/collections\/john-deere-starter", target: "", levels: 0, }, { title: "Case Starter", url: "\/collections\/case-starter", target: "", levels: 0, }, { title: "Kubota Starter ", url: "\/collections\/kubota-starter", target: "", levels: 0, }, { title: "Lombardini Starter", url: "\/collections\/lombardini-starter", target: "", levels: 0, }, { title: "Yanmar Starter", url: "\/collections\/yanmar-starter", target: "", levels: 0, }, ] }, { title: "ATV & UTV Starter", url: "\/collections\/atv-utv-starter", target: "", levels: 1, children: [ { title: "Yamaha Starter", url: "\/collections\/yamaha-starter", target: "", levels: 0, }, { title: "Honda Starter", url: "\/collections\/honda-starter", target: "", levels: 0, }, { title: "Suzuki Starter", url: "\/collections\/suzuki-starter", target: "", levels: 0, }, { title: "Kawasaki Starter", url: "\/collections\/kawasaki-starter", target: "", levels: 0, }, { title: "POLARIS Starter", url: "\/collections\/polaris-starter", target: "", levels: 0, }, ] }, { title: "Starter parts", url: "\/collections\/starter-parts", target: "", levels: 1, children: [ { title: "Starter Drive", url: "\/collections\/starter-drive", target: "", levels: 0, }, { title: "Starter Solenoid ", url: "\/collections\/starter-solenoid", target: "_blank", levels: 0, }, ] }, ] }, { id: 80728269, title: "Alternator", url: "\/collections\/alternator", target: "", levels: 2, product0: { id: ("29180e29-02f8-49b1-84b8-4243a22d18e3") }, children: [ { title: "Trucks Alternator", url: "\/collections\/trucks-alternator", target: "", levels: 1, children: [ { title: "Scania Alternator", url: "\/collections\/scania-alternator", target: "", levels: 0, }, { title: "Cummins Alternator ", url: "\/collections\/cummins-alternator", target: "", levels: 0, }, { title: "Mahindra Alternator", url: "\/collections\/mahindra-alternator", target: "", levels: 0, }, { title: "Isuzu Alternator", url: "\/collections\/isuzu-alternator", target: "", levels: 0, }, { title: "Iveco Alternator", url: "\/collections\/iveco-alternator", target: "", levels: 0, }, { title: "Thermo King Alternator", url: "\/collections\/thermo-king-alternator", target: "", levels: 0, }, ] }, { title: "Agricultural Alternator", url: "\/collections\/agricultural-alternator", target: "", levels: 1, children: [ { title: "Kubota Alternator", url: "\/collections\/kubota-alternator", target: "", levels: 0, }, { title: "Yanmar Alternator", url: "\/collections\/yanmar-alternator", target: "", levels: 0, }, { title: "Kioti Alternator", url: "\/collections\/kioti-alternator", target: "", levels: 0, }, { title: "John Deere Alternator", url: "\/collections\/john-deere-alternator", target: "", levels: 0, }, { title: "Perkins Alternator", url: "\/collections\/perkins-alternator", target: "", levels: 0, }, { title: "New Holland Alternator", url: "\/collections\/new-holland-alternator", target: "", levels: 0, }, ] }, { title: "Industrial Alternator", url: "\/collections\/industrial-alternator", target: "", levels: 1, children: [ { title: "Caterpillar Alternator ", url: "\/collections\/caterpillar-alternator", target: "", levels: 0, }, { title: "Komatsu Alternator ", url: "\/collections\/komatsu-alternator", target: "", levels: 0, }, { title: "JCB Alternator", url: "\/collections\/jcb-alternator", target: "", levels: 0, }, { title: "MTU Alternator", url: "\/collections\/mtu-alternator", target: "", levels: 0, }, { title: "Fuel Injector Detroit Diesel ", url: "\/collections\/fuel-injector-detroit-diesel", target: "", levels: 0, }, ] }, ] }, { id: 80728311, title: "Fuel Injector ", url: "\/collections\/fuel-injector", target: "", levels: 2, product0: { id: ("e8d33b36-3ac5-4eef-8a3e-7565845a10e5") }, children: [ { title: "industry Fuel Injector", url: "\/collections\/industry-fuel-injector", target: "", levels: 1, children: [ { title: "Fuel Injector Volvo", url: "\/collections\/fuel-injector-volvo", target: "", levels: 0, }, { title: "Fuel Injector Perkins ", url: "\/collections\/perkins-fuel-injector", target: "", levels: 0, }, { title: "Fuel Injector Caterpillar", url: "\/collections\/fuel-injector-caterpillar", target: "", levels: 0, }, { title: "Fuel Injector GMC", url: "\/collections\/fuel-injector-gm", target: "", levels: 0, }, { title: "Fuel Injector Detroit Diesel ", url: "\/collections\/fuel-injector-detroit-diesel", target: "", levels: 0, }, { title: "Fuel Injector-Isuzu", url: "\/collections\/fuel-injector-isuzu", target: "", levels: 0, }, { title: "Fuel Injector-Deutz", url: "\/collections\/fuel-injector-deutz", target: "", levels: 0, }, { title: "Fuel Injector-Komatsu", url: "\/collections\/fuel-injector-komatsu", target: "", levels: 0, }, { title: "Fuel Injector-Cummins", url: "\/collections\/fuel-injector-cummins", target: "", levels: 0, }, ] }, { title: "Agricultural Fuel Injectors", url: "\/collections\/agricultural-fuel-injectors", target: "", levels: 1, children: [ { title: "Fuel Injector-New Holland ", url: "", target: "", levels: 0, }, { title: "Fuel Injector- Kubota", url: "\/collections\/kubota-fuel-injector", target: "", levels: 0, }, { title: "Fuel Injector Yanmar ", url: "\/collections\/fuel-injector-yanmar", target: "", levels: 0, }, { title: "Fuel Injector-Bobcat", url: "\/collections\/fuel-injector-bobcat", target: "", levels: 0, }, { title: "Fuel Injector-Case ", url: "\/collections\/fuel-injector-case", target: "", levels: 0, }, { title: "Fuel Injector-John Deere ", url: "\/collections\/fuel-injector-john-deere", target: "", levels: 0, }, ] }, ] }, { id: 80728329, title: " Electrical", url: "\/collections\/electrical", target: "", levels: 1, product0: { id: ("3251269f-a425-4a3c-8f10-53edfb05f6cf") }, children: [ { title: "ATV", url: "\/collections\/atv", target: "", levels: 0, children: [ ] }, { title: "Fuel Shut Off Solenoid", url: "\/collections\/fuel-shut-off-solenoid", target: "", levels: 0, children: [ ] }, { title: "Ignition Key Switch", url: "\/collections\/lgnition-key-switch", target: "", levels: 0, children: [ ] }, { title: "Thermostat ", url: "\/collections\/thermostat", target: "", levels: 0, children: [ ] }, { title: "Sensor ", url: "\/collections\/sensor", target: "", levels: 0, children: [ ] }, { title: "Relay", url: "\/collections\/relay", target: "", levels: 0, children: [ ] }, ] }, { id: 80728343, title: "Engine Parts", url: "\/collections\/engine-parts", target: "", levels: 1, product0: { id: ("e8d33b36-3ac5-4eef-8a3e-7565845a10e5") }, children: [ { title: "Turbocharger", url: "\/collections\/turbocharger", target: "", levels: 0, children: [ ] }, { title: "Belt", url: "\/collections\/belt", target: "", levels: 0, children: [ ] }, { title: "Fuel Injection Pump ", url: "\/collections\/fuel-injection-pump", target: "", levels: 0, children: [ ] }, { title: "Fuel Lift Pump", url: "\/collections\/fuel-lift-pump", target: "", levels: 0, children: [ ] }, ] }, { id: 80728349, title: "Blog", url: "\/blogs\/starter-alternator-insights", target: "", levels: 1, product0: { id: (null) }, children: [ { title: "Fuel Injectors Buying Guide", url: "\/blogs\/fuel-injectors-buying-guide", target: "", levels: 0, children: [ ] }, { title: "Starter & Alternator Insights", url: "\/blogs\/starter-alternator-insights", target: "", levels: 0, children: [ ] }, ] }, { id: 80728351, title: "Home", url: "\/", target: "", levels: 0, product0: { id: (null) }, children: [ ] }, { id: 80728353, title: "Help Center", url: "", target: "", levels: 1, product0: { id: (null) }, children: [ { title: "Order Inquiry", url: "\/account\/order-lookup", target: "", levels: 0, children: [ ] }, { title: "Shipping", url: "\/pages\/shipping", target: "", levels: 0, children: [ ] }, { title: "Payments", url: "\/pages\/payments", target: "", levels: 0, children: [ ] }, { title: "Frequently asked questions", url: "\/pages\/frequently-asked-questions", target: "", levels: 0, children: [ ] }, { title: "Return & Exchange Policy", url: "\/pages\/return-exchange-policy", target: "", levels: 0, children: [ ] }, { title: "Terms & Conditions of Sale \ufeff", url: "\/pages\/terms-conditions-of-sale", target: "", levels: 0, children: [ ] }, { title: "Global freight Description", url: "\/pages\/global-freight-description", target: "", levels: 0, children: [ ] }, ] }, { id: 80728369, title: "Contact Us", url: "\/pages\/contact-us", 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
ATV & UTV Parts
Kohler parts
Briggs & Stratton parts
Kawasaki Parts
Yamaha Parts
Industrial parts
Caterpillar parts
Cummins parts
Komatsu parts
New Holland Parts
Case Parts
Bobcat Parts
Isuzu Parts
Deutz Parts
Komatsu Parts
Fuel Injector 2872331 – Fits Cummins ISL8.3 / ISZ13 / QSZ13 Diesel Engines | Precision Replacement Injector
$148.00
$185.00
Starter Motor
Lawn & Garden Starter
Kohler Starter
Briggs & Stratton starter
Mercury Starter
Toro Starter
Mahindra Starter
Snow Blowers Starter
Industrial starter
Caterpillar Starter
Cummins Starter
Komatsu Starter
Perkins Starter
Deutz Starter
Volvo Starter
Kioti Starter
Thermo King Starter
MTU Starter
Hyundai Starter
Mitsubishi Starter
Agricultural starter
John Deere Starter
Case Starter
Kubota Starter
Lombardini Starter
Yanmar Starter
ATV & UTV Starter
Yamaha Starter
Honda Starter
Suzuki Starter
Kawasaki Starter
POLARIS Starter
Starter parts
Starter Drive
Starter Solenoid
Starter 10479339 – Genuine Delco Remy 50MT 8201091 | Fits Caterpillar & Cummins Engines
$318.00
$356.00
Alternator
Trucks Alternator
Scania Alternator
Cummins Alternator
Mahindra Alternator
Isuzu Alternator
Iveco Alternator
Thermo King Alternator
Agricultural Alternator
Kubota Alternator
Yanmar Alternator
Kioti Alternator
John Deere Alternator
Perkins Alternator
New Holland Alternator
Industrial Alternator
Caterpillar Alternator
Komatsu Alternator
JCB Alternator
MTU Alternator
Fuel Injector Detroit Diesel
Alternator 32A68-04700 102211-9050 – Fits HYDREMA WL480C / WL550C 804C-T (2006-On)
$126.00
$135.00
Fuel Injector
industry Fuel Injector
Fuel Injector Volvo
Fuel Injector Perkins
Fuel Injector Caterpillar
Fuel Injector GMC
Fuel Injector Detroit Diesel
Fuel Injector-Isuzu
Fuel Injector-Deutz
Fuel Injector-Komatsu
Fuel Injector-Cummins
Agricultural Fuel Injectors
Fuel Injector-New Holland
Fuel Injector- Kubota
Fuel Injector Yanmar
Fuel Injector-Bobcat
Fuel Injector-Case
Fuel Injector-John Deere
Fuel Injector 2872331 – Fits Cummins ISL8.3 / ISZ13 / QSZ13 Diesel Engines | Precision Replacement Injector
$148.00
$185.00
Electrical
ATV
Fuel Shut Off Solenoid
Ignition Key Switch
Thermostat
Sensor
Relay
STG93159 Starter relay solenoid valve suitable for various machinery 24V 150A E0634.24
$23.00
$36.00
Engine Parts
Turbocharger
Belt
Fuel Injection Pump
Fuel Lift Pump
Fuel Injector 2872331 – Fits Cummins ISL8.3 / ISZ13 / QSZ13 Diesel Engines | Precision Replacement Injector
$148.00
$185.00
Blog
Fuel Injectors Buying Guide
Starter & Alternator Insights
Home
Help Center
Order Inquiry
Shipping
Payments
Frequently asked questions
Return & Exchange Policy
Terms & Conditions of Sale
Global freight Description
Contact Us
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: 80728181, title: "Shop All", url: "\/collections\/all-collections", target: "", levels: 2, product0: { id: ("e8d33b36-3ac5-4eef-8a3e-7565845a10e5") }, children: [ { title: "ATV & UTV Parts", url: "\/collections\/atv-utv-parts", target: "", levels: 1, children: [ { title: "Kohler parts", url: "\/collections\/kohler-parts", target: "", levels: 0, }, { title: "Briggs & Stratton parts ", url: "\/collections\/briggs-stratton-parts", target: "", levels: 0, }, { title: "Kawasaki Parts", url: "\/collections\/kawasaki-parts", target: "", levels: 0, }, { title: "Yamaha Parts", url: "\/collections\/yamaha-parts", target: "", levels: 0, }, ] }, { title: "Industrial parts", url: "\/collections\/industrial-parts", target: "", levels: 1, children: [ { title: "Caterpillar parts", url: "\/collections\/caterpillar-parts", target: "", levels: 0, }, { title: "Cummins parts", url: "\/collections\/cummins-parts", target: "", levels: 0, }, { title: "Komatsu parts", url: "\/collections\/komatsu-parts", target: "", levels: 0, }, { title: "New Holland Parts", url: "\/collections\/new-holland-parts", target: "", levels: 0, }, { title: "Case Parts", url: "\/collections\/case-parts", target: "", levels: 0, }, { title: "Bobcat Parts", url: "\/collections\/bobcat-parts", target: "", levels: 0, }, { title: "Isuzu Parts", url: "\/collections\/isuzu-parts", target: "", levels: 0, }, { title: "Deutz Parts", url: "\/collections\/deutz-parts", target: "", levels: 0, }, { title: "Komatsu Parts", url: "\/collections\/komatsu-parts-16bv", target: "", levels: 0, }, ] }, ] }, { id: 80728201, title: "Starter Motor", url: "\/collections\/starter-motor-b0cl56l23c", target: "", levels: 2, product0: { id: ("28e7cfc0-2fba-477d-88c0-b93fab7a17e1") }, children: [ { title: "Lawn & Garden Starter", url: "\/collections\/lawn-garden-starter", target: "", levels: 1, children: [ { title: "Kohler Starter", url: "\/collections\/kohler-starter", target: "", levels: 0, }, { title: "Briggs & Stratton starter", url: "\/collections\/briggs-stratton-starter", target: "", levels: 0, }, { title: "Mercury Starter", url: "\/collections\/mercury-starter", target: "", levels: 0, }, { title: "Toro Starter ", url: "\/collections\/toro-starter", target: "", levels: 0, }, { title: "Mahindra Starter", url: "\/collections\/mahindra-starter", target: "", levels: 0, }, { title: "Snow Blowers Starter ", url: "\/collections\/snow-blower-starter", target: "", levels: 0, }, ] }, { title: "Industrial starter", url: "\/collections\/industrial-starter", target: "", levels: 1, children: [ { title: "Caterpillar Starter", url: "\/collections\/caterpillar-starter", target: "", levels: 0, }, { title: "Cummins Starter", url: "\/collections\/cummins-starter", target: "", levels: 0, }, { title: "Komatsu Starter", url: "\/collections\/komatsu-starter", target: "", levels: 0, }, { title: "Perkins Starter", url: "\/collections\/perkins-starter", target: "", levels: 0, }, { title: "Deutz Starter", url: "\/collections\/deutz-starter", target: "", levels: 0, }, { title: "Volvo Starter", url: "\/collections\/volvo-starter", target: "", levels: 0, }, { title: "Kioti Starter ", url: "\/collections\/kioti-starter", target: "", levels: 0, }, { title: "Thermo King Starter", url: "\/collections\/thermo-king-starter", target: "", levels: 0, }, { title: "MTU Starter", url: "\/collections\/mtu-starter", target: "", levels: 0, }, { title: "Hyundai Starter", url: "\/collections\/hyundai-starter", target: "", levels: 0, }, { title: "Mitsubishi Starter", url: "\/collections\/mitsubishi-starter", target: "", levels: 0, }, ] }, { title: "Agricultural starter", url: "\/collections\/agricultural-starter", target: "", levels: 1, children: [ { title: "John Deere Starter", url: "\/collections\/john-deere-starter", target: "", levels: 0, }, { title: "Case Starter", url: "\/collections\/case-starter", target: "", levels: 0, }, { title: "Kubota Starter ", url: "\/collections\/kubota-starter", target: "", levels: 0, }, { title: "Lombardini Starter", url: "\/collections\/lombardini-starter", target: "", levels: 0, }, { title: "Yanmar Starter", url: "\/collections\/yanmar-starter", target: "", levels: 0, }, ] }, { title: "ATV & UTV Starter", url: "\/collections\/atv-utv-starter", target: "", levels: 1, children: [ { title: "Yamaha Starter", url: "\/collections\/yamaha-starter", target: "", levels: 0, }, { title: "Honda Starter", url: "\/collections\/honda-starter", target: "", levels: 0, }, { title: "Suzuki Starter", url: "\/collections\/suzuki-starter", target: "", levels: 0, }, { title: "Kawasaki Starter", url: "\/collections\/kawasaki-starter", target: "", levels: 0, }, { title: "POLARIS Starter", url: "\/collections\/polaris-starter", target: "", levels: 0, }, ] }, { title: "Starter parts", url: "\/collections\/starter-parts", target: "", levels: 1, children: [ { title: "Starter Drive", url: "\/collections\/starter-drive", target: "", levels: 0, }, { title: "Starter Solenoid ", url: "\/collections\/starter-solenoid", target: "_blank", levels: 0, }, ] }, ] }, { id: 80728269, title: "Alternator", url: "\/collections\/alternator", target: "", levels: 2, product0: { id: ("29180e29-02f8-49b1-84b8-4243a22d18e3") }, children: [ { title: "Trucks Alternator", url: "\/collections\/trucks-alternator", target: "", levels: 1, children: [ { title: "Scania Alternator", url: "\/collections\/scania-alternator", target: "", levels: 0, }, { title: "Cummins Alternator ", url: "\/collections\/cummins-alternator", target: "", levels: 0, }, { title: "Mahindra Alternator", url: "\/collections\/mahindra-alternator", target: "", levels: 0, }, { title: "Isuzu Alternator", url: "\/collections\/isuzu-alternator", target: "", levels: 0, }, { title: "Iveco Alternator", url: "\/collections\/iveco-alternator", target: "", levels: 0, }, { title: "Thermo King Alternator", url: "\/collections\/thermo-king-alternator", target: "", levels: 0, }, ] }, { title: "Agricultural Alternator", url: "\/collections\/agricultural-alternator", target: "", levels: 1, children: [ { title: "Kubota Alternator", url: "\/collections\/kubota-alternator", target: "", levels: 0, }, { title: "Yanmar Alternator", url: "\/collections\/yanmar-alternator", target: "", levels: 0, }, { title: "Kioti Alternator", url: "\/collections\/kioti-alternator", target: "", levels: 0, }, { title: "John Deere Alternator", url: "\/collections\/john-deere-alternator", target: "", levels: 0, }, { title: "Perkins Alternator", url: "\/collections\/perkins-alternator", target: "", levels: 0, }, { title: "New Holland Alternator", url: "\/collections\/new-holland-alternator", target: "", levels: 0, }, ] }, { title: "Industrial Alternator", url: "\/collections\/industrial-alternator", target: "", levels: 1, children: [ { title: "Caterpillar Alternator ", url: "\/collections\/caterpillar-alternator", target: "", levels: 0, }, { title: "Komatsu Alternator ", url: "\/collections\/komatsu-alternator", target: "", levels: 0, }, { title: "JCB Alternator", url: "\/collections\/jcb-alternator", target: "", levels: 0, }, { title: "MTU Alternator", url: "\/collections\/mtu-alternator", target: "", levels: 0, }, { title: "Fuel Injector Detroit Diesel ", url: "\/collections\/fuel-injector-detroit-diesel", target: "", levels: 0, }, ] }, ] }, { id: 80728311, title: "Fuel Injector ", url: "\/collections\/fuel-injector", target: "", levels: 2, product0: { id: ("e8d33b36-3ac5-4eef-8a3e-7565845a10e5") }, children: [ { title: "industry Fuel Injector", url: "\/collections\/industry-fuel-injector", target: "", levels: 1, children: [ { title: "Fuel Injector Volvo", url: "\/collections\/fuel-injector-volvo", target: "", levels: 0, }, { title: "Fuel Injector Perkins ", url: "\/collections\/perkins-fuel-injector", target: "", levels: 0, }, { title: "Fuel Injector Caterpillar", url: "\/collections\/fuel-injector-caterpillar", target: "", levels: 0, }, { title: "Fuel Injector GMC", url: "\/collections\/fuel-injector-gm", target: "", levels: 0, }, { title: "Fuel Injector Detroit Diesel ", url: "\/collections\/fuel-injector-detroit-diesel", target: "", levels: 0, }, { title: "Fuel Injector-Isuzu", url: "\/collections\/fuel-injector-isuzu", target: "", levels: 0, }, { title: "Fuel Injector-Deutz", url: "\/collections\/fuel-injector-deutz", target: "", levels: 0, }, { title: "Fuel Injector-Komatsu", url: "\/collections\/fuel-injector-komatsu", target: "", levels: 0, }, { title: "Fuel Injector-Cummins", url: "\/collections\/fuel-injector-cummins", target: "", levels: 0, }, ] }, { title: "Agricultural Fuel Injectors", url: "\/collections\/agricultural-fuel-injectors", target: "", levels: 1, children: [ { title: "Fuel Injector-New Holland ", url: "", target: "", levels: 0, }, { title: "Fuel Injector- Kubota", url: "\/collections\/kubota-fuel-injector", target: "", levels: 0, }, { title: "Fuel Injector Yanmar ", url: "\/collections\/fuel-injector-yanmar", target: "", levels: 0, }, { title: "Fuel Injector-Bobcat", url: "\/collections\/fuel-injector-bobcat", target: "", levels: 0, }, { title: "Fuel Injector-Case ", url: "\/collections\/fuel-injector-case", target: "", levels: 0, }, { title: "Fuel Injector-John Deere ", url: "\/collections\/fuel-injector-john-deere", target: "", levels: 0, }, ] }, ] }, { id: 80728329, title: " Electrical", url: "\/collections\/electrical", target: "", levels: 1, product0: { id: ("3251269f-a425-4a3c-8f10-53edfb05f6cf") }, children: [ { title: "ATV", url: "\/collections\/atv", target: "", levels: 0, children: [ ] }, { title: "Fuel Shut Off Solenoid", url: "\/collections\/fuel-shut-off-solenoid", target: "", levels: 0, children: [ ] }, { title: "Ignition Key Switch", url: "\/collections\/lgnition-key-switch", target: "", levels: 0, children: [ ] }, { title: "Thermostat ", url: "\/collections\/thermostat", target: "", levels: 0, children: [ ] }, { title: "Sensor ", url: "\/collections\/sensor", target: "", levels: 0, children: [ ] }, { title: "Relay", url: "\/collections\/relay", target: "", levels: 0, children: [ ] }, ] }, { id: 80728343, title: "Engine Parts", url: "\/collections\/engine-parts", target: "", levels: 1, product0: { id: ("e8d33b36-3ac5-4eef-8a3e-7565845a10e5") }, children: [ { title: "Turbocharger", url: "\/collections\/turbocharger", target: "", levels: 0, children: [ ] }, { title: "Belt", url: "\/collections\/belt", target: "", levels: 0, children: [ ] }, { title: "Fuel Injection Pump ", url: "\/collections\/fuel-injection-pump", target: "", levels: 0, children: [ ] }, { title: "Fuel Lift Pump", url: "\/collections\/fuel-lift-pump", target: "", levels: 0, children: [ ] }, ] }, { id: 80728349, title: "Blog", url: "\/blogs\/starter-alternator-insights", target: "", levels: 1, product0: { id: (null) }, children: [ { title: "Fuel Injectors Buying Guide", url: "\/blogs\/fuel-injectors-buying-guide", target: "", levels: 0, children: [ ] }, { title: "Starter & Alternator Insights", url: "\/blogs\/starter-alternator-insights", target: "", levels: 0, children: [ ] }, ] }, { id: 80728351, title: "Home", url: "\/", target: "", levels: 0, product0: { id: (null) }, children: [ ] }, { id: 80728353, title: "Help Center", url: "", target: "", levels: 1, product0: { id: (null) }, children: [ { title: "Order Inquiry", url: "\/account\/order-lookup", target: "", levels: 0, children: [ ] }, { title: "Shipping", url: "\/pages\/shipping", target: "", levels: 0, children: [ ] }, { title: "Payments", url: "\/pages\/payments", target: "", levels: 0, children: [ ] }, { title: "Frequently asked questions", url: "\/pages\/frequently-asked-questions", target: "", levels: 0, children: [ ] }, { title: "Return & Exchange Policy", url: "\/pages\/return-exchange-policy", target: "", levels: 0, children: [ ] }, { title: "Terms & Conditions of Sale \ufeff", url: "\/pages\/terms-conditions-of-sale", target: "", levels: 0, children: [ ] }, { title: "Global freight Description", url: "\/pages\/global-freight-description", target: "", levels: 0, children: [ ] }, ] }, { id: 80728369, title: "Contact Us", url: "\/pages\/contact-us", 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); 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
Set to
based on your location
Purchase with
Get shipping options for
Modify Country/Region
Log in
Create an account
${data.data && data.data.count}
Search products
Shop All
ATV & UTV Parts
Industrial parts
Starter Motor
Lawn & Garden Starter
Industrial starter
Agricultural starter
ATV & UTV Starter
Starter parts
Alternator
Trucks Alternator
Agricultural Alternator
Industrial Alternator
Fuel Injector
industry Fuel Injector
Agricultural Fuel Injectors
Electrical
ATV
Fuel Shut Off Solenoid
Ignition Key Switch
Thermostat
Sensor
Relay
Engine Parts
Turbocharger
Belt
Fuel Injection Pump
Fuel Lift Pump
Blog
Fuel Injectors Buying Guide
Starter & Alternator Insights
Home
Help Center
Order Inquiry
Shipping
Payments
Frequently asked questions
Return & Exchange Policy
Terms & Conditions of Sale
Global freight Description
Contact Us
${(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.
` })()}
${(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.
` })()}
Shop All
Shop All
ATV & UTV Parts
ATV & UTV Parts
Kohler parts
Briggs & Stratton parts
Kawasaki Parts
Yamaha Parts
Industrial parts
Industrial parts
Caterpillar parts
Cummins parts
Komatsu parts
New Holland Parts
Case Parts
Bobcat Parts
Isuzu Parts
Deutz Parts
Komatsu Parts
Starter Motor
Starter Motor
Lawn & Garden Starter
Lawn & Garden Starter
Kohler Starter
Briggs & Stratton starter
Mercury Starter
Toro Starter
Mahindra Starter
Snow Blowers Starter
Industrial starter
Industrial starter
Caterpillar Starter
Cummins Starter
Komatsu Starter
Perkins Starter
Deutz Starter
Volvo Starter
Kioti Starter
Thermo King Starter
MTU Starter
Hyundai Starter
Mitsubishi Starter
Agricultural starter
Agricultural starter
John Deere Starter
Case Starter
Kubota Starter
Lombardini Starter
Yanmar Starter
ATV & UTV Starter
ATV & UTV Starter
Yamaha Starter
Honda Starter
Suzuki Starter
Kawasaki Starter
POLARIS Starter
Starter parts
Starter parts
Starter Drive
Starter Solenoid
Alternator
Alternator
Trucks Alternator
Trucks Alternator
Scania Alternator
Cummins Alternator
Mahindra Alternator
Isuzu Alternator
Iveco Alternator
Thermo King Alternator
Agricultural Alternator
Agricultural Alternator
Kubota Alternator
Yanmar Alternator
Kioti Alternator
John Deere Alternator
Perkins Alternator
New Holland Alternator
Industrial Alternator
Industrial Alternator
Caterpillar Alternator
Komatsu Alternator
JCB Alternator
MTU Alternator
Fuel Injector Detroit Diesel
Fuel Injector
Fuel Injector
industry Fuel Injector
industry Fuel Injector
Fuel Injector Volvo
Fuel Injector Perkins
Fuel Injector Caterpillar
Fuel Injector GMC
Fuel Injector Detroit Diesel
Fuel Injector-Isuzu
Fuel Injector-Deutz
Fuel Injector-Komatsu
Fuel Injector-Cummins
Agricultural Fuel Injectors
Agricultural Fuel Injectors
Fuel Injector-New Holland
Fuel Injector- Kubota
Fuel Injector Yanmar
Fuel Injector-Bobcat
Fuel Injector-Case
Fuel Injector-John Deere
Electrical
Electrical
ATV
Fuel Shut Off Solenoid
Ignition Key Switch
Thermostat
Sensor
Relay
Engine Parts
Engine Parts
Turbocharger
Belt
Fuel Injection Pump
Fuel Lift Pump
Blog
Blog
Fuel Injectors Buying Guide
Starter & Alternator Insights
Home
Help Center
Help Center
Order Inquiry
Shipping
Payments
Frequently asked questions
Return & Exchange Policy
Terms & Conditions of Sale
Global freight Description
Contact Us
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); 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
Set to
based on your location
Purchase with
Get shipping options for
Modify Country/Region
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(); })();
EasyBuyShop - TIANGUAN
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}
(-
)
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
${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 + `@${nameEscape}Mouseout="quick-shop-selected-variant-${opt.id}.rerender(data=event.selectData.${opt.name}, redo=true);"`; mouse_over_event = mouse_over_event + `@${nameEscape}Mouseover="quick-shop-selected-variant-${opt.id}.rerender(data=event, redo=true);"`; } 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 = null; 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_with_text"; 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}