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<!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 64 bytes, lines 9-10
9 10<script async src="https://www.googletagmanager.com/gtag/js?id=
10UA-214285957-1
vendor: 12 bytes, line 10
10"></script>
11<script> 12
vendor: 134 bytes, lines 12-16
12window.dataLayer = window.dataLayer || []; 13 function gtag(){dataLayer.push(arguments);} 14 gtag('js', new Date()); 15 16 gtag('config', '
16UA-214285957-1
vendor: 4 bytes, line 16
16');
17</script>
17 18 19 20 <!-- Basic page needs ================================================== --> 21 <meta charset="utf-8"> 22 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 23 24 25 <link rel="icon" href="https://cdn.store-assets.com/s/825767/f/7823545.png" /> 26 27 28 <!-- Title and description ================================================== --> 29 <title> 30 è ¸æºé´¨è¡èè±è – æ·±åå¤§æ¨¹ä¸ 31 </title> 32 33 34 35 <!-- Social meta ================================================== --> 36 37 38 <meta property="og:type" content="product"> 39 <meta property="og:title" content="è ¸æºé´¨è¡èè±è "> 40 <meta property="og:url" content="https://www.tofu5688.com/products/è ¸æºé´¨è¡èè±è "> 41 42 <meta property="og:image" content="https://cdn.store-assets.com/s/825767/i/37032022.jpg?width=480&format=webp"> 43 <meta property="og:image:secure_url" content="https://cdn.store-assets.com/s/825767/i/37032022.jpg?width=480&format=webp"> 44 45 <meta property="og:price:amount" content="300"> 46 <meta property="og:price:currency" content="TWD"> 47 48 49<meta property="og:description" content="æ·±å大樹ä¸"> 50<meta property="og:site_name" content="æ·±å大樹ä¸"> 51 52 53 54 <meta name="twitter:card" content="summary"> 55 56 57 58 59 <meta name="twitter:title" content="è ¸æºé´¨è¡èè±è "> 60 <meta name="twitter:description" content=""> 61 <meta name="twitter:image" content=""> 62 <meta name="twitter:image:width" content="480"> 63 <meta name="twitter:image:height" content="480"> 64 65 66 67 68 <!-- Helpers ================================================== --> 69 <link rel="canonical" href="https://www.tofu5688.com/products/è ¸æºé´¨è¡èè±è "> 70 <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=3.0"> 71 <meta name="theme-color" content=""> 72 73 <!-- CSS ================================================== --> 74 <link href="https://store-themes.easystore.co/825767/themes/2877/assets/timber.css?t=1787076075" rel="stylesheet" type="text/css" media="screen" /> 75 <link href="https://store-themes.easystore.co/825767/themes/2877/assets/theme.css?t=1787076075" rel="stylesheet" type="text/css" media="screen" /> 76 77 78 79 80 81<link href="https://fonts.googleapis.com/css?family=Rajdhani:400,600&display=swap" rel="stylesheet"> 82 83 84
84<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" type="text/javascript" ></script>
84 85 <!-- Header hook for plugins ================================================== --> 86 87<!-- ScriptTags -->
88<script>window.__st={p: "product",cid: null,cem: null,cph: null,cfn: null,cln: null,cge: null,cdb: null,ccc: null};</script>
88<script src='/assets/events.js'></script>
88<script>(function(){function asyncLoad(){var urls=['/assets/traffic.js?v=1','https://apps.easystore.co/google-analytics/script.js?shop=yongfenglinyongfeng.easy.co','https://apps.easystore.co/google-tag-manager/script.js?shop=yongfenglinyongfeng.easy.co','https://apps.easystore.co/facebook-login/script.js?shop=yongfenglinyongfeng.easy.co&t=1746584618'];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>
88 89<!-- /ScriptTags --> 90 91 92 93<!--[if lt IE 9]>
94<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js" type="text/javascript" ></script>
vendor: 2 bytes, line 94
94
95<script src="https://store-themes.easystore.co/825767/themes/2877/assets/respond.min.js?t=1787076075" type="text/javascript" ></script>
95 96<link href="https://store-themes.easystore.co/825767/themes/2877/assets/respond-proxy.html" id="respond-proxy" rel="respond-proxy" /> 97<link href="//www.tofu5688.com/search?q=b01323a203b5505d461db21c6d2a2a5c" id="respond-redirect" rel="respond-redirect" />
98<script src="//www.tofu5688.com/search?q=b01323a203b5505d461db21c6d2a2a5c" type="text/javascript"></script>
98 99<![endif]--> 100 101 102 103
103<script src="https://store-themes.easystore.co/825767/themes/2877/assets/modernizr.min.js?t=1787076075" type="text/javascript" ></script>
103 104 105 106 107
107<script> 108 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 109 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 110 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 111 })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 112 113 ga('create', '', 'auto','myTracker'); 114 ga('myTracker.send', 'pageview'); 115 116 </script>
116 117 118</head> 119 120<body id="---------------------" class="template-product has-sticky-btm-bar" > 121 122 <ul id="MobileNav" class="mobile-nav"> 123 124 <li class="mobile-nav_icon-x"> 125 126 127 128 129 130 131 132 <span class="MobileNavTrigger icon icon-x"></span> 133 </li> 134 135 136 <li class="mobile-nav__link" aria-haspopup="true"> 137 138 <a href="/" > 139 é¦é 140 </a> 141 142 </li> 143 144 145 <li class="mobile-nav__link" aria-haspopup="true"> 146 147 <a href="/collections/all" > 148 ç±éåå 149 </a> 150 151 </li> 152 153 154 <li class="mobile-nav__link" aria-haspopup="true"> 155 156 <a href="/pages/éæ¼å¤§æ¨¹ä¸" > 157 éæ¼å¤§æ¨¹ä¸ 158 </a> 159 160 </li> 161 162 163 164 165 166 167 168 <li class="mobile-nav__link"> 169 <a href="/account/login">ç»å ¥</a> 170 </li> 171 172 <li class="mobile-nav__link"> 173 <a href="/account/register">註å帳è</a> 174 </li> 175 176 177 178 179 <li class="mobile-nav__link header-bar__search-wrapper"> 180 181 <div class="header-bar__module header-bar__search mobile-nav_search"> 182 183 <form action="/search" method="get" class="header-bar__search-form clearfix" role="search"> 184 185 <button type="submit" class="btn icon-fallback-text header-bar__search-submit"> 186 <span class="icon icon-search" aria-hidden="true"></span> 187 <span class="fallback-text">æå°</span> 188 </button> 189 <input type="search" name="q" value="" aria-label="æå°" class="header-bar__search-input" placeholder="æå°" autocomplete="off"> 190 <div class="dropdown" id="searchDropdown"></div> 191 <input type="hidden" name="search_history" id="search_history"> 192 </form> 193 194 195 196
197<script> 198 var _search_history_listings = "" 199 if(_search_history_listings != "") localStorage.setItem('searchHistory', JSON.stringify(_search_history_listings)); 200 201 function clearAll() { 202 localStorage.removeItem('searchHistory'); 203 204 var customer = ""; 205 if(customer) { 206 // Your logic to clear all data or call an endpoint 207 fetch('/account/search_histories', { 208 method: 'DELETE', 209 headers: { 210 "Content-Type": "application/json", 211 "X-Requested-With": "XMLHttpRequest" 212 }, 213 body: JSON.stringify({ 214 _token: "BidbUr9h69dW9byqrxFixkcy0KLvlYMaik1E9qEy" 215 }), 216 }) 217 .then(response => response.json()) 218 } 219 } 220 // End - store view history in local storage 221 222 // search history dropdown 223 var searchInputs = document.querySelectorAll('input[type=search]'); 224 225 if(searchInputs.length > 0) { 226 227 searchInputs.forEach((searchInput)=>{ 228 229 searchInput.addEventListener('focus', function() { 230 var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown'); 231 searchDropdown.innerHTML = ''; // Clear existing items 232 233 // retrieve data from local storage 234 var searchHistoryData = JSON.parse(localStorage.getItem('searchHistory')) || []; 235 236 // Convert JSON to string 237 var search_history_json = JSON.stringify(searchHistoryData); 238 239 // Set the value of the hidden input 240 searchInput.closest('form').querySelector("#search_history").value = search_history_json; 241 242 // create dropdown items 243 var clearAllItem = document.createElement('div'); 244 clearAllItem.className = 'dropdown-item clear-all'; 245 clearAllItem.textContent = 'Clear'; 246 clearAllItem.addEventListener('click', function() { 247 clearAll(); 248 searchDropdown.style.display = 'none'; 249 searchInput.classList.remove('is-focus'); 250 }); 251 searchDropdown.appendChild(clearAllItem); 252 253 // create dropdown items 254 searchHistoryData.forEach(function(item) { 255 var dropdownItem = document.createElement('div'); 256 dropdownItem.className = 'dropdown-item'; 257 dropdownItem.textContent = item.term; 258 dropdownItem.addEventListener('click', function() { 259 searchInput.value = item.term; 260 searchDropdown.style.display = 'none'; 261 }); 262 searchDropdown.appendChild(dropdownItem); 263 }); 264 265 if(searchHistoryData.length > 0){ 266 // display the dropdown 267 searchInput.classList.add('is-focus'); 268 document.body.classList.add('search-input-focus'); 269 searchDropdown.style.display = 'block'; 270 } 271 }); 272 273 searchInput.addEventListener("focusout", (event) => { 274 var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown'); 275 searchInput.classList.remove('is-focus'); 276 searchDropdown.classList.add('transparent'); 277 setTimeout(()=>{ 278 searchDropdown.style.display = 'none'; 279 searchDropdown.classList.remove('transparent'); 280 document.body.classList.remove('search-input-focus'); 281 }, 400); 282 }); 283 }) 284 } 285 // End - search history dropdown 286</script>
286 287 </div> 288 289 </li> 290 291 292</ul> 293<div id="MobileNavOutside" class="mobile-nav-outside"></div> 294 295 296<div id="PageContainer" class="page-container"> 297 298<!-- Snippet:global/body_start: Console Extension --> 299<div id='es_console' style='display: none;'>825767</div> 300<!-- /Snippet --> 301 302 303 <style> 304 .search-modal__form{ 305 position: relative; 306 } 307 308 .dropdown-wrapper { 309 position: relative; 310 } 311 312 .dropdown-wrapper:hover .dropdown { 313 display: block; 314 } 315 316 .header-icon-nav .dropdown { 317 left: -80px; 318 } 319 320 .dropdown { 321 display: none; 322 position: absolute; 323 top: 100%; 324 left: 0px; 325 width: 100%; 326 padding: 8px; 327 background-color: #fff; 328 z-index: 1000; 329 border-radius: 5px; 330 border: 1px solid rgba(var(--color-foreground), 1); 331 border-top: none; 332 overflow-x: hidden; 333 overflow-y: auto; 334 max-height: 350px; 335 min-width: 150px; 336 box-shadow: 0 0 5px rgba(0,0,0,0.1); 337 } 338 339 .dropdown a{ 340 text-decoration: none; 341 color: #000 !important; 342 } 343 344 .dropdown-item { 345 padding: 0.4rem 2rem; 346 cursor: pointer; 347 line-height: 1.4; 348 overflow: hidden; 349 text-overflow: ellipsis; 350 white-space: nowrap; 351 } 352 353 .dropdown-item:hover{ 354 background-color: #f3f3f3; 355 } 356 357 .search__input.is-focus{ 358 border-radius: 15px; 359 border-bottom-left-radius: 0; 360 border-bottom-right-radius: 0; 361 border: 1px solid rgba(var(--color-foreground), 1); 362 border-bottom: none; 363 box-shadow: none; 364 } 365 366 .clear-all { 367 text-align: right; 368 padding: 0 2rem 0.2rem; 369 line-height: 1; 370 font-size: 70%; 371 margin-bottom: -2px; 372 } 373 374 .clear-all:hover{ 375 background-color: #fff; 376 } 377 378 .referral-notification { 379 position: absolute; 380 top: 100%; 381 right: -12px; 382 background: white; 383 border: 1px solid #e0e0e0; 384 border-radius: 8px; 385 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); 386 width: 280px; 387 z-index: 1000; 388 padding: 16px; 389 margin-top: 8px; 390 font-size: 14px; 391 line-height: 1.4; 392 } 393 394 .referral-notification::before { 395 content: ''; 396 position: absolute; 397 top: -8px; 398 right: 20px; 399 width: 0; 400 height: 0; 401 border-left: 8px solid transparent; 402 border-right: 8px solid transparent; 403 border-bottom: 8px solid white; 404 } 405 406 .referral-notification::after { 407 content: ''; 408 position: absolute; 409 top: -9px; 410 right: 20px; 411 width: 0; 412 height: 0; 413 border-left: 8px solid transparent; 414 border-right: 8px solid transparent; 415 border-bottom: 8px solid #e0e0e0; 416 } 417 418 .referral-notification h4 { 419 margin: 0 0 8px 0; 420 color: #2196F3; 421 font-size: 16px; 422 font-weight: 600; 423 } 424 425 .referral-notification p { 426 margin: 0 0 12px 0; 427 color: #666; 428 } 429 430 .referral-notification .referral-code { 431 background: #f5f5f5; 432 padding: 8px; 433 border-radius: 4px; 434 font-family: monospace; 435 font-size: 13px; 436 text-align: center; 437 margin: 8px 0; 438 border: 1px solid #ddd; 439 } 440 441 .referral-notification .close-btn { 442 position: absolute; 443 top: 8px; 444 right: 8px; 445 background: none; 446 border: none; 447 font-size: 18px; 448 color: #999; 449 cursor: pointer; 450 padding: 0; 451 width: 20px; 452 height: 20px; 453 line-height: 1; 454 } 455 456 .referral-notification .close-btn:hover { 457 color: #333; 458 } 459 460 .referral-notification .action-btn { 461 background: #2196F3; 462 color: white; 463 border: none; 464 padding: 8px 16px; 465 border-radius: 4px; 466 cursor: pointer; 467 font-size: 12px; 468 margin-right: 8px; 469 margin-top: 8px; 470 } 471 472 .referral-notification .action-btn:hover { 473 background: #1976D2; 474 } 475 476 .referral-notification .dismiss-btn { 477 background: transparent; 478 color: #666; 479 border: 1px solid #ddd; 480 padding: 8px 16px; 481 border-radius: 4px; 482 cursor: pointer; 483 font-size: 12px; 484 margin-top: 8px; 485 } 486 487 .referral-notification .dismiss-btn:hover { 488 background: #f5f5f5; 489 } 490 .referral-modal__dialog { 491 transform: translate(-50%, 0); 492 transition: transform var(--duration-default) ease, visibility 0s; 493 z-index: 10000; 494 position: fixed; 495 top: 20vh; 496 left: 50%; 497 width: 100%; 498 max-width: 350px; 499 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); 500 border-radius: 12px; 501 background-color: #fff; 502 color: #000; 503 padding: 20px; 504 text-align: center; 505 } 506 .modal-overlay.referral-modal-overlay { 507 position: fixed; 508 top: 0; 509 left: 0; 510 width: 100%; 511 height: 100%; 512 background-color: rgba(0, 0, 0, 0.7); 513 z-index: 2001; 514 display: block; 515 opacity: 1; 516 transition: opacity var(--duration-default) ease, visibility 0s; 517 } 518</style> 519 520<header class="header-bar logo_top-center "> 521 <div class="header-bg-wrapper"> 522 <div class="header-wrapper wrapper"> 523 524 525 <div class="logo-header" role="banner"> 526 527 528 <div class="h1 site-header__logo" itemscope itemtype="http://schema.org/Organization"> 529 530 531 532 533 <a href="/" class="logo-wrapper" itemprop="url"> 534 <img src="https://cdn.store-assets.com/s/825767/f/7615570.jpeg?width=350&format=webp" alt="æ·±å大樹ä¸" itemprop="logo"> 535 </a> 536 537 538 539 540 </div> 541 542 543 </div> 544 545 <div class="header-nav-bar medium-down--hide"> 546 547<ul class="site-nav" id="AccessibleNav"> 548 549 550 551 <li > 552 <a href="/" class="site-nav__link">é¦é </a> 553 </li> 554 555 556 557 558 <li > 559 <a href="/collections/all" class="site-nav__link">ç±éåå</a> 560 </li> 561 562 563 564 565 <li > 566 <a href="/pages/éæ¼å¤§æ¨¹ä¸" class="site-nav__link">éæ¼å¤§æ¨¹ä¸</a> 567 </li> 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582</ul> 583 584 </div> 585 586 <div class="desktop-header-nav medium-down--hide"> 587 588 589 <div class="header-subnav"> 590 591 592 593 594 595 596 597 <div class="header-icon-nav"> 598 599 600 601 602 603 604 605 606 <div class="header-bar__module"> 607 608 <a class="popup-with-form" href="#search-form"> 609 610 611 612 613 <svg class="icon-search svg-icon" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>icon-search</title><path d="M68.5,65.87a35.27,35.27,0,1,0-5.4,4.5l23.11,23.1a3.5,3.5,0,1,0,5-4.94ZM14.82,41A28.47,28.47,0,1,1,43.28,69.43,28.5,28.5,0,0,1,14.82,41Z"/></svg> 614 615 616 617 </a> 618 619 620 621<!-- form itself --> 622<div id="search-form" class="white-popup-block mfp-hide popup-search"> 623 <div class="popup-search-content"> 624 <form action="/search" method="get" class="input-group search-bar" role="search"> 625 626 <input type="search" name="q" value="" placeholder="æå°" class="input-group-field" aria-label="æå°" placeholder="æå°" autocomplete="off"> 627 <div class="dropdown" id="searchDropdown"></div> 628 <input type="hidden" name="search_history" id="search_history">
629 <span class="input-group-btn"> 630 <button type="submit" class="btn icon-fallback-text"> 631 <span class="icon icon-search" aria-hidden="true"></span> 632 <span class="fallback-text">æå°</span> 633 </button> 634 </span> 635 </form> 636 </div> 637</div> 638
639<script src="https://store-themes.easystore.co/825767/themes/2877/assets/magnific-popup.min.js?t=1787076075" type="text/javascript" ></script>
vendor: 1 bytes, line 639
639
640<script> 641$(document).ready(function() { 642 $('.popup-with-form').magnificPopup({ 643 type: 'inline', 644 preloader: false, 645 focus: '#name', 646 mainClass: 'popup-search-bg-wrapper', 647 648 // When elemened is focused, some mobile browsers in some cases zoom in 649 // It looks not nice, so we disable it: 650 callbacks: { 651 beforeOpen: function() { 652 if($(window).width() < 700) { 653 this.st.focus = false; 654 } else { 655 this.st.focus = '#name'; 656 } 657 } 658 } 659 }); 660 $('.popup-search-content').click(function(event) { 661 if($(event.target).attr('class') == "popup-search-content") { 662 $.magnificPopup.close(); 663 } 664 }); 665}); 666</script>
666 667 668
669<script> 670 var _search_history_listings = "" 671 if(_search_history_listings != "") localStorage.setItem('searchHistory', JSON.stringify(_search_history_listings)); 672 673 function clearAll() { 674 localStorage.removeItem('searchHistory'); 675 676 var customer = ""; 677 if(customer) { 678 // Your logic to clear all data or call an endpoint 679 fetch('/account/search_histories', { 680 method: 'DELETE', 681 headers: { 682 "Content-Type": "application/json", 683 "X-Requested-With": "XMLHttpRequest" 684 }, 685 body: JSON.stringify({ 686 _token: "BidbUr9h69dW9byqrxFixkcy0KLvlYMaik1E9qEy" 687 }), 688 }) 689 .then(response => response.json()) 690 } 691 } 692 // End - store view history in local storage 693 694 // search history dropdown 695 var searchInputs = document.querySelectorAll('input[type=search]'); 696 697 if(searchInputs.length > 0) { 698 699 searchInputs.forEach((searchInput)=>{ 700 701 searchInput.addEventListener('focus', function() { 702 var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown'); 703 searchDropdown.innerHTML = ''; // Clear existing items 704 705 // retrieve data from local storage 706 var searchHistoryData = JSON.parse(localStorage.getItem('searchHistory')) || []; 707 708 // Convert JSON to string 709 var search_history_json = JSON.stringify(searchHistoryData); 710 711 // Set the value of the hidden input 712 searchInput.closest('form').querySelector("#search_history").value = search_history_json; 713 714 // create dropdown items 715 var clearAllItem = document.createElement('div'); 716 clearAllItem.className = 'dropdown-item clear-all'; 717 clearAllItem.textContent = 'Clear'; 718 clearAllItem.addEventListener('click', function() { 719 clearAll(); 720 searchDropdown.style.display = 'none'; 721 searchInput.classList.remove('is-focus'); 722 }); 723 searchDropdown.appendChild(clearAllItem); 724 725 // create dropdown items 726 searchHistoryData.forEach(function(item) { 727 var dropdownItem = document.createElement('div'); 728 dropdownItem.className = 'dropdown-item'; 729 dropdownItem.textContent = item.term; 730 dropdownItem.addEventListener('click', function() { 731 searchInput.value = item.term; 732 searchDropdown.style.display = 'none'; 733 }); 734 searchDropdown.appendChild(dropdownItem); 735 }); 736 737 if(searchHistoryData.length > 0){ 738 // display the dropdown 739 searchInput.classList.add('is-focus'); 740 document.body.classList.add('search-input-focus'); 741 searchDropdown.style.display = 'block'; 742 } 743 }); 744 745 searchInput.addEventListener("focusout", (event) => { 746 var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown'); 747 searchInput.classList.remove('is-focus'); 748 searchDropdown.classList.add('transparent'); 749 setTimeout(()=>{ 750 searchDropdown.style.display = 'none'; 751 searchDropdown.classList.remove('transparent'); 752 document.body.classList.remove('search-input-focus'); 753 }, 400); 754 }); 755 }) 756 } 757 // End - search history dropdown 758</script>
758 759 </div> 760 761 762 763 764 765 766 767 <div class="header-bar__module dropdown-wrapper"> 768 769 <a href="/account/login"> 770 771 772 773 <svg class="svg-icon" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>icon-profile</title><path d="M50,51.8A24.4,24.4,0,1,0,25.6,27.4,24.43,24.43,0,0,0,50,51.8ZM50,10A17.4,17.4,0,1,1,32.6,27.4,17.43,17.43,0,0,1,50,10Z"/><path d="M62.66,57.66H37.34a30.54,30.54,0,0,0-30.5,30.5V93.5a3.5,3.5,0,0,0,3.5,3.5H89.66a3.5,3.5,0,0,0,3.5-3.5V88.16A30.54,30.54,0,0,0,62.66,57.66ZM86.16,90H13.84V88.16a23.53,23.53,0,0,1,23.5-23.5H62.66a23.53,23.53,0,0,1,23.5,23.5Z"/></svg> 774 775 776</a> 777 778 <!-- Referral Notification Popup for Desktop --> 779 <div id="referralNotification" class="referral-notification" style="display: none;"> 780 <button class="close-btn" onclick="dismissReferralNotification()">×</button> 781 <div style="text-align: center; margin-bottom: 16px;"> 782 <div style="width: 100px; height: 100px; margin: 0 auto;"> 783 <img src="https://resources.easystore.co/storefront/icons/channels/vector_referral_program.svg"> 784 </div> 785 </div> 786 <p id="referralSignupMessage" style="text-align: center; font-size: 14px; color: #666; margin: 0 0 20px 0;"> 787 æ¨ç好å鿍 åé¥éï¼ç«å³è¨»åé åã 788 </p> 789 <div style="text-align: center;"> 790 <button class="btn" onclick="goToSignupPage()" style="width: 100%; color: #fff;"> 791 註å 792 </button> 793 </div> 794 </div> 795 796 </div> 797 798 799 <div class="header-bar__module cart-page-link-wrapper"> 800 <span class="header-bar__sep" aria-hidden="true"></span> 801 <a class="CartDrawerTrigger cart-page-link"> 802 803 804 805 806 <svg class="svg-icon" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>icon-bag</title><path d="M91.78,93.11,84.17,24.44a3.5,3.5,0,0,0-3.48-3.11H69.06C67.53,10.94,59.57,3,50,3S32.47,10.94,30.94,21.33H19.31a3.5,3.5,0,0,0-3.48,3.11L8.22,93.11A3.49,3.49,0,0,0,11.69,97H88.31a3.49,3.49,0,0,0,3.47-3.89ZM50,10c5.76,0,10.6,4.83,12,11.33H38.05C39.4,14.83,44.24,10,50,10ZM15.6,90l6.84-61.67h8.23v9.84a3.5,3.5,0,0,0,7,0V28.33H62.33v9.84a3.5,3.5,0,0,0,7,0V28.33h8.23L84.4,90Z"/></svg> 807 808 809 810 <span class="cart-count header-bar__cart-count hidden-count">0</span> 811 </a> 812 </div> 813 814 </div> 815 </div> 816 817 818 819 </div> 820 821 <div class="mobile-header-icons large--hide"> 822 823 <div class="large--hide"> 824 825 <a class="popup-with-form" href="#search-form"> 826 827 828 829 830 <svg class="icon-search svg-icon" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>icon-search</title><path d="M68.5,65.87a35.27,35.27,0,1,0-5.4,4.5l23.11,23.1a3.5,3.5,0,1,0,5-4.94ZM14.82,41A28.47,28.47,0,1,1,43.28,69.43,28.5,28.5,0,0,1,14.82,41Z"/></svg> 831 832 833 834 </a> 835 836 837 838<!-- form itself --> 839<div id="search-form" class="white-popup-block mfp-hide popup-search"> 840 <div class="popup-search-content"> 841 <form action="/search" method="get" class="input-group search-bar" role="search"> 842 843 <input type="search" name="q" value="" placeholder="æå°" class="input-group-field" aria-label="æå°" placeholder="æå°" autocomplete="off"> 844 <div class="dropdown" id="searchDropdown"></div> 845 <input type="hidden" name="search_history" id="search_history"> 846 <span class="input-group-btn"> 847 <button type="submit" class="btn icon-fallback-text"> 848 <span class="icon icon-search" aria-hidden="true"></span>
849 <span class="fallback-text">æå°</span> 850 </button> 851 </span> 852 </form> 853 </div> 854</div> 855
856<script src="https://store-themes.easystore.co/825767/themes/2877/assets/magnific-popup.min.js?t=1787076075" type="text/javascript" ></script>
vendor: 1 bytes, line 856
856
857<script> 858$(document).ready(function() { 859 $('.popup-with-form').magnificPopup({ 860 type: 'inline', 861 preloader: false, 862 focus: '#name', 863 mainClass: 'popup-search-bg-wrapper', 864 865 // When elemened is focused, some mobile browsers in some cases zoom in 866 // It looks not nice, so we disable it: 867 callbacks: { 868 beforeOpen: function() { 869 if($(window).width() < 700) { 870 this.st.focus = false; 871 } else { 872 this.st.focus = '#name'; 873 } 874 } 875 } 876 }); 877 $('.popup-search-content').click(function(event) { 878 if($(event.target).attr('class') == "popup-search-content") { 879 $.magnificPopup.close(); 880 } 881 }); 882}); 883</script>
883 884 885
886<script> 887 var _search_history_listings = "" 888 if(_search_history_listings != "") localStorage.setItem('searchHistory', JSON.stringify(_search_history_listings)); 889 890 function clearAll() { 891 localStorage.removeItem('searchHistory'); 892 893 var customer = ""; 894 if(customer) { 895 // Your logic to clear all data or call an endpoint 896 fetch('/account/search_histories', { 897 method: 'DELETE', 898 headers: { 899 "Content-Type": "application/json", 900 "X-Requested-With": "XMLHttpRequest" 901 }, 902 body: JSON.stringify({ 903 _token: "BidbUr9h69dW9byqrxFixkcy0KLvlYMaik1E9qEy" 904 }), 905 }) 906 .then(response => response.json()) 907 } 908 } 909 // End - store view history in local storage 910 911 // search history dropdown 912 var searchInputs = document.querySelectorAll('input[type=search]'); 913 914 if(searchInputs.length > 0) { 915 916 searchInputs.forEach((searchInput)=>{ 917 918 searchInput.addEventListener('focus', function() { 919 var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown'); 920 searchDropdown.innerHTML = ''; // Clear existing items 921 922 // retrieve data from local storage 923 var searchHistoryData = JSON.parse(localStorage.getItem('searchHistory')) || []; 924 925 // Convert JSON to string 926 var search_history_json = JSON.stringify(searchHistoryData); 927 928 // Set the value of the hidden input 929 searchInput.closest('form').querySelector("#search_history").value = search_history_json; 930 931 // create dropdown items 932 var clearAllItem = document.createElement('div'); 933 clearAllItem.className = 'dropdown-item clear-all'; 934 clearAllItem.textContent = 'Clear'; 935 clearAllItem.addEventListener('click', function() { 936 clearAll(); 937 searchDropdown.style.display = 'none'; 938 searchInput.classList.remove('is-focus'); 939 }); 940 searchDropdown.appendChild(clearAllItem); 941 942 // create dropdown items 943 searchHistoryData.forEach(function(item) { 944 var dropdownItem = document.createElement('div'); 945 dropdownItem.className = 'dropdown-item'; 946 dropdownItem.textContent = item.term; 947 dropdownItem.addEventListener('click', function() { 948 searchInput.value = item.term; 949 searchDropdown.style.display = 'none'; 950 }); 951 searchDropdown.appendChild(dropdownItem); 952 }); 953 954 if(searchHistoryData.length > 0){ 955 // display the dropdown 956 searchInput.classList.add('is-focus'); 957 document.body.classList.add('search-input-focus'); 958 searchDropdown.style.display = 'block'; 959 } 960 }); 961 962 searchInput.addEventListener("focusout", (event) => { 963 var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown'); 964 searchInput.classList.remove('is-focus'); 965 searchDropdown.classList.add('transparent'); 966 setTimeout(()=>{ 967 searchDropdown.style.display = 'none'; 968 searchDropdown.classList.remove('transparent'); 969 document.body.classList.remove('search-input-focus'); 970 }, 400); 971 }); 972 }) 973 } 974 // End - search history dropdown 975</script>
975 976 </div> 977 978 979 <!-- Mobile cart --> 980 <div class="large--hide"> 981 <a class="CartDrawerTrigger cart-page-link mobile-cart-page-link"> 982 983 984 985 986 <svg class="svg-icon" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>icon-bag</title><path d="M91.78,93.11,84.17,24.44a3.5,3.5,0,0,0-3.48-3.11H69.06C67.53,10.94,59.57,3,50,3S32.47,10.94,30.94,21.33H19.31a3.5,3.5,0,0,0-3.48,3.11L8.22,93.11A3.49,3.49,0,0,0,11.69,97H88.31a3.49,3.49,0,0,0,3.47-3.89ZM50,10c5.76,0,10.6,4.83,12,11.33H38.05C39.4,14.83,44.24,10,50,10ZM15.6,90l6.84-61.67h8.23v9.84a3.5,3.5,0,0,0,7,0V28.33H62.33v9.84a3.5,3.5,0,0,0,7,0V28.33h8.23L84.4,90Z"/></svg> 987 988 989 990 <span class="cart-count hidden-count">0</span> 991 </a> 992 </div> 993 994 <!-- Mobile hamburger --> 995 <div class="large--hide"> 996 <a class="mobile-nav-trigger MobileNavTrigger"> 997 998 999 1000 1001 <svg class="svg-icon" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>icon-nav-menu</title><path d="M6.7,26.34H93a3.5,3.5,0,0,0,0-7H6.7a3.5,3.5,0,0,0,0,7Z"/><path d="M93.3,46.5H7a3.5,3.5,0,0,0,0,7H93.3a3.5,3.5,0,1,0,0-7Z"/><path d="M93.3,73.66H7a3.5,3.5,0,1,0,0,7H93.3a3.5,3.5,0,0,0,0-7Z"/></svg> 1002 1003 1004 1005 </a> 1006 </div> 1007 1008 1009 1010 <!-- Referral Notification Modal for Mobile --> 1011 <details-modal class="referral-modal" id="referralMobileModal"> 1012 <details> 1013 <summary class="referral-modal__toggle" aria-haspopup="dialog" aria-label="Open referral modal" style="display: none;"> 1014 </summary> 1015 <div class="modal-overlay referral-modal-overlay"></div> 1016 <div class="referral-modal__dialog" role="dialog" aria-modal="true" aria-label="Referral notification"> 1017 <div class="referral-modal__content"> 1018 <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;"> 1019 × 1020 </button> 1021 1022 <div style="margin-bottom: 24px;"> 1023 <div style="width: 120px; height: 120px; margin: 0 auto 20px;"> 1024 <img src="https://resources.easystore.co/storefront/icons/channels/vector_referral_program.svg" style="width: 100%; height: 100%;"> 1025 </div> 1026 </div> 1027 1028 <p id="referralSignupMessageMobile" style="font-size: 16px; color: #333; margin: 0 0 30px 0; line-height: 1.5;"> 1029 æ¨ç好å鿍 åé¥éï¼ç«å³è¨»åé åã 1030 </p> 1031 1032 <button type="button" class="btn" onclick="goToSignupPageFromMobile()" style="width: 100%; color: #fff;"> 1033 註å 1034 </button> 1035 </div> 1036 </div> 1037 </details> 1038 </details-modal> 1039 1040 1041 1042 </div> 1043 1044 1045 </div> 1046 </div> 1047</header> 1048 1049 1050 1051 1052 1053 1054 1055 <main class="wrapper main-content" role="main"> 1056 <div class="grid"> 1057 <div class="grid__item"> 1058 1059 1060 1061<div itemscope itemtype="http://schema.org/Product"> 1062 1063 <meta itemprop="url" content="https://www.tofu5688.com/products/è ¸æºé´¨è¡èè±è "> 1064 <meta itemprop="image" content="https://cdn.store-assets.com/s/825767/i/37032022.jpg?width=480&format=webp"> 1065 1066 1067 <div class="section-header section-header--breadcrumb medium--hide small--hide"> 1068 1069<nav class="breadcrumb" role="navigation" aria-label="breadcrumbs"> 1070 <a href="/" title="è¿åå°é¦é ">é¦é </a> 1071 1072 1073 1074 1075 <span aria-hidden="true" class="breadcrumb__sep">›</span> 1076 1077 1078 <a href="/collections/feature-on-homepage">ç±éåå</a> 1079 1080 1081 <span aria-hidden="true" class="breadcrumb__sep">›</span> 1082 <span>è ¸æºé´¨è¡èè±è </span> 1083 1084 1085</nav> 1086 1087 1088 </div> 1089 1090 <div class="product-single"> 1091 <div class="grid product-single__hero"> 1092 <div class="grid__item large--seven-twelfths"> 1093 1094 <div id="ProductPhoto" class="product-slider "> 1095 <div id="overlayZoom"></div> 1096 1097 <div class="flexslider transparent"> 1098 <ul class="slides"> 1099 1100 <li data-thumb="https://cdn.store-assets.com/s/825767/i/37032022.jpg?width=1024&format=webp" id="image-id-37032022"> 1101 <div class="slide-img product-zoomable mfp-Images" data-image-id="37032022" data-image-type="Images" href="https://cdn.store-assets.com/s/825767/i/37032022.jpg?width=1024&format=webp"> 1102 <img src="https://cdn.store-assets.com/s/825767/i/37032022.jpg?width=1024&format=webp" alt="è ¸æºé´¨è¡èè±è é¦å.jpg" onmousemove="zoomIn(event)" onmouseout="zoomOut()"> 1103 </div> 1104 </li> 1105 1106 </ul> 1107 </div> 1108 1109 </div> 1110 1111 1112 1113 <ul class="gallery hidden"> 1114 1115 1116 1117 <li data-image-id="37032022" class="gallery__item" data-mfp-src="https://cdn.store-assets.com/s/825767/i/37032022.jpg?width=1024&format=webp"> 1118 </li> 1119 1120 1121 1122 1123 </ul> 1124 1125 1126 1127 </div> 1128 <div class="grid__item large--five-twelfths"> 1129 <div class="product_option-detail option_tags-wrapper"> 1130 1131 1132 <h1 itemprop="name">è ¸æºé´¨è¡èè±è </h1> 1133 1134 <div itemprop="offers" itemscope itemtype="http://schema.org/Offer"> 1135 1136 1137 <meta itemprop="priceCurrency" content="TWD"> 1138 <link itemprop="availability" href="http://schema.org/InStock"> 1139 1140 <div class="product-single__prices">
1141 <span id="ProductPrice" class="product-single__price" itemprop="price" content="300"> 1142 <span class=money data-ori-price='300.00'>NT$ 300.00 </span> 1143 </span> 1144 1145 <s style="display: none;" id="ComparePrice" class="product-single__sale-price" data-expires=""> 1146 <span class=money data-ori-price='0.00'>NT$ 0.00 </span> 1147 </s> 1148 <span id="ComparePricePercent" class="product-single__sale-percent"></span> 1149 </div> 1150 1151 <form action="/cart/add" method="post" enctype="multipart/form-data" data-addtocart='{"id":6461939,"name":"è ¸æºé´¨è¡èè±è ","sku":"","price":300.0,"quantity":1,"variant":"è ¸æºé´¨è¡èè±è ","category":"ç±éåå","brands":""}' id="AddToCartForm"> 1152 <input type="hidden" name="_token" value="BidbUr9h69dW9byqrxFixkcy0KLvlYMaik1E9qEy"> 1153 <style> 1154.sf_promo-promo-label, #sf_promo-view-more-tag, .sf_promo-label-unclickable:hover { 1155 color: #4089e4 1156} 1157</style> 1158<div class="sf_promo-tag-wrapper"> 1159 <div id="sf_promo-tag-label"></div> 1160 <div class="sf_promo-tag-container"> 1161 <div id="sf_promo-tag"></div> 1162 <a id="sf_promo-view-more-tag" class="sf_promo-promo-label hide" onclick="getPromotionList(true)">ç覽æ´å¤</a> 1163 </div> 1164</div> 1165 1166 1167 1168 <div class="product-option-wrapper"> 1169 1170 1171 1172 1173 1174 <select name="id" id="productSelect" class="product-single__variants"> 1175 1176 1177 1178 <option selected="selected" data-sku="" value="29534345">è ¸æºé´¨è¡èè±è - <span class=money data-ori-price='30,000.00'>NT$ 30,000.00 </span></option> 1179 1180 1181 1182 1183 1184 <option data-sku="" value="29534347">è ¸æºèè±è - <span class=money data-ori-price='30,000.00'>NT$ 30,000.00 </span></option> 1185 1186 1187 1188 </select> 1189 1190 1191 1192 <div class="product-single__quantity"> 1193 <label for="Quantity">æ¸é</label> 1194 <div> 1195 <div class="cart-qty-adjust"> 1196 <span class="product-single__btn-qty-adjust" data-adjust="0"> 1197 - 1198 </span> 1199 <input type="number" id="Quantity" name="quantity" value="1" min="1" class="quantity-selector cart__quantity-selector"> 1200 <span class="product-single__btn-qty-adjust" data-adjust="1"> 1201 + 1202 </span> 1203 </div> 1204 </div> 1205 </div> 1206 1207 </div> 1208 1209 1210 <button type="submit" name="add" id="AddToCart" class="btn addToCart-btn"> 1211 <span id="AddToCartText">å å ¥è³¼ç©è»</span> 1212 </button> 1213 <a class="btn addToCart-btn top-addToCart-btn hide medium--hide small--hide"> 1214 1215 1216 1217 1218 <svg class="svg-icon" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>icon-bag</title><path d="M91.78,93.11,84.17,24.44a3.5,3.5,0,0,0-3.48-3.11H69.06C67.53,10.94,59.57,3,50,3S32.47,10.94,30.94,21.33H19.31a3.5,3.5,0,0,0-3.48,3.11L8.22,93.11A3.49,3.49,0,0,0,11.69,97H88.31a3.49,3.49,0,0,0,3.47-3.89ZM50,10c5.76,0,10.6,4.83,12,11.33H38.05C39.4,14.83,44.24,10,50,10ZM15.6,90l6.84-61.67h8.23v9.84a3.5,3.5,0,0,0,7,0V28.33H62.33v9.84a3.5,3.5,0,0,0,7,0V28.33h8.23L84.4,90Z"/></svg> 1219 1220 1221<span id="AddToCartText">å å ¥è³¼ç©è»</span> 1222 </a> 1223 1224 1225 <div id="floating_action-bar" class="floating-action-bar large--hide"> 1226 <div class="floating-action-bar-wrapper"> 1227 1228 1229 1230 1231 1232 1233 <a href="/" class="btn btn-back-home"> 1234 <img src="https://cdn.easystore.blue/s/201/f/5590.png?width=150&format=webp"/> 1235 <div> 1236 Home 1237 </div> 1238 </a> 1239 1240 1241 <button type="submit" id="MobileAddToCart" name="add" class="btn addToCart-btn" data-float-btn="1">
1242 <span id="AddToCartText" class="AddToCartTexts">å å ¥è³¼ç©è»</span> 1243 </button> 1244 </div> 1245 </div> 1246 1247 </form> 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258<div class="social-sharing is-clean" data-permalink="https://www.tofu5688.com/products/è ¸æºé´¨è¡èè±è "> 1259 1260 1261 <a target="_blank" href="//www.facebook.com/sharer.php?u=https://www.tofu5688.com/products/è ¸æºé´¨è¡èè±è " class="share-facebook"> 1262 1263 1264 1265 1266 <svg class="facebook-share-icon-svg circle-share-icon" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1024 1024"><defs><clipPath id="clip-path"><rect x="62.11" y="62.04" width="899.89" height="899.96" fill="none"/></clipPath></defs><title>Facebook</title><g id="Layer_1" data-name="Layer 1"><g clip-path="url(#clip-path)"><path d="M962,512C962,263.47,760.53,62,512,62S62,263.47,62,512c0,224.61,164.56,410.77,379.69,444.53V642.08H327.43V512H441.69V412.86c0-112.78,67.18-175.08,170-175.08,49.23,0,100.73,8.79,100.73,8.79V357.31H655.65c-55.9,0-73.34,34.69-73.34,70.28V512H707.12l-20,130.08H582.31V956.53C797.44,922.77,962,736.61,962,512Z" fill="#1877f2"/></g><path d="M687.17,642.08l20-130.08H582.31V427.59c0-35.59,17.44-70.28,73.34-70.28h56.74V246.57s-51.5-8.79-100.73-8.79c-102.79,0-170,62.3-170,175.08V512H327.43V642.08H441.69V956.53a454.61,454.61,0,0,0,140.62,0V642.08Z" fill="#fff"/></g></svg> 1267 1268 1269 1270 </a> 1271 1272 1273 1274 <a target="_blank" href="//twitter.com/share?text=è ¸æºé´¨è¡èè±è &url=https://www.tofu5688.com/products/è ¸æºé´¨è¡èè±è " class="share-twitter"> 1275 1276 1277 1278 1279 <svg class="twitter-share-icon-svg circle-share-icon" viewBox="0 0 24 24" style="padding: 4px;background: #e9e9e9;border-radius: 50%;" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> 1280 <path stroke="none" d="M0 0h24v24H0z" fill="none" style="fill: none;"/> 1281 <path d="M4 4l11.733 16h4.267l-11.733 -16z" style="fill: none;" /> 1282 <path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772" style="fill: none;" /> 1283 </svg> 1284 1285 1286 1287 </a> 1288 1289 1290 1291 1292 1293 <a target="_blank" href="//pinterest.com/pin/create/button/?url=https://www.tofu5688.com/products/è ¸æºé´¨è¡èè±è &media=&description=è ¸æºé´¨è¡èè±è " class="share-pinterest"> 1294 1295 1296 1297 1298 <svg class="pinterest-share-icon-svg circle-share-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><title>Pinterest</title><g id="Layer_1" data-name="Layer 1"><circle cx="512" cy="512" r="450" fill="#fff"/><path d="M536,962H488.77a23.77,23.77,0,0,0-3.39-.71,432.14,432.14,0,0,1-73.45-10.48c-9-2.07-18-4.52-26.93-6.8a7.6,7.6,0,0,1,.35-1.33c.6-1,1.23-2,1.85-3,18.19-29.57,34.11-60.23,43.17-93.95,7.74-28.83,14.9-57.82,22.3-86.74,2.91-11.38,5.76-22.77,8.77-34.64,2.49,3.55,4.48,6.77,6.83,9.69,15.78,19.58,36.68,31.35,60.16,39,25.41,8.3,51.34,8.07,77.41,4.11C653.11,770,693.24,748.7,726.79,715c32.57-32.73,54.13-72.14,68.33-115.76,12-37,17.81-75.08,19.08-114,1-30.16-1.94-59.73-11.72-88.36C777.38,323.39,728.1,271.81,658,239.82c-45.31-20.67-93.27-28.06-142.89-26.25a391.16,391.16,0,0,0-79.34,10.59c-54.59,13.42-103.37,38.08-143.29,78-61.1,61-91.39,134.14-83.34,221.41,2.3,25,8.13,49.08,18.84,71.86,15.12,32.14,37.78,56.78,71,70.8,11.87,5,20.67.54,23.82-12,2.91-11.56,5.5-23.21,8.88-34.63,2.72-9.19,1.2-16.84-5.15-24-22.84-25.84-31.36-56.83-30.88-90.48A238.71,238.71,0,0,1,300,462.16c10.93-55.27,39.09-99.84,85.3-132.46,33.39-23.56,71-35.54,111.53-38.54,30.47-2.26,60.5,0,89.89,8.75,27.38,8.16,51.78,21.59,71.77,42.17,31.12,32,44.38,71.35,45.61,115.25a383.11,383.11,0,0,1-3.59,61.18c-4.24,32-12.09,63-25.45,92.47-11.37,25.09-26,48-47.45,65.79-23.66,19.61-50.51,28.9-81.43,23.69-34-5.75-57.66-34-57.56-68.44,0-13.46,4.16-26.09,7.8-38.78,8.67-30.19,18-60.2,26.45-90.46,5.26-18.82,9.13-38,6.91-57.8-1.58-14.1-5.77-27.31-15.4-38-16.55-18.4-37.68-22.29-60.75-17-23.26,5.3-39.56,20.36-51.58,40.26-15,24.89-20.26,52.22-19.2,81a179.06,179.06,0,0,0,13.3,62.7,9.39,9.39,0,0,1,.07,5.31c-17.12,72.65-33.92,145.37-51.64,217.87-9.08,37.
129815-14.72,74.52-13.67,112.8.13,4.55,0,9.11,0,14.05-1.62-.67-3.06-1.22-4.46-1.86A452,452,0,0,1,103.27,700.4,441.83,441.83,0,0,1,63.54,547.58c-.41-5.44-1-10.86-1.54-16.29V492.71c.51-5.3,1.13-10.58,1.52-15.89A436.78,436.78,0,0,1,84,373,451.34,451.34,0,0,1,368.54,85.49a439.38,439.38,0,0,1,108.28-22c5.31-.39,10.59-1,15.89-1.52h38.58c1.64.28,3.26.65,4.9.81,14.34,1.42,28.77,2.2,43,4.3a439.69,439.69,0,0,1,140.52,45.62c57.3,29.93,106.14,70.19,146,121.07Q949,340.12,960.52,474.86c.4,4.64,1,9.27,1.48,13.91v46.46a22.06,22.06,0,0,0-.7,3.36,426.12,426.12,0,0,1-10.51,74.23C930,702,886.41,778.26,819.48,840.65c-75.94,70.81-166,110.69-269.55,119.84C545.29,960.91,540.65,961.49,536,962Z" fill="#e60023"/></g></svg> 1299 1300 1301 1302 </a> 1303 1304 1305 1306 1307 1308 <a target="_blank" href="//social-plugins.line.me/lineit/share?url=https://www.tofu5688.com/products/è ¸æºé´¨è¡èè±è " class="share-line"> 1309 1310 1311 1312 1313 <svg class="line-share-icon-svg circle-share-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><title>LINE</title><g id="Layer_1" data-name="Layer 1"><circle cx="512" cy="512" r="450" fill="#00b900"/><g id="TYPE_A" data-name="TYPE A"><path d="M811.32,485c0-133.94-134.27-242.9-299.32-242.9S212.68,351,212.68,485c0,120.07,106.48,220.63,250.32,239.65,9.75,2.1,23,6.42,26.37,14.76,3,7.56,2,19.42,1,27.06,0,0-3.51,21.12-4.27,25.63-1.3,7.56-6,29.59,25.93,16.13s172.38-101.5,235.18-173.78h0c43.38-47.57,64.16-95.85,64.16-149.45" fill="#fff"/><path d="M451.18,420.26h-21a5.84,5.84,0,0,0-5.84,5.82V556.5a5.84,5.84,0,0,0,5.84,5.82h21A5.83,5.83,0,0,0,457,556.5V426.08a5.83,5.83,0,0,0-5.83-5.82" fill="#00b900"/><path d="M595.69,420.26h-21a5.83,5.83,0,0,0-5.83,5.82v77.48L509.1,422.85a5.39,5.39,0,0,0-.45-.59l0,0a4,4,0,0,0-.35-.36l-.11-.1a3.88,3.88,0,0,0-.31-.26l-.15-.12-.3-.21-.18-.1-.31-.17-.18-.09-.34-.15-.19-.06c-.11-.05-.23-.08-.34-.12l-.21-.05-.33-.07-.25,0a3,3,0,0,0-.31,0l-.3,0H483.26a5.83,5.83,0,0,0-5.83,5.82V556.5a5.83,5.83,0,0,0,5.83,5.82h21a5.83,5.83,0,0,0,5.83-5.82V479l59.85,80.82a5.9,5.9,0,0,0,1.47,1.44l.07,0c.11.08.23.15.35.22l.17.09.28.14.28.12.18.06.39.13.09,0a5.58,5.58,0,0,0,1.49.2h21a5.83,5.83,0,0,0,5.84-5.82V426.08a5.83,5.83,0,0,0-5.84-5.82" fill="#00b900"/><path d="M400.57,529.66H343.52V426.08a5.81,5.81,0,0,0-5.82-5.82h-21a5.82,5.82,0,0,0-5.83,5.82V556.49h0a5.75,5.75,0,0,0,1.63,4,.34.34,0,0,0,.08.09l.09.08a5.75,5.75,0,0,0,4,1.63h83.88a5.82,5.82,0,0,0,5.82-5.83v-21a5.82,5.82,0,0,0-5.82-5.83" fill="#00b900"/><path d="M711.64,452.91a5.81,5.81,0,0,0,5.82-5.83v-21a5.82,5.82,0,0,0-5.82-5.83H627.76a5.79,5.79,0,0,0-4,1.64l-.06.06-.1.11a5.8,5.8,0,0,0-1.61,4h0v130.4h0a5.75,5.75,0,0,0,1.63,4,.34.34,0,0,0,.08.09l.08.08a5.78,5.78,0,0,0,4,1.63h83.88a5.82,5.82,0,0,0,5.82-5.83v-21a5.82,5.82,0,0,0-5.82-5.83h-57v-22h57a5.82,5.82,0,0,0,5.82-5.84v-21a5.82,5.82,0,0,0-5.82-5.83h-57v-22Z" fill="#00b900"/></g></g></svg> 1314 1315 1316 1317 </a> 1318 1319 1320</div> 1321 1322 1323 <hr class="hr--clear hr--small"> 1324 </div> 1325 1326 1327 </div> 1328 </div> 1329 1330 <div class="grid__item"> 1331 <link href="/assets/css/promotion.css?v2.94" rel="stylesheet" type="text/css" media="screen" /> 1332 <style> 1333.sf_promo-ribbon{ 1334 color: #4089e4; 1335 background-color: #4089e4 1336} 1337.sf_promo-ribbon-text, 1338.sf_promo-ribbon-text span{ 1339 color: #fff; 1340 color: #fff; 1341} 1342 1343</style> 1344 1345 1346 <div id="promotion-section" class="sf_promo-container"> 1347 <div id="sf_promo-container" > 1348 </div> 1349 <div class="text-center"> 1350 <button id="get-more-promotion" class="btn btn--secondary hide" onclick="getPromotionList(true)">ç覽æ´å¤</button> 1351 </div> 1352 </div> 1353 <div class="text-center"> 1354 <button id="view-more-promotion" class="btn btn--secondary hide" onclick="expandPromoSection()">ç覽æ´å¤</button> 1355 </div> 1356 1357
1358<script>var shop_money_format = "<span class=money data-ori-price='{{amount}}'>NT$ {{amount}} </span>";</script>
vendor: 1 bytes, line 1358
1358
1359<script src="/assets/js/promotion/promotion.js?v1.11" type="text/javascript"></script>
1359 1360
1361<script> 1362 1363 var param = {limit:5, page:1}; 1364 1365 function getPromotionList(load_more){ 1366 1367 var element = document.getElementById("sf_promo-container"), 1368 promo_section = document.getElementById("promotion-section"), 1369 promo_btn = document.getElementById("get-more-promotion"), 1370 view_more_btn = document.getElementById("view-more-promotion"), 1371 view_more_tag_btn = document.getElementById("sf_promo-view-more-tag"), 1372 page_value = parseInt(param.page); 1373 1374 if(load_more) { 1375 view_more_tag_btn.classList.add("sf_promo-is-loading"); 1376 promo_btn.classList.add("btn--loading"); 1377 } 1378 1379 $.ajax({ 1380 type: "GET", 1381 data: param, 1382 dataType: 'json', 1383 url: "/products/è ¸æºé´¨è¡èè±è /promotions", 1384 success: function(response){ 1385 1386 document.getElementById("sf_promo-container").innerHTML += response.html; 1387 1388 1389 var promotion_tag_html = ""; 1390 var promotion_tag_label_html = ""; 1391 1392 var total_addon_discount = 0; 1393 1394 if(response.data.total_promotions > 0){ 1395 promotion_tag_label_html += `<div style="display:block;"><label>é©ç¨åªæ </label></div>`; 1396 1397 for (let promotion of response.data.promotions) { 1398 var label_class = "sf_promo-label-unclickable", 1399 svg_icon = ""; 1400 if(promotion.promotion_applies_to == "add_on_item" && (promotion.is_free_gift == false || promotion.prerequisite_subtotal_range == null)) { 1401 total_addon_discount += 1; 1402 label_class = "sf_promo-label-clickable"; 1403 svg_icon = `<svg class="sf_promo-svg-icon" xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-chevron-right" viewBox="0 0 24 24" stroke-width="2.8" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> 1404 <path stroke="none" d="M0 0h24v24H0z" fill="none"/> 1405 <polyline points="9 6 15 12 9 18" /> 1406 </svg>`; 1407 } 1408 promotion_tag_html += 1409 ` <a onclick="promoScrollToView('${promotion.id}')" class="sf_promo-promo-label ${label_class}"> 1410 <b class="sf_promo-tag-label-title">${promotion.title.replace('&', '&').replace('>','>').replace('<','<').replace('/','/').replace('â', '"').replace("'","'") }</b>${svg_icon} 1411 </a> 1412 `; 1413 } 1414 } 1415 1416 if(total_addon_discount > 1 && !load_more){ 1417 promo_section.classList.add('sf_promo-container-height-opacity','sf_promo-container-white-gradient') 1418 view_more_btn.classList.remove("hide"); 1419 }else{ 1420 promo_section.classList.remove('sf_promo-container-height-opacity','sf_promo-container-white-gradient') 1421 view_more_btn.classList.add("hide"); 1422 } 1423 1424 if(response.data.page_count > param.page) { 1425 view_more_tag_btn.classList.remove("hide"); 1426 promo_btn.classList.remove("hide"); 1427 }else{ 1428 view_more_tag_btn.classList.add("hide"); 1429 promo_btn.classList.add("hide"); 1430 } 1431 1432 document.getElementById("sf_promo-tag-label").innerHTML = promotion_tag_label_html; 1433 document.getElementById("sf_promo-tag").innerHTML += promotion_tag_html; 1434 1435 view_more_tag_btn.classList.remove("sf_promo-is-loading"); 1436 promo_btn.classList.remove("btn--loading"); 1437 1438 1439 promoVariantDetailInitial() 1440 1441 page_value = isNaN(page_value) ? 0 : page_value; 1442 page_value++; 1443 1444 param.page = page_value; 1445 }, 1446 error: function(xhr){ 1447 1448 } 1449 }); 1450 } 1451 1452 var is_show_product_page = "1" 1453 1454 if(is_show_product_page){ 1455 getPromotionList(); 1456 } 1457</script>
1457 1458 1459 <div class="product-description rte" itemprop="description"> 1460 <link href='/assets/css/froala_style.min.css' rel='stylesheet' type='text/css'/><div class='fr-view'><p style="text-align: center;"><img src="https://cdn.store-assets.com/s/825767/f/7837591.jpeg" alt="è ¸æºé´¨è¡èè±è (1).jpg" title="è ¸æºé´¨è¡èè±è (1).jpg" class="fr-fic fr-dii"><br></p></div> 1461 </div> 1462 1463 1464 </div> 1465 </div> 1466 </div> 1467 1468 1469 <div id="recommend-products-content" class="wrapper"> 1470</div>
1471<script> 1472 $(function() { 1473 console.log("Product recommendation enabled."); 1474 $.ajax({ 1475 url: "/products/è ¸æºé´¨è¡èè±è /recommend", 1476 type: 'GET', 1477 dataType: "json", 1478 success: function(res){ 1479 if(res.status == "success"){ 1480 console.log("Success"); 1481 $('#recommend-products-content').html(res.html); 1482 theme.cache.$productGridImages = $('body').find('.grid-link__image--product'); 1483 theme.equalHeights(); 1484 1485 var allCookies = document.cookie.split(";"); 1486 var cookies = {}; 1487 for (var i=0; i<allCookies.length; i++){ 1488 var pair = allCookies[i].split("="); 1489 cookies[(pair[0]+'').trim()] = unescape(pair[1]); 1490 } 1491 var shopCurrency = 'TWD'; 1492 var selectedCurrency = cookies['currency'] != undefined ? cookies['currency'] : 'TWD'; 1493 Currency.convertAll(shopCurrency, selectedCurrency); 1494 } 1495 else{ 1496 console.log("Not Success"); 1497 } 1498 }, 1499 fail: function(){ 1500 console.log("Failed"); 1501 } 1502 }); 1503 }); 1504</script>
1504 1505 1506 1507 1508 1509</div> 1510 1511 1512 1513
1514<script src="https://store-themes.easystore.co/825767/themes/2877/assets/jquery.flexslider.min.js?t=1787076075" type="text/javascript" ></script>
1514 1515
1516<script type="text/javascript"> 1517 $(".flexslider").addClass("transparent"); 1518 var mobileSize = true; 1519 if(window.innerWidth > 768){ 1520 mobileSize = false; 1521 } 1522 window.timberSlider = window.timberSlider || {}; 1523 1524 timberSlider.cacheSelectors = function () { 1525 timberSlider.cache = { 1526 $slider: $('.flexslider') 1527 } 1528 }; 1529 1530 timberSlider.init = function () { 1531 timberSlider.cacheSelectors(); 1532 timberSlider.sliders(); 1533 $(".flexslider").removeClass("transparent"); 1534 1535 }; 1536 1537 timberSlider.sliders = function () { 1538 var $slider = timberSlider.cache.$slider, 1539 sliderArgs = { 1540 animation: 'slide', 1541 animationSpeed: 500, 1542 pauseOnHover: true, 1543 keyboard: false, 1544 slideshow: false, 1545 slideshowSpeed: '4000', 1546 smoothHeight: false, 1547 touch: true, 1548 animationLoop: false, 1549 controlNav: true , 1550 }; 1551 1552 if ($slider.length) { 1553 1554 if ($slider.find('li').length === 1) { 1555 sliderArgs.slideshow = false; 1556 sliderArgs.slideshowSpeed = 0; 1557 sliderArgs.controlNav = false; 1558 sliderArgs.directionNav = false;
1559 } 1560 1561 $slider.flexslider(sliderArgs); 1562 } 1563 }; 1564 1565 1566 // Initialize slider on doc ready 1567 1568 $(document).ready(function() { 1569 timberSlider.init(); 1570 }); 1571 1572</script>
1572 1573 1574 1575 1576 1577
1577<script src="/assets/option_selection_tag.js?v2" type="text/javascript" ></script>
1577 1578 1579
1580<script> 1581 $(document).ready(function(){ 1582 // Hide the add to cart button when price less than 0 1583 var money = $("#ProductPrice").find(".money").text(); 1584 var price = Number(money.replace(/[^0-9\.]+/g,"")); 1585 var d = $("[data-addtocart]").data("addtocart"); 1586 var app_currency = $( "[name='currencies'] option:selected" ).val(); 1587 d.currency = app_currency; 1588 1589 1590 1591 view_cart = "æ¥çè³¼ç©è»"; 1592 continue_shopping = "ç¹¼çºè³¼ç©"; 1593 1594 $("#Quantity").change(function(){ 1595 var d = $("[data-addtocart]").data("addtocart"); 1596 var new_val = $(this).val(); 1597 var app_currency = $( "[name='currencies'] option:selected" ).val(); 1598 1599 d.currency = app_currency; 1600 d.quantity = new_val; 1601 $("[data-addtocart]").data("addtocart",d); 1602 }); 1603 1604 $("body").on("change",".single-option-selector",function(){ 1605 1606 var money = $("#ProductPrice").find(".money").text(); 1607 var price = Number(money.replace(/[^0-9\.]+/g,"")); 1608 var app_currency = $( "[name='currencies'] option:selected" ).val(); 1609 var v = ""; 1610 $(".single-option-selector input:checked").each(function( index ) { 1611 v += ","+ $(this).val(); 1612 }); 1613 1614 d.variant = v.substring(1); 1615 d.price = price; 1616 d.currency = app_currency; 1617 1618 if(price <= 0){ 1619 $(".addToCart-btn, .BuyNowButton").hide(); 1620 $("#floating_action-bar").hide(); 1621 $(".product-single__quantity").addClass('is-hide'); 1622 }else{ 1623 $(".addToCart-btn, .BuyNowButton").show(); 1624 $("#floating_action-bar").show(); 1625 $(".product-single__quantity").removeClass('is-hide'); 1626 $("[data-addtocart]").data("addtocart",d); 1627 } 1628 1629 }); 1630 1631 // retrieve & store view history in local storage 1632 var productViewHistoryData = []; 1633 var storedProductViewHistory = localStorage.getItem('productViewHistory'); 1634 1635 if(storedProductViewHistory !== null) { 1636 productViewHistoryData = JSON.parse(storedProductViewHistory); 1637 } 1638 1639 if(productViewHistoryData.length > 0) { 1640 var currentViewedProduct = {"product_id":6461939,"viewed_at":"2026-10-08T05:56:13.845+08:00"} 1641 var currentViewedAt = new Date(currentViewedProduct.viewed_at); 1642 var matchProductID = false; 1643 1644 productViewHistoryData.forEach(data => { 1645 // Check if product_id is similar 1646 if (data.product_id == currentViewedProduct.product_id) { 1647 var previousViewedAt = new Date(data.viewed_at); 1648 if (currentViewedAt > previousViewedAt) { 1649 data.viewed_at = currentViewedProduct.viewed_at; 1650 } 1651 matchProductID = true; 1652 } 1653 }); 1654 1655 // sort "viewed_at" desc 1656 productViewHistoryData.sort((a, b) => { 1657 var viewedAt1 = new Date(a.viewed_at); 1658 var viewedAt2 = new Date(b.viewed_at); 1659 return viewedAt2 - viewedAt1; 1660 }); 1661 1662 if (!matchProductID) { 1663 productViewHistoryData.unshift(currentViewedProduct); 1664 } 1665 } 1666 else { 1667 productViewHistoryData.push({"product_id":6461939,"viewed_at":"2026-10-08T05:56:13.845+08:00"}); 1668 } 1669 1670 productViewHistoryData = JSON.stringify(productViewHistoryData); 1671 localStorage.setItem('productViewHistory', productViewHistoryData); 1672 1673 // End - retrieve & store view history in local storage 1674 }); 1675 1676EasyStore.money_format = "<span class=money data-ori-price='{{amount}}'>NT$ {{amount}} </span>"; 1677var selectCallback = function(variant, selector) { 1678 // console.log('variant, selector',variant, selector); 1679 timber.productPage({ 1680 money_format: "<span class=money data-ori-price='{{amount}}'>NT$ {{amount}} </span>", 1681 variant: variant, 1682 selector: selector, 1683 translations: { 1684 add_to_cart : "å å ¥è³¼ç©è»", 1685 sold_out : "<span style='font-size:14px;'>å®å®</span>", 1686 unavailable : "æ«ç¡ä¾æ" 1687 } 1688 }); 1689}; 1690 1691jQuery(function($) { 1692 // new EasyStore.OptionSelectors('productSelectTag', { 1693 // product: {"id":6461939,"handle":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","name":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","url":"\/products\/\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","share_url":"https:\/\/www.tofu5688.com\/products\/\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","price":300,"price_min":"300.0","price_max":"300.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":[{"name":"\u4eba\u6c23NO.1","position":1,"values":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","\u8178\u65fa\u81ed\u8c46\u8150"]}],"options_by_name":{"\u4eba\u6c23NO.1":{"name":"\u4eba\u6c23NO.1","position":1,"values":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","\u8178\u65fa\u81ed\u8c46\u8150"]}},"options":["\u4eba\u6c23NO.1"],"has_only_default_variant":false,"sole_variant_id":null,"variants":[{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},{"id":29534347,"title":"\u8178\u65fa\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null}],"selected_variant":{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},"first_available_variant":{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},"selected_or_first_available_variant":{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},"img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","
1693img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"},"secondary_image":{"alt":"","img_url":"","src":"","type":""},"images":[{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"}],"media":[{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"}],"featured_media":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"},"metafields":[],"expires":null,"published_at":"2021-11-12T19:28:00.000+08:00","created_at":"2021-11-12T19:28:38.000+08:00","is_wishlisted":null,"content":"<link href='\/assets\/css\/froala_style.min.css' rel='stylesheet' type='text\/css'\/><div class='fr-view'><p style=\"text-align: center;\"><img src=\"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7837591.jpeg\" alt=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" title=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" class=\"fr-fic fr-dii\"><br><\/p><\/div>","description":"<link href='\/assets\/css\/froala_style.min.css' rel='stylesheet' type='text\/css'\/><div class='fr-view'><p style=\"text-align: center;\"><img src=\"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7837591.jpeg\" alt=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" title=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" class=\"fr-fic fr-dii\"><br><\/p><\/div>","meta_description":null,"brands":[],"tags":[],"vendor":null,"collections":[{"handle":"feature-on-homepage","title":"\u71b1\u9580\u5546\u54c1"}],"highlight":{"data":null,"state":null,"is_auto_generation_required":false},"common_questions":{"data":null,"state":null,"is_auto_generation_required":false},"view_history":{"product_id":6461939,"viewed_at":"2026-10-08T05:56:13.845+08:00"},"cache_source":"live_api","promotions":[]} 1694 // }); 1695 new EasyStore.OptionSelectors('productSelect', { 1696 product: {"id":6461939,"handle":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","name":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","url":"\/products\/\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","share_url":"https:\/\/www.tofu5688.com\/products\/\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","price":300,"price_min":"300.0","price_max":"300.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":[{"name":"\u4eba\u6c23NO.1","position":1,"values":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","\u8178\u65fa\u81ed\u8c46\u8150"]}],"options_by_name":{"\u4eba\u6c23NO.1":{"name":"\u4eba\u6c23NO.1","position":1,"values":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","\u8178\u65fa\u81ed\u8c46\u8150"]}},"options":["\u4eba\u6c23NO.1"],"has_only_default_variant":false,"sole_variant_id":null,"variants":[{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},{"id":29534347,"title":"\u8178\u65fa\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null}],"selected_variant":{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},"first_available_variant":{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},"selected_or_first_available_variant":{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},"img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","
1696img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"},"secondary_image":{"alt":"","img_url":"","src":"","type":""},"images":[{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"}],"media":[{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"}],"featured_media":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"},"metafields":[],"expires":null,"published_at":"2021-11-12T19:28:00.000+08:00","created_at":"2021-11-12T19:28:38.000+08:00","is_wishlisted":null,"content":"<link href='\/assets\/css\/froala_style.min.css' rel='stylesheet' type='text\/css'\/><div class='fr-view'><p style=\"text-align: center;\"><img src=\"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7837591.jpeg\" alt=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" title=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" class=\"fr-fic fr-dii\"><br><\/p><\/div>","description":"<link href='\/assets\/css\/froala_style.min.css' rel='stylesheet' type='text\/css'\/><div class='fr-view'><p style=\"text-align: center;\"><img src=\"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7837591.jpeg\" alt=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" title=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" class=\"fr-fic fr-dii\"><br><\/p><\/div>","meta_description":null,"brands":[],"tags":[],"vendor":null,"collections":[{"handle":"feature-on-homepage","title":"\u71b1\u9580\u5546\u54c1"}],"highlight":{"data":null,"state":null,"is_auto_generation_required":false},"common_questions":{"data":null,"state":null,"is_auto_generation_required":false},"view_history":{"product_id":6461939,"viewed_at":"2026-10-08T05:56:13.845+08:00"},"cache_source":"live_api","promotions":[]}, 1697 onVariantSelected: selectCallback, 1698 enableHistoryState: false 1699 }); 1700 1701 // Add label if only one product option and it isn't 'Title'. Could be 'Size'. 1702 1703 $('.selector-wrapper:eq(0)').prepend('<label for="productSelect-option-0">人氣NO.1</label>'); 1704 1705 1706 // Hide selectors if we only have 1 variant and its title contains 'Default'. 1707 1708}); 1709 1710 1711// $('body').on("click", ".selector-wrapper", function(event) { 1712// console.log($(this).find('.single-option-selector').eq(1)); 1713// // $(this).find('select').eq(1).focus(); 1714// $(this).find('.single-option-selector').eq(0).focus(); 1715// event.preventDefault(); 1716// }); 1717 1718// BuyNow START 1719 1720if($('#BuyNowButton').length){ 1721 var buyNowText = $('#BuyNowButton').text(), 1722 buyNowCSS = $('#BuyNowButton').attr('style'); 1723 $('#MobileAddToCart').before( "<a class='BuyNowButton btn btn--secondary' style='"+ buyNowCSS +"'>"+ buyNowText +"</a>" ); 1724} 1725$("body").on("click",".BuyNowButton",function(){ 1726 // Check required field validation for product properties 1727 var requiredFields = $("input[name^='properties'][required], select[name^='properties'][required]"); 1728 for (var i = 0; i < requiredFields.length; i++) { 1729 if (!requiredFields[i].checkValidity()) { 1730 requiredFields[i].reportValidity(); 1731 return false; 1732 } 1733 } 1734 1735 $(this).addClass('btn--loading'); 1736 var v_id = Number($('#productSelect').val()), 1737 v_qty = Number($('#Quantity').val()), 1738 token = 'BidbUr9h69dW9byqrxFixkcy0KLvlYMaik1E9qEy', 1739 currency = $( "[name='currencies'] option:selected" ).val(); 1740 input_properties = null, 1741 select_properties = null, 1742 app_id = null; 1743 1744 input_properties = $("input[name^='properties']"); 1745 select_properties = $("select[name^='properties']"); 1746 app_id = $( "input[name='app_id']" ).val(); 1747 1748 let propertiesParam = {}; 1749 1750 for( i = 0; i < input_properties.length ; i++){ 1751 1752 let type = input_properties[i].type; 1753 let name = input_properties[i].name; 1754 let value = input_properties[i].value; 1755 1756 name = name.slice(11, name.length - 1); 1757 1758 if(type == 'radio'){ 1759 1760 let isChecked = input_properties[i].checked; 1761 1762 if(isChecked == true){ 1763 1764 propertiesParam[name] = value; 1765 1766 } 1767 1768 } 1769 else{ 1770 1771 propertiesParam[name] = value; 1772 1773 } 1774 1775 } 1776 1777 for( i = 0; i < select_properties.length ; i++){ 1778 1779 let name = select_properties[i].name; 1780 let value = select_properties[i].value; 1781 1782 name = name.slice(11, name.length - 1); 1783 propertiesParam[name] = value; 1784 1785 } 1786 1787 let dataParam = { 1788 id: v_id, 1789 quantity: v_qty, 1790 _token: token 1791 }; 1792 1793 if(Object.keys(propertiesParam).length > 0){ 1794 1795 dataParam.properties = propertiesParam; 1796 1797 if(app_id){ 1798 1799 dataParam.app_id = app_id; 1800 1801 } 1802 } 1803 1804 $.ajax({ 1805 type: "POST", 1806 dataType: 'json', 1807 url: "/cart/add?retrieve=true", 1808 data: dataParam, 1809 success: function(response){ 1810 console.log('success',response); 1811 1812 var data_id = [], 1813 data_qty = [], 1814 cartCount = $('.cart-count'), 1815 cartItems = response.items; 1816 1817 $.each(cartItems, function( index, b ) { 1818 1819 if(b.promotion_id != undefined){ 1820 $.each(b.items, function( index, c ) { 1821 if(v_id != c.variant.id){ 1822 data_id.push(c.variant.id); 1823 data_qty.push(0); 1824 } 1825 }); 1826 } 1827 else if(v_id != b.variant_id){ 1828 1829 data_id.push(b.variant_id); 1830 data_qty.push(0); 1831 1832 } 1833 1834 }); 1835 1836 data_id.push(v_id); 1837 data_qty.push(v_qty); 1838 1839 1840 cartCount.text(response.item_count); 1841 1842 $.ajax({ 1843 type: "POST", 1844 dataType: 'json', 1845 url: "/cart", 1846 data:{ 1847 _token: token, 1848 ids: data_id, 1849 updates: data_qty, 1850 checkout: '', 1851 current_currency: currency 1852 }, 1853 success: function(response){ 1854 console.log('success',response); 1855 1856 if(response.status == 'success'){ 1857 window.location.href = '/checkout/index'; 1858 }else{ 1859 window.location.href = '/cart'; 1860 } 1861 }, 1862 error: function(xhr){ 1863 console.log('error',xhr); 1864 window.location.href = '/cart'; 1865 } 1866 }); 1867 1868 }, 1869 error: function(xhr){ 1870 console.log('error',xhr); 1871 $('.BuyNowButton').removeClass('btn--loading'); 1872 1873 var data = eval('(' + xhr.responseText + ')'), 1874 response = data.description; 1875 1876 $('#BuyNowButtonError').remove(); 1877 $('#BuyNowButton').before('<p id="BuyNowButtonError" class="note errors">'+response+'</p>'); 1878 1879 } 1880 }); 1881 1882}); 1883 1884 1885 1886$( document ).ready(function() { 1887 function checkProduct(){ 1888 var money = $("#ProductPrice").find(".money").text(), 1889 price = Number(money.replace(/[^0-9\.]+/g,"")), 1890 disabled = $('#AddToCart').attr('disabled'); 1891 1892 if(!$('#productSelect').val() || price <= 0 || disabled != undefined){ 1893 $( ".BuyNowButton" ).hide(); 1894 }else{ 1895 $( ".BuyNowButton" ).show(); 1896 } 1897 };checkProduct(); 1898 1899 $("body").on("change",".single-option-selector",function(){ 1900 checkProduct(); 1901 }); 1902}); 1903// BuyNow END 1904 1905$( document ).ready(function() { 1906 var winScroll = $(this).scrollTop(), 1907 addToCartBtn = $('#AddToCart'), 1908 topAddToCartBtn = $('.top-addToCart-btn'), 1909 headerBarHeight = $('.header-bar').height(); 1910 1911 1912 1913 $(window).scroll(function(){ 1914 var winScroll = $(this).scrollTop(); 1915 1916 if(winScroll > (addToCartBtn.offset().top * 1.2) && topAddToCartBtn.length){ 1917 topAddToCartBtn.removeClass('hide'); 1918 topAddToCartBtn.css('top', (headerBarHeight + 40) + 'px'); 1919 }else{ 1920 topAddToCartBtn.addClass('hide'); 1921 } 1922 1923 }); 1924 1925 if(window.innerWidth > 768 && $('.flexslider-has-thumbs').length){ 1926 var slider_thumbs_child = $(".flex-control-thumbs li").length; 1927 var slider_thumbs_height = ((slider_thumbs_child / 6) * 80) + 80 ; 1928 $(".product-slider.flexslider-has-thumbs").css("margin-bottom", slider_thumbs_height); 1929 1930 $("body").on("mouseover",".flex-control-thumbs img",function(){ 1931 $(this).trigger( "click" ); 1932 }); 1933 } 1934}); 1935 1936function zoomIn(event) { 1937 if(window.innerWidth > 768){ 1938 var element = document.getElementById("overlayZoom"); 1939 element.style.display = "inline-block"; 1940 var img = $(".flex-active-slide img"); 1941 var posX = event.offsetX ? (event.offsetX) : event.pageX - img.offsetLeft; 1942 var posY = event.offsetY ? (event.offsetY) : event.pageY - img.offsetTop; 1943 element.style.backgroundPosition = (-posX ) + "px " + (-posY ) + "px"; 1944 element.style.backgroundImage = "url('" + img.attr("src") + "')"; 1945 element.style.width = img.width() + "px";
1946 element.style.height = img.height() + "px"; 1947 element.className = "active"; 1948 } 1949} 1950 1951function zoomOut() { 1952 var element = document.getElementById("overlayZoom"); 1953 element.style.display = "none"; 1954 element.className = ""; 1955} 1956 1957$('body').on("click", ".product-single__btn-qty-adjust", function() { 1958 1959 var $button = $(this); 1960 var oldValue = $button.parent().find("input.cart__quantity-selector").val(); 1961 1962 if ($button.attr('data-adjust') == 1) { 1963 var newVal = parseFloat(oldValue) + 1; 1964 } else { 1965 // Don't allow decrementing below zero 1966 if (oldValue > 1) { 1967 var newVal = parseFloat(oldValue) - 1; 1968 } else { 1969 newVal = 1; 1970 } 1971 } 1972 1973 $button.parent().find("input.cart__quantity-selector").val(newVal); 1974 1975}); 1976 1977</script>
1977 1978 1979 1980 1981 </div> 1982 </div> 1983 1984 1985 1986 </main> 1987 1988 <footer class="site-footer small--text-center" role="contentinfo"> 1989 1990 1991 1992 <div class="wrapper"> 1993 1994 <div class="grid-uniform"> 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 <div class="grid__item large--one-half "> 2016 <a href="/" class="logo-wrapper" itemprop="url" > 2017 2018 <img style="max-width: 100px" src="https://cdn.store-assets.com/s/825767/f/7820814.png?width=350&format=webp" alt="æ·±å大樹ä¸" itemprop="logo"> 2019 2020 </a> 2021 <p class="site-footer__links">© 2026 æ·±å大樹ä¸. Powered by <a href="http://www.easystore.co/?utm_source=storefront&utm_medium=sf_ref_footer&utm_campaign=sf_ref">EasyStore</a></p> 2022 </div> 2023 2024 2025 2026 2027 <div class="grid__item large--one-half"> 2028 <h4>éæ³¨æå</h4> 2029 2030 <ul class="inline-list social-icons"> 2031 2032 2033 <li> 2034 <a class="icon-fallback-text" href="https://www.facebook.com/dofu5688" title="æ·±å大樹ä¸å¨Facebookä¸" target="_blank"> 2035 2036 2037 2038 2039 <svg xmlns="http://www.w3.org/2000/svg" class="facebook-icon-svg social-icon-svg" viewBox="0 0 1024 1024"> 2040 <title>icon-facebook</title> 2041 <path d="M837.66,223.9a33.73,33.73,0,0,0-3.11-15c-6.78-13.85-17.87-21.09-33.37-21.09q-288.46,0-576.91,0c-.62,0-1.24,0-1.85,0a34.51,34.51,0,0,0-25.88,12.11c-6.31,7.13-8.85,15.57-8.85,25.07q.08,287.7,0,575.4c0,1,0,1.9,0,2.86A32.93,32.93,0,0,0,190,814.71c4.45,11.79,16.3,23.11,35,23.1q153.61-.1,307.24,0c2.36,0,2.36,0,2.36-2.37q0-123.3,0-246.6c0-2.55,0-2.55-2.53-2.55H452.27c-2.26,0-2.26,0-2.26-2.17v-96.3h84.63v-2.46c0-22.12-.11-44.24.06-66.36.07-8.29.57-16.59,1.28-24.85a129.58,129.58,0,0,1,7.43-33c10.86-30,30.59-51.74,60-64.51A133.44,133.44,0,0,1,653,285.82c12.45-.37,24.93,0,37.38.34,9.64.27,19.27.95,28.9,1.6,5.36.36,10.7,1.07,16.06,1.5,1.46.12,1.65.75,1.65,2q0,42.2,0,84.39c0,.59-.06,1.18-.09,1.85h-2.39c-16.28,0-32.56,0-48.84.05-7.63,0-15.23.54-22.65,2.61-11.61,3.23-19.86,10.09-23.65,21.78a55.66,55.66,0,0,0-2.74,16.86c-.14,22.23-.1,44.47-.13,66.7,0,2.25,0,2.25,2.31,2.25h94.66a15.13,15.13,0,0,1,0,1.54c-.38,2.94-.81,5.88-1.18,8.82-1.17,9.16-2.3,18.33-3.48,27.5-1.29,10-2.63,20-3.94,30-1.23,9.44-2.43,18.88-3.67,28.32-.31,2.32-.35,2.32-2.78,2.32h-79a4.62,4.62,0,0,0-1.67,0,2.5,2.5,0,0,0-1.2,1.16,3.68,3.68,0,0,0,0,1.49V835.21c0,2.56,0,2.56,2.53,2.56H797.83c2.13,0,4.27-.07,6.39-.21,11.56-.78,20.61-6.07,27.23-15.48,4.66-6.6,6.24-14.09,6.24-22.11q-.06-287.19,0-574.38Z" fill="#999"/> 2042 </svg> 2043 2044 2045 2046 <span class="fallback-text">Facebook</span> 2047 </a> 2048 </li> 2049 2050 2051 2052 <li> 2053 <a class="icon-fallback-text" href="https://www.instagram.com/" title="æ·±å大樹ä¸å¨Instagramä¸" target="_blank"> 2054 2055 2056 2057 2058 <svg xmlns="http://www.w3.org/2000/svg" class="instagram-icon-svg social-icon-svg" viewBox="0 0 1024 1024"> 2059 <title>icon-instagram</title> 2060 <path d="M834.35,341.22a231.23,231.23,0,0,0-9.59-46.45,166.71,166.71,0,0,0-52.17-78.33c-17-14.41-36.33-24.44-57.44-31.3-21.52-7-43.69-10.21-66.19-11.12-22.28-.9-44.58-1.73-66.87-1.85-47.68-.26-95.37-.16-143.06,0-27.47.11-54.95.69-82.32,3.39a220.7,220.7,0,0,0-37.43,6.95c-26.2,7.26-50,19-70.24,37.45-18.06,16.4-32.3,35.52-41.87,58.05-9.89,23.29-15.13,47.68-16.69,72.82-1.23,19.78-2.06,39.6-2.32,59.41-.38,28.91-.1,57.82-.1,86.73-.23,39.92-.67,79.85,1,119.76.72,17.66,1.57,35.3,4.6,52.76,3.22,18.52,8.32,36.51,16.71,53.34C232.83,768,268.81,797,317.12,811a246.28,246.28,0,0,0,59.24,9.11c25.3.95,50.63,1.78,75.95,1.94,43.83.28,87.66.1,131.5,0,26-.08,52.08-.72,78.06-2.74a234.52,234.52,0,0,0,45.76-8c24.54-6.92,46.82-18.12,66.22-34.79,24.65-21.17,41.5-47.44,51.3-78.36,6.7-21.14,9.83-42.88,10.73-64.94.9-21.84,1.73-43.69,1.82-65.55q.33-78.21-.15-156.44C837.42,387.82,836.72,364.47,834.35,341.22Zm-55.3,232.84c-.12,20.41-1,40.84-2,61.24-1,19.2-4.13,38.08-11.74,55.92q-18.43,43.24-62.47,60c-14.36,5.48-29.3,8.3-44.55,9.53-27.07,2.18-54.21,2.63-81.36,2.73-21.31.07-42.62,0-63.93,0v-.16c-28.47,0-56.94.22-85.4-.09-17.5-.18-35-1-52.49-1.89-19.94-1-39.51-4.31-57.95-12.38q-41.6-18.2-58-60.68a162.37,162.37,0,0,1-9.95-45.62c-2-24.66-2.62-49.38-2.66-74.1-.09-50.88-.16-101.77.12-152.65.11-19,1-38.09,2-57.11a180,180,0,0,1,8.78-48.23c8.32-24.84,23.63-44.14,45.66-58.12,11.78-7.48,24.85-11.91,38.36-15,15.57-3.61,31.43-4.65,47.34-5.32,54.32-2.28,108.68-1.46,163-1.5,18.67,0,37.34.12,56,.56,15.84.38,31.7,1,47.51,2,18.33,1.18,36.27,4.59,53.19,12q41.67,18.25,58.1,60.83c5.67,14.7,8.64,30,9.91,45.63,2,25,2.63,50,2.67,75.09C779.25,475.82,779.35,524.94,779.05,574.06Z" fill="#999"/><path d="M513,330.12c-92-.34-167,74.55-167.08,166.87s74.71,167,167,167A166.86,166.86,0,0,0,679.77,497.12C679.87,405,605.46,330.45,513,330.12Zm-.29,275.31A108.38,108.38,0,1,1,621.21,497.15,108.38,108.38,0,0,1,512.7,605.43Z" fill="#999"/><path d="M686.47,284.5a39,39,0,1,0,38.92,39.14A39,39,0,0,0,686.47,284.5Z" fill="#999"/> 2061 </svg> 2062 2063 2064
2065 <span class="fallback-text">Instagram</span> 2066 </a> 2067 </li> 2068 2069 2070 2071 2072 2073 2074 2075 <li> 2076 <a class="icon-fallback-text" href="https://lin.ee/7epzJ9B" title="æ·±å大樹ä¸å¨Lineä¸" target="_blank"> 2077 2078 2079 2080 2081 <svg xmlns="http://www.w3.org/2000/svg" class="line-icon-svg social-icon-svg" viewBox="0 0 1024 1024"> 2082 <title>icon-line</title> 2083 <path d="M837.58,237.47c-15.8-26.86-38.14-46.42-66.73-58.78A128.73,128.73,0,0,0,734,168.78c-4.2-.47-8.42-.74-12.62-1.15a26.81,26.81,0,0,1-2.93-.63H306.1a21,21,0,0,1-3.19.65A141,141,0,0,0,193.7,227.18a136.92,136.92,0,0,0-24.4,60.54c-.5,3.45-.7,6.94-1.18,10.39a21.46,21.46,0,0,1-1.12,3.58V719.55a23.91,23.91,0,0,1,1.1,4.45,132.12,132.12,0,0,0,14.49,54.45c20.58,39.69,52.66,64.84,96.28,75.07a118.63,118.63,0,0,0,21.81,2.91,24.16,24.16,0,0,1,3.22.57H720.66a27.33,27.33,0,0,1,3.21-.57c39.53-2.53,72.32-18.87,98.47-48.43a136.51,136.51,0,0,0,32-65.32c1-4.85,1.26-9.82,1.91-14.73a24.25,24.25,0,0,1,.72-2.88V301.69a15.08,15.08,0,0,1-.69-2.9C855.25,276.76,848.7,256.38,837.58,237.47ZM753.76,544.74a189.6,189.6,0,0,1-23.32,42.11,208.16,208.16,0,0,1-32.15,34.76c-12.76,11.12-25.31,22.48-38.38,33.23-35.07,28.83-71.7,55.51-110.67,78.87-11.12,6.67-22.46,13-34.55,17.76a84.7,84.7,0,0,1-12.35,3.8c-7.29,1.65-11.22-1.26-11.62-8.72a53.45,53.45,0,0,1,.91-10.68c1-6.62,2.39-13.19,3.34-19.83a39.31,39.31,0,0,0-.35-14.26,19.77,19.77,0,0,0-11.3-14.11c-4.23-2-8.76-2.63-13.32-3.21a290.39,290.39,0,0,1-46-9.72c-31.07-9.18-59.84-23-85.77-42.53-26.73-20.1-48.32-44.61-63-74.85a170.66,170.66,0,0,1-17.05-78.18,163.09,163.09,0,0,1,10.07-52c9.7-26.44,25-49.27,44.73-69.19,21.9-22.09,47.44-38.86,75.76-51.51a289.28,289.28,0,0,1,59.46-19.08,260.46,260.46,0,0,1,31.59-4.72c5.31-.44,10.62-.92,15.94-1.22s10.65-.38,16-.56a339.27,339.27,0,0,1,36.88,2.27,290.8,290.8,0,0,1,77.23,19.51c31.72,12.85,60.21,30.74,84.43,55.11,18.57,18.67,33.22,40,43,64.52a172,172,0,0,1,12.08,63.78A164.42,164.42,0,0,1,753.76,544.74Z" fill="#999"/><path d="M569.52,425.37c-6,1.41-9.73,6.4-9.81,12.73-.08,5.62,0,11.23,0,16.84q0,18.63,0,37.26c0,.91.35,2-.72,2.89-.65-.81-1.25-1.5-1.79-2.22L537.86,467c-9.12-12.25-18.3-24.45-27.31-36.77-5.3-7.26-17.63-7.11-22.37.83a14.49,14.49,0,0,0-1.94,7.63q0,47.9,0,95.77c0,.55,0,1.11,0,1.66A13,13,0,0,0,492,546.28a13.78,13.78,0,0,0,8.7,2,12.25,12.25,0,0,0,10.14-5.75A13.27,13.27,0,0,0,513,535q0-26.91,0-53.82v-4a6,6,0,0,1,3,2.76q23,31.39,45.93,62.82c3.87,5.34,9.24,6.5,14.87,5.26a12.45,12.45,0,0,0,9.68-12.22c-.12-8.73,0-17.47,0-26.21,0-23.83-.07-47.66,0-71.49C586.46,430.63,580.05,422.88,569.52,425.37Z" fill="#999"/><path d="M634.92,451.78q15.18,0,30.35,0c1.28,0,2.57,0,3.86-.11a11.71,11.71,0,0,0,7.64-3.38c4.29-4.21,5-9.34,3.15-14.75s-6.18-8-11.81-8.46c-.91-.08-1.83,0-2.75,0h-45.8c-.83,0-1.66,0-2.48,0-6.18.33-11,4-12.41,9.55a23.69,23.69,0,0,0-.41,5.47q0,46.62,0,93.24c0,1.2,0,2.4.07,3.59a12.1,12.1,0,0,0,6.14,9.88,14.75,14.75,0,0,0,7.94,1.92q24,.06,48,0a22,22,0,0,0,5.69-.84c4.58-1.28,9.06-6.21,8.69-13.24-.3-5.93-4-10.89-9.7-12.24a20.57,20.57,0,0,0-4.65-.36c-10.48,0-21,0-31.45,0-1.25,0-2.49-.19-3.65-.28-.6-3.33-.48-19.09.17-21.34,1-.05,2.08-.15,3.16-.15,10.94,0,21.89-.12,32.83,0,7.09.1,15.12-5.73,13-16.47a12.57,12.57,0,0,0-12.66-10.21c-11-.05-22.07,0-33.1,0h-3.35c-.63-3.48-.52-19.31.12-21.54C632.58,451.93,633.75,451.78,634.92,451.78Z" fill="#999"/><path d="M414.9,521.65c-10.76,0-21.52,0-32.29,0h-3.84v-4.26c0-26.3,0-52.61,0-78.92a13.36,13.36,0,0,0-26.72-.65q.1,48.72,0,97.42a13,13,0,0,0,13,13.11c16.83-.14,33.67,0,50.5-.06a13.53,13.53,0,0,0,3.54-.38c10.55-2.9,11.23-14.46,7.49-20.26C423.89,523.39,419.8,521.66,414.9,521.65Z" fill="#999"/><path d="M466.59,436.12a18.43,18.43,0,0,0-2.09-5.59c-2.75-4.22-6.9-5.79-11.87-5.59a12.74,12.74,0,0,0-11.93,9.37,20.25,20.25,0,0,0-.41,4.93q0,23.6,0,47.19t0,47.47a19.84,19.84,0,0,0,.54,5.45c1.7,6,6.6,9.1,13.56,8.94a12.4,12.4,0,0,0,12.32-11.73c.07-1.1.06-2.21.06-3.31q0-46.5,0-93A17.09,17.09,0,0,0,466.59,436.12Z" fill="#999"/> 2084 </svg> 2085 2086 2087 2088 <span class="fallback-text">Line</span> 2089 </a> 2090 </li> 2091 2092 2093 2094</ul> 2095 2096 </div> 2097 2098 <div class="grid__item large--one-half"> 2099 æ·±å大樹ä¸è±è èåº 2100 <br> 2101 æ°å叿·±ååæ·±åè¡163è 2102 <br> 2103 02-2662-5688 2104 <br> 2105 LINEï¼ï¼ tofu5688 2106</div> 2107 </div> 2108 2109 <hr class="hr--small hr--clear"> 2110 2111 2112 2113 <div class="grid"> 2114 <div class="grid__item text-center"> 2115 2116 2117 <p class="site-footer__links"> 2118 2119 2120 2121 <a href="/legal/terms-of-service">æåæ¢æ¬¾</a> 2122 2123 2124 2125 2126 | <a href="/legal/privacy-policy">é±ç§æ¿ç</a> 2127 2128 2129 2130 2131 | <a href="/legal/refund-policy">鿬¾æ¿ç</a> 2132 2133 2134 2135 </p> 2136 2137 </div> 2138 </div> 2139 2140 </div> 2141 </footer> 2142 2143 2144 2145 2146 <div id="scrollTopButton" class="on-right" style="display: none"> 2147 <svg class="svg-icon" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2147<path d="M22,18.25a1.21,1.21,0,0,1-.88-.37L12,8.77,2.88,17.88a1.24,1.24,0,0,1-1.76-1.76l10-10a1.24,1.24,0,0,1,1.76,0l10,10a1.24,1.24,0,0,1,0,1.76A1.21,1.21,0,0,1,22,18.25Z"/></svg> 2148 </div> 2149
2149<script> 2150 $( document ).ready(function() { 2151 var winScroll = $(this).scrollTop(), 2152 this_el = $("#scrollTopButton"); 2153 2154 // Header bar 2155 if(winScroll > 400){ 2156 this_el.fadeIn(); 2157 }else{ 2158 this_el.fadeOut(); 2159 } 2160 2161 $("#scrollTopButton").click(function() { 2162 $('html,body').animate({ scrollTop: 0 }); 2163 }); 2164 2165 $(window).scroll(function(){ 2166 var winScroll = $(this).scrollTop(); 2167 2168 // Header bar 2169 if(winScroll > 400){ 2170 this_el.fadeIn(); 2171 }else{ 2172 this_el.fadeOut(); 2173 } 2174 2175 }); 2176 }); 2177 </script>
2177 2178 2179 2180 2181 2182 2183
2183<script src="https://store-themes.easystore.co/825767/themes/2877/assets/fastclick.min.js?t=1787076075" type="text/javascript" ></script>
2183 2184
2184<script src="https://store-themes.easystore.co/825767/themes/2877/assets/timber.js?v1.1?t=1787076075" type="text/javascript" ></script>
2184 2185
2185<script src="https://store-themes.easystore.co/825767/themes/2877/assets/theme.js?t=1787076075" type="text/javascript" ></script>
2185 2186 2187 2188 2189
2189<script src="https://store-themes.easystore.co/825767/themes/2877/assets/magnific-popup.min.js?t=1787076075" type="text/javascript" ></script>
2189 2190 2191 2192 2193 2194 2195
2195<script src="https://store-themes.easystore.co/825767/themes/2877/assets/social-buttons.js?t=1787076075" type="text/javascript" ></script>
2195 2196 2197 2198 2199 2200
2201<script src="/assets/currencies.js" type="text/javascript" ></script>
vendor: 1 bytes, line 2201
2201
2202<script src="/assets/jquery.currencies.min.js" type="text/javascript" ></script>
vendor: 1 bytes, line 2202
2202
2203<script src="/assets/currencies_format.js" type="text/javascript" ></script>
2203 2204
2205<script> 2206Currency.format = "money_with_currency_format"; 2207var shopCurrency = 'TWD'; 2208var selectedCurrency = ''; 2209 2210 2211 Currency.convert = function(amount, from, to) { 2212 return amount; 2213 }; 2214 2215 2216if( $.cookie("currency") == null ){ 2217 2218 if( selectedCurrency != false ) { 2219 2220 Currency.convertAll(shopCurrency, selectedCurrency); 2221 jQuery('.selected-currency').text(Currency.currentCurrency); 2222 2223 } 2224 2225} 2226 2227/* Sometimes merchants change their shop currency, let's tell our JavaScript file */ 2228// Currency.moneyFormats[shopCurrency].money_with_currency_format = ""; 2229// Currency.moneyFormats[shopCurrency].money_format = "NT$ {{amount}} "; 2230 2231/* Default currency */ 2232var defaultCurrency = 'TWD'; 2233 2234/* Cookie currency */ 2235var cookieCurrency = Currency.cookie.read(); 2236 2237 cookieCurrency = shopCurrency; 2238 2239$("input[name=current_currency]").val(cookieCurrency); 2240if(cookieCurrency == null){ 2241 cookieCurrency = shopCurrency; 2242 Currency.cookie.write(shopCurrency); 2243} 2244/* Fix for customer account pages */ 2245jQuery('span.money span.money').each(function() { 2246 jQuery(this).parents('span.money').removeClass('money'); 2247}); 2248/* Saving the current price */ 2249jQuery('span.money').each(function() { 2250 jQuery(this).attr('data-currency-TWD', jQuery(this).html()); 2251}); 2252// If there's no cookie. 2253if (cookieCurrency == null) { 2254 if (shopCurrency !== defaultCurrency) { 2255 Currency.convertAll(shopCurrency, defaultCurrency); 2256 } 2257 else { 2258 Currency.currentCurrency = defaultCurrency; 2259 } 2260} 2261// If the cookie value does not correspond to any value in the currency dropdown. 2262else if (jQuery('[name=currencies]').size() && jQuery('[name=currencies] option[value=' + cookieCurrency + ']').size() === 0) { 2263 Currency.currentCurrency = shopCurrency; 2264 Currency.cookie.write(shopCurrency); 2265} 2266else if (cookieCurrency === shopCurrency) { 2267 Currency.currentCurrency = shopCurrency; 2268 Currency.convertAll(shopCurrency, cookieCurrency); 2269} 2270else { 2271 Currency.convertAll(shopCurrency, cookieCurrency); 2272} 2273jQuery('[name=currencies]').val(Currency.currentCurrency).change(function() { 2274 var newCurrency = jQuery(this).val(); 2275 2276 2277 Currency.cookie.write(newCurrency) 2278 if ('product' == 'cart') { 2279 const params = new URLSearchParams(window.location.search); 2280 params.set('delete_cache', 1); 2281 window.location.search = params; 2282 } else { 2283 window.location.reload(); 2284 } 2285 2286}); 2287var original_selectCallback = window.selectCallback; 2288var selectCallback = function(variant, selector) { 2289 var currencies = null; 2290 original_selectCallback(variant, selector); 2291 if(typeof jQuery('[name=currencies]').val() == "undefined"){ 2292 currencies = shopCurrency; 2293 } 2294 else{ 2295 currencies = jQuery('[name=currencies]').val(); 2296 } 2297 Currency.convertAll(shopCurrency, currencies); 2298 jQuery('.selected-currency').text(Currency.currentCurrency); 2299}; 2300$('body').on('ajaxCart.afterCartLoad', function(cart) { 2301 Currency.convertAll(shopCurrency, jQuery('[name=currencies]').val()); 2302 jQuery('.selected-currency').text(Currency.currentCurrency); 2303}); 2304jQuery('.selected-currency').text(Currency.currentCurrency); 2305</script>
2305 2306 2307 2308
2308<script> 2309 2310 /* 2311 2312 ------ 2313 Events 2314 ------ 2315 2316 pages/viewed 2317 2318 customers/signup 2319 2320 customers/login 2321 2322 products/searched 2323 2324 collections/viewed 2325 2326 products/viewed 2327 2328 products/shared 2329 2330 wishlists/item_added 2331 2332 carts/items_added 2333 2334 carts/viewed 2335 2336 carts/item_removed 2337 2338 checkouts/initiated 2339 2340 checkouts/shipping_info_added 2341 2342 checkouts/payment_info_added 2343 2344 checkouts/completed 2345 2346 orders/placed 2347 2348 orders/purchased 2349 2350 payments/captured 2351 2352 payments/failed 2353 2354 */ 2355 2356 window.__latest_cart = window.__latest_cart || null; 2357 2358 const _selector = document.querySelector.bind(document), 2359 _selectorAll = document.querySelectorAll.bind(document) 2360 2361 document.addEventListener('DOMContentLoaded', (event) => { 2362 2363 const default_currency = getCookie("currency") 2364 const customer_id = window.__st.cid 2365 const template = window.__st.p 2366 2367 onPageView() 2368 2369 //-----------------------// 2370 // Configs // 2371 //-----------------------// 2372 2373 window.dataLayer = window.dataLayer || [] 2374 2375 Array.prototype.last = Array.prototype.last || function() { 2376 return this[this.length - 1] || null 2377 } 2378 2379 Array.prototype.first = Array.prototype.first || function() { 2380 return this[0] || null 2381 } 2382 2383 //----------------------// 2384 // Triggers // 2385 //----------------------// 2386 2387 const XHR = window.XMLHttpRequest 2388 2389 function xhr() { 2390 2391 const xhr = new XHR() 2392 2393 xhr.addEventListener("readystatechange", function() { 2394 2395 if(xhr.readyState != 4) return 2396 2397 try { 2398 2399 const response_url = xhr.responseURL 2400 2401 if (response_url.includes("cart/add")) { 2402 2403 window.__latest_cart = JSON.parse(xhr.response) 2404 2405 onCartItemsAdded() // ok 2406 2407 } 2408 2409 if (response_url.includes("cart/remove_item_quantity")) { 2410 2411 window.__latest_cart = JSON.parse(xhr.response) 2412 2413 onCartItemRemoved() // ok 2414 2415 } 2416 2417 if (response_url.includes("new_cart?retrieve=true")) { 2418 2419 result = JSON.parse(xhr.response) 2420 2421 if (result.cart) { 2422 window.__latest_cart = result.cart 2423 } 2424 2425 } 2426 2427 } catch(e) { 2428 2429 console.error(e) 2430 2431 } 2432 2433 }, false); 2434 2435 return xhr 2436 2437 } 2438 2439 window.XMLHttpRequest = xhr 2440 2441 switch(template) { 2442 2443 case 'cart': onCartView() // ok 2444 break 2445 case 'product': onProductView() // ok 2446 break 2447 case 'collection': onCollectionView() // ok 2448 break 2449 case 'blog': onBlogView() 2450 break 2451 case 'article': onArticleView() 2452 break 2453 case 'payment_completed': onOrderPlace() 2454 break 2455 case 'payment_fail': onPaymentFail() 2456 break 2457 2458 } 2459 2460 // _selector('form[action="/checkout/payments"]').addEventListener("submit", onPaymentInfoAdded(_selector('form[action="/checkout/payments"]'))) 2461 if (_selector('form[action="/checkout/detail"]')) _selector('form[action="/checkout/detail"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/detail"]'))}) // ok 2462 if (_selector('form[action="/checkout/shipping"]')) _selector('form[action="/checkout/shipping"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/shipping"]'))}) // ok 2463 if (_selector('form[action="/account/register"]')) _selector('form[action="/account/register"]').addEventListener("submit", onSignUp) // ok 2464 if (_selector('form[action="/account/login"]')) _selector('form[action="/account/login"]').addEventListener("submit", onLogin) // ok 2465 if (_selector('form[action="/search"]')) _selector('form[action="/search"]').addEventListener("submit", onProductSearch()) // ok 2466 if (_selector('#line-login-btn')) _selector('#line-login-btn').addEventListener('click', onLineLogin) // ok 2467 if (_selector('#PlaceOrder')) _selector('#PlaceOrder').addEventListener("click", ()=>{onCheckoutComplete(_selector('form[action="/checkout/payments"]'))}); // ok 2468 if (_selector('#add_wishlist')) _selector('#add_wishlist').addEventListener("click", onWishlistItemAdded) // ok 2469 if (_selectorAll('a[href="/account/logout"]')) _selectorAll('a[href="/account/logout"]').forEach(logoutButton => logoutButton.addEventListener("click", onLogout)) // ok 2470 if (_selector('.CartDrawerTrigger.cart-page-link')) _selector('.CartDrawerTrigger.cart-page-link').addEventListener("click", onCartView) // ok 2471 if (_selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link')) _selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link').addEventListener("click", onCartView) // ok 2472 if (_selectorAll('a[class^="share-"]')) _selectorAll('a[class^="share-"]').forEach(shareButton => shareButton.addEventListener("click", ()=>{onProductShare(shareButton)}) ) // ok 2473 if (_selectorAll('[name$="checkout"]')) _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate)) 2474 2475 // For append elements 2476 const bodyMutationObserver = new MutationObserver(() => { 2477 if (_selector('#form__spc #PlaceOrder')) _selector('#form__spc #PlaceOrder').addEventListener("click", onSinglePageCheckout) // ok 2478 if (_selectorAll('[name$="checkout"]')) _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate)) 2479 }); 2480 bodyMutationObserver.observe(_selector("body"), {subtree: true, childList: true}); 2481 2482 //------------------------------// 2483 // Event handlers // 2484 //------------------------------// 2485 2486 function onPageView() { 2487 2488 EasyStore.Event.dispatch('pages/viewed', { 2489 page: { 2490 type: template, 2491 title: document.title, 2492 description: _selector('meta[name=description]') ? _selector('meta[name=description]').getAttribute('content') : null, 2493 url: location.href, 2494 } 2495 }) 2496 2497 } 2498 2499 function onSignUp() { 2500 2501 const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/) 2502 const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/) 2503 2504 const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "") 2505 2506 let data = {} 2507 2508 if (email_regex.test(email_or_phone)) { 2509 data.method = 'email' 2510 data.email = email_or_phone 2511 } 2512 2513 if (phone_regex.test(email_or_phone)) { 2514 data.method = "phone" 2515 data.phone = email_or_phone 2516 } 2517 2518 if (!data.method) return 2519 2520 EasyStore.Event.dispatch('customers/signup', data) 2521 2522 } 2523 2524 function onLogin() { 2525 2526 const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/) 2527 const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/) 2528 2529 const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "") 2530 2531 let data = {} 2532 2533 if (email_regex.test(email_or_phone)) { 2534 data.method = 'email' 2535 data.email = email_or_phone 2536 } 2537 2538 if (phone_regex.test(email_or_phone)) { 2539 data.method = "phone" 2540 data.phone = email_or_phone 2541 } 2542 2543 if (!data.method) return 2544 2545 EasyStore.Event.dispatch('customers/login', data) 2546 2547 } 2548 2549 function onLineLogin() { 2550 2551 EasyStore.Event.dispatch('customers/login', { method: 'line' }) 2552 2553 } 2554 2555 function onLogout() { 2556 2557 EasyStore.Event.dispatch('customers/logout', { customer_id }) 2558 2559 } 2560 2561 function onBlogView() { 2562 2563 const blog = "" 2564 2565 EasyStore.Event.dispatch('blogs/viewed', { blog }) 2566 2567 } 2568 2569 function onArticleView() { 2570 2571 const article = "" 2572 2573 EasyStore.Event.dispatch('articles/viewed', { article }) 2574 2575 } 2576 2577 function onProductSearch() { 2578 2579 const query = _selector('input[name=q]').value 2580 2581 if (!query) return 2582 2583 EasyStore.Event.dispatch('products/searched', { query }) 2584 2585 } 2586 2587 function onCollectionView() { 2588 2589 const collection = {"id":2273233,"store_id":825767,"parent_id":0,"reference_id":null,"name":"\u71b1\u9580\u5546\u54c1","title":"\u71b1\u9580\u5546\u54c1","handle":"feature-on-homepage","image_url":null,"origin_image_url":null,"description":null,"body_html":null,"origin_body_html":null,"position":1,"is_locked":true,"is_published":true,"published_at":"2021-10-15T11:10:36.000+08:00","updated_at":"2023-10-07T07:04:56.000+08:00","created_at":"2021-10-15T11:10:36.000+08:00","url":"\/collections\/feature-on-homepage"} 2590 2591 EasyStore.Event.dispatch('collections/viewed', { collection }) 2592 2593 } 2594 2595 function onProductView() { 2596 2597 const product = {"id":6461939,"handle":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","name":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","url":"\/products\/\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","share_url":"https:\/\/www.tofu5688.com\/products\/\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","price":300,"price_min":"300.0","price_max":"300.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":[{"name":"\u4eba\u6c23NO.1","position":1,"values":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","\u8178\u65fa\u81ed\u8c46\u8150"]}],"options_by_name":{"\u4eba\u6c23NO.1":{"name":"\u4eba\u6c23NO.1","position":1,"values":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","\u8178\u65fa\u81ed\u8c46\u8150"]}},"options":["\u4eba\u6c23NO.1"],"has_only_default_variant":false,"sole_variant_id":null,"variants":[{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},{"id":29534347,"title":"\u8178\u65fa\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null}],"selected_variant":{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},"first_available_variant":{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},"selected_or_first_available_variant":{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},"img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","
2597img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"},"secondary_image":{"alt":"","img_url":"","src":"","type":""},"images":[{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"}],"media":[{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"}],"featured_media":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"},"metafields":[],"expires":null,"published_at":"2021-11-12T19:28:00.000+08:00","created_at":"2021-11-12T19:28:38.000+08:00","is_wishlisted":null,"content":"<link href=\u0027\/assets\/css\/froala_style.min.css\u0027 rel=\u0027stylesheet\u0027 type=\u0027text\/css\u0027\/><div class=\u0027fr-view\u0027><p style=\"text-align: center;\"><img src=\"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7837591.jpeg\" alt=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" title=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" class=\"fr-fic fr-dii\"><br><\/p><\/div>","description":"<link href=\u0027\/assets\/css\/froala_style.min.css\u0027 rel=\u0027stylesheet\u0027 type=\u0027text\/css\u0027\/><div class=\u0027fr-view\u0027><p style=\"text-align: center;\"><img src=\"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7837591.jpeg\" alt=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" title=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" class=\"fr-fic fr-dii\"><br><\/p><\/div>","meta_description":null,"brands":[],"tags":[],"vendor":null,"collections":[{"handle":"feature-on-homepage","title":"\u71b1\u9580\u5546\u54c1"}],"highlight":{"data":null,"state":null,"is_auto_generation_required":false},"common_questions":{"data":null,"state":null,"is_auto_generation_required":false},"view_history":{"product_id":6461939,"viewed_at":"2026-10-08T05:56:13.845+08:00"},"cache_source":"live_api","promotions":[]} 2598 2599 EasyStore.Event.dispatch("products/viewed", { product }) 2600 2601 } 2602 2603 function onProductShare(el) { 2604 2605 const product = {"id":6461939,"handle":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","name":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","url":"\/products\/\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","share_url":"https:\/\/www.tofu5688.com\/products\/\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","price":300,"price_min":"300.0","price_max":"300.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":[{"name":"\u4eba\u6c23NO.1","position":1,"values":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","\u8178\u65fa\u81ed\u8c46\u8150"]}],"options_by_name":{"\u4eba\u6c23NO.1":{"name":"\u4eba\u6c23NO.1","position":1,"values":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","\u8178\u65fa\u81ed\u8c46\u8150"]}},"options":["\u4eba\u6c23NO.1"],"has_only_default_variant":false,"sole_variant_id":null,"variants":[{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},{"id":29534347,"title":"\u8178\u65fa\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null}],"selected_variant":{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},"first_available_variant":{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},"selected_or_first_available_variant":{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},"img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","
2605img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"},"secondary_image":{"alt":"","img_url":"","src":"","type":""},"images":[{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"}],"media":[{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"}],"featured_media":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"},"metafields":[],"expires":null,"published_at":"2021-11-12T19:28:00.000+08:00","created_at":"2021-11-12T19:28:38.000+08:00","is_wishlisted":null,"content":"<link href=\u0027\/assets\/css\/froala_style.min.css\u0027 rel=\u0027stylesheet\u0027 type=\u0027text\/css\u0027\/><div class=\u0027fr-view\u0027><p style=\"text-align: center;\"><img src=\"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7837591.jpeg\" alt=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" title=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" class=\"fr-fic fr-dii\"><br><\/p><\/div>","description":"<link href=\u0027\/assets\/css\/froala_style.min.css\u0027 rel=\u0027stylesheet\u0027 type=\u0027text\/css\u0027\/><div class=\u0027fr-view\u0027><p style=\"text-align: center;\"><img src=\"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7837591.jpeg\" alt=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" title=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" class=\"fr-fic fr-dii\"><br><\/p><\/div>","meta_description":null,"brands":[],"tags":[],"vendor":null,"collections":[{"handle":"feature-on-homepage","title":"\u71b1\u9580\u5546\u54c1"}],"highlight":{"data":null,"state":null,"is_auto_generation_required":false},"common_questions":{"data":null,"state":null,"is_auto_generation_required":false},"view_history":{"product_id":6461939,"viewed_at":"2026-10-08T05:56:13.845+08:00"},"cache_source":"live_api","promotions":[]} 2606 2607 const channel = el.getAttribute("class").split("-").last() 2608 2609 EasyStore.Event.dispatch('products/shared', { product, channel }) 2610 2611 } 2612 2613 function onWishlistItemAdded() { 2614 2615 let product = {"id":6461939,"handle":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","name":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","url":"\/products\/\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","share_url":"https:\/\/www.tofu5688.com\/products\/\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","price":300,"price_min":"300.0","price_max":"300.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":[{"name":"\u4eba\u6c23NO.1","position":1,"values":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","\u8178\u65fa\u81ed\u8c46\u8150"]}],"options_by_name":{"\u4eba\u6c23NO.1":{"name":"\u4eba\u6c23NO.1","position":1,"values":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","\u8178\u65fa\u81ed\u8c46\u8150"]}},"options":["\u4eba\u6c23NO.1"],"has_only_default_variant":false,"sole_variant_id":null,"variants":[{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},{"id":29534347,"title":"\u8178\u65fa\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null}],"selected_variant":{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},"first_available_variant":{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},"selected_or_first_available_variant":{"id":29534345,"title":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","type":"Images","is_variant_image":true},"price":30000,"compare_at_price":0,"is_enabled":true,"options":["\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150"],"option1":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150","option2":null,"option3":null,"points":null},"img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","featured_image":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","
2615img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"},"secondary_image":{"alt":"","img_url":"","src":"","type":""},"images":[{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"}],"media":[{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"}],"featured_media":{"id":37032022,"alt":"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150\u9996\u5716.jpg","img_url":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","src":"https:\/\/cdn.store-assets.com\/s\/825767\/i\/37032022.jpg","height":2000,"width":2000,"position":1,"type":"Images"},"metafields":[],"expires":null,"published_at":"2021-11-12T19:28:00.000+08:00","created_at":"2021-11-12T19:28:38.000+08:00","is_wishlisted":null,"content":"<link href=\u0027\/assets\/css\/froala_style.min.css\u0027 rel=\u0027stylesheet\u0027 type=\u0027text\/css\u0027\/><div class=\u0027fr-view\u0027><p style=\"text-align: center;\"><img src=\"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7837591.jpeg\" alt=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" title=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" class=\"fr-fic fr-dii\"><br><\/p><\/div>","description":"<link href=\u0027\/assets\/css\/froala_style.min.css\u0027 rel=\u0027stylesheet\u0027 type=\u0027text\/css\u0027\/><div class=\u0027fr-view\u0027><p style=\"text-align: center;\"><img src=\"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7837591.jpeg\" alt=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" title=\"\u8178\u65fa\u9d28\u8840\u81ed\u8c46\u8150 (1).jpg\" class=\"fr-fic fr-dii\"><br><\/p><\/div>","meta_description":null,"brands":[],"tags":[],"vendor":null,"collections":[{"handle":"feature-on-homepage","title":"\u71b1\u9580\u5546\u54c1"}],"highlight":{"data":null,"state":null,"is_auto_generation_required":false},"common_questions":{"data":null,"state":null,"is_auto_generation_required":false},"view_history":{"product_id":6461939,"viewed_at":"2026-10-08T05:56:13.845+08:00"},"cache_source":"live_api","promotions":[]} 2616 const quantity = _selector("#Quantity").value 2617 2618 EasyStore.Event.dispatch('wishlists/item_added', { product }) 2619 2620 } 2621 2622 async function onCartItemsAdded() { 2623 2624 const cart = await getCart() 2625 2626 if(cart && cart.items != undefined && cart.items.length > 0) { 2627 2628 EasyStore.Event.dispatch('carts/item_added', { cart }) 2629 2630 } 2631 2632 } 2633 2634 async function onCartView() { 2635 2636 const cart = await getCart() 2637 2638 EasyStore.Event.dispatch('carts/viewed', { cart }) 2639 2640 } 2641 2642 async function onCartItemRemoved() { 2643 2644 const cart = await getCart() 2645 2646 cart.items = [] 2647 2648 if(cart) { 2649 2650 EasyStore.Event.dispatch('carts/item_removed', { cart }) 2651 2652 } 2653 2654 } 2655 2656 async function onCheckoutInitiate() { 2657 2658 const cart = await getCart() 2659 2660 EasyStore.Event.dispatch('checkouts/initiated', { cart }) 2661 2662 } 2663 2664 async function onShippingInfoAdded(form) { 2665 let checkout = getCheckout() 2666 2667 let form_data = {} 2668 new FormData(form).forEach((value, key) => form_data[key] = value) 2669 2670 let shipping_tier = null 2671 2672 if (form_data.type && form_data.type.startsWith("r_pickup")) { 2673 shipping_tier = `Pickup - ${form_data.pick_location}` 2674 } 2675 2676 if (form_data.s_id) { 2677 shipping_tier = _selector(`input[id='`+form_data.s_id+`']`).getAttribute("data-shipping-name") 2678 } 2679 2680 if (!shipping_tier) return 2681 2682 EasyStore.Event.dispatch('checkouts/shipping_info_added', { checkout, shipping_tier }) 2683 2684 } 2685 2686 async function onPaymentInfoAdded(form) { 2687 2688 let checkout = getCheckout() 2689 2690 let payment_type = new FormData(form).get('payment_method') 2691 2692 EasyStore.Event.dispatch("checkouts/payment_info_added", { checkout, payment_type }) 2693 2694 } 2695 2696 async function onOrderPlace() { 2697 2698 let cart_token = getCookie("cart_js") 2699 let previous_cart_token = getCookie("previous_cart_ga4_js") 2700 2701 if (previous_cart_token && previous_cart_token == cart_token) { 2702 // Prevent duplicate purchase tracking 2703 return 2704 } 2705 2706 let order = getOrder() 2707 2708 EasyStore.Event.dispatch('orders/placed', { order }) 2709 2710 if(order.is_manual_payment) { 2711 2712 EasyStore.Event.dispatch('orders/purchased', { order }) 2713 2714 } 2715 2716 const last_transaction = order.transactions.last() 2717 2718 if (last_transaction.status) { 2719 2720 EasyStore.Event.dispatch('orders/purchased', { order }) 2721 EasyStore.Event.dispatch('payments/captured', { order }) 2722 2723 } 2724 2725 } 2726 2727 async function onPaymentFail() { 2728 2729 const order = getOrder() 2730 2731 EasyStore.Event.dispatch('payments/failed', { order }) 2732 2733 } 2734 2735 async function onCheckoutComplete(form) { 2736 2737 onPaymentInfoAdded(form) 2738 2739 const checkout = getCheckout() 2740 2741 EasyStore.Event.dispatch('checkouts/completed', { checkout }) 2742 2743 } 2744 2745 async function onSinglePageCheckout() { 2746 2747 // let checkout = $("[data-app-checkout]").data("app-checkout") 2748 2749 let checkout = getCheckout() 2750 2751 // const payment_type = _selector("#app_spc_payment_method").find(`[class*="label-content"]`).first().find("b").first().text() 2752 const payment_type = _selector("#app_spc_payment_method").getElementsByClassName('label-content')[0].getElementsByTagName('b')[0].innerHTML 2753 2754 const shipping_method = _selector("#delivery_method").value 2755 2756 let shipping_tier = null 2757 let app_spc_customer_info_label = _selector("#app_spc_customer_info").getElementsByClassName('label-content') 2758 if (shipping_method == "shipping") { 2759 shipping_tier = app_spc_customer_info_label[app_spc_customer_info_label.length - 1].getElementsByTagName('b')[0].innerHTML 2760 } 2761 2762 if (shipping_method == "pickup") { 2763 shipping_tier = app_spc_customer_info_label[0].innerHTML 2764 } 2765 2766 if (shipping_tier) { 2767 2768 EasyStore.Event.dispatch('checkouts/shipping_info_added', { 2769 checkout, 2770 shipping_tier, 2771 }) 2772 2773 } 2774 2775 if (payment_type) { 2776 2777 EasyStore.Event.dispatch('checkouts/payment_info_added', { 2778 checkout, 2779 payment_type, 2780 }) 2781 2782 } 2783 2784 EasyStore.Event.dispatch('checkouts/completed', { checkout }) 2785 2786 } 2787 2788 }) 2789 2790 2791 //-----------------------// 2792 // Functions // 2793 //-----------------------// 2794 2795 function getCookie(name) { 2796 2797 name += "=" 2798 2799 decodedCookie = decodeURIComponent(document.cookie) 2800 2801 ca = decodedCookie.split(";") 2802 2803 for(i = 0; i < ca.length; i++) { 2804 c = ca[i] 2805 while (c.charAt(0) == " ") { 2806 c = c.substring(1) 2807 } 2808 if (c.indexOf(name) == 0) { 2809 return c.substring(name.length, c.length) 2810 } 2811 } 2812 2813 return "" 2814 2815 } 2816 2817 const parsePrice = price => { 2818 if(typeof price === 'string') { 2819 return parseFloat(price.split(',').join('')) 2820 } 2821 2822 return price 2823 } 2824 2825 const requestCart = async (method, data) => { 2826 2827 let response = await fetch('/cart.json', {method: 'GET',headers: {'Content-Type': 'application/json'}}) 2828 result = await response.json() 2829 2830 return result.cart 2831 2832 } 2833 const getCart = async (latest = false) => { 2834
2835 let cart = window.__latest_cart 2836 2837 const cart_invalid = !cart || !cart.items || (cart.total_price > 0 && !cart.items.length) 2838 2839 if(latest || cart_invalid) { 2840 cart = await requestCart() 2841 } 2842 2843 cart.items = cart.items || [] 2844 2845 return mapCart(cart) 2846 2847 } 2848 2849 const getCheckout = async () => { 2850 mapCheckout(window.__latest_cart || await requestCart()) 2851 } 2852 2853 const getOrder = async () => { 2854 mapOrder(window.__latest_cart || await requestCart()) 2855 } 2856 2857 //-----------------------// 2858 // Mappers // 2859 //-----------------------// 2860 2861 const fallbackAttribute = (object, attribute) => { 2862 2863 if(!Array.isArray(attribute)) { 2864 attribute = [attribute] 2865 } 2866 2867 let final_value = null 2868 2869 do { 2870 2871 final_value = object[attribute.shift()] 2872 2873 } while(!final_value && attribute.length) 2874 2875 return final_value 2876 2877 } 2878 2879 const map = (object, mapper) => { 2880 2881 const newObject = {} 2882 2883 for(const key in mapper) { 2884 2885 // Handle different keys between new and old format 2886 newObject[key] = fallbackAttribute(object, mapper[key]) 2887 2888 // Cast price to float 2889 if(newObject[key] && ['price', 'amount', 'discount', 'discounts'].some(x => key.endsWith(x))) { 2890 newObject[key] = parsePrice(newObject[key]) 2891 } 2892 2893 if(newObject[key] === undefined) { 2894 delete newObject[key] 2895 } 2896 2897 } 2898 2899 return newObject 2900 2901 } 2902 2903 const mapCart = cart => { 2904 2905 const oldCart = cart 2906 2907 const mapper = { 2908 id: 'id', 2909 currency: 'currency', 2910 item_count: 'item_count', 2911 items: 'items', 2912 total_price: 'total_price', 2913 latest_items: 'latest_items' 2914 } 2915 2916 cart = map(cart, mapper) 2917 2918 const discounts = (oldCart.storewide_discounts || []).concat((oldCart.voucher_discounts || [])) 2919 2920 cart.discount_applications = discounts.map(discount => ({ 2921 title: discount.voucher_code || null, 2922 value: parsePrice(discount.amount), 2923 })) 2924 2925 cart.original_total_price = cart.items.length 2926 ? cart.items 2927 .map(item => item.original_price) 2928 .reduce((sum, price) => sum + price) 2929 : 0 2930 2931 cart.total_discount = cart.discount_applications.length 2932 ? cart.discount_applications 2933 .map(discount => parsePrice(discount.value)) 2934 .reduce((sum, value) => sum + value) 2935 : 0 2936 2937 cart.items = cart.items.map(item => mapLineItem(item)) 2938 2939 return cart 2940 2941 } 2942 2943 const mapCheckout = checkout => { 2944 2945 const mapper = { 2946 note: 'note', 2947 attributes: 'note_attributes', 2948 billing_address: 'billing_address', 2949 currency: 'currency', 2950 customer_id: 'customer_id', 2951 discounts_amount: 'total_discount', 2952 id: 'id', 2953 line_items: 'order_item', 2954 order_number: 'order_number', 2955 shipping_address: 'shipping_address', 2956 shipping_price: 'shipping_tax', 2957 shipping_method: 'shipping_method_name', 2958 tax_price: 'total_tax', 2959 } 2960 2961 checkout = map(checkout, mapper) 2962 2963 checkout.requires_shipping = checkout.line_items.some(item => item.shipping_required) 2964 2965 checkout.line_items = checkout.line_items.map(item => mapLineItem(item)) 2966 2967 return checkout 2968 2969 } 2970 2971 const mapOrder = order => { 2972 2973 const mapper = { 2974 attributes: 'note_attributes', 2975 billing_address: 'billing_address', 2976 cancelled: 'is_cancelled', 2977 cancelled_at: 'cancelled_at', 2978 created_at: 'created_at', 2979 customer_id: 'customer_id', 2980 // discount_applications: 'discount_applications', 2981 email: 'email', 2982 financial_status: 'financial_status', 2983 fulfillment_status: 'fulfillment_status', 2984 line_items: 'order_item', 2985 note: 'note', 2986 order_number: 'order_number', 2987 phone: 'phone', 2988 shipping_address: 'shipping_address', 2989 shipping_methods: 'shipping_methods', 2990 shipping_price: 'total_shipping', 2991 subtotal_price: 'subtotal_price', 2992 // tax_lines: 'tax_lines', 2993 tax_price: 'total_tax', 2994 total_discounts: 'total_discount', 2995 total_net_amount: 'total_amount_include_transaction', 2996 total_price: 'total_price', 2997 transactions: 'transaction_records', 2998 is_manual_payment: 'is_manual_payment', 2999 } 3000 3001 order.email = order.billing_address.email 3002 order.phone = order.billing_address.phone 3003 order.shipping_method = order.shipping_method_name 3004 3005 order = map(order, mapper) 3006 3007 order.line_items = order.line_items.map(item => mapLineItem(item)) 3008 order.transactions = order.transactions.map(transaction => mapTransaction(transaction)) 3009 3010 return order 3011 3012 } 3013 3014 const mapLineItem = line_item => { 3015 3016 const old_line_item = line_item 3017 3018 const mapper = { 3019 final_price: 'price', 3020 image: 'img_url', 3021 message: 'message', 3022 original_line_price: 'original_line_price', 3023 original_price: 'original_price', 3024 properties: 'properties', 3025 quantity: 'quantity', 3026 requires_shipping: 'shipping_required', 3027 sku: 'sku', 3028 taxable: 'taxable', 3029 title: 'product_name', 3030 product_name: 'product_name', 3031 url: 'url', 3032 product_id: 'product_id', 3033 variant_id: 'variant_id', 3034 id: ['id', 'i_id'], 3035 } 3036 3037 line_item = map(line_item, mapper) 3038 3039 line_item.product_id = line_item.product_id || (old_line_item.product && old_line_item.product.id) || null 3040 line_item.variant_id = line_item.variant_id || (old_line_item.variant && old_line_item.variant.id) || null 3041 line_item.image = line_item.image || (old_line_item.image && old_line_item.image.url) || null 3042 3043 return line_item 3044 3045 } 3046 3047 const mapTransaction = transaction => { 3048 3049 const mapper = { 3050 amount: 'amount', 3051 created_at: 'created_at', 3052 gateway: 'gateway_type', 3053 id: 'id', 3054 status: 'status', 3055 } 3056 3057 transaction = map(transaction, mapper) 3058 3059 return transaction 3060 3061 } 3062 3063 3064</script>
3064 3065 3066</div> 3067 3068 3069 3070<style> 3071 #CartTemplate{ 3072 min-height: 80vh; 3073 } 3074 .cart-drawer .cart__row .small--one-whole, 3075 .cart-drawer .cart-sticky-button-wrapper{ 3076 width: 100%; 3077 } 3078 .cart-drawer .promotion__code-input .input-group{ 3079 margin-top: 20px; 3080 max-width: 100%; 3081 } 3082 .cart-drawer-wrapper{ 3083 display: flex; 3084 flex-wrap: wrap; 3085 flex-direction: row; 3086 } 3087 .cart-drawer-wrapper > div{ 3088 width: 100%; 3089 } 3090 vouchers-modal .vouchers-modal.active , 3091 vouchers-modal #vouchers-modal-backdrop.active{ 3092 z-index: 2147483647; 3093 } 3094</style> 3095 3096<div id="CartDrawer" class="cart-drawer" data-fetch="0"> 3097 3098 3099 <div class="cart-drawer-wrapper"> 3100 <div id="cart-promotion-top"></div> 3101 3102 3103 <div id="CartTemplate"> 3104 3105 3106 3107 3108 3109 <div id="noCartItem" class="cart-drawer-content"> 3110 <div class="cart-drawer-content-wrapper text-center"> 3111 <div class="section-header"> 3112 <span></span> 3113 <span class="CartDrawerTrigger icon icon-x"></span> 3114 </div> 3115 <div class="section-header__title h2">æ¨çè³¼ç©è»ç®åéæ¯ç©ºçã</div> 3116 <a class="btn btn--secondary" href="/collections/all">ç¹¼çºè³¼ç©</a> 3117 </div> 3118 </div> 3119 3120 3121 3122 </div> 3123 3124 <link href="/assets/css/promotion.css?v2.94" rel="stylesheet" type="text/css" media="screen" /> 3125<div id="cart-promotion-section"></div> 3126
3127<script>var shop_money_format = "<span class=money data-ori-price='{{amount}}'>NT$ {{amount}} </span>";</script>
vendor: 1 bytes, line 3127
3127
3128<script src="/assets/js/promotion/promotion.js?v1.11" type="text/javascript"></script>
3128 3129
3130<script> 3131 3132 window.EasyStore = window.EasyStore || {}; 3133 window.EasyStore.Promotion = window.EasyStore.Promotion || {}; 3134 3135 var get_cart_promo_initial = false, 3136 current_template = 'product'; 3137 3138 window.EasyStore.Promotion.updateCartPromotion = function (){ 3139 get_cart_promo_initial = true 3140 $.ajax({ 3141 type: "GET", 3142 dataType: 'json', 3143 url: "/new_cart/promotion", 3144 success: function(response){ 3145 $("#cart-promotion-section").html(response["cart/content_bottom"].trim()); 3146 $("#cart-promotion-top").html(response["cart/content_top"].trim()); 3147 3148 promoVariantDetailInitial() 3149 }, 3150 error: function(xhr){ 3151 } 3152 }); 3153 } 3154 3155 3156 if(current_template == 'cart') { 3157 document.addEventListener("DOMContentLoaded", function() { 3158 window.EasyStore.Promotion.updateCartPromotion() 3159 }); 3160 } 3161 3162</script>
vendor: 1 bytes, line 3162
3162
3163<script> 3164 document.addEventListener('DOMContentLoaded', function () { 3165 window._getVoucherErrorTranslation = Object.assign(window._getVoucherErrorTranslation || {}, { 3166 "condition_not_matched": "åªæ 代碼æ¢ä»¶ä¸å¹é ", 3167 "promotion_unavailable": "æ¤åªæ ç®åä¸å¯ç¨", 3168 "available_on": "å¯å¨ channels 使ç¨", 3169 "available_on_only": "å éå¨ channels 使ç¨", 3170 "available_with_locations": "å¯å¨ channels 使ç¨ï¼å é locationsï¼", 3171 "pos_at_locations": "å é locations éå¸ä½¿ç¨", 3172 "channel_website": "ç¶²ç«", 3173 "channel_mobile": "æç¨ç¨å¼", 3174 "channel_pos": "éå¸" 3175 }); 3176 }); 3177</script>
3177 3178 3179 </div> 3180 3181 3182 3183</div> 3184 3185<div id="toast"><div id="toastContent"></div></div> 3186<style> 3187 .cart-drawer .cart-drawer-content .cart-sticky-button-wrapper a.btn.CartDrawerTrigger{margin-bottom: 10px !important;} 3188 #toastContent a{color: #fff;text-decoration: underline;margin-top: 10px;display: block;} 3189 #toastContent .svg-icon{margin-right: 8px;margin-top: -1px;} 3190</style> 3191
3192<script type="text/javascript"> 3193 $('body').on("submit", "#CartForm", function() { 3194 $(this).find('[type=submit]').addClass('btn--loading'); 3195 }); 3196 3197 $("input[name=current_currency]").val($( "select.currency-picker" ).val()); 3198 $( "select.currency-picker" ).change(function(){ 3199 $("select.currency-picker").val($(this).val()); 3200 url=window.location.href; 3201 newParam="currency=" + $( "select.currency-picker" ).val(); 3202 if(url.indexOf("currency=")===-1){ 3203 separator = (url.indexOf("?")===-1)?"?":"&"; 3204 newUrl= url + separator + newParam; 3205 }else{ 3206 oldParam= new URL(url); 3207 oldParam = oldParam.searchParams.get("currency"); 3208 newParam= $(this).val(); 3209 newUrl=url.replace(oldParam,newParam); 3210 } 3211 $("input[name=current_currency]").val($( "select.currency-picker" ).val()); 3212 // window.location.href =newUrl; 3213 $('#CartDrawer').attr('data-fetch', 0); 3214 }); 3215 3216 $("body").on("click", ".cart__remove", function() { 3217 $('#CartTemplate').addClass('is-loading'); 3218 $.ajax({ 3219 type: 'POST', 3220 url: '/cart/remove_item_quantity', 3221 data: { 3222 variant_id: $(this).data( "variant-id"), 3223 item_id: $(this).data( "item-id"), 3224 quantity: $(this).data( "quantity"), 3225 i_id: $(this).data("i_id"), 3226 }, 3227 dataType: 'json', 3228 success: function(response){ 3229 3230 theme.cartDrawer(response); 3231 $('#CartTemplate').removeClass('is-loading'); 3232 3233 if (window.checkProductProperties !== undefined){ 3234 window.checkProductProperties(); 3235 } 3236 }, 3237 error: function(xhr){ 3238 console.log('error',xhr); 3239 $('#CartTemplate').removeClass('is-loading'); 3240 } 3241 }); 3242 3243 }); 3244 3245 3246 $('body').on("click", "#applycode",function() { 3247 3248 if($("input[name='voucher_code']").val() != '') { 3249 3250 $('#CartTemplate').addClass('is-loading'); 3251 3252 $.ajax({ 3253 type: 'POST', 3254 url: '/new_cart/voucher', 3255 data: { 3256 voucher_code: $("input[name='voucher_code']").val(), 3257 category: 'create' 3258 }, 3259 dataType: 'json', 3260 success: function(response){ 3261 3262 // console.log(response); 3263 3264 if(response.error != undefined){ 3265 3266 if(response.error.message != undefined) popToast(response.error.message); 3267 3268 $("input[name='voucher_code']").val('') 3269 3270 } 3271 3272 if(response.cart_content != undefined) theme.cartDrawer(response); 3273 3274 3275 $('#CartTemplate').removeClass('is-loading'); 3276 3277 }, 3278 error: function(xhr){ 3279 console.log('error',xhr); 3280 $('#CartTemplate').removeClass('is-loading'); 3281 } 3282 }); 3283 3284 } 3285 3286 }); 3287 3288 3289 $("body").on("click", ".remove_voucher_btn", function() { 3290 $('#CartTemplate').addClass('is-loading'); 3291 $.ajax({ 3292 type: 'DELETE', 3293 url: '/new_cart/voucher', 3294 data: { 3295 category: 'remove', 3296 order_discount_id: $(this).data( "discount-id") 3297 }, 3298 dataType: 'json', 3299 success: function(data){ 3300 // console.log(data); 3301 theme.cartDrawer(data); 3302 $('#CartTemplate').removeClass('is-loading'); 3303 }, 3304 error: function(xhr){ 3305 console.log('error',xhr); 3306 $('#CartTemplate').removeClass('is-loading'); 3307 } 3308 }); 3309 3310 }); 3311 3312 3313 theme.cartDrawer = function(data){ 3314 3315 $('#CartDrawer').attr('data-fetch', 1); 3316 $('#CartTemplate').addClass('is-loading'); 3317 3318 3319 if(typeof data.cart_content == 'string'){ 3320 $('#CartTemplate').html(data.cart_content); 3321 } 3322 3323 let cart_item_count = data.item_count || data.cart.item_count; 3324 3325 if(cart_item_count > 0){ 3326 $('.cart-count').removeClass('hidden-count'); 3327 }else{ 3328 $('.cart-count').addClass('hidden-count'); 3329 } 3330 3331 $('.cart-count').text(cart_item_count); 3332 $('#CartTemplate').removeClass('is-loading'); 3333 $(".cart-drawer-content").animate({ scrollTop: 0 }); 3334 3335 if(window.EasyStore != undefined && window.EasyStore.Promotion != undefined && window.EasyStore.Promotion.updateCartPromotion != undefined) window.EasyStore.Promotion.updateCartPromotion() 3336 3337 } 3338 3339 theme.fetchCartDrawer = function(data){ 3340 $('#CartTemplate').addClass('is-loading'); 3341 $.ajax({ 3342 url: '/new_cart?retrieve=true', 3343 type: 'GET', 3344 success: function(data, status) { 3345 // console.log(data); 3346 theme.cartDrawer(data); 3347 3348 $('#CartTemplate').removeClass('is-loading'); 3349 3350 if (window.checkProductProperties !== undefined){ 3351 window.checkProductProperties(); 3352 } 3353 }, 3354 error: function(XMLHttpRequest, textStatus) { 3355 console.log('error',XMLHttpRequest,textStatus); 3356 $('#CartTemplate').removeClass('is-loading'); 3357 } 3358 }); 3359 } 3360 3361 theme.updateCartDrawer = function(data){ 3362 $('#CartTemplate').addClass('is-loading'); 3363 3364 $.ajax({ 3365 url: '/new_cart/update', 3366 type: 'PUT', 3367 dataType: 'json', 3368 data: $('#CartDrawer form').serialize(), 3369 success: function(data, status) { 3370 theme.cartDrawer(data); 3371 3372 if (window.checkProductProperties !== undefined){ 3373 window.checkProductProperties(); 3374 } 3375 }, 3376 error: function(XMLHttpRequest, textStatus) { 3377 console.log('error',XMLHttpRequest,textStatus); 3378 } 3379 }); 3380 } 3381 3382 function debounce(func, wait, immediate) { 3383 var timeout; 3384 return function() { 3385 var context = this, args = arguments; 3386 var later = function() { 3387 timeout = null;
3388 if (!immediate) func.apply(context, args); 3389 }; 3390 var callNow = immediate && !timeout; 3391 clearTimeout(timeout); 3392 timeout = setTimeout(later, wait); 3393 if (callNow) func.apply(context, args); 3394 }; 3395 }; 3396 3397 $('body').on("change", 'input.cart__quantity-selector', function (){ 3398 theme.updateCartDrawer(); 3399 }); 3400 3401 3402 $('#updateCartDrawer').click(function() { 3403 theme.updateCartDrawer(); 3404 }); 3405 3406 $('body').on("click", ".btn-qty-adjust", function() { 3407 3408 var $button = $(this); 3409 var oldValue = $button.parent().find("input.cart__quantity-selector").val(); 3410 3411 if ($button.attr('data-adjust') == 1) { 3412 var newVal = parseFloat(oldValue) + 1; 3413 } else { 3414 // Don't allow decrementing below zero 3415 if (oldValue > 0) { 3416 var newVal = parseFloat(oldValue) - 1; 3417 } else { 3418 newVal = 0; 3419 } 3420 } 3421 3422 $button.parent().find("input").val(newVal); 3423 }); 3424 3425 $('body').on("click", ".btn-qty-adjust", debounce(function() { 3426 theme.updateCartDrawer(); 3427 },350)); 3428 3429 $('button.checkout').click(function() { 3430 $(this).addClass('btn--loading'); 3431 }); 3432 3433 var add_cart_success_html = '<svg class="svg-icon" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> <g> <g> <path d="M383.841,171.838c-7.881-8.31-21.02-8.676-29.343-0.775L221.987,296.732l-63.204-64.893 c-8.005-8.213-21.13-8.393-29.35-0.387c-8.213,7.998-8.386,21.137-0.388,29.35l77.492,79.561 c4.061,4.172,9.458,6.275,14.869,6.275c5.134,0,10.268-1.896,14.288-5.694l147.373-139.762 C391.383,193.294,391.735,180.155,383.841,171.838z"/> </g> </g> <g> <g> <path d="M256,0C114.84,0,0,114.84,0,256s114.84,256,256,256s256-114.84,256-256S397.16,0,256,0z M256,470.487 c-118.265,0-214.487-96.214-214.487-214.487c0-118.265,96.221-214.487,214.487-214.487c118.272,0,214.487,96.221,214.487,214.487 C470.487,374.272,374.272,470.487,256,470.487z"/> </g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> </svg>'; 3434 add_cart_success_html += 'å·²å å ¥è³¼ç©è» <br><a class="CartDrawerTrigger">æ¥çè³¼ç©è»</a>'; 3435 3436 function popToast(content) { 3437 var x = document.getElementById("toast"), 3438 y = document.getElementById("toastContent"); 3439 3440 y.innerHTML = content; 3441 x.className += " show"; 3442 3443 var hideToast = setTimeout(function(){ x.className = x.className.replace(" show", ""); }, 3000); 3444 } 3445 3446</script>
3446 3447 3448<link href="/assets/css/vouchers.css?v1.2" rel="stylesheet" type="text/css" media="screen" /> 3449<link href="/assets/account/vouchers/vouchers.css" rel="stylesheet" type="text/css" media="screen" /> 3450<link href="/assets/account/vouchers/voucher-widget.css" rel="stylesheet" type="text/css" media="screen" />
3451<script src="/assets/js/promotion/vouchers.js?v1.3" type="text/javascript" ></script>
vendor: 1 bytes, line 3451
3451
3452<script src="/assets/account/vouchers/voucher-widget.js" type="text/javascript" ></script>
3452 3453 3454<vouchers-modal> 3455 <div id="vouchers-modal-backdrop" class="vouchers-modal__close"></div> 3456 <div class="vouchers-modal-wrapper page-width"> 3457 <div id="vouchers-modal" class="vouchers-modal focus-inset" aria-modal="true" role="dialog" tabindex="-1"> 3458 <div class="vouchers-modal__header"> 3459 <div class="vouchers-modal__heading">åªæ å¸</div> 3460 <button type="button" class="vouchers-modal__close modal__close-button link link--text focus-inset" aria-label="accessibility.close"> 3461 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-close " fill="none" viewBox="0 0 18 17"> 3462 <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"> 3463 </path> 3464 </svg> 3465 </button> 3466 </div> 3467 3468 <discount-input> 3469 <div class="field"> 3470 <input type="text" id="input-discount_code" class="search__input field__input" name="voucher_code" placeholder="ææ£ç¢¼"> 3471 <button type="button" name="apply" class="btn btn--secondary button button--secondary">å¥ç¨</button> 3472 </div> 3473 <div class="form__message hidden" tabindex="-1" autofocus> 3474 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-error " viewBox="0 0 13 13"> 3475 <circle cx="6.5" cy="6.50049" r="5.5" stroke="white" stroke-width="2"></circle> 3476 <circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width="0.7"></circle> 3477 <path d="M5.87413 3.52832L5.97439 7.57216H7.02713L7.12739 3.52832H5.87413ZM6.50076 9.66091C6.88091 9.66091 7.18169 9.37267 7.18169 9.00504C7.18169 8.63742 6.88091 8.34917 6.50076 8.34917C6.12061 8.34917 5.81982 8.63742 5.81982 9.00504C5.81982 9.37267 6.12061 9.66091 6.50076 9.66091Z" fill="white"></path> 3478 <path d="M5.87413 3.17832H5.51535L5.52424 3.537L5.6245 7.58083L5.63296 7.92216H5.97439H7.02713H7.36856L7.37702 7.58083L7.47728 3.537L7.48617 3.17832H7.12739H5.87413ZM6.50076 10.0109C7.06121 10.0109 7.5317 9.57872 7.5317 9.00504C7.5317 8.43137 7.06121 7.99918 6.50076 7.99918C5.94031 7.99918 5.46982 8.43137 5.46982 9.00504C5.46982 9.57872 5.94031 10.0109 6.50076 10.0109Z" fill="white" stroke="#EB001B" stroke-width="0.7"></path> 3479 </svg> 3480 <div class="js-error-content"></div> 3481 </div> 3482 </discount-input> 3483 <br> 3484 3485 3486 3487 <div class="empty-vouchers_placeholder">ç®åç¡å¯ç¨çåªæ å¸</div> 3488 3489 3490 <!-- For voucher widget --> 3491
3491<script type="text/javascript"> 3492 let settings = {"logo_use_image":"1","logo_img":"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7615570.jpeg?width=350&format=webp","footer_logo_img":"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7820814.png?width=350&format=webp","nav_below_logo":"logo_top-center","logo_alignment":"center","heading_font_family":["'HelveticaNeue','Helvetica Neue',Helvetica,Arial,sans-serif"],"left_aligned_logo":"0","favicon_enable":"1","favicon_img":"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7823545.png","header_message":"","header_search_enable":true,"topbar_sticky":0,"footer_quicklinks_enable":true,"footer_quicklinks_linklist":"footer","footer_social_enable":"1","footer_show_credit_card_logo":0,"footer_show_methods_of_payment":0,"footer_visa":"1","footer_master":"1","footer_american_express":"1","footer_jcb":0,"footer_diners_club":0,"footer_discover":0,"footer_ssl":0,"show_footer_lines":"1","home_section_1":"","home_section_2":"featured-product","home_section_3":"home-content","home_section_4":"","home_section_5":"","home_section_6":"","featured_title":"","featured_1_img":"https:\/\/cdn.store-assets.com\/s\/278885\/f\/3915939.jpeg?width=650&format=webp","featured_1_text":"DRONE","featured_1_link":"\/collections\/drone","featured_2_img":"https:\/\/cdn.store-assets.com\/s\/278885\/f\/3915945.jpeg?width=650&format=webp","featured_2_text":"TRAVEL","featured_2_link":"\/collections\/travel-pack","featured_3_img":"https:\/\/cdn.store-assets.com\/s\/278885\/f\/3915949.jpeg?width=650&format=webp","featured_3_text":"ACTION","featured_3_link":"\/collections\/action","featured_4_img":"https:\/\/cdn.store-assets.com\/s\/278885\/f\/3915973.jpeg?width=650&format=webp","featured_4_text":"STYLE","featured_4_link":"\/collections\/style","featured_5_img":"","featured_5_text":"","featured_5_link":"\/collections\/all","featured_6_img":"","featured_6_text":"","featured_6_link":"\/collections\/all","featured_7_img":"","featured_7_text":"","featured_7_link":"","featured_8_img":"","featured_8_text":"","featured_8_link":"","parallax_img":"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7843483.jpeg?width=1500&format=webp","parallax_mobile_img":"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7843882.jpeg?width=900&format=webp","parallax_title":"","parallax_subtitle":"","parallax_button_text":"","parallax_button_link":"","parallax_full_width":"1","slider_home_auto":"1","slider_home_show_dots":0,"slider_home_rate":"3000","slider_home_transition":"slide","slider_full_screen":"0","slide_1":"1","slide_1_jpg":"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7955867.jpeg?width=1500&format=webp","slide_1_mobile_jpg":"","slide_1_link":"","slide_1_alt":"","slide_1_title":"","slide_1_subtitle":"","slide_1_button_text":"","slide_2":"1","slide_2_jpg":"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7955873.jpeg?width=1500&format=webp","slide_2_mobile_jpg":"","slide_2_link":"","slide_2_alt":"","slide_2_title":"","slide_2_subtitle":"","slide_2_button_text":"","slide_3":"","slide_3_jpg":"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7955857.jpeg?width=1500&format=webp","slide_3_mobile_jpg":"","slide_3_link":"","slide_3_alt":"","slide_3_title":"","slide_3_subtitle":"","slide_3_button_text":"","slide_4":"","slide_4_jpg":"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7955874.jpeg?width=1500&format=webp","slide_4_mobile_jpg":"","slide_4_link":"","slide_4_alt":"","slide_4_title":"","slide_4_subtitle":"","slide_4_button_text":"","slide_5":"","slide_5_jpg":"","slide_5_mobile_jpg":"","slide_5_link":"","slide_5_alt":"","slide_5_title":"","slide_5_subtitle":"","slide_5_button_text":"","slide_6":"","slide_6_jpg":"","slide_6_mobile_jpg":"","slide_6_link":"","slide_6_alt":"","slide_6_title":"","slide_6_subtitle":"","slide_6_button_text":"","testimonial_slide_img_crop":0,"testimonial_slide_1_img":"https:\/\/cdn.store-assets.com\/s\/825767\/f\/7844936.jpeg?width=1500&format=webp","testimonial_slide_1_title":"","testimonial_slide_1_content":"","testimonial_slide_1_text_link":"","testimonial_slide_1_link":"","testimonial_slide_2_img":"","testimonial_slide_2_title":"","testimonial_slide_2_content":"","testimonial_slide_2_text_link":"","testimonial_slide_2_link":"","testimonial_slide_3_img":"","testimonial_slide_3_title":"","testimonial_slide_3_content":"","testimonial_slide_3_text_link":"","testimonial_slide_3_link":"","testimonial_slide_4_img":"","testimonial_slide_4_title":"","testimonial_slide_4_content":"","testimonial_slide_4_text_link":"","testimonial_slide_4_link":"","testimonial_slide_5_img":"","testimonial_slide_5_title":"","testimonial_slide_5_content":"","testimonial_slide_5_text_link":"","testimonial_slide_5_link":"","testimonial_slide_6_img":"","testimonial_slide_6_title":"","testimonial_slide_6_content":"","testimonial_slide_6_text_link":"","testimonial_slide_6_link":"","logo_list_on_footer":0,"logo_list_title":"","logo_list_1_img":"https:\/\/cdn.store-assets.com\/s\/278885\/f\/3916892.png?width=350&format=webp","logo_list_1_link":"\/collections\/all","logo_list_2_img":"https:\/\/cdn.store-assets.com\/s\/278885\/f\/3916893.png?width=350&format=webp","logo_list_2_link":"\/collections\/all","logo_list_3_img":"https:\/\/cdn.store-assets.com\/s\/278885\/f\/3916894.png?width=350&format=webp","logo_list_3_link":"\/collections\/all","logo_list_4_img":"https:\/\/cdn.store-assets.com\/s\/278885\/f\/3916895.png?width=350&format=webp","logo_list_4_link":"\/collections\/all","logo_list_5_img":"","logo_list_5_link":"\/collections\/all","logo_list_6_img":"","logo_list_6_link":"\/collections\/all","logo_list_7_img":"","logo_list_7_link":"\/collections\/all","logo_list_8_img":"","logo_list_8_link":"\/collections\/all","home_featured_products":"feature-on-homepage","home_featured_products_num":"20","home_featured_products_row_num":"7","home_featured_products_show_heading":"","home_page_content":"home","home_page_show_heading":"0","home_page_add_to_cart":"1","scroll_to_top_button":"on-right","product_quantity_enable":"1","product_image_zoom_type":"lightbox","product_thumbnails_position":"below","product_related_enable":true,"products_per_row":4,"products_list_per_row":"4","product_page_float_bt
3492n":"1","product_page_variants_tag":"1","featured_product_title":"\u71b1\u9580\u5546\u54c1","product_img_res":"grande","product_img_crop":"product_img-crop ratio_1-1","collections_show_sale_circle":"1","collections_show_sold_out_circle":"1","collections_sort_enable":true,"collections_tags_enable":"0","collections_products_per_row":"3","collections_rows":"6","footer_bar":0,"footer_bar_icon_product_page":"1","footer_bar_icon_1":"https:\/\/cdn.easystore.blue\/s\/201\/f\/5590.png?width=150&format=webp","footer_bar_icon_1_text":"Home","footer_bar_icon_1_link":"\/","footer_bar_icon_2":"https:\/\/cdn.easystore.blue\/s\/201\/f\/5591.png?width=150&format=webp","footer_bar_icon_2_text":"All products","footer_bar_icon_2_link":"\/collections\/all","footer_bar_icon_3":"https:\/\/cdn.easystore.blue\/s\/201\/f\/5592.png?width=150&format=webp","footer_bar_icon_3_text":"Promotions","footer_bar_icon_3_link":"\/collections\/all","footer_bar_icon_4":"https:\/\/cdn.easystore.blue\/s\/201\/f\/5593.png?width=150&format=webp","footer_bar_icon_4_text":"Account","footer_bar_icon_4_link":"\/account\/login","cart_enable_ajax":"1","social_sharing_products":"1","social_sharing_blog":"1","social_sharing_count":"1","share_facebook":"1","share_twitter":"1","share_line":"1","share_pinterest":"1","facebook_url":"https:\/\/www.facebook.com\/dofu5688","twitter_url":"","pinterest_url":"","instagram_url":"https:\/\/www.instagram.com\/","tumblr_url":"","youtube_url":"","vimeo_url":"","wechat_url":"","whatsapp_url":"","line_url":"https:\/\/lin.ee\/7epzJ9B","featured_blog":"","featured_blog_title":"Blog","articles_handle_1":"","articles_handle_2":"","articles_handle_3":"","use_original_image":0,"promotion_uis":{"primary_color":"#4089e4","header_bg_color":"#4089e4","header_text_color":"#fff","recommendation":{"is_show_product_page":true,"is_show_cart_page_top":true,"is_show_cart_page_bottom":true},"voucher_widget":{"primary_color":"#4089e4"}},"show_multiple_currencies":true,"supported_currencies":"TWD ","theme_id":2877,"theme_is_edited":1,"theme_updated_at":"2026-08-18T18:01:15.000Z","phone_account_enabled":false,"line_login_enabled":false,"apple_login_enabled":false,"timezone":"Asia\/Taipei","is_server_side_currency_conversion":true,"is_self_registration_enabled":true,"is_highlight_enabled":false,"is_auto_gen_highlight_enabled":false,"is_common_question_enabled":false,"is_auto_gen_common_question_enabled":false,"highlight_section_title":"Highlights","common_question_section_title":"Frequently asked questions","is_new_promotion_enabled":true} 3493 if (settings.promotion_uis.voucher_widget != null) { 3494 setVoucherTheme(settings.promotion_uis.voucher_widget) 3495 } 3496 var shop = { 3497 money_prefix: "", 3498 format_decimals: "" 3499 }; 3500 var _getEntitlementTranslation = { 3501 "free_shipping": "å éè²»", 3502 "free_of_charge": "å è²»è´å", 3503 } 3504 var _getTargetTypeTranslation = { 3505 "amount_credit": " åé¥é", 3506 "amount_off": " ææ£", 3507 } 3508 var _getPrerequisiteTranslation = { 3509 "min_quantity": "è³å°è³¼è²· formatValue ä»¶åå", 3510 "every_quantity": "æ¯è³¼è²· formatValue ä»¶åå", 3511 "min_amount": "æä½æ¶è²» formatCurrency", 3512 "every_amount": "æ¯æ¶è²» formatCurrency" 3513 } 3514 var _getPrerequisiteConditionTranslation = { 3515 "selected_items": "æå®åå", 3516 "selected_collections": "æå®åé¡", 3517 "storewide": "å ¨åº", 3518 "order_subtotal": "è¨å®éé¡" 3519 } 3520 var _getVoucherButtonTextTranslation = { 3521 "apply": "å¥ç¨", 3522 } 3523 var _getVoucherErrorTranslation = { 3524 "condition_not_matched": "åªæ 代碼æ¢ä»¶ä¸å¹é " 3525 } 3526 </script>
3526 3527 3528 </div> 3529 </div> 3530</vouchers-modal> 3531 3532 3533</body> 3534</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.