1<!doctype html> 2<!--[if lt IE 7]><html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]--> 3<!--[if IE 7]><html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]--> 4<!--[if IE 8]><html class="no-js lt-ie9" lang="en"> <![endif]--> 5<!--[if IE 9 ]><html class="ie9 no-js"> <![endif]--> 6<!--[if (gt IE 9)|!(IE)]><!--> <html class="no-js"> <!--<![endif]--> 7<head> 8 9 <!-- Basic page needs ================================================== --> 10 <meta charset="utf-8"> 11 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 12 13 14 <link rel="icon" href="https://cdn.store-assets.com/s/1306561/f/11132142.jpg" /> 15 16 17 <!-- Title and description ================================================== --> 18 <title> 19 御åå å°ç«æ¹¯å 20 </title> 21 22 23 <meta name="description" content="ç§æå³çµ±æåå 宵ï¼ç¢åççºå¤©ç¶é£æï¼ç¡æ·»å é²è åã"> 24 25 26 <!-- Social meta ================================================== --> 27 28 29 <meta property="og:type" content="website"> 30 <meta property="og:title" content="御åå å°ç«æ¹¯å"> 31 <meta property="og:url" content="https://www.tpypy.com"> 32 33 34 <meta property="og:image" content="https://cdn.store-assets.com/s/1306561/f/11132170.jpg"> 35 <meta property="og:image:secure_url" content="https://cdn.store-assets.com/s/1306561/f/11132170.jpg"> 36 37 38 39<meta property="og:description" content="ç§æå³çµ±æåå 宵ï¼ç¢åççºå¤©ç¶é£æï¼ç¡æ·»å é²è åã"> 40<meta property="og:site_name" content="御åå å°ç«æ¹¯å"> 41 42 43 44 <meta name="twitter:card" content="summary"> 45 46 47 48 <meta name="twitter:site" content="@"> 49 50 51 <meta name="twitter:title" content="御åå å°ç«æ¹¯å"> 52 53 <meta name="twitter:description" content=""> 54 55 56 <meta property="twitter:image" content="https://cdn.store-assets.com/s/1306561/f/11132170.jpg"> 57 <meta property="twitter:image:secure_url" content="https://cdn.store-assets.com/s/1306561/f/11132170.jpg"> 58 59 60 61 62 63 <!-- Helpers ================================================== --> 64 <link rel="canonical" href="https://www.tpypy.com"> 65 <meta name="viewport" content="width=device-width,initial-scale=1"> 66 <meta name="theme-color" content="#121212"> 67 68
68<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" type="text/javascript" ></script>
68 69 70 <!-- Header hook for plugins ================================================== --> 71 72<!-- ScriptTags -->
73<script>window.__st={p: "index",cid: null,cem: null,cph: null,cfn: null,cln: null,cge: null,cdb: null,ccc: null};</script>
73<script src='/assets/events.js'></script>
73<script>(function(){function asyncLoad(){var urls=['/assets/traffic.js?v=1'];for(var i=0;i<urls.length;i++){var s=document.createElement('script');s.type='text/javascript';s.async=true;s.src=urls[i];var x=document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s, x);}}window.attachEvent ? window.attachEvent('onload', asyncLoad) : window.addEventListener('load', asyncLoad, false);})();</script>
73 74<!-- /ScriptTags --> 75 76 77 78
78<script src="https://store-themes.easystore.co/1306561/themes/63057/assets/global.js?t=1787083337" defer="defer"></script>
78 79 80 81 82
82<script> 83 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 84 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 85 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 86 })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 87 88 ga('create', '', 'auto','myTracker'); 89 ga('myTracker.send', 'pageview'); 90 91 </script>
91 92 93
93<script src="/assets/storefront.js?id=1d419de2011a5572c98b" type="text/javascript" ></script>
93 94 95 96 <!-- CSS ================================================== --> 97 <style> 98 @font-face { 99 font-family: 'Fuzzy Bubbles'; 100 font-style: normal; 101 font-weight: regular; 102 src: local('Fuzzy Bubbles regular'), local('Fuzzy Bubbles-regular'), url(https://fonts.gstatic.com/s/fuzzybubbles/v3/6qLGKZMbrgv9pwtjPEVNV0F2NnP5Zxsreko.ttf) format('truetype'); 103 } 104 105 @font-face { 106 font-family: 'Archivo Black'; 107 font-style: normal; 108 font-weight: regular; 109 src: local('Archivo Black regular'), local('Archivo Black-regular'), url(https://fonts.gstatic.com/s/archivoblack/v10/HTxqL289NzCGg4MzN6KJ7eW6OYuP_x7yx3A.ttf) format('truetype'); 110 } 111 112 :root { 113 --font-body-family: 'Fuzzy Bubbles', handwriting; 114 --font-body-style: normal; 115 --font-body-weight: 400; 116 117 --font-heading-family: 'Archivo Black', sans-serif; 118 --font-heading-style: normal; 119 --font-heading-weight: 700; 120 121 --color-heading-text: 18,18,18; 122 --color-base-text: 18,18,18; 123 --color-base-background-1: 254,254,254; 124 --color-base-background-2: 254,254,254; 125 126 --color-base-solid-button-labels: 255,255,255; 127 --color-base-outline-button-labels: 18,18,18; 128 129 --color-base-accent-1: 18,18,18; 130 --color-base-accent-2: 18,18,18; 131 --payment-terms-background-color: 254,254,254; 132 133 --gradient-base-background-1: 254,254,254; 134 --gradient-base-background-2: 254,254,254; 135 --gradient-base-accent-1: 18,18,18; 136 --gradient-base-accent-2: 18,18,18; 137 138 --page-width: 145rem; 139 } 140 141 *, 142 *::before, 143 *::after { 144 box-sizing: inherit; 145 } 146 147 html { 148 box-sizing: border-box; 149 font-size: 62.5%; 150 height: 100%; 151 } 152 153 body { 154 display: grid; 155 grid-template-rows: auto auto 1fr auto; 156 grid-template-columns: 100%; 157 min-height: 100%; 158 margin: 0; 159 font-size: 1.5rem; 160 letter-spacing: 0.06rem; 161 line-height: 1.8; 162 font-family: var(--font-body-family); 163 font-style: var(--font-body-style); 164 font-weight: var(--font-body-weight); 165 166 } 167 168 @media screen and (min-width: 750px) { 169 body { 170 font-size: 1.6rem; 171 } 172 } 173 </style> 174 175 <link href="https://store-themes.easystore.co/1306561/themes/63057/assets/base.css?t=1787083337" rel="stylesheet" type="text/css" media="screen" /> 176 177 178 179 180
180<script>document.documentElement.className = document.documentElement.className.replace('no-js', 'js');</script>
180 181</head> 182 183<body id="---------------------" class="template-index" > 184 185 186<!-- Snippet:global/body_start: Console Extension --> 187<div id='es_console' style='display: none;'>1306561</div> 188<!-- /Snippet --> 189 190 191 <style> 192 header { 193 --logo-width: 120px; 194 } 195 .header-wrapper, 196 .header-wrapper .list-menu--disclosure, 197 .header-wrapper .search-modal{ 198 background-color: #FFFFFF; 199 } 200 .header-wrapper .search-modal .field__input{ 201 background-color: rgb(var(--color-background)); 202 } 203 .header-wrapper summary .icon-caret, 204 .header-wrapper .header__menu-item a, 205 .header-wrapper .list-menu__item, 206 .header-wrapper .link--text{ 207 color: #000000; 208 } 209 210 .search-modal__form{ 211 position: relative; 212 } 213 214 .dropdown { 215 display: none; 216 position: absolute; 217 top: 100%; 218 left: 0; 219 width: 100%; 220 padding: 5px 0; 221 background-color: #fff; 222 color:#000; 223 z-index: 1000; 224 border-bottom-left-radius: 15px; 225 border-bottom-right-radius: 15px; 226 border: 1px solid rgba(var(--color-foreground), 1); 227 border-top: none; 228 overflow-x: hidden; 229 overflow-y: auto; 230 max-height: 350px; 231 } 232 233 .dropdown-item { 234 padding: 0.4rem 2rem; 235 cursor: pointer; 236 line-height: 1.4; 237 overflow: hidden; 238 text-overflow: ellipsis; 239 white-space: nowrap; 240 } 241 242 .dropdown-item:hover{ 243 background-color: #f3f3f3; 244 } 245 246 .search__input.is-focus{ 247 border-radius: 15px; 248 border-bottom-left-radius: 0; 249 border-bottom-right-radius: 0; 250 border: 1px solid rgba(var(--color-foreground), 1); 251 border-bottom: none; 252 box-shadow: none; 253 } 254 255 .clear-all { 256 text-align: right; 257 padding: 0 2rem 0.2rem; 258 line-height: 1; 259 font-size: 70%; 260 margin-bottom: -2px; 261 } 262 263 .clear-all:hover{ 264 background-color: #fff; 265 } 266 267 .search-input-focus .easystore-section-header-hidden{ 268 transform: none; 269 } 270 .referral-notification { 271 position: absolute; 272 top: 100%; 273 right: 0; 274 background: white; 275 border: 1px solid #e0e0e0; 276 border-radius: 8px; 277 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); 278 width: 280px; 279 z-index: 1000; 280 padding: 16px; 281 margin-top: 8px; 282 font-size: 14px; 283 line-height: 1.4; 284 } 285 286 .referral-notification::before { 287 content: ''; 288 position: absolute; 289 top: -8px; 290 right: 20px; 291 width: 0; 292 height: 0; 293 border-left: 8px solid transparent; 294 border-right: 8px solid transparent; 295 border-bottom: 8px solid white; 296 } 297 298 .referral-notification::after { 299 content: ''; 300 position: absolute; 301 top: -9px; 302 right: 20px; 303 width: 0; 304 height: 0; 305 border-left: 8px solid transparent; 306 border-right: 8px solid transparent; 307 border-bottom: 8px solid #e0e0e0; 308 } 309 310 .referral-notification h4 { 311 margin: 0 0 8px 0; 312 color: #2196F3; 313 font-size: 16px; 314 font-weight: 600; 315 } 316 317 .referral-notification p { 318 margin: 0 0 12px 0; 319 color: #666; 320 } 321 322 .referral-notification .referral-code { 323 background: #f5f5f5; 324 padding: 8px; 325 border-radius: 4px; 326 font-family: monospace; 327 font-size: 13px; 328 text-align: center; 329 margin: 8px 0; 330 border: 1px solid #ddd; 331 } 332 333 .referral-notification .close-btn { 334 position: absolute; 335 top: 8px; 336 right: 8px; 337 background: none; 338 border: none; 339 font-size: 18px; 340 color: #999; 341 cursor: pointer; 342 padding: 0; 343 width: 20px; 344 height: 20px; 345 line-height: 1; 346 } 347 348 .referral-notification .close-btn:hover { 349 color: #333; 350 } 351 352 .referral-notification .action-btn { 353 background: #2196F3; 354 color: white; 355 border: none; 356 padding: 8px 16px; 357 border-radius: 4px; 358 cursor: pointer; 359 font-size: 12px; 360 margin-right: 8px; 361 margin-top: 8px; 362 } 363 364 .referral-notification .action-btn:hover { 365 background: #1976D2; 366 } 367 368 .referral-notification .dismiss-btn { 369 background: transparent; 370 color: #666; 371 border: 1px solid #ddd; 372 padding: 8px 16px; 373 border-radius: 4px; 374 cursor: pointer; 375 font-size: 12px; 376 margin-top: 8px; 377 } 378 379 .referral-notification .dismiss-btn:hover { 380 background: #f5f5f5; 381 } 382 .referral-modal__dialog { 383 transform: translate(-50%, 0); 384 transition: transform var(--duration-default) ease, visibility 0s; 385 z-index: 10000; 386 position: fixed; 387 top: 20vh; 388 left: 50%; 389 width: 100%; 390 max-width: 350px; 391 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); 392 border-radius: 12px; 393 background-color: #fff; 394 color: #000; 395 padding: 20px; 396 text-align: center; 397 } 398 399 .modal-overlay.referral-modal-overlay { 400 position: fixed; 401 top: 0; 402 left: 0; 403 width: 100%; 404 height: 100%; 405 background-color: rgba(0, 0, 0, 0.7); 406 z-index: 2001; 407 display: block; 408 opacity: 1;
409 transition: opacity var(--duration-default) ease, visibility 0s; 410 } 411</style> 412 413<link rel="preload" href="https://store-themes.easystore.co/1306561/themes/63057/assets/section-header.css?t=1787083337" as="style" onload="this.onload=null;this.rel='stylesheet'"> 414<link rel="preload" href="https://store-themes.easystore.co/1306561/themes/63057/assets/component-list-menu.css?t=1787083337" as="style" onload="this.onload=null;this.rel='stylesheet'"> 415<link rel="preload" href="https://store-themes.easystore.co/1306561/themes/63057/assets/component-menu-drawer.css?t=1787083337" as="style" onload="this.onload=null;this.rel='stylesheet'"> 416<link rel="preload" href="https://store-themes.easystore.co/1306561/themes/63057/assets/component-cart-notification.css?v1.1?t=1787083337" as="style" onload="this.onload=null;this.rel='stylesheet'"> 417
418<script src="https://store-themes.easystore.co/1306561/themes/63057/assets/cart-notification.js?t=1787083337" defer="defer"></script>
vendor: 2 bytes, line 418
418
419<script src="https://store-themes.easystore.co/1306561/themes/63057/assets/details-modal.js?t=1787083337" defer="defer"></script>
419 420 421<svg xmlns="http://www.w3.org/2000/svg" class="hidden"> 422 <symbol id="icon-search" viewbox="0 0 18 19" fill="none"> 423 <path fill-rule="evenodd" clip-rule="evenodd" d="M11.03 11.68A5.784 5.784 0 112.85 3.5a5.784 5.784 0 018.18 8.18zm.26 1.12a6.78 6.78 0 11.72-.7l5.4 5.4a.5.5 0 11-.71.7l-5.41-5.4z" fill="currentColor"/> 424 </symbol> 425 426 <symbol id="icon-close" class="icon icon-close" fill="none" viewBox="0 0 18 17"> 427 <path d="M.865 15.978a.5.5 0 00.707.707l7.433-7.431 7.579 7.282a.501.501 0 00.846-.37.5.5 0 00-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 10-.707-.708L8.991 7.853 1.413.573a.5.5 0 10-.693.72l7.563 7.268-7.418 7.417z" fill="currentColor"> 428 </symbol> 429</svg> 430 431 432<div id="easystore-section-header"> 433 <sticky-header class="header-wrapper header-wrapper--border-bottom"> 434 <header class="header header--middle-left page-width header--has-menu" itemscope itemtype="http://schema.org/Organization"> 435 <header-drawer data-breakpoint="tablet"> 436 <details class="menu-drawer-container menu-opening"> 437 <summary class="header__icon header__icon--menu header__icon--summary link link--text focus-inset" aria-label="Menu" role="button" aria-expanded="true" aria-controls="menu-drawer"> 438 <span> 439 440 441 442 <svg class="icon icon-hamburger " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M32.5,65h535a25,25,0,0,0,0-50H32.5a25,25,0,0,0,0,50Z" fill="currentColor"/><path d="M567.5,275H32.5a25,25,0,0,0,0,50h535a25,25,0,0,0,0-50Z" fill="currentColor"/><path d="M567.5,535H32.5a25,25,0,0,0,0,50h535a25,25,0,0,0,0-50Z" fill="currentColor"/></svg> 443 444 445 446 447 448 449 <svg class="icon icon-close " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M335.36,300,581.87,53.48a25,25,0,0,0-35.35-35.35L300,264.64,53.48,18.13A25,25,0,0,0,18.13,53.48L264.64,300,18.13,546.52a25,25,0,0,0,35.35,35.35L300,335.36,546.52,581.87a25,25,0,0,0,35.35-35.35Z" fill="currentColor"/></svg> 450 451 452 453 </span> 454 </summary> 455 <div id="menu-drawer" class="menu-drawer motion-reduce" tabindex="-1"> 456 <div class="menu-drawer__inner-container"> 457 <div class="menu-drawer__navigation-container"> 458 <nav class="menu-drawer__navigation"> 459 <ul class="menu-drawer__menu list-menu" role="list"> 460 461 462 463 <li> 464 <a href="/" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 465 é¦é 466 </a> 467 </li> 468 469 470 471 472 <li> 473 <a href="/collections/all" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 474 ææåå 475 </a> 476 </li> 477 478 479 480 481 <li> 482 <a href="/blogs/news" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 483 ææ°æ¶æ¯ 484 </a> 485 </li> 486 487 488 489 490 <li> 491 <a href="/store-locator" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 492 æ¬åºå°å 493 </a> 494 </li> 495 496 497 498 499 500 <li> 501 <details> 502 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 503 <a href="/pages/home" class="link--text list-menu__item menu-drawer__menu-item"> 504 å°åç¸½åº 505 </a> 506 507 508 509 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 510 511 512 513 514 515 516 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 517 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 518 </svg> 519 520 521 522 </summary> 523 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 524 <div class="menu-drawer__inner-submenu"> 525 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 526 527 528 529 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 530 531 532 533 å°åç¸½åº 534 </button> 535 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 536 537 538 539 <li> 540 <a href="https://www.instagram.com/yupinyuan_tw?igsh=bGJ1emtycm9vZWhz&utm_source=qr" target="_blank" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 541 IG(å°å總åº) 542 </a> 543 </li> 544 545 546 547 548 <li> 549 <a href="https://zh-tw.facebook.com/Ice.Fire.Dumpling/" target="_blank" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 550 FB(å°å總åº) 551 </a> 552 </li> 553 554 555 556 557 <li> 558 <a href="https://lin.ee/p71oiiy" target="_blank" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 559 LINE(å°å總åº) 560 </a> 561 </li> 562 563 564 565 </ul> 566 </div> 567 </div> 568 </details> 569 </li> 570 571 572 573 574 575 <li> 576 <details> 577 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 578 <a href="https://www.tpypy.com/" class="link--text list-menu__item menu-drawer__menu-item"> 579 å°å饿²³åº 580 </a> 581 582 583 584 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 585 586 587 588 589 590 591 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 592 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 593 </svg> 594 595 596 597 </summary> 598 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 599 <div class="menu-drawer__inner-submenu"> 600 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 601 602 603 604 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 605 606 607 608 å°å饿²³åº 609 </button> 610 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 611 612 613 614 <li> 615 <a href="https://www.instagram.com/yu_pin_yuan101/?utm_source=qr" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 616 IG(å°å饿²³åº) 617 </a> 618 </li> 619 620 621 622 623 <li> 624 <a href="https://www.facebook.com/Ice.Fire.Dumpling.Taichung.Tangyuan.Sweet?mibextid=LQQJ4d" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 625 FB(å°å饿²³åº) 626 </a> 627 </li> 628 629 630 631 632 <li> 633 <a href="https://lin.ee/KuLtM6l" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 634 LINE(å°å饿²³åº) 635 </a> 636 </li> 637 638 639 640 </ul> 641 </div> 642 </div> 643 </details> 644 </li> 645 646 647 648 649 <li> 650 <a href="https://docs.google.com/forms/d/1erFjT8VnhIHqmcleAOUaw23fLFcIyn_SOXNhZk6P7E4/edit?pli=1" target="_blank" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 651 é å®èªåï¼å¤éä¸å®å(å°å總åº) 652 </a> 653 </li> 654 655 656 657 658 <li> 659 <a href="https://lin.ee/p71oiiy" target="_blank" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 660 åè³¼ãæ¹ç¼è«é»æ 661 </a> 662 </li> 663 664 665 666 667 <li> 668 <a href="https://forms.gle/wcrr55emMkRMasDk7" target="_blank" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 669 å 宵ç¯çé£é è³¼å°å 670 </a> 671 </li> 672 673 674 </ul> 675 </nav> 676 677 <div class="menu-drawer__utility-links"> 678 679 680 681 682 683 684 685 686 687 <a href="/account/login" class="menu-drawer__account link link--text focus-inset h5"> 688 689 690 691 <svg class="icon icon-account " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M300,296.19c-70.7,0-137.11,28.74-187,80.93-49.59,51.87-76.9,120.77-76.9,194v25H563.89v-25c0-73.22-27.31-142.12-76.9-194C437.11,324.93,370.7,296.19,300,296.19ZM87.42,546.11C99.29,433.81,190.1,346.19,300,346.19s200.71,87.62,212.58,199.92Z" fill="currentColor"/><path d="M300,285.34c77.6,0,140.73-63.13,140.73-140.73S377.6,3.89,300,3.89,159.27,67,159.27,144.61,222.4,285.34,300,285.34Zm0-231.45a90.73,90.73,0,1,1-90.73,90.72A90.82,90.82,0,0,1,300,53.89Z" fill="currentColor"/></svg> 692 693 694 695 696 ç»å ¥ 697 </a> 698 699 <a href="/account/register" class="menu-drawer__account link link--text focus-inset h5"> 700 701 702 703 704 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-plus " fill="none" viewBox="0 0 10 10"> 705 <path fill-rule="evenodd" clip-rule="evenodd" d="M1 4.51a.5.5 0 000 1h3.5l.01 3.5a.5.5 0 001-.01V5.5l3.5-.01a.5.5 0 00-.01-1H5.5L5.49.99a.5.5 0 00-1 .01v3.5l-3.5.01H1z" fill="currentColor"></path> 706 </svg> 707 708 709 710 註å帳è 711 </a> 712 713 714 715 </div> 716 </div> 717 </div> 718 </div> 719 </details> 720 </header-drawer> 721 722 723 <a href="/" class="header__heading-link link link--text focus-inset" itemprop="url"> 724 <img src="https://cdn.store-assets.com/s/1306561/f/11132170.jpg" class="header__heading-logo" alt="御åå å°ç«æ¹¯å" loading="lazy" itemprop="logo"> 725 </a> 726 727 728 729 <div class="header__search-input" tabindex="-1"> 730 <form action="/search" method="get" role="search" class="search search-modal__form"> 731 <div class="field"> 732 <input class="search__input field__input" 733 id="Search-In-Modal" 734 type="search" 735 name="q" 736 value="" 737 placeholder="æå°" 738 autocomplete="off" 739 > 740 <label class="field__label" for="Search-In-Modal">æå°</label> 741 <div class="dropdown" id="searchDropdown"></div> 742 <input type="hidden" name="search_history" class="hidden_search_history"> 743 <input type="hidden" name="options[prefix]" value="last"> 744 <button clas
744s="search__button field__button" aria-label="æå°"> 745 <svg class="icon icon-search" aria-hidden="true" focusable="false" role="presentation"> 746 <use href="#icon-search"> 747 </svg> 748 </button> 749 </div> 750 </form> 751 </div> 752 753 754 <nav class="header__inline-menu"> 755 <ul class="list-menu list-menu--inline" role="list"> 756 757 758 759 <li> 760 <a href="/" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 761 é¦é 762 </a> 763 </li> 764 765 766 767 768 <li> 769 <a href="/collections/all" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 770 ææåå 771 </a> 772 </li> 773 774 775 776 777 <li> 778 <a href="/blogs/news" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 779 ææ°æ¶æ¯ 780 </a> 781 </li> 782 783 784 785 786 <li> 787 <a href="/store-locator" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 788 æ¬åºå°å 789 </a> 790 </li> 791 792 793 794 795 796 <li> 797 <details-disclosure> 798 <details> 799 <summary class="header__menu-item list-menu__item link focus-inset"> 800 <a href="/pages/home" >å°å總åº</a> 801 802 803 804 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 805 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 806 </svg> 807 808 809 810 </summary> 811 <ul class="header__submenu list-menu list-menu--disclosure caption-large motion-reduce" role="list" tabindex="-1"> 812 813 814 815 816 817 <li> 818 <a href="https://www.instagram.com/yupinyuan_tw?igsh=bGJ1emtycm9vZWhz&utm_source=qr" target="_blank" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 819 IG(å°å總åº) 820 </a> 821 </li> 822 823 824 825 826 827 <li> 828 <a href="https://zh-tw.facebook.com/Ice.Fire.Dumpling/" target="_blank" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 829 FB(å°å總åº) 830 </a> 831 </li> 832 833 834 835 836 837 <li> 838 <a href="https://lin.ee/p71oiiy" target="_blank" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 839 LINE(å°å總åº) 840 </a> 841 </li> 842 843 844 </ul> 845 </details> 846 </details-disclosure> 847 </li> 848 849 850 851 852 853 <li> 854 <details-disclosure> 855 <details> 856 <summary class="header__menu-item list-menu__item link focus-inset"> 857 <a href="https://www.tpypy.com/" >å°å饿²³åº</a> 858 859 860 861 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 862 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 863 </svg> 864 865 866 867 </summary> 868 <ul class="header__submenu list-menu list-menu--disclosure caption-large motion-reduce" role="list" tabindex="-1"> 869 870 871 872 873 874 <li> 875 <a href="https://www.instagram.com/yu_pin_yuan101/?utm_source=qr" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 876 IG(å°å饿²³åº) 877 </a> 878 </li> 879 880 881 882 883 884 <li> 885 <a href="https://www.facebook.com/Ice.Fire.Dumpling.Taichung.Tangyuan.Sweet?mibextid=LQQJ4d" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 886 FB(å°å饿²³åº) 887 </a> 888 </li> 889 890 891 892 893 894 <li> 895 <a href="https://lin.ee/KuLtM6l" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 896 LINE(å°å饿²³åº) 897 </a> 898 </li> 899 900 901 </ul> 902 </details> 903 </details-disclosure> 904 </li> 905 906 907 908 909 <li> 910 <a href="https://docs.google.com/forms/d/1erFjT8VnhIHqmcleAOUaw23fLFcIyn_SOXNhZk6P7E4/edit?pli=1" target="_blank" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 911 é å®èªåï¼å¤éä¸å®å(å°å總åº) 912 </a> 913 </li> 914 915 916 917 918 <li> 919 <a href="https://lin.ee/p71oiiy" target="_blank" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 920 åè³¼ãæ¹ç¼è«é»æ 921 </a> 922 </li> 923 924 925 926 927 <li> 928 <a href="https://forms.gle/wcrr55emMkRMasDk7" target="_blank" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 929 å 宵ç¯çé£é è³¼å°å 930 </a> 931 </li> 932 933 934 935 936 937 938 939 940 941 942 943 944 </ul> 945 </nav> 946 <div class="header__icons"> 947 948 949 950 <div class="header__icon header__icon--account link link--text focus-inset small-hide medium-hide" style="position: relative;"> 951 <a href="/account/login" class="header__icon link link--text focus-inset p-2"> 952 953 954 955 <svg class="icon icon-account " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M300,296.19c-70.7,0-137.11,28.74-187,80.93-49.59,51.87-76.9,120.77-76.9,194v25H563.89v-25c0-73.22-27.31-142.12-76.9-194C437.11,324.93,370.7,296.19,300,296.19ZM87.42,546.11C99.29,433.81,190.1,346.19,300,346.19s200.71,87.62,212.58,199.92Z" fill="currentColor"/><path d="M300,285.34c77.6,0,140.73-63.13,140.73-140.73S377.6,3.89,300,3.89,159.27,67,159.27,144.61,222.4,285.34,300,285.34Zm0-231.45a90.73,90.73,0,1,1-90.73,90.72A90.82,90.82,0,0,1,300,53.89Z" fill="currentColor"/></svg> 956 957 958
959 <span id="my-account" class="header__link-label">ç»å ¥</span> 960 </a> 961 962 <!-- Referral Notification Popup for Desktop --> 963 <div id="referralNotification" class="referral-notification" style="display: none;"> 964 <button class="close-btn" onclick="dismissReferralNotification()">×</button> 965 <div style="text-align: center; margin-bottom: 16px;"> 966 <div style="width: 100px; height: 100px; margin: 0 auto;"> 967 <img src="https://resources.easystore.co/storefront/icons/channels/vector_referral_program.svg"> 968 </div> 969 </div> 970 <p id="referralSignupMessage" style="text-align: center; font-size: 14px; color: #666; margin: 0 0 20px 0;"> 971 æ¨ç好å鿍 åé¥éï¼ç«å³è¨»åé åã 972 </p> 973 <div style="text-align: center;"> 974 <button class="btn" onclick="goToSignupPage()" style="width: 100%;"> 975 註å 976 </button> 977 </div> 978 </div> 979 </div> 980 981 982 983 <a href="/cart" class="header__icon link link--text focus-inset" id="cart-icon-bubble"> 984 <span class="header__icon--cart"> 985 986 987 988 <svg class="icon icon-cart-empty " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496.56 600"><path d="M453.52,128.63a25,25,0,0,0-24.91-22.8H364.72a117.48,117.48,0,0,0-232.89,0H67.94A25,25,0,0,0,43,128.63L8.8,515.21a72.11,72.11,0,0,0,19.05,55.6,79,79,0,0,0,58.22,25.3H410.49a79,79,0,0,0,58.22-25.3,72.11,72.11,0,0,0,19.05-55.6ZM248.28,53.89a67.58,67.58,0,0,1,65.65,51.94H182.63A67.57,67.57,0,0,1,248.28,53.89ZM431.83,537.05a28.85,28.85,0,0,1-21.34,9.06H86.07a28.85,28.85,0,0,1-21.34-9.06,22.69,22.69,0,0,1-6.13-17.43L90.82,155.83h40v51.23a25,25,0,0,0,50,0V155.83h135v51.23a25,25,0,0,0,50,0V155.83h40L438,519.62A22.68,22.68,0,0,1,431.83,537.05Z" fill="currentColor"/></svg> 989 990 991 992 <div class="cart-count-bubble hidden"> 993 <span aria-hidden="true" class="js-content-cart-count">0</span> 994 </div> 995 </span> 996 <span class="header__link-label medium-hide small-hide"> 997 è³¼ç©è» 998 </span> 999 </a> 1000 1001 1002 1003 <!-- Referral Notification Modal for Mobile --> 1004 <details-modal class="referral-modal" id="referralMobileModal"> 1005 <details> 1006 <summary class="referral-modal__toggle" aria-haspopup="dialog" aria-label="Open referral modal" style="display: none;"> 1007 </summary> 1008 <div class="modal-overlay referral-modal-overlay"></div> 1009 <div class="referral-modal__dialog" role="dialog" aria-modal="true" aria-label="Referral notification"> 1010 <div class="referral-modal__content"> 1011 <button type="button" class="modal__close-button" aria-label="Close" onclick="closeMobileReferralModal()" style="position: absolute; top: 16px; right: 16px; background: none; border: none; font-size: 24px; cursor: pointer;"> 1012 × 1013 </button> 1014 1015 <div style="margin-bottom: 24px;"> 1016 <div style="width: 120px; height: 120px; margin: 0 auto 20px;"> 1017 <img src="https://resources.easystore.co/storefront/icons/channels/vector_referral_program.svg" style="width: 100%; height: 100%;"> 1018 </div> 1019 </div> 1020 1021 <p id="referralSignupMessageMobile" style="font-size: 16px; color: #333; margin: 0 0 30px 0; line-height: 1.5;"> 1022 æ¨ç好å鿍 åé¥éï¼ç«å³è¨»åé åã 1023 </p> 1024 1025 <button type="button" class="btn" onclick="goToSignupPageFromMobile()" style="width: 100%;"> 1026 註å 1027 </button> 1028 </div> 1029 </div> 1030 </details> 1031 </details-modal> 1032 1033 1034 1035 </div> 1036 </header> 1037 </sticky-header> 1038 1039<cart-notification> 1040 <div class="cart-notification-wrapper page-width color-background-1"> 1041 <div id="cart-notification" class="cart-notification focus-inset" aria-modal="true" aria-label="å·²å å ¥è³¼ç©è»" role="dialog" tabindex="-1"> 1042 <div class="cart-notification__header"> 1043 <h2 class="cart-notification__heading caption-large"> 1044 1045 1046 <svg class="icon icon-checkmark color-foreground-text " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 9" fill="none"> 1047 <path fill-rule="evenodd" clip-rule="evenodd" d="M11.35.643a.5.5 0 01.006.707l-6.77 6.886a.5.5 0 01-.719-.006L.638 4.845a.5.5 0 11.724-.69l2.872 3.011 6.41-6.517a.5.5 0 01.707-.006h-.001z" fill="currentColor"></path> 1048 </svg> 1049 1050 1051 å·²å å ¥è³¼ç©è»</h2> 1052 <button type="button" class="cart-notification__close modal__close-button link link--text focus-inset" aria-label="accessibility.close"> 1053 1054 1055 1056 <svg class="icon icon-close " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M335.36,300,581.87,53.48a25,25,0,0,0-35.35-35.35L300,264.64,53.48,18.13A25,25,0,0,0,18.13,53.48L264.64,300,18.13,546.52a25,25,0,0,0,35.35,35.35L300,335.36,546.52,581.87a25,25,0,0,0,35.35-35.35Z" fill="currentColor"/></svg> 1057 1058 1059 1060 </button> 1061 </div> 1062 <div id="cart-notification-product" class="cart-notification-product"></div> 1063 <div class="cart-notification__links"> 1064 <a href="/cart" id="cart-notification-button" class="button button--secondary button--full-width">æ¥çè³¼ç©è» (<span class="js-content-cart-count">0</span>)</a> 1065 <form action="/cart" method="post" id="cart-notification-form"> 1066 <input type="hidden" name="_token" value="6cbTyCiCbcMqkUBsbG4d9fXH0IE7qT6ixs2TZMuy"> 1067 <input type="hidden" name="current_currency" value=""> 1068 <button class="button button--primary button--full-width" name="checkout" value="true">çµå¸³</button> 1069 </form> 1070 <button type="button" class="link button-label">ç¹¼çºè³¼ç©</button> 1071 </div> 1072 </div> 1073 </div> 1074</cart-notification> 1075<style> 1076 .cart-notification { 1077 display: none; 1078 } 1079</style>
1080<script> 1081document.getElementById('cart-notification-form').addEventListener('submit',(event)=>{ 1082 if(event.submitter) event.submitter.classList.add('loading'); 1083}) 1084 1085</script>
1085 1086 1087</div> 1088 1089
1090<script> 1091 1092 class StickyHeader extends HTMLElement { 1093 constructor() { 1094 super(); 1095 } 1096 1097 connectedCallback() { 1098 this.header = document.getElementById('easystore-section-header'); 1099 this.headerBounds = {}; 1100 this.currentScrollTop = 0; 1101 this.preventReveal = false; 1102 1103 this.onScrollHandler = this.onScroll.bind(this); 1104 this.hideHeaderOnScrollUp = () => this.preventReveal = true; 1105 1106 this.addEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp); 1107 window.addEventListener('scroll', this.onScrollHandler, false); 1108 1109 this.createObserver(); 1110 } 1111 1112 disconnectedCallback() { 1113 this.removeEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp); 1114 window.removeEventListener('scroll', this.onScrollHandler); 1115 } 1116 1117 createObserver() { 1118 let observer = new IntersectionObserver((entries, observer) => { 1119 this.headerBounds = entries[0].intersectionRect; 1120 observer.disconnect(); 1121 }); 1122 1123 observer.observe(this.header); 1124 } 1125 1126 onScroll() { 1127 const scrollTop = window.pageYOffset || document.documentElement.scrollTop; 1128 1129 if (scrollTop > this.currentScrollTop && scrollTop > this.headerBounds.bottom) { 1130 requestAnimationFrame(this.hide.bind(this)); 1131 } else if (scrollTop < this.currentScrollTop && scrollTop > this.headerBounds.bottom) { 1132 if (!this.preventReveal) { 1133 requestAnimationFrame(this.reveal.bind(this)); 1134 } else { 1135 window.clearTimeout(this.isScrolling); 1136 1137 this.isScrolling = setTimeout(() => { 1138 this.preventReveal = false; 1139 }, 66); 1140 1141 requestAnimationFrame(this.hide.bind(this)); 1142 } 1143 } else if (scrollTop <= this.headerBounds.top) { 1144 requestAnimationFrame(this.reset.bind(this)); 1145 } 1146 1147 1148 this.currentScrollTop = scrollTop; 1149 } 1150 1151 hide() { 1152 this.header.classList.add('easystore-section-header-hidden', 'easystore-section-header-sticky'); 1153 this.closeMenuDisclosure(); 1154 // this.closeSearchModal(); 1155 } 1156 1157 reveal() { 1158 this.header.classList.add('easystore-section-header-sticky', 'animate'); 1159 this.header.classList.remove('easystore-section-header-hidden'); 1160 } 1161 1162 reset() { 1163 this.header.classList.remove('easystore-section-header-hidden', 'easystore-section-header-sticky', 'animate'); 1164 } 1165 1166 closeMenuDisclosure() { 1167 this.disclosures = this.disclosures || this.header.querySelectorAll('details-disclosure'); 1168 this.disclosures.forEach(disclosure => disclosure.close()); 1169 } 1170 1171 // closeSearchModal() { 1172 // this.searchModal = this.searchModal || this.header.querySelector('details-modal'); 1173 // this.searchModal.close(false); 1174 // } 1175 } 1176 1177 customElements.define('sticky-header', StickyHeader); 1178 1179 1180 class DetailsDisclosure extends HTMLElement{ 1181 constructor() { 1182 super(); 1183 this.mainDetailsToggle = this.querySelector('details'); 1184 // this.mainDetailsToggle.addEventListener('focusout', this.onFocusOut.bind(this)); 1185 this.mainDetailsToggle.addEventListener('mouseover', this.open.bind(this)); 1186 this.mainDetailsToggle.addEventListener('mouseleave', this.close.bind(this)); 1187 } 1188 1189 onFocusOut() { 1190 setTimeout(() => { 1191 if (!this.contains(document.activeElement)) this.close(); 1192 }) 1193 } 1194 1195 open() { 1196 this.mainDetailsToggle.setAttribute('open',1) 1197 } 1198 1199 close() { 1200 this.mainDetailsToggle.removeAttribute('open') 1201 } 1202 } 1203 1204 customElements.define('details-disclosure', DetailsDisclosure); 1205 1206 function clearAll() { 1207 localStorage.removeItem('searchHistory'); 1208 1209 var customer = ""; 1210 if(customer) { 1211 // Your logic to clear all data or call an endpoint 1212 fetch('/account/search_histories', { 1213 method: 'DELETE', 1214 headers: { 1215 "Content-Type": "application/json", 1216 "X-Requested-With": "XMLHttpRequest" 1217 }, 1218 body: JSON.stringify({ 1219 _token: "6cbTyCiCbcMqkUBsbG4d9fXH0IE7qT6ixs2TZMuy" 1220 }), 1221 }) 1222 .then(response => response.json()) 1223 } 1224 } 1225 // End - delete search history from local storage 1226 1227 // search history dropdown 1228 var searchInputs = document.querySelectorAll('.search__input'); 1229 1230 if(searchInputs.length > 0) { 1231
1232 searchInputs.forEach((searchInput)=> { 1233 1234 searchInput.addEventListener('focus', function() { 1235 var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown'); 1236 searchDropdown.innerHTML = ''; // Clear existing items 1237 1238 // retrieve data from local storage 1239 var searchHistoryData = JSON.parse(localStorage.getItem('searchHistory')) || []; 1240 1241 // Convert JSON to string 1242 var search_history_json = JSON.stringify(searchHistoryData); 1243 1244 // Set the value of the hidden input 1245 searchInput.closest('form').querySelector(".hidden_search_history").value = search_history_json; 1246 1247 // create dropdown items 1248 var clearAllItem = document.createElement('div'); 1249 clearAllItem.className = 'dropdown-item clear-all'; 1250 clearAllItem.textContent = 'Clear'; 1251 clearAllItem.addEventListener('click', function() { 1252 clearAll(); 1253 searchDropdown.style.display = 'none'; 1254 searchInput.classList.remove('is-focus'); 1255 }); 1256 searchDropdown.appendChild(clearAllItem); 1257 1258 // create dropdown items 1259 searchHistoryData.forEach(function(item) { 1260 var dropdownItem = document.createElement('div'); 1261 dropdownItem.className = 'dropdown-item'; 1262 dropdownItem.textContent = item.term; 1263 dropdownItem.addEventListener('click', function() { 1264 searchInput.value = item.term; 1265 searchInput.closest('form').submit(); 1266 searchDropdown.style.display = 'none'; 1267 }); 1268 searchDropdown.appendChild(dropdownItem); 1269 }); 1270 1271 if(searchHistoryData.length > 0){ 1272 // display the dropdown 1273 searchInput.classList.add('is-focus'); 1274 document.body.classList.add('search-input-focus'); 1275 searchDropdown.style.display = 'block'; 1276 } 1277 }); 1278 1279 searchInput.addEventListener("focusout", (event) => { 1280 var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown'); 1281 searchInput.classList.remove('is-focus'); 1282 searchDropdown.classList.add('transparent'); 1283 setTimeout(()=>{ 1284 searchDropdown.style.display = 'none'; 1285 searchDropdown.classList.remove('transparent'); 1286 document.body.classList.remove('search-input-focus'); 1287 }, 400); 1288 }); 1289 }) 1290 } 1291 // End - search history dropdown 1292 1293 // referral notification popup 1294 const referralMessageTemplate = 'æ¨ç好å鿍 __CURRENCY_CODE__ __CREDIT_AMOUNT__ åé¥éï¼ç«å³è¨»åé åã'; 1295 const shopCurrency = 'NT$'; 1296 1297 function getCookie(name) { 1298 const value = `; ${document.cookie}`; 1299 const parts = value.split(`; ${name}=`); 1300 if (parts.length === 2) return parts.pop().split(';').shift(); 1301 return null; 1302 } 1303 1304 function removeCookie(name) { 1305 document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`; 1306 } 1307 1308 function showReferralNotification() { 1309 const referralCode = getCookie('customer_referral_code'); 1310 1311 1312 const customerReferralCode = null; 1313 1314 1315 const activeReferralCode = referralCode || customerReferralCode; 1316 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 1317 1318 if (referralData.timestamp && referralData.expirationDays) { 1319 const expirationTime = referralData.timestamp + (referralData.expirationDays * 24 * 60 * 60 * 1000); 1320 if (Date.now() > expirationTime) { 1321 localStorage.removeItem('referral_notification_data'); 1322 return; 1323 } 1324 } 1325 1326 if (referralData.dismissed) return; 1327 1328 if (activeReferralCode) { 1329 if (referralData.creditAmount) { 1330 displayReferralNotification(referralData.creditAmount); 1331 } else { 1332 fetchReferralCampaignData(activeReferralCode); 1333 } 1334 } 1335 } 1336 1337 function fetchReferralCampaignData(referralCode) { 1338 fetch(`/customer/referral_program/campaigns/${referralCode}`) 1339 .then(response => { 1340 if (!response.ok) { 1341 throw new Error('Network response was not ok'); 1342 } 1343 return response.json(); 1344 }) 1345 .then(data => { 1346 let refereeCreditAmount = null; 1347 if (data.data.campaign && data.data.campaign.referral_rules) { 1348 const refereeRule = data.data.campaign.referral_rules.find(rule => 1349 rule.target_type === 'referee' && 1350 rule.event_name === 'customer/create' && 1351 rule.entitlement && 1352 rule.entitlement.type === 'credit' 1353 ); 1354 1355 if (refereeRule) { 1356 refereeCreditAmount = refereeRule.entitlement.amount; 1357 } 1358 } 1359 1360 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 1361 referralData.creditAmount = refereeCreditAmount; 1362 referralData.dismissed = referralData.dismissed || false; 1363 referralData.timestamp = Date.now(); 1364 referralData.expirationDays = 3; 1365 localStorage.setItem('referral_notification_data', JSON.stringify(referralData)); 1366 1367 displayReferralNotification(refereeCreditAmount); 1368 }) 1369 .catch(error => { 1370 removeCookie('customer_referral_code'); 1371 }); 1372 } 1373 1374 function displayReferralNotification(creditAmount = null) { 1375 const isMobile = innerWidth <= 749; 1376 1377 if (isMobile) { 1378 const mobileModal = document.querySelector('#referralMobileModal details'); 1379 const mobileMessageElement = document.getElementById('referralSignupMessageMobile'); 1380 1381 if (mobileModal && mobileMessageElement) { 1382 if (creditAmount) {
1383 const finalMessage = referralMessageTemplate 1384 .replace('__CREDIT_AMOUNT__', creditAmount) 1385 .replace('__CURRENCY_CODE__', shopCurrency); 1386 1387 mobileMessageElement.textContent = finalMessage; 1388 } 1389 1390 mobileModal.setAttribute('open', ''); 1391 } 1392 } else { 1393 const notification = document.getElementById('referralNotification'); 1394 1395 if (notification) { 1396 if (creditAmount) { 1397 const messageElement = document.getElementById('referralSignupMessage'); 1398 if (messageElement) { 1399 const finalMessage = referralMessageTemplate 1400 .replace('__CREDIT_AMOUNT__', creditAmount) 1401 .replace('__CURRENCY_CODE__', shopCurrency); 1402 1403 messageElement.textContent = finalMessage; 1404 } 1405 } 1406 1407 notification.style.display = 'block'; 1408 } 1409 } 1410 } 1411 1412 showReferralNotification(); 1413 1414 addEventListener('beforeunload', function() { 1415 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 1416 1417 if (referralData.creditAmount !== undefined) { 1418 referralData.creditAmount = null; 1419 localStorage.setItem('referral_notification_data', JSON.stringify(referralData)); 1420 } 1421 }); 1422 1423 function closeReferralNotification() { 1424 const notification = document.getElementById('referralNotification'); 1425 if (notification) { 1426 notification.style.display = 'none'; 1427 } 1428 } 1429 1430 function dismissReferralNotification() { 1431 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 1432 1433 referralData.dismissed = true; 1434 referralData.timestamp = referralData.timestamp || Date.now(); 1435 referralData.expirationDays = referralData.expirationDays || 3; 1436 1437 localStorage.setItem('referral_notification_data', JSON.stringify(referralData)); 1438 1439 closeReferralNotification(); 1440 } 1441 1442 function goToSignupPage() { 1443 location.href = '/account/register'; 1444 dismissReferralNotification(); 1445 } 1446 1447 function closeMobileReferralModal() { 1448 const mobileModal = document.querySelector('#referralMobileModal details'); 1449 if (mobileModal) { 1450 mobileModal.removeAttribute('open'); 1451 } 1452 1453 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 1454 referralData.dismissed = true; 1455 referralData.timestamp = referralData.timestamp || Date.now(); 1456 referralData.expirationDays = referralData.expirationDays || 3; 1457 localStorage.setItem('referral_notification_data', JSON.stringify(referralData)); 1458 } 1459 1460 function goToSignupPageFromMobile() { 1461 location.href = '/account/register'; 1462 closeMobileReferralModal(); 1463 } 1464 // End - referral notification popup 1465</script>
1465 1466 1467 1468 <main id="MainContent" class="content-for-layout focus-none" role="main" tabindex="-1"> 1469 1470 1471 1472 1473 1474<div id='content_for_index'><div id='easystore-section-1652840809423'> <link 1475 rel="preload" 1476 href="https://store-themes.easystore.co/1306561/themes/63057/assets/splide.min.css?t=1787083337" 1477 as="style" 1478 onload="this.onload=null;this.rel='stylesheet'"> 1479<link 1480 rel="preload" 1481 href="https://store-themes.easystore.co/1306561/themes/63057/assets/component-slider.css?v2?t=1787083337" 1482 as="style" 1483 onload="this.onload=null;this.rel='stylesheet'"> 1484 1485<style> 1486 1487 1488 1489 1490 [data-slide-id="slide-1652840809423-1"] .slider__content { 1491 background-color: #E1E1E1 1492 ; 1493 color: #000000 1494 ; 1495 } 1496 [data-slide-id="slide-1652840809423-1"] .slider__content .btn { 1497 background-color: #000000 1498 ; 1499 border-color: #000000 1500 ; 1501 color: #E1E1E1 1502 ; 1503 } 1504 1505 1506 1507 1508 [data-slide-id="slide-1652840809423-2"] .slider__content { 1509 background-color: #E1E1E1 1510 ; 1511 color: #000000 1512 ; 1513 } 1514 [data-slide-id="slide-1652840809423-2"] .slider__content .btn { 1515 background-color: #000000 1516 ; 1517 border-color: #000000 1518 ; 1519 color: #E1E1E1 1520 ; 1521 } 1522 1523 1524 1525 1526 [data-slide-id="slide-1652840809423-3"] .slider__content { 1527 background-color: #E1E1E1 1528 ; 1529 color: #000000 1530 ; 1531 } 1532 [data-slide-id="slide-1652840809423-3"] .slider__content .btn { 1533 background-color: #000000 1534 ; 1535 border-color: #000000 1536 ; 1537 color: #E1E1E1 1538 ; 1539 } 1540 1541</style> 1542 1543<div class="slider-section"> 1544 <div id="slider-1652840809423" class="splide slider-component"> 1545 <div class="splide__track"> 1546 <ul class="splide__list"> 1547 1548 1549 1550 1551 1552 <li data-slide-id="slide-1652840809423-1" data-splide-interval="5000"class="splide__slide"> 1553 <div class="split-slideshow__slider split-slideshow__slider--right"> 1554 1555 <div class="slider__image-wrapper"> 1556 1557 <a href="https://www.tpypy.com/collections/all"> 1558 1559 1560 <img 1561 src="https://cdn.store-assets.com/s/1306561/f/14363242.jpg?width=550&format=webp" 1562 alt="御åå å°ç«æ¹¯å | 御åå å°ç«æ¹¯å" 1563 class="slide-mobile-img" 1564 width="100%" 1565 loading="lazy"> 1566 1567 <img 1568 srcset="https://cdn.store-assets.com/s/1306561/f/14363242.jpg?width=550&format=webp 550w, https://cdn.store-assets.com/s/1306561/f/14363242.jpg?width=710&format=webp 710w, https://cdn.store-assets.com/s/1306561/f/14363242.jpg?width=1500&format=webp 1500w" 1569 src="https://cdn.store-assets.com/s/1306561/f/14363242.jpg?width=550&format=webp" 1570 sizes="(min-width: 990px) 950px, (min-width: 750px) 710px, 550px" 1571 alt="御åå å°ç«æ¹¯å | 御åå å°ç«æ¹¯å" 1572 width="100%" 1573 loading="lazy"> 1574 1575 </a> 1576 1577 </div> 1578 1579 1580 <div class="slider__content"> 1581 <div> 1582 1583 <h2 class="h1">御åå å°ç«æ¹¯å</h2> 1584 1585 1586 <p>å æå¤æ³æå·¥è£½æï¼çæå¯¦æï¼å質ä¿èã</p> 1587 1588 1589 <a href="https://www.tpypy.com/collections/all" class="btn">ç«å³è³¼è²·</a> 1590 1591 </div> 1592 </div> 1593 1594 </div> 1595 </li> 1596 1597 1598 1599 1600 1601
1602 <li data-slide-id="slide-1652840809423-2" data-splide-interval="5000"class="splide__slide"> 1603 <div class="split-slideshow__slider split-slideshow__slider--left"> 1604 1605 <div class="slider__image-wrapper"> 1606 1607 <a href="https://www.tpypy.com/collections/all"> 1608 1609 1610 <img 1611 src="https://cdn.store-assets.com/s/1306561/f/14363156.jpg?width=550&format=webp" 1612 alt="ç§æå³çµ±æä½å 宵 | 御åå å°ç«æ¹¯å" 1613 class="slide-mobile-img" 1614 width="100%" 1615 loading="lazy"> 1616 1617 <img 1618 srcset="https://cdn.store-assets.com/s/1306561/f/14363156.jpg?width=550&format=webp 550w, https://cdn.store-assets.com/s/1306561/f/14363156.jpg?width=710&format=webp 710w, https://cdn.store-assets.com/s/1306561/f/14363156.jpg?width=1500&format=webp 1500w" 1619 src="https://cdn.store-assets.com/s/1306561/f/14363156.jpg?width=550&format=webp" 1620 sizes="(min-width: 990px) 950px, (min-width: 750px) 710px, 550px" 1621 alt="ç§æå³çµ±æä½å 宵 | 御åå å°ç«æ¹¯å" 1622 width="100%" 1623 loading="lazy"> 1624 1625 </a> 1626 1627 </div> 1628 1629 1630 <div class="slider__content"> 1631 <div> 1632 1633 <h2 class="h1">ç§æå³çµ±æä½å 宵</h2> 1634 1635 1636 <p>使ç¨å ©å¹´ä»¥ä¸è糯米ï¼å£æQå½å¸¶å</p> 1637 1638 1639 <a href="https://www.tpypy.com/collections/all" class="btn">ç«å³è³¼è²·</a> 1640 1641 </div> 1642 </div> 1643 1644 </div> 1645 </li> 1646 1647 1648 1649 1650 1651 1652 <li data-slide-id="slide-1652840809423-3" data-splide-interval="5000"class="splide__slide"> 1653 <div class="split-slideshow__slider split-slideshow__slider--right"> 1654 1655 <div class="slider__image-wrapper"> 1656 1657 <a href="https://www.tpypy.com/collections/all"> 1658 1659 1660 <img 1661 src="https://cdn.store-assets.com/s/1306561/f/14363154.jpg?width=550&format=webp" 1662 alt="使ç¨ç´å¤©ç¶é£æ | 御åå å°ç«æ¹¯å" 1663 class="slide-mobile-img" 1664 width="100%" 1665 loading="lazy"> 1666 1667 <img 1668 srcset="https://cdn.store-assets.com/s/1306561/f/14363154.jpg?width=550&format=webp 550w, https://cdn.store-assets.com/s/1306561/f/14363154.jpg?width=710&format=webp 710w, https://cdn.store-assets.com/s/1306561/f/14363154.jpg?width=1500&format=webp 1500w" 1669 src="https://cdn.store-assets.com/s/1306561/f/14363154.jpg?width=550&format=webp" 1670 sizes="(min-width: 990px) 950px, (min-width: 750px) 710px, 550px" 1671 alt="使ç¨ç´å¤©ç¶é£æ | 御åå å°ç«æ¹¯å" 1672 width="100%" 1673 loading="lazy"> 1674 1675 </a> 1676 1677 </div> 1678 1679 1680 <div class="slider__content"> 1681 <div> 1682 1683 <h2 class="h1">使ç¨ç´å¤©ç¶é£æ</h2> 1684 1685 1686 <p>å ¨é¨æåççºå¤©ç¶é£æï¼çµç¡æ·»å é²è å</p> 1687 1688 1689 <a href="https://www.tpypy.com/collections/all" class="btn">ç«å³è³¼è²·</a> 1690 1691 </div> 1692 </div> 1693 1694 </div> 1695 </li> 1696 1697 1698 </ul> 1699 </div> 1700 </div> 1701 1702</div> 1703 1704
1705<script src="https://store-themes.easystore.co/1306561/themes/63057/assets/splide.min.js?t=1787083337" type="text/javascript" ></script>
1705 1706
1707<script> 1708 1709 document.addEventListener('DOMContentLoaded', function() { 1710 if (document.querySelector('#slider-1652840809423')) { 1711 var splide = new Splide('#slider-1652840809423', { 1712 type: 'fade', 1713 1714 autoplay : true, 1715 1716 pauseOnHover: false, 1717 pagination: true, 1718 rewind: true 1719 }); 1720 1721 splide.mount(); 1722 } 1723 }); 1724</script>
1724 1725 1726 1727 </div><div id='easystore-section-1688481311493'> <link rel="preload" href="https://store-themes.easystore.co/1306561/themes/63057/assets/section-image-banner.css?t=1787083337" as="style" onload="this.onload=null;this.rel='stylesheet'"> 1728 1729<style> 1730 @media screen and (max-width: 749px) { 1731 #Banner1688481311493::before, 1732 #Banner1688481311493 .banner__media::before, 1733 #Banner1688481311493:not(.banner--mobile-bottom) .banner__content::before { 1734 padding-bottom: 50%; 1735 content: ''; 1736 display: block; 1737 } 1738 } 1739 1740 @media screen and (min-width: 750px) { 1741 #Banner1688481311493::before, 1742 #Banner1688481311493 .banner__media::before { 1743 padding-bottom: 50%; 1744 content: ''; 1745 display: block; 1746 } 1747 } 1748 1749 #Banner1688481311493::after { 1750 opacity: 0; 1751 } 1752</style> 1753 1754<div id="Banner1688481311493" class="banner banner--mobile-bottom banner--desktop-transparent"> 1755 1756 <div class="banner__media media banner__media-half"> 1757 <img 1758 srcset="https://cdn.store-assets.com/s/1306561/f/11615161.jpg?width=375&format=webp 375w,https://cdn.store-assets.com/s/1306561/f/11615161.jpg?width=750&format=webp 750w,https://cdn.store-assets.com/s/1306561/f/11615161.jpg?width=1500&format=webp 1500w" 1759 sizes="(min-width: 750px) 50vw, 100vw" 1760 src="https://cdn.store-assets.com/s/1306561/f/11615161.jpg?width=1500&format=webp" 1761 alt="https://cdn.store-assets.com/s/1306561/f/11615161.jpg" 1762 class="banner__media-image-half" 1763 loading="lazy" 1764 > 1765 </div> 1766 1767 1768 <div class="banner__media media banner__media-half"> 1769 <img 1770 srcset="https://cdn.store-assets.com/s/1306561/f/12039546.jpeg?width=375&format=webp 375w,https://cdn.store-assets.com/s/1306561/f/12039546.jpeg?width=750&format=webp 750w,https://cdn.store-assets.com/s/1306561/f/12039546.jpeg?width=1500&format=webp 1500w" 1771 sizes="(min-width: 750px) 50vw, 100vw" 1772 src="https://cdn.store-assets.com/s/1306561/f/12039546.jpeg?width=1500&format=webp" 1773 alt="https://cdn.store-assets.com/s/1306561/f/12039546.jpeg" 1774 class="banner__media-image-half" 1775 loading="lazy" 1776 > 1777 </div> 1778 1779 <div class="banner__content banner__content--center page-width"> 1780 <div class="banner__box color-background-1"> 1781 1782 1783 1784 <h2 class="banner__heading h1"> 1785 <span>ç§æå³çµ±æå</span> 1786 </h2> 1787 1788 1789 1790 1791 <div class="banner__text"> 1792 <span>å æå¤æ³è£½æï¼å¾åç©æå°æåå´æ ¼æé</span> 1793 </div> 1794 1795 1796 1797 1798 <div class="banner__buttons banner__buttons--multiple"> 1799 1800 <a href="https://www.instagram.com/yupinyuan_tw?igsh=bGJ1emtycm9vZWhz&utm_source=qr" class="button button--primary">äºè§£æ´å¤</a> 1801 1802 </div> 1803 1804 1805 </div> 1806 </div> 1807</div> 1808 1809 1810 </div><div id='easystore-section-1649057694043'> <link 1811 rel="preload" 1812 href="https://store-themes.easystore.co/1306561/themes/63057/assets/component-price.css?t=1787083337" 1813 as="style" 1814 onload="this.onload=null;this.rel='stylesheet'"> 1815<link 1816 rel="preload" 1817 href="https://store-themes.easystore.co/1306561/themes/63057/assets/component-card.css?t=1787083337" 1818 as="style" 1819 onload="this.onload=null;this.rel='stylesheet'"> 1820<link 1821 rel="preload" 1822 href="https://store-themes.easystore.co/1306561/themes/63057/assets/component-product-grid.css?t=1787083337" 1823 as="style" 1824 onload="this.onload=null;this.rel='stylesheet'"> 1825<link 1826 rel="preload" 1827 href="https://store-themes.easystore.co/1306561/themes/63057/assets/component-loading-overlay.css?t=1787083337" 1828 as="style" 1829 onload="this.onload=null;this.rel='stylesheet'"> 1830 1831<link 1832 rel="preload" 1833 href="https://store-themes.easystore.co/1306561/themes/63057/assets/component-slider.css?t=1787083337" 1834 as="style" 1835 onload="this.onload=null;this.rel='stylesheet'"> 1836<link 1837 rel="preload" 1838 href="https://store-themes.easystore.co/1306561/themes/63057/assets/template-collection.css?t=1787083337" 1839 as="style" 1840 onload="this.onload=null;this.rel='stylesheet'"> 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850<style> 1851 #section-1649057694043 .product-card-wrapper { 1852 background-color: rgba(237, 237, 237, 1); 1853 } 1854</style> 1855 1856 1857<div id="section-1649057694043" class="spaced-section page-width page-width-desktop">
1858 <div class="title-wrapper-with-link title-wrapper--self-padded-tablet-down"> 1859 <h2 class="title">å ¨é¨é½æ¯æå·¥ï¼èªå·±åç!</h2> 1860 1861 1862 </div> 1863 1864 1865 1866 <slider-component class="slider-mobile-gutter"> 1867 <ul class="grid grid--2-col product-grid grid--3-col-tablet grid--4-col-desktop grid--quarter-max slider slider--tablet grid--peek" role="list"> 1868 1869 <li class="grid__item slider__slide"> 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886<div class="product-card-wrapper card-wrapper"> 1887 <a href="/collections/feature-on-homepage/products/御åå 禮åè¢" class="full-unstyled-link"> 1888 1889 <add-to-cart-button> 1890 <div class="card__badge card__badge-top-right card__badge-float-edge"> 1891 <span class="badge badge-circle badge--bottom-right addToClassList" data-variant-id="60589932" data-product-handle="御åå 禮åè¢" data-product-price="30" data-product-price-max="30.0" data-product-available="1" data-product-id="13075272" data-token="6cbTyCiCbcMqkUBsbG4d9fXH0IE7qT6ixs2TZMuy" data-quantity="1" data-url="/collections/feature-on-homepage/products/御åå 禮åè¢"> 1892 1893 1894 1895 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-plus " fill="none" viewBox="0 0 10 10"> 1896 <path fill-rule="evenodd" clip-rule="evenodd" d="M1 4.51a.5.5 0 000 1h3.5l.01 3.5a.5.5 0 001-.01V5.5l3.5-.01a.5.5 0 00-.01-1H5.5L5.49.99a.5.5 0 00-1 .01v3.5l-3.5.01H1z" fill="currentColor"></path> 1897 </svg> 1898 1899 1900 1901 </span> 1902 <div class="loading-overlay hidden"> 1903 <div class="loading-overlay__spinner"> 1904 <svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"> 1905 <circle class="path" fill="none" stroke-width="6" cx="33" cy="33" r="30"></circle> 1906 </svg> 1907 </div> 1908 </div> 1909 </div> 1910 </add-to-cart-button> 1911 1912 <div class="card card--product grid-link__image--product" tabindex="-1"> 1913 <div class="card__inner"> 1914 <div class="media media--transparent media--square media--hover-effect"> 1915 <img src="https://cdn.store-assets.com/s/1306561/i/81192509.jpeg?width=480&format=webp" alt="IMG_6634-1734076589852" loading="lazy"> 1916 1917 </div> 1918 1919 1920 </div> 1921 </div> 1922 1923 <div class="card-information"> 1924 <div class="card-information__wrapper"> 1925 1926 <span class="card-information__text"> 1927 御åå 禮åè¢ 1928 </span> 1929 1930 <span class="caption-large light"></span> 1931 1932 1933<div class="price 1934 1935 1936 " 1937 > 1938 1939 <dl> 1940 <div class="price__regular"> 1941 <dt> 1942 <span class="visually-hidden visually-hidden--inline">Regular price</span> 1943 </dt> 1944 <dd > 1945 <span class="price-item price-item--regular"> 1946 1947 1948 1949 <span class=money data-ori-price='30.00'>NT$ 30.00 </span> 1950 1951 1952 1953 </span> 1954 </dd> 1955 </div> 1956 <div class="price__sale"> 1957 <dt> 1958 <span class="visually-hidden visually-hidden--inline">Sale price</span> 1959 </dt> 1960 <dd > 1961 <span class="price-item price-item--sale"> 1962 1963 1964 1965 <span class=money data-ori-price='30.00'>NT$ 30.00 </span> 1966 1967 1968 1969 </span> 1970 </dd> 1971 1972 <dt class="price__compare"> 1973 <span class="visually-hidden visually-hidden--inline">Regular price</span> 1974 </dt> 1975 <dd class="price__compare"> 1976 <s class="price-item price-item--regular"> 1977 1978 <span class=money data-ori-price='0.00'>NT$ 0.00 </span> 1979 1980 1981 </s> 1982 </dd> 1983 1984 </div> 1985 </dl> 1986 1987</div> 1988 1989 </div> 1990 1991 </div> 1992 </a> 1993</div> 1994 1995 1996 </li> 1997 1998 <li class="grid__item slider__slide"> 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015<div class="product-card-wrapper card-wrapper"> 2016 <a href="/collections/feature-on-homepage/products/御åå å°ç«æ¹¯å" class="full-unstyled-link"> 2017 2018 <add-to-cart-button> 2019 <div class="card__badge card__badge-top-right card__badge-float-edge">
2020 <span class="badge badge-circle badge--bottom-right addToClassList" data-variant-id="46310588" data-product-handle="御åå å°ç«æ¹¯å" data-product-price="220" data-product-price-max="220.0" data-product-available="1" data-product-id="10080249" data-token="6cbTyCiCbcMqkUBsbG4d9fXH0IE7qT6ixs2TZMuy" data-quantity="1" data-url="/collections/feature-on-homepage/products/御åå å°ç«æ¹¯å"> 2021 2022 2023 2024 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-plus " fill="none" viewBox="0 0 10 10"> 2025 <path fill-rule="evenodd" clip-rule="evenodd" d="M1 4.51a.5.5 0 000 1h3.5l.01 3.5a.5.5 0 001-.01V5.5l3.5-.01a.5.5 0 00-.01-1H5.5L5.49.99a.5.5 0 00-1 .01v3.5l-3.5.01H1z" fill="currentColor"></path> 2026 </svg> 2027 2028 2029 2030 </span> 2031 <div class="loading-overlay hidden"> 2032 <div class="loading-overlay__spinner"> 2033 <svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"> 2034 <circle class="path" fill="none" stroke-width="6" cx="33" cy="33" r="30"></circle> 2035 </svg> 2036 </div> 2037 </div> 2038 </div> 2039 </add-to-cart-button> 2040 2041 <div class="card card--product grid-link__image--product" tabindex="-1"> 2042 <div class="card__inner"> 2043 <div class="media media--transparent media--square media--hover-effect"> 2044 <img src="https://cdn.store-assets.com/s/1306561/i/64343907.jpeg?width=480&format=webp" alt="S__3481663" loading="lazy"> 2045 2046 </div> 2047 2048 2049 </div> 2050 </div> 2051 2052 <div class="card-information"> 2053 <div class="card-information__wrapper"> 2054 2055 <span class="card-information__text"> 2056 å³çµ±æä½è麻å 宵(å·å) 2057 </span> 2058 2059 <span class="caption-large light"></span> 2060 2061 2062<div class="price 2063 2064 2065 " 2066 > 2067 2068 <dl> 2069 <div class="price__regular"> 2070 <dt> 2071 <span class="visually-hidden visually-hidden--inline">Regular price</span> 2072 </dt> 2073 <dd > 2074 <span class="price-item price-item--regular"> 2075 2076 2077 2078 <span class=money data-ori-price='220.00'>NT$ 220.00 </span> 2079 2080 2081 2082 </span> 2083 </dd> 2084 </div> 2085 <div class="price__sale"> 2086 <dt> 2087 <span class="visually-hidden visually-hidden--inline">Sale price</span> 2088 </dt> 2089 <dd > 2090 <span class="price-item price-item--sale"> 2091 2092 2093 2094 <span class=money data-ori-price='220.00'>NT$ 220.00 </span> 2095 2096 2097 2098 </span> 2099 </dd> 2100 2101 <dt class="price__compare"> 2102 <span class="visually-hidden visually-hidden--inline">Regular price</span> 2103 </dt> 2104 <dd class="price__compare"> 2105 <s class="price-item price-item--regular"> 2106 2107 <span class=money data-ori-price='220.00'>NT$ 220.00 </span> 2108 2109 2110 </s> 2111 </dd> 2112 2113 </div> 2114 </dl> 2115 2116</div> 2117 2118 </div> 2119 2120 </div> 2121 </a> 2122</div> 2123 2124 2125 </li> 2126 2127 <li class="grid__item slider__slide"> 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144<div class="product-card-wrapper card-wrapper"> 2145 <a href="/collections/feature-on-homepage/products/å³çµ±æä½è±çå 宵-å·å-" class="full-unstyled-link"> 2146 2147 <add-to-cart-button> 2148 <div class="card__badge card__badge-top-right card__badge-float-edge"> 2149 <span class="badge badge-circle badge--bottom-right addToClassList" data-variant-id="46310605" data-product-handle="å³çµ±æä½è±çå 宵-å·å-" data-product-price="220" data-product-price-max="220.0" data-product-available="1" data-product-id="10080255" data-token="6cbTyCiCbcMqkUBsbG4d9fXH0IE7qT6ixs2TZMuy" data-quantity="1" data-url="/collections/feature-on-homepage/products/å³çµ±æä½è±çå 宵-å·å-"> 2150 2151 2152 2153 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-plus " fill="none" viewBox="0 0 10 10"> 2154 <path fill-rule="evenodd" clip-rule="evenodd" d="M1 4.51a.5.5 0 000 1h3.5l.01 3.5a.5.5 0 001-.01V5.5l3.5-.01a.5.5 0 00-.01-1H5.5L5.49.99a.5.5 0 00-1 .01v3.5l-3.5.01H1z" fill="currentColor"></path> 2155 </svg> 2156 2157 2158 2159 </span> 2160 <div class="loading-overlay hidden"> 2161 <div class="loading-overlay__spinner"> 2162 <svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"> 2163 <circle class="path" fill="none" stroke-width="6" cx="33" cy="33" r="30"></circle> 2164 </svg> 2165 </div> 2166 </div> 2167 </div> 2168 </add-to-cart-button> 2169 2170 <div class="card card--product grid-link__image--product" tabindex="-1"> 2171 <div class="card__inner"> 2172 <div class="media media--transparent media--square media--hover-effect"> 2173 <img src="https://cdn.store-assets.com/s/1306561/i/64495022.jpeg?width=480&format=webp" alt="S__3498454" loading="lazy"> 2174 2175 </div> 2176 2177 2178 </div> 2179 </div> 2180 2181 <div class="card-information"> 2182 <div class="card-information__wrapper"> 2183
2184 <span class="card-information__text"> 2185 å³çµ±æä½è±çå 宵(å·å) 2186 </span> 2187 2188 <span class="caption-large light"></span> 2189 2190 2191<div class="price 2192 2193 2194 " 2195 > 2196 2197 <dl> 2198 <div class="price__regular"> 2199 <dt> 2200 <span class="visually-hidden visually-hidden--inline">Regular price</span> 2201 </dt> 2202 <dd > 2203 <span class="price-item price-item--regular"> 2204 2205 2206 2207 <span class=money data-ori-price='220.00'>NT$ 220.00 </span> 2208 2209 2210 2211 </span> 2212 </dd> 2213 </div> 2214 <div class="price__sale"> 2215 <dt> 2216 <span class="visually-hidden visually-hidden--inline">Sale price</span> 2217 </dt> 2218 <dd > 2219 <span class="price-item price-item--sale"> 2220 2221 2222 2223 <span class=money data-ori-price='220.00'>NT$ 220.00 </span> 2224 2225 2226 2227 </span> 2228 </dd> 2229 2230 <dt class="price__compare"> 2231 <span class="visually-hidden visually-hidden--inline">Regular price</span> 2232 </dt> 2233 <dd class="price__compare"> 2234 <s class="price-item price-item--regular"> 2235 2236 <span class=money data-ori-price='220.00'>NT$ 220.00 </span> 2237 2238 2239 </s> 2240 </dd> 2241 2242 </div> 2243 </dl> 2244 2245</div> 2246 2247 </div> 2248 2249 </div> 2250 </a> 2251</div> 2252 2253 2254 </li> 2255 2256 <li class="grid__item slider__slide"> 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273<div class="product-card-wrapper card-wrapper"> 2274 <a href="/collections/feature-on-homepage/products/æ¡è±è" class="full-unstyled-link"> 2275 2276 <add-to-cart-button> 2277 <div class="card__badge card__badge-top-right card__badge-float-edge"> 2278 <span class="badge badge-circle badge--bottom-right addToClassList" data-variant-id="48364148" data-product-handle="æ¡è±è" data-product-price="60" data-product-price-max="60.0" data-product-available="1" data-product-id="10525441" data-token="6cbTyCiCbcMqkUBsbG4d9fXH0IE7qT6ixs2TZMuy" data-quantity="1" data-url="/collections/feature-on-homepage/products/æ¡è±è"> 2279 2280 2281 2282 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-plus " fill="none" viewBox="0 0 10 10"> 2283 <path fill-rule="evenodd" clip-rule="evenodd" d="M1 4.51a.5.5 0 000 1h3.5l.01 3.5a.5.5 0 001-.01V5.5l3.5-.01a.5.5 0 00-.01-1H5.5L5.49.99a.5.5 0 00-1 .01v3.5l-3.5.01H1z" fill="currentColor"></path> 2284 </svg> 2285 2286 2287 2288 </span> 2289 <div class="loading-overlay hidden"> 2290 <div class="loading-overlay__spinner"> 2291 <svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"> 2292 <circle class="path" fill="none" stroke-width="6" cx="33" cy="33" r="30"></circle> 2293 </svg> 2294 </div> 2295 </div> 2296 </div> 2297 </add-to-cart-button> 2298 2299 <div class="card card--product grid-link__image--product" tabindex="-1"> 2300 <div class="card__inner"> 2301 <div class="media media--transparent media--square media--hover-effect"> 2302 <img src="https://cdn.store-assets.com/s/1306561/i/64343925.jpeg?width=480&format=webp" alt="æ¡è±è(èªå·±æ)" loading="lazy"> 2303 2304 </div> 2305 2306 2307 </div> 2308 </div> 2309 2310 <div class="card-information"> 2311 <div class="card-information__wrapper"> 2312 2313 <span class="card-information__text"> 2314 æ¡è±è 2315 </span> 2316 2317 <span class="caption-large light"></span> 2318 2319 2320<div class="price 2321 2322 2323 " 2324 > 2325 2326 <dl> 2327 <div class="price__regular"> 2328 <dt> 2329 <span class="visually-hidden visually-hidden--inline">Regular price</span> 2330 </dt> 2331 <dd > 2332 <span class="price-item price-item--regular"> 2333 2334 2335 2336 <span class=money data-ori-price='60.00'>NT$ 60.00 </span> 2337 2338 2339 2340 </span> 2341 </dd> 2342 </div> 2343 <div class="price__sale"> 2344 <dt> 2345 <span class="visually-hidden visually-hidden--inline">Sale price</span> 2346 </dt> 2347 <dd >
2348 <span class="price-item price-item--sale"> 2349 2350 2351 2352 <span class=money data-ori-price='60.00'>NT$ 60.00 </span> 2353 2354 2355 2356 </span> 2357 </dd> 2358 2359 <dt class="price__compare"> 2360 <span class="visually-hidden visually-hidden--inline">Regular price</span> 2361 </dt> 2362 <dd class="price__compare"> 2363 <s class="price-item price-item--regular"> 2364 2365 <span class=money data-ori-price='60.00'>NT$ 60.00 </span> 2366 2367 2368 </s> 2369 </dd> 2370 2371 </div> 2372 </dl> 2373 2374</div> 2375 2376 </div> 2377 2378 </div> 2379 </a> 2380</div> 2381 2382 2383 </li> 2384 2385 </ul> 2386 2387 <div class="slider-buttons no-js-hidden"> 2388 <button 2389 type="button" 2390 class="slider-button slider-button--prev" 2391 name="previous"> 2392 2393 2394 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 2395 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 2396 </svg> 2397 2398 2399</button> 2400 <div class="slider-counter caption"> 2401 <span class="slider-counter--current">1</span> 2402 <span aria-hidden="true"> 2403 / 2404 </span> 2405 <span class="slider-counter--total">4</span> 2406 </div> 2407 <button 2408 type="button" 2409 class="slider-button slider-button--next" 2410 name="next"> 2411 2412 2413 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 2414 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 2415 </svg> 2416 2417 2418</button> 2419 </div> 2420 2421 </slider-component> 2422 2423 2424 2425 2426 2427</div> 2428 2429 </div><div id='easystore-section-1649058117248'> <link rel="preload" href="https://store-themes.easystore.co/1306561/themes/63057/assets/section-multicolumn.css?t=1787083337" as="style" onload="this.onload=null;this.rel='stylesheet'"> 2430<link rel="preload" href="https://store-themes.easystore.co/1306561/themes/63057/assets/component-slider.css?t=1787083337" as="style" onload="this.onload=null;this.rel='stylesheet'"> 2431<div class="multicolumn background-primary"> 2432 <div class="page-width"> 2433 <div class="title-wrapper-with-link title-wrapper--self-padded-mobile"> 2434 <h2 class="title"> 2435 æ´å¤è³è¨ 2436 </h2> 2437 2438 </div> 2439 <slider-component class="slider-mobile-gutter"> 2440 <ul class="multicolumn-list grid grid--1-col grid--3-col-tablet slider slider--mobile grid--peek" 2441 id="Slider-" 2442 role="list" 2443 > 2444 2445 2446 2447 <li class="multicolumn-list__item grid__item slider__slide center"> 2448 <div class="multicolumn-card"> 2449 2450 2451 2452 <div class="multicolumn-card__image-wrapper multicolumn-card__image-wrapper--full-width"> 2453 <a href="/collections/all" class="media media--transparent media--portrait" 2454 > 2455 2456 <img 2457 srcset="https://cdn.store-assets.com/s/1306561/f/11615401.jpg?width=550&format=webp 550w, https://cdn.store-assets.com/s/1306561/f/11615401.jpg?width=710&format=webp 710w, https://cdn.store-assets.com/s/1306561/f/11615401.jpg?width=1420&format=webp 1420w" 2458 src="https://cdn.store-assets.com/s/1306561/f/11615401.jpg?width=550&format=webp" 2459 sizes="(min-width: 990px) 710px, 2460 (min-width: 750px) 550px, 2461 550px" 2462 alt="" 2463 loading="lazy" 2464 > 2465 2466 </a> 2467 </div> 2468 2469 <div class="multicolumn-card__info"> 2470 2471 <h3>夿³æå·¥è£½æ</h3> 2472 2473 2474 <div class="rte">å¾åç©æéå§è£½ä½ï¼æå·¥ã天ç¶</div> 2475 2476 2477 <a href="/collections/all" class="button button--secondary">ç«å³ä¸å®</a> 2478 2479 </div> 2480 </div> 2481 </li> 2482 2483 2484 2485 <li class="multicolumn-list__item grid__item slider__slide center"> 2486 <div class="multicolumn-card"> 2487 2488 2489 2490 <div class="multicolumn-card__image-wrapper multicolumn-card__image-wrapper--full-width"> 2491 <a href="/collections/all" class="media media--transparent media--portrait" 2492 > 2493 2494 <img 2495 srcset="https://cdn.store-assets.com/s/1306561/f/11929992.jpg?width=550&format=webp 550w, https://cdn.store-assets.com/s/1306561/f/11929992.jpg?width=710&format=webp 710w, https://cdn.store-assets.com/s/1306561/f/11929992.jpg?width=1420&format=webp 1420w" 2496 src="https://cdn.store-assets.com/s/1306561/f/11929992.jpg?width=550&format=webp" 2497 sizes="(min-width: 990px) 710px, 2498 (min-width: 750px) 550px, 2499 550px" 2500 alt="" 2501 loading="lazy" 2502 > 2503 2504 </a> 2505 </div> 2506 2507 <div class="multicolumn-card__info"> 2508 2509 <h3>èªå®¶ç¬ç ®æ¡è±è</h3> 2510 2511 2512 <div class="rte">以大ç«éåºæ¡è±é¦ï¼åæå¤©ç¶æ¨¸å¯¦ç¡å叿·»å </div> 2513 2514 2515 <a href="/collections/all" class="button button--secondary">ç«å³ä¸å®</a> 2516 2517 </div> 2518 </div> 2519 </li> 2520 2521 2522 2523 <li class="multicolumn-list__item grid__item slider__slide center"> 2524 <div class="multicolumn-card"> 2525 2526 2527 2528 <div class="multicolumn-card__image-wrapper multicolumn-card__image-wrapper--full-width"> 2529 <a href="https://lin.ee/p71oiiy" class="media media--transparent media--portrait" 2530 > 2531 2532 <img 2533 srcset="https://cdn.store-assets.com/s/1306561/f/11132651.jpg?width=550&format=webp 550w, https://cdn.store-assets.com/s/1306561/f/11132651.jpg?width=710&format=webp 710w, https://cdn.store-assets.com/s/1306561/f/11132651.jpg?width=1420&format=webp 1420w" 2534 src="https://cdn.store-assets.com/s/1306561/f/11132651.jpg?width=550&format=webp" 2535 sizes="(min-width: 990px) 710px, 2536 (min-width: 750px) 550px, 2537 550px" 2538 alt="" 2539 loading="lazy" 2540 > 2541 2542 </a> 2543 </div> 2544 2545 <div class="multicolumn-card__info"> 2546 2547 <h3>è¯çµ¡æå</h3> 2548 2549 2550 <div class="rte">任使鿬åºåé¡ï¼æ¡è¿èæåè¯çµ¡!</div> 2551 2552 2553 <a href="https://lin.ee/p71oiiy" class="button button--secondary">馬ä¸è¯çµ¡</a> 2554 2555 </div> 2556 </div> 2557 </li> 2558 2559 </ul> 2560 2561 2562 <div class="slider-buttons no-js-hidden medium-hide"> 2563 <button type="button" class="slider-button slider-button--prev" name="previous" aria-label="accessibility.previous_slide"> 2564 2565 2566 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 2567 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 2568 </svg> 2569 2570 2571</button> 2572 <div class="slider-counter caption">
2573 <span class="slider-counter--current">1</span> 2574 <span aria-hidden="true"> / </span> 2575 <span class="visually-hidden">accessibility.of</span> 2576 <span class="slider-counter--total">3</span> 2577 </div> 2578 <button type="button" class="slider-button slider-button--next" name="next" aria-label="accessibility.next_slide"> 2579 2580 2581 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 2582 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 2583 </svg> 2584 2585 2586</button> 2587 </div> 2588 2589 </slider-component> 2590 <div class="center small-hide medium-hide"> 2591 2592 </div> 2593 </div> 2594</div> 2595 2596 2597 </div></div> 2598 2599 2600 2601 2602 2603 2604 </main> 2605 <style> 2606 .footer{ 2607 background-color: #010517; 2608 color: #FEFEFE; 2609 --color-foreground: 254,254,254; 2610 } 2611 .footer .link--text, 2612 .footer .list-menu__item--link, 2613 .footer .footer-block__details-content .list-menu__item--link{ 2614 color: #FEFEFE; 2615 } 2616 .footer-block__heading{ 2617 color: #FFFFFF; 2618 } 2619</style> 2620 2621<link rel="preload" href="https://store-themes.easystore.co/1306561/themes/63057/assets/section-footer.css?t=1787083337" as="style" onload="this.onload=null;this.rel='stylesheet'"> 2622 2623<footer class="footer color-background-1"> 2624 <div class="footer__content-top page-width"> 2625 <div class="grid grid--1-col grid--4-col-tablet "> 2626 2627 2628 2629 <div class="grid__item"> 2630 2631 <h2 class="footer-block__heading">éæ³¨æå~</h2> 2632 <ul class="footer__list-social list-unstyled list-social footer-block__details-content" role="list"> 2633 2634 2635 <li class="list-social__item"> 2636 <a href="https://zh-tw.facebook.com/Ice.Fire.Dumpling/" class="link link--text list-social__link"> 2637 2638 2639 2640 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-facebook " 2641 viewBox="0 0 18 18"> 2642 <path fill="currentColor" 2643 d="M16.42.61c.27 0 .5.1.69.28.19.2.28.42.28.7v15.44c0 .27-.1.5-.28.69a.94.94 0 01-.7.28h-4.39v-6.7h2.25l.31-2.65h-2.56v-1.7c0-.4.1-.72.28-.93.18-.2.5-.32 1-.32h1.37V3.35c-.6-.06-1.27-.1-2.01-.1-1.01 0-1.83.3-2.45.9-.62.6-.93 1.44-.93 2.53v1.97H7.04v2.65h2.24V18H.98c-.28 0-.5-.1-.7-.28a.94.94 0 01-.28-.7V1.59c0-.27.1-.5.28-.69a.94.94 0 01.7-.28h15.44z"> 2644 </path> 2645 </svg> 2646 2647 2648 2649 </a> 2650 </li> 2651 2652 2653 <li class="list-social__item"> 2654 <a href="https://www.instagram.com/yupinyuan_tw?igsh=bGJ1emtycm9vZWhz&utm_source=qr" class="link link--text list-social__link"> 2655 2656 2657 2658 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-instagram " 2659 viewBox="0 0 18 18"> 2660 <path fill="currentColor" 2661 d="M8.77 1.58c2.34 0 2.62.01 3.54.05.86.04 1.32.18 1.63.3.41.17.7.35 1.01.66.3.3.5.6.65 1 .12.32.27.78.3 1.64.05.92.06 1.2.06 3.54s-.01 2.62-.05 3.54a4.79 4.79 0 01-.3 1.63c-.17.41-.35.7-.66 1.01-.3.3-.6.5-1.01.66-.31.12-.77.26-1.63.3-.92.04-1.2.05-3.54.05s-2.62 0-3.55-.05a4.79 4.79 0 01-1.62-.3c-.42-.16-.7-.35-1.01-.66-.31-.3-.5-.6-.66-1a4.87 4.87 0 01-.3-1.64c-.04-.92-.05-1.2-.05-3.54s0-2.62.05-3.54c.04-.86.18-1.32.3-1.63.16-.41.35-.7.66-1.01.3-.3.6-.5 1-.65.32-.12.78-.27 1.63-.3.93-.05 1.2-.06 3.55-.06zm0-1.58C6.39 0 6.09.01 5.15.05c-.93.04-1.57.2-2.13.4-.57.23-1.06.54-1.55 1.02C1 1.96.7 2.45.46 3.02c-.22.56-.37 1.2-.4 2.13C0 6.1 0 6.4 0 8.77s.01 2.68.05 3.61c.04.94.2 1.57.4 2.13.23.58.54 1.07 1.02 1.56.49.48.98.78 1.55 1.01.56.22 1.2.37 2.13.4.94.05 1.24.06 3.62.06 2.39 0 2.68-.01 3.62-.05.93-.04 1.57-.2 2.13-.41a4.27 4.27 0 001.55-1.01c.49-.49.79-.98 1.01-1.56.22-.55.37-1.19.41-2.13.04-.93.05-1.23.05-3.61 0-2.39 0-2.68-.05-3.62a6.47 6.47 0 00-.4-2.13 4.27 4.27 0 00-1.02-1.55A4.35 4.35 0 0014.52.46a6.43 6.43 0 00-2.13-.41A69 69 0 008.77 0z"> 2662 </path>
2663 <path fill="currentColor" 2664 d="M8.8 4a4.5 4.5 0 100 9 4.5 4.5 0 000-9zm0 7.43a2.92 2.92 0 110-5.85 2.92 2.92 0 010 5.85zM13.43 5a1.05 1.05 0 100-2.1 1.05 1.05 0 000 2.1z"> 2665 </path> 2666 </svg> 2667 2668 2669 2670 </a> 2671 </li> 2672 2673 2674 2675 2676 <li class="list-social__item"> 2677 <a href="https://lin.ee/Ha0R8Qz" class="link link--text list-social__link"> 2678 2679 2680 2681 <svg class="icon icon-line-footer " fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 750"><path d="M375,.5C168.17.5.5,168.17.5,375S168.17,749.5,375,749.5,749.5,581.83,749.5,375,581.83.5,375,.5ZM570.75,476.91C518.48,537.06,401.6,610.33,375,621.53s-22.66-7.13-21.57-13.42c.63-3.76,3.55-21.33,3.55-21.33.83-6.36,1.66-16.23-.83-22.52-2.81-7-13.83-10.54-21.95-12.29C214.51,536.14,125.9,452.45,125.9,352.53,125.9,241,237.64,150.38,375,150.38s249.1,90.68,249.1,202.15h0C624.14,397.14,606.85,437.32,570.75,476.91Z"/><polygon points="324.38 298.65 324.38 298.65 324.38 298.65 324.38 298.65"/><path d="M324.38,298.65H306.91a4.86,4.86,0,0,0-4.86,4.85V412a4.86,4.86,0,0,0,4.86,4.85h17.47a4.86,4.86,0,0,0,4.85-4.85V303.5A4.86,4.86,0,0,0,324.38,298.65Z"/><path d="M444.67,298.65h-17.5a4.85,4.85,0,0,0-4.85,4.85V368l-49.73-67.17a4.57,4.57,0,0,0-.38-.49,2.76,2.76,0,0,0-.29-.3l-.09-.09a2.65,2.65,0,0,0-.26-.21l-.12-.1-.25-.18-.15-.08-.26-.14-.15-.08-.28-.12-.16,0-.28-.1-.18,0-.27-.06H351.08a4.85,4.85,0,0,0-4.85,4.84V412a4.85,4.85,0,0,0,4.85,4.85h17.48a4.85,4.85,0,0,0,4.85-4.85V347.54l49.81,67.26a5.15,5.15,0,0,0,1.22,1.2h.06l.29.18.14.07.24.12.23.1.15,0,.32.11H426a4.69,4.69,0,0,0,1.24.16h17.48a4.85,4.85,0,0,0,4.86-4.84h0V303.5A4.87,4.87,0,0,0,444.67,298.65Z"/><path d="M282.26,389.67h0l0,0H234.79V303.5a4.85,4.85,0,0,0-4.83-4.85H212.47a4.84,4.84,0,0,0-4.85,4.84h0V412a4.74,4.74,0,0,0,1.35,3.32.27.27,0,0,0,.07.08l.07.07a4.81,4.81,0,0,0,3.33,1.35h69.81a4.84,4.84,0,0,0,4.84-4.84h0V394.52A4.84,4.84,0,0,0,282.26,389.67Z"/><path d="M541.16,371.34a4.85,4.85,0,0,0,4.85-4.85h0V349a4.85,4.85,0,0,0-4.84-4.85H493.72V325.84l47.42,0A4.83,4.83,0,0,0,546,321V303.5a4.85,4.85,0,0,0-4.84-4.86H471.34A4.81,4.81,0,0,0,468,300l-.05.05-.08.09a4.82,4.82,0,0,0-1.34,3.33V412a4.77,4.77,0,0,0,1.35,3.33l.07.07.07.07a4.8,4.8,0,0,0,3.32,1.36h69.81A4.85,4.85,0,0,0,546,412h0V394.5a4.85,4.85,0,0,0-4.84-4.85H493.72V371.34Z"/></svg> 2682 2683 2684 2685 </a> 2686 </li> 2687 2688 2689 2690 2691 </ul> 2692 2693 </div> 2694 2695 2696 2697 <div class="grid__item"> 2698 2699 <h2 class="footer-block__heading"> 2700 åªè£¡å¯ä»¥æ¾å°æå? 2701 </h2> 2702 <ul class="footer-block__details-content list-unstyled"> 2703 2704 <li> 2705 <a href="/store-locator" class="link link--text list-menu__item list-menu__item--link"> 2706 æ¬åºå°å 2707 </a> 2708 </li> 2709 2710 2711 </ul> 2712 2713 </div> 2714 2715 2716 2717 <div class="grid__item"> 2718 2719 <h2 class="footer-block__heading">æåçå æ!</h2> 2720 <div class="footer-block__details-content"> 2721 <p>夿³æå·¥è£½ä½ï¼å£å³ç´°å¿é½ç ï¼åè³ªå´æ ¼æéã</p> 2722 </div> 2723 2724 </div> 2725 2726 2727 2728 <div class="grid__item"> 2729 2730 <h2 class="footer-block__heading">é£çµ¡é»è©±ï¼</h2> 2731 <div class="footer-block__details-content"> 2732 <p>0955861816</p> 2733 </div> 2734 2735 </div> 2736 2737 </div> 2738 </div> 2739 <div class="footer__content-bottom"> 2740 <div class="footer__content-bottom-wrapper page-width"> 2741 <div class="footer__column footer__column--info"> 2742 2743 2744 2745 2746 2747 2748 <div class="footer__copyright caption"> 2749 <div class="copyright__content">© 2026 御åå å°ç«æ¹¯å. Powered by <a href="http://www.easystore.co/?utm_source=storefront&utm_medium=sf_ref_footer&utm_campaign=sf_ref">EasyStore</a></div> 2750 </div> 2751
2752 <div class="footer__copyright caption"> 2753 2754 <div> 2755 2756 2757 2758 <a href="/legal/terms-of-service">æåæ¢æ¬¾</a> 2759 2760 2761 2762 2763 | <a href="/legal/privacy-policy">é±ç§æ¿ç</a> 2764 2765 2766 2767 2768 | <a href="/legal/refund-policy">鿬¾æ¿ç</a> 2769 2770 2771 2772 </div> 2773 2774 </div> 2775 2776 </div> 2777 </div> 2778 </div> 2779</footer> 2780 2781 2782 2783 2784 2785
2785<script> 2786 EasyStore.Currencies.init([{"name":"New Taiwan Dollar","code":"TWD","rate":"1.0","format_prefix":"NT$","format_suffix":null,"format_decimals":0,"thousand_separator":",","is_primary":true}], 1) 2787</script>
2787 2788 2789 2790 2791
2791<script> 2792 let page_template = 'index'; 2793 2794 if(document.querySelector('.currency-picker')) { 2795 EasyStore.Currencies.change(document.querySelector('.currency-picker').value) 2796 EasyStore.Currencies.convertAll() 2797 } 2798 2799 document.querySelectorAll('.currency-picker').forEach((el)=>{ 2800 el.addEventListener('change',(event)=>{ 2801 EasyStore.Currencies.change(event.target.value) 2802 2803 2804 if (page_template == 'cart') { 2805 const params = new URLSearchParams(window.location.search); 2806 params.set('delete_cache', 1); 2807 window.location.search = params; 2808 } else { 2809 window.location.reload(); 2810 } 2811 2812 return 2813 2814 2815 document.querySelectorAll('[name=currencies],[name=current_currency]').forEach((el)=>{ 2816 el.value = event.target.value 2817 }) 2818 2819 if(page_template == 'cart') location.reload(); 2820 }) 2821 }) 2822 </script>
2822 2823 2824 2825 2826 2827
2827<script> 2828 2829 window.variantStrings = { 2830 addToCart: `å å ¥è³¼ç©è»`, 2831 soldOut: `<span style='font-size:14px;'>å®å®</span>`, 2832 unavailable: `æ«ç¡ä¾æ`, 2833 } 2834 2835 window.accessibilityStrings = { 2836 shareSuccess: `éæ¥å·²å¾©è£½å°åªè²¼æ¿`, 2837 } 2838 </script>
2838 2839
2839<script> 2840 2841 /* 2842 2843 ------ 2844 Events 2845 ------ 2846 2847 pages/viewed 2848 2849 customers/signup 2850 2851 customers/login 2852 2853 products/searched 2854 2855 collections/viewed 2856 2857 products/viewed 2858 2859 products/shared 2860 2861 wishlists/item_added 2862 2863 carts/items_added 2864 2865 carts/viewed 2866 2867 carts/item_removed 2868 2869 checkouts/initiated 2870 2871 checkouts/shipping_info_added 2872 2873 checkouts/payment_info_added 2874 2875 checkouts/completed 2876 2877 orders/placed 2878 2879 orders/purchased 2880 2881 payments/captured 2882 2883 payments/failed 2884 2885 */ 2886 2887 window.__latest_cart = window.__latest_cart || null; 2888 2889 const _selector = document.querySelector.bind(document), 2890 _selectorAll = document.querySelectorAll.bind(document) 2891 2892 document.addEventListener('DOMContentLoaded', (event) => { 2893 2894 const default_currency = getCookie("currency") 2895 const customer_id = window.__st.cid 2896 const template = window.__st.p 2897 2898 onPageView() 2899 2900 //-----------------------// 2901 // Configs // 2902 //-----------------------// 2903 2904 window.dataLayer = window.dataLayer || [] 2905 2906 Array.prototype.last = Array.prototype.last || function() { 2907 return this[this.length - 1] || null 2908 } 2909 2910 Array.prototype.first = Array.prototype.first || function() { 2911 return this[0] || null 2912 } 2913 2914 //----------------------// 2915 // Triggers // 2916 //----------------------// 2917 2918 const XHR = window.XMLHttpRequest 2919 2920 function xhr() { 2921 2922 const xhr = new XHR() 2923 2924 xhr.addEventListener("readystatechange", function() { 2925 2926 if(xhr.readyState != 4) return 2927 2928 try { 2929 2930 const response_url = xhr.responseURL 2931 2932 if (response_url.includes("cart/add")) { 2933 2934 window.__latest_cart = JSON.parse(xhr.response) 2935 2936 onCartItemsAdded() // ok 2937 2938 } 2939 2940 if (response_url.includes("cart/remove_item_quantity")) { 2941 2942 window.__latest_cart = JSON.parse(xhr.response) 2943 2944 onCartItemRemoved() // ok 2945 2946 } 2947 2948 if (response_url.includes("new_cart?retrieve=true")) { 2949 2950 result = JSON.parse(xhr.response) 2951 2952 if (result.cart) { 2953 window.__latest_cart = result.cart 2954 } 2955 2956 } 2957 2958 } catch(e) { 2959 2960 console.error(e) 2961 2962 } 2963 2964 }, false); 2965 2966 return xhr 2967 2968 } 2969 2970 window.XMLHttpRequest = xhr 2971 2972 switch(template) { 2973 2974 case 'cart': onCartView() // ok 2975 break 2976 case 'product': onProductView() // ok 2977 break 2978 case 'collection': onCollectionView() // ok 2979 break 2980 case 'blog': onBlogView() 2981 break 2982 case 'article': onArticleView() 2983 break 2984 case 'payment_completed': onOrderPlace() 2985 break 2986 case 'payment_fail': onPaymentFail() 2987 break 2988 2989 } 2990 2991 // _selector('form[action="/checkout/payments"]').addEventListener("submit", onPaymentInfoAdded(_selector('form[action="/checkout/payments"]'))) 2992 if (_selector('form[action="/checkout/detail"]')) _selector('form[action="/checkout/detail"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/detail"]'))}) // ok 2993 if (_selector('form[action="/checkout/shipping"]')) _selector('form[action="/checkout/shipping"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/shipping"]'))}) // ok 2994 if (_selector('form[action="/account/register"]')) _selector('form[action="/account/register"]').addEventListener("submit", onSignUp) // ok 2995 if (_selector('form[action="/account/login"]')) _selector('form[action="/account/login"]').addEventListener("submit", onLogin) // ok 2996 if (_selector('form[action="/search"]')) _selector('form[action="/search"]').addEventListener("submit", onProductSearch()) // ok 2997 if (_selector('#line-login-btn')) _selector('#line-login-btn').addEventListener('click', onLineLogin) // ok 2998 if (_selector('#PlaceOrder')) _selector('#PlaceOrder').addEventListener("click", ()=>{onCheckoutComplete(_selector('form[action="/checkout/payments"]'))}); // ok 2999 if (_selector('#add_wishlist')) _selector('#add_wishlist').addEventListener("click", onWishlistItemAdded) // ok 3000 if (_selectorAll('a[href="/account/logout"]')) _selectorAll('a[href="/account/logout"]').forEach(logoutButton => logoutButton.addEventListener("click", onLogout)) // ok 3001 if (_selector('.CartDrawerTrigger.cart-page-link')) _selector('.CartDrawerTrigger.cart-page-link').addEventListener("click", onCartView) // ok 3002 if (_selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link')) _selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link').addEventListener("click", onCartView) // ok 3003 if (_selectorAll('a[class^="share-"]')) _selectorAll('a[class^="share-"]').forEach(shareButton => shareButton.addEventListener("click", ()=>{onProductShare(shareButton)}) ) // ok 3004 if (_selectorAll('[name$="checkout"]')) _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate)) 3005 3006 // For append elements 3007 const bodyMutationObserver = new MutationObserver(() => { 3008 if (_selector('#form__spc #PlaceOrder')) _selector('#form__spc #PlaceOrder').addEventListener("click", onSinglePageCheckout) // ok 3009 if (_selectorAll('[name$="checkout"]')) _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate)) 3010 }); 3011 bodyMutationObserver.observe(_selector("body"), {subtree: true, childList: true}); 3012 3013 //------------------------------// 3014 // Event handlers // 3015 //------------------------------// 3016 3017 function onPageView() { 3018 3019 EasyStore.Event.dispatch('pages/viewed', { 3020 page: { 3021 type: template, 3022 title: document.title, 3023 description: _selector('meta[name=description]') ? _selector('meta[name=description]').getAttribute('content') : null, 3024 url: location.href, 3025 } 3026 }) 3027 3028 } 3029 3030 function onSignUp() { 3031 3032 const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/) 3033 const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/) 3034 3035 const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "") 3036 3037 let data = {} 3038 3039 if (email_regex.test(email_or_phone)) { 3040 data.method = 'email' 3041 data.email = email_or_phone 3042 } 3043 3044 if (phone_regex.test(email_or_phone)) { 3045 data.method = "phone" 3046 data.phone = email_or_phone 3047 } 3048 3049 if (!data.method) return 3050 3051 EasyStore.Event.dispatch('customers/signup', data) 3052 3053 } 3054 3055 function onLogin() { 3056 3057 const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/) 3058 const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/) 3059 3060 const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "") 3061 3062 let data = {} 3063 3064 if (email_regex.test(email_or_phone)) { 3065 data.method = 'email' 3066 data.email = email_or_phone 3067 } 3068 3069 if (phone_regex.test(email_or_phone)) { 3070 data.method = "phone" 3071 data.phone = email_or_phone 3072 } 3073 3074 if (!data.method) return 3075 3076 EasyStore.Event.dispatch('customers/login', data) 3077 3078 } 3079 3080 function onLineLogin() { 3081 3082 EasyStore.Event.dispatch('customers/login', { method: 'line' }) 3083 3084 } 3085 3086 function onLogout() { 3087 3088 EasyStore.Event.dispatch('customers/logout', { customer_id }) 3089 3090 } 3091 3092 function onBlogView() { 3093 3094 const blog = "" 3095 3096 EasyStore.Event.dispatch('blogs/viewed', { blog }) 3097 3098 } 3099 3100 function onArticleView() { 3101 3102 const article = "" 3103 3104 EasyStore.Event.dispatch('articles/viewed', { article }) 3105 3106 } 3107 3108 function onProductSearch() { 3109 3110 const query = _selector('input[name=q]').value 3111 3112 if (!query) return 3113 3114 EasyStore.Event.dispatch('products/searched', { query }) 3115 3116 } 3117 3118 function onCollectionView() { 3119 3120 const collection = {"id":3996139,"handle":"feature-on-homepage","name":"\u9996\u9801\u63a8\u85a6","title":"\u9996\u9801\u63a8\u85a6","url":"\/collections\/feature-on-homepage","description":"","content":"","featured_image":{"src":null},"products":[{"id":13075272,"handle":"\u5fa1\u54c1\u5143\u79ae\u54c1\u888b","name":"\u5fa1\u54c1\u5143\u79ae\u54c1\u888b","title":"\u5fa1\u54c1\u5143\u79ae\u54c1\u888b","url":"\/products\/\u5fa1\u54c1\u5143\u79ae\u54c1\u888b","share_url":"https:\/\/www.tpypy.com\/products\/\u5fa1\u54c1\u5143\u79ae\u54c1\u888b","price":30,"price_min":"30.0","price_max":"30.0","price_varies":false,"compare_at_price":0,"compare_at_price_min":"0.0","compare_at_price_max":"0.0","compare_at_price_varies":false,"available":true,"options_with_values":[],"options_by_name":[],"options":["Title"],"has_only_default_variant":true,"sole_variant_id":60589932,"variants":[{"id":60589932,"title":"Default Title","sku":"","taxable":false,"barcode":"","available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":81192509,"alt":"IMG_6634-1734076589852","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/81192509.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/81192509.jpeg","height":2400,"width":1800,"position":1,"type":"Images"},"price":3000,"compare_at_price":0,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null}],"selected_variant":{"id":60589932,"title":"Default Title","sku":"","taxable":false,"barcode":"","available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":81192509,"alt":"IMG_6634-1734076589852","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/81192509.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/81192509.jpeg","height":2400,"width":1800,"position":1,"type":"Images"},"price":3000,"compare_at_price":0,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"first_available_variant":{"id":60589932,"title":"Default Title","sku":"","taxable":false,"barcode":"","available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":81192509,"alt":"IMG_6634-1734076589852","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/81192509.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/81192509.jpeg","height":2400,"width":1800,"position":1,"type":"Images"},"price":3000,"compare_at_price":0,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"selected_or_first_available_variant":{"id":60589932,"title":"Default Title","sku":"","taxable":false,"barcode":"","available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":81192509,"alt":"IMG_6634-1734076589852","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/81192509.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/81192509.jpeg","height":2400,"width":1800,"position":1,"type":"Images"},"price":3000,"compare_at_price":0,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/81192509.jpeg","featured_image":{"id":81192509,"alt":"IMG_6634-1734076589852","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/81192509.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/81192509.jpeg","height":2400,"width":1800,"position":1,"type":"Images"},"secondary_image":{"alt":"","img_url":"","src":"","type":""},"images":[{"id":81192509,"alt":"IMG_6634-1734076589852","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/81192509.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/81192509.jpeg","height":2400,"width":1800,"position":1,"type":"Images"}],"media":[{"id":81192509,"alt":"IMG_6634-1734076589852","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/81192509.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/81192509.jpeg","height":2400,"width":1800,"position":1,"type":"Images"}],"featured_media":{"id":81192509,"alt":"IMG_6634-1734076589852","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/81192509.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/81192509.jpeg","height":2400,"width":1800,"position":1,"type":"Images"},"metafields":[],"expires":null,"published_at":"2024-12-13T15:57:02.000+08:00","created_at":"2024-12-13T15:56:04.000+08:00","is_wishlisted":null,"highlight":{"data":null,"state":null,"is_auto_generation_required":false},"common_questions":{"data":null,"state":null,"is_auto_generation_required":false}},{"id":10080249,"handle":"\u5fa1\u54c1\u5143\u51b0\u706b\u6e6f\u5713","name":"\u50b3\u7d71\u624b\u4f5c\u829d\u9ebb\u5143\u5bb5(\u51b7\u51cd)","title":"\u50b3\u7d71\u624b\u4f5c\u829d\u9ebb\u5143\u5bb5(\u51b7\u51cd)","url":"\/products\/\u5fa1\u54c1\u5143\u51b0\u706b\u6e6f\u5713","share_url":"https:\/\/www.tpypy.com\/products\/\u5fa1\u54c1\u5143\u51b0\u706b\u6e6f\u5713","price":220,"price_min":"220.0","price_max":"220.0","price_varies":false,"compare_at_price":220,"compare_at_price_min":"220.0","compare_at_price_max":"220.0","compare_at_price_varies":false,"available":true,"options_with_values":[],"options_by_name":[],"options":["Title"],"has_only_default_variant":true,"sole_variant_id":46310588,"variants":[{"id":46310588,"title":"Default Title","sku":"001","taxable":false,"barcode":"Sesame","available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":64343907,"alt":"S__3481663","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343907.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343907.jpeg","height":1479,"width":1109,"position":1,"type":"Images"},"price":22000,"compare_at_price":22000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null}],"selected_variant":{"id":46310588,"title":"Default Title","sku":"001","taxable":false,"barcode":"Sesame","available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":64343907,"alt":"S__3481663","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343907.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343907.jpeg","height":1479,"width":1109,"position":1,"type":"Images"},"price":22000,"compare_at_price":22000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"first_available_variant":{"id":46310588,"title":"Default Title","sku":"001","taxable":false,"barcode":"Sesame","available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":64343907,"alt":"S__3481663","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343907.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343907.jpeg","height":1479,"width":1109,"position":1,"type":"Images"},"price":22000,"compare_at_price":22000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"selected_or_first_available_variant":{"id":46310588,"title":"Default Title","sku":"001","taxable":false,"barcode":"Sesame","available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":64343907,"alt":"S__3481663","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343907.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343907.jpeg","height":1479,"width":1109,"position":1,"type":"Images"},"price":22000,"compare_at_price":22000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343907.jpeg","featured_image":{"id":64343907,"alt":"S__3481663","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343907.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343907.jpeg","height":1479,"width":1109,"position":1,"type":"Images"},"secondary_image":{"id":65227267,"alt":"IMG_6631","img_url":"https:\/\/cdn.store-assets.co
3120m\/s\/1306561\/i\/65227267.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/65227267.jpeg","height":1699,"width":1284,"position":2,"type":"Images"},"images":[{"id":64343907,"alt":"S__3481663","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343907.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343907.jpeg","height":1479,"width":1109,"position":1,"type":"Images"},{"id":65227267,"alt":"IMG_6631","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/65227267.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/65227267.jpeg","height":1699,"width":1284,"position":2,"type":"Images"},{"id":80111824,"alt":"S__7168155_0","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111824.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111824.jpeg","height":1567,"width":1045,"position":3,"type":"Images"},{"id":80111828,"alt":"S__7168150_0","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111828.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111828.jpeg","height":1567,"width":1045,"position":4,"type":"Images"}],"media":[{"id":64343907,"alt":"S__3481663","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343907.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343907.jpeg","height":1479,"width":1109,"position":1,"type":"Images"},{"id":65227267,"alt":"IMG_6631","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/65227267.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/65227267.jpeg","height":1699,"width":1284,"position":2,"type":"Images"},{"id":80111824,"alt":"S__7168155_0","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111824.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111824.jpeg","height":1567,"width":1045,"position":3,"type":"Images"},{"id":80111828,"alt":"S__7168150_0","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111828.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111828.jpeg","height":1567,"width":1045,"position":4,"type":"Images"}],"featured_media":{"id":64343907,"alt":"S__3481663","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343907.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343907.jpeg","height":1479,"width":1109,"position":1,"type":"Images"},"metafields":[],"expires":null,"published_at":"2025-02-10T03:56:00.000+08:00","created_at":"2023-07-04T20:11:17.000+08:00","is_wishlisted":null,"highlight":{"data":null,"state":null,"is_auto_generation_required":false},"common_questions":{"data":null,"state":null,"is_auto_generation_required":false}},{"id":10080255,"handle":"\u50b3\u7d71\u624b\u4f5c\u82b1\u751f\u5143\u5bb5-\u51b7\u51cd-","name":"\u50b3\u7d71\u624b\u4f5c\u82b1\u751f\u5143\u5bb5(\u51b7\u51cd)","title":"\u50b3\u7d71\u624b\u4f5c\u82b1\u751f\u5143\u5bb5(\u51b7\u51cd)","url":"\/products\/\u50b3\u7d71\u624b\u4f5c\u82b1\u751f\u5143\u5bb5-\u51b7\u51cd-","share_url":"https:\/\/www.tpypy.com\/products\/\u50b3\u7d71\u624b\u4f5c\u82b1\u751f\u5143\u5bb5-\u51b7\u51cd-","price":220,"price_min":"220.0","price_max":"220.0","price_varies":false,"compare_at_price":220,"compare_at_price_min":"220.0","compare_at_price_max":"220.0","compare_at_price_varies":false,"available":true,"options_with_values":[],"options_by_name":[],"options":["Title"],"has_only_default_variant":true,"sole_variant_id":46310605,"variants":[{"id":46310605,"title":"Default Title","sku":"002","taxable":false,"barcode":"peanut","available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":64495022,"alt":"S__3498454","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64495022.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64495022.jpeg","height":1471,"width":1114,"position":1,"type":"Images"},"price":22000,"compare_at_price":22000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null}],"selected_variant":{"id":46310605,"title":"Default Title","sku":"002","taxable":false,"barcode":"peanut","available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":64495022,"alt":"S__3498454","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64495022.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64495022.jpeg","height":1471,"width":1114,"position":1,"type":"Images"},"price":22000,"compare_at_price":22000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"first_available_variant":{"id":46310605,"title":"Default Title","sku":"002","taxable":false,"barcode":"peanut","available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":64495022,"alt":"S__3498454","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64495022.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64495022.jpeg","height":1471,"width":1114,"position":1,"type":"Images"},"price":22000,"compare_at_price":22000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"selected_or_first_available_variant":{"id":46310605,"title":"Default Title","sku":"002","taxable":false,"barcode":"peanut","available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":64495022,"alt":"S__3498454","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64495022.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64495022.jpeg","height":1471,"width":1114,"position":1,"type":"Images"},"price":22000,"compare_at_price":22000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64495022.jpeg","featured_image":{"id":64495022,"alt":"S__3498454","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64495022.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64495022.jpeg","height":1471,"width":1114,"position":1,"type":"Images"},"secondary_image":{"id":65227320,"alt":"IMG_6631","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/65227320.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/65227320.jpeg","height":1699,"width":1284,"position":2,"type":"Images"},"images":[{"id":64495022,"alt":"S__3498454","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64495022.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64495022.jpeg","height":1471,"width":1114,"position":1,"type":"Images"},{"id":65227320,"alt":"IMG_6631","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/65227320.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/65227320.jpeg","height":1699,"width":1284,"position":2,"type":"Images"},{"id":80111874,"alt":"S__7168155_0","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111874.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111874.jpeg","height":1567,"width":1045,"position":3,"type":"Images"},{"id":80111875,"alt":"S__7168150_0","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111875.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111875.jpeg","height":1567,"width":1045,"position":4,"type":"Images"}],"media":[{"id":64495022,"alt":"S__3498454","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64495022.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64495022.jpeg","height":1471,"width":1114,"position":1,"type":"Images"},{"id":65227320,"alt":"IMG_6631","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/65227320.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/65227320.jpeg","height":1699,"width":1284,"position":2,"type":"Images"},{"id":80111874,"alt":"S__7168155_0","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111874.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111874.jpeg","height":1567,"width":1045,"position":3,"type":"Images"},{"id":80111875,"alt":"S__7168150_0","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111875.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111875.jpeg","height":1567,"width":1045,"position":4,"type":"Images"}],"featured_media":{"id":64495022,"alt":"S__3498454","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64495022.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64495022.jpeg","height":1471,"width":1114,"position":1,"type":"Images"},"metafields":[],"expires":null,"published_at":"2025-02-10T03:56:00.000+08:00","created_at":"2023-07-04T20:13:06.000+08:00","is_wishlisted":null,"highlight":{"data":null,"state":null,"is_auto_generation_required":false},"common_questions":{"data":null,"state":null,"is_auto_generation_required":false}},{"id":10525441,"handle":"\u6842\u82b1\u871c","name":"\u6842\u82b1\u871c","title":"\u6842\u82b1\u871c","url":"\/products\/\u6842\u82b1\u871c","share_url":"https:\/\/www.tpypy.com\/products\/\u6842\u82b1\u871c","price":60,"price_min":"60.0","price_max":"60.0","price_varies":false,"compare_at_price":60,"compare_at_price_min":"60.0","compare_at_price_max":"60.0","compare_at_price_varies":false,"available":true,"options_with_values":[],"options_by_name":[],"options":["Title"],"has_only_default_variant":true,"sole_variant_id":48364148,"variants":[{"id":48364148,"title":"Default Title","sku":"","taxable":false,"barcode":"","available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":64343925,"alt":"\u6842\u82b1\u871c(\u81ea\u5df1\u62cd)","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343925.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343925.jpeg","height":1446,"width":1095,"position":1,"type":"Images"},"price":6000,"compare_at_price":6000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null}],"selected_variant":{"id":48364148,"title":"Default Title","sku":"","taxable":false,"barcode":"","available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":64343925,"alt":"\u6842\u82b1\u871c(\u81ea\u5df1\u62cd)","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343925.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343925.jpeg","height":1446,"width":1095,"position":1,"type":"Images"},"price":6000,"compare_at_price":6000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"first_available_variant":{"id":48364148,"title":"Default Title","sku":"","taxable":false,"barcode":"","available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":64343925,"alt":"\u6842\u82b1\u871c(\u81ea\u5df1\u62cd)","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343925.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343925.jpeg","height":1446,"width":1095,"position":1,"type":"Images"},"price":6000,"compare_at_price":6000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"selected_or_first_available_variant":{"id":48364148,"title":"Default Title","sku":"","taxable":false,"barcode":"","available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":64343925,"alt":"\u6842\u82b1\u871c(\u81ea\u5df1\u62cd)","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343925.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343925.jpeg","height":1446,"width":1095,"position":1,"type":"Images"},"price":6000,"compare_at_price":6000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343925.jpeg","featured_image":{"id":64343925,"alt":"\u6842\u82b1\u871c(\u81ea\u5df1\u62cd)","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343925.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343925.jpeg","height":1446,"width":1095,"position":1,"type":"Images"},"secondary_image":{"id":80111879,"alt":"S__7168152_0","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111879.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111879.jpeg","height":1567,"width":1045,"position":2,"type":"Images"},"images":[{"id":64343925,"alt":"\u6842\u82b1\u871c(\u81ea\u5df1\u62cd)","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343925.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343925.jpeg","height":1446,"width":1095,"position":1,"type":"Images"},{"id":80111879,"alt":"S__7168152_0","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111879.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111879.jpeg","height":1567,"width":1045,"position":2,"type":"Images"},{"id":80111884,"alt":"S__7168150_0","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111884.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111884.jpeg","height":1567,"width":1045,"position":3,"type":"Images"}],"media":[{"id":64343925,"alt":"\u6842\u82b1\u871c(\u81ea\u5df1\u62cd)","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343925.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343925.jpeg","height":1446,"width":1095,"position":1,"type":"Images"},{"id":80111879,"alt":"S__7168152_0","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111879.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111879.jpeg","height":1567,"width":1045,"position":2,"type":"Images"},{"id":80111884,"alt":"S__7168150_0","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111884.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/80111884.jpeg","height":1567,"width":1045,"position":3,"type":"Images"}],"featured_media":{"id":64343925,"alt":"\u6842\u82b1\u871c(\u81ea\u5df1\u62cd)","img_url":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343925.jpeg","src":"https:\/\/cdn.store-assets.com\/s\/1306561\/i\/64343925.jpeg","height":1446,"width":1095,"position":1,"type":"Images"},"metafields":[],"expires":null,"published_at":"2025-02-10T03:57:00.000+08:00","created_at":"2023-09-09T05:10:30.000+08:00","is_wishlisted":null,"highlight":{"data":null,"state":null,"is_auto_generation_required":false},"common_questions":{"data":null,"state":null,"is_auto_generation_required":false}}],"sort_by":"featured","product_count":4,"cache_source":"live_api"} 3121 3122 EasyStore.Event.dispatch('collections/viewed', { collection }) 3123 3124 } 3125 3126 function onProductView() { 3127 3128 const product = "" 3129 3130 EasyStore.Event.dispatch("products/viewed", { product }) 3131 3132 } 3133 3134 function onProductShare(el) { 3135 3136 const product = "" 3137 3138 const channel = el.getAttribute("class").split("-").last() 3139 3140 EasyStore.Event.dispatch('products/shared', { product, channel }) 3141 3142 } 3143 3144 function onWishlistItemAdded() { 3145 3146 let product = "" 3147 const quantity = _selector("#Quantity").value 3148 3149 EasyStore.Event.dispatch('wishlists/item_added', { product }) 3150 3151 } 3152 3153 async function onCartItemsAdded() { 3154 3155 const cart = await getCart() 3156 3157 if(cart && cart.items != undefined && cart.items.length > 0) { 3158 3159 EasyStore.Event.dispatch('carts/item_added', { cart }) 3160 3161 } 3162 3163 } 3164 3165 async function onCartView() { 3166 3167 const cart = await getCart() 3168 3169 EasyStore.Event.dispatch('carts/viewed', { cart }) 3170 3171 } 3172 3173 async function onCartItemRemoved() { 3174 3175 const cart = await getCart() 3176 3177 cart.items = [] 3178 3179 if(cart) { 3180 3181 EasyStore.Event.dispatch('carts/item_removed', { cart }) 3182 3183 } 3184 3185 } 3186 3187 async function onCheckoutInitiate() { 3188 3189 const cart = await getCart() 3190 3191 EasyStore.Event.dispatch('checkouts/initiated', { cart }) 3192 3193 } 3194 3195 async function onShippingInfoAdded(form) { 3196 let checkout = getCheckout() 3197 3198 let form_data = {} 3199 new FormData(form).forEach((value, key) => form_data[key] = value) 3200 3201 let shipping_tier = null 3202 3203 if (form_data.type && form_data.type.startsWith("r_pickup")) { 3204 shipping_tier = `Pickup - ${form_data.pick_location}` 3205 } 3206 3207 if (form_data.s_id) {
3208 shipping_tier = _selector(`input[id='`+form_data.s_id+`']`).getAttribute("data-shipping-name") 3209 } 3210 3211 if (!shipping_tier) return 3212 3213 EasyStore.Event.dispatch('checkouts/shipping_info_added', { checkout, shipping_tier }) 3214 3215 } 3216 3217 async function onPaymentInfoAdded(form) { 3218 3219 let checkout = getCheckout() 3220 3221 let payment_type = new FormData(form).get('payment_method') 3222 3223 EasyStore.Event.dispatch("checkouts/payment_info_added", { checkout, payment_type }) 3224 3225 } 3226 3227 async function onOrderPlace() { 3228 3229 let cart_token = getCookie("cart_js") 3230 let previous_cart_token = getCookie("previous_cart_ga4_js") 3231 3232 if (previous_cart_token && previous_cart_token == cart_token) { 3233 // Prevent duplicate purchase tracking 3234 return 3235 } 3236 3237 let order = getOrder() 3238 3239 EasyStore.Event.dispatch('orders/placed', { order }) 3240 3241 if(order.is_manual_payment) { 3242 3243 EasyStore.Event.dispatch('orders/purchased', { order }) 3244 3245 } 3246 3247 const last_transaction = order.transactions.last() 3248 3249 if (last_transaction.status) { 3250 3251 EasyStore.Event.dispatch('orders/purchased', { order }) 3252 EasyStore.Event.dispatch('payments/captured', { order }) 3253 3254 } 3255 3256 } 3257 3258 async function onPaymentFail() { 3259 3260 const order = getOrder() 3261 3262 EasyStore.Event.dispatch('payments/failed', { order }) 3263 3264 } 3265 3266 async function onCheckoutComplete(form) { 3267 3268 onPaymentInfoAdded(form) 3269 3270 const checkout = getCheckout() 3271 3272 EasyStore.Event.dispatch('checkouts/completed', { checkout }) 3273 3274 } 3275 3276 async function onSinglePageCheckout() { 3277 3278 // let checkout = $("[data-app-checkout]").data("app-checkout") 3279 3280 let checkout = getCheckout() 3281 3282 // const payment_type = _selector("#app_spc_payment_method").find(`[class*="label-content"]`).first().find("b").first().text() 3283 const payment_type = _selector("#app_spc_payment_method").getElementsByClassName('label-content')[0].getElementsByTagName('b')[0].innerHTML 3284 3285 const shipping_method = _selector("#delivery_method").value 3286 3287 let shipping_tier = null 3288 let app_spc_customer_info_label = _selector("#app_spc_customer_info").getElementsByClassName('label-content') 3289 if (shipping_method == "shipping") { 3290 shipping_tier = app_spc_customer_info_label[app_spc_customer_info_label.length - 1].getElementsByTagName('b')[0].innerHTML 3291 } 3292 3293 if (shipping_method == "pickup") { 3294 shipping_tier = app_spc_customer_info_label[0].innerHTML 3295 } 3296 3297 if (shipping_tier) { 3298 3299 EasyStore.Event.dispatch('checkouts/shipping_info_added', { 3300 checkout, 3301 shipping_tier, 3302 }) 3303 3304 } 3305 3306 if (payment_type) { 3307 3308 EasyStore.Event.dispatch('checkouts/payment_info_added', { 3309 checkout, 3310 payment_type, 3311 }) 3312 3313 } 3314 3315 EasyStore.Event.dispatch('checkouts/completed', { checkout }) 3316 3317 } 3318 3319 }) 3320 3321 3322 //-----------------------// 3323 // Functions // 3324 //-----------------------// 3325 3326 function getCookie(name) { 3327 3328 name += "=" 3329 3330 decodedCookie = decodeURIComponent(document.cookie) 3331 3332 ca = decodedCookie.split(";") 3333 3334 for(i = 0; i < ca.length; i++) { 3335 c = ca[i] 3336 while (c.charAt(0) == " ") { 3337 c = c.substring(1) 3338 } 3339 if (c.indexOf(name) == 0) { 3340 return c.substring(name.length, c.length) 3341 } 3342 } 3343 3344 return "" 3345 3346 } 3347 3348 const parsePrice = price => { 3349 if(typeof price === 'string') { 3350 return parseFloat(price.split(',').join('')) 3351 } 3352 3353 return price 3354 } 3355 3356 const requestCart = async (method, data) => { 3357 3358 let response = await fetch('/cart.json', {method: 'GET',headers: {'Content-Type': 'application/json'}}) 3359 result = await response.json() 3360 3361 return result.cart 3362 3363 } 3364 const getCart = async (latest = false) => { 3365 3366 let cart = window.__latest_cart 3367 3368 const cart_invalid = !cart || !cart.items || (cart.total_price > 0 && !cart.items.length) 3369 3370 if(latest || cart_invalid) { 3371 cart = await requestCart() 3372 } 3373 3374 cart.items = cart.items || [] 3375 3376 return mapCart(cart) 3377 3378 } 3379 3380 const getCheckout = async () => { 3381 mapCheckout(window.__latest_cart || await requestCart()) 3382 } 3383 3384 const getOrder = async () => { 3385 mapOrder(window.__latest_cart || await requestCart()) 3386 } 3387 3388 //-----------------------// 3389 // Mappers // 3390 //-----------------------// 3391 3392 const fallbackAttribute = (object, attribute) => { 3393 3394 if(!Array.isArray(attribute)) { 3395 attribute = [attribute] 3396 } 3397 3398 let final_value = null 3399 3400 do { 3401 3402 final_value = object[attribute.shift()] 3403 3404 } while(!final_value && attribute.length) 3405 3406 return final_value 3407 3408 } 3409 3410 const map = (object, mapper) => { 3411 3412 const newObject = {} 3413 3414 for(const key in mapper) { 3415 3416 // Handle different keys between new and old format
3417 newObject[key] = fallbackAttribute(object, mapper[key]) 3418 3419 // Cast price to float 3420 if(newObject[key] && ['price', 'amount', 'discount', 'discounts'].some(x => key.endsWith(x))) { 3421 newObject[key] = parsePrice(newObject[key]) 3422 } 3423 3424 if(newObject[key] === undefined) { 3425 delete newObject[key] 3426 } 3427 3428 } 3429 3430 return newObject 3431 3432 } 3433 3434 const mapCart = cart => { 3435 3436 const oldCart = cart 3437 3438 const mapper = { 3439 id: 'id', 3440 currency: 'currency', 3441 item_count: 'item_count', 3442 items: 'items', 3443 total_price: 'total_price', 3444 latest_items: 'latest_items' 3445 } 3446 3447 cart = map(cart, mapper) 3448 3449 const discounts = (oldCart.storewide_discounts || []).concat((oldCart.voucher_discounts || [])) 3450 3451 cart.discount_applications = discounts.map(discount => ({ 3452 title: discount.voucher_code || null, 3453 value: parsePrice(discount.amount), 3454 })) 3455 3456 cart.original_total_price = cart.items.length 3457 ? cart.items 3458 .map(item => item.original_price) 3459 .reduce((sum, price) => sum + price) 3460 : 0 3461 3462 cart.total_discount = cart.discount_applications.length 3463 ? cart.discount_applications 3464 .map(discount => parsePrice(discount.value)) 3465 .reduce((sum, value) => sum + value) 3466 : 0 3467 3468 cart.items = cart.items.map(item => mapLineItem(item)) 3469 3470 return cart 3471 3472 } 3473 3474 const mapCheckout = checkout => { 3475 3476 const mapper = { 3477 note: 'note', 3478 attributes: 'note_attributes', 3479 billing_address: 'billing_address', 3480 currency: 'currency', 3481 customer_id: 'customer_id', 3482 discounts_amount: 'total_discount', 3483 id: 'id', 3484 line_items: 'order_item', 3485 order_number: 'order_number', 3486 shipping_address: 'shipping_address', 3487 shipping_price: 'shipping_tax', 3488 shipping_method: 'shipping_method_name', 3489 tax_price: 'total_tax', 3490 } 3491 3492 checkout = map(checkout, mapper) 3493 3494 checkout.requires_shipping = checkout.line_items.some(item => item.shipping_required) 3495 3496 checkout.line_items = checkout.line_items.map(item => mapLineItem(item)) 3497 3498 return checkout 3499 3500 } 3501 3502 const mapOrder = order => { 3503 3504 const mapper = { 3505 attributes: 'note_attributes', 3506 billing_address: 'billing_address', 3507 cancelled: 'is_cancelled', 3508 cancelled_at: 'cancelled_at', 3509 created_at: 'created_at', 3510 customer_id: 'customer_id', 3511 // discount_applications: 'discount_applications', 3512 email: 'email', 3513 financial_status: 'financial_status', 3514 fulfillment_status: 'fulfillment_status', 3515 line_items: 'order_item', 3516 note: 'note', 3517 order_number: 'order_number', 3518 phone: 'phone', 3519 shipping_address: 'shipping_address', 3520 shipping_methods: 'shipping_methods', 3521 shipping_price: 'total_shipping', 3522 subtotal_price: 'subtotal_price', 3523 // tax_lines: 'tax_lines', 3524 tax_price: 'total_tax', 3525 total_discounts: 'total_discount', 3526 total_net_amount: 'total_amount_include_transaction', 3527 total_price: 'total_price', 3528 transactions: 'transaction_records', 3529 is_manual_payment: 'is_manual_payment', 3530 } 3531 3532 order.email = order.billing_address.email 3533 order.phone = order.billing_address.phone 3534 order.shipping_method = order.shipping_method_name 3535 3536 order = map(order, mapper) 3537 3538 order.line_items = order.line_items.map(item => mapLineItem(item)) 3539 order.transactions = order.transactions.map(transaction => mapTransaction(transaction)) 3540 3541 return order 3542 3543 } 3544 3545 const mapLineItem = line_item => { 3546 3547 const old_line_item = line_item 3548 3549 const mapper = { 3550 final_price: 'price', 3551 image: 'img_url', 3552 message: 'message', 3553 original_line_price: 'original_line_price', 3554 original_price: 'original_price', 3555 properties: 'properties', 3556 quantity: 'quantity', 3557 requires_shipping: 'shipping_required', 3558 sku: 'sku', 3559 taxable: 'taxable', 3560 title: 'product_name', 3561 product_name: 'product_name', 3562 url: 'url', 3563 product_id: 'product_id', 3564 variant_id: 'variant_id', 3565 id: ['id', 'i_id'], 3566 } 3567 3568 line_item = map(line_item, mapper) 3569 3570 line_item.product_id = line_item.product_id || (old_line_item.product && old_line_item.product.id) || null 3571 line_item.variant_id = line_item.variant_id || (old_line_item.variant && old_line_item.variant.id) || null 3572 line_item.image = line_item.image || (old_line_item.image && old_line_item.image.url) || null 3573 3574 return line_item 3575 3576 } 3577 3578 const mapTransaction = transaction => { 3579 3580 const mapper = { 3581 amount: 'amount', 3582 created_at: 'created_at', 3583 gateway: 'gateway_type', 3584 id: 'id', 3585 status: 'status', 3586 } 3587 3588 transaction = map(transaction, mapper) 3589 3590 return transaction 3591 3592 } 3593 3594 3595</script>
3595 3596 3597</body> 3598</html>
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.