OLXTOTO | Provider Pragmatic Play Slot Online Dengan Live Rtp Hari Ini

Bandingkan Produk (0)

Belum ada produk dipilih

Pilih produk yang ingin dibandingkan dengan klik tombol "Bandingkan Produk" di halaman produk.

💡 Catatan: Analisis ini dihasilkan secara otomatis dan dapat memiliki keterbatasan. Gunakan sebagai referensi tambahan dengan tetap mempertimbangkan kebutuhan Anda. Untuk informasi lebih lanjut, silakan hubungi tim OLXTOTO.
OLXTOTO

OLXTOTO | Provider Pragmatic Play Slot Online Dengan Live Rtp Hari Ini

Rp 5.000,-Rp 1.000.000-99.5%
OLXTOTO SLOT
OLXTOTO
OLXTOTO SLOT
OLXTOTO RTP
RTP SLOT
SLOT ONLINE
OLXTOTO RTP SLOT
photoprime.org

OLXTOTO | Provider Pragmatic Play Slot Online Dengan Live Rtp Hari Ini

Rp 5.000 Rp 50.000 -95%
Terjual 2
OLXTOTO SKU: 1S83N0880RID
💳 Autorized SLOT ONLINE OLXTOTO RTP SLOT
Bandingkan hingga 5 produk dengan bantuan AI

Informasi OLXTOTO & Provider Pragmatic Play:

  • Nama Situs: OLXTOTO
  • Jenis Permainan: Slot Online
  • Provider Utama: Pragmatic Play
  • Fitur Unggulan: Super Scatter, Multiplier x25000, & Fitur Beli Spin
  • Kompatibilitas: Quick Turbo (ioS, Android, & Pc Desktop)
  • Tingkat Kemiripan: 98.9% Mirip Asli (algoritma & RTP Real-Time)
  • Tujuan Penggunaan: Hiburan, Test RTP, & Eksperimen Pola Gacor
  • Minimal Deposit: Rp 10.000
  • Minimal Withdraw: Rp 50.000
  • Metode Deposit: Bank Transfer, QRIS, & E-Wallet
  • Total Rating: 2.856.941
  • Rating: ⭐⭐⭐⭐⭐
  • Daftar Sekarang: Klik Disini

⚡ SLOT ONLINE HARI INI⚡

