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 – 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()">×</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 × 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&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&media=&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('&', '&').replace('>','>').replace('<','<').replace('/','/').replace('â', '"').replace("'","'") }</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 = '×'; 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.