PageSourceSearch

https://www.lezzetto.my/collections/lezzetto-cakes/products/chocolate-moist

html lezzetto.my collected 2026-09-27 00:57:53 UTC 186,097 bytes, 4,237 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  <!-- Basic page needs ================================================== -->
10  <meta charset="utf-8">
11  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
12
13  
14  <link rel="icon" href="https://cdn.store-assets.com/s/619811/f/5636152.png" />
15  
16
17  <!-- Title and description ================================================== -->
18  <title>
19  CHOCOLATE MOIST BLISS &ndash; Lezzetto
20  </title>
21
22  
23  <meta name="description" content="CHOCOLATE MOIST Size : 7 Inch">
24  
25
26  <!-- Social meta ================================================== -->
27  
28
29  <meta property="og:type" content="product">
30  <meta property="og:title" content="CHOCOLATE MOIST BLISS">
31  <meta property="og:url" content="https://www.lezzetto.my/products/chocolate-moist">
32  
33  <meta property="og:image" content="https://cdn.store-assets.com/s/619811/i/85464388.png">
34  <meta property="og:image:secure_url" content="https://cdn.store-assets.com/s/619811/i/85464388.png">
35  
36  <meta property="og:price:amount" content="55">
37  <meta property="og:price:currency" content="MYR">
38
39
40<meta property="og:description" content="CHOCOLATE MOIST Size : 7 Inch">
41<meta property="og:site_name" content="Lezzetto">
42
43
44
45  <meta name="twitter:card" content="summary">
46
47
48
49  <meta name="twitter:site" content="@">
50
51
52  <meta name="twitter:title" content="CHOCOLATE MOIST BLISS">
53  <meta name="twitter:description" content="Product Description
54Rich and moist chocolate layered cake">
55  <meta name="twitter:image" content="">
56  <meta name="twitter:image:width" content="480">
57  <meta name="twitter:image:height" content="480">
58
59
60
61
62  <!-- Helpers ================================================== -->
63  <link rel="canonical" href="https://www.lezzetto.my/products/chocolate-moist">
64  <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
65  <meta name="theme-color" content="#16E327">
66  
67  
67<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" type="text/javascript" ></script>
67
68  
69  <!-- Header hook for plugins ================================================== -->
70  
71<!-- ScriptTags -->
72<script>window.__st={p: "product",cid: null,cem: null,cph: null,cfn: null,cln: null,cge: null,cdb: null,ccc: null};</script>
72<script src='/assets/events.js'></script>
72<script>(function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(d.getElementById(id))return;js=d.createElement(s);js.id=id;js.src='https://connect.facebook.net/en_US/sdk/xfbml.customerchat.js#xfbml=1&version=v6.0&autoLogAppEvents=1';fjs.parentNode.insertBefore(js,fjs);}(document,'script','facebook-jssdk'));</script>
72<script>(function(){function asyncLoad(){var urls=['/assets/facebook-pixel.js?v=1.2.1612166141','/assets/traffic.js?v=1','https://apps.easystore.co/facebook-login/script.js?shop=lezzetto.easy.co','https://apps.easystore.co/google-analytics/script.js?shop=lezzetto.easy.co'];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>
72
73<!-- /ScriptTags -->
74
75  
76  
77  
77<script src="https://store-themes.easystore.co/619811/themes/175052/assets/global.js?t=1787072506" defer="defer"></script>
77
78
79  
80  
81  
81<script>
82  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
83  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
84  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
85  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
86
87  ga('create', '', 'auto','myTracker');
88  ga('myTracker.send', 'pageview');
89
90  </script>
90
91  
92  
92<script src="/assets/storefront.js?id=1d419de2011a5572c98b" type="text/javascript" ></script>
92
93  
94
95  <!-- CSS ================================================== -->
96  <style>
97      @font-face {
98        font-family: 'Actor';
99        font-style: normal;
100        font-weight: regular;
101        src: local('Actor regular'), local('Actor-regular'), url(https://fonts.gstatic.com/s/actor/v10/wEOzEBbCkc5cO3ekXygtUMIO.ttf) format('truetype');
102      }
103
104      @font-face {
105        font-family: 'Actor';
106        font-style: normal;
107        font-weight: regular;
108        src: local('Actor regular'), local('Actor-regular'), url(https://fonts.gstatic.com/s/actor/v10/wEOzEBbCkc5cO3ekXygtUMIO.ttf) format('truetype');
109      }
110
111      :root {
112        --font-body-family: 'Actor', sans-serif;
113        --font-body-style: normal;
114        --font-body-weight: 400;
115
116        --font-heading-family: 'Actor', sans-serif;
117        --font-heading-style: normal;
118        --font-heading-weight: 400;
119
120        --color-heading-text: 18,18,18;
121        --color-base-text: 18,18,18;
122        --color-base-background-1: 255,255,255;
123        --color-base-background-2: 255,255,255;
124        
125        --color-base-solid-button-labels: 17,17,16;
126        --color-base-outline-button-labels: 33,31,31;
127        
128        --color-base-accent-1: 22,227,39;
129        --color-base-accent-2: 22,227,39;
130        --payment-terms-background-color: 255,255,255;
131
132        --gradient-base-background-1: 255,255,255;
133        --gradient-base-background-2: 255,255,255;
134        --gradient-base-accent-1: 22,227,39;
135        --gradient-base-accent-2: 22,227,39;
136
137        --page-width: 150rem;
138      }
139
140      *,
141      *::before,
142      *::after {
143        box-sizing: inherit;
144      }
145
146      html {
147        box-sizing: border-box;
148        font-size: 62.5%;
149        height: 100%;
150      }
151
152      body {
153        display: grid;
154        grid-template-rows: auto auto 1fr auto;
155        grid-template-columns: 100%;
156        min-height: 100%;
157        margin: 0;
158        font-size: 1.5rem;
159        letter-spacing: 0.06rem;
160        line-height: 1.8;
161        font-family: var(--font-body-family);
162        font-style: var(--font-body-style);
163        font-weight: var(--font-body-weight);
164        
165        background-image: url('https://cdn.store-assets.com/s/619811/f/5637153.png');
166        background-position: center center;
167        
168        
169      }
170
171      @media screen and (min-width: 750px) {
172        body {
173          font-size: 1.6rem;
174        }
175      }
176   </style>
177  
178  <link href="https://store-themes.easystore.co/619811/themes/175052/assets/base.css?t=1787072506" rel="stylesheet" type="text/css" media="screen" />
179
180  
181  
182<!-- Snippet:global/head: Product Rating -->
183<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css"> <link rel="stylesheet" href="https://apps.easystore.co/assets/css/product-rating/pr-style.css">
184<!-- /Snippet -->
185
186<!-- Snippet:global/head: Product Star Rating 商品評價 -->
187
188          
188<script src="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js"></script>
188
189          
189<script src="https://apps.easystore.co/assets/js/star-rating/main.js"></script>
189
190          <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css">
191          <link rel="stylesheet" href="https://apps.easystore.co/assets/css/star-rating/main.css?v1.4.3">
192<!-- /Snippet -->
193
194
195  
195<script>document.documentElement.className = document.documentElement.className.replace('no-js', 'js');</script>
195
196</head>
197
198<body id="chocolate-moist-bliss" class="template-product" >
199	
200  
201<!-- Snippet:global/body_start: Announcement Bar -->
202<link rel="stylesheet" href="https://apps.easystore.co/assets/css/annoucement-bar/marquee.css?v1.04">
203
204<div id="announcement-bar" name="announcement-bar" style="
205    border: unset;
206    padding: 6px 0px;
207    margin: 0px;
208    z-index:2999;
209    background:rgb(233, 69, 69);
210    color:rgb(255, 255, 255);
211    position: -webkit-sticky; position: sticky; top: 0;
212">
213
214  <input type="hidden" id="total_announcement_left" name="total_announcement_left" value="1">
215  <input type="hidden" id="locale" name="locale" value="en_US">
216
217  <div class="app_marquee-wrapper" style="
218    padding: 0px 0px;
219    border-top: 0px;
220    border-bottom: 0px;
221    border-color: transparent;
222  ">
223    <div class="app_marquee-container">
224              <div id="announcement_bar_0" class="announcement_bar_0 announcement_bar-content">
225          <span class="marquee-msg">Order two (2) working days in advance! Self-pickup available and delivery services in Klang Valley only.</span>
226                              <input type="hidden" id="expired_at_0" name="expired_at_0" value="2020-12-14 00:00">
227        </div>
228          </div>
229
230          <span id="announcement-close-button" name="announcement-close-button" class="announcement-close-button" style="color: rgb(233, 69, 69); background: rgb(255, 255, 255);">
231        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" width="20" height="20" stroke-width="2">
232          <path d="M18 6l-12 12"></path>
233          <path d="M6 6l12 12"></path>
234        </svg>
235      </span>
236      </div>
237</div>
238
239
240
241<script>
242  var is_top_enabled = 1;
243  if (is_top_enabled) {
244    // Prevent announcement bar block header
245    setTimeout(() => {
246      let header = document.querySelector('#easystore-section-header');
247      let topbar = document.querySelector('.sticky-topbar');
248      let announcementBar = document.querySelector('#announcement-bar');
249
250      if (announcementBar) {
251          let height = announcementBar.offsetHeight + 'px';
252          if (header) header.style.top = height;
253          if (topbar) topbar.style.top = height;
254      }
255    }, 2000);
256  }
257
258  setInterval(function () {
259      let total_announcement = parseInt("1", 10);
260      let total_announcement_left = parseInt(document.querySelector("#total_announcement_left").value, 10);
261
262      for (let i = 0; i <= total_announcement; i++) {
263          let startDate = new Date();
264          let endDateStr = document.querySelector(`#expired_at_${i}`)?.value;
265          let endDate = endDateStr ? new Date(endDateStr.replace(/-/g, "/")) : new Date();
266          let seconds = (endDate.getTime() - startDate.getTime()) / 1000;
267
268          let days = Math.floor(seconds / 86400);
269          let hours = Math.floor((seconds % 86400) / 3600);
270          let mins = Math.floor((seconds % 3600) / 60);
271          let secs = Math.floor(seconds % 60);
272
273          function translate(key, locale, values = 1) {
274              if (locale === "zh_TW") {
275                  let translations = {
276                      day: "天",
277                      hour: "小時",
278                      min: "分鐘",
279                      sec: "秒"
280                  };
281                  return translations[key] || key;
282              } else {
283                  let singularPlural = { day: "Day", hour: "Hour", min: "Min", sec: "Sec" };
284                  let plural = { day: "Days", hour: "Hours", min: "Mins", sec: "Secs" };
285                  if (key in singularPlural) {
286                      return values > 1 ? plural[key] : singularPlural[key];
287                  }
288                  return key;
289              }
290          }
291
292
293          let countdownElement = document.querySelector(`#announcementBar_countdown_${i}`);
294          if (countdownElement && seconds > 0) {
295            let locale = document.querySelector("#locale")?.value || "en";
296            let countdownItems = document.querySelectorAll(`.announcementBar_countdown_${i}`);
297            countdownItems.forEach(item => {
298                item.style.display = '';
299                item.innerHTML = `
300                    <div>
301                        <span>${days}</span> <small>${translate('day', locale, days)}</small>
302                    </div>
303                    <div>
304                        <span>${hours}</span> <small>${translate('hour', locale, hours)}</small>
305                    </div>
306                    <div>
307                        <span>${mins}</span> <small>${translate('min', locale, mins)}</small>
308                    </div>
309                    <div>
310                        <span>${secs}</span> <small>${translate('sec', locale, secs)}</small>
311                    </div>
312                `;
313            });
314          } else if (countdownElement && seconds <= 0) {
315              let bar = document.querySelector(`#announcement_bar_${i}`);
316              if (bar) bar.remove();
317              total_announcement_left -= 1;
318              document.querySelector("#total_announcement_left").value = total_announcement_left;
319          }
320      }
321
322      showOrHide(total_announcement_left);
323  }, 1000);
324
325  function showOrHide(total_announcement_left) {
326      let prevButton = document.querySelector("#previous-announcement-bar-button");
327      let nextButton = document.querySelector("#next-announcement-bar-button");
328      let closeButton = document.querySelector("#announcement-close-button");
329      let announcementBar = document.querySelector("#announcement-bar");
330      let announcementBarTop = document.querySelector("#announcement-bar-top");
331      let header = document.querySelector("#easystore-section-header");
332      let topbar = document.querySelector(".sticky-topbar");
333
334      if (total_announcement_left <= 1) {
335          if (prevButton) prevButton.style.display = 'none';
336          if (nextButton) nextButton.style.display = 'none';
337      } else {
338          if (prevButton) prevButton.style.display = 'block';
339          if (nextButton) nextButton.style.display = 'block';
340      }
341
342      if (total_announcement_left === 0) {
343          if (closeButton) closeButton.style.display = 'none';
344          if (announcementBar) announcementBar.style.display = 'none';
345          if (announcementBarTop) announcementBarTop.style.display = 'none';
346          if (header) header.style.top = '0px';
347          if (topbar) topbar.style.top = '0px';
348      }
349  }
350
351  let closeButton = document.querySelector("#announcement-close-button");
352  if (closeButton) {
353      closeButton.addEventListener('click', () => {
354          let announcementBar = document.querySelector("#announcement-bar");
355          let announcementBarTop = document.querySelector("#announcement-bar-top");
356          let header = document.querySelector("#easystore-section-header");
357          let topbar = document.querySelector(".sticky-topbar");
358
359          if (announcementBar) announcementBar.style.display = 'none';
360          if (announcementBarTop) announcementBarTop.style.display = 'none';
361          if (header) header.style.top = '';
362          if (topbar) topbar.style.top = '';
363      });
364  }
365
366</script>
366
367
368
369<script>
370  (function initializeMarquee() {
371    const marqueeWrapper = document.querySelector(`#announcement-bar .app_marquee-wrapper`);
372    const marqueeContainer = document.querySelector(`#announcement-bar .app_marquee-container`);
373
374    if (!marqueeWrapper || !marqueeContainer) return;
375
376    const children = Array.from(marqueeContainer.children);
377
378    // Calculate the total width of children
379    let totalWidth = children.reduce((acc, child) => acc + child.offsetWidth, 0);
380    const screenWidth = window.innerWidth;
381
382    // Clone children until the total width exceeds the screen width
383    if(totalWidth > 5){
384      while (totalWidth < screenWidth * 3) {
385        children.forEach(child => {
386          const clone = child.cloneNode(true);
387          marqueeContainer.appendChild(clone);
388          totalWidth += clone.offsetWidth;
389        });
390      }
391    }
392
393    // Clone the marquee container
394    const clonedContainer = marqueeContainer.cloneNode(true);
395    marqueeWrapper.appendChild(clonedContainer);
396  })();
397</script>
397
398
399<!-- /Snippet -->
400
401<!-- Snippet:global/body_start: Console Extension -->
402<div id='es_console' style='display: none;'>619811</div>
403<!-- /Snippet -->
404
405	
406 	<style>
407  header {
408    --logo-width: 55px;
409  }
410  .header-wrapper,
411  .header-wrapper .list-menu--disclosure,
412  .header-wrapper .search-modal{
413    background-color: #F5B650;
414  }
415  .header-wrapper .search-modal .field__input{
416    background-color: rgb(var(--color-background));
417  }
418  .header-wrapper summary .icon-caret,
419  .header-wrapper .header__menu-item a,
420  .header-wrapper .list-menu__item,
421  .header-wrapper .link--text{
422    color: #141313;
423  }
424  
425  .search-modal__form{
426    position: relative;
427  }
428  
429  .dropdown {
430    display: none;
431    position: absolute;
432    top: 100%;
433    left: 0;
434    width: 100%;
435    padding: 5px 0;
436    background-color: #fff;
437    color:#000;
438    z-index: 1000;
439    border-bottom-left-radius: 15px;
440    border-bottom-right-radius: 15px;
441    border: 1px solid rgba(var(--color-foreground), 1);
442    border-top: none;
443    overflow-x: hidden;
444    overflow-y: auto;
445    max-height: 350px;
446  }
447  
448  .dropdown-item {
449    padding: 0.4rem 2rem;
450    cursor: pointer;
451    line-height: 1.4;
452    overflow: hidden;
453    text-overflow: ellipsis;
454    white-space: nowrap;
455  }
456  
457  .dropdown-item:hover{
458    background-color: #f3f3f3;
459  }
460  
461  .search__input.is-focus{
462    border-radius: 15px;
463    border-bottom-left-radius: 0;
464    border-bottom-right-radius: 0;
465    border: 1px solid rgba(var(--color-foreground), 1);
466    border-bottom: none;
467    box-shadow: none;
468  }
469  
470  .clear-all {
471    text-align: right;
472    padding: 0 2rem 0.2rem;
473    line-height: 1;
474    font-size: 70%;
475    margin-bottom: -2px;
476  }
477  
478  .clear-all:hover{
479    background-color: #fff;
480  }
481  
482  .search-input-focus .easystore-section-header-hidden{
483    transform: none;
484  }
485  .referral-notification {
486    position: absolute;
487    top: 100%;
488    right: 0;
489    background: white;
490    border: 1px solid #e0e0e0;
491    border-radius: 8px;
492    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
493    width: 280px;
494    z-index: 1000;
495    padding: 16px;
496    margin-top: 8px;
497    font-size: 14px;
498    line-height: 1.4;
499  }
500  
501  .referral-notification::before {
502    content: '';
503    position: absolute;
504    top: -8px;
505    right: 20px;
506    width: 0;
507    height: 0;
508    border-left: 8px solid transparent;
509    border-right: 8px solid transparent;
510    border-bottom: 8px solid white;
511  }
512  
513  .referral-notification::after {
514    content: '';
515    position: absolute;
516    top: -9px;
517    right: 20px;
518    width: 0;
519    height: 0;
520    border-left: 8px solid transparent;
521    border-right: 8px solid transparent;
522    border-bottom: 8px solid #e0e0e0;
523  }
524  
525  .referral-notification h4 {
526    margin: 0 0 8px 0;
527    color: #2196F3;
528    font-size: 16px;
529    font-weight: 600;
530  }
531  
532  .referral-notification p {
533    margin: 0 0 12px 0;
534    color: #666;
535  }
536  
537  .referral-notification .referral-code {
538    background: #f5f5f5;
539    padding: 8px;
540    border-radius: 4px;
541    font-family: monospace;
542    font-size: 13px;
543    text-align: center;
544    margin: 8px 0;
545    border: 1px solid #ddd;
546  }
547  
548  .referral-notification .close-btn {
549    position: absolute;
550    top: 8px;
551    right: 8px;
552    background: none;
553    border: none;
554    font-size: 18px;
555    color: #999;
556    cursor: pointer;
557    padding: 0;
558    width: 20px;
559    height: 20px;
560    line-height: 1;
561  }
562  
563  .referral-notification .close-btn:hover {
564    color: #333;
565  }
566  
567  .referral-notification .action-btn {
568    background: #2196F3;
569    color: white;
570    border: none;
571    padding: 8px 16px;
572    border-radius: 4px;
573    cursor: pointer;
574    font-size: 12px;
575    margin-right: 8px;
576    margin-top: 8px;
577  }
578  
579  .referral-notification .action-btn:hover {
580    background: #1976D2;
581  }
582  
583  .referral-notification .dismiss-btn {
584    background: transparent;
585    color: #666;
586    border: 1px solid #ddd;
587    padding: 8px 16px;
588    border-radius: 4px;
589    cursor: pointer;
590    font-size: 12px;
591    margin-top: 8px;
592  }
593  
594  .referral-notification .dismiss-btn:hover {
595    background: #f5f5f5;
596  }
597  .referral-modal__dialog {
598    transform: translate(-50%, 0);
599    transition: transform var(--duration-default) ease, visibility 0s;
600    z-index: 10000;
601    position: fixed;
602    top: 20vh;
603    left: 50%;
604    width: 100%;
605    max-width: 350px;
606    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
607    border-radius: 12px;
608    background-color: #fff;
609    color: #000;
610    padding: 20px;
611    text-align: center;
612  }
613
614  .modal-overlay.referral-modal-overlay {
615    position: fixed;
616    top: 0;
617    left: 0;
618    width: 100%;
619    height: 100%;
620    background-color: rgba(0, 0, 0, 0.7);
621    z-index: 2001;
622    display: block;
623    opacity: 1;
624    transition: opacity var(--duration-default) ease, visibility 0s;
625  }
626</style>
627
628<link rel="preload" href="https://store-themes.easystore.co/619811/themes/175052/assets/section-header.css?t=1787072506" as="style" onload="this.onload=null;this.rel='stylesheet'">
629<link rel="preload" href="https://store-themes.easystore.co/619811/themes/175052/assets/component-list-menu.css?t=1787072506" as="style" onload="this.onload=null;this.rel='stylesheet'">
630<link rel="preload" href="https://store-themes.easystore.co/619811/themes/175052/assets/component-menu-drawer.css?t=1787072506" as="style" onload="this.onload=null;this.rel='stylesheet'">
631<link rel="preload" href="https://store-themes.easystore.co/619811/themes/175052/assets/component-cart-notification.css?v1.1?t=1787072506" as="style" onload="this.onload=null;this.rel='stylesheet'">
632
633<script src="https://store-themes.easystore.co/619811/themes/175052/assets/cart-notification.js?t=1787072506" defer="defer"></script>
vendor: 2 bytes, line 633
633
634<script src="https://store-themes.easystore.co/619811/themes/175052/assets/details-modal.js?t=1787072506" defer="defer"></script>
634
635
636<svg xmlns="http://www.w3.org/2000/svg" class="hidden">
637  <symbol id="icon-search" viewbox="0 0 18 19" fill="none">
638    <path fill-rule="evenodd" clip-rule="evenodd" d="M11.03 11.68A5.784 5.784 0 112.85 3.5a5.784 5.784 0 018.18 8.18zm.26 1.12a6.78 6.78 0 11.72-.7l5.4 5.4a.5.5 0 11-.71.7l-5.41-5.4z" fill="currentColor"/>
639  </symbol>
640
641  <symbol id="icon-close" class="icon icon-close" fill="none" viewBox="0 0 18 17">
642    <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">
643  </symbol>
644</svg>
645
646
647<div id="easystore-section-header">
648  <sticky-header class="header-wrapper header-wrapper--border-bottom">
649    <header class="header header--middle-left page-width header--has-menu" itemscope itemtype="http://schema.org/Organization">
650      <header-drawer data-breakpoint="tablet">
651        <details class="menu-drawer-container menu-opening">
652          <summary class="header__icon header__icon--menu header__icon--summary link link--text focus-inset" aria-label="Menu" role="button" aria-expanded="true" aria-controls="menu-drawer">
653            <span>
654              
655
656
657    <svg class="icon icon-hamburger " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M32.5,65h535a25,25,0,0,0,0-50H32.5a25,25,0,0,0,0,50Z" fill="currentColor"/><path d="M567.5,275H32.5a25,25,0,0,0,0,50h535a25,25,0,0,0,0-50Z" fill="currentColor"/><path d="M567.5,535H32.5a25,25,0,0,0,0,50h535a25,25,0,0,0,0-50Z" fill="currentColor"/></svg>
658
659  
660
661              
662
663
664    <svg class="icon icon-close " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M335.36,300,581.87,53.48a25,25,0,0,0-35.35-35.35L300,264.64,53.48,18.13A25,25,0,0,0,18.13,53.48L264.64,300,18.13,546.52a25,25,0,0,0,35.35,35.35L300,335.36,546.52,581.87a25,25,0,0,0,35.35-35.35Z" fill="currentColor"/></svg>
665
666  
667
668            </span>
669          </summary>
670          <div id="menu-drawer" class="menu-drawer motion-reduce" tabindex="-1">
671            <div class="menu-drawer__inner-container">
672              <div class="menu-drawer__navigation-container">
673                <nav class="menu-drawer__navigation">
674                  <ul class="menu-drawer__menu list-menu" role="list">
675                    
676                    
677                      
678                        <li>
679                          <a href="/"  class="menu-drawer__menu-item list-menu__item link link--text focus-inset">
680                            Home
681                          </a>
682                        </li>
683                      
684                    
685                    
686                      
687                        
688                        <li>
689                          <details>
690                                <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags">
691                                  <a href="/collections/all"  class="link--text list-menu__item menu-drawer__menu-item">
692                                    Products
693                                  </a>
694                                  
695
696
697    <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg>
698
699  
700
701                                  
702
703
704    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6">
705      <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path>
706    </svg>
707
708  
709
710                                </summary>
711                                <div class="menu-drawer__submenu motion-reduce" tabindex="-1">
712                                  <div class="menu-drawer__inner-submenu">
713                                    <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true">
714                                      
715
716
717    <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg>
718
719  
720
721                                      Products
722                                    </button>
723                                    <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1">
724                                      
725                                        
726                                        
727                                          <li>
728                                            <a href="/collections/lezzetto-cakes"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
729                                              LEZZETTO SIGNATURE CA
729KES
730                                            </a>
731                                          </li>
732                                        
733                                      
734                                        
735                                        
736                                          <li>
737                                            <a href="/collections/ice-cream-cake-whole"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
738                                              ICE CREAM CAKE (WHOLE)
739                                            </a>
740                                          </li>
741                                        
742                                      
743                                        
744                                        
745                                          <li>
746                                            <a href="/collections/aussum-ice-cream"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
747                                              AUSSUM ICE CREAM
748                                            </a>
749                                          </li>
750                                        
751                                      
752                                        
753                                        
754                                          <li>
755                                            <a href="/collections/lezzetto-premium-ice-cream"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
756                                              LEZZETTO PREMIUM ICE CREAM
757                                            </a>
758                                          </li>
759                                        
760                                      
761                                        
762                                        
763                                          <li>
764                                            <a href="/collections/christmas-promotion"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
765                                              FESTIVE CAKES
766                                            </a>
767                                          </li>
768                                        
769                                      
770                                        
771                                        
772                                          <li>
773                                            <a href="/collections/best-selling"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
774                                              BEST SELLING
775                                            </a>
776                                          </li>
777                                        
778                                      
779                                        
780                                        
781                                          <li>
782                                            <a href="/collections/special-item"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
783                                              SPECIAL ITEM
784                                            </a>
785                                          </li>
786                                        
787                                      
788                                      
789                                    </ul>
790                                  </div>
791                                </div>
792                          </details>
793                        </li>
794                      
795                    
796                    
797                      
798                        <li>
799                          <a href="/pages/about-us"  class="menu-drawer__menu-item list-menu__item link link--text focus-inset">
800                            About Us
801                          </a>
802                        </li>
803                      
804                    
805                    
806                      
807                        <li>
808                          <a href="/pages/new-promotion"  class="menu-drawer__menu-item list-menu__item link link--text focus-inset">
809                            New Promotion!
810                          </a>
811                        </li>
812                      
813                    
814                    
815                      
816                        <li>
817                          <a href="/pages/promotion"  class="menu-drawer__menu-item list-menu__item link link--text focus-inset">
818                            Promotion
819                          </a>
820                        </li>
821                      
822                    
823                    
824                      
825                        <li>
826                          <a href="/pages/food-panda"  class="menu-drawer__menu-item list-menu__item link link--text focus-inset">
827                            Food Panda
828                          </a>
829                        </li>
830                      
831                    
832                    
833                      
834                        <li>
835                          <a href="/pages/customer-review"  class="menu-drawer__menu-item list-menu__item link link--text focus-inset">
836                            Customer Review
837                          </a>
838                        </li>
839                      
840                    
841                    
842                      
843                        <li>
844                          <a href="/pages/delivery-charges"  class="menu-drawer__menu-item list-menu__item link link--text focus-inset">
845                            Delivery Charges
846                          </a>
847                        </li>
848                      
849                    
850                    
851                      
852                        <li>
853                          <a href="/collections/special-item"  class="menu-drawer__menu-item list-menu__item link link--text focus-inset">
854                            Special Item
855                          </a>
856                        </li>
857                      
858                    
859                    
860                      
861                        <li>
862                          <a href="https://www.wasap.my/60125355202/naklezzetto"  class="menu-drawer__menu-item list-menu__item link link--text focus-inset">
863                            Contact Us
864                          </a>
865                        </li>
866                      
867                    
868                  </ul>
869                </nav>
870
871                <div class="menu-drawer__utility-links">
872
873                  
874
875
876
877
878
879                  
880                  
881                  
882                    <a href="/account/login" class="menu-drawer__account link link--text focus-inset h5">
883                       
884
885
886    <svg class="icon icon-account " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M300,296.19c-70.7,0-137.11,28.74-187,80.93-49.59,51.87-76.9,120.77-76.9,194v25H563.89v-25c0-73.22-27.31-142.12-76.9-194C437.11,324.93,370.7,296.19,300,296.19ZM87.42,546.11C99.29,433.81,190.1,346.19,300,346.19s200.71,87.62,212.58,199.92Z" fill="currentColor"/><path d="M300,285.34c77.6,0,140.73-63.13,140.73-140.73S377.6,3.89,300,3.89,159.27,67,159.27,144.61,222.4,285.34,300,285.34Zm0-231.45a90.73,90.73,0,1,1-90.73,90.72A90.82,90.82,0,0,1,300,53.89Z" fill="currentColor"/></svg>
887
888  
889 
890                      
891                      Log in
892                    </a>
893                  
894                    <a href="/account/register" class="menu-drawer__account link link--text focus-inset h5">
895                      
896                       
897
898
899    <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-plus " fill="none" viewBox="0 0 10 10">
900      <path fill-rule="evenodd" clip-rule="evenodd" d="M1 4.51a.5.5 0 000 1h3.5l.01 3.5a.5.5 0 001-.01V5.5l3.5-.01a.5.5 0 00-.01-1H5.5L5.49.99a.5.5 0 00-1 .01v3.5l-3.5.01H1z" fill="currentColor"></path>
901    </svg>
902
903  
904 
905                      Create account
906                    </a>
907                  
908                  
909                  
910                </div>
911              </div>
912            </div>
913          </div>
914        </details>
915      </header-drawer>
916  
917      
918        <a href="/" class="header__heading-link link link--text focus-inset" itemprop="url">
919          <img src="https://cdn.store-assets.com/s/619811/f/6394913.png" class="header__heading-logo" alt="Lezzetto" loading="lazy" itemprop="logo">
920        </a>
921      
922
923      
924      <div class="header__search-input" tabindex="-1">
925        <form action="/search" method="get" role="search" class="search search-modal__form">
926          <div class="field">
927            <input class="search__input field__input" 
928              id="Search-In-Modal"
929              type="search"
930              name="q"
931              value=""
932              placeholder="Search"
933              autocomplete="off"
934            >
935            <label class="field__label" for="Search-In-Modal">Search</label>
936            <div class="dropdown" id="searchDropdown"></div>
937            <input type="hidden" name="search_history" class="hidden_search_history">
938            <input type="hidden" name="options[prefix]" value="last">
939            <button class="search__button field__button" aria-label="Search">
940              <svg class="icon icon-search" aria-hidden="true" focusable="false" role="presentation">
941                <use href="#icon-search">
942              </svg>
943            </button> 
944          </div>
945        </form>
946      </div>
947      
948
949      <nav class="header__inline-menu">
950        <ul class="list-menu list-menu--inline" role="list">
951          
952            
953              
954                <li>
955                  <a href="/"  class="header__menu-item header__menu-item list-menu__item link link--text focus-inset">
956                    Home
957                  </a>
958                </li>
959              
960            
961            
962              
963                
964                <li>
965                  <details-disclosure>
966                    <details>
967                      <summary class="header__menu-item list-menu__item link focus-inset">
968                        <a href="/collections/all"  >Products</a>
969                        
970
971
972    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6">
973      <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path>
974    </svg>
975
976  
977
978                      </summary>
979                      <ul class="header__submenu list-menu list-menu--disclosure caption-large motion-reduce" role="list" tabindex="-1">
980                        
981                        
982                        
983                          
984                            
985                            <li>
986                              <a href="/collections/lezzetto-cakes"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
987                                LEZZETTO SIGNATURE CAKES
988                              </a>
989                            </li>
990                          
991                        
992                        
993                          
994                            
995                            <li>
996                              <a href="/collections/ice-cream-cake-whole"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
997                                ICE CREAM CAKE (WHOLE)
998                              </a>
999                            </li>
1000                          
1001                        
1002                        
1003                          
1004                            
1005                            <li>
1006                              <a href="/collections/aussum-ice-cream"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1007                                AUSSUM ICE CREAM
1008                              </a>
1009                            </li>
1010                          
1011                        
1012                        
1013                          
1014                            
1015                            <li>
1016                              <a href="/collections/lezzetto-premium-ice-cream"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1017                                LEZZETTO PREMIUM ICE CREAM
1018                              </a>
1019                            </li>
1020                          
1021                        
1022                        
1023                          
1024                            
1025                            <li>
1026                              <a href="/collections/christmas-promotion"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1027                                FESTIVE CAKES
1028                              </a>
1029                            </li>
1030                          
1031                        
1032                        
1033                          
1034                            
1035                            <li>
1036                              <a href="/collections/best-selling"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1037                                BEST SELLING
1038                              </a>
1039                            </li>
1040                          
1041                        
1042                        
1043                          
1044                            
1045                            <li>
1046                              <a href="/collections/special-item"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1047                                SPECIAL ITEM
1048                              </a>
1049                            </li>
1050                          
1051                        
1052                      </ul>
1053                    </details>
1054                  </details-disclosure>
1055                </li>
1056              
1057            
1058            
1059              
1060                <li>
1061                  <a href="/pages/about-us"  class="header__menu-item header__menu-item list-menu__item link link--text focus-inset">
1062                    About Us
1063                  </a>
1064                </li>
1065              
1066            
1067            
1068              
1069                <li>
1070                  <a href="/pages/new-promotion"  class="header__menu-item header__menu-item list-menu__item link link--text focus-inset">
1071                    New Promotion!
1072                  </a>
1073                </li>
1074              
1075            
1076            
1077              
1078                <li>
1079                  <a href="/pages/promotion"  class="header__menu-item header__menu-item list-menu__item link link--text focus-inset">
1080                    Promotion
1081                  </a>
1082                </li>
1083              
1084            
1085            
1086              
1087                <li>
1088                  <a href="/pages/food-panda"  class="header__menu-item header__menu-item list-menu__item link link--text focus-inset">
1089                    Food Panda
1090                  </a>
1091                </li>
1092              
1093            
1094            
1095              
1096                <li>
1097                  <a href="/pages/customer-review"  class="header__menu-item header__menu-item list-menu__item link link--text focus-inset">
1098                    Customer Review
1099                  </a>
1100                </li>
1101              
1102            
1103            
1104              
1105                <li>
1106                  <a href="/pages/delivery-charges"  class="header__menu-item header__menu-item list-menu__item link link--text focus-inset">
1107                    Delivery Charges
1108                  </a>
1109                </li>
1110              
1111            
1112            
1113              
1114                <li>
1115                  <a href="/collections/special-item"  class="header__menu-item header__menu-item list-menu__item link link--text focus-inset">
1116                    Special Item
1117                  </a>
1118                </li>
1119              
1120            
1121            
1122              
1123                <li>
1124                  <a href="https://www.wasap.my/60125355202/naklezzetto"  class="header__menu-item header__menu-item list-menu__item link link--text focus-inset">
1125                    Contact Us
1126                  </a>
1127                </li>
1128              
1129            
1130            
1131            
1132              
1133                
1134                  
1135                
1136                  
1137                
1138              
1139            
1140        </ul>
1141      </nav>
1142      <div class="header__icons">
1143
1144        
1145          
1146            <div class="header__icon header__icon--account link link--text focus-inset small-hide medium-hide" style="position: relative;">
1147              <a href="/account/login" class="header__icon link link--text focus-inset p-2">
1148                
1149
1150
1151    <svg class="icon icon-account " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M300,296.19c-70.7,0-137.11,28.74-187,80.93-49.59,51.87-76.9,120.77-76.9,194v25H563.89v-25c0-73.22-27.31-142.12-76.9-194C437.11,324.93,370.7,296.19,300,296.19ZM87.42,546.11C99.29,433.81,190.1,346.19,300,346.19s200.71,87.62,212.58,199.92Z" fill="currentColor"/><path d="M300,285.34c77.6,0,140.73-63.13,140.73-140.73S377.6,3.89,300,3.89,159.27,67,159.27,144.61,222.4,285.34,300,285.34Zm0-231.45a90.73,90.73,0,1,1-90.73,90.72A90.82,90.82,0,0,1,300,53.89Z" fill="currentColor"/></svg>
1152
1153  
1154
1155                <span id="my-account" class="header__link-label">Login</span>
1156              </a>
1157
1158              <!-- Referral Notification Popup for Desktop -->
1159              <div id="referralNotification" class="referral-notification" style="display: none;">
1160                <button class="close-btn" onclick="dismissReferralNotification()">&times;</button>
1161                <div style="text-align: center; margin-bottom: 16px;">
1162                  <div style="width: 100px; height: 100px; margin: 0 auto;">
1163                    <img src="https://resources.easystore.co/storefront/icons/channels/vector_referral_program.svg">
1164                  </div>
1165                </div>
1166                <p id="referralSignupMessage" style="text-align: center; font-size: 14px; color: #666; margin: 0 0 20px 0;">
1167                  Your friend gifted you   credit! Sign up now to redeem.
1168                </p>
1169                <div style="text-align: center;">
1170                  <button class="btn" onclick="goToSignupPage()" style="width: 100%;">
1171                    Sign Up
1172                  </button>
1173                </div>
1174              </div>
1175            </div>
1176          
1177        
1178
1179        <a href="/cart" class="header__icon link link--text focus-inset" id="cart-icon-bubble">
1180          <span class="header__icon--cart">
1181            
1182
1183
1184    <svg class="icon icon-cart-empty " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496.56 600"><path d="M453.52,128.63a25,25,0,0,0-24.91-22.8H364.72a117.48,117.48,0,0,0-232.89,0H67.94A25,25,0,0,0,43,128.63L8.8,515.21a72.11,72.11,0,0,0,19.05,55.6,79,79,0,0,0,58.22,25.3H410.49a79,79,0,0,0,58.22-25.3,72.11,72.11,0,0,0,19.05-55.6ZM248.28,53.89a67.58,67.58,0,0,1,65.65,51.94H182.63A67.57,67.57,0,0,1,248.28,53.89ZM431.83,537.05a28.85,28.85,0,0,1-21.34,9.06H86.07a28.85,28.85,0,0,1-21.34-9.06,22.69,22.69,0,0,1-6.13-17.43L90.82,155.83h40v51.23a25,25,0,0,0,50,0V155.83h135v51.23a25,25,0,0,0,50,0V155.83h40L438,519.62A22.68,22.68,0,0,1,431.83,537.05Z" fill="currentColor"/></svg>
1185
1186  
1187
1188            <div class="cart-count-bubble hidden">
1189              <span aria-hidden="true" class="js-content-cart-count">0</span>
1190            </div>
1191          </span>
1192          <span class="header__link-label medium-hide small-hide">
1193            Cart
1194          </span>
1195        </a>
1196
1197        
1198          
1199          <!-- Referral Notification Modal for Mobile -->
1200          <details-modal class="referral-modal" id="referralMobileModal">
1201            <details>
1202              <summary class="referral-modal__toggle" aria-haspopup="dialog" aria-label="Open referral modal" style="display: none;">
1203              </summary>
1204              <div class="modal-overlay referral-modal-overlay"></div>
1205              <div class="referral-modal__dialog" role="dialog" aria-modal="true" aria-label="Referral notification">
1206                <div class="referral-modal__content">
1207                  <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;">
1208                    &times;
1209                  </button>
1210                  
1211                  <div style="margin-bottom: 24px;">
1212                    <div style="width: 120px; height: 120px; margin: 0 auto 20px;">
1213                      <img src="https://resources.easystore.co/storefront/icons/channels/vector_referral_program.svg" style="width: 100%; height: 100%;">
1214                    </div>
1215                  </div>
1216                  
1217                  <p id="referralSignupMessageMobile" style="font-size: 16px; color: #333; margin: 0 0 30px 0; line-height: 1.5;">
1218                    Your friend gifted you   credit! Sign up now to redeem.
1219                  </p>
1220                  
1221                  <button type="button" class="btn" onclick="goToSignupPageFromMobile()" style="width: 100%;">
1222                    Sign Up
1223                  </button>
1224                </div>
1225              </div>
1226            </details>
1227          </details-modal>
1228          
1229        
1230        
1231      </div>
1232    </header>
1233  </sticky-header>
1234  
1235<cart-notification>
1236  <div class="cart-notification-wrapper page-width color-background-1">
1237    <div id="cart-notification" class="cart-notification focus-inset" aria-modal="true" aria-label="Added to cart" role="dialog" tabindex="-1">
1238      <div class="cart-notification__header">
1239        <h2 class="cart-notification__heading caption-large">
1240
1241
1242    <svg class="icon icon-checkmark color-foreground-text " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 9" fill="none">
1243      <path fill-rule="evenodd" clip-rule="evenodd" d="M11.35.643a.5.5 0 01.006.707l-6.77 6.886a.5.5 0 01-.719-.006L.638 4.845a.5.5 0 11.724-.69l2.872 3.011 6.41-6.517a.5.5 0 01.707-.006h-.001z" fill="currentColor"></path>
1244    </svg>
1245
1246  
1247 Added to cart</h2>
1248        <button type="button" class="cart-notification__close modal__close-button link link--text focus-inset" aria-label="accessibility.close">
1249          
1250
1251
1252    <svg class="icon icon-close " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M335.36,300,581.87,53.48a25,25,0,0,0-35.35-35.35L300,264.64,53.48,18.13A25,25,0,0,0,18.13,53.48L264.64,300,18.13,546.52a25,25,0,0,0,35.35,35.35L300,335.36,546.52,581.87a25,25,0,0,0,35.35-35.35Z" fill="currentColor"/></svg>
1253
1254  
1255
1256        </button>
1257      </div>
1258      <div id="cart-notification-product" class="cart-notification-product"></div>
1259      <div class="cart-notification__links">
1260        <a href="/cart" id="cart-notification-button" class="button button--secondary button--full-width">View cart (<span class="js-content-cart-count">0</span>)</a>
1261        <form action="/cart" method="post" id="cart-notification-form">
1262          <input type="hidden" name="_token" value="35iEZqQNFuLJhdREkG0X2ERGd7fx0i8clts9nWEY">
1263          <input type="hidden" name="current_currency" value="">
1264          <button class="button button--primary button--full-width" name="checkout" value="true">Checkout</button>
1265        </form>
1266        <button type="button" class="link button-label">Continue shopping</button>
1267      </div>
1268    </div>
1269  </div>
1270</cart-notification>
1271<style>
1272  .cart-notification {
1273     display: none;
1274  }
1275</style>
1276<script>
1277document.getElementById('cart-notification-form').addEventListener('submit',(event)=>{
1278  if(event.submitter) event.submitter.classList.add('loading');
1279})
1280
1281</script>
1281
1282
1283</div>
1284
1285
1286<script>
1287
1288  class StickyHeader extends HTMLElement {
1289    constructor() {
1290      super();
1291    }
1292
1293    connectedCallback() {
1294      this.header = document.getElementById('easystore-section-header');
1295      this.headerBounds = {};
1296      this.currentScrollTop = 0;
1297      this.preventReveal = false;
1298
1299      this.onScrollHandler = this.onScroll.bind(this);
1300      this.hideHeaderOnScrollUp = () => this.preventReveal = true;
1301
1302      this.addEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp);
1303      window.addEventListener('scroll', this.onScrollHandler, false);
1304
1305      this.createObserver();
1306    }
1307
1308    disconnectedCallback() {
1309      this.removeEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp);
1310      window.removeEventListener('scroll', this.onScrollHandler);
1311    }
1312
1313    createObserver() {
1314      let observer = new IntersectionObserver((entries, observer) => {
1315        this.headerBounds = entries[0].intersectionRect;
1316        observer.disconnect();
1317      });
1318
1319      observer.observe(this.header);
1320    }
1321
1322    onScroll() {
1323      const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
1324
1325      if (scrollTop > this.currentScrollTop && scrollTop > this.headerBounds.bottom) {
1326        requestAnimationFrame(this.hide.bind(this));
1327      } else if (scrollTop < this.currentScrollTop && scrollTop > this.headerBounds.bottom) {
1328        if (!this.preventReveal) {
1329          requestAnimationFrame(this.reveal.bind(this));
1330        } else {
1331          window.clearTimeout(this.isScrolling);
1332
1333          this.isScrolling = setTimeout(() => {
1334            this.preventReveal = false;
1335          }, 66);
1336
1337          requestAnimationFrame(this.hide.bind(this));
1338        }
1339      } else if (scrollTop <= this.headerBounds.top) {
1340        requestAnimationFrame(this.reset.bind(this));
1341      }
1342
1343
1344      this.currentScrollTop = scrollTop;
1345    }
1346
1347    hide() {
1348      this.header.classList.add('easystore-section-header-hidden', 'easystore-section-header-sticky');
1349      this.closeMenuDisclosure();
1350      // this.closeSearchModal();
1351    }
1352
1353    reveal() {
1354      this.header.classList.add('easystore-section-header-sticky', 'animate');
1355      this.header.classList.remove('easystore-section-header-hidden');
1356    }
1357
1358    reset() {
1359      this.header.classList.remove('easystore-section-header-hidden', 'easystore-section-header-sticky', 'animate');
1360    }
1361
1362    closeMenuDisclosure() {
1363      this.disclosures = this.disclosures || this.header.querySelectorAll('details-disclosure');
1364      this.disclosures.forEach(disclosure => disclosure.close());
1365    }
1366
1367    // closeSearchModal() {
1368    //   this.searchModal = this.searchModal || this.header.querySelector('details-modal');
1369    //   this.searchModal.close(false);
1370    // }
1371  }
1372
1373  customElements.define('sticky-header', StickyHeader);
1374
1375  
1376  class DetailsDisclosure extends HTMLElement{
1377    constructor() {
1378      super();
1379      this.mainDetailsToggle = this.querySelector('details');
1380      // this.mainDetailsToggle.addEventListener('focusout', this.onFocusOut.bind(this));
1381      this.mainDetailsToggle.addEventListener('mouseover', this.open.bind(this));
1382      this.mainDetailsToggle.addEventListener('mouseleave', this.close.bind(this));
1383    }
1384
1385    onFocusOut() {
1386      setTimeout(() => {
1387        if (!this.contains(document.activeElement)) this.close();
1388      })
1389    }
1390
1391    open() {
1392      this.mainDetailsToggle.setAttribute('open',1)
1393    }
1394
1395    close() {
1396      this.mainDetailsToggle.removeAttribute('open')
1397    }
1398  }
1399
1400  customElements.define('details-disclosure', DetailsDisclosure);
1401
1402  function clearAll() {
1403    localStorage.removeItem('searchHistory'); 
1404    
1405    var customer = "";
1406    if(customer) {
1407      // Your logic to clear all data or call an endpoint
1408      fetch('/account/search_histories', {
1409          method: 'DELETE',
1410          headers: {
1411            "Content-Type": "application/json",
1412            "X-Requested-With": "XMLHttpRequest"
1413          },
1414          body: JSON.stringify({
1415            _token: "35iEZqQNFuLJhdREkG0X2ERGd7fx0i8clts9nWEY"
1416          }),
1417      })
1418      .then(response => response.json())
1419    }
1420  }
1421  // End - delete search history from local storage
1422  
1423  // search history dropdown  
1424  var searchInputs = document.querySelectorAll('.search__input');
1425  
1426  if(searchInputs.length > 0) {
1427    
1428    searchInputs.forEach((searchInput)=> {
1429    
1430      searchInput.addEventListener('focus', function() {
1431        var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown');
1432        searchDropdown.innerHTML = ''; // Clear existing items
1433  
1434        // retrieve data from local storage
1435        var searchHistoryData = JSON.parse(localStorage.getItem('searchHistory')) || [];
1436  
1437        // Convert JSON to string
1438        var search_history_json = JSON.stringify(searchHistoryData);
1439  
1440        // Set the value of the hidden input
1441        searchInput.closest('form').querySelector(".hidden_search_history").value = search_history_json;
1442  
1443        // create dropdown items
1444        var clearAllItem = document.createElement('div');
1445        clearAllItem.className = 'dropdown-item clear-all';
1446        clearAllItem.textContent = 'Clear';
1447        clearAllItem.addEventListener('click', function() {
1448          clearAll();
1449          searchDropdown.style.display = 'none';
1450          searchInput.classList.remove('is-focus');
1451        });
1452        searchDropdown.appendChild(clearAllItem);
1453  
1454        // create dropdown items
1455        searchHistoryData.forEach(function(item) {
1456          var dropdownItem = document.createElement('div');
1457          dropdownItem.className = 'dropdown-item';
1458          dropdownItem.textContent = item.term;
1459          dropdownItem.addEventListener('click', function() {
1460            searchInput.value = item.term;
1461            searchInput.closest('form').submit();
1462            searchDropdown.style.display = 'none';
1463          });
1464          searchDropdown.appendChild(dropdownItem);
1465        });
1466  
1467        if(searchHistoryData.length > 0){
1468          // display the dropdown
1469          searchInput.classList.add('is-focus');
1470          document.body.classList.add('search-input-focus');
1471          searchDropdown.style.display = 'block';
1472        }
1473      });
1474  
1475      searchInput.addEventListener("focusout", (event) => {
1476        var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown');
1477        searchInput.classList.remove('is-focus');
1478        searchDropdown.classList.add('transparent');
1479        setTimeout(()=>{
1480          searchDropdown.style.display = 'none';
1481          searchDropdown.classList.remove('transparent');
1482          document.body.classList.remove('search-input-focus');
1483        }, 400);
1484      });
1485    })
1486  }
1487  // End - search history dropdown
1488
1489  // referral notification popup
1490  const referralMessageTemplate = 'Your friend gifted you __CURRENCY_CODE__ __CREDIT_AMOUNT__ credit! Sign up now to redeem.';
1491  const shopCurrency = 'RM';
1492
1493  function getCookie(name) {
1494    const value = `; ${document.cookie}`;
1495    const parts = value.split(`; ${name}=`);
1496    if (parts.length === 2) return parts.pop().split(';').shift();
1497    return null;
1498  }
1499
1500  function removeCookie(name) {
1501    document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;
1502  }
1503
1504  function showReferralNotification() {
1505    const referralCode = getCookie('customer_referral_code');
1506    
1507    
1508    const customerReferralCode = null;
1509    
1510    
1511    const activeReferralCode = referralCode || customerReferralCode;
1512    const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {};
1513    
1514    if (referralData.timestamp && referralData.expirationDays) {
1515      const expirationTime = referralData.timestamp + (referralData.expirationDays * 24 * 60 * 60 * 1000);
1516      if (Date.now() > expirationTime) {
1517        localStorage.removeItem('referral_notification_data');
1518        return;
1519      }
1520    }
1521    
1522    if (referralData.dismissed) return;
1523    
1524    if (activeReferralCode) {
1525      if (referralData.creditAmount) {
1526        displayReferralNotification(referralData.creditAmount);
1527      } else {
1528        fetchReferralCampaignData(activeReferralCode);
1529      }
1530    }
1531  }
1532    
1533  function fetchReferralCampaignData(referralCode) {
1534    fetch(`/customer/referral_program/campaigns/${referralCode}`)
1535      .then(response => {
1536        if (!response.ok) {
1537          throw new Error('Network response was not ok');
1538        }
1539        return response.json();
1540      })
1541      .then(data => {
1542        let refereeCreditAmount = null;
1543        if (data.data.campaign && data.data.campaign.referral_rules) {
1544          const refereeRule = data.data.campaign.referral_rules.find(rule => 
1545            rule.target_type === 'referee' && 
1546            rule.event_name === 'customer/create' && 
1547            rule.entitlement && 
1548            rule.entitlement.type === 'credit'
1549          );
1550          
1551          if (refereeRule) {
1552            refereeCreditAmount = refereeRule.entitlement.amount;
1553          }
1554        }
1555        
1556        const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {};
1557        referralData.creditAmount = refereeCreditAmount;
1558        referralData.dismissed = referralData.dismissed || false;
1559        referralData.timestamp = Date.now();
1560        referralData.expirationDays = 3;
1561        localStorage.setItem('referral_notification_data', JSON.stringify(referralData));
1562        
1563        displayReferralNotification(refereeCreditAmount);
1564      })
1565      .catch(error => {
1566        removeCookie('customer_referral_code');
1567      });
1568  }
1569    
1570  function displayReferralNotification(creditAmount = null) {
1571    const isMobile = innerWidth <= 749;
1572    
1573    if (isMobile) {
1574      const mobileModal = document.querySelector('#referralMobileModal details');
1575      const mobileMessageElement = document.getElementById('referralSignupMessageMobile');
1576      
1577      if (mobileModal && mobileMessageElement) {
1578        if (creditAmount) {
1579          const finalMessage = referralMessageTemplate
1580            .replace('__CREDIT_AMOUNT__', creditAmount)
1581            .replace('__CURRENCY_CODE__', shopCurrency);
1582          
1583          mobileMessageElement.textContent = finalMessage;
1584        }
1585        
1586        mobileModal.setAttribute('open', '');
1587      }
1588    } else {
1589      const notification = document.getElementById('referralNotification');
1590      
1591      if (notification) {
1592        if (creditAmount) {
1593          const messageElement = document.getElementById('referralSignupMessage');
1594          if (messageElement) {
1595            const finalMessage = referralMessageTemplate
1596              .replace('__CREDIT_AMOUNT__', creditAmount)
1597              .replace('__CURRENCY_CODE__', shopCurrency);
1598            
1599            messageElement.textContent = finalMessage;
1600          }
1601        }
1602        
1603        notification.style.display = 'block';
1604      }
1605    }
1606  }
1607
1608  showReferralNotification();
1609
1610  addEventListener('beforeunload', function() {
1611    const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {};
1612    
1613    if (referralData.creditAmount !== undefined) {
1614      referralData.creditAmount = null;
1615      localStorage.setItem('referral_notification_data', JSON.stringify(referralData));
1616    }
1617  });
1618
1619  function closeReferralNotification() {
1620    const notification = document.getElementById('referralNotification');
1621    if (notification) {
1622      notification.style.display = 'none';
1623    }
1624  }
1625
1626  function dismissReferralNotification() {
1627    const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {};
1628    
1629    referralData.dismissed = true;
1630    referralData.timestamp = referralData.timestamp || Date.now();
1631    referralData.expirationDays = referralData.expirationDays || 3;
1632    
1633    localStorage.setItem('referral_notification_data', JSON.stringify(referralData));
1634    
1635    closeReferralNotification();
1636  }
1637
1638  function goToSignupPage() {
1639    location.href = '/account/register';
1640    dismissReferralNotification();
1641  }
1642
1643  function closeMobileReferralModal() {
1644    const mobileModal = document.querySelector('#referralMobileModal details');
1645    if (mobileModal) {
1646      mobileModal.removeAttribute('open');
1647    }
1648    
1649    const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {};
1650    referralData.dismissed = true;
1651    referralData.timestamp = referralData.timestamp || Date.now();
1652    referralData.expirationDays = referralData.expirationDays || 3;
1653    localStorage.setItem('referral_notification_data', JSON.stringify(referralData));
1654  }
1655
1656  function goToSignupPageFromMobile() {
1657    location.href = '/account/register';
1658    closeMobileReferralModal();
1659  }
1660  // End - referral notification popup
1661</script>
1661
1662
1663
1664
1665  <main id="MainContent" class="content-for-layout focus-none" role="main" tabindex="-1">
1666    
1667    
1668<!-- <link href="https://store-themes.easystore.co/619811/themes/175052/assets/component-rte.css?t=1787072506" rel="stylesheet" type="text/css" media="screen" /> -->
1669<link rel="preload" href="https://store-themes.easystore.co/619811/themes/175052/assets/section-main-product.css?t=1787072506" as="style" onload="this.onload=null;this.rel='stylesheet'">
1670<link rel="preload" href="https://store-themes.easystore.co/619811/themes/175052/assets/component-price.css?t=1787072506" as="style" onload="this.onload=null;this.rel='stylesheet'">
1671
1672<style>
1673  .product-wrapper_color{
1674    background-color: rgba(245, 245, 245, 1);
1675    padding: 30px;
1676    border-radius: 20px;
1677  }
1678  .product-card-wrapper{
1679    background-color: rgba(245, 245, 245, 1);
1680  }
1681</style>
1682
1683<link rel="preload" href="https://store-themes.easystore.co/619811/themes/175052/assets/component-slider.css?t=1787072506" as="style" onload="this.onload=null;this.rel='stylesheet'">
1684<script src="https://store-themes.easystore.co/619811/themes/175052/assets/product-form.js?t=1787072506" defer="defer"></script>
1684
1685
1686
1687<section class="product-section page-width spaced-section">
1688  
1689  <div class="product grid grid--1-col grid--2-col-tablet">
1690    
1691    
1692      <div class="grid__item product__media-wrapper">
1693        <div class="image-modal-wrapper">
1694          <slider-component class="slider-mobile-gutter slider-component">
1695            <ul id="main-image-wrapper" class="product__media-list grid grid--peek list-unstyled slider slider--mobile" role="list">
1696              
1697                <li id="image-item-85464388" class="product__media-item grid__item slider__slide d-flex flex-align-center" data-image-id="85464388">
1698                  
1699                    <img src="https://cdn.store-assets.com/s/619811/i/85464388.png" alt="Website Photo (18)" width="100%" loading="lazy" class="js-image-modal-toggle">
1700                  
1701                </li>
1702              
1703            </ul>
1704            <div class="slider-buttons no-js-hidden ">
1705              <button type="button" class="slider-button slider-button--prev" name="previous">
1706
1707
1708    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6">
1709      <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path>
1710    </svg>
1711
1712  
1713</button>
1714              <div class="slider-counter caption">
1715                <span class="slider-counter--current">1</span>
1716                <span aria-hidden="true"> / </span>
1717                <span class="slider-counter--total"></span>
1718              </div>
1719              <button type="button" class="slider-button slider-button--next" name="next">
1720
1721
1722    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6">
1723      <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path>
1724    </svg>
1725
1726  
1727</button>
1728            </div>
1729          </slider-component>
1730          <span class="js-image-modal-close product-media-modal__toggle hidden">
1731
1732
1733    <svg class="icon icon-close " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M335.36,300,581.87,53.48a25,25,0,0,0-35.35-35.35L300,264.64,53.48,18.13A25,25,0,0,0,18.13,53.48L264.64,300,18.13,546.52a25,25,0,0,0,35.35,35.35L300,335.36,546.52,581.87a25,25,0,0,0,35.35-35.35Z" fill="currentColor"/></svg>
1734
1735  
1736</span>
1737          
1738        </div>
1739      </div>
1740      
1741    
1742
1743
1744    <div class="grid__item product__info-wrapper">
1745      <div id="ProductInfo" class="product__info-container product__info-container--sticky">
1746        <div class="product-wrapper_color">
1747          
1748
1749          <h1 class="product__title">
1750            CHOCOLATE MOIST BLISS
1751          </h1>
1752
1753          <!-- price -->
1754          <div id="price">
1755            
1756
1757<div class="price
1758   price--large
1759  
1760   price--on-sale "
1761  data-expires="">
1762
1763  <dl>
1764    <div class="price__regular">
1765      <dt>
1766        <span class="visually-hidden visually-hidden--inline">Regular price</span>
1767      </dt>
1768      <dd >
1769        <span class="price-item price-item--regular">
1770          
1771            
1772  
1773    <span class=money data-ori-price='55.00'>RM 55.00 </span>
1774  
1775
1776          
1777        </span>
1778      </dd>
1779    </div>
1780    <div class="price__sale">
1781      <dt>
1782        <span class="visually-hidden visually-hidden--inline">Sale price</span>
1783      </dt>
1784      <dd >
1785        <span id="ProductPrice" class="price-item price-item--sale">
1786          
1787            
1788  
1789    <span class=money data-ori-price='55.00'>RM 55.00 </span>
1790  
1791
1792          
1793        </span>
1794      </dd>
1795      
1796      <dt class="price__compare">
1797        <span class="visually-hidden visually-hidden--inline">Regular price</span>
1798      </dt>
1799      <dd class="price__compare">
1800        <s class="price-item price-item--regular">
1801          
1802            <span class=money data-ori-price='70.00'>RM 70.00 </span>
1803          
1804          
1805        </s>
1806      </dd>
1807      
1808    </div>
1809  </dl>
1810  
1811    <span class="badge price__badge-sale color-accent-2" aria-hidden="true">
1812      Sale
1813    </span>
1814
1815    <span class="badge price__badge-sold-out" aria-hidden="true">
1816      Sold Out
1817    </span>
1818  
1819</div>
1820
1821          </div>
1822
1823          <div class="product_upsell-info">
1824            
1825              
1826              
1827              <div class="product_upsell-box">
1828                
1829                  <div class="product_upsell-icon">
1830                    <img src="https://cdn.store-assets.com/s/943101/f/8656454.png" alt="Worldwide shipping | Lezzetto">
1831                  </div>
1832                
1833                
1834                  <div class="product_upsell-text">
1835                    Worldwide shipping
1836                  </div>
1837                
1838              </div>
1839            
1840              
1841              
1842              <div class="product_upsell-box">
1843                
1844                  <div class="product_upsell-icon">
1845                    <img src="https://cdn.store-assets.com/s/943101/f/8656465.png" alt="Secure payments | Lezzetto">
1846                  </div>
1847                
1848                
1849                  <div class="product_upsell-text">
1850                    Secure payments
1851                  </div>
1852                
1853              </div>
1854            
1855              
1856              
1857              <div class="product_upsell-box">
1858                
1859                  <div class="product_upsell-icon">
1860                    <img src="https://cdn.store-assets.com/s/943101/f/8656462.png" alt="Authentic Products | Lezzetto">
1861                  </div>
1862                
1863                
1864                  <div class="product_upsell-text">
1865                    Authentic Products
1866                  </div>
1867                
1868              </div>
1869            
1870          </div>
1871
1872          <product-form class="product-form">
1873            <form action="/cart/add" method="post" enctype="multipart/form-data" data-addtocart='{"id":4549173,"name":"CHOCOLATE MOIST BLISS","sku":"","price":55.0,"quantity":1,"variant":"5\u0026quot;
1873 Inch","category":"LEZZETTO SIGNATURE CAKES\u0026quot;Home\u0026quot;BEST SELLING","brands":""}' id="AddToCartForm">
1874
1875              
1876<!-- Snippet:product/field_top: Product Star Rating 商品評價 -->
1877<a href="#sr-input-wrapper" class="es-avg-rates">
1878  <div id="sf-es-star-rating" class="es-star-rating">
1879    <div id="sr-avg-ui" class="es-star-rate-avg" data-star-rate-avg="0"></div>
1880    <span class="es-star-avg">
1881      <span class="rating-desc">
1882        <span class="hide sr-hide">CHOCOLATE MOIST BLISS</span>
1883        <span>Ratings: <span id="starRatingValue">0</span> - <span id="starReviewCount">0</span>
1884           votes</span>
1885      </span>
1886    </span>
1887  </div>
1888</a>
1889
1890<!-- /Snippet -->
1891<style>
1892.sf_promo-promo-label, #sf_promo-view-more-tag, .sf_promo-label-unclickable:hover {
1893    color: #4089e4
1894}
1895</style>
1896<div class="sf_promo-tag-wrapper">
1897    <div id="sf_promo-tag-label"></div>
1898    <div class="sf_promo-tag-container">
1899        <div id="sf_promo-tag"></div>
1900        <a id="sf_promo-view-more-tag" class="sf_promo-promo-label hide" onclick="getPromotionList(true)">View More</a>
1901    </div>
1902</div>
1903
1904
1905
1906
1907              <select name="id" id="productSelect" class="hide">
1908                
1909                  
1910
1911                    <option  selected="selected"  data-sku="" value="63115195">5" Inch - <span class=money data-ori-price='5,500.00'>RM 5,500.00 </span></option>
1912
1913                  
1914                
1915                  
1916
1917                    <option  data-sku="" value="63115196">7" Inch - <span class=money data-ori-price='8,000.00'>RM 8,000.00 </span></option>
1918
1919                  
1920                
1921              </select>
1922
1923              
1924
1925              <!-- quantity_selector -->
1926              <div class="product-form__input product-form__quantity">
1927                <label class="form__label" for="Quantity">
1928                  Quantity
1929                </label>
1930
1931                <quantity-input class="quantity">
1932                  <button class="quantity__button no-js-hidden" name="minus" type="button">
1933                    
1934
1935
1936    <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-minus " fill="none" viewBox="0 0 10 2">
1937      <path fill-rule="evenodd" clip-rule="evenodd" d="M.5 1C.5.7.7.5 1 .5h8a.5.5 0 110 1H1A.5.5 0 01.5 1z" fill="currentColor"></path>
1938    </svg>
1939
1940  
1941
1942                  </button>
1943                  <input class="quantity__input"
1944                      type="number"
1945                      name="quantity"
1946                      id="Quantity"
1947                      min="1"
1948                      value="1"
1949                    >
1950                  <button class="quantity__button no-js-hidden" name="plus" type="button">
1951                    
1952
1953
1954    <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-plus " fill="none" viewBox="0 0 10 10">
1955      <path fill-rule="evenodd" clip-rule="evenodd" d="M1 4.51a.5.5 0 000 1h3.5l.01 3.5a.5.5 0 001-.01V5.5l3.5-.01a.5.5 0 00-.01-1H5.5L5.49.99a.5.5 0 00-1 .01v3.5l-3.5.01H1z" fill="currentColor"></path>
1956    </svg>
1957
1958  
1959
1960                  </button>
1961                </quantity-input>
1962              </div>
1963
1964
1965              <div class="product-form__buttons">
1966
1967                
1968
1969                <button
1970                  type="submit"
1971                  name="add"
1972                  id="AddToCart"
1973                  class="product-form__submit button button--full-width button--primary btn--radius"
1974                
1975                >
1976                    
1977                      Add to Cart
1978                    
1979                </button>
1980
1981                
1982
1983              </div>
1984              
1985              <div class="form__message hidden" tabindex="-1" autofocus>
1986                <span class="visually-hidden">accessibility.error </span>
1987                
1988
1989
1990    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-error " viewBox="0 0 13 13">
1991      <circle cx="6.5" cy="6.50049" r="5.5" stroke="white" stroke-width="2"/>
1992      <circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width="0.7"/>
1993      <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"/>
1994      <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"/>
1995    </svg>
1996
1997  
1998
1999                <div class="js-error-content"></div>
2000              </div>
2001
2002            </form>
2003          </product-form>
2004
2005
2006          <div>
2007            
2008  
2009  
2010
2011
2012<share-button class="share-button">
2013  <button class="share-button__button hidden">
2014    
2015      
2016
2017
2018    <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-share " width="18" height="18" viewBox="0 0 24 24" stroke-width="1" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
2019      <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
2020      <circle cx="6" cy="12" r="3" />
2021      <circle cx="18" cy="6" r="3" />
2022      <circle cx="18" cy="18" r="3" />
2023      <line x1="8.7" y1="10.7" x2="15.3" y2="7.3" />
2024      <line x1="8.7" y1="13.3" x2="15.3" y2="16.7" />
2025    </svg>
2026
2027  
2028
2029      Share
2030    
2031  </button>
2032  <details>
2033    <summary class="share-button__button">
2034      
2035        
2036
2037
2038    <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-share " width="18" height="18" viewBox="0 0 24 24" stroke-width="1" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
2039      <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
2040      <circle cx="6" cy="12" r="3" />
2041      <circle cx="18" cy="6" r="3" />
2042      <circle cx="18" cy="18" r="3" />
2043      <line x1="8.7" y1="10.7" x2="15.3" y2="7.3" />
2044      <line x1="8.7" y1="13.3" x2="15.3" y2="16.7" />
2045    </svg>
2046
2047  
2048
2049        Share
2050      
2051    </summary>
2052    <div id="Product-share-id" class="share-button__fallback motion-reduce ">
2053
2054      <div class="social-sharing-icons" data-permalink="https://www.lezzetto.my/products/chocolate-moist">
2055        <div class="sharing-icons-label"><small>Share it on</small></div>
2056
2057        <a target="_blank" href="//www.facebook.com/sharer.php?u=https://www.lezzetto.my/products/chocolate-moist" class="share-icon-button">
2058          
2059
2060
2061    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-facebook "
2062    viewBox="0 0 18 18">
2063      <path fill="currentColor"
2064        d="M16.42.61c.27 0 .5.1.69.28.19.2.28.42.28.7v15.44c0 .27-.1.5-.28.69a.94.94 0 01-.7.28h-4.39v-6.7h2.25l.31-2.65h-2.56v-1.7c0-.4.1-.72.28-.93.18-.2.5-.32 1-.32h1.37V3.35c-.6-.06-1.27-.1-2.01-.1-1.01 0-1.83.3-2.45.9-.62.6-.93 1.44-.93 2.53v1.97H7.04v2.65h2.24V18H.98c-.28 0-.5-.1-.7-.28a.94.94 0 01-.28-.7V1.59c0-.27.1-.5.28-.69a.94.94 0 01.7-.28h15.44z">
2065      </path>
2066    </svg>
2067
2068  
2069
2070        </a>
2071
2072        <a target="_blank" href="//twitter.com/share?text=CHOCOLATE MOIST BLISS&amp;url=https://www.lezzetto.my/products/chocolate-moist" class="share-icon-button">
2073          
2074
2075
2076    <svg class="icon icon-twitter " viewBox="0 0 22 22" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
2077      <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
2078      <path d="M3 3l11.733 16h4.267l-11.733 -16z" />
2079      <path d="M3 19l6.768 -6.768m2.46 -2.46l6.772 -6.772" />
2080    </svg>
2081
2082  
2083
2084        </a>
2085
2086        
2087
2088          <a target="_blank" href="//pinterest.com/pin/create/button/?url=https://www.lezzetto.my/products/chocolate-moist&amp;media=&amp;description=CHOCOLATE MOIST BLISS" class="share-icon-button">
2089            
2090
2091
2092  <svg class="icon icon-pinterest " xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><g id="Layer_1" data-name="Layer 1"><circle cx="512" cy="512" r="450" fill="transparent"/><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.
209215-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="currentColor"/></g></svg>
2093
2094  
2095
2096          </a>
2097
2098        
2099        
2100        <a target="_blank" href="//social-plugins.line.me/lineit/share?url=https://www.lezzetto.my/products/chocolate-moist" class="share-icon-button">
2101          
2102
2103
2104    <svg class="icon icon-line " xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024">
2105      <g id="Layer_1" data-name="Layer 1"><circle cx="512" cy="512" r="450" fill="currentColor"/>
2106        <g id="TYPE_A" data-name="TYPE A">
2107          <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"/>
2108          <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="currentColor"/>
2109          <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="currentColor"/>
2110          <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="currentColor"/>
2111          <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="currentColor"/>
2112        </g>
2113      </g>
2114    </svg>
2115  
2116  
2117
2118        </a>
2119
2120        
2121      </div>
2122
2123      <div class="share-button_copy-wrapper">
2124        <div class="field">
2125          <span id="ShareMessage-id" class="share-button__message hidden" role="status">
2126          </span>
2127          <input type="text"
2128                class="field__input"
2129                id="url"
2130                value="https://www.lezzetto.my/products/chocolate-moist"
2131                placeholder="Link"
2132                onclick="this.select();"
2133                readonly
2134          >
2135          <label class="field__label" for="url">Link</label>
2136        </div>
2137        <button class="share-button__close hidden no-js-hidden">
2138          
2139
2140
2141    <svg class="icon icon-close " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M335.36,300,581.87,53.48a25,25,0,0,0-35.35-35.35L300,264.64,53.48,18.13A25,25,0,0,0,18.13,53.48L264.64,300,18.13,546.52a25,25,0,0,0,35.35,35.35L300,335.36,546.52,581.87a25,25,0,0,0,35.35-35.35Z" fill="currentColor"/></svg>
2142
2143  
2144
2145          <span class="visually-hidden">general.share.close</span>
2146        </button>
2147        <button class="share-button__copy no-js-hidden">
2148          
2149
2150
2151    <svg class="icon icon-clipboard " width="11" height="13" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewBox="0 0 11 13">
2152      <path fill-rule="evenodd" clip-rule="evenodd" d="M2 1a1 1 0 011-1h7a1 1 0 011 1v9a1 1 0 01-1 1V1H2zM1 2a1 1 0 00-1 1v9a1 1 0 001 1h7a1 1 0 001-1V3a1 1 0 00-1-1H1zm0 10V3h7v9H1z" fill="currentColor"/>
2153    </svg>
2154
2155  
2156
2157          <span class="visually-hidden">general.share.copy_to_clipboard</span>
2158        </button>
2159      </div>
2160      
2161    </div>
2162    <div class="modal-overlay float-bottom-modal-overlay large-up-hide"></div>
2163  </details>
2164</share-button>
2165<script src="https://store-themes.easystore.co/619811/themes/175052/assets/share.js?t=1787072506" defer="defer"></script>
2165
2166
2167
2168
2169          </div>
2170
2171        
2172        </div>
2173
2174        <link href="/assets/css/promotion.css?v2.94" rel="stylesheet" type="text/css" media="screen" />
2175 <style>
2176.sf_promo-ribbon{
2177  color: #4089e4;
2178  background-color: #4089e4
2179}
2180.sf_promo-ribbon-text,
2181.sf_promo-ribbon-text span{
2182  color: #fff;
2183  color: #fff;
2184}
2185
2186</style>
2187
2188
2189  <div id="promotion-section" class="sf_promo-container">
2190    <div id="sf_promo-container" >
2191    </div>
2192    <div class="text-center">
2193      <button id="get-more-promotion" class="btn btn--secondary hide" onclick="getPromotionList(true)">View More</button>
2194    </div>
2195  </div>
2196  <div class="text-center">
2197    <button id="view-more-promotion" class="btn btn--secondary hide" onclick="expandPromoSection()">View More</button>
2198  </div>
2199
2200
2201<script>var shop_money_format = "<span class=money data-ori-price='{{amount}}'>RM {{amount}} </span>";</script>
vendor: 1 bytes, line 2201
2201
2202<script src="/assets/js/promotion/promotion.js?v1.11" type="text/javascript"></script>
2202
2203
2204<script>
2205
2206  var param = {limit:5, page:1};
2207
2208  function getPromotionList(load_more){
2209
2210    var element = document.getElementById("sf_promo-container"),
2211        promo_section = document.getElementById("promotion-section"),
2212        promo_btn = document.getElementById("get-more-promotion"),
2213        view_more_btn = document.getElementById("view-more-promotion"),
2214        view_more_tag_btn = document.getElementById("sf_promo-view-more-tag"),
2215        page_value = parseInt(param.page);
2216
2217    if(load_more) {
2218      view_more_tag_btn.classList.add("sf_promo-is-loading");
2219      promo_btn.classList.add("btn--loading");
2220    }
2221
2222    $.ajax({
2223      type: "GET",
2224      data: param,
2225      dataType: 'json',
2226      url: "/products/chocolate-moist/promotions",
2227      success: function(response){
2228
2229        document.getElementById("sf_promo-container").innerHTML += response.html;
2230
2231
2232        var promotion_tag_html = "";
2233        var promotion_tag_label_html = "";
2234
2235        var total_addon_discount = 0;
2236
2237        if(response.data.total_promotions > 0){
2238          promotion_tag_label_html += `<div style="display:block;"><label>Promotions</label></div>`;
2239
2240          for (let promotion of response.data.promotions) {
2241            var label_class = "sf_promo-label-unclickable",
2242                svg_icon = "";
2243            if(promotion.promotion_applies_to == "add_on_item" && (promotion.is_free_gift == false || promotion.prerequisite_subtotal_range == null)) { 
2244              total_addon_discount += 1;
2245              label_class = "sf_promo-label-clickable";
2246              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">
2247                            <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
2248                            <polyline points="9 6 15 12 9 18" />
2249                          </svg>`;
2250            }
2251            promotion_tag_html +=
2252            ` <a onclick="promoScrollToView('${promotion.id}')" class="sf_promo-promo-label ${label_class}">
2253                <b class="sf_promo-tag-label-title">${promotion.title.replace('&', '&amp;').replace('>','&gt;').replace('<','&lt;').replace('/','&sol;').replace('“', '&quot;').replace("'","&#39;") }</b>${svg_icon}
2254              </a>
2255            `;
2256          }
2257        }
2258
2259        if(total_addon_discount > 1 && !load_more){
2260          promo_section.classList.add('sf_promo-container-height-opacity','sf_promo-container-white-gradient')
2261          view_more_btn.classList.remove("hide");
2262        }else{
2263          promo_section.classList.remove('sf_promo-container-height-opacity','sf_promo-container-white-gradient')
2264          view_more_btn.classList.add("hide");
2265        }
2266
2267        if(response.data.page_count > param.page) {
2268          view_more_tag_btn.classList.remove("hide");
2269          promo_btn.classList.remove("hide");
2270        }else{
2271          view_more_tag_btn.classList.add("hide");
2272          promo_btn.classList.add("hide");
2273        }
2274
2275        document.getElementById("sf_promo-tag-label").innerHTML = promotion_tag_label_html;
2276        document.getElementById("sf_promo-tag").innerHTML += promotion_tag_html;
2277
2278        view_more_tag_btn.classList.remove("sf_promo-is-loading");
2279        promo_btn.classList.remove("btn--loading");
2280
2281
2282        promoVariantDetailInitial()
2283
2284        page_value = isNaN(page_value) ? 0 : page_value;
2285        page_value++;
2286
2287        param.page = page_value;
2288      },
2289      error: function(xhr){
2290
2291      }
2292    });
2293  }
2294
2295  var is_show_product_page = "1"
2296
2297  if(is_show_product_page){
2298    getPromotionList();
2299  }
2300</script>
2300
2301
2302
2303        
2304          <div class="product-description product__description rte" itemprop="description">
2305            <link href='/assets/css/froala_style.min.css' rel='stylesheet' type='text/css'/><div class='fr-view'><p><strong><span style="font-size: 18px;">Product Description</span></strong></p><p>Rich and moist chocolate layered cake</p></div>
2306          </div> 
2307        
2308
2309
2310      </div> 
2311      
2312    </div>
2313  </div>
2314
2315  
2316
2317<!-- Snippet:product/description_bottom: Product Rating -->
2318<div class="pr-wrapper">
2319						<p class="pr-title">Customer comments</p>
2320						<table class="pr-table tablesaw tablesaw-stack" data-tablesaw-mode="stack">
2321							<thead>
2322								<tr>
2323									<th class="th-author" >Author/Date</th>
2324									<th class="th-rating rating-column">Rating</th>
2325									<th>Comment</th>
2326								</tr>
2327							</thead>
2328							<tbody></tbody>
2329						</table>
2330						<div id="app-comment"></div>
2331					</div>
2332					
2332<script>
2333						$( document ).ready(function() {
2334							var customer_id = "";
2335							var data = {
2336											product_id: "4549173",
2337											customer_id: ""
2338										};
2339
2340							$.ajax({
2341								url: "/a/product-rating/ajax-get",
2342								type: "get",
2343								data: data,
2344								success: function (data) {
2345									var html = "";
2346
2347									if(data["allow_comment"]){
2348										var comment_html = '<p class="pr-title">Write a comment</p>'+
2349															'<div class="pr-input-wrapper">'+
2350																'<input type="radio" value="1" name="rate" checked="" id="very_satisfied">'+
2351																'<label for="very_satisfied" class=""><span class="icon-small icon-rate icon-rate-very_satisfied"></span>Very satisfied</label>'+
2352																'<input type="radio" value="0" name="rate" id="satisfied">'+
2353																'<label for="satisfied" class=""><span class="icon-small icon-rate icon-rate-satisfied"></span>Satisfied</label>'+
2354																'<input type="radio" value="-1" name="rate" id="not_satisfied">'+
2355																'<label for="not_satisfied" class=""><span class="icon-small icon-rate icon-rate-not_satisfied"></span>Not satisfied</label>'+
2356															'</div>'+
2357															'<textarea class="pr-form-control" id="pr-comments-textares"></textarea>'+
2358															'<div class="pr-footer"><button class="pr-btn btn-pr-apps-comments"><span class="fa fa-star"></span>Rate this product</button></div>';
2359
2360										$("#app-comment").prev().append("<hr>");
2361										$("#app-comment").append(comment_html);
2362
2363									}
2364
2365									if(!customer_id.trim()){
2366										var comment_html = '<p><a href="/account/login">Log in</a> to write review</p>';
2367										$("#app-comment").prev().append("<hr>");
2368										$("#app-comment").append(comment_html);
2369									}
2370
2371									if(data["comments"].length > 0){
2372										$.each(data["comments"], function( k, v ) {
2373
2374											if(v['rate'] == "1"){
2375												var img_class="icon-rate-very_satisfied";
2376												var rate_name="Very satisfied";
2377											}
2378											else if(v['rate'] == "0"){
2379												var img_class="icon-rate-satisfied";
2380												var rate_name="Satisfied";
2381											}
2382											else{
2383												var img_class="icon-rate-not_satisfied";
2384												var rate_name="Not satisfied";
2385											}
2386											html += '<tr><td>'+v['customer_name']+'<div class="date">'+v['datetime']+'</div></td>'+
2387													'<td class="rating-column"><i class="icon-small icon-rate '+img_class+'"></i><p>'+rate_name+'</p></td>'+
2388													'<td>'+v['comment']+'</td></tr>';
2389
2390										});
2391
2392									}else{
2393										html += '<tr><td colspan="3">No comments</td></tr>';
2394									}
2395									$('table.pr-table tbody').append(html);
2396								}
2397
2398							});
2399
2400						});
2401						$('body').on('click','.btn-pr-apps-comments',function(){
2402							if(!$.trim($('textarea#pr-comments-textares').val())){
2403								alert('Comment cannot be empty.');
2404								return false;
2405							}
2406
2407							if($.trim($('textarea#pr-comments-textares').val()).length > 255){
2408								alert('Cannot more than 255 characters.');
2409								return false;
2410							}
2411
2412							var data = {
2413								customer_id: '',
2414								customer_name: '',
2415								product_id: '4549173',
2416								rate : $('input[name="rate"]:checked').val(),
2417								comment : $('textarea#pr-comments-textares').val()
2418							};
2419
2420							$.ajax({
2421								url: '/a/product-rating/ajax-post',
2422								type: 'post',
2423								data: data,
2424								success: function (data) {
2425									if(data) location.reload();
2426								}
2427							})
2428
2429						});
2430					</script>
2430
2431<!-- /Snippet -->
2432
2433<!-- Snippet:product/description_bottom: Product Star Rating 商品評價 -->
2434<div id="sr-input-wrapper" class="sr-wrapper">
2435  <h3 class="sr-display-title" style="margin-bottom: 0px;">
2436    Reviews
2437    <div class="star-rating" id="total_comments" style="display:none;">
2438      <span class="es-icon-star es-star"></span>
2439      <span class="es-icon-star es-star"></span>
2440      <span class="es-icon-star es-star"></span>
2441      <span class="es-icon-star es-star"></span>
2442      <span class="es-icon-star es-star"></span>
2443      <span style="color: #B7B7B7; font-weight; normal;">(<span id="starReviewCountReviewSectionHeader">0</span>)</span>
2444    </div>
2445  </h3>
2446
2447  <div id="srAppCard">
2448    <div class="sr-app-card-content" id="nonZeroComment" style="display:none;">
2449      <div class="ratingComment" style="display: flex; justify-content: space-between;align-items: flex-start;">
2450        <div class="summaryRating sr-app-card">
2451          <span class="sr-display-title" style="margin:0px; padding: 0px; padding-bottom: 1rem; width: 100%;">
2452             Ratings
2453          </span>
2454          <div class="stars">
2455            <div class="star-rating" id="total_comments"style="margin-top:10px; margin-bottom: 10px;">
2456              <span class="es-icon-star es-star"></span>
2457              <span class="es-icon-star es-star"></span>
2458              <span class="es-icon-star es-star"></span>
2459              <span class="es-icon-star es-star"></span>
2460              <span class="es-icon-star es-star"></span>
2461              (<span id="starReviewCountReviewSectionHeader5">0</span>)
2462            </div>
2463            <br>
2464            <div class="star-rating"style="margin-bottom: 10px;">
2465              <span class="es-icon-star es-star"></span>
2466              <span class="es-icon-star es-star"></span>
2467              <span class="es-icon-star es-star"></span>
2468              <span class="es-icon-star es-star"></span>
2469              <span class="es-icon-star es-empty-star"></span>
2470              (<span id="starReviewCountReviewSectionHeader4">0</span>)
2471            </div>
2472            <br>
2473            <div class="star-rating"style="margin-bottom: 10px;">
2474              <span class="es-icon-star es-star"></span>
2475              <span class="es-icon-star es-star"></span>
2476              <span class="es-icon-star es-star"></span>
2477              <span class="es-icon-star es-empty-star"></span>
2478              <span class="es-icon-star es-empty-star"></span>
2479              (<span id="starReviewCountReviewSectionHeader3">0</span>)
2480            </div>
2481            <br>
2482            <div class="star-rating"style="margin-bottom: 10px;">
2483              <span class="es-icon-star es-star"></span>
2484              <span class="es-icon-star es-star"></span>
2485              <span class="es-icon-star es-empty-star"></span>
2486              <span class="es-icon-star es-empty-star"></span>
2487              <span class="es-icon-star es-empty-star"></span>
2488              (<span id="starReviewCountReviewSectionHeader2">0</span>)
2489            </div>
2490            <br>
2491            <div class="star-rating"style="margin-bottom: 10px;">
2492              <span class="es-icon-star es-star"></span>
2493              <span class="es-icon-star es-empty-star"></span>
2494              <span class="es-icon-star es-empty-star"></span>
2495              <span class="es-icon-star es-empty-star"></span>
2496              <span class="es-icon-star es-empty-star"></span>
2497              (<span id="starReviewCountReviewSectionHeader1">0</span>)
2498            </div>
2499            <br>
2500          </div>
2501
2502          
2503        </div>
2504        <br>
2505
2506        <div id="es-sr-app-table"></div>
2507      </div>
2508    </div>
2509
2510    <div class="sr-app-card zeroComment" id="zeroComment" style="display: block;">
2511      <div style="margin: 0 auto; max-width: 500px;text-align: center;">
2512        <div class="svg-container">
2513          <svg width="99px" height="99px" viewBox="0 0 960 960" fill="none" xmlns="http://www.w3.org/2000/svg">
2514            <g id="SVGRepo_bgCarrier" stroke-width="0"></g>
2515            <g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
2516            <g id="SVGRepo_iconCarrier">
2517              <path
2518                d="M274.488 716.853C281.881 668.164 317.688 547.155 279.237 509.358C255.101 485.078 232.229 459.52 209.385 433.999C197.677 419.382 184.032 404.986 177.125 387.317C165.532 352.045 211.705 350.961 235.133 346.106C267.185 336.224 375.151 329.017 387.891 306.881C410.861 268.906 433.257 230.588 455.833 192.378C465.68 172.608 492.575 170.344 504.022 190.094C524.785 229.899 548.279 268.14 572.092 306.223C579.353 318.028 589.133 323.794 603.859 324.407C661.664 328.136 720.21 328.346 777.533 336.662C828.463 354.015 772.965 396.212 754.098 416.834C726.386 445.454 698.299 473.715 670.874 502.606C651.169 523.364 651.873 523.653 656.882 551.713C665.715 606.204 677.603 660.486 684.214 715.214C683.289 740.428 664.653 751.771 642.326 739.999C588.769 712.188 536.928 681.023 48
25181.72 656.517C475.366 653.507 469.9 654.782 463.915 658.42C422.075 683.855 380.126 709.112 338.002 734.072C313.986 750.633 273.808 761.446 274.488 716.853Z"
2519                fill="#eee"></path>
2520              <path
2521                d="M635.523 234.171C645.401 204.453 703.594 87.1489 731.704 81.1849C752.257 76.0979 768.829 100.44 758.157 118.1C733.359 155.059 710.965 193.768 687.384 231.572C683.405 238.031 679.612 244.735 674.732 250.475C660.614 266.896 635.731 255.354 635.523 234.171Z"
2522                fill="#eee"></path>
2523              <path
2524                d="M219.281 126.411C220.754 105.076 244.025 92.1224 261.174 105.106C292.777 139.174 316.507 180.724 344.975 217.63C361.988 237.591 339.922 268.343 316.383 254.16C283.243 222.724 258.776 182.195 229.56 146.955C225.004 140.967 222.652 133.301 219.281 126.411Z"
2525                fill="#eee"></path>
2526              <path
2527                d="M439.93 832.16C442.142 802.116 444.161 772.055 446.752 742.044C447.997 725.767 463.579 710.362 480.12 715.558C490.951 718.601 498.744 728.064 498.564 739.72C497.782 775.161 496.874 810.638 495.42 846.053C497.609 882.032 449.789 893.791 440.884 857.15C439.71 848.993 440.662 840.528 440.662 832.201C440.418 832.187 440.174 832.174 439.93 832.16Z"
2528                fill="#eee"></path>
2529              <path
2530                d="M109.355 661.644C88.8916 660.118 76.9036 639.476 87.1936 622.31C104.413 601.524 131.344 589.855 153.729 575.28C172.349 567.69 206.194 543.955 223.963 560.106C237.495 571.651 233.774 591.121 216.889 600.184C197.502 610.59 178.286 621.352 159.374 632.595C142.904 642.826 128.376 656.079 109.355 661.644Z"
2531                fill="#eee"></path>
2532              <path
2533                d="M843.281 588.35C813.417 581.43 779.835 569.928 749.885 560.808C721.515 555.294 719.849 513.789 750.719 511.68C787.302 517.392 824.191 527.459 859.548 538.516C886.595 552.742 876.577 590.349 843.281 588.35Z"
2534                fill="#eee"></path>
2535            </g>
2536          </svg>
2537        </div>
2538        <p class="text-wrapper" style="color: #666;margin: 0px;">Be the first to review</p>
2539        
2540      </div>
2541    </div>
2542
2543    <div id="reviewSection" style="display :none">
2544      <div class="sr-app-modal">
2545        <div class="sr-app-modal-backdrop" onclick="esAppsHideReviewSection()"></div>
2546        <div class="sr-app-modal-card sr-app-card-content" >
2547          <h5 class="sr-rating-title">Write an review</h5>
2548          <p className="text-wrapper">How would you rate the product?</p>
2549          <div id="es-sf-star-rating-input" class="es-star-rating es-star-rating-input" data-star-rate="0">
2550            <span class="es-icon-star" data-input-star="1"></span>
2551            <span class="es-icon-star" data-input-star="2"></span>
2552            <span class="es-icon-star" data-input-star="3"></span>
2553            <span class="es-icon-star" data-input-star="4"></span>
2554            <span class="es-icon-star" data-input-star="5"></span>
2555            <input id="es-sr-input-rating" class="es-sr-input-rating" type="hidden" name="rate" value="0">
2556          </div>
2557          
2558            <p className="text-wrapper" style="margin-bottom: 10px;">More thought about the product</p>
2559            <textarea class="sr-form" id="sr-comments" placeholder="Share your experience and help others make better choices!"></textarea>
2560          
2561          <div style="display: flex;">
2562            <!-- Uploaded image displayed here -->
2563            <div id="imagePreviews" style="display: flex; flex-wrap: wrap;"></div>
2564
2565            <!-- Label container -->
2566            <div id ="labelImage" style="width:550px;">
2567            <label for="custom_image_upload" class="sr-app-image_upload" style="">
2568                      <div id="labelContent" >
2569                      <svg width="20" height="20" viewBox="0 0 32 32" fill="#8A8A8A">
2570                          <g id="SVGRepo_bgCarrier" stroke-width="0"></g>
2571                          <g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
2572                          <g id="SVGRepo_iconCarrier">
2573                            <title>image-picture</title>
2574                            <desc>Created with Sketch Beta.</desc>
2575                            <defs></defs>
2576                            <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
2577                            <g id="Icon-Set" sketch:type="MSLayerGroup" transform="translate(-360.000000, -99.000000)" fill="#8A8A8A">
2578                          <path d="M368,109 C366.896,109 366,108.104 366,107 C366,105.896 366.896,105 368,105 C369.104,105 370,105.896 370,107 C370,108.104 369.104,109 368,109 L368,109 Z M368,103 C365.791,103 364,104.791 364,107 C364,109.209 365.791,111 368,111 C370.209,111 372,109.209 372,107 C372,104.791 370.209,103 368,103 L368,103 Z M390,116.128 L384,110 L374.059,120.111 L370,116 L362,123.337 L362,103 C362,101.896 362.896,101 364,101 L388,101 C389.104,101 390,101.896 390,103 L390,116.128 L390,116.128 Z M390,127 C390,128.104 389.104,129 388,129 L382.832,129 L375.464,121.535 L384,112.999 L390,118.999 L390,127 L390,127 Z M364,129 C362.896,129 362,128.104 362,127 L362,126.061 L369.945,118.945 L380.001,129 L364,129 L364,129 Z M388,99 L364,99 C361.791,99 360,100.791 360,103 L360,127 C360,129.209 361.791,131 364,131 L388,131 C390.209,131 392,129.209 392,127 L392,103 C392,100.791 390.209,99 388,99 L388,99 Z" id="image-picture" sketch:type="MSShapeGroup"></path>
2579                        </g>
2580                      </g>
2581                    </g>
2582            </svg>
2583            <div style="line-height: 1;">
2583Add Image</div>
2584          </div>
2585          </div>
2586          <!-- Invisible file input to trigger image upload -->
2587          <input type="file" name="Add Image" id="custom_image_upload" style="display: none;" onchange="updateImagePreview2()">
2588                  <input type="text" hidden name="custom_image_url" id="custom_image_url" style=" height: 0px; width: 0px; border: 0px; margin: 0px; padding: 0px;">
2589          </label>
2590          </div>
2591
2592          <span id="sr-comment-error"></span>
2593          <div class="text-right">
2594            <button
2595              id="es-sr-app-post-comment-btn"
2596              class="sr-btn btn-sr-apps-comments btn"
2597              type="button"
2598              style="
2599                background-color: #125AE4;
2600                margin-top: 20px; padding: 10px 20px; border-radius: 5px; white-space: nowrap; width:100%;
2601              "
2602            >
2603              Submit
2604            </button>
2605          </div>
2606
2607          <div id="es-sales_pop-close-toggle">
2608            <div class="es-sales_pop-close-icon" onclick="esAppsHideReviewSection()"></div>
2609          </div>
2610        </div>
2611      </div>
2612    </div>
2613    <div id="thankYouSection" style="display: none;">
2614      <div class="sr-app-modal">
2615        <div class="sr-app-modal-backdrop"></div>
2616        <div class="sr-app-modal-card sr-app-card-content" style="text-align: center;">
2617          <svg xmlns="http://www.w3.org/2000/svg" width="135" height="135" viewBox="0 0 135 135" fill="none">
2618            <g clip-path="url(#clip0_5_816)">
2619              <path d="M67.5561 11.3118C71.9312 11.312 76.1564 12.9057 79.4417 15.7949L80.308 16.6105L84.2343 20.5368C85.3118 21.6073 86.7189 22.2831 88.228 22.4549L88.9874 22.4999H94.6124C99.2092 22.4996 103.632 24.2581 106.974 27.4147C110.315 30.5713 112.323 34.8867 112.584 39.4761L112.612 40.4999V46.1249C112.612 47.6436 113.13 49.123 114.064 50.3043L114.57 50.8668L118.491 54.793C121.74 58.0243 123.635 62.3734 123.789 66.9535C123.942 71.5337 122.343 76 119.317 79.4418L118.502 80.308L114.576 84.2343C113.505 85.3118 112.829 86.7189 112.657 88.228L112.612 88.9874V94.6124C112.613 99.2092 110.854 103.632 107.698 106.974C104.541 110.315 100.226 112.323 95.6361 112.584L94.6124 112.612H88.9874C87.4708 112.613 85.9985 113.124 84.808 114.064L84.2455 114.57L80.3193 118.491C77.088 121.74 72.7389 123.635 68.1587 123.789C63.5786 123.942 59.1123 122.343 55.6705 119.317L54.8042 118.502L50.878 114.576C49.8005 113.505 48.3934 112.829 46.8842 112.657L46.1249 112.612H40.4999C35.903 112.613 31.4803 110.854 28.1386 107.698C24.7968 104.541 22.7894 100.226 22.528 95.6361L22.4999 94.6124V88.9874C22.4994 87.4708 21.9882 85.9986 21.0486 84.808L20.5424 84.2455L16.6217 80.3193C13.3721 77.088 11.4773 72.7389 11.3236 68.1588C11.17 63.5786 12.7691 59.1123 15.7949 55.6705L16.6105 54.8043L20.5367 50.878C21.6073 49.8005 22.2831 48.3934 22.4549 46.8843L22.4999 46.1249V40.4999L22.528 39.4761C22.7792 35.063 24.6454 30.8966 27.771 27.771C30.8966 24.6454 35.063 22.7792 39.4761 22.528L40.4999 22.4999H46.1249C47.6415 22.4994 49.1137 21.9882 50.3042 21.0486L50.8667 20.5424L54.793 16.6218C56.4655 14.9393 58.4541 13.604 60.6445 12.6927C62.8349 11.7814 65.1838 11.3121 67.5561 11.3118ZM88.3518 52.273C87.2969 51.2185 85.8664 50.6261 84.3749 50.6261C82.8833 50.6261 81.4528 51.2185 80.398 52.273L61.8749 70.7905L54.6017 63.523L54.073 63.0561C52.9424 62.182 51.5215 61.7709 50.0988 61.9064C48.6761 62.0419 47.3583 62.7139 46.4131 63.7858C45.468 64.8578 44.9662 66.2493 45.0098 67.6777C45.0535 69.1062 45.6392 70.4645 46.648 71.4768L57.898 82.7268L58.4268 83.1936C59.509 84.0332 60.8604 84.449 62.2275 84.363C63.5945 84.2771 64.8832 83.6953 65.8517 82.7268L88.3518 60.2268L88.8186 59.698C89.6582 58.6157 90.074 57.2643 89.988 55.8973C89.902 54.5303 89.3202 53.2416 88.3518 52.273Z" fill="#125AE4"/>
2620            </g>
2621            <defs>
2622              <clipPath id="clip0_5_816">
2623                <rect width="135" height="135" fill="white"/>
2624              </clipPath>
2625            </defs>
2626          </svg>
2627          <p class="thank-you">Thank You!</p>
2628          <p class="review-info" style="
2629            margin-top: 0px;
2630            margin-bottom: 0px;
2631          ">Your review is important to us</p>
2632          <br>
2633          <button
2634            id="doneButton"
2635            class="sr-btn btn-sr-apps-comments btn"
2636            type="button"      style="
2637            background-color: #125AE4;margin-top: 20px; padding: 10px 20px; border-radius: 5px; white-space: nowrap; width :100%;
2638            ">Done
2639          </button>
2640        </div>
2641      </div>
2642    </div>
2643
2644    <div id="comment-section"></div>
2645  </div>
2646</div>
2647
2648<script>
2649  document.addEventListener('DOMContentLoaded', function () {
2650    const writeReviewButton = document.getElementById('writeReviewButton');
2651    const reviewSection = document.getElementById('reviewSection');
2652    const body = document.querySelector('body');
2653
2654    writeReviewButton.addEventListener('click', function () {
2655      toggleReviewSection();
2656    });
2657
2658    const doneButton = document.getElementById('doneButton');
2659    if (doneButton) {
2660      doneButton.addEventListener('click', function () {
2661        reloadPage();
2662      });
2663    }
2664
2665    function toggleReviewSection() {
2666      if (reviewSection.style.display === 'none' || reviewSection.classList.contains('hidden')) {
2667        reviewSection.style.display = 'block';
2668        reviewSection.classList.remove('hidden');
2669        body.style.overflow = 'hidden'; // Disable scrolling
2670      } else {
2671        reviewSection.style.display = 'none';
2672        reviewSection.classList.add('hidden');
2673        body.style.overflow = ''; // Enable scrolling
2674      }
2675    }
2676
2677    function reloadPage() {
2678      location.reload();
2679    }
2680  });
2681
2682
2683  function esAppsHideReviewSection() {
2684    const reviewSection = document.getElementById('reviewSection');
2685    reviewSection.style.display = 'none';
2686    reviewSection.classList.add('hidden');
2687    document.querySelector('body').style.overflow = ''; // Enable scrolling
2688  }
2689
2690  var uploadedImageURLs = [];
2691
2692  function updateImagePreview2() {
2693    var input = document.getElementById('custom_image_upload');
2694    var imagePreviews = document.getElementById('imagePreviews');
2695    var addImageInput = document.getElementById('labelImage');
2696    var commentError = document.getElementById('sr-comment-error');
2697
2698    if (input.files && input.files[0]) {
2699      var uploadedFile = input.files[0]; // Get the uploaded file
2700
2701       // Validate the uploaded file
2702       if (!['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml'].includes(uploadedFile.type)) {
2703        commentError.innerHTML = 'Please upload a valid image file (JPG, PNG, GIF, SVG).';
2704        input.value = ''; // Clear the input file if invalid
2705        return false;
2706    }
2707
2708    if (uploadedFile.size > 5242880) {
2709        commentError.innerHTML = 'Image size should not exceed 5MB.';
2710        input.value = ''; // Clear the input file if invalid
2711        return false;
2712    }
2713    commentError.innerHTML = '';
2714      var reader = new FileReader();
2715
2716      reader.onload = function (e) {
2717        var previewDiv = document.createElement('div');
2718        previewDiv.style.marginRight = '20px';
2719        previewDiv.style.marginTop = '10px';
2720        previewDiv.style.display = 'flex';
2721        previewDiv.style.alignItems = 'center';
2722        previewDiv.style.position = 'relative';
2723
2724        var img = document.createElement('img');
2725        img.style.width = '100px';
2726        img.style.height = '100px';
2727        img.style.borderRadius = '5px';
2728        img.src = e.target.result;
2729
2730        var closeIconHTML = '<div style="position: absolute; top: 0; right: 0; display: flex; justify-content: flex-end; align-items: flex-start; width: 100%; height: 100%;">' +
2731          '<div id="es-sales_pop-close-toggle" style="position: relative; transform: translate(50%, -50%);top: 0;right: 0;">' +
2732          '<div class="es-sales_pop-close-icon" onclick="deleteImagePreview(this.parentNode.parentNode.parentNode)"></div>' +
2733          '</div>' +
2734          '</div>';
2735
2736        var closeIcon = document.createRange().createContextualFragment(closeIconHTML);
2737        closeIcon.innerHTML = '&times;';
2738
2739        closeIcon.onclick = function () {
2740          deleteImagePreview(previewDiv);
2741        };
2742
2743        previewDiv.appendChild(img);
2744        previewDiv.appendChild(closeIcon);
2745        imagePreviews.appendChild(previewDiv);
2746
2747
2748        uploadedImageURLs.push(e.target.result);
2749
2750        console.log(uploadedImageURLs);
2751
2752        addImageInput.classList.remove('has-image')
2753        console.log('imagePreviews.childElementCount',imagePreviews.childElementCount);
2754        if(imagePreviews.childElementCount > 0) addImageInput.classList.add('has-image');
2755
2756        if (imagePreviews.childElementCount >= 3) {
2757          addImageInput.style.display = 'none';
2758        } else {
2759          addImageInput.style.display = 'flex';
2760        }
2761        addImageInput.style.flex = '1';
2762      };
2763
2764      reader.readAsDataURL(input.files[0]);
2765    }
2766  }
2767
2768  function deleteImagePreview(previewDiv) {
2769    var imagePreviews = document.getElementById('imagePreviews');
2770    var addImageInput = document.getElementById('labelImage');
2771
2772    imagePreviews.removeChild(previewDiv);
2773    document.getElementById('custom_image_upload').value = '';
2774
2775
2776    var imgSrc = previewDiv.querySelector('img').src;
2777    var index = uploadedImageURLs.indexOf(imgSrc);
2778    if (index !== -1) {
2779      uploadedImageURLs.splice(index, 1);
2780    }
2781
2782    if (imagePreviews.childElementCount < 3) {
2783      addImageInput.style.display = 'flex';
2784
2785      if (imagePreviews.childElementCount === 0) {
2786        addImageInput.style.width = '385px'; // Set to the initial width
2787      } else {
2788        // If images still exist, keep the width as flex: 1
2789        addImageInput.style.width = '100%'; // Assuming it's inside a flex container
2790      }
2791    }
2792  }
2793
2794
2795
2796</script>
2796
2797
2798<!-- /Snippet -->
2799
2800
2801  
2802<!-- Snippet:product/content_bottom: Product Star Rating 商品評價 -->
2803<script type="application/javascript">
2804  var lang = {
2805    en: {
2806      no_comments: 'No comments yet.',
2807      msg_too_many_char: 'Cannot more than 255 characters.',
2808      msg_rate_more: 'Please rate one or more star(s).',
2809      msg_login: 'Please log in to rate.',
2810      msg_file_size: 'Image size should not exceed 5MB.',
2811      msg_file_type: 'Please upload a valid image file (JPG, PNG, GIF, SVG).',
2812    },
2813    zh: {
2814      no_comments: '暫無評價',
2815      msg_too_many_char: '不能超過255字',
2816      msg_rate_more: '最少一顆星評價',
2817      msg_login: '請登入評價',
2818      msg_file_size: '圖片大小不得超過5MB。',
2819      msg_file_type: '請上傳有效的圖片檔案(JPG、PNG、GIF、SVG)。',
2820    },
2821  };
2822
2823  if (lang['en'] != undefined) {
2824    var tt = lang['en'];
2825  } else {
2826    var tt = lang.en;
2827  }
2828
2829  function callback() {
2830    fetch('/apps/rating/settings/' + '4549173', {
2831      //getSettings
2832      method: 'get',
2833      headers: {
2834        'Content-Type': 'application/json; charset=utf-8',
2835      },
2836    })
2837      .then(function (response) {
2838        return response.json();
2839      })
2840      .then(function (data) {
2841        if (data.average_rate) {
2842          var average_rate = data.average_rate;
2843          var total_count = data.total_count;
2844          var summary = data.summary;
2845          const srAppCard = document.getElementById('srAppCard');
2846
2847          document.getElementById('sr-avg-ui').setAttribute('data-star-rate-avg', average_rate);
2848          document.getElementById('starRatingValue').innerHTML = average_rate;
2849          document.getElementById('starReviewCount').innerHTML = total_count;
2850          //document.getElementById('sr-avg-ui-ReviewSection').setAttribute("data-star-rate-avg", average_rate);
2851          //document.getElementById('starRatingReviewSection').innerHTML = average_rate;
2852          //document.getElementById('starReviewCountReviewSection').innerHTML = total_count;
2853          document.getElementById('starReviewCountReviewSectionHeader').innerHTML = total_count;
2854          document.getElementById('starReviewCountReviewSectionHeader5').innerHTML = summary['5'];
2855          document.getElementById('starReviewCountReviewSectionHeader4').innerHTML = summary['4'];
2856          document.getElementById('starReviewCountReviewSectionHeader3').innerHTML = summary['3'];
2857          document.getElementById('starReviewCountReviewSectionHeader2').innerHTML = summary['2'];
2858          document.getElementById('starReviewCountReviewSectionHeader1').innerHTML = summary['1'];
2859          if (total_count > 0) {
2860            document.getElementById('nonZeroComment').style.display = 'block';
2861            document.getElementById('total_comments').style.display = 'block';
2862            document.getElementById('zeroComment').style.display = 'none';
2863            srAppCard.style.border = 'none';
2864          } else {
2865            document.getElementById('nonZeroComment').style.display = 'none';
2866            document.getElementById('total_comments').style.display = 'none';
2867            document.getElementById('zeroComment').style.display = 'block';
2868            srAppCard.style.border = '1px solid #ececec';
2869            srAppCard.style.borderRadius = '5px';
2870          }
2871          const highestReview = data.comments
2872            .sort((review) => parseInt(review.rate))
2873            .reverse()
2874            .slice()[0];
2875
2876          if (highestReview) {
2877            var reviewData = {
2878              '@context': 'https://schema.org/',
2879              '@type': 'AggregateRating',
2880              itemReviewed: {
2881                '@type': 'Product',
2882                name: 'CHOCOLATE MOIST BLISS',
2883                review: [
2884                  {
2885                    '@type': 'Review',
2886                    reviewRating: {
2887                      '@type': 'Rating',
2888                      ratingValue: highestReview.rate,
2889                    },
2890                    author: {
2891                      '@type': 'Person',
2892                      name: highestReview.customer_name,
2893                    },
2894                    reviewBody: highestReview.comments,
2895                  },
2896                ],
2897              },
2898              ratingValue: average_rate,
2899              ratingCount: total_count,
2900              bestRating: '5',
2901              worstRating: '1',
2902            };
2903
2904            var script = document.createElement('script');
2905            script.type = 'application/ld+json';
2906            script.appendChild(document.createTextNode(JSON.stringify(reviewData)));
2907            document.getElementsByTagName('head')[0].appendChild(script);
2908          }
2909        }
2910        if (data.comments.length > 0) {
2911          var html = '';
2912
2913          data.comments.forEach(function (value) {
2914            var variant_name = value['variant_name']
2915              ? '<div class="sr-app-variant_name">' + value['variant_name'] + '</div>'
2916              : '';
2917            var is_verified = value['is_verified'] ? 'sr-app-is_verified' : '';
2918
2919            var imagesHtml = '';
2920            if (value['images_url']) {
2921              value['images_url'].forEach(function (imageUrl) {
2922                imagesHtml += '<img src="' + imageUrl + '" class="sr-app-comment-image" >';
2923              });
2924            }
2925
2926            html +=
2927              '<div class="sr-app-comment">' +
2928              '<span class="sr-app-img-comment">' +
2929              '<img class="sr-app-circle-img" src="' +
2930              value['customer_img_url'] +
2931              '">' +
2932              '<div class="sr-app-comment-content-wrapper">' +
2933              '<div class="sr-app-flex-between">' +
2934              '<div>' +
2935              '<b class="sr-app_customer_name ' +
2936              is_verified +
2937              '">' +
2938              value['customer_name'] +
2939              '</b>' +
2940              variant_name +
2941              '</div>' +
2942              '<div class="es-star-rate-avg" data-star-rate-avg="' +
2943              value['rate'] +
2944              '" style="margin-top: 0px; margin-bottom: 0px;"></div>' +
2945              '<div class="sr-app-date">' +
2946              value['datetime'] +
2947              '</div>' +
2948              '</div>' +
2949              '</div>' +
2950              '</span>' +
2951              '<div class="sr-app-comment-details">' + // New container for separate elements
2952              '<div class="sr-app-comment-content">' +
2953              value['comments'] +
2954              '</div>' +
2955              '<div class="sr-app-images">' +
2956              imagesHtml +
2957              '</div>' +
2958              '</div>' +
2959              '</div>';
2960          });
2961        } else {
2962          var html = '<h6 class="sr-app-color-grey">' + tt.no_comments + '</h6>';
2963        }
2964
2965        var comment_table = document.getElementById('es-sr-app-table');
2966        comment_table.insertAdjacentHTML('beforeend', html);
2967
2968        updateAvgStarRating();
2969      });
2970  }
2971
2972  if (document.readyState === 'complete' || (document.readyState !== 'loading' && !document.documentElement.doScroll)) {
2973    callback();
2974  } else {
2975    document.addEventListener('DOMContentLoaded', callback);
2976  }
2977
2978  var rating_button = document.getElementById('es-sr-app-post-comment-btn'); // Check existence of rating button before adding listener
2979  if (rating_button) {
2980    rating_button.addEventListener(
2981      'click',
2982      function () {
2983        document.getElementById('sr-comment-error').innerHTML = '';
2984
2985        // Image file validation logic
2986        var imageUpload = document.getElementById('custom_image_upload');
2987        var uploadedImage = imageUpload.files[0]; // Get the uploaded image file
2988
2989        // Check if an image is uploaded and validate its properties
2990        if (uploadedImage) {
2991          // Validate image type and size
2992          if (!['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml'].includes(uploadedImage.type)) {
2993            document.getElementById('sr-comment-error').innerHTML = tt.msg_file_type;
2994            return false;
2995          }
2996
2997          if (uploadedImage.size > 5242880) {
2998            document.getElementById('sr-comment-error').innerHTML = tt.msg_file_size;
2999            return false;
3000          }
3001        }
3002        if (document.getElementById('sr-comments').value.trim().length > 255) {
3003          document.getElementById('sr-comment-error').innerHTML = tt.msg_too_many_char;
3004          return false;
3005        }
3006
3007        if (document.getElementById('es-sr-input-rating').value == 0) {
3008          document.getElementById('sr-comment-error').innerHTML = tt.msg_rate_more;
3009          return false;
3010        }
3011
3012        if ('' == 0) {
3013          document.getElementById('sr-comment-error').innerHTML = tt.msg_login;
3014          return false;
3015        }
3016
3017        var data = new FormData();
3018        data.append('customer_id', '');
3019        data.append('product_id', '4549173');
3020        data.append('customer_name', '');
3021        data.append('rate', document.getElementById('es-sr-input-rating').value);
3022        data.append('comments', document.getElementById('sr-comments').value);
3023
3024        if (uploadedImageURLs.length > 0) {
3025          for (var i = 0; i < uploadedImageURLs.length; i++) {
3026            data.append('custom_image_urls[' + i + ']', uploadedImageURLs[i]);
3027          }
3028        }
3029
3030        document.getElementById('es-sr-app-post-comment-btn').className += ' btn--loading';
3031
3032        fetch('/apps/rating/4549173/rates', {
3033          method: 'post',
3034          body: data,
3035        })
3036          .then(function (response) {
3037            return response.json();
3038          })
3039          .then(function (data) {
3040            if (data.success) {
3041              document.getElementById('sr-comment-error').innerHTML = '';
3042              document.getElementById('reviewSection').style.display = 'none';
3043              // Show the thankYouSection
3044              document.getElementById('thankYouSection').style.display = 'block';
3045            }
3046          });
3047      },
3048      false
3049    );
3050  }
3051</script>
3051
3052
3053<!-- /Snippet -->
3054
3055
3056  <!-- The Modal -->
3057  <div id="product-modal" class="modal hide">
3058    <span class="js-image-modal-close product-media-modal__toggle product-modal-close">
3059
3060
3061    <svg class="icon icon-close " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M335.36,300,581.87,53.48a25,25,0,0,0-35.35-35.35L300,264.64,53.48,18.13A25,25,0,0,0,18.13,53.48L264.64,300,18.13,546.52a25,25,0,0,0,35.35,35.35L300,335.36,546.52,581.87a25,25,0,0,0,35.35-35.35Z" fill="currentColor"/></svg>
3062
3063  
3064</span>
3065    <img class="modal-content" id="modal-img">
3066  </div>
3067
3068</section>
3069
3070
3071
3072
3073<script>
3074  let this_el = document.querySelector.bind(document),
3075      all_this_el = document.querySelectorAll.bind(document),
3076      is_variants_initial = false,
3077      variants = [{"id":63115195,"title":"5\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"price":5500,"compare_at_price":7000,"is_enabled":true,"options":["5\" Inch"],"option1":"5\" Inch","option2":null,"option3":null,"points":null},{"id":63115196,"title":"7\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":null,"price":8000,"compare_at_price":10000,"is_enabled":true,"options":["7\" Inch"],"option1":"7\" Inch","option2":null,"option3":null,"points":null}],
3078      variants_unavailable = variants.filter(value => value.available == false);
3079
3080  window.onload = (event) => {
3081    document.getElementById("main-image-wrapper").scrollTo({left: 0, behavior: "smooth"});
3082  };
3083
3084  document.addEventListener( 'DOMContentLoaded', function() {
3085
3086    var selectCallback = function(variant, selector) {
3087      console.log('variant, selector',variant, selector);
3088      VariantSelector.onVariantChange(variant);
3089      if(variants_unavailable && variants_unavailable.length > 0 && VariantSelector.updateVariantsUnavailable) VariantSelector.updateVariantsUnavailable(variants,variants_unavailable);
3090      
3091      var img_wrapper = document.getElementById("main-image-wrapper");
3092      if(variant.featured_image != null && variant.featured_image.id && is_variants_initial){
3093        const img_item = document.getElementById("image-item-" + variant.featured_image.id);
3094        img_wrapper.insertAdjacentElement("afterbegin", img_item);
3095        img_wrapper.scrollTo({left: 0, behavior: "smooth"});
3096      }
3097      is_variants_initial = true
3098    }
3099
3100    EasyStore.OptionSelectorsNew.create('productSelect', 'radio', {
3101        product: {"id":4549173,"handle":"chocolate-moist","name":"CHOCOLATE MOIST BLISS","title":"CHOCOLATE MOIST BLISS","url":"\/products\/chocolate-moist","share_url":"https:\/\/www.lezzetto.my\/products\/chocolate-moist","price":55,"price_min":"55.0","price_max":"80.0","price_varies":true,"compare_at_price":70,"compare_at_price_min":"70.0","compare_at_price_max":"100.0","compare_at_price_varies":true,"available":true,"options_with_values":[{"name":"Size","position":1,"values":["5\" Inch","7\" Inch"]}],"options_by_name":{"Size":{"name":"Size","position":1,"values":["5\" Inch","7\" Inch"]}},"options":["Size"],"has_only_default_variant":false,"sole_variant_id":null,"variants":[{"id":63115195,"title":"5\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"price":5500,"compare_at_price":7000,"is_enabled":true,"options":["5\" Inch"],"option1":"5\" Inch","option2":null,"option3":null,"points":null},{"id":63115196,"title":"7\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":null,"price":8000,"compare_at_price":10000,"is_enabled":true,"options":["7\" Inch"],"option1":"7\" Inch","option2":null,"option3":null,"points":null}],"selected_variant":{"id":63115195,"title":"5\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"price":5500,"compare_at_price":7000,"is_enabled":true,"options":["5\" Inch"],"option1":"5\" Inch","option2":null,"option3":null,"points":null},"first_available_variant":{"id":63115195,"title":"5\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":854
310164388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"price":5500,"compare_at_price":7000,"is_enabled":true,"options":["5\" Inch"],"option1":"5\" Inch","option2":null,"option3":null,"points":null},"selected_or_first_available_variant":{"id":63115195,"title":"5\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"price":5500,"compare_at_price":7000,"is_enabled":true,"options":["5\" Inch"],"option1":"5\" Inch","option2":null,"option3":null,"points":null},"img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","featured_image":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"secondary_image":{"alt":"","img_url":"","src":"","type":""},"images":[{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"}],"media":[{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"}
3101],"featured_media":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"metafields":[],"expires":null,"published_at":"2020-12-10T10:37:00.000+08:00","created_at":"2020-12-10T10:38:42.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><strong><span style=\"font-size: 18px;\">Product Description<\/span><\/strong><\/p><p>Rich and moist chocolate layered cake<\/p><\/div>","description":"<link href='\/assets\/css\/froala_style.min.css' rel='stylesheet' type='text\/css'\/><div class='fr-view'><p><strong><span style=\"font-size: 18px;\">Product Description<\/span><\/strong><\/p><p>Rich and moist chocolate layered cake<\/p><\/div>","meta_description":"CHOCOLATE MOIST Size : 7 Inch","brands":[],"tags":[],"vendor":null,"collections":[{"handle":"lezzetto-cakes","title":"LEZZETTO SIGNATURE CAKES"},{"handle":"feature-on-homepage","title":"Home"},{"handle":"best-selling","title":"BEST SELLING"}],"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":4549173,"viewed_at":"2026-09-27T08:57:52.984+08:00"},"cache_source":"live_api","promotions":[]},
3102        onVariantSelected: selectCallback,
3103        enableHistoryState: false
3104    })
3105
3106    //modal
3107    var product_modal = document.getElementById("product-modal");
3108    const body = document.querySelector("body");
3109    all_this_el('.js-image-modal-toggle').forEach(imgModal => imgModal.addEventListener("click", (event)=>{
3110      var modalImg = document.getElementById("modal-img");
3111      product_modal.classList.remove("hide");
3112      product_modal.classList.add("show");
3113      modalImg.src = imgModal.src;
3114      if (product_modal.classList.contains("show")) {
3115          // Disable scroll
3116          body.style.overflow = "hidden";
3117      } 
3118    }))
3119
3120    // close modal
3121    var modal_close = document.getElementsByClassName("product-modal-close")[0];
3122    modal_close.onclick = function() { 
3123      product_modal.classList.add("hide");
3124      if (product_modal.classList.contains("hide")) {
3125          // Disable scroll
3126          body.style.overflow = "";
3127      } 
3128    }
3129    window.onclick = function(event) {
3130   	  if (event.target == product_modal) {
3131        product_modal.classList.add("hide");
3132        body.style.overflow = "";
3133      }
3134    }
3135
3136
3137  } );
3138    
3139  // retrieve & store view history in local storage
3140  var productViewHistoryData = [];
3141  var storedProductViewHistory = localStorage.getItem('productViewHistory');
3142
3143  if(storedProductViewHistory !== null) {
3144      productViewHistoryData = JSON.parse(storedProductViewHistory);
3145  }
3146
3147  if(productViewHistoryData.length > 0) {
3148    var currentViewedProduct = {"product_id":4549173,"viewed_at":"2026-09-27T08:57:52.984+08:00"}
3149    var currentViewedAt = new Date(currentViewedProduct.viewed_at);
3150    var matchProductID = false;
3151
3152    productViewHistoryData.forEach(data => {
3153      // Check if product_id is similar
3154      if (data.product_id == currentViewedProduct.product_id) {
3155        var previousViewedAt = new Date(data.viewed_at);
3156        if (currentViewedAt > previousViewedAt) {
3157          data.viewed_at = currentViewedProduct.viewed_at;
3158        }
3159        matchProductID = true;
3160      }
3161    });
3162
3163    // sort "viewed_at" desc
3164    productViewHistoryData.sort((a, b) => {
3165      var viewedAt1 = new Date(a.viewed_at);
3166      var viewedAt2 = new Date(b.viewed_at);
3167      return viewedAt2 - viewedAt1;
3168    });
3169
3170    if (!matchProductID) {
3171      productViewHistoryData.unshift(currentViewedProduct);
3172    }
3173  }
3174  else {
3175      productViewHistoryData.push({"product_id":4549173,"viewed_at":"2026-09-27T08:57:52.984+08:00"});
3176  }
3177
3178  productViewHistoryData = JSON.stringify(productViewHistoryData);
3179  localStorage.setItem('productViewHistory', productViewHistoryData);
3180
3181  // End - retrieve & store view history in local storage
3182    
3183</script>
3183
3184
3185
3186
3187
3188
3189    
3190  </main>
3191 	<style>
3192  .footer{
3193    background-color: #C60000;
3194    color: #FFF86B;
3195    --color-foreground: 255,248,107;
3196  }
3197  .footer .link--text,
3198  .footer .list-menu__item--link,
3199  .footer .footer-block__details-content .list-menu__item--link{
3200    color: #FFF86B;
3201  }
3202  .footer-block__heading{
3203    color: #FFEE71;
3204  }
3205  .rounded{
3206    border-radius: 10px;
3207  }
3208  .shopping-app-border{
3209    border: 1px #ECECEC solid;
3210    margin-right: 3px;
3211  }
3212  .app-download-badge{
3213    display: inline-block; 
3214    margin-right: 3px;
3215  }
3216</style>
3217
3218<link rel="preload" href="https://store-themes.easystore.co/619811/themes/175052/assets/section-footer.css?t=1787072506" as="style" onload="this.onload=null;this.rel='stylesheet'">
3219
3220<footer class="footer color-background-1">
3221  <div class="footer__content-top page-width">
3222    <div class="grid grid--1-col grid--4-col-tablet ">
3223      
3224      
3225      
3226        <div class="grid__item">
3227          
3228              <h2 class="footer-block__heading">Follow us</h2>
3229              <ul class="footer__list-social list-unstyled list-social footer-block__details-content" role="list">
3230                
3231                
3232                  <li class="list-social__item">
3233                    <a href="https://www.facebook.com/Lezzetto" class="link link--text list-social__link">
3234                      
3235
3236
3237    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-facebook "
3238    viewBox="0 0 18 18">
3239      <path fill="currentColor"
3240        d="M16.42.61c.27 0 .5.1.69.28.19.2.28.42.28.7v15.44c0 .27-.1.5-.28.69a.94.94 0 01-.7.28h-4.39v-6.7h2.25l.31-2.65h-2.56v-1.7c0-.4.1-.72.28-.93.18-.2.5-.32 1-.32h1.37V3.35c-.6-.06-1.27-.1-2.01-.1-1.01 0-1.83.3-2.45.9-.62.6-.93 1.44-.93 2.53v1.97H7.04v2.65h2.24V18H.98c-.28 0-.5-.1-.7-.28a.94.94 0 01-.28-.7V1.59c0-.27.1-.5.28-.69a.94.94 0 01.7-.28h15.44z">
3241      </path>
3242    </svg>
3243
3244  
3245
3246                    </a>
3247                  </li>
3248                
3249                
3250                  <li class="list-social__item">
3251                    <a href="https://www.instagram.com/lezzetto_icecream/" class="link link--text list-social__link">
3252                      
3253
3254
3255    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-instagram "
3256    viewBox="0 0 18 18">
3257      <path fill="currentColor"
3258        d="M8.77 1.58c2.34 0 2.62.01 3.54.05.86.04 1.32.18 1.63.3.41.17.7.35 1.01.66.3.3.5.6.65 1 .12.32.27.78.3 1.64.05.92.06 1.2.06 3.54s-.01 2.62-.05 3.54a4.79 4.79 0 01-.3 1.63c-.17.41-.35.7-.66 1.01-.3.3-.6.5-1.01.66-.31.12-.77.26-1.63.3-.92.04-1.2.05-3.54.05s-2.62 0-3.55-.05a4.79 4.79 0 01-1.62-.3c-.42-.16-.7-.35-1.01-.66-.31-.3-.5-.6-.66-1a4.87 4.87 0 01-.3-1.64c-.04-.92-.05-1.2-.05-3.54s0-2.62.05-3.54c.04-.86.18-1.32.3-1.63.16-.41.35-.7.66-1.01.3-.3.6-.5 1-.65.32-.12.78-.27 1.63-.3.93-.05 1.2-.06 3.55-.06zm0-1.58C6.39 0 6.09.01 5.15.05c-.93.04-1.57.2-2.13.4-.57.23-1.06.54-1.55 1.02C1 1.96.7 2.45.46 3.02c-.22.56-.37 1.2-.4 2.13C0 6.1 0 6.4 0 8.77s.01 2.68.05 3.61c.04.94.2 1.57.4 2.13.23.58.54 1.07 1.02 1.56.49.48.98.78 1.55 1.01.56.22 1.2.37 2.13.4.94.05 1.24.06 3.62.06 2.39 0 2.68-.01 3.62-.05.93-.04 1.57-.2 2.13-.41a4.27 4.27 0 001.55-1.01c.49-.49.79-.98 1.01-1.56.22-.55.37-1.19.41-2.13.04-.93.05-1.23.05-3.61 0-2.39 0-2.68-.05-3.62a6.47 6.47 0 00-.4-2.13 4.27 4.27 0 00-1.02-1.55A4.35 4.35 0 0014.52.46a6.43 6.43 0 00-2.13-.41A69 69 0 008.77 0z">
3259      </path>
3260      <path fill="currentColor"
3261        d="M8.8 4a4.5 4.5 0 100 9 4.5 4.5 0 000-9zm0 7.43a2.92 2.92 0 110-5.85 2.92 2.92 0 010 5.85zM13.43 5a1.05 1.05 0 100-2.1 1.05 1.05 0 000 2.1z">
3262      </path>
3263    </svg>
3264
3265  
3266
3267                    </a>
3268                  </li>
3269                
3270                
3271                
3272                  <li class="list-social__item">
3273                    <a href="https://api.whatsapp.com/send?phone=60125355202&text=naklezzetto" class="link link--text list-social__link">
3274                      
3275
3276
3277    <svg class="icon icon-whatsapp " fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 750">
3277<path d="M703.5,195.64A371,371,0,0,0,572,56C523.89,26,471.51,8.4,415.21,2.51A370.48,370.48,0,0,0,316.5,5.42,364,364,0,0,0,215.23,37.47a369,369,0,0,0-132.68,108Q17.36,230.17,7,336.63A370.11,370.11,0,0,0,53.42,554.94a7.23,7.23,0,0,1,.61,4.9Q36.48,624.6,18.7,689.27C13.24,709.19,7.75,729.1,2.14,749.5c1.23-.26,1.93-.36,2.61-.55q95.75-25.11,191.54-50.2a8.43,8.43,0,0,1,5.19.61c12.79,5.8,25.28,12.34,38.29,17.59A370.28,370.28,0,0,0,666.09,604q69.06-86.36,80-196.47A370.36,370.36,0,0,0,743,311.86,361,361,0,0,0,703.5,195.64ZM684.64,388c-3.6,65.27-25.48,123.75-66.06,174.9-44.89,56.63-102.85,93.24-173.19,109.84a297.41,297.41,0,0,1-91.27,7A305.68,305.68,0,0,1,215.31,635a17.54,17.54,0,0,0-15.2-2.14c-35.5,9.58-71.1,18.74-106.66,28-.49.13-1,.21-2.14.45,1.72-6.37,3.29-12.22,4.89-18Q109,596.7,121.66,550.07a7.12,7.12,0,0,0-1-5.07c-12.37-19.32-23.31-39.25-31.6-60.64A309,309,0,0,1,70.4,410.63c-6.11-49.35-.93-97.44,16.1-144.15,57.86-160.1,234.55-243,394.65-185.11a308.31,308.31,0,0,1,120.2,79.18c34.9,37.19,59.32,80.31,72.81,129.53A304.75,304.75,0,0,1,684.64,388Z"/><path d="M556,454.42c-13.84-6.52-27.43-13.55-41.24-20.12-11.47-5.46-23-10.89-34.73-15.69-9.1-3.73-13.09-1.72-19.12,6.06-9.39,12.09-19.09,23.95-28.89,35.71-4.7,5.63-9.47,6.79-16.1,3.8-12.32-5.56-24.82-10.9-36.58-17.51-39.6-22.29-69.59-54.3-92.67-93.11-4.87-8.2-4.3-12.16,2.14-19.13,9.07-9.9,18.4-19.63,24.09-32.12a17.42,17.42,0,0,0,.47-14.67c-9.55-23-19-46-28.75-68.92a75.82,75.82,0,0,0-7-12.7c-2.56-3.82-6.6-5.49-11.28-5.36H255.78v-.56c-5.48.29-11,.11-16.39,1-8.66,1.37-15,6.75-20.95,12.94-25.46,26.48-34.58,57.89-28.66,93.83a145.64,145.64,0,0,0,20.75,53.75C220.48,377.5,231.32,393,242.65,408a435.09,435.09,0,0,0,70.53,73.19c31.48,26,67,44.54,105.56,57.58,16.1,5.44,32.08,11.08,49.36,11.42,11.52.22,23,.08,34.16-3.22a110.77,110.77,0,0,0,42.1-23.61c5.48-4.81,10.48-10.18,13.19-17a110.56,110.56,0,0,0,7.57-37.2C565.27,461.93,562.42,457.42,556,454.42Z"/></svg>
3278
3279  
3280
3281                    </a>
3282                  </li>
3283                
3284                
3285                
3286                
3287                
3288              </ul>
3289            
3290        </div>
3291      
3292      
3293      
3294        <div class="grid__item">
3295          
3296              <h2 class="footer-block__heading">We accept</h2>
3297              <div class="footer-block__details-content footer__payment">
3298                <ul class="list list-payment" role="list">
3299                  
3300                  
3301                  
3302                  
3303                  
3304                  
3305									
3306                    
3307                      <li class="list-payment__item">
3308                        <img src="https://s3.dualstack.ap-southeast-1.amazonaws.com/eesb.public/images/payment/payments_bank-transfer.svg" alt="payment_bank-transfer" loading="lazy" width="85px">
3309                      </li>
3310                    
3311                      <li class="list-payment__item">
3312                        <img src="https://s3.dualstack.ap-southeast-1.amazonaws.com/eesb.public/images/payment/payments_stripe.svg" alt="payment_stripe" loading="lazy" width="85px">
3313                      </li>
3314                    
3315                 
3316              </div>
3317                <br>
3318            
3319        </div>
3320      
3321      
3322      
3323        <div class="grid__item">
3324          
3325              <h2 class="footer-block__heading">
3326                Quick links
3327              </h2>
3328              <ul class="footer-block__details-content list-unstyled">
3329                
3330                <li>
3331                  <a href="/pages/about-us"  class="link link--text list-menu__item list-menu__item--link">
3332                    About Us
3333                  </a>
3334                </li>
3335                
3336                <li>
3337                  <a href="/collections/all"  class="link link--text list-menu__item list-menu__item--link">
3338                    Products
3339                  </a>
3340                </li>
3341                
3342                <li>
3343                  <a href="/a/contact-form"  class="link link--text list-menu__item list-menu__item--link">
3344                    Contact us
3345                  </a>
3346                </li>
3347                
3348                
3349              </ul>
3350            
3351        </div>
3352      
3353      
3354      
3355        <div class="grid__item">
3356          
3357              <h2 class="footer-block__heading">Our mission</h2>
3358              <div class="footer-block__details-content">
3359                <p>Quality materials, good designs, craftsmanship and sustainability.</p>
3360              </div>
3361            
3362        </div>
3363      
3364    </div>
3365  </div>
3366  <div class="footer__content-bottom">
3367    <div class="footer__content-bottom-wrapper page-width">
3368      <div class="footer__column footer__column--info">
3369
3370        
3371
3372
3373
3374
3375        
3376        <div class="footer__copyright caption">
3377          <div class="copyright__content">© 2026 Lezzetto by Joshafa Sdn Bhd [199401002790 (288468-A)].<br> All rights reserved.</div>
3378        </div>
3379
3380        <div class="footer__copyright caption">
3381          
3382            <div>
3383            
3384            
3385              
3386                <a href="/legal/terms-of-service">Terms of Service</a>
3387              
3388              
3389            
3390              
3391                | <a href="/legal/privacy-policy">Privacy Policy</a>
3392              
3393              
3394            
3395              
3396                | <a href="/legal/refund-policy">Refund Policy</a>
3397              
3398              
3399            
3400              
3401                | <a href="/legal/delivery-charges">Delivery Charges</a>
3402              
3403              
3404            
3405              
3406                | <a href="/legal/cancellation-policy">Cancellation Policy</a>
3407              
3408              
3409            
3410            </div>
3411         
3412        </div>
3413        
3414      </div>
3415    </div>
3416  </div>
3417</footer>
3418
3419
3420
3421
3422  
3423
3424  
3424<script>
3425  EasyStore.Currencies.init([{"name":"Malaysian Ringgit","code":"MYR","rate":"1.0","format_prefix":"RM","format_suffix":null,"format_decimals":2,"thousand_separator":",","is_primary":true}], 1)
3426</script>
3426
3427
3428
3429
3430  
3430<script>
3431    let page_template = 'product';
3432
3433    if(document.querySelector('.currency-picker')) {
3434      EasyStore.Currencies.change(document.querySelector('.currency-picker').value)
3435      EasyStore.Currencies.convertAll() 
3436    }
3437
3438    document.querySelectorAll('.currency-picker').forEach((el)=>{
3439      el.addEventListener('change',(event)=>{
3440        EasyStore.Currencies.change(event.target.value)
3441
3442        
3443          if (page_template == 'cart') {
3444            const params = new URLSearchParams(window.location.search);
3445            params.set('delete_cache', 1);
3446            window.location.search = params;
3447          } else {
3448            window.location.reload();
3449          }
3450
3451          return
3452        
3453
3454        document.querySelectorAll('[name=currencies],[name=current_currency]').forEach((el)=>{
3455          el.value = event.target.value
3456        })
3457
3458        if(page_template == 'cart') location.reload();
3459      })
3460    })
3461  </script>
3461
3462
3463
3464
3465
3466  
3466<script>
3467
3468    window.variantStrings = {
3469      addToCart: `Add to Cart`,
3470      soldOut: `Sold Out`,
3471      unavailable: `Unavailable`,
3472    }
3473
3474    window.accessibilityStrings = {
3475      shareSuccess: `Link copied to clipboard`,
3476    }
3477  </script>
3477
3478  
3478<script>
3479
3480  /*
3481
3482    ------
3483    Events
3484    ------
3485
3486    pages/viewed
3487
3488    customers/signup
3489
3490    customers/login
3491
3492    products/searched
3493
3494    collections/viewed
3495
3496    products/viewed
3497
3498    products/shared
3499
3500    wishlists/item_added
3501
3502    carts/items_added
3503
3504    carts/viewed
3505
3506    carts/item_removed
3507
3508    checkouts/initiated
3509
3510    checkouts/shipping_info_added
3511
3512    checkouts/payment_info_added
3513
3514    checkouts/completed
3515
3516    orders/placed
3517
3518    orders/purchased
3519
3520    payments/captured
3521
3522    payments/failed
3523
3524  */
3525
3526  window.__latest_cart = window.__latest_cart || null;
3527
3528  const _selector = document.querySelector.bind(document),
3529        _selectorAll = document.querySelectorAll.bind(document)
3530
3531  document.addEventListener('DOMContentLoaded', (event) => {
3532
3533    const default_currency = getCookie("currency")
3534    const customer_id = window.__st.cid
3535    const template    = window.__st.p
3536
3537    onPageView()
3538
3539    //-----------------------//
3540    //        Configs        //
3541    //-----------------------//
3542
3543    window.dataLayer = window.dataLayer || []
3544
3545    Array.prototype.last = Array.prototype.last || function() {
3546      return this[this.length - 1] || null
3547    }
3548
3549    Array.prototype.first = Array.prototype.first || function() {
3550      return this[0] || null
3551    }
3552
3553    //----------------------//
3554    //       Triggers       //
3555    //----------------------//
3556
3557    const XHR = window.XMLHttpRequest
3558
3559    function xhr() {
3560
3561      const xhr = new XHR()
3562
3563      xhr.addEventListener("readystatechange", function() {
3564
3565        if(xhr.readyState != 4) return
3566
3567        try {
3568
3569          const response_url = xhr.responseURL
3570
3571          if (response_url.includes("cart/add")) {
3572
3573            window.__latest_cart = JSON.parse(xhr.response)
3574
3575            onCartItemsAdded() // ok
3576
3577          }
3578
3579          if (response_url.includes("cart/remove_item_quantity")) {
3580
3581            window.__latest_cart = JSON.parse(xhr.response)
3582
3583            onCartItemRemoved() // ok
3584
3585          }
3586
3587          if (response_url.includes("new_cart?retrieve=true")) {
3588
3589            result = JSON.parse(xhr.response)
3590
3591            if (result.cart) {
3592              window.__latest_cart = result.cart
3593            }
3594
3595          }
3596
3597        } catch(e) {
3598
3599          console.error(e)
3600
3601        }
3602
3603      }, false);
3604
3605      return xhr
3606
3607    }
3608
3609    window.XMLHttpRequest = xhr
3610
3611    switch(template) {
3612
3613      case 'cart': onCartView() // ok
3614      break
3615      case 'product': onProductView() // ok
3616      break
3617      case 'collection': onCollectionView() // ok
3618      break
3619      case 'blog': onBlogView()
3620      break
3621      case 'article': onArticleView()
3622      break
3623      case 'payment_completed': onOrderPlace()
3624      break
3625      case 'payment_fail': onPaymentFail()
3626      break
3627
3628    }
3629
3630    // _selector('form[action="/checkout/payments"]').addEventListener("submit", onPaymentInfoAdded(_selector('form[action="/checkout/payments"]')))
3631    if (_selector('form[action="/checkout/detail"]'))                            _selector('form[action="/checkout/detail"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/detail"]'))})  // ok
3632    if (_selector('form[action="/checkout/shipping"]'))                          _selector('form[action="/checkout/shipping"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/shipping"]'))})  // ok
3633    if (_selector('form[action="/account/register"]'))                           _selector('form[action="/account/register"]').addEventListener("submit", onSignUp)  // ok
3634    if (_selector('form[action="/account/login"]'))                              _selector('form[action="/account/login"]').addEventListener("submit", onLogin)  // ok
3635    if (_selector('form[action="/search"]'))                                     _selector('form[action="/search"]').addEventListener("submit", onProductSearch()) // ok
3636    if (_selector('#line-login-btn'))                                            _selector('#line-login-btn').addEventListener('click', onLineLogin) // ok
3637    if (_selector('#PlaceOrder'))                                                _selector('#PlaceOrder').addEventListener("click", ()=>{onCheckoutComplete(_selector('form[action="/checkout/payments"]'))});  // ok
3638    if (_selector('#add_wishlist'))                                              _selector('#add_wishlist').addEventListener("click", onWishlistItemAdded) // ok
3639    if (_selectorAll('a[href="/account/logout"]'))                               _selectorAll('a[href="/account/logout"]').forEach(logoutButton => logoutButton.addEventListener("click", onLogout)) // ok
3640    if (_selector('.CartDrawerTrigger.cart-page-link'))                          _selector('.CartDrawerTrigger.cart-page-link').addEventListener("click", onCartView) // ok
3641    if (_selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link'))    _selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link').addEventListener("click", onCartView) // ok
3642    if (_selectorAll('a[class^="share-"]'))                                      _selectorAll('a[class^="share-"]').forEach(shareButton => shareButton.addEventListener("click", ()=>{onProductShare(shareButton)}) ) // ok
3643    if (_selectorAll('[name$="checkout"]'))                                      _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate))
3644
3645    // For append elements
3646    const bodyMutationObserver = new MutationObserver(() => {
3647      if (_selector('#form__spc #PlaceOrder'))             _selector('#form__spc #PlaceOrder').addEventListener("click", onSinglePageCheckout) // ok
3648      if (_selectorAll('[name$="checkout"]'))              _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate))
3649    });
3650    bodyMutationObserver.observe(_selector("body"), {subtree: true, childList: true});
3651
3652    //------------------------------//
3653    //        Event handlers        //
3654    //------------------------------//
3655
3656    function onPageView() {
3657
3658      EasyStore.Event.dispatch('pages/viewed', {
3659        page: {
3660          type: template,
3661          title: document.title,
3662          description: _selector('meta[name=description]') ? _selector('meta[name=description]').getAttribute('content') : null,
3663          url: location.href,
3664        }
3665      })
3666
3667    }
3668
3669    function onSignUp() {
3670
3671      const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/)
3672      const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/)
3673
3674      const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "")
3675
3676      let data = {}
3677
3678      if (email_regex.test(email_or_phone)) {
3679        data.method = 'email'
3680        data.email = email_or_phone
3681      }
3682
3683      if (phone_regex.test(email_or_phone)) {
3684        data.method = "phone"
3685        data.phone = email_or_phone
3686      }
3687
3688      if (!data.method) return
3689
3690      EasyStore.Event.dispatch('customers/signup', data)
3691
3692    }
3693
3694    function onLogin() {
3695
3696      const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/)
3697      const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/)
3698
3699      const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "")
3700
3701      let data = {}
3702
3703      if (email_regex.test(email_or_phone)) {
3704        data.method = 'email'
3705        data.email = email_or_phone
3706      }
3707
3708      if (phone_regex.test(email_or_phone)) {
3709        data.method = "phone"
3710        data.phone = email_or_phone
3711      }
3712
3713      if (!data.method) return
3714
3715      EasyStore.Event.dispatch('customers/login', data)
3716
3717    }
3718
3719    function onLineLogin() {
3720
3721      EasyStore.Event.dispatch('customers/login', { method: 'line' })
3722
3723    }
3724
3725    function onLogout() {
3726
3727      EasyStore.Event.dispatch('customers/logout', { customer_id })
3728
3729    }
3730
3731    function onBlogView() {
3732
3733      const blog = ""
3734
3735      EasyStore.Event.dispatch('blogs/viewed', { blog })
3736
3737    }
3738
3739    function onArticleView() {
3740
3741      const article = ""
3742
3743      EasyStore.Event.dispatch('articles/viewed', { article })
3744
3745    }
3746
3747    function onProductSearch() {
3748
3749      const query = _selector('input[name=q]').value
3750
3751      if (!query) return
3752
3753      EasyStore.Event.dispatch('products/searched', { query })
3754
3755    }
3756
3757    function onCollectionView() {
3758
3759      const collection = {"id":1528441,"store_id":619811,"parent_id":0,"reference_id":null,"name":"LEZZETTO SIGNATURE CA
3759KES","title":"LEZZETTO SIGNATURE CAKES","handle":"lezzetto-cakes","image_url":"https:\/\/cdn.store-assets.com\/s\/619811\/f\/15042822.png","origin_image_url":null,"description":"","body_html":"","origin_body_html":null,"position":1,"is_locked":false,"is_published":true,"published_at":"2025-04-04T17:06:40.000+08:00","updated_at":"2025-04-04T17:06:40.000+08:00","created_at":"2020-12-10T10:58:36.000+08:00","url":"\/collections\/lezzetto-cakes"}
3760
3761      EasyStore.Event.dispatch('collections/viewed', { collection })
3762
3763    }
3764
3765    function onProductView() {
3766
3767      const product = {"id":4549173,"handle":"chocolate-moist","name":"CHOCOLATE MOIST BLISS","title":"CHOCOLATE MOIST BLISS","url":"\/products\/chocolate-moist","share_url":"https:\/\/www.lezzetto.my\/products\/chocolate-moist","price":55,"price_min":"55.0","price_max":"80.0","price_varies":true,"compare_at_price":70,"compare_at_price_min":"70.0","compare_at_price_max":"100.0","compare_at_price_varies":true,"available":true,"options_with_values":[{"name":"Size","position":1,"values":["5\" Inch","7\" Inch"]}],"options_by_name":{"Size":{"name":"Size","position":1,"values":["5\" Inch","7\" Inch"]}},"options":["Size"],"has_only_default_variant":false,"sole_variant_id":null,"variants":[{"id":63115195,"title":"5\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"price":5500,"compare_at_price":7000,"is_enabled":true,"options":["5\" Inch"],"option1":"5\" Inch","option2":null,"option3":null,"points":null},{"id":63115196,"title":"7\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":null,"price":8000,"compare_at_price":10000,"is_enabled":true,"options":["7\" Inch"],"option1":"7\" Inch","option2":null,"option3":null,"points":null}],"selected_variant":{"id":63115195,"title":"5\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"price":5500,"compare_at_price":7000,"is_enabled":true,"options":["5\" Inch"],"option1":"5\" Inch","option2":null,"option3":null,"points":null},"first_available_variant":{"id":63115195,"title":"5\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"price":5500,"compare_at_price":7000,"is_enabled":true,"options":["5\" Inch"],"option1":"5\" Inch","option2":null,"option3":null,"points":null},"selected_or_first_available_variant":{"id":63115195,"title":"5\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"price":5500,"compare_at_price":7000,"is_enabled":true,"options":["5\" Inch"],"option1":"5\" Inch","option2":null,"option3":null,"points":null},"img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","featured_image":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"secondary_image":{"alt":"","img_url":"","src":"","type":""}
3767,"images":[{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"}],"media":[{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"}],"featured_media":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"metafields":[],"expires":null,"published_at":"2020-12-10T10:37:00.000+08:00","created_at":"2020-12-10T10:38:42.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><strong><span style=\"font-size: 18px;\">Product Description<\/span><\/strong><\/p><p>Rich and moist chocolate layered cake<\/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><strong><span style=\"font-size: 18px;\">Product Description<\/span><\/strong><\/p><p>Rich and moist chocolate layered cake<\/p><\/div>","meta_description":"CHOCOLATE MOIST Size : 7 Inch","brands":[],"tags":[],"vendor":null,"collections":[{"handle":"lezzetto-cakes","title":"LEZZETTO SIGNATURE CAKES"},{"handle":"feature-on-homepage","title":"Home"},{"handle":"best-selling","title":"BEST SELLING"}],"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":4549173,"viewed_at":"2026-09-27T08:57:52.984+08:00"},"cache_source":"live_api","promotions":[]}
3768
3769      EasyStore.Event.dispatch("products/viewed", { product })
3770
3771    }
3772
3773    function onProductShare(el) {
3774
3775      const product = {"id":4549173,"handle":"chocolate-moist","name":"CHOCOLATE MOIST BLISS","title":"CHOCOLATE MOIST BLISS","url":"\/products\/chocolate-moist","share_url":"https:\/\/www.lezzetto.my\/products\/chocolate-moist","price":55,"price_min":"55.0","price_max":"80.0","price_varies":true,"compare_at_price":70,"compare_at_price_min":"70.0","compare_at_price_max":"100.0","compare_at_price_varies":true,"available":true,"options_with_values":[{"name":"Size","position":1,"values":["5\" Inch","7\" Inch"]}],"options_by_name":{"Size":{"name":"Size","position":1,"values":["5\" Inch","7\" Inch"]}},"options":["Size"],"has_only_default_variant":false,"sole_variant_id":null,"variants":[{"id":63115195,"title":"5\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"price":5500,"compare_at_price":7000,"is_enabled":true,"options":["5\" Inch"],"option1":"5\" Inch","option2":null,"option3":null,"points":null},{"id":63115196,"title":"7\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":null,"price":8000,"compare_at_price":10000,"is_enabled":true,"options":["7\" Inch"],"option1":"7\" Inch","option2":null,"option3":null,"points":null}],"selected_variant":{"id":63115195,"title":"5\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"price":5500,"compare_at_price":7000,"is_enabled":true,"options":["5\" Inch"],"option1":"5\" Inch","option2":null,"option3":null,"points":null},"first_available_variant":{"id":63115195,"title":"5\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":854
377564388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"price":5500,"compare_at_price":7000,"is_enabled":true,"options":["5\" Inch"],"option1":"5\" Inch","option2":null,"option3":null,"points":null},"selected_or_first_available_variant":{"id":63115195,"title":"5\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"price":5500,"compare_at_price":7000,"is_enabled":true,"options":["5\" Inch"],"option1":"5\" Inch","option2":null,"option3":null,"points":null},"img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","featured_image":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"secondary_image":{"alt":"","img_url":"","src":"","type":""},"images":[{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"}],"media":[{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"}
3775],"featured_media":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"metafields":[],"expires":null,"published_at":"2020-12-10T10:37:00.000+08:00","created_at":"2020-12-10T10:38:42.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><strong><span style=\"font-size: 18px;\">Product Description<\/span><\/strong><\/p><p>Rich and moist chocolate layered cake<\/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><strong><span style=\"font-size: 18px;\">Product Description<\/span><\/strong><\/p><p>Rich and moist chocolate layered cake<\/p><\/div>","meta_description":"CHOCOLATE MOIST Size : 7 Inch","brands":[],"tags":[],"vendor":null,"collections":[{"handle":"lezzetto-cakes","title":"LEZZETTO SIGNATURE CAKES"},{"handle":"feature-on-homepage","title":"Home"},{"handle":"best-selling","title":"BEST SELLING"}],"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":4549173,"viewed_at":"2026-09-27T08:57:52.984+08:00"},"cache_source":"live_api","promotions":[]}
3776
3777      const channel = el.getAttribute("class").split("-").last()
3778
3779      EasyStore.Event.dispatch('products/shared', { product, channel })
3780
3781    }
3782
3783    function onWishlistItemAdded() {
3784
3785      let product  = {"id":4549173,"handle":"chocolate-moist","name":"CHOCOLATE MOIST BLISS","title":"CHOCOLATE MOIST BLISS","url":"\/products\/chocolate-moist","share_url":"https:\/\/www.lezzetto.my\/products\/chocolate-moist","price":55,"price_min":"55.0","price_max":"80.0","price_varies":true,"compare_at_price":70,"compare_at_price_min":"70.0","compare_at_price_max":"100.0","compare_at_price_varies":true,"available":true,"options_with_values":[{"name":"Size","position":1,"values":["5\" Inch","7\" Inch"]}],"options_by_name":{"Size":{"name":"Size","position":1,"values":["5\" Inch","7\" Inch"]}},"options":["Size"],"has_only_default_variant":false,"sole_variant_id":null,"variants":[{"id":63115195,"title":"5\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"price":5500,"compare_at_price":7000,"is_enabled":true,"options":["5\" Inch"],"option1":"5\" Inch","option2":null,"option3":null,"points":null},{"id":63115196,"title":"7\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":null,"price":8000,"compare_at_price":10000,"is_enabled":true,"options":["7\" Inch"],"option1":"7\" Inch","option2":null,"option3":null,"points":null}],"selected_variant":{"id":63115195,"title":"5\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"price":5500,"compare_at_price":7000,"is_enabled":true,"options":["5\" Inch"],"option1":"5\" Inch","option2":null,"option3":null,"points":null},"first_available_variant":{"id":63115195,"title":"5\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"price":5500,"compare_at_price":7000,"is_enabled":true,"options":["5\" Inch"],"option1":"5\" Inch","option2":null,"option3":null,"points":null},"selected_or_first_available_variant":{"id":63115195,"title":"5\" Inch","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"infinite_stock":true,"featured_image":{"id":854
378564388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"price":5500,"compare_at_price":7000,"is_enabled":true,"options":["5\" Inch"],"option1":"5\" Inch","option2":null,"option3":null,"points":null},"img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","featured_image":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"secondary_image":{"alt":"","img_url":"","src":"","type":""},"images":[{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"}],"media":[{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"}
3785],"featured_media":{"id":85464388,"alt":"Website Photo (18)","img_url":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","src":"https:\/\/cdn.store-assets.com\/s\/619811\/i\/85464388.png","height":1080,"width":1080,"position":1,"type":"Images"},"metafields":[],"expires":null,"published_at":"2020-12-10T10:37:00.000+08:00","created_at":"2020-12-10T10:38:42.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><strong><span style=\"font-size: 18px;\">Product Description<\/span><\/strong><\/p><p>Rich and moist chocolate layered cake<\/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><strong><span style=\"font-size: 18px;\">Product Description<\/span><\/strong><\/p><p>Rich and moist chocolate layered cake<\/p><\/div>","meta_description":"CHOCOLATE MOIST Size : 7 Inch","brands":[],"tags":[],"vendor":null,"collections":[{"handle":"lezzetto-cakes","title":"LEZZETTO SIGNATURE CAKES"},{"handle":"feature-on-homepage","title":"Home"},{"handle":"best-selling","title":"BEST SELLING"}],"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":4549173,"viewed_at":"2026-09-27T08:57:52.984+08:00"},"cache_source":"live_api","promotions":[]}
3786      const quantity = _selector("#Quantity").value
3787
3788      EasyStore.Event.dispatch('wishlists/item_added', { product })
3789
3790    }
3791
3792    async function onCartItemsAdded() {
3793
3794      const cart = await getCart()
3795
3796      if(cart && cart.items != undefined && cart.items.length > 0) {
3797
3798        EasyStore.Event.dispatch('carts/item_added', { cart })
3799
3800      }
3801
3802    }
3803
3804    async function onCartView() {
3805
3806      const cart = await getCart()
3807
3808      EasyStore.Event.dispatch('carts/viewed', { cart })
3809
3810    }
3811
3812    async function onCartItemRemoved() {
3813
3814      const cart = await getCart()
3815
3816      cart.items = []
3817
3818      if(cart) {
3819
3820        EasyStore.Event.dispatch('carts/item_removed', { cart })
3821
3822      }
3823
3824    }
3825
3826    async function onCheckoutInitiate() {
3827
3828      const cart = await getCart()
3829
3830      EasyStore.Event.dispatch('checkouts/initiated', { cart })
3831
3832    }
3833
3834    async function onShippingInfoAdded(form) {
3835      let checkout = getCheckout()
3836
3837      let form_data = {}
3838      new FormData(form).forEach((value, key) => form_data[key] = value)
3839
3840      let shipping_tier = null
3841
3842      if (form_data.type && form_data.type.startsWith("r_pickup")) {
3843        shipping_tier = `Pickup - ${form_data.pick_location}`
3844      }
3845
3846      if (form_data.s_id) {
3847        shipping_tier = _selector(`input[id='`+form_data.s_id+`']`).getAttribute("data-shipping-name")
3848      }
3849
3850      if (!shipping_tier) return
3851
3852      EasyStore.Event.dispatch('checkouts/shipping_info_added', { checkout, shipping_tier })
3853
3854    }
3855
3856    async function onPaymentInfoAdded(form) {
3857
3858      let checkout = getCheckout()
3859
3860      let payment_type = new FormData(form).get('payment_method')
3861
3862      EasyStore.Event.dispatch("checkouts/payment_info_added", { checkout, payment_type })
3863
3864    }
3865
3866    async function onOrderPlace() {
3867
3868      let cart_token  = getCookie("cart_js")
3869      let previous_cart_token = getCookie("previous_cart_ga4_js")
3870
3871      if (previous_cart_token && previous_cart_token == cart_token) {
3872        // Prevent duplicate purchase tracking
3873        return
3874      }
3875
3876      let order = getOrder()
3877
3878      EasyStore.Event.dispatch('orders/placed', { order })
3879
3880      if(order.is_manual_payment) {
3881
3882        EasyStore.Event.dispatch('orders/purchased', { order })
3883
3884      }
3885
3886      const last_transaction = order.transactions.last()
3887
3888      if (last_transaction.status) {
3889
3890        EasyStore.Event.dispatch('orders/purchased', { order })
3891        EasyStore.Event.dispatch('payments/captured', { order })
3892
3893      }
3894
3895    }
3896
3897    async function onPaymentFail() {
3898
3899      const order = getOrder()
3900
3901      EasyStore.Event.dispatch('payments/failed', { order })
3902
3903    }
3904
3905    async function onCheckoutComplete(form) {
3906
3907      onPaymentInfoAdded(form)
3908
3909      const checkout = getCheckout()
3910
3911      EasyStore.Event.dispatch('checkouts/completed', { checkout })
3912
3913    }
3914
3915    async function onSinglePageCheckout() {
3916
3917      // let checkout = $("[data-app-checkout]").data("app-checkout")
3918
3919      let checkout = getCheckout()
3920
3921      // const payment_type = _selector("#app_spc_payment_method").find(`[class*="label-content"]`).first().find("b").first().text()
3922      const payment_type = _selector("#app_spc_payment_method").getElementsByClassName('label-content')[0].getElementsByTagName('b')[0].innerHTML
3923
3924      const shipping_method = _selector("#delivery_method").value
3925
3926      let shipping_tier = null
3927      let app_spc_customer_info_label = _selector("#app_spc_customer_info").getElementsByClassName('label-content')
3928      if (shipping_method == "shipping") {
3929        shipping_tier = app_spc_customer_info_label[app_spc_customer_info_label.length - 1].getElementsByTagName('b')[0].innerHTML
3930      }
3931
3932      if (shipping_method == "pickup") {
3933        shipping_tier = app_spc_customer_info_label[0].innerHTML
3934      }
3935
3936      if (shipping_tier) {
3937
3938        EasyStore.Event.dispatch('checkouts/shipping_info_added', {
3939          checkout,
3940          shipping_tier,
3941        })
3942
3943      }
3944
3945      if (payment_type) {
3946
3947        EasyStore.Event.dispatch('checkouts/payment_info_added', {
3948          checkout,
3949          payment_type,
3950        })
3951
3952      }
3953
3954      EasyStore.Event.dispatch('checkouts/completed', { checkout })
3955
3956    }
3957
3958  })
3959
3960
3961  //-----------------------//
3962  //       Functions       //
3963  //-----------------------//
3964
3965  function getCookie(name) {
3966
3967    name += "="
3968
3969    decodedCookie = decodeURIComponent(document.cookie)
3970
3971    ca = decodedCookie.split(";")
3972
3973    for(i = 0; i < ca.length; i++) {
3974      c = ca[i]
3975      while (c.charAt(0) == " ") {
3976        c = c.substring(1)
3977      }
3978      if (c.indexOf(name) == 0) {
3979        return c.substring(name.length, c.length)
3980      }
3981    }
3982
3983    return ""
3984
3985  }
3986
3987  const parsePrice = price => {
3988    if(typeof price === 'string') {
3989      return parseFloat(price.split(',').join(''))
3990    }
3991
3992    return price
3993  }
3994
3995  const requestCart = async (method, data) => {
3996
3997  let response = await fetch('/cart.json', {method: 'GET',headers: {'Content-Type': 'application/json'}})
3998    result = await response.json()
3999
4000    return result.cart
4001
4002  }
4003  const getCart = async (latest = false) => {
4004
4005    let cart = window.__latest_cart
4006
4007    const cart_invalid = !cart || !cart.items || (cart.total_price > 0 && !cart.items.length)
4008
4009    if(latest || cart_invalid) {
4010      cart = await requestCart()
4011    }
4012
4013    cart.items = cart.items || []
4014
4015    return mapCart(cart)
4016
4017  }
4018
4019  const getCheckout = async () => {
4020    mapCheckout(window.__latest_cart || await requestCart())
4021  }
4022
4023  const getOrder = async () => {
4024    mapOrder(window.__latest_cart || await requestCart())
4025  }
4026
4027  //-----------------------//
4028  //        Mappers        //
4029  //-----------------------//
4030
4031  const fallbackAttribute = (object, attribute) => {
4032
4033    if(!Array.isArray(attribute)) {
4034      attribute = [attribute]
4035    }
4036
4037    let final_value = null
4038
4039    do {
4040
4041      final_value = object[attribute.shift()]
4042
4043    } while(!final_value && attribute.length)
4044
4045    return final_value
4046
4047  }
4048
4049  const map = (object, mapper) => {
4050
4051    const newObject = {}
4052
4053    for(const key in mapper) {
4054
4055      // Handle different keys between new and old format
4056      newObject[key] = fallbackAttribute(object, mapper[key])
4057
4058      // Cast price to float
4059      if(newObject[key] && ['price', 'amount', 'discount', 'discounts'].some(x => key.endsWith(x))) {
4060        newObject[key] = parsePrice(newObject[key])
4061      }
4062
4063      if(newObject[key] === undefined) {
4064        delete newObject[key]
4065      }
4066
4067    }
4068
4069    return newObject
4070
4071  }
4072
4073  const mapCart = cart => {
4074
4075    const oldCart = cart
4076
4077    const mapper = {
4078      id: 'id',
4079      currency: 'currency',
4080      item_count: 'item_count',
4081      items: 'items',
4082      total_price: 'total_price',
4083      latest_items: 'latest_items'
4084    }
4085
4086    cart = map(cart, mapper)
4087
4088    const discounts = (oldCart.storewide_discounts || []).concat((oldCart.voucher_discounts || []))
4089
4090    cart.discount_applications = discounts.map(discount => ({
4091      title: discount.voucher_code || null,
4092      value: parsePrice(discount.amount),
4093    }))
4094
4095    cart.original_total_price = cart.items.length
4096    ? cart.items
4097      .map(item => item.original_price)
4098      .reduce((sum, price) => sum + price)
4099    : 0
4100
4101    cart.total_discount = cart.discount_applications.length
4102    ? cart.discount_applications
4103      .map(discount => parsePrice(discount.value))
4104      .reduce((sum, value) => sum + value)
4105    : 0
4106
4107    cart.items = cart.items.map(item => mapLineItem(item))
4108
4109    return cart
4110
4111  }
4112
4113  const mapCheckout = checkout => {
4114
4115    const mapper = {
4116      note: 'note',
4117      attributes: 'note_attributes',
4118      billing_address: 'billing_address',
4119      currency: 'currency',
4120      customer_id: 'customer_id',
4121      discounts_amount: 'total_discount',
4122      id: 'id',
4123      line_items: 'order_item',
4124      order_number: 'order_number',
4125      shipping_address: 'shipping_address',
4126      shipping_price: 'shipping_tax',
4127      shipping_method: 'shipping_method_name',
4128      tax_price: 'total_tax',
4129    }
4130
4131    checkout = map(checkout, mapper)
4132
4133    checkout.requires_shipping = checkout.line_items.some(item => item.shipping_required)
4134
4135    checkout.line_items = checkout.line_items.map(item => mapLineItem(item))
4136
4137    return checkout
4138
4139  }
4140
4141  const mapOrder = order => {
4142
4143    const mapper = {
4144      attributes: 'note_attributes',
4145      billing_address: 'billing_address',
4146      cancelled: 'is_cancelled',
4147      cancelled_at: 'cancelled_at',
4148      created_at: 'created_at',
4149      customer_id: 'customer_id',
4150      // discount_applications: 'discount_applications',
4151      email: 'email',
4152      financial_status: 'financial_status',
4153      fulfillment_status: 'fulfillment_status',
4154      line_items: 'order_item',
4155      note: 'note',
4156      order_number: 'order_number',
4157      phone: 'phone',
4158      shipping_address: 'shipping_address',
4159      shipping_methods: 'shipping_methods',
4160      shipping_price: 'total_shipping',
4161      subtotal_price: 'subtotal_price',
4162      // tax_lines: 'tax_lines',
4163      tax_price: 'total_tax',
4164      total_discounts: 'total_discount',
4165      total_net_amount: 'total_amount_include_transaction',
4166      total_price: 'total_price',
4167      transactions: 'transaction_records',
4168      is_manual_payment: 'is_manual_payment',
4169    }
4170
4171    order.email = order.billing_address.email
4172    order.phone = order.billing_address.phone
4173    order.shipping_method = order.shipping_method_name
4174
4175    order = map(order, mapper)
4176
4177    order.line_items = order.line_items.map(item => mapLineItem(item))
4178    order.transactions = order.transactions.map(transaction => mapTransaction(transaction))
4179
4180    return order
4181
4182  }
4183
4184  const mapLineItem = line_item => {
4185
4186    const old_line_item = line_item
4187
4188    const mapper = {
4189      final_price: 'price',
4190      image: 'img_url',
4191      message: 'message',
4192      original_line_price: 'original_line_price',
4193      original_price: 'original_price',
4194      properties: 'properties',
4195      quantity: 'quantity',
4196      requires_shipping: 'shipping_required',
4197      sku: 'sku',
4198      taxable: 'taxable',
4199      title: 'product_name',
4200      product_name: 'product_name',
4201      url: 'url',
4202      product_id: 'product_id',
4203      variant_id: 'variant_id',
4204      id: ['id', 'i_id'],
4205    }
4206
4207    line_item = map(line_item, mapper)
4208
4209    line_item.product_id = line_item.product_id || (old_line_item.product && old_line_item.product.id) || null
4210    line_item.variant_id = line_item.variant_id || (old_line_item.variant && old_line_item.variant.id) || null
4211    line_item.image      = line_item.image || (old_line_item.image && old_line_item.image.url) || null
4212
4213    return line_item
4214
4215  }
4216
4217  const mapTransaction = transaction => {
4218
4219    const mapper = {
4220      amount: 'amount',
4221      created_at: 'created_at',
4222      gateway: 'gateway_type',
4223      id: 'id',
4224      status: 'status',
4225    }
4226
4227    transaction = map(transaction, mapper)
4228
4229    return transaction
4230
4231  }
4232
4233
4234</script>
4234
4235
4236</body>
4237</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.