PageSourceSearch

https://www.citiesocial.com/cdn/shop/t/18/assets/citiesocial.js?v=15267173742309050761790135472

js citiesocial.com collected 2026-09-24 17:39:19 UTC 72,221 bytes, 214 lines download raw bytes

1const Citiesocial={config:{userIdCookieName:"d41d8cd98f00b204e9800998ecf8427e"},version:"18.5.11",getUserId:function(){return Citiesocial.utils.getCookie(Citiesocial.config.userIdCookieName)},setUserId:function(customerId){Citiesocial.utils.setCookie(Citiesocial.config.userIdCookieName,customerId,180)},identifyUser:async function(customer){const userData=JSON.stringify({shopify_customer_id:customer.id,email:customer.email});$.ajax({type:"POST",url:`${PY3_API_BASE_URL}/api/v1.2/shopify-domain/customers/get-account/`,headers:{Authorization:"Basic "+btoa("citiesocial_native_mobile_app:PW9Xk9p6vQ2v9Q3H8be3nVYMGzqDhUDk")},dataType:"json",contentType:"application/json",data:userData,success:function(response){return window.analytics.identify(response.results.id,{email:response.results.email,total_order:customer.ordersCount,total_spent:customer.totalSpent}),sessionStorage.setItem("cs_userId",response.results.id),response.results.id},error:function(xhr){console.log("error: "+xhr)}})},getDeviceType:function(){const ua=navigator.userAgent;return/(tablet|ipad|playbook|silk)|(android(?!.*mobi))/i.test(ua)?"tablet":/Mobile|iP(hone|od)|Android|BlackBerry|IEMobile|Kindle|Silk-Accelerated|(hpw|web)OS|Opera M(obi|ini)/.test(ua)?"mobile":"desktop"},getOS:function(){var userAgent=window.navigator.userAgent,platform=window.navigator.platform,macosPlatforms=["Macintosh","MacIntel","MacPPC","Mac68K"],windowsPlatforms=["Win32","Win64","Windows","WinCE"],iosPlatforms=["iPhone","iPad","iPod"],os=null;return macosPlatforms.indexOf(platform)!==-1?os="Mac":iosPlatforms.indexOf(platform)!==-1?os="iOS":windowsPlatforms.indexOf(platform)!==-1?os="Windows":/Android/.test(userAgent)?os="Android":!os&&/Linux/.test(platform)&&(os="Linux"),os},utils:{testGroup00CookieName:"__cs_tg00",convenienceStoreInfoStorageKey:"__cs_convenience_store_info",setCookie:function(name,value,days){Cookies.set(name,value,{expires:days})},getCookie:function(name){return document.cookie.length>0?Cookies.get(name):""},removeCookie:function(name=""){Cookies.remove(name)},getTestGroup00:function(){var currentTestGroup00=Cookies.get(this.testGroup00CookieName);return(currentTestGroup00===""||currentTestGroup00==null)&&(currentTestGroup00=Math.floor(Math.random()*6)+1,this.setCookie(this.testGroup00CookieName,currentTestGroup00,1e3)),currentTestGroup00.toString()},generateFormBody:function(data){const formBody=[];for(const key in data){const encodedKey=encodeURIComponent(key),encodedValue=encodeURIComponent(data[key]);formBody.push(`${encodedKey}=${encodedValue}`)}return formBody.join("&")},shuffle:function(array){for(let i=array.length-1;i>0;i--){const j=Math.floor(Math.random()*(i+1));[array[i],array[j]]=[array[j],array[i]]}},throttle:function(func,duration){let shouldWait=!1;return function(...args){shouldWait||(func.apply(this,args),shouldWait=!0,setTimeout(function(){shouldWait=!1},duration))}},debounce:function(func,wait,options){let timeout,immediate,callFirst;return Citiesocial.utils.isObject(options)&&({immediate=!1,callFirst=!1}=options),function(){const context=this,args=arguments;callFirst&&(callFirst=!1,func.apply(context,args));const later=function(){timeout=null,immediate||func.apply(context,args)},callNow=immediate&&!timeout;clearTimeout(timeout),timeout=setTimeout(later,wait),callNow&&func.apply(context,args)}},isSafari:function(){let isSafari=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);return(navigator.userAgent.match("CriOS")||navigator.userAgent.match("FxiOS"))&&(isSafari=!1),isSafari},isObject:function(variable){return Object.prototype.toString.call(variable)==="[object Object]"},isApp:function(){return navigator.userAgent.includes("cs_webview")},isWebview:function(){const{userAgent}=navigator,rules=["WebView","(iPhone|iPod|iPad)(?!.*Safari/)","Android.*(wv|.0.0.0)"],regex=new RegExp(`(${rules.join("|")})`,"ig");return!!userAgent.match(regex)},isMobile:function(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)&&!window.MSStream},detectInAppBrowser:function(){const userAgent=navigator.userAgent||navigator.vendor||window.opera,BROWSER={Messenger
1:/\bFB[\w_]+\/(Messenger|MESSENGER)/,Facebook:/\bFB[\w_]+\//,Twitter:/\bTwitter/i,LINE:/\bLine\//i,Wechat:/\bMicroMessenger\//i,Puffin:/\bPuffin/i,miui:/\bMiuiBrowser\//i,Instagram:/\bInstagram/i,Chrome:/\bCrMo\b|CriOS|Android.*Chrome\/[.0-9]* (Mobile)?/,Safari:/Version.*Mobile.*Safari|Safari.*Mobile|MobileSafari/,ie:/IEMobile|MSIEMobile/,Firefox:/fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS/,Opera:/Opera|OPR\//,Edge:/Edge|Edg\//,Vivaldi:/Vivaldi/,Brave:/Brave\//,DuckDuckGo:/DuckDuckGo/,SamsungBrowser:/SamsungBrowser/,UC:/UCBrowser/};for(const browser in BROWSER)if(BROWSER[browser].test(userAgent))return browser;return"unknown"},countdown:function(time){const countDownDate=new Date(time).getTime(),now=new Date().getTime(),distance=countDownDate-now;if(distance<=0)return{days:0,hours:0,minutes:0,seconds:0};{const days=Math.floor(distance/864e5),hours=Math.floor(distance%(1e3*60*60*24)/(1e3*60*60)),minutes=Math.floor(distance%(1e3*60*60)/(1e3*60)),seconds=Math.floor(distance%(1e3*60)/1e3);return{days,hours,minutes,seconds}}},getCountdownLabelText:function(countdown){const{days,hours,minutes,seconds}=countdown;return days%COUNTDOWN_MOD?`\u5012\u6578 ${days%COUNTDOWN_MOD} \u5929`:hours?`\u5012\u6578 ${hours} \u5C0F\u6642`:minutes?`\u5012\u6578 ${minutes} \u5206\u9418`:seconds?`\u5012\u6578 ${seconds} \u79D2`:""},formatNumber:function(data){return data.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")},getSelectedVariant:function(variants){if(variants.length===1)return variants[0];const firstIndexWithInventory=variants.findIndex(variant=>variant.inventory_quantity>0);return firstIndexWithInventory>=0?variants[firstIndexWithInventory]:variants[0]},detectMobilOS:function(){return/iPhone|iPad|iPod/i.test(window.navigator.userAgent)?"ios":/Android/i.test(window.navigator.userAgent)?"android":""},hasClassName:function(element,className){return element.classList.contains(className)},toggleClassName:function(element,className){element.classList.toggle(className)},asyncLoad:function(link){const script=document.createElement("script");script.type="text/javascript",script.async=!0,script.src=link;const firstScriptTag=document.getElementsByTagName("script")[0];firstScriptTag.parentNode.insertBefore(script,firstScriptTag)},waitForGoogleAnalyticsLoadedToExecute:function(func){typeof func=="function"&&(typeof ga=="function"?func():setTimeout(()=>{Citiesocial.utils.waitForGoogleAnalyticsLoadedToExecute(func)},500))},getUrlVars:function(){for(var vars=[],hash,hashes=window.location.href.slice(window.location.href.indexOf("?")+1).split("&"),i=0;i<hashes.length;i++)hash=hashes[i].split("="),vars.push(hash[0]),vars[hash[0]]=hash[1];return vars},parseJwt:function(token){if(!token)return{};var base64Url=token.split(".")[1],base64=base64Url.replace(/-/g,"+").replace(/_/g,"/"),jsonPayload=decodeURIComponent(atob(base64).split("").map(function(c){return"%"+("00"+c.charCodeAt(0).toString(16)).slice(-2)}).join(""));return JSON.parse(jsonPayload)},getCurrency:function(number){return`NT$ ${Number(number).toLocaleString("zh-TW")}`},uuidv4:function(){return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,c=>(+c^crypto.getRandomValues(new Uint8Array(1))[0]&15>>+c/4).toString(16))},getReferrerPath:function(){const referrer=document.referrer;try{if(referrer)return new URL(referrer).pathname}catch(error){console.error("Error parsing referrer URL:",error)}return""},convertPhoneNumber:function(phoneNumber){return/^0[0-9]{9}$/.test(phoneNumber)?phoneNumber.replace(/^0/,"+886"):phoneNumber},safeJsonParse:function(jsonString,defaultValue=null){try{return JSON.parse(jsonString)}catch{return defaultValue}},safeJsonStringify:function(value,defaultValue="{}",replacer=null,space=null){try{return JSON.stringify(value,replacer,space)}catch(error){return console.error("JSON.stringify failed:",error),defaultValue}},oldSchoolCopy:function(text){const tempTextArea=document.createElement("textarea");tempTextArea.value=text,document.body.appendChild(tempTextArea),tempTextArea.select(),document.execCommand("copy"),document.body.removeChild(tempTextArea)},getConvenienceStoreInfoFromSearch:function(search=window.location.search){const params=new URLSearchParams(search),storeInfo={cvsStoreName:params.get("name")||"",cvsStoreAddress:params.get("addr")||"",cvsStoreSpot:params.get("cvsspot")||"",cvsStoreNumber:params.get("cvsnum")||""};return Object.values(storeInfo).some(Boolean)?storeInfo:null},getSavedConvenienceStoreInfo:function(){const savedStoreInfo=localStorage.getItem(Citiesocial.utils.convenienceStoreInfoStorageKey);
1return Citiesocial.utils.safeJsonParse(savedStoreInfo,null)},saveConvenienceStoreInfo:function(storeInfo=null){return Object.values(storeInfo||{}).some(Boolean)?(localStorage.setItem(Citiesocial.utils.convenienceStoreInfoStorageKey,Citiesocial.utils.safeJsonStringify(storeInfo,"null")),storeInfo):null},removeConvenienceStoreInfoQueryString:function(){const url=new URL(window.location.href),paramKeys=["name","addr","cvsspot","cvsnum","cvsid","cvstemp","cvsname","tel"];let shouldReplaceUrl=!1;return paramKeys.forEach(key=>{url.searchParams.has(key)&&(url.searchParams.delete(key),shouldReplaceUrl=!0)}),shouldReplaceUrl?(window.history.replaceState(window.history.state,"",`${url.pathname}${url.search}${url.hash}`),!0):!1},persistConvenienceStoreInfoFromSearch:function(){const storeInfo=Citiesocial.utils.getConvenienceStoreInfoFromSearch();return storeInfo?(Citiesocial.utils.saveConvenienceStoreInfo(storeInfo),Citiesocial.utils.removeConvenienceStoreInfoQueryString(),storeInfo):null},clearSavedConvenienceStoreInfo:function(){localStorage.removeItem(Citiesocial.utils.convenienceStoreInfoStorageKey)},todayYMDLocal(){const n=new Date,y=n.getFullYear(),m=String(n.getMonth()+1).padStart(2,"0"),d=String(n.getDate()).padStart(2,"0");return`${y}-${m}-${d}`}},userManager:{isLogin:function(){return window.customer!==void 0},getLoginStatus:function(){return Citiesocial.userManager.isLogin()?"Full":Citiesocial.authManager.getAccessToken()?"Semi":"None"},getCustomer:function(){return window.customer},fetchUserFavoriteProducts:async function(size=12,page=1){if(!Citiesocial.authManager.getAccessToken())return[[],{}];try{const responseJson=await(await fetch(`${PY3_API_BASE_URL}/api/v1.2/product/favorites/?page=${page}&page_size=${size}`,{method:"GET",headers:{"Content-Type":APPLICATION_JSON,Authorization:Citiesocial.authManager.getAuthorizationHeader()}})).json(),{favorites,page_info:pageInfo}=responseJson.results;return{userFavoriteProducts:favorites.map(({product})=>Citiesocial.productManager.favoriteProductsFormat(product)),pageInfo}}catch{return[[],{}]}},fetchUserFavoriteProductIds:async function(){try{return(await(await fetch(`${PY3_API_BASE_URL}/api/v1.2/product/favorites/?page_size=200&source=browser`,{method:"GET",headers:{"Content-Type":APPLICATION_JSON,Authorization:Citiesocial.authManager.getAuthorizationHeader()}})).json()).results.favorites.map(favorite=>favorite.product.shopify_id)}catch{return[]}},addProductsToFavorites:async function(productIds=[]){if(productIds.length===0)return;const data={shopify_product_ids:productIds,product_ids:[],source:"browser"};fetch(`${PY3_API_BASE_URL}/api/v1.2/product/favorites/`,{method:"POST",headers:{"Content-Type":APPLICATION_JSON,Authorization:Citiesocial.authManager.getAuthorizationHeader()},body:JSON.stringify(data)})},removeProductsFromFavorites:function(productIds=[]){if(productIds.length===0)return;const data={shopify_product_ids:productIds,product_ids:[],source:"browser"};fetch(`${PY3_API_BASE_URL}/api/v1.2/product/favorites/`,{method:"DELETE",headers:{"Content-Type":APPLICATION_JSON,Authorization:Citiesocial.authManager.getAuthorizationHeader()},body:JSON.stringify(data)})},getUserFavoriteProductIdSet:function(){const userFavoriteProductIds=JSON.parse(localStorage.getItem("userFavoriteProductIds"))||[];return new Set(userFavoriteProductIds)},setUserFavoriteProductIds(productIds=[]){localStorage.setItem("userFavoriteProductIds",JSON.stringify(productIds))},handleLoginAndRegisterRedirect(){$("#checkout__login, #checkout__register").click(function(){sessionStorage.setItem("targetRedirectPath",window.location.pathname)})},showGoogleLoginAlertModal(){const googleLoginAlertModal=$("[data-remodal-id=modal-google-login-alert]").remodal(),inAppBrowser=Citiesocial.utils.detectInAppBrowser(),displayBrowserName=["Chrome","Safari","ie","Firefox","unknown"].includes(inAppBrowser)?"APP \u61C9\u7528\u7A0B\u5F0F":inAppBrowser;$("#modal-google-login-alert__in-app-browser").text(` ${displayBrowserName} \u7684`),googleLoginAlertModal.open()},getSegmentAnonymousId(){try{return window?.analytics?.user()?.anonymousId()}
1catch{return Citiesocial.utils.safeJsonParse(localStorage.getItem("ajs_anonymous_id"))||void 0}},getLineMember:async function({clid}){try{return clid?(await(await fetch(`${PY3_API_BASE_URL}/api/v1.2/cresclab/member/?clid=${clid}`)).json()).results:null}catch{return null}},mapLineMemberToCustomer:async function({customer_id,line_uid}){try{return(await(await fetch(`${PY3_API_BASE_URL}/api/v1.2/cresclab/member/`,{method:"POST",headers:{"Content-Type":APPLICATION_JSON,Authorization:Citiesocial.authManager.getAuthorizationHeader()},body:JSON.stringify({customer_id,line_uid})})).json()).results}catch{return null}},trackAccountSuccess:async function(){const accountButtonClicked=sessionStorage.getItem("account_button_clicked");accountButtonClicked&&Citiesocial.userManager.isLogin()&&($("body").trigger("customer:account:success"),await new Promise(resolve=>setTimeout(resolve,3e3)),window.segmentTracking.accountSuccess(accountButtonClicked))}},testManager:{getRandomGroup({uuidKey,modValue,groupMap}){let uuid=localStorage.getItem(uuidKey);uuid||(uuid=Citiesocial.utils.uuidv4(),localStorage.setItem(uuidKey,uuid));const decimalUuid=parseInt(uuid.slice(0,3),16);return groupMap[decimalUuid%modValue]},getABTestGroup(){if(searchParams.get("ab_test_group")){const testGroup=searchParams.get("ab_test_group");if(["A","B"].includes(testGroup))return testGroup}return Citiesocial.testManager.getRandomGroup({uuidKey:"cs_cart_test_uuid",modValue:2,groupMap:{0:"A",1:"B"}})},getCartAddOnABTestGroup(){return Citiesocial.testManager.getRandomGroup({uuidKey:"cs_cart_add_on_test_uuid",modValue:2,groupMap:{0:"A",1:"B"}})},getABTestGroupA3B7(){return Citiesocial.testManager.getRandomGroup({uuidKey:"ab_test_group_a3_b7_uuid",modValue:10,groupMap:{0:"A",1:"A",2:"A",3:"B",4:"B",5:"B",6:"B",7:"B",8:"B",9:"B"}})},getABCTestGroup(){if(searchParams.get("abc_test_group")){const testGroup=searchParams.get("abc_test_group");if(["A","B","C"].includes(testGroup))return testGroup}return Citiesocial.testManager.getRandomGroup({uuidKey:"abc_test_group_uuid",modValue:3,groupMap:{0:"A",1:"B",2:"C"}})},getABCDTestGroup(){if(searchParams.get("abcd_test_group")){const testGroup=searchParams.get("abcd_test_group");if(["A","B","C","D"].includes(testGroup))return testGroup}return Citiesocial.testManager.getRandomGroup({uuidKey:"abcd_test_group_uuid",modValue:4,groupMap:{0:"A",1:"B",2:"C",3:"D"}})},getAiAssistantTestGroup(){if(searchParams.get("ai_assistant_test_group")){const testGroup=searchParams.get("ai_assistant_test_group");if(["A","B","C"].includes(testGroup))return testGroup}return Citiesocial.testManager.getRandomGroup({uuidKey:"ai_assistant_test_group_uuid",modValue:3,groupMap:{0:"B",1:"B",2:"B"}})}},authManager:{socialLogin:async function(provider){const segmentAnonymousId=Citiesocial.userManager.getSegmentAnonymousId(),authBaseURL=`${PY3_API_BASE_URL}/cs/api/v2/auth/oauth/`,targetURL=new URL(`${authBaseURL}${provider}/`),welfareCommittee=localStorage.getItem("welfare-committee");welfareCommittee&&targetURL.searchParams.append("welfare_committee",welfareCommittee),targetURL.searchParams.append("redirect_uri",window.location.origin+"/pages/social-login-redirect"),segmentAnonymousId&&targetURL.searchParams.append("anonymous_id",segmentAnonymousId),window.location.href=targetURL.href},fetchToken:async function({code,redirect_uri}){const response=await fetch(`${PY3_API_BASE_URL}/cs/api/v2/auth/token/`,{method:"POST",body:JSON.stringify({grant_type:"authorization_code",redirect_uri,code}),headers:{"Content-Type":"application/json"}}),{results}=await response.json(),{id_token,access_token,refresh_token,multipass_token}=results;return localStorage.setItem("cs_id_token",id_token),localStorage.setItem("cs_access_token",access_token),localStorage.setItem("cs_refresh_token",refresh_token),Citiesocial.utils.setCookie("cs_token_flag","1",1e3),await Citiesocial.authManager.fetchShopifyCustomerAccessToken({multipassToken:multipass_token}),{idToken:id_token,accessToken:access_token,refreshToken:refresh_token,multiPassToken:multipass_token}},refreshToken:async function({redirectUri}){const data=await(await fetch(`${PY3_API_BASE_URL}/cs/api/v2/auth/token/`,{method:"POST",body:JSON.stringify({grant_type:"refresh_token",refresh_token:localStorage.getItem("cs_refresh_token"),redirect_uri:redirectUri}),headers:{"Content-Type":"application/json"}})).json();if(data.error||data?.results?.multipass_token===void 0)return await Citiesocial.authManager.logout(),Citiesocial.authManager.clearToken(),window.segmentTracking?.refreshTokenFailed({error:data?.error,results:data?.results,multipass_token:data?.results?.multipass_token,data_response:JSON.stringify(data)}),window.location.reload(),{};const{id_token,access_token,refresh_token,multipass_token}=data.results;return localStorage.setItem("cs_id_token",id_token),localStorage.setItem("cs_access_token",access_token),localStorage.setItem("cs_refresh_token",refresh_token),await Citiesocial.authManager.fetchShopifyCustomerAccessToken({multipassToken:multipass_token}),{idToken:id_token,accessToken:access_token,refreshToken:refresh_token,multiPassToken:multipass_token}},fetchShopifyCustomerAccessToken:async function({multipassToken}){const shopifyStorefrontApiClient=Citiesocial.storefrontApiManager.getClient(),{data}=await shopifyStorefrontApiClient.request(Citiesocial.storefrontApiManager.mutation.customerAccessTokenCreateWithMultipass,{variables:{multipassToken}}),shopifyCustomerAccessToken=data?.customerAccessTokenCreateWithMultipass?.customerAccessToken?.accessToken;shopifyCustomerAccessToken&&localStorage.setItem("shopifyCustomerAccessToken",shopifyCustomerAccessToken)},getAuthorizationHeader:function(){return IS_OPEN_NEW_LOGIN_REGIST
1ER?localStorage.getItem("cs_access_token")?`Bearer ${localStorage.getItem("cs_access_token")}`:void 0:Citiesocial.utils.getCookie("cs_token")},getAccessToken:function(){return IS_OPEN_NEW_LOGIN_REGISTER?localStorage.getItem("cs_id_token")&&localStorage.getItem("cs_access_token")?localStorage.getItem("cs_access_token"):void 0:Citiesocial.utils.getCookie("cs_token")},getIdToken:function(){return IS_OPEN_NEW_LOGIN_REGISTER?localStorage.getItem("cs_id_token"):Citiesocial.utils.getCookie("cs_token")},login:async function({email,password}){return(await fetch(`${PY3_API_BASE_URL}/cs/api/v2/auth/login/pwd/email/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email,password})})).json()},register:async function({email,password,phone_number,last_name,first_name,gender,birthday}){return(await fetch(`${PY3_API_BASE_URL}/cs/api/v2/account/register/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email,password,phone_number,last_name,first_name,gender,birthday})})).json()},logout:async function(){return fetch("/account/logout")},clearToken:function(){Citiesocial.utils.removeCookie("cs_token"),Citiesocial.utils.removeCookie("cs_token_flag"),window.localStorage.removeItem("cs_token"),localStorage.removeItem("cs_id_token"),localStorage.removeItem("cs_access_token"),localStorage.removeItem("cs_refresh_token"),localStorage.removeItem("shopifyCustomerAccessToken")},sendVerificationCode:async function({type="phone",phoneNumber,email}){return(await fetch(`${PY3_API_BASE_URL}/cs/api/v2/account/otp/${type}/send-code/`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:Citiesocial.authManager.getAuthorizationHeader()},body:JSON.stringify({phone_number:Citiesocial.utils.convertPhoneNumber(phoneNumber),email})})).json()},verifyCode:async function({type="phone",phoneNumber,email,otp}){return(await fetch(`${PY3_API_BASE_URL}/cs/api/v2/account/otp/${type}/verify-code/`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:Citiesocial.authManager.getAuthorizationHeader()},body:JSON.stringify({otp,phone_number:Citiesocial.utils.convertPhoneNumber(phoneNumber),email})})).json()},verifyToken:async function(){try{return(await fetch(`${PY3_API_BASE_URL}/cs/api/v2/auth/token/verify/`,{method:"GET",headers:{"Content-Type":"application/json",Authorization:Citiesocial.authManager.getAuthorizationHeader()}})).json()}catch(error){return{error}}}},favoriteManager:{start:function(){Citiesocial.utils.isApp()||(this.activeHeartWhenProductIsUserFavorite(),window.addEventListener("userFavoriteProductIdsUpdate",this.activeHeartWhenProductIsUserFavorite),this.initHeartElementsListener())},activeHeartWhenProductIsUserFavorite:function(){const userFavoriteProductIdSet=Citiesocial.userManager.getUserFavoriteProductIdSet();document.querySelectorAll(".favorite__heart").forEach(heart=>{const productId=JSON.parse(heart.dataset.productId);if(userFavoriteProductIdSet.has(productId)){heart.classList.add("active");const favoriteTextElement=heart.querySelector(".favorite__heart__content");favoriteTextElement&&(favoriteTextElement.textContent="\u53D6\u6D88\u6536\u85CF",favoriteTextElement.style.color="gray")}heart.classList.add("show-favorite")})},initHeartElementsListener:function(){const heartElements=document.querySelectorAll(".favorite__heart"),targetElements=[...Array.from(heartElements)],favoriteTextElement=document.querySelector(".product__share .favorite__text");IS_PRODUCT_PAGES&&favoriteTextElement&&targetElements.push(favoriteTextElement),targetElements.forEach(element=>{element.addEventListener("click",Citiesocial.favoriteManager.handleProductFavoriteToggle)})},handleProductFavoriteToggle:function(event){if((Citiesocial.utils.hasClassName(this.parentNode,"product-card__image")||Citiesocial.utils.hasClassName(this.parentNode,"cs-productItem-imageWrapper")||Citiesocial.utils.hasClassName(this.parentNode,"product-card__video"))&&(event.preventDefault(),event.stopPropagation()),!Citiesocial.userManager.isLogin()&&!Citiesocial.authManager.getAccessToken()){sessionStorage.setItem("targetRedirectPath",window.location.pathname+window.location.search),sessionStorage.setItem("favoriteProductID",this.dataset.productId),window.location.href="/account/login";return}let targetHeartElement=this;Citiesocial.utils.hasClassName(this,"favorite__text")&&(targetHeartElement=this.parentNode.querySelector(".favorite__heart"));const isHeartActive=Citiesocial.utils.hasClassName(targetHeartElement,"active"),productId=JSON.parse(targetHeartElement.dataset.productId),currentUserFavoriteProductIdSet=Citiesocial.userManager.getUserFavoriteProductIdSet();isHeartActive?(Citiesocial.userManager.removeProductsFromFavorites([productId.toString()]),currentUserFavoriteProductIdSet.delete(productId),window.segmentTracking.productRemovedFromWishlist({product_id:productId})):(Citiesocial.userManager.addProductsToFavorites([productId.toString()]),currentUserFavoriteProductIdSet.add(productId),window.segmentTracking.productAddedToWishlist({product_id:productId}),window.personalizationAnalysis.postInteractionData("favorite",productId),window.rtbHouseTracking.addToFavorite(productId)),Citiesocial.userManager.setUserFavoriteProductIds([...currentUserFavoriteProductIdSet]),Citiesocial.utils.toggleClassName(targetHeartElement,"active");const favoriteTextElement=targetHeartElement.querySelector(".favorite__heart__content");favoriteTextElement&&(favoriteTextElement.textContent=isHeartActive?"\u6536\u85CF":"\u53D6\u6D88\u6536\u85CF",favoriteTextElement.style.color=isHeartActive?"#00c795":"gray")},checkProductIsUserFavorite:function(productId=null){return productId?Cities
1ocial.userManager.getUserFavoriteProductIdSet().has(productId):!1}},productManager:{getProductId:function(){return window.productPageData?.id||null},productFormat:function(product){const variants=typeof product.variants_json=="string"?JSON.parse(product.variants_json):product.variants_json,selectedVariant=Citiesocial.utils.getSelectedVariant(variants);return{id:product.shopify_id,is_available:product.is_available?product.is_available:product.total_inventory_quantity_snapshot>0,tags:product.shopify_tags,campaign_type:product.campaign_type,price:parseInt(selectedVariant.price),compare_at_price:parseInt(selectedVariant.compare_at_price),variantId:selectedVariant.id,handle:product.shopify_handle,title:product.shopify_title,brand:product.shopify_vendor,cover_image_url:product.cover_image_url}},productFormatNew:function(product){return{id:product.shopify_id,is_available:product.is_available,campaign_type:product.campaign_type,price:product.price,compare_at_price:product.compare_at_price,variantId:null,handle:product.handle,title:product.title,brand:product.brand,cover_image_url:product.cover_image_url}},productFormatCayenne:function(product){return{id:product.shopify_id,is_available:!0,campaign_type:product.campaign_type,price:product.price,compare_at_price:product.compare_at_price,variantId:null,handle:product.handle,title:product.title,brand:product.brand,cover_image_url:product.cover_image_url}},favoriteProductsFormat:function(product){return{id:product.shopify_id,is_available:product.is_available,price:product.price,compare_at_price:product.compare_at_price,variantId:null,handle:product.handle,title:product.title,brand:product.brand,cover_image_url:product.cover_image_url}},shopifyProductFormat:function(product){return{id:product.id,is_available:product.available,price:product.price/100,compare_at_price:product.compare_at_price/100,variantId:null,handle:product.handle,title:product.title,brand:product.vendor,cover_image_url:product.featured_image,images:product.images,variants:product.variants.map(variant=>({inventory_quantity:variant.inventory_quantity,option1:variant.option1,id:variant.id,shopify_id:variant.id,featured_media:variant.featured_media})),media:product.media}},productFormatForEarlyBird:function(product){const isEarlyBirdPreLaunch=new Date(product.available_at.replace(" ","T")).getTime()>new Date().getTime(),labels=[],productStatus=product.inventory_quantity_status;productStatus&&(productStatus.is_extreme_early_bird?labels.push("\u8D85\u65E9\u9CE5\u512A\u60E0"):labels.push("\u9650\u91CF"),labels.push(`\u5269\u9918 ${productStatus.amount} \u7D44`));const countdown=Citiesocial.utils.countdown(product.deadline.replace(" ","T")),countdownLabelText=Citiesocial.utils.getCountdownLabelText(countdown);return labels.push(countdownLabelText),{id:product.shopify_product_id,is_available:new Date(product.deadline.replace(" ","T")).getTime()-new Date().getTime()>0,tags:"",price:null,compare_at_price:null,variantId:null,handle:product.shopify_url.split("products/")[1],title:product.name,brand:product.brand_name,cover_image_url:product.image,is_early_bird:!0,is_early_bird_pre_launch:isEarlyBirdPreLaunch,labels,questionnaire_url:product.questionnaire_url,order_count:product.order_count,total_amount:product.total_amount}},projectFormatForFlashCollections:function(product){const labels=[],countdown=Citiesocial.utils.countdown(product.end_datetime_utc.replace(" 15:59","T23:59:00+08:00")),countdownLabelText=Citiesocial.utils.getCountdownLabelText(countdown);labels.push(countdownLabelText),product.is_extended&&labels.push("\u597D\u8A55\u5EF6\u9577");const category=product.primary_group?product.primary_group.title:null;return{id:product.shopify_id,is_available:!0,price:null,compare_at_price:null,variantId:null,handle:product.handle,title:product.title,brand:product.brand.name,cover_image_url:product.cover_image_src,is_flash_collections:!0,labels,brand_country:product.brand.country,markdown_display:product.markdown_display,category,start_datetime:product.start_datetime_utc,end_datetime:product.end_datetime_utc}},fetchProducts:async function(collection){const{collectionHandle,collectionId,position,searchText,page=1,limit=48,collectionShopifyIds="",searchOptions={}}=collection;let fetchURL=`${PY3_API_BASE_URL}/api/v1.1/collection/${collectionId}/product-list/?page=${page}&limit=${limit}`;const urls={[TOP_100_BEST_SELLING]:`${PY3_API_BASE_URL}/api/v1.2/product/ranking/?limit=${position==="carousel"?"24":"100"}`,[CAYENNE_RANKING]:`https://cayenne.citiesocial.com/cs/api/v1/search/product?page_size=30&category=${searchText}&cv=4`,[CROSS_SELLING_PRODUCTS]:`${PY3_API_BASE_URL}/api/v1.2/product/cross-selling/`,[EARLY_BIRD]:`${PY3_API_BASE_URL}/api/v1.1/early-bird/collection/`,[FLASH_COLLECTIONS]:`${PY3_API_BASE_URL}/api/v1.1/collection/flash-sale/?version=4`,[RECENTLY_VIEWED]:`${PY3_API_BASE_URL}/api/v1.1/shopify-domain/products/recently-viewed/`,[SEARCH_SUGGESTION]:`${PY3_SEARCH_API_BASE_URL}/cs/api/v1/search/suggestion?query=${searchText}&cv=4`,[SEARCH_PRODUCT]:`${PY3_SEARCH_API_BASE_URL}/cs/api/v1/search/product?${new URLSearchParams(searchOptions).toString()}&cv=4`,[PERSONALIZED_RECOMMENDATION]:`${PY3_API_BASE_URL}/api/v1.2/product/complete-search/personal/?page=${page}&seed=${Citiesocial.utils.getCookie("cs_seed")||1}`,[MULTI_COLLECTION]:`${PY3_API_BASE_URL}/api/v1.2/collections/products/?${collectionShopifyIds}&page=1&page_size=96`,[PERSONALIZED_KEYWORD_RECOMMENDATION]:`${PY3_API_BASE_URL}/api/v1.2/product/complete-search/personal-category`,[PERSONALIZED_CATEGORY_RECOMMENDATION]:`${PY3_API_BASE_URL}/api/v1.2/product/complete-search/personal-category`};collectionHandle in urls&&(fetchURL=urls[collectionHandle]);let options={};if(collectionHandle===RECENTLY_VIEWED){const viewedProductIdArray=Citiesocial.productViewHistory.getViewedProductIdArray();if(viewedProductIdArray.length===0)return $("#shopify-section-cs-recently-viewed").hide(),[];options={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},body:Citiesocial.utils.generateFormBody({shopify_product_ids:viewedProductIdArray.join(","),product_count:20,format:"json"})}}if(collectionHandle===PERSONALIZED_RECOMMENDATION||collectionHandle===PERSONALIZED_KEYWORD_RECOMMENDATION||collectionHandle===PERSONALIZED_CATEGORY_RECOMMENDATION){if(!Citiesocial.authManager.getAccessToken())return $("#shopify-section-1631519300c0990223").hide(),$("#shopify-section-1652329771c705b966").hide(),$("#shopify-section-16523298500c960f0f").hide(),{products:[]};options={method:"GET",headers:{Authorization:Citiesocial.authManager.getAuthorizationHeader()}}}try{const responseJSON=await(await fetch(fetchURL,options)).json();
1return Citiesocial.productManager.normalizeProducts(collection,responseJSON)}catch(error){return console.log(error),{products:[]}}},normalizeProducts:function(collection,response){const{collectionHandle}=collection,handleNormalize={[TOP_100_BEST_SELLING](response2){return{pageInfo:null,products:response2.results.products.map(product=>Citiesocial.productManager.productFormatNew(product))}},[CAYENNE_RANKING](response2){return{pageInfo:response2.page_info,products:response2.results.map(product=>Citiesocial.productManager.productFormatCayenne(product))}},[CROSS_SELLING_PRODUCTS](response2){return{pageInfo:null,products:response2.results.map(product=>Citiesocial.productManager.productFormat(product))}},[EARLY_BIRD](response2){return{pageInfo:null,products:response2.results.map(product=>Citiesocial.productManager.productFormatForEarlyBird(product))}},[FLASH_COLLECTIONS](response2){return{pageInfo:null,products:response2.results.map(product=>Citiesocial.productManager.projectFormatForFlashCollections(product)).sort((a,b)=>new Date(b.start_datetime)-new Date(a.start_datetime))}},[RECENTLY_VIEWED](response2){return{pageInfo:null,products:response2.map(product=>({...product,tags:"",is_available:!0,brand:product.vendor}))}},[SEARCH_SUGGESTION](response2){return{brands:response2.brands,categories:response2.categories,tags:response2.keywords,products:response2.products}},[SEARCH_PRODUCT](response2){return{pageInfo:response2.page_info,products:response2.results.map(product=>Citiesocial.productManager.productFormatNew({...product,is_available:!0}))}},[PERSONALIZED_RECOMMENDATION](response2){return response2.error?.name==="ExpiredTokenError"||response2.error?.name==="TypeError"?(response2.error?.name==="ExpiredTokenError"&&(Citiesocial.utils.removeCookie("cs_token"),Citiesocial.utils.removeCookie("cs_token_flag"),localStorage.removeItem("cs_id_token"),localStorage.removeItem("cs_access_token"),localStorage.removeItem("cs_refresh_token"),localStorage.removeItem("shopifyCustomerAccessToken")),$("#shopify-section-1631519300c0990223").hide(),{pageInfo:null,products:[]}):{pageInfo:response2.results.page_info,products:response2.results.products.map(product=>Citiesocial.productManager.productFormatNew(product))}},[MULTI_COLLECTION](response2){return{collections:response2.results.map(collections=>({id:collections.collection_shopify_id,title:collections.title,handle:collections.handle,products:collections.products.map(product=>Citiesocial.productManager.productFormatNew(product))}))}},[PERSONALIZED_KEYWORD_RECOMMENDATION](response2){return response2.error?.name==="ExpiredTokenError"||response2.error?.name==="TypeError"?(response2.error?.name==="ExpiredTokenError"&&(Citiesocial.utils.removeCookie("cs_token"),Citiesocial.utils.removeCookie("cs_token_flag"),localStorage.removeItem("cs_id_token"),localStorage.removeItem("cs_access_token"),localStorage.removeItem("cs_refresh_token"),localStorage.removeItem("shopifyCustomerAccessToken")),$("#shopify-section-1652329771c705b966").hide(),$("#shopify-section-16523298500c960f0f").hide(),{pageInfo:null,products:[]}):(localStorage.setItem("categoryCarousel",response2.results.products_list[0].category_title),{pageInfo:response2.results.products_list[0].page_info,products:response2.results.products_list[0].products.map(product=>Citiesocial.productManager.productFormatNew(product)),categoryTitle:response2.results.products_list[0].category_title})},[PERSONALIZED_CATEGORY_RECOMMENDATION](response2){const firstCategoryCarousel=localStorage.getItem("categoryCarousel"),categoryCarousel=response2.results.products_list[0].category_title,index=firstCategoryCarousel===categoryCarousel?1:0;return{pageInfo:response2.results.products_list[index].page_info,products:response2.results.products_list[index].products.map(product=>Citiesocial.productManager.productFormatNew(product)),categoryTitle:response2.results.products_list[index].category_title}}};return collectionHandle in handleNormalize?handleNormalize[collectionHandle](response):{pageInfo:response.results.page_info,products:response.results.products.map(product=>Citiesocial.productManager.productFormatNew(product))}},fetchAllCategories:async function(){return await(await fetch(`${PY3_API_BASE_URL}/api/v1.1/category/categories/?version=4`)).json()||{}},fetchFrequentlyBoughtTogetherProducts:async function(productId=""){return productId?(await(await fetch(`${PY3_API_BASE_URL}/api/v1.2/product/frequently-bought-together/?product_id=${productId}`)).json()).results.map(product=>Citiesocial.productManager.productFormat(product)):[]},makeProductCardsHTML:function(products=[],collection={},{productLimit=null,shouldShowUnAvailableProduct=!1,shouldShowQuickShop=!1,isOpenLinkInNewTab=!1,ref=null}
1){let productsCardsHTML="",productCount=1;const{collectionHandle}=collection,length=products.length;for(let i=0;i<length&&!(productLimit&&productCount>productLimit);i++){const{id,is_available,price,compare_at_price,handle,title,brand,cover_image_url,is_early_bird,is_early_bird_pre_launch,labels,questionnaire_url,order_count,total_amount,is_flash_collections,brand_country}=products[i];if(!is_available&&!shouldShowUnAvailableProduct)continue;const isProductOnSale=compare_at_price>price,isTop100Collection=collectionHandle===TOP_100_BEST_SELLING||collectionHandle===CAYENNE_RANKING;let productCardClassModifier="";is_early_bird?productCardClassModifier="product-card--early-bird":is_flash_collections&&(productCardClassModifier="product-card--flash-collections");let link="";is_early_bird_pre_launch?link=questionnaire_url:is_flash_collections?link=`https://www.citiesocial.com/collections/${handle}?ref=${ref||collectionHandle}`:link=`https://www.citiesocial.com/products/${handle}?ref=${ref||collectionHandle}`;const targetProperty=is_early_bird_pre_launch||isOpenLinkInNewTab?'target="_blank"':"",indexNumberHTML=isTop100Collection?`<div class="product-card__index-number">${productCount}</div>`:"",productImageHTML=`<img loading="lazy" src="${cover_image_url}"/>`,comingSoonOverlayHTML=is_early_bird_pre_launch?`<div class="product-card__coming-soon-overlay">
2              <div class="overlay__title">COMING SOON</div>
3              <div class="overlay__content">\u586B\u554F\u5377\u6436\u5148\u770B \u2192</div>
4            </div>`:"";let labelsHTML="";is_early_bird_pre_launch?labelsHTML+='<div class="label label--secondary">\u5373\u5C07\u4E0A\u7DDA</div>':labels&&labels.forEach(label=>{labelsHTML+=`<div class="label label--primary">${label}</div>`});const earlyBirdStatsHTML=is_early_bird&&!is_early_bird_pre_launch?`<div class="product-card__early-bird-stats">
5                  \u8CFC\u8CB7\u4EBA\u6578 ${Citiesocial.utils.formatNumber(order_count)} \u4EBA  |  \u7D2F\u8A08\u91D1\u984D
6                  <span data-money-convertible data-base-value="${total_amount}" data-base-currency="TWD">
7                    <span class="money">
8                      ${Citiesocial.utils.getCurrency(total_amount)}
9                    </span>
10                  </span>
11                </div>`:"";let priceSectionHTML=price?`
12          <div class="product-card__price" data-money-convertible data-base-value="${price}" data-base-currency="TWD">
13            <span class="money">
14              ${Citiesocial.utils.getCurrency(price)}
15            </span>
16          </div>`:"";isProductOnSale&&(priceSectionHTML+=`<del class="product-card__compare-at-price" data-money-convertible data-base-value="${compare_at_price}" data-base-currency="TWD">
17              <span class="money">
18                ${Citiesocial.utils.getCurrency(compare_at_price)}
19              </span>
20            </del>`);let brandCountryText="";is_flash_collections&&brand_country&&brand_country!="\u4E2D\u570B"&&brand_country!="\u5176\u4ED6"&&(brandCountryText=`${brand_country}, `);let favoriteHeartHTML="";!is_early_bird&&!is_flash_collections&&!navigator.userAgent.includes("cs_webview")&&(favoriteHeartHTML=`<div class="favorite__heart" data-product-id="${id}" data-product-title="${title.replaceAll('"',"")}">
21            <i class="cs_icon icon-heart-solid"></i>  
22            <i class="cs_icon icon-heart-outline"></i>
23          </div>`);let quickShopHTML="";shouldShowQuickShop&&(is_available?quickShopHTML=`<div class="cs-productItem-quickAddWrapper text-center">
24                            <div class="cs-productItem-imageWrapper-quckshopOverlay cs-productItem-quickAddWrapper-button" data-action="open-quick-shop" data-quick-shop-url="/products/${handle}?view=quick_shop" data-product-id="${id}">
25                              <div class="cs-productItem-quickAddWrapper-text">
26                                <i class="cs_icon icon-shopping-cart"></i>
27                                <span> \u8CFC\u8CB7</span>
28                              </div>
29                            </div>
30                          </div>`:quickShopHTML='<div class="cs-productItem-quickAddWrapper"></div>'),productsCardsHTML+=`<div class="product-card ${productCardClassModifier}" data-product-id="${id}" ${is_available?"":'style="opacity:0.5;"'} >
31                                <a href="${link}" ${targetProperty}>
32                                  ${indexNumberHTML}
33                                  <div class="product-card__image">
34                                    ${productImageHTML}
35                                    ${is_available?"":'<div class="sold-out">\u5DF2\u552E\u5B8C</div>'}
36                                    ${comingSoonOverlayHTML}
37                                    ${favoriteHeartHTML}
38                                  </div>
39                                </a>
40                                <p class="product-card__vendor">
41                                  ${brandCountryText}
42                                  <a href="/pages/in-house-search-results-page?type=brand&q=${encodeURIComponent(brand)}">
43                                    ${brand}
44                                  </a>
45                                </p>
46                                <a class="product-card__content" href="${link}" ${targetProperty}>
47                                  <h5 class="product-card__title">${title}</h5>
48                                  <div class="product-card__labels">${labelsHTML}</div>
49                                  ${earlyBirdStatsHTML}
50                                  ${priceSectionHTML}
51                                </a>
52                                ${quickShopHTML}
53                              </div>
53`,productCount++}return productsCardsHTML},makeOwlCarouselOptions:function(collectionHandle,isDesktopCollectionMode){const owlCarouselOptions={rewind:!0,margin:0,slideBy:1,dots:!1,items:2,responsive:{[RESPONSIVE_MIDDLE_BREAKING_POINT]:{margin:12,items:getOwlCarouselShowItems(collectionHandle,isDesktopCollectionMode,RESPONSIVE_MIDDLE_BREAKING_POINT),slideBy:"page",nav:!0,navText:['<i class="cs_icon icon-arrow-left"></i>','<i class="cs_icon icon-arrow-right"></i>']},[RESPONSIVE_LARGE_BREAKING_POINT]:{margin:12,items:getOwlCarouselShowItems(collectionHandle,isDesktopCollectionMode,RESPONSIVE_LARGE_BREAKING_POINT),slideBy:"page",nav:!0,navText:['<i class="cs_icon icon-arrow-left"></i>','<i class="cs_icon icon-arrow-right"></i>']}}};function getOwlCarouselShowItems(collectionHandle2,isDesktopCollectionMode2,breakingPoint){const earlyBirdShowItems={[RESPONSIVE_MIDDLE_BREAKING_POINT]:isDesktopCollectionMode2?1:2,[RESPONSIVE_LARGE_BREAKING_POINT]:isDesktopCollectionMode2?2:3},flashCollectionsShowItems={[RESPONSIVE_MIDDLE_BREAKING_POINT]:isDesktopCollectionMode2?2:3,[RESPONSIVE_LARGE_BREAKING_POINT]:isDesktopCollectionMode2?3:4},brandShowItems={[RESPONSIVE_MIDDLE_BREAKING_POINT]:isDesktopCollectionMode2?2:3,[RESPONSIVE_LARGE_BREAKING_POINT]:isDesktopCollectionMode2?3:5},topic2ShowItems={[RESPONSIVE_MIDDLE_BREAKING_POINT]:4,[RESPONSIVE_LARGE_BREAKING_POINT]:4},topic2ShowItems2={[RESPONSIVE_MIDDLE_BREAKING_POINT]:6,[RESPONSIVE_LARGE_BREAKING_POINT]:6},topic3ShowItems={[RESPONSIVE_MIDDLE_BREAKING_POINT]:3,[RESPONSIVE_LARGE_BREAKING_POINT]:3},generalShowItems={[RESPONSIVE_MIDDLE_BREAKING_POINT]:isDesktopCollectionMode2?2:4,[RESPONSIVE_LARGE_BREAKING_POINT]:isDesktopCollectionMode2?4:6};return collectionHandle2===EARLY_BIRD?earlyBirdShowItems[breakingPoint]:collectionHandle2===FLASH_COLLECTIONS?flashCollectionsShowItems[breakingPoint]:collectionHandle2===BRAND?brandShowItems[breakingPoint]:collectionHandle2===TOPIC_2?topic2ShowItems[breakingPoint]:collectionHandle2===TOPIC_2_6_COLUMN?topic2ShowItems2[breakingPoint]:collectionHandle2===TOPIC_3?topic3ShowItems[breakingPoint]:generalShowItems[breakingPoint]}return owlCarouselOptions},initProductSlideshow:function($productSlideshow){if(!$productSlideshow.length)return;const isZoomEnabled=Citiesocial.utils.isMobile()?!1:JSON.parse($productSlideshow.attr("data-zoom-enabled")),zoomMagnification=$productSlideshow.attr("data-zoom-magnification"),isShowArrows=JSON.parse($productSlideshow.attr("data-show-arrows")),isShowDots=JSON.parse($productSlideshow.attr("data-show-dots"));$productSlideshow.on("init afterChange",function(event,slick){const $currentSlide=$(slick.$slides[slick.currentSlide]);isZoomEnabled&&!$currentSlide.attr("data-slide-initialized")&&$currentSlide.zoom({url:$currentSlide.attr("data-image-large-url"),touch:!1,magnify:zoomMagnification,onZoomIn:function(){$(this).prev().addClass("product__slideshow-image--zoomed")},onZoomOut:function(){$(this).prev().removeClass("product__slideshow-image--zoomed")}})}),$productSlideshow.slick({autoplay:!1,adaptiveHeight:!0,arrows:isShowArrows,dots:isShowDots,fade:$productSlideshow.attr("data-rotation-effect")==="fade",mobileFirst:!0,touchThreshold:4,initialSlide:0,prevArrow:'<div class="slick-prev"><i class="cs_icon icon-arrow-left"></i></div>',nextArrow:'<div class="slick-next"><i class="cs_icon icon-arrow-right"></i></div>'}),$productSlideshow.next(".product__thumbnails").find(".product__thumbnail").on("click",function(){return $productSlideshow.slick("slickGoTo",$(this).attr("data-index")),!1})},modifyCampaignType(json){const data=json;return data.campaign_type==="flash_sale"&&(data.campaign_type="flash_sales"),data},getCsProduct:async function(product_id){const responseJSON=await(await fetch(`${PY3_API_BASE_URL}/api/v1.1/product/by-shopify-id/${product_id}/?version=4`)).json();return this.modifyCampaignType(responseJSON)},getCsVariants:async function(variants_id){const responseJSON=await(await fetch(`${PY3_API_BASE_URL}/api/v1.1/product/variants/by-shopify-ids/?shopify_ids=${variants_id.join()}&version=4`)).json(),convertArrayToObject=(array,key)=>array.reduce((obj,item)=>({...obj,[item[key]]:item}),{});
53return responseJSON.results.variants.forEach(variant=>{variant.title==="Default Title"&&(variant.title=""),variant.product=this.modifyCampaignType(variant.product)}),convertArrayToObject(responseJSON.results.variants,"shopify_variant_id")},displayProducts:async function(collection,collectionProducts){const{sectionId,collectionHandle,desktopMode,mobileMode,isEarlyBird,isFlashCollections,referralLabel}=collection,isDesktopCollectionMode=desktopMode==="collection",isMobileListMode=mobileMode==="list",{products,categoryTitle}=collectionProducts===void 0?await Citiesocial.productManager.fetchProducts({...collection,limit:96}):collectionProducts;categoryTitle&&($(`#${sectionId}`).find(".carousel__header-title").html(`\u70BA\u4F60\u63A8\u85A6\uFF1A${categoryTitle.replace("\u6240\u6709","")}`),$(`#${sectionId}`).find(".carousel__header-read-more").attr("href",`/pages/in-house-search-results-page?type=category&q=${categoryTitle}`)),collectionHandle===CROSS_SELLING_PRODUCTS&&Citiesocial.utils.shuffle(products);let productLimit=NORMAL_CAROUSEL_ITEM_LIMIT;if(isEarlyBird&&(productLimit=EARLY_BIRD_CAROUSEL_ITEM_LIMIT),isFlashCollections&&(productLimit=FLASH_COLLECTIONS_CAROUSEL_ITEM_LIMIT),window.innerWidth>=RESPONSIVE_MIDDLE_BREAKING_POINT){const $targetElement=$(`#${sectionId}-owl-carousel`),productCardsForDesktopHTML=Citiesocial.productManager.makeProductCardsHTML(products,collection,{productLimit,ref:referralLabel});$targetElement.removeClass("carousel-skeleton-grid"),$targetElement.html(productCardsForDesktopHTML);const owlCarouselOptions=Citiesocial.productManager.makeOwlCarouselOptions(collectionHandle,isDesktopCollectionMode);$targetElement.owlCarousel(owlCarouselOptions)}else{isMobileListMode&&(productLimit=NORMAL_CAROUSEL_MOBILE_LIST_MODE_ITEM_LIMIT);const $targetElement=$(`#${sectionId} .list__list`),productCardsForMobileHTML=Citiesocial.productManager.makeProductCardsHTML(products,collection,{productLimit,ref:referralLabel});$targetElement.html(productCardsForMobileHTML)}Citiesocial.favoriteManager.start()},displayEarlyBirdSameCategoryCollectionCarousel:async function({categoryTitle,earlyBirdProjectId}){if($("#early-bird-carousel").length){$("#index_carousel_3").hide();return}const collection=window.apiBasedCarousel.find(({collectionHandle})=>collectionHandle===EARLY_BIRD_RECOMMENDED);let{products}=await Citiesocial.productManager.fetchProducts({collectionHandle:SEARCH_PRODUCT,searchOptions:{category:categoryTitle}});if(products=products.filter(product=>String(product.id)!==String(earlyBirdProjectId)),!products.length){$("#index_carousel_3").hide();return}Citiesocial.productManager.displayProducts(collection,{products});const $targetCarousel=$(`#${collection.sectionId}`);$targetCarousel.find(".carousel__header-read-more").attr("href",`https://www.citiesocial.com/pages/in-house-search-results-page?type=category&q=${encodeURIComponent(categoryTitle)}`);const collectionTitle=$targetCarousel.find(".carousel__header-title").text();window.segmentTracking.carouselView(collection.collectionHandle,collectionTitle,collection.sectionId),$(`#${collection.sectionId} .carousel__wrapper, #${collection.sectionId} .list__wrapper`).on("click","a",()=>{window.segmentTracking.carouselClicked(collection.collectionHandle,$(`#${collection.sectionId}`).find(".carousel__header-title").text(),collection.sectionId,"product_card")})},clearVariantPreorderInfo(variantName){const original=String(variantName??""),RE={bracket:/【\s*預購\s*(\d{1,2})\s*\/\s*(\d{1,2})\s*】/g,paren:/[((]\s*預購\s*(\d{1,2})\s*\/\s*(\d{1,2})\s*[))]/g};return original.replaceAll(RE.flagOnly,"").replaceAll(RE.bracket,"").replaceAll(RE.paren,"").trim()},normalizeVariantName({name,estimatedShippingDate,isOutOfStock}){if(!name)return name;const cleanedName=this.clearVariantPreorderInfo(name);if(!estimatedShippingDate||isOutOfStock||cleanedName==="Default Title"||estimatedShippingDate<=Citiesocial.utils.todayYMDLocal())return cleanedName;const shippingInfo=` (${String(estimatedShippingDate).replaceAll("-","/")}\u51FA\u8CA8)`;return`${this.clearVariantPreorderInfo(name)}${shippingInfo}`},getAvailableShippingMethods(variants=[]){const map=new Map;for(const variant of variants)if(variant.inventory_quantity>0)for(const method of variant.available_shipping_methods??[]){const type=method?.shipping_method_type;!type||map.has(type)||map.set(type,method)}const availableShippingMethods=[...map.values()],availableShippingMethodTypes=availableShippingMethods.map(method=>method.shipping_method_type),availableShippingMethodTitles=availableShippingMethods.map(method=>method.shipping_method_title),hasConvenienceStorePickupMethod=availableShippingMethodTypes.includes("convenience_store_pickup");return{availableShippingMethods,availableShippingMethodTypes,availableShippingMethodTitles,hasConvenienceStorePickupMethod}}},eventManager:{addedToCart:function(collectionIds){var url=`${PY3_API_BASE_URL}/api/v1.1/shopify-domain/events/added-to-cart/`,postData={collection_ids:collectionIds};$.ajax({url,cache:!1,type:"POST",datatype:"json",data:postData})}},cartManager:{quickAddToCart:function(elem,variantId){$.post({url:"/cart/add.js",data:{id:variantId},dataType:"json"}).then(function(result){window.segmentTracking.productAdded(result),window.personalizationAnalysis.postInteractionData("cart",result.product_id),window.quickShopRemodalInstance&&window.quickShopRemodalInstance.close(),$(document).trigger("product.added"),window._lt("send","cv",{type:"AddToCart"},["e8f31b4a-196f-47ea-b140-0c4954426c79"])}).catch(function(error){alert(error.responseJSON.description)})},addToCart:function(items=[]){return fetch("/cart/add.js",{method:"POST",headers:{Accept:APPLICATION_JSON,"Content-Type":APPLICATION_JSON},body:JSON.stringify({items})})},getCartJson:async function(){return(await fetch("/cart.json")).json()},asyncIterableCart:async function(){$.getJSON("/cart.js",function(data){const iterableProducts=[];for(let item of data.items)iterableProducts.push({variant_id:item.variant_id.toString(),quantity:item.quantity});$.ajax({type:"POST",url:`${PY3_API_BASE_URL}/api/v1.1/iterable/shopping-cart/`,headers:{"Content-Type":"application/json"},data:JSON.stringify({shopify_user_id:window.customer.id,email:window.customer.email,products:iterableProducts})})})},asyncCsCart:async function(action){const cart_token=JSON.stringify({cart_token:Citiesocial.utils.getCookie("cart")});
53return Citiesocial.authManager.getAccessToken()===void 0?"":$.ajax({type:action,url:`${PY3_API_BASE_URL}/api/v1.1/customer/cart-mapping/`,headers:{Authorization:Citiesocial.authManager.getAuthorizationHeader()},dataType:"json",contentType:"application/json",data:action==="POST"||action==="PUT"?cart_token:"",success:function(response){return response.error?.name==="ExpiredTokenError"&&(Citiesocial.utils.removeCookie("cs_token"),Citiesocial.utils.removeCookie("cs_token_flag"),localStorage.removeItem("cs_id_token"),localStorage.removeItem("cs_access_token"),localStorage.removeItem("cs_refresh_token"),localStorage.removeItem("shopifyCustomerAccessToken")),action==="GET"&&response.results?.cart_token&&(Citiesocial.utils.removeCookie("cart"),Citiesocial.utils.setCookie("cart",response.results.cart_token,14),window.cart_token=response.results.cart_token,$(document).trigger("miniCart.rerender"),Citiesocial.cartManager.mergeCart(),setTimeout(()=>{Citiesocial.utils.setCookie("cart",response.results.cart_token)},3e3)),response},error:function(err){return err.responseText==="Token Verification Failed."&&(Citiesocial.utils.removeCookie("cs_token"),Citiesocial.utils.removeCookie("cs_token_flag"),localStorage.removeItem("cs_id_token"),localStorage.removeItem("cs_access_token"),localStorage.removeItem("cs_refresh_token"),localStorage.removeItem("shopifyCustomerAccessToken")),""}})},mergeCart:async function(){return!1},getDiscountCode:function({cartTotalPrice=null}){const groupBuyingCampaignCode=Citiesocial.utils.getCookie("group_buying_campaign_code"),welfareCouponCode=Citiesocial.utils.getCookie("welfare-coupon"),welfareCouponCode2=Citiesocial.utils.getCookie("welfare-coupon-2");return groupBuyingCampaignCode||(cartTotalPrice>=2500&&welfareCouponCode2?.includes("wistron")||cartTotalPrice>=2e3&&welfareCouponCode2?.includes("mizuho")?welfareCouponCode2:cartTotalPrice>=1e3&&welfareCouponCode?welfareCouponCode:null)},displayAddToCartSuccessfully:function(){const element=document.querySelector(".pop-up-add-to-cart-successful");return element&&(element.style.display="flex",setTimeout(()=>{element.style.opacity=1},10),setTimeout(()=>{element.style.opacity=0,setTimeout(()=>{element.style.display="none"},250)},1250)),!1},applyDiscount:async function({code}){return await(await fetch(`https://cs-shopify-discount-use.glitch.me/api/apply/${code}`)).json()},checkDiscount:async function({code}){return await(await fetch(`https://cs-shopify-discount-use.glitch.me/api/get/${code}`)).json()},getCheckoutUrl:async function({shippingInfo,items,discountCode,note}){const customerAccessToken=localStorage.getItem("shopifyCustomerAccessToken"),client=Citiesocial.storefrontApiManager.getClient(),{hasConvenienceStorePickupMethod,isOnlyConvenienceStorePickup}=Citiesocial.cartManager.getCartShippingMethodStatus(items);let shouldPrefillAddress=!0;if(window.segmentTracking.checkoutShippingInfo({shippingInfo}),shippingInfo?.selectedAddressId||(shouldPrefillAddress=!1),Citiesocial.userManager.isLogin()&&customerAccessToken&&shippingInfo?.selectedAddressId&&!isOnlyConvenienceStorePickup){let targetAddressId=null;if(shouldPrefillAddress=!1,shippingInfo.selectedAddressId==="new"){const{data:customerAddressCreateData,errors:customerAddressCreateErrors}=await client.request(Citiesocial.storefrontApiManager.mutation.customerAddressCreate,{variables:{address:{address2:shippingInfo.city,city:shippingInfo.district,address1:shippingInfo.address,company:"",country:"Taiwan",firstName:shippingInfo.firstName,lastName:shippingInfo.lastName,phone:shippingInfo.phone,province:"",zip:shippingInfo.zip},customerAccessToken}});targetAddressId=customerAddressCreateData?.customerAddressCreate?.customerAddress?.id,customerAddressCreateErrors&&(shouldPrefillAddress=!0)}else targetAddressId=shippingInfo.selectedAddressId;const{errors:customerDefaultAddressUpdateErrors}=await client.request(Citiesocial.storefrontApiManager.mutation.customerDefaultAddressUpdate,{variables:{addressId:targetAddressId,customerAccessToken}});customerDefaultAddressUpdateErrors&&(shouldPrefillAddress=!0)}const utmData={utm_source:"",utm_medium:"",utm_campaign:"",utm_term:"",utm_content:""},firstTouchUTMData=Citiesocial.utils.getCookie(FIRST_TOUCH_UTM_COOKIE_NAME);if(firstTouchUTMData)try{const parsedData=Citiesocial.utils.safeJsonParse(firstTouchUTMData)||{};Object.assign(utmData,parsedData)}catch(error){console.error("Error parsing UTM data:",error)}const showExtraConvenienceStoreInfo=hasConvenienceStorePickupMethod&&!isOnlyConvenienceStorePickup,convenienceStoreAttributePayload={carrier:"FAMILY_MART",customerLastName:String(shippingInfo?.cvsLastName??""),customerFirstName:String(shippingInfo?.cvsFirstName??""),customerPhone:String(shippingInfo?.cvsPhone??""),storeSpot:String(shippingInfo?.cvsStoreSpot??""),storeName:String(shippingInfo?.cvsStoreName??""),storeAddress:String(shippingInfo?.cvsStoreAddress??""),storeNumber:String(shippingInfo?.cvsStoreNumber??"")},convenienceStoreCheckoutAttributes=[convenienceStoreAttributePayload.customerLastName,convenienceStoreAttributePayload.customerFirstName,convenienceStoreAttributePayload.customerPhone,convenienceStoreAttributePayload.storeSpot].every(value=>value!=="")?[{key:"__cs_checkout_is_only_cvs_pickup",value:`${isOnlyConvenienceStorePickup}`},{key:"__cs_checkout_has_cvs_pickup_method",value:`${hasConvenienceStorePickupMethod}`},{key:"__cs_checkout_show_extra_cvs_info",value:`${showExtraConvenienceStoreInfo}`},{key:"__cs_checkout_cvs_carrier",value:convenienceStoreAttributePayload.carrier},{key:"__cs_checkout_cvs_customer_last_name",value:convenienceStoreAttributePayload.customerLastName},{key:"__cs_checkout_cvs_customer_first_name",value:convenienceStoreAttributePayload.customerFirstName},{key:"__cs_checkout_cvs_customer_phone",value:convenienceStoreAttributePayload.customerPhone},{key:"__cs_checkout_family_cvsspot",value:convenienceStoreAttributePayload.storeSpot},{key:"__cs_checkout_family_name",value:convenienceStoreAttributePayload.storeName},{key:"__cs_checkout_family_addr",value:convenienceStoreAttributePayload.storeAddress},{key:"__cs_checkout_family_cvsnum",value:convenienceStoreAttributePayload.storeNumber}]:[],{data:cartCreateData,errors}=await client.request(Citiesocial.storefrontApiManager.mutation.cartCreate,{variables:{input:{lines:items.map(({variant_id:variantId,quantity,properties})=>({merchandiseId:`gid://shopify/ProductVariant/${variantId}`,quantity,attributes:Object.entries(properties||{}).filter(([key,value])=>value!=null&&value!=="").map(([key,value])=>({key,value:String(value)}))})),discountCodes:discountCode?[discountCode]:[],buyerIdentity:{countryCode:"TW",email:window.customer?.email},attributes:[{key:"__cs_step",value:"payment"},{key:"__cs_geo",value:"TW"},{key:"__cs_checkout_device",value:"browser"}
53,{key:"__cs_channel_data",value:Cookies.get("__cs_channel_data")||"citiesocial"},{key:"__cs_checkout_type",value:"cart"},{key:"__cs_checkout_version",value:"v1_cvs_pickup"},{key:"__cs_checkout_is_guest_purchase",value:`${!window.customer}`},{key:"__cs_segment_anonymousId",value:`${Citiesocial.userManager.getSegmentAnonymousId()}`},{key:"__cs_checkout_platform",value:"web"},{key:"__cs_checkout_invoice",value:Citiesocial.utils.safeJsonStringify({invoiceType:String(shippingInfo?.invoiceType??""),donationUnit:String(shippingInfo?.donationUnit??""),invoiceTitle:String(shippingInfo?.invoiceTitle??""),invoiceAddress:String(shippingInfo?.invoiceAddress??""),invoiceCity:String(shippingInfo?.invoiceCity??""),invoiceDistrict:String(shippingInfo?.invoiceDistrict??""),invoiceZip:String(shippingInfo?.invoiceZip??""),invoicePhone:String(shippingInfo?.invoicePhone??""),unifiedNumber:String(shippingInfo?.unifiedNumber??"")})},{key:"__cs_first_touch_utm",value:Citiesocial.utils.safeJsonStringify(utmData)},...convenienceStoreCheckoutAttributes],note,...shouldPrefillAddress&&{delivery:{addresses:[{selected:!0,oneTimeUse:!!isOnlyConvenienceStorePickup,address:{deliveryAddress:{address2:shippingInfo.city,city:shippingInfo.district,address1:shippingInfo.address,company:"",countryCode:"TW",firstName:shippingInfo.firstName,lastName:shippingInfo.lastName,phone:shippingInfo.phone,provinceCode:"",zip:shippingInfo.zip}}}]}}}}});if(errors)return{errors};const cartCreateResult=cartCreateData?.cartCreate;return cartCreateResult?.warnings?.length&&window.segmentTracking.cartCreateUserErrors({warning:JSON.stringify(cartCreateResult.warnings)}),cartCreateResult?.userErrors?.length&&(window.segmentTracking.cartCreateUserErrors({error:JSON.stringify(cartCreateData)}),cartCreateResult.userErrors.map(error=>error.message).includes("Email \u7121\u6548")&&window.confirm(`\u5F88\u62B1\u6B49\u{1F631} \u{1F623} \u{1F64F}
54\u60A8\u7684\u5E33\u865F ${window.customer?.email} \u4FE1\u7BB1\u4F3C\u4E4E\u662F\u7121\u6548\u7684\uFF0C\u6703\u7121\u6CD5\u6536\u5230\u8A02\u55AE\u78BA\u8A8D\u8207\u512A\u60E0\u901A\u77E5\u3002
55
56\u5225\u64D4\u5FC3\uFF0C\u9019\u53EF\u80FD\u662F\u62FC\u5B57\u932F\u8AA4\u6216\u4FE1\u7BB1\u5DF2\u505C\u7528\uFF0C\u6211\u5011\u53EF\u4EE5\u4F7F\u7528\u8A2A\u5BA2\u6A21\u5F0F\u7E7C\u7E8C\u5B8C\u6210\u7D50\u5E33\uFF01`))?(window.customer=void 0,await Citiesocial.authManager.logout(),Citiesocial.authManager.clearToken(),Citiesocial.cartManager.getCheckoutUrl({shippingInfo,items,discountCode,note})):(cartCreateResult?.cart?.checkoutUrl&&Citiesocial.utils.clearSavedConvenienceStoreInfo(),{checkoutUrl:cartCreateResult?.cart?.checkoutUrl})},getCart:async function({items}){const customerAccessToken=localStorage.getItem("shopifyCustomerAccessToken"),client=Citiesocial.storefrontApiManager.getClient(),{data:cartCreateData,errors}=await client.request(Citiesocial.storefrontApiManager.mutation.cartCreate,{variables:{input:{lines:items.map(({variant_id:variantId,quantity,properties})=>({merchandiseId:`gid://shopify/ProductVariant/${variantId}`,quantity,attributes:Object.entries(properties||{}).filter(([key,value])=>value!=null&&value!=="").map(([key,value])=>({key,value:String(value)}))})),buyerIdentity:{countryCode:"TW",email:window.customer?.email}}}});if(errors)return{errors};const cartCreateResult=cartCreateData?.cartCreate;return cartCreateResult?.warnings?.length&&window.segmentTracking.cartCreateUserErrors({warning:JSON.stringify(cartCreateResult.warnings)}),cartCreateResult?.userErrors?.length&&window.segmentTracking.cartCreateUserErrors({error:JSON.stringify(cartCreateData)}),{...cartCreateResult?.cart}},getCartShippingMethodStatus:function(cartItems){const hasConvenienceStorePickupMethod=cartItems?.some(item=>item.properties?._shipping_method_type==="convenience_store_pickup"),hasDeliveryMethod=cartItems?.some(item=>item.properties?._shipping_method_type==="home_delivery"||item.properties?._shipping_method_type==="vendor_delivery");return{hasConvenienceStorePickupMethod,hasDeliveryMethod,isOnlyConvenienceStorePickup:hasConvenienceStorePickupMethod&&!hasDeliveryMethod}},validateCartCvs:async function(cvsCheckoutItems){try{const response=await fetch(`${PY3_API_BASE_URL}/api/v1.2/customer/validate-cart-cvs/`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({items:cvsCheckoutItems})}),data=await response.json();if(response.status===401)throw new Error(data.detail);return data}catch(error){return console.error("Error:",error),{error:{message:"\u7121\u6CD5\u9A57\u8B49\u8CFC\u7269\u8ECA\uFF0C\u8ACB\u7A0D\u5F8C\u518D\u8A66\u3002"}}}}}
56,cartRecoveryManager:{storageKey:"__cs_pending_batch_checkout_recovery",getPendingBatchCheckoutRecovery:function(){try{const pendingRecovery=localStorage.getItem(this.storageKey);return Citiesocial.utils.safeJsonParse(pendingRecovery,null)}catch{return null}},savePendingBatchCheckoutRecovery:function({cartCookie,uncheckedCartItems=[]}){const nextPayload={cartCookie:String(cartCookie||""),uncheckedCartItems,savedAt:Date.now()};try{localStorage.setItem(this.storageKey,Citiesocial.utils.safeJsonStringify(nextPayload,"null"))}catch{return null}return nextPayload},clearPendingBatchCheckoutRecovery:function(){try{localStorage.removeItem(this.storageKey)}catch{return}},restoreCartCookie:function(cartCookie=""){return cartCookie?(Citiesocial.utils.setCookie("cart",cartCookie,28),!0):!1},addUncheckedItemsToCart:async function(uncheckedCartItems=[]){return uncheckedCartItems.length?Citiesocial.cartManager.addToCart(uncheckedCartItems):null},recoverPendingBatchCheckout:async function(){const pendingRecovery=this.getPendingBatchCheckoutRecovery();if(!pendingRecovery)return!1;const savedCartCookie=String(pendingRecovery.cartCookie||""),uncheckedCartItems=Array.isArray(pendingRecovery.uncheckedCartItems)?pendingRecovery.uncheckedCartItems:[],currentCartCookie=Citiesocial.utils.getCookie("cart")||"";if(!currentCartCookie)try{return uncheckedCartItems.length&&await this.addUncheckedItemsToCart(uncheckedCartItems),this.clearPendingBatchCheckoutRecovery(),!0}catch{return!1}return savedCartCookie&&currentCartCookie!==savedCartCookie&&this.restoreCartCookie(savedCartCookie),this.clearPendingBatchCheckoutRecovery(),!0}},productViewHistory:{bucketSize:20,cookieName:"__cs_pvh_2wert89oikjhgx",addProductView:function(productId){Cookies.remove("__cs_pvh_2wert89oikjhg");var viewedProductIdArray=Citiesocial.productViewHistory.getViewedProductIdArray();viewedProductIdArray==null?viewedProductIdArray=[]:typeof viewedProductIdArray=="string"&&(viewedProductIdArray=viewedProductIdArray.split(","));var index=viewedProductIdArray.indexOf(productId);return index>-1&&viewedProductIdArray.splice(index,1),viewedProductIdArray.unshift(productId),viewedProductIdArray=viewedProductIdArray.slice(0,this.bucketSize),Citiesocial.utils.setCookie(this.cookieName,viewedProductIdArray,1e3),viewedProductIdArray},getViewedProductIdArray:function(){var viewedProductIdArray=Cookies.getJSON(Citiesocial.productViewHistory.cookieName);return viewedProductIdArray==null?viewedProductIdArray=[]:typeof viewedProductIdArray=="string"&&(viewedProductIdArray=viewedProductIdArray.split(",")),viewedProductIdArray.slice(0,this.bucketSize)},getProductsRecentlyViewed:function(displayCount,callbackFunction){var viewedProductIdArray=this.getViewedProductIdArray();if(viewedProductIdArray.length>0){var url=`${PY3_API_BASE_URL}/api/v1.1/shopify-domain/products/recently-viewed/`,postData={shopify_product_ids:viewedProductIdArray.join(","),product_count:displayCount||20,format:"json"};$.ajax({url,cache:!1,type:"POST",datatype:"json",data:postData,success:callbackFunction})}},addUserInterestedProductCSId:function(productCSId){if(!productCSId)return!1;const productId=String(productCSId),userInterestedProductCSIds=new Set(localStorage.getItem("user_interested_product_cs_ids")?.split(",")||[]);userInterestedProductCSIds.has("undefined")&&userInterestedProductCSIds.delete("undefined"),userInterestedProductCSIds.has(productId)?userInterestedProductCSIds.delete(productId):userInterestedProductCSIds.size>=30&&userInterestedProductCSIds.delete(userInterestedProductCSIds.keys().next().value),userInterestedProductCSIds.add(productId),localStorage.setItem("user_interested_product_cs_ids",[...userInterestedProductCSIds].join(","))}},storefrontApiManager:{getClient:function(){return window.shopifyStorefrontApiClient||(window.shopifyStorefrontApiClient=window.ShopifyStorefrontAPIClient.createStorefrontApiClient({storeDomain:"https://www.citiesocial.com",apiVersion:"2026-07",publicAccessToken:"0b706795c287c63a02dabd228859d803"})),window.shopifyStorefrontApiClient},mutation:{customerAccessTokenCreateWithMultipass:`
57        mutation customerAccessTokenCreateWithMultipass($multipassToken: String!) {
58          customerAccessTokenCreateWithMultipass(multipassToken: $multipassToken) {
59            customerAccessToken {
60              accessToken
61              expiresAt
62            }
63            customerUserErrors {
64              code
65              field
66              message
67            }
68          }
69        }
70      `,customerAddressCreate:`
71        mutation customerAddressCreate($address: MailingAddressInput!, $customerAccessToken: String!) {
72          customerAddressCreate(address: $address, customerAccessToken: $customerAccessToken) {
73            customerAddress {
74              id
75            }
76            customerUserErrors {
77              code
78              field
79              message
80            }
81          }
82        }
83      `,customerDefaultAddressUpdate:`
84        mutation customerDefaultAddressUpdate($addressId: ID!, $customerAccessToken: String!) {
85          customerDefaultAddressUpdate(addressId: $addressId, customerAccessToken: $customerAccessToken) {
86            customer {
87              email
88            }
89            customerUserErrors {
90              code
91              field
92              message
93            }
94          }
95        }
96      `,cartCreate:`
97        mutation ($input: CartInput) {
98          cartCreate(input: $input) {
99            userErrors {
100              message
101              code
102              field
103            }
104            warnings {
105              code
106              message
107              target
108            }
109            cart {
110              id
111              checkoutUrl
112              buyerIdentity {
113                email
114                deliveryAddressPreferences {
115                  ...on MailingAddress {
116                    address1
117                    firstName
118                    city
119                    country
120                  }
121                }
122              }
123              discountApplications {
124                __typename
125                allocationMethod
126                targetSelection
127                targetType
128                totalAllocatedAmount { amount currencyCode}
129                value {
130                  ... on MoneyV2 {
131                    amount
132                    currencyCode
133                  }
134                  ... on PricingPercentageValue {
135                    percentage
136                  }
137                }
138                ... on CartCodeDiscountApplication {
139                  code
140                }
141                ... on CartAutomaticDiscountApplication {
142                  title
143                }
144                ... on CartCustomDiscountApplication {
145                  title
146                }
147              }
148              attributes {
149                key
150                value
151              }
152              cost {
153                subtotalAmount { amount currencyCode }
154                totalAmount { amount currencyCode }
155              }
156              lines(first: 250) {
157                edges {
158                  node {
159                    id
160                    quantity
161                    attributes { key value }
162                    cost {
163                      amountPerQuantity { amount currencyCode }
164                      compareAtAmountPerQuantity { amount currencyCode }
165                      subtotalAmount { amount currencyCode }
166                      totalAmount { amount currencyCode }
167                    }
168                    discountAllocations {
169                      __typename
170                      discountedAmount { amount currencyCode }
171                      targetType
172                      ... on CartAutomaticDiscountAllocation {
173                        title
174                      }
175                      ... on CartCodeDiscountAllocation {
176                        code
177                      }
178                      ... on CartCustomDiscountAllocation {
179                        title
180                      }
181                    }
182                  }
183                }
184              }
185            }
186          }
187        }
188      `},query:{customer:`
189        query CustomerQuery($customerAccessToken: String!) {
190          customer(customerAccessToken: $customerAccessToken) {
191            id
192            email
193            addresses(first: 100) {
194              nodes {
195                id
196                address1
197                address2
198                city
199                company
200                country
201                countryCode
202                province
203                firstName
204                lastName
205                phone
206                zip
207              }
208            }
209            defaultAddress {
210              id
211            }
212          }
213        }`}}};
214//# sourceMappingURL=/cdn/shop/t/18/assets/citiesocial.js.map?v=15267173742309050761790135472

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.