PageSourceSearch

https://www.tofu5688.com/collections/feature-on-homepage/products/…9%B4%A8%E8%A1%80%E8%87%AD%E8%B1%86%E8%85%90

html tofu5688.com collected 2026-10-07 21:56:14 UTC 160,934 bytes, 3,534 lines download raw bytes

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  腸旺鴨血臭豆腐 &ndash; 深坑大樹下
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()">&times;</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                    &times;
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">&rsaquo;</span>
1076      
1077        
1078        <a href="/collections/feature-on-homepage">熱門商品</a>
1079      
1080    
1081    <span aria-hidden="true" class="breadcrumb__sep">&rsaquo;</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=腸旺鴨血臭豆腐&amp;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/腸旺鴨血臭豆腐&amp;media=&amp;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('&', '&amp;').replace('>','&gt;').replace('<','&lt;').replace('/','&sol;').replace('“', '&quot;').replace("'","&#39;") }</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.