— READY —
Provider Rekomendasi
-
Mode: - RTP: -
RTP SLOT
-
Jam Ramai
-
Pola Main
-
Status
-
Tips: Ini simulasi hiburan. Gunakan dengan bijak.
3 Alternatif Provider RTP
Copyright- OLXTOTO
Mode ${type} • RTP ${x.rtp}%
Spin Meter: ${getSpinMeter()}
`; wrap.appendChild(el); }); } function spinButton(btn, on) { if (on) { btn.disabled = true; btn.dataset.text = btn.innerHTML; btn.innerHTML = '🔄 PROCESSING...'; } else { btn.disabled = false; btn.innerHTML = btn.dataset.text || '🎰 GENERATE RTP'; } } /* =============================== INIT ================================ */ (function init() { const sel = $("#providerFilter"); uniqueProviders().forEach(p => { const option = document.createElement("option"); option.value = p; option.textContent = p; sel.appendChild(option); }); $("#btnRtpRandom").addEventListener("click", (e) => { const btn = e.currentTarget; const type = $("#slotTypeFilter").value; const filtered = applyFilters(); const st = $("#rtpStatus"); if (!filtered.length) { st.textContent = "— NO MATCH —"; st.style.color = "#ffffff"; renderAlts([], type); $("#rProvider").textContent = "-"; $("#rSlotType").textContent = type; $("#rPercent").textContent = "-"; $("#rRtpValue").textContent = "-"; $("#rJam").textContent = "-"; $("#rPola").textContent = "-"; $("#rStatusText").textContent = "-"; return; } spinButton(btn, true); st.textContent = "— SCANNING RTP —"; st.style.animation = "pulse .6s linear infinite"; st.style.color = "#ffffff"; const t0 = setInterval(() => { const temp = pickRandom(filtered, 1)[0]; $("#rProvider").textContent = `${temp.provider} (${temp.code}) • Jam Ramai ${temp.jam}`; $("#rSlotType").textContent = type; $("#rPercent").textContent = `${temp.rtp}%`; $("#rRtpValue").textContent = getRtpText(temp.rtp); $("#rJam").textContent = temp.jam; $("#rPola").textContent = getRandomPattern(); $("#rStatusText").textContent = getRandomStatus(); }, 85); setTimeout(() => { clearInterval(t0); const picks = pickRandom(filtered, 4); renderMain(picks[0], type); renderAlts(picks.slice(1), type); st.textContent = "— READY —"; st.style.animation = ""; st.style.color = "#000"; spinButton(btn, false); }, 1200); }); renderAlts([], "HIGH"); })();

OLXTOTO | Provider Pragmatic Play Slot Online Dengan Live Rtp Hari Ini

Pragmatic play dikenal sebagai salah satu provider permainan slot online yang memiliki koleksi game populer dengan beragam tema dan fitur menarik. Banyak pemain mengenal provider ini melalui berbagai judul permainan yang menawarkan tampilan visual modern, efek animasi berkualitas tinggi, serta mekanisme permainan yang mudah dipahami. Selain itu, pragmatic play juga menghadirkan pembaruan game secara berkala sehingga pemain dapat menemukan pengalaman bermain yang lebih variatif dari waktu ke waktu.

Di OLXTOTO, pemain dapat mengakses berbagai permainan dari provider pragmatic play yang dilengkapi dengan informasi live rtp hari ini. Fitur ini memberikan informasi persentase rtp (return to player) yang diperbarui secara berkala sehingga pemain dapat melihat data yang tersedia sebelum memilih permainan. RTP sendiri merupakan indikator teoretis yang menggambarkan tingkat pengembalian dalam jangka panjang dan menjadi salah satu informasi yang sering diperhatikan oleh para pemain slot online.

Selain menyediakan akses ke berbagai permainan populer, OLXTOTO juga menghadirkan tampilan platform yang responsif dan mudah digunakan di berbagai perangkat. Pemain dapat menikmati pengalaman bermain melalui desktop maupun smartphone tanpa mengurangi kualitas permainan. Dengan dukungan fitur Live RTP Hari Ini yang selalu diperbarui, pemain dapat memperoleh informasi yang lebih lengkap untuk mengenal berbagai game Pragmatic Play yang tersedia di platform OLXTOTO.

FAQ

Apa itu pragmatic play?
Pragmatic play adalah provider permainan online yang menyediakan berbagai jenis game, termasuk slot online, live casino, dan permainan digital lainnya yang dikenal secara global.
Apa yang dimaksud dengan live rtp hari ini?
Live rtp hari ini adalah informasi rtp (return to player) yang diperbarui secara berkala untuk membantu pemain melihat data rtp dari permainan yang tersedia.
Apakah OLXTOTO menyediakan banyak pilihan game pragmatic play?
Ya, OLXTOTO menyediakan berbagai pilihan game dari pragmatic play dengan tema, fitur, dan tingkat volatilitas yang beragam.
Bisakah bermain melalui smartphone?
Tentu. Platform OLXTOTO dirancang agar dapat diakses melalui perangkat desktop, tablet, maupun smartphone dengan tampilan yang responsif.
Mengapa RTP menjadi perhatian pemain?
RTP merupakan informasi statistik yang menunjukkan persentase pengembalian teoretis suatu permainan dalam jangka panjang sehingga sering dijadikan salah satu referensi oleh pemain.

Bagikan Produk

OLXTOTO

OLXTOTO

Rp 20.789.000

Bagikan ke

${variantText?` · ${escapeHtml(variantText)}`:''}
SKU: ${escapeHtml(skuText)} · Qty: ${qty}`, duration: 5000, actions: [{ label: 'Lihat Keranjang', onClick: () => {} }, { label: 'Lanjut Belanja', variant: 'alt', onClick: () => {} }] }); try { if (window.ga4Ecomm) { const qtySend = qty || 1; window.ga4Ecomm.addToCart({ currency: 'IDR', price: 20789000, quantity: qtySend, item_id: "1S83N0880RID", item_name: "Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Win 11 Home/Eclipse Black/3Y", item_brand: "Lenovo ", item_category: (["Komputer & Laptop", "Laptop", "Gaming"] || []).join(' / ') }) } } catch (_) {} return false } function showErrorToast() { showToast({ type: 'error', title: 'Gagal Menambah ke Keranjang', message: 'Terjadi kesalahan saat memproses permintaan. Silakan coba lagi.', duration: 5000 }) } function executeBuyNowLegacy(id, variantId) { const a = getVariantSummaryText(), b = (function() { const c = document.getElementById('pd-sku'); return c ? c.textContent.trim() : _0x5e6f })(); let willRedirect = false; try { if (window.addToCart) { window.addToCart(id, 1, variantId); willRedirect = false; } } catch (_) {} if (willRedirect) { showToast({ type: 'info', title: 'Menuju Keranjang', message: `${escapeHtml(PD_NAME)}${variantText?` · ${escapeHtml(variantText)}`:''}
SKU: ${escapeHtml(skuText)} · Qty: 1`, duration: 1800 }); setTimeout(() => { window.location.href = '/keranjang'; }, 1200); } else { showToast({ type: 'warn', title: 'Fitur Beli Langsung Segera Hadir', message: `Sementara ini Anda bisa menambahkan produk ke keranjang terlebih dahulu.
${escapeHtml(PD_NAME)}${variantText?` · ${escapeHtml(variantText)}`:''}`, duration: 6000, actions: [{ label: '+ Keranjang', onClick: () => { try { if (window.addToCart) window.addToCart(id, 1, variantId); } catch (_) {} } }, { label: 'Hubungi CS', variant: 'alt', onClick: () => { window.open('https://wa.me/6281380009898', '_blank'); } }] }); } } document.addEventListener('DOMContentLoaded', function() { var a = document.getElementById('pd-buy-form'); if (a) { a.addEventListener('submit', function(e) { var b = parseInt(a.getAttribute('data-pid'), 10) || 0; if (window.addToCartSubmit) { return window.addToCartSubmit(e, b) } }) } }); document.addEventListener('DOMContentLoaded', function() { var a = document.getElementById('btn-buy'); if (a) { a.addEventListener('click', function() { var b = a.getAttribute('data-id'); buyNow(b) }) } }); function _0x2m3n(s) { return String(s || '').replace(/[&"']/g, m => ({ '&': '&', '': '>', '"': '"', "'": ''' } [m])) } (function initGallery() { const mainImg = document.getElementById('pd-main-img'); const gallery = document.getElementById('pd-thumb-gallery'); if (!mainImg || !gallery) return; gallery.addEventListener('click', function(ev) { const btn = ev.target.closest('.pd-thumb-btn'); if (!btn) return; const full = btn.getAttribute('data-full'); if (full) { mainImg.src = full; const alt = btn.getAttribute('data-alt') || ''; if (alt) mainImg.alt = alt; const slug = btn.getAttribute('data-slug') || ''; if (slug) mainImg.dataset.slug = slug; gallery.querySelectorAll('.pd-thumb-btn').forEach(b => b.classList.remove('active')); btn.classList.add('active') } }) })(); (function initMobileSliderCounter() { const slider = document.getElementById('pd-mobile-slider'); const counter = document.getElementById('pd-gallery-counter'); if (!slider || !counter) return; let ticking = false; slider.addEventListener('scroll', function() { if (!ticking) { window.requestAnimationFrame(function() { const slides = slider.querySelectorAll('.pd-mslide'); if (!slides.length) return; const containerRect = slider.getBoundingClientRect(); const containerCenter = containerRect.left + containerRect.width / 2; let currentIdx = 0; let minDist = Infinity; slides.forEach((slide, idx) => { const slideRect = slide.getBoundingClientRect(); const slideCenter = slideRect.left + slideRect.width / 2; const dist = Math.abs(slideCenter - containerCenter); if (dist { let d = b[m] ?? 1; if (zeroEligible && (bank === 'BRI' || bank === 'Mandiri')) { d = 1; c = true } const e = a / d; const f = m > 0 ? Math.ceil((e / m) / 100) * 100 : 0; const g = document.createElement('li'); g.className = 'inst-month-item'; g.innerHTML = `${m}x${formatRupiah(f)} / bln${zeroEligible&&(bank==='BRI'||bank==='Mandiri')?'0%':''}`; listEl.appendChild(g) }); zeroNote.style.display = c ? 'block' : 'none' } card.addEventListener('click', function(ev) { const a = ev.target.closest('.bank-tab'); if (!a) return; card.querySelectorAll('.bank-tab').forEach(b => { b.classList.remove('active'); b.setAttribute('aria-selected', 'false') }); a.classList.add('active'); a.setAttribute('aria-selected', 'true'); _0x4o5p(a.dataset.bank) }); window.instSetBasePrice = function(newPrice) { setBasePrice(newPrice); _0x4o5p(activeBank()) }; _0x4o5p(activeBank()); })(); /* ====== Fokus gambar varian ====== */ function _0x6q7r(s) { return String(s || '').toLowerCase().replace(/[^a-z0-9]+/g, '') } function _0x8s9t(u) { try { return new URL(u, window.location.origin).pathname.split('/').pop().toLowerCase() } catch (e) { try { return (u || '').split('/').pop().toLowerCase() } catch (_) { return '' } } } function _0xau1v(url, altOpt) { const a = document.getElementById('pd-main-img'), b = document.getElementById('pd-thumb-gallery'), c = document.getElementById('pd-mobile-slider'); if (a && url) { a.src = url; if (altOpt) a.alt = altOpt } if (b) { const d = _0x8s9t(url); let e = null; b.querySelectorAll('.pd-thumb-btn').forEach(btn => { const f = btn.getAttribute('data-full') || '', g = _0x8s9t(f) === d; if (g) e = btn; btn.classList.toggle('active', g) }); if (e) { const h = e.getAttribute('data-alt') || '', i = e.getAttribute('data-slug') || ''; if (h && a) a.alt = h; if (i && a) a.dataset.slug = i } } if (c) { const targetName = _0x8s9t(url); const slideImg = Array.from(c.querySelectorAll('img')).find(im => _0x8s9t(im.src) === targetName); if (slideImg) { try { const container = c; const imgRect = slideImg.getBoundingClientRect(); const contRect = container.getBoundingClientRect(); const offsetLeft = slideImg.offsetLeft - container.offsetLeft; const center = offsetLeft - (container.clientWidth - slideImg.clientWidth) / 2; container.scrollTo({ left: Math.max(0, center), behavior: 'smooth' }); } catch (_) { slideImg.scrollIntoView({ behavior: 'smooth', inline: 'center', block: 'nearest' }); } } } } function findImageForVariant(variant) { if (!variant || !variant.attrs) return null; const tokens = []; try { Object.values(variant.attrs).forEach(v => { if (!v) return; const raw = String(v); tokens.push(raw); tokens.push(normalize(raw)); }); } catch (_) {} if (variant.sku) { tokens.push(String(variant.sku)); tokens.push(normalize(String(variant.sku))); } if (variant.image_url) { tokens.push(String(variant.image_url)); } let best = null; let bestScore = -1; for (const g of (galleryData || [])) { const slugN = normalize(g.slug || ''); const altN = normalize(g.alt || ''); const file = _0x8s9t(g.url || ''); const fileN = normalize(file); const imgU = g.url; for (const t of tokens) { const tN = normalize(t); if (!tN) continue; let score = -1; if (imgU === tN) score = 300; if (slugN && slugN === tN) score = 300; else if (fileN && fileN.includes(tN)) score = 200; else if (altN && altN.includes(tN)) score = 120; if (score > bestScore) { bestScore = score; best = g; } if (bestScore >= 300) break; } if (bestScore >= 300) break; } return bestScore >= 120 ? best : null; } function _0xey3z(variant) { const a = _0xcw2x(variant); if (a && a.url) { _0xau1v(a.url, a.alt || '') } } /* ====== Layout mobile ====== */ (function _0xg04h() { const a = document.querySelector('.pd-media-card'), b = document.getElementById('pd-price-block'), c = document.getElementById('pd-price-anchor'), d = document.querySelector('.pd-info-card'), e = document.getElementById('pd-title'), f = document.getElementById('pd-variant-combined'), g = document.getElementById('pd-variants'), h = document.getElementById('pd-variants-anchor'), i = document.getElementById('pd-variant-summary'), j = document.getElementById('pd-summary-anchor'), titleRow = document.querySelector('.pd-title-row'), promoBanner = document.querySelector('.promo-endyear-mini-banner'), compareSection = document.querySelector('.pd-compare-section'); if (!a || !b || !c || !d || !e) return; let pricePlaced = false; let varPlaced = false; let titlePlaced = false; let promoPlaced = false; const mq = window.matchMedia('(max-width: 640px)'); function apply() { if (mq.matches) { if (!titlePlaced && a && titleRow && d.contains(titleRow)) { try { a.appendChild(titleRow); titlePlaced = true; } catch (_) {} } if (!pricePlaced && a && b) { try { a.appendChild(b); pricePlaced = true; } catch (_) {} } if (!varPlaced && f && d && e) { try { f.hidden = false; if (i && !f.contains(i)) f.appendChild(i); if (g && !f.contains(g)) f.appendChild(g); if (d.contains(e)) d.insertBefore(f, e); varPlaced = true; } catch (_) {} } if (!promoPlaced && promoBanner && compareSection && compareSection.parentNode) { try { compareSection.parentNode.insertBefore(promoBanner, compareSection); promoPlaced = true; } catch (_) {} } } else { if (titlePlaced && titleRow && d) { try { const vcombined = document.getElementById('pd-variant-combined'); if (vcombined && d.contains(vcombined)) { d.insertBefore(titleRow, vcombined); } else { d.insertBefore(titleRow, d.firstChild); } titlePlaced = false; } catch (_) {} } if (pricePlaced && b && c && c.parentNode) { try { c.parentNode.insertBefore(b, c.nextSibling); pricePlaced = false; } catch (_) {} } if (varPlaced) { try { if (i && j && j.parentNode && !j.parentNode.contains(i)) j.parentNode.insertBefore(i, j.nextSibling); if (g && h && h.parentNode && !h.parentNode.contains(g)) h.parentNode.insertBefore(g, h.nextSibling); if (f) { f.hidden = true; f.innerHTML = ''; } varPlaced = false; } catch (_) {} } if (promoPlaced && promoBanner && b) { try { b.appendChild(promoBanner); promoPlaced = false; } catch (_) {} } } } mq.addEventListener ? mq.addEventListener('change', apply) : mq.addListener(apply); apply(); const fab = document.getElementById('pd-mobile-fab'); if (fab) { const pid = parseInt(fab.getAttribute('data-pid') || '0', 10) || 325; const btnCart = document.getElementById('mf-cart'); if (btnCart) btnCart.addEventListener('click', function() { const varInput = document.getElementById('pd-variant-id'); const variantId = varInput ? parseInt(varInput.value || '0', 10) : 0; try { if (window.addToCart) addToCart(pid, 1, variantId); } catch (_) {} const variantText = getVariantSummaryText(); const skuText = (function() { const el = document.getElementById('pd-sku'); return el ? el.textContent.trim() : PD_SKU; })(); showToast({ type: 'success', title: 'Berhasil ditambahkan ke Keranjang', message: `${escapeHtml(PD_NAME)}${variantText?` · ${escapeHtml(variantText)}`:''}
SKU: ${escapeHtml(skuText)} · Qty: 1`, duration: 5000, actions: [{ label: 'Lihat Keranjang', onClick: () => { window.location.href = '/keranjang'; } }, { label: 'Lanjut Belanja', variant: 'alt', onClick: () => {} }] }); }); } })(); /* ====== Auto-hide installment banner if sidebar too tall (Desktop only) ====== */ (function() { function adjustSidebarBanner() { if (window.innerWidth infoCardHeight) { banner.style.display = 'none'; } else { banner.style.display = ''; } } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', adjustSidebarBanner); } else { adjustSidebarBanner(); } let resizeTimer; window.addEventListener('resize', function() { clearTimeout(resizeTimer); resizeTimer = setTimeout(adjustSidebarBanner, 250); }); const pwpSection = document.getElementById('pwp-deals-section'); if (pwpSection) { const observer = new MutationObserver(function(mutations) { let shouldRecheck = false; mutations.forEach(function(mutation) { if (mutation.type === 'attributes' && mutation.attributeName === 'hidden') { shouldRecheck = true; } else if (mutation.type === 'childList' && mutation.addedNodes.length > 0) { shouldRecheck = true; } }); if (shouldRecheck) { setTimeout(adjustSidebarBanner, 100); } }); observer.observe(pwpSection, { attributes: true, childList: true, subtree: true }); } window.adjustSidebarBanner = adjustSidebarBanner; })(); /* ====== Global constants ====== */ const IS_DIGITAL = false; const IS_PREORDER = false; /* ====== Variants state (REVISED) ====== */ (function initVariants() { const _0x7g8h = []; window.variants = _0x7g8h; window.isPreorderProduct = false; const attrOrder = []; if (!variants.length || !attrOrder.length) return; function comboKey(sel) { return attrOrder.map(a => a + '=' + (sel[a] ?? '')).join('|'); } const variantMap = {}; variants.forEach(v => { const key = comboKey(v.attrs); variantMap[key] = v; }); function readSelection() { const sel = {}; attrOrder.forEach(a => { const r = document.querySelector(`.v-group[data-attr="${CSS.escape(a)}"] input[type=radio]:checked`); sel[a] = r ? r.value : ''; }); return sel; } function findVariant(sel) { return variantMap[comboKey(sel)] || null; } function autoFillMissing(sel) { let changed = false; for (const a of attrOrder) { if (sel[a]) continue; const possible = []; const seen = new Set(); variants.forEach(v => { let ok = true; for (const a2 of attrOrder) { if (a2 === a) continue; if (sel[a2] && v.attrs[a2] !== sel[a2]) { ok = false; break; } } if (ok) { const val = v.attrs[a]; if (!seen.has(val)) { seen.add(val); possible.push(val); } } }); if (possible.length === 1) { const val = possible[0]; const input = document.querySelector(`.v-group[data-attr="${CSS.escape(a)}"] input[type=radio][value="${CSS.escape(val)}"]`); if (input && !input.checked) { input.checked = true; sel[a] = val; changed = true; } } } return changed; } function rupiah(n) { n = parseInt(n || 0, 10) || 0; return 'Rp ' + n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.'); } function focusGalleryByUrl(imageUrl) { const isMobile = window.matchMedia && window.matchMedia('(max-width: 640px)').matches; if (isMobile) { _0xau1v(imageUrl); return; } const gallery = document.getElementById('pd-thumb-gallery'); const targetName = _0x8s9t(imageUrl); if (gallery) { const btns = Array.from(gallery.querySelectorAll('.pd-thumb-btn')); const btn = btns.find(b => _0x8s9t(b.getAttribute('data-full') || '') === targetName); if (btn) { btn.click(); return; } } _0xau1v(imageUrl); } function formatStockLabel(n) { n = parseInt(n || 0, 10) || 0; return (n > 10) ? '10+' : String(n) } function updateBranchPopover(v) { try { if (!v) return; const a = document.getElementById('sp-qty-meg'), b = document.getElementById('sp-qty-mdf'), c = document.getElementById('sp-qty-bda'); if (a) a.textContent = formatStockLabel(Math.max(0, v.smm | 0)); if (b) b.textContent = formatStockLabel(Math.max(0, v.smf | 0)); if (c) c.textContent = formatStockLabel(Math.max(0, v.sba | 0)) } catch (_) {} } function calcVoucherDisc(type, value, price, maxDisc) { if (type === 'PERCENTAGE') { let d = (price * value) / 100; if (maxDisc > 0 && d > maxDisc) d = maxDisc; return Math.round(d) } return Math.round(value) } function applyVariant(v, focusImage = true) { const elCur = document.getElementById('pd-price-current'); const elOri = document.getElementById('pd-price-original'); const elDisc = document.getElementById('pd-discount-badge'); const elSku = document.getElementById('pd-sku'); const elStock = document.getElementById('pd-stock-badge'); const elQty = document.getElementById('qty'); const btnAdd = document.getElementById('btn-add-cart'); const btnBuy = document.getElementById('btn-buy'); const hidVar = document.getElementById('pd-variant-id'); const mfCart = document.getElementById('mf-cart'); const mfBuy = document.getElementById('mf-buy'); const fab = document.getElementById('pd-mobile-fab'); if (hidVar) hidVar.value = v ? v.id : 0; if (elCur) elCur.textContent = rupiah(v ? v.final : 0); if (elSku && v && v.sku) elSku.textContent = v.sku; if (v && v.ori > v.final) { if (elOri) { elOri.style.display = 'inline'; elOri.textContent = rupiah(v.ori); } if (elDisc) { elDisc.style.display = 'inline'; elDisc.textContent = '-' + (v.disc || 0) + '%'; } } else { if (elOri) elOri.style.display = 'none'; if (elDisc) elDisc.style.display = 'none'; } const stock = v ? (parseInt(v.stock || 0, 10) || 0) : 0; let effectiveStock = stock; let isActivePreorder = false; if (window.isPreorderProduct && v && 'preorder_remaining' in v && v.preorder_remaining !== null) { effectiveStock = parseInt(v.preorder_remaining, 10); if (isNaN(effectiveStock)) effectiveStock = 0; isActivePreorder = true; } if (elStock) { elStock.classList.remove('in', 'out'); if (effectiveStock > 0) { elStock.classList.add('in'); elStock.textContent = IS_DIGITAL ? 'Tersedia' : (isActivePreorder ? 'Sisa Slot: ' + effectiveStock : 'Stok: ' + formatStockLabel(effectiveStock)); } else { elStock.classList.add('out'); elStock.textContent = 'Habis'; } } if (elQty) { elQty.max = String(effectiveStock > 0 ? effectiveStock : 0); if (effectiveStock 0); const updateButtons = () => { const btnAddCart = document.getElementById('btn-add-cart'); const btnBuyNow = document.getElementById('btn-buy'); const mobileCart = document.getElementById('mf-cart'); const mobileBuy = document.getElementById('mf-buy'); [btnAddCart, btnBuyNow, mobileCart, mobileBuy].forEach(btn => { if (!btn) return; if (shouldDisable) { btn.disabled = true; btn.setAttribute('disabled', 'disabled'); btn.classList.add('stock-disabled'); btn.setAttribute('data-stock-blocked', 'true'); btn.setAttribute('data-stock-reason', window.isPreorderProduct ? 'Pre-order habis' : 'Stok habis'); } else { btn.disabled = false; btn.removeAttribute('disabled'); btn.classList.remove('stock-disabled'); btn.removeAttribute('data-stock-blocked'); btn.removeAttribute('data-stock-reason'); } }); }; updateButtons(); setTimeout(updateButtons, 10); setTimeout(updateButtons, 50); setTimeout(updateButtons, 100); if (mfBuy && v) { const voucherBtn = document.getElementById('btn-buy-voucher'); const voucherCode = fab ? fab.dataset.voucherCode : ''; let voucherDiscount = 0; if (voucherBtn && voucherCode) { const vType = voucherBtn.dataset.voucherType; const vValue = parseFloat(voucherBtn.dataset.voucherValue) || 0; const vMax = parseFloat(voucherBtn.dataset.voucherMax) || 0; const finalPrice = v.final || 0; if (vType && vValue > 0) { voucherDiscount = calcVoucherDisc(vType, vValue, finalPrice, vMax); if (fab) fab.dataset.voucherValue = voucherDiscount.toString(); } } const finalPrice = v.final || 0; const textEl = mfBuy.querySelector('.mf-buy-text'); const priceEl = mfBuy.querySelector('.mf-buy-price'); if (effectiveStock > 0) { if (IS_PREORDER) { if (textEl) textEl.textContent = 'Pre Order Sekarang'; if (priceEl) priceEl.textContent = rupiah(finalPrice); } else if (voucherCode && voucherDiscount > 0) { if (textEl) textEl.textContent = 'Beli dengan Voucher'; if (priceEl) priceEl.textContent = rupiah(Math.max(0, finalPrice - voucherDiscount)); } else { if (textEl) textEl.textContent = 'Beli Sekarang'; if (priceEl) priceEl.textContent = rupiah(finalPrice); } } else { if (textEl) textEl.textContent = 'Stok Habis'; if (priceEl) priceEl.textContent = rupiah(finalPrice); } } const isMobile = window.initMobile ?? 0; if (window.instSetBasePrice) window.instSetBasePrice(v ? (isMobile == '1' ? v.ori : v.final) : 0); if (window.updateSoldBySku) window.updateSoldBySku(v.sku); updateBranchPopover(v); if (v && v.image_url && focusImage) focusGalleryByUrl(v.image_url); if (v) { window.dispatchEvent(new CustomEvent('pd-variant-changed', { detail: { price: v.final, originalPrice: v.ori, discount: v.disc, stock: effectiveStock, sku: v.sku, variant_id: v.id } })); const encodedHash = encodeVariantHash(v.id); if (encodedHash && window.history && window.history.replaceState) { const newHash = '#v=' + encodedHash; const newUrl = window.location.pathname + window.location.search + newHash; window.history.replaceState(null, '', newUrl); } } } let sel = readSelection(); if (autoFillMissing(sel)) sel = readSelection(); let v = findVariant(sel); if (!v) { const candidates = variants.filter(variant => { return attrOrder.every(a => { if (!sel[a]) return true; return variant.attrs[a] === sel[a]; }); }); if (candidates.length >= 1) { v = candidates[0]; attrOrder.forEach(a => sel[a] = v.attrs[a]); attrOrder.forEach(a => { const val = sel[a]; const input = document.querySelector(`.v-group[data-attr="${CSS.escape(a)}"] input[type=radio][value="${CSS.escape(val)}"]`); if (input) input.checked = true; }); } } const initSel = readSelection(); const initVar = findVariant(initSel) || variants[0] || null; if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', () => applyVariant(initVar, false)); } else { applyVariant(initVar, false); } function updateSummary(sel) { Object.entries(sel).forEach(([a, val]) => { const el = document.getElementById('vs-' + a); if (el) el.textContent = val || '-' }) } function refreshOptions(sel) { attrOrder.forEach(a => { const group = document.querySelector(`.v-group[data-attr="${CSS.escape(a)}"]`); if (!group) return; const chips = group.querySelectorAll('.v-chip'); chips.forEach(ch => { const val = ch.getAttribute('data-value'); const possible = variants.some(v => { if (v.attrs[a] !== val) return false; for (const a2 of attrOrder) { if (a2 === a) continue; if (sel[a2] && v.attrs[a2] !== sel[a2]) return false; } return true; }); const input = ch.querySelector('input[type=radio]'); const disabled = !possible; if (input) input.disabled = disabled; ch.classList.toggle('disabled', disabled); let candidateVariant = null; if (possible) { candidateVariant = variants.find(v => { if (v.attrs[a] !== val) return false; for (const a2 of attrOrder) { if (a2 === a) continue; if (sel[a2] && v.attrs[a2] !== sel[a2]) return false; } return true; }); } const outOfStock = candidateVariant ? (window.isPreorderProduct && candidateVariant.preorder_remaining !== null ? candidateVariant.preorder_remaining { const input = ch.querySelector('input[type=radio]'); ch.classList.toggle('selected', input && input.checked); }); }); } updateSummary(sel); refreshOptions(sel); document.querySelectorAll('.v-chip').forEach(chip => { const input = chip.querySelector('input[type=radio]'); if (input && input.checked) { chip.classList.add('selected'); } }); const container = document.getElementById('pd-variants'); container && container.addEventListener('change', function(ev) { const radio = ev.target.closest('input[type=radio]'); if (!radio) return; sel = readSelection(); if (autoFillMissing(sel)) sel = readSelection(); const chosen = findVariant(sel); applyVariant(chosen || null, true); updateSummary(sel); refreshOptions(sel); }); window.applyVariant = applyVariant; })(); (function cleanBrokenDescImages() { const containers = [ document.querySelector('.pd-full-desc-body'), document.querySelector('.pd-short-desc') ].filter(Boolean); containers.forEach(root => { const imgs = root.querySelectorAll('img'); imgs.forEach(img => { if (img.complete && img.naturalWidth === 0) { img.remove(); return; } img.addEventListener('error', () => { img.remove(); }, { once: true }); }); }); })(); /* ====== Scroll To Top ====== */ (function _0xi25j() { const a = document.getElementById('pd-scroll-top'); if (!a) return; function b() { if (window.matchMedia('(max-width:640px)').matches) { const d = document.querySelector('.bottom-nav'), e = document.querySelector('.pd-mobile-fab'); if (!d && !e) { setTimeout(b, 100); return } const f = d && window.getComputedStyle(d).display !== 'none' && window.getComputedStyle(d).visibility !== 'hidden', g = e && window.getComputedStyle(e).display !== 'none' && window.getComputedStyle(e).visibility !== 'hidden'; let h; if (f && g) { h = 'calc(68px + 54px + env(safe-area-inset-bottom))' } else if (g) { h = 'calc(68px + 8px + env(safe-area-inset-bottom))' } else if (f) { h = 'calc(60px + env(safe-area-inset-bottom))' } else { h = 'calc(20px + env(safe-area-inset-bottom))' } a.style.setProperty('--scroll-top-bottom', h) } else { a.style.removeProperty('--scroll-top-bottom') } } function c() { const d = window.pageYOffset || document.documentElement.scrollTop || 0, e = d > 300; a.classList.toggle('visible', e); a.setAttribute('aria-hidden', e ? 'false' : 'true'); b() } window.addEventListener('scroll', c, { passive: !0 }); window.addEventListener('resize', b, { passive: !0 }); setTimeout(b, 100); c(); a.addEventListener('click', function() { window.scrollTo({ top: 0, behavior: 'smooth' }) }) })(); /* Format stok 10+ */ function _0xk67l(n) { n = parseInt(n || 0, 10) || 0; return n > 10 ? '10+' : String(n) } /* Toggle popover stok per cabang */ (function _0xm89n() { const a = document.getElementById('pd-stock-info-btn'), b = document.getElementById('pd-stock-popover'), c = document.getElementById('pd-stock-popover-close'); if (!a || !b) return; function d() { if (window.matchMedia('(min-width: 641px)').matches) { const e = document.getElementById('pd-stock-badge'); if (!e) return; const f = e.getBoundingClientRect(), g = window.pageXOffset || document.documentElement.scrollLeft || 0, h = window.pageYOffset || document.documentElement.scrollTop || 0; b.style.left = (f.left + g - 10) + 'px'; b.style.top = (f.bottom + h + 10) + 'px' } else { b.style.left = ''; b.style.top = '' } } function e() { d(); b.classList.add('show'); a.setAttribute('aria-expanded', 'true'); b.setAttribute('aria-hidden', 'false'); document.addEventListener('click', g, { capture: true }); window.addEventListener('resize', d, { passive: true }); window.addEventListener('scroll', d, { passive: true }) } function f() { b.classList.remove('show'); a.setAttribute('aria-expanded', 'false'); b.setAttribute('aria-hidden', 'true'); document.removeEventListener('click', g, { capture: true }); window.removeEventListener('resize', d); window.removeEventListener('scroll', d) } function g(h) { if (b.contains(h.target) || a.contains(h.target)) return; f() } a.addEventListener('click', function(h) { h.preventDefault(); b.classList.contains('show') ? f() : e() }); if (c) c.addEventListener('click', f) })(); /* ===== Share Product Modal ===== */ (function() { const a = document.getElementById('pd-share-btn'), z = document.getElementById('mf-share'), b = document.getElementById('pd-share-modal-overlay'), c = document.getElementById('pd-share-close'), d = document.getElementById('pd-share-copy-url-btn'), e = document.getElementById('pd-share-url-input'); if ((!a && !z) || !b) return; const f = "https://fysio-cesartherapieroden.nl/", g = "Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Win 11 Home/Eclipse Black/3Y", h = "Rp 20.789.000"; const discountPercent = 1; let i = ''; if (discountPercent > 0) { i = `🔥 Lagi Promo Nih! Diskon ${discountPercent}%\n\n✨ ${g}\n💰 Cuma ${h} aja!\n\n🛒 Buruan cek sebelum kehabisan!\n👉 ` } else { i = `✨ Ada barang bagus nih!\n\n📦 ${g}\n💸 Harga: ${h}\n\n🛍️ Yuk, langsung cek!\n👉 ` } function j() { b.classList.add('show'); document.body.style.overflow = 'hidden' } function k() { b.classList.remove('show'); document.body.style.overflow = '' } if (a) a.addEventListener('click', j); if (z) z.addEventListener('click', j); if (c) c.addEventListener('click', k); b.addEventListener('click', function(l) { if (l.target === b) k() }); document.addEventListener('keydown', function(l) { if (l.key === 'Escape' && b.classList.contains('show')) k() }); b.addEventListener('click', function(l) { const m = l.target.closest('[data-share]'); if (!m) return; const n = m.getAttribute('data-share'), o = encodeURIComponent(f), p = encodeURIComponent(i), q = encodeURIComponent(g); let r = ''; switch (n) { case 'whatsapp': r = `https://wa.me/?text=${p}${o}`; break; case 'facebook': r = `https://www.facebook.com/sharer/sharer.php?u=${o}`; break; case 'twitter': r = `https://twitter.com/intent/tweet?text=${p}${o}`; break; case 'telegram': r = `https://t.me/share/url?url=${o}&text=${p}`; break; case 'email': r = `mailto:?subject=${encodeURIComponent('🔥 Cek Produk Keren Ini!')}&body=${p}${o}`; window.location.href = r; k(); return; case 'copy': s(); return; case 'pdf': const ps = document.querySelector('.product-single'); if (ps) { ps.setAttribute('data-print-date', new Date().toLocaleDateString('id-ID', { year: 'numeric', month: 'long', day: 'numeric' })) } k(); setTimeout(function() { window.print(); try { if (window.ga4Ecomm && window.ga4Ecomm.trackEvent) window.ga4Ecomm.trackEvent('share', { method: 'pdf_export', content_type: 'product', item_id: "1S83N0880RID" }) } catch (_) {} }, 300); return } if (r) { window.open(r, '_blank', 'noopener,noreferrer'); try { if (window.ga4Ecomm && window.ga4Ecomm.trackEvent) window.ga4Ecomm.trackEvent('share', { method: n, content_type: 'product', item_id: "1S83N0880RID" }) } catch (_) {} } }); function s() { if (!e) return; e.select(); e.setSelectionRange(0, 99999); try { if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(f).then(function() { t() }).catch(function() { document.execCommand('copy'); t() }) } else { document.execCommand('copy'); t() } } catch (u) { console.error('Failed to copy:', u) } } function t() { if (!d) return; const v = d.innerHTML; d.classList.add('copied'); d.innerHTML = 'Tersalin!'; if (window.showToast) showToast({ type: 'success', title: '✨ Link Tersalin!', message: 'Link produk berhasil disalin. Yuk bagikan ke teman!', duration: 3000 }); setTimeout(function() { d.classList.remove('copied'); d.innerHTML = v }, 2000) } if (d) d.addEventListener('click', s); if (navigator.share) { const shareHandler = function(w) { w.preventDefault(); navigator.share({ title: g, text: i + f, url: f }).catch(function(x) { console.log('Native share cancelled or failed:', x) }) }; if (a) a.addEventListener('dblclick', shareHandler); if (z) z.addEventListener('dblclick', shareHandler) } })(); /* ===== Embedding variants (server → client) ===== */ (function() { window.__PD_VARIANTS_WITH_BRANCH__ = []; })(); /* ===== Helper: update angka popover ===== */ function updateStockPopoverForVariant(v) { try { const elMeg = document.getElementById('sp-qty-meg'); const elMdf = document.getElementById('sp-qty-mdf'); const elBda = document.getElementById('sp-qty-bda'); if (typeof v?.smm === 'number' && elMeg) elMeg.textContent = formatStockLabel(Math.max(0, v.smm | 0)); if (typeof v?.smf === 'number' && elMdf) elMdf.textContent = formatStockLabel(Math.max(0, v.smf | 0)); if (typeof v?.sba === 'number' && elBda) elBda.textContent = formatStockLabel(Math.max(0, v.sba | 0)); } catch (_) {} } /* ===== applyVariant: 10+ dan update popover ===== */ (function patchApplyVariant() { if (typeof applyVariant !== 'function') return; const original = applyVariant; window.applyVariant = function(v) { original(v); try { const elStock = document.getElementById('pd-stock-badge'); if (elStock) { let txt = elStock.textContent || ''; let m = txt.match(/\d+/); if (m) { const n = parseInt(m[0] || '0', 10) || 0; elStock.textContent = (n > 0) ? ('Stok: ' + formatStockLabel(n)) : 'Habis'; } } } catch (_) {} if (window.__PD_VARIANTS_WITH_BRANCH__ && v) { const vv = window.__PD_VARIANTS_WITH_BRANCH__.find(x => x.id === v.id) || v; updateStockPopoverForVariant(vv) } }; })(); (function initCurrentVariantBranch() { const list = window.__PD_VARIANTS_WITH_BRANCH__ || []; if (!list.length) return; const hid = document.getElementById('pd-variant-id'); const vid = hid ? parseInt(hid.value || '0', 10) : 0; const current = list.find(x => x.id === vid) || list[0] || null; if (current) updateStockPopoverForVariant(current); })(); (function() { if (!window.ga4Ecomm) return; const catSegs = ["Komputer & Laptop", "Laptop", "Gaming"]; window.ga4Ecomm.viewItem({ currency: 'IDR', value: 20789000, item_id: "1S83N0880RID", item_name: "Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Win 11 Home/Eclipse Black/3Y", item_brand: "Lenovo ", item_category: catSegs && catSegs.length ? catSegs.join(' / ') : '' }); })(); (function patchApplyVariantFocus() { if (typeof applyVariant !== 'function') return; const original = applyVariant; window.applyVariant = function(v, focusImage = true) { original(v, focusImage); if (focusImage && v && v.image_url) { _0xau1v(v.image_url); } }; })(); (function() { var soldMap = []; var soldTotalLabel = "Terjual 2"; function formatSoldLabel(qty) { if (qty >= 1000000) { var v = Math.floor((qty / 100000)) / 10; return 'Terjual ' + (String(v).replace('.', ',')) + 'jt+'; } if (qty >= 1000) { var v2 = Math.floor((qty / 100)) / 10; return 'Terjual ' + (String(v2).replace('.', ',')) + 'rb+'; } if (qty >= 100) { var v2 = Math.floor((qty / 100)) * 100; return 'Terjual ' + (String(v2).replace('.', ',')) + '+'; } if (qty >= 10) { var v2 = Math.floor((qty / 10)) * 10; return 'Terjual ' + (String(v2).replace('.', ',')) + '+'; } return 'Terjual ' + (qty.toLocaleString('id-ID')); } function updateSoldLabel(labelText) { var el = document.querySelector('#pd-sold-inline, [data-role="sold-chip"]'); if (el) el.textContent = labelText; } window.updateSoldBySku = function(sku) { if (!sku || typeof sku !== 'string') { updateSoldLabel(soldTotalLabel); return; } var qty = soldMap[sku] || 0; updateSoldLabel(formatSoldLabel(qty)); }; updateSoldLabel(soldTotalLabel); })(); (function() { const h = document.getElementById('pd-sticky-header'); if (!h) return; const p = document.getElementById('pd-price-anchor'); const ac = document.getElementById('pd-sticky-add-cart'); const by = document.getElementById('pd-sticky-buy'); let lt = window.scrollY; let tk = false; function u() { if (!p) return; const r = p.getBoundingClientRect(); const s = window.scrollY; if (r.top 0) { pd.variant_id = variantId } if (variantSummary) { pd.variant_summary = variantSummary } return pd } const ch = document.getElementById('pd-sticky-chat'); if (ch) { ch.addEventListener('click', function(e) { e.preventDefault(); if (!window.plazaChat) { console.warn('Chat widget not loaded'); return } window.plazaChat.attachProduct(getChatProductData()); window.plazaChat.openWidget() }) } const dch = document.getElementById('btn-chat-icon'); if (dch) { dch.addEventListener('click', function(e) { e.preventDefault(); if (!window.plazaChat) { console.warn('Chat widget not loaded'); return } window.plazaChat.attachProduct(getChatProductData()); window.plazaChat.openWidget() }) } const mch = document.getElementById('mf-chat'); if (mch) { mch.addEventListener('click', function(e) { e.preventDefault(); if (!window.plazaChat) { console.warn('Chat widget not loaded'); return } window.plazaChat.attachProduct(getChatProductData()); window.plazaChat.openWidget() }) } window.addEventListener('pd-variant-changed', function(e) { const d = e.detail || {}; if (d.price !== undefined) { const sp = document.getElementById('pd-sticky-price'); if (sp) { sp.textContent = formatRupiah(d.price) } } if (d.originalPrice !== undefined && d.originalPrice > d.price) { const so = document.getElementById('pd-sticky-price-original'); if (so) { so.textContent = formatRupiah(d.originalPrice); so.style.display = '' } } else { const so = document.getElementById('pd-sticky-price-original'); if (so) { so.style.display = 'none' } } if (d.discount !== undefined && d.discount > 0) { const sd = document.getElementById('pd-sticky-discount'); if (sd) { sd.textContent = '-' + d.discount + '%'; sd.style.display = '' } } else { const sd = document.getElementById('pd-sticky-discount'); if (sd) { sd.style.display = 'none' } } const hs = d.stock > 0; if (ac) { ac.disabled = !hs } if (by) { by.disabled = !hs } }); function formatRupiah(n) { return 'Rp' + Math.floor(n).toLocaleString('id-ID') } })(); (function() { const t = document.getElementById('pdv-toggle-btn'); const v = document.getElementById('pd-voucher-section'); if (t && v) { const h = v.querySelectorAll('.pdv-min-hidden'); const n = h.length; t.addEventListener('click', function() { const e = t.classList.toggle('expanded'); h.forEach(function(i) { if (e) { i.classList.remove('pdv-min-hidden') } else { i.classList.add('pdv-min-hidden') } }); t.textContent = e ? 'Tutup' : '+' + n }) } const m = document.getElementById('voucher-detail-modal'); const mc = document.getElementById('voucher-modal-close'); const ma = document.getElementById('voucher-modal-cancel'); const mcp = document.getElementById('voucher-modal-copy'); if (m) { const bb = document.querySelectorAll('.pdv-badge-btn'); bb.forEach(function(btn) { btn.addEventListener('click', function() { if (btn.disabled) return; const c = btn.getAttribute('data-voucher-code'); const nm = btn.getAttribute('data-voucher-name'); const dl = btn.getAttribute('data-discount-label'); const bl = btn.getAttribute('data-badge-label'); const mp = parseInt(btn.getAttribute('data-min-purchase')); const md = parseInt(btn.getAttribute('data-max-discount')); const vu = btn.getAttribute('data-valid-until'); document.getElementById('voucher-modal-badge').innerHTML = '' + dl + '' + bl + ''; document.getElementById('voucher-modal-code').textContent = c; document.getElementById('voucher-modal-name').textContent = nm; const me = document.getElementById('voucher-modal-min'); if (mp > 0) { me.style.display = ''; document.getElementById('voucher-modal-min-val').textContent = fr(mp) } else { me.style.display = 'none' } const xe = document.getElementById('voucher-modal-max'); if (md > 0) { xe.style.display = ''; document.getElementById('voucher-modal-max-val').textContent = fr(md) } else { xe.style.display = 'none' } if (vu) { const d = new Date(vu); const ft = d.toLocaleDateString('id-ID', { day: 'numeric', month: 'long', year: 'numeric', hour: '2-digit', minute: '2-digit' }); document.getElementById('voucher-modal-valid-val').textContent = ft } mcp.setAttribute('data-code', c); m.classList.add('show'); document.body.style.overflow = 'hidden' }) }); function cm() { m.classList.remove('show'); document.body.style.overflow = '' } if (mc) mc.addEventListener('click', cm); if (ma) ma.addEventListener('click', cm); m.addEventListener('click', function(e) { if (e.target === m) cm() }); if (mcp) { mcp.addEventListener('click', function() { const c = mcp.getAttribute('data-code'); if (!c) return; if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(c).then(function() { smc() }).catch(function(err) { fc(c) }) } else { fc(c) } }) } } const b = document.querySelectorAll('.pdv-min-copy'); b.forEach(function(btn) { btn.addEventListener('click', function() { if (btn.disabled) return; const code = btn.getAttribute('data-code'); if (!code) return; if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(code).then(function() { sc(btn) }).catch(function(err) { fc(code, btn) }) } else { fc(code, btn) } }) }); function fc(text, btn) { const tx = document.createElement('textarea'); tx.value = text; tx.style.position = 'fixed'; tx.style.opacity = '0'; document.body.appendChild(tx); tx.select(); try { document.execCommand('copy'); if (btn) sc(btn); else smc() } catch (err) {} document.body.removeChild(tx) } function sc(btn) { const o = btn.textContent; btn.classList.add('copied'); btn.textContent = '✓ Tersalin'; setTimeout(function() { btn.classList.remove('copied'); btn.textContent = o }, 2000) } function smc() { const o = mcp.textContent; mcp.textContent = '✓ Kode Tersalin'; mcp.style.background = '#22c55e'; setTimeout(function() { mcp.textContent = o; mcp.style.background = '' }, 2000) } function fr(a) { return 'Rp' + Math.floor(a).toLocaleString('id-ID') } })();