LOGIN DAFTAR
  • POKECUAN88 ⚡️ BASIS BANDAR SLOT GACOR & SLOT GACOR PALING DI CARI SAAT INI

    POKECUAN88 menghadirkan pengalaman bermain slot online yang dirancang dengan sistem yang ringan dan mudah digunakan untuk berbagai jenis perangkat. Dengan tampilan modern dan navigasi yang sederhana, pengguna dapat menikmati permainan dengan lebih nyaman setiap hari.

    Platform ini menyediakan berbagai pilihan slot populer yang dapat diakses dengan cepat tanpa proses yang rumit. Sistem yang responsif membantu pengguna menemukan permainan favorit dengan lebih praktis sehingga pengalaman bermain terasa lebih lancar dan menyenangkan.

    POKECUAN88 juga menawarkan akses permainan yang stabil dengan desain yang user-friendly sehingga cocok digunakan oleh pemain baru maupun pengguna yang sudah terbiasa bermain slot online. Semua fitur disusun agar aktivitas bermain menjadi lebih mudah dipahami.

    Dengan konsep platform yang fleksibel dan tampilan yang nyaman digunakan, pengguna dapat menikmati berbagai permainan slot kapan saja melalui desktop maupun smartphone tanpa hambatan berarti.

    Ringkasan FAQ:
    POKECUAN88 dapat diakses melalui perangkat mobile maupun desktop dengan sistem yang ringan dan tampilan yang responsif. Pengguna dapat menikmati berbagai pilihan permainan slot dengan lebih praktis setiap hari.

    Platform ini menyediakan navigasi yang mudah dipahami sehingga pengguna dapat lebih nyaman saat menjelajahi permainan yang tersedia. Beragam pilihan slot populer juga dapat dimainkan dengan akses yang cepat dan stabil.

    Dengan desain modern, akses yang mudah digunakan, dan pilihan permainan yang cukup lengkap, POKECUAN88 menjadi pilihan bagi pengguna yang mencari pengalaman bermain slot yang lebih nyaman dan fleksibel.

POKECUAN88 ⚡️ BASIS BANDAR SLOT GACOR & SLOT GACOR PALING DI CARI SAAT INI

Translation missing: en.products.general.regular_price Translation missing: en.products.general.sale_price
Rp 5.000

Rp 10.000

(90%)
Barang dikirim pada

POKECUAN88 adalah tempat terbaik untuk menemukan slot gacor yang paling dicari saat ini! Dengan berbagai pilihan permainan yang menarik dan peluang menang yang tinggi.


logo-daftar

SEKARANG WAKTUNYA DAFTAR AKUN BARU DI POKECUAN88!

Ciptakan Kemenanganmu Dengan Bantuan RTP LIVE Terpercaya

SEO KDJ

POKECUAN88

Wishlist

customize your flower board

Complete Your Order

recipient delivery address

Share the delivery address to send your heartfelt blooms straight to their door.

how you want to input your address

add-ons

No Add-Ons

item added to your cart
POKECUAN88 ⚡️ BASIS BANDAR SLOT GACOR & SLOT GACOR PALING DI CARI SAAT INI
Delete Rp 5.000

detail akses pengguna

lokasi akses Indonesia

terakhir login update otomatis

waktu aktif 24 Jam | Akses Stabil

informasi akun

ID pengguna User Terdaftar

jalur akses Login melalui link utama atau gunakan link alternatif resmi untuk memastikan koneksi tetap lancar tanpa hambatan.

status koneksi Online & Terhubung

sistem platform Optimasi Multi Device

fitur utama Monitoring RTP & Akses Cepat

add-ons (0)

  • POKECUAN88 adalah tempat terbaik untuk menemukan slot gacor yang paling dicari saat ini! Dengan berbagai pilihan permainan yang menarik dan peluang menang yang tinggi.

Pertanyaan yang Sering Ditanyakan

POKECUAN88 adalah platform slot online yang menyediakan berbagai pilihan permainan slot populer dengan tampilan modern dan akses yang mudah digunakan setiap hari.

POKECUAN88 menawarkan pengalaman bermain yang nyaman dengan sistem yang stabil, pilihan game lengkap, serta tampilan yang ringan digunakan melalui berbagai perangkat.

Ya, tersedia berbagai pilihan slot populer dengan variasi permainan menarik yang dapat dinikmati kapan saja melalui desktop maupun smartphone.

Karena POKECUAN88 memiliki akses permainan yang cepat, navigasi yang sederhana, serta pengalaman bermain yang terasa lebih nyaman setiap hari.

Tentu saja, platform ini memiliki tampilan responsif sehingga permainan dapat diakses dengan lancar melalui smartphone tanpa hambatan berarti.

Keranjang Belanja
.getTime() + (exMins*60*1000)); var expires = "expires="+d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; } function getCookie(cname) { let name = cname + "="; let decodedCookie = decodeURIComponent(document.cookie); let ca = decodedCookie.split(';'); for(let i = 0; i ${dt === today ? `Today${dt < 10 ? '0' + dt : dt}` : `${day}${dt < 10 ? '0' + dt : dt}` } ` htmlDate.push(html) } const htmlTime = [] for(var i = 0;i < time.length;i++) { const timeText = time[i].text const timeTime = time[i].time const timeEnabled = time[i].isEnabled var html = ` ` htmlTime.push(html) } const deliveryDate = document.getElementById("deliveryDate"); if(deliveryDate) { deliveryDate.insertAdjacentHTML("afterbegin", htmlDate.join('')) $("#deliveryTime").html(htmlTime) if(productType !== '') { console.log("clarity event " + productType + ' calendaring') window.clarity("event", `${productType} calendaringSchedule`) // window.clarity("set", productType, `calendaringSchedule - ${productDate}`) } } } async function getProvince(city) { let { data: { province } } = await getFetch(`${host}/api/shipping/address/province?city=${city}`); console.log(province, 'province') $("#province").val(province) } async function renderAddress() { let current if(getCookie("location_delivery")){ current = getCookie("location_delivery").charAt(0).toUpperCase() + getCookie("location_delivery").slice(1) } let address = await getFetch(`${host}/api/shipping/address?domain=${shop}&productId=8414949422247`); console.log(address) const data = address?.data?.city const htmlAddress = [] const grouping = [] for(let i = 0;i < data?.length;i++) { if(data[i]){ if(data[i]?.group) { grouping.push(data[i].group) } const price = rupiah.format(data[i]?.rate) let promo = '(Promo Free Delivery)' if(data[i]?.name === 'Jakarta - PickUp ASHTA'){ promo = '(at SCBD, Ashta)' } else if(data[i]?.name === 'Jakarta - PickUp ITC'){ promo = '(at Kuningan, ITC Kuningan)' } else if(data[i]?.name === 'BSD - PickUp'){ promo = '(at Goldfinch Gading Serpong)' } else if(data[i]?.name === 'Kota Lainnya'){ promo = '' } htmlAddress.push(``) } } const deliveryCity = document.getElementById("cities"); if(deliveryCity) { deliveryCity.insertAdjacentHTML("beforeend", htmlAddress.join('')) if(!isIOS) { $(deliveryCity).select2(); } } } async function renderZip(v, v2, v3) { const deliveryZip = document.getElementById("zip"); if(v === '') { return } let dataZip = await getFetch(`${host}/api/shipping/address/zip?city=${v}&city2=${v2}&city3=${v3}`); let zip = dataZip?.data?.zip console.log(zip) let htmlZip = [] for(let i = 0; i < zip?.length;i++) { htmlZip.push(``) } deliveryZip.insertAdjacentHTML("beforeend", htmlZip.join('')) } renderDate() renderAddress() let rupiah = new Intl.NumberFormat('id-ID', { style: 'currency', currency: 'IDR', maximumFractionDigits: 0, minimumFractionDigits: 0 }); async function insertCard(data) { const response = await fetch(`${host}/api/card/new`, { method: "POST", headers: { 'Content-Type': 'application/json', }, body: data }) const result = await response.json() let rowIndex = result?.data?.tableRange.split("Outerbloom!A1:J")[1] $("#greetingCard").attr("data-index", rowIndex) return result } async function updateCard(data){ const rowIndex = $("#greetingCard").data("index") const response = await fetch(`${host}/api/card/update?rowIndex=${rowIndex}`, { method: "PUT", headers: { 'Content-Type': 'application/json', }, body: data }) return response } function bytesToSize(bytes) { var sizes = ['b', 'kb', 'mb', 'gb', 'tb', 'p']; for (var i = 0; i < sizes.length; i++) { if (bytes <= 1024) { return bytes + ' ' + sizes[i]; } else { bytes = parseFloat(bytes / 1024).toFixed(2) } } return bytes + ' P'; } async function uploadMedia(uri, type) { nameq = $("#properties-nama-penerima").val() dear = $("#properties-kartu-nama-penerima").val() card = $("[data-properties=ucapan]").val() sender = $("#properties-kartu-nama-pengirim").val() photo = $("#properties-photo").val() video = $("#properties-video").val() status = "Product" const name = qrID let formData = new FormData(); formData.append("file", uri); const response = await fetch(`${host}/api/upload?name=${name}&type=${type}&r=${randomString(3, '0123456789')}`, { method: "POST", body: formData }) const result = await response.json(); if(result) { const url = result.url if(type === 'image/jpeg') { $("#properties-photo").val(url) $(".preview-image").show() $(".remove-image").show() photo = url } else { $("#properties-video").val(url) $("#label-input-video span").text("Change File") $(".case-qrcode-preview p").text("Scan here for a secret message") $(".remove-media").show() $("#product-top #product-meta .case-video-preview p").html(`${uri.name} (${bytesToSize(uri.size)}) is uploaded`) $("[for=input-video]").hide() video = url } $(".case-video-preview").show() $(".steps-card-preview").removeClass("loading") // updateCard(nameq, dear, card, sender, photo, video, status) $(".nextBtn").attr("disabled", false) } } function randomString(length, chars) { var result = ''; for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))]; return result; } function getNoteCity(fulldate) { const h_1 = new Date(new Date().setDate(new Date().getDate() + 1)) const weekday = ["Min","Sen","Sel","Rab","Kam","Jum","Sab"]; const monthly = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]; const d = new Date(h_1); const day = weekday[d.getDay()]; const dt = d.getDate(); const mt = monthly[d.getMonth()]; const yr = d.getFullYear(); const p = $("#cities").parent(".form-group") } function disabledSameDay() { let btnFirst = $("#deliveryDate").find("button:first-child") let getDay = new Date().getDay(); if(getDay == 1 || getDay == 2 || getDay == 3 || getDay == 4 || getDay == 5){ if(hour >= 14.00){ btnFirst.attr("disabled", true) } } else if(getDay == 6){ if(hour >= 16.00){ btnFirst.attr("disabled", true) } } else if(getDay == 0){ if(hour >= 16.00){ btnFirst.attr("disabled", true) } } } function disabledays(date) { let ymd = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(); //if u have to disable a list of day let removeDays removeDays = ["2025-2-13", "2025-2-14"]; if ($.inArray(ymd, removeDays) >= 0) { return [false]; } else { let day = date.getDay(); if(day == 0 && date.getDate() == 13 && date.getMonth() == 1){ return [(day == 0), '']; } if(day == 0){ return [(day == 0), '']; } return [(day != 0), '']; } } /* Indonesian initialisation for the jQuery UI date picker plugin. */ /* Written by Deden Fathurahman ([email protected]). */ ( function( factory ) { if ( typeof define === "function" && define.amd ) { // AMD. Register as an anonymous module. define( [ "../widgets/datepicker" ], factory ); } else { // Browser globals factory( jQuery.datepicker ); } }( function( datepicker ) { datepicker.regional.id = { closeText: "Tutup", prevText: "<mundur", nextText: "maju>", currentText: "Today", monthNames: [ "January","February","March","April","May","Juny", "July","August","September","October","November","December" ], monthNamesShort: [ "Jan","Feb","Mar","Apr","May","Jun", "Jul","Agu","Sep","Oct","Nov","Dec" ], dayNames: [ "Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu" ], dayNamesShort: [ "Sun","Mon","Tue","Wed","Thu","Fri","Sat" ], dayNamesMin: [ "Mg","Sn","Sl","Rb","Km","jm","Sb" ], weekHeader: "Mg", dateFormat: "D, dd M", firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: "" }; datepicker.setDefaults( datepicker.regional.id ); return datepicker.regional.id; } ) ); function loadPopup() { $("#backgroundPopup").fadeIn("slow"); $(".purchasePopup:not(.purchasePopupSpotify)").fadeIn("slow"); const firstSection = $(".purchasePopup:not(.purchasePopupSpotify) .sectionPurchase").first() if(firstSection.hasClass("purchasePersonalize")) { if(productType !== '') { console.log("clarity event " + productType + ' personalize') window.clarity("event", `${productType} cardPersonalization`) // window.clarity("set", productType, `cardPersonalization - ${productDate}`) } } else if (firstSection.hasClass("sectionPurchaseBoard")) { console.log("clarity event " + productType + ' personalizeBoard') window.clarity("event", `${productType} personalizeBoard`) // window.clarity("set", productType, `personalizeBoard - ${productDate}`) } firstSection.removeClass("hide") // Auto-trigger addon loading when addon section becomes visible setTimeout(function() { const addonSection = $(".purchaseAddon") if(addonSection.length > 0 && !addonSection.hasClass("hide")) { if($("#itemAddons .row").children().length === 0 || $("#itemAddons .row").text().includes("No Item available")) { $("[data-addon=upsell-all]").trigger("click") } } }, 200) } function disablePopup() { $("#backgroundPopup").fadeOut("slow"); $(".purchasePopup").fadeOut("slow"); $("#popupCart").fadeOut("slow"); } function scrollTo(parent, div, dur) { $(parent).animate({ scrollTop: $(div).offset().top }, dur); } function loadPopupPersonalize() { const div = "#purchaseProduct" const p = "html, body, .product-meta" $("p.error").remove() loadItemOccasion($("[data-occassion]").eq(0), "greeting-card-all") const isCity = $("#cities[required]") const isDate = $("#propDeliveryDate[required]") const isTime = $("#propDeliveryTime[required]") // loadPopup() if(isCity.val() !== '' && isDate.val() !== '' && isTime.val() !== '') { loadPopup() } if(isCity.val() == '') { isCity.parent(".row").append("

Choose delivery city

") scrollTo(p, div, 500) } if(isDate.val() == '') { isDate.parents(".row").append("

Choose delivery date

") scrollTo(p, div, 500) } if(isTime.val() == '') { isTime.parents(".row").append("

Choose delivery time

") scrollTo(p, div, 500) } } function quantityCounter() { $(document).on("click", ".item-card.selected .q_up", function () { var C = $(this).attr("data-id"), S = parseInt( $(this) .siblings(".quantity-cart-" + C) .val() ) + 1; $(this).attr("data-quantity", S), $(this) .siblings(".quantity-cart-" + C) .val(S); }), $(document).on("click", ".item-card.selected .q_down", function () { var C = $(this).attr("data-id"), S = parseInt( $(this) .siblings(".quantity-cart-" + C) .val() ); 0 < S && $(this).attr("data-quantity", S - 1), 0 < S && $(this) .siblings(".quantity-cart-" + C) .val(S - 1); }); } quantityCounter() const itemAddon = $(".item-card").length const nofree = $(".nofree").length const upsell = '' if(nofree === itemAddon) { // $("#itemAddons").html("

No Items available

") } $("#itemAddons .item-card").each(function(e){ $("#itemAddons").attr("data-length", e) }) $("[data-addon]").click(function(){ const t = $(this) const data = t.data("addon") $("[data-addon]").removeClass("selected") t.addClass("selected") $.get(`https://outerbloom.com/collections/${data}/products.json`, function(data, status){ const products = data.products const html = [] for(let i = 0; i < products.length; i++) { const id = products[i].id const variantId = products[i].variants[0].id const img = products[i].images[0].src let img2 = img.split('.jpg')[0] const title = products[i].title const price = products[i].variants[0].price const tags = products[i].tags const qty = products[i].variants[0].available let type_upsell = '' if(tags.includes('upsell-item-standing')) { type_upsell = 'standing' } console.log(type_upsell) if(type_upsell !== '') { const body = `
${title}
${title}

${price < 1 ? 'FREE' : rupiah.format(price)}

` html.push(body) } } $("#itemAddons .row").html(html.length === 0 ? '

No Item available

' : html) $("#itemAddons").attr("data-length", products.length) // $('#itemAddons')[0].swiper.update(); }); }) async function isAddon(){ let ids = [] $("#itemAddons .item-card.selected").each(function(i, e){ const id = $(this).data("id") ids.push(id) }) console.log(ids) return ids } $("#itemAddons").delegate(".item-card > div:not(.card-qty)", "click", async function(){ const t = $(this).parent() const id = t.data("id") const btn = t.parents(".purchaseAddon").find(".next-purchase-button") t.toggleClass("selected"); //$(this).next("input").toggleAttr('name', 'id[]'); if (t.hasClass('selected')) { t.find("input").val(1) t.find("input").attr('name', 'id[]'); } else { t.find("input").val(0) t.find("input").removeAttr('name'); } $("#properties-addons").val(addons) const is = await isAddon() if(is.length === 0) { btn.text("continue without add-ons") return } if(is.includes(8835692069079)) { btn.text("personalize acrylic frame") } else { btn.text("Continue") } }) async function myAddon(data) { const c = $(".addonsPurchase .addons") let items = [] const spotifyAddons = $(".spotifyAddons").find("[data-index]") // if(spotifyAddons.length > 0) { // $(spotifyAddons).each(function(i, e){ // const spotifyLink = $(this).find(".spotifyLink").val() // const spotifySong = $(this).find(".spotifySong").val() // const spotifyArtist = $(this).find(".spotifyArtist").val() // const spotifyFotoAddon = $(this).find(".resultPhotoSpotify").val() // if(spotifyLink !== '') { // spotifyAddon = `
//
// //
//
// [US] Outerbloom Acrylic Frame 4R //
//
// Rp 99.000 //
//
//
//
//
//

// spotify link // ${spotifyLink} //

//

// uploaded photo // ${spotifyFotoAddon} //

//

// song / playlist name // ${spotifySong} //

//

// artist name // ${spotifyArtist} //

//
//
` // items.push(spotifyAddon) // } // }) // } for(let i = 0; i < data.length; i++) { if(data[i].title !== '[US] Outerbloom Acrylic Frame 4R' ) { const img = data[i].image const title = data[i].title const qty = data[i].qty const price = data[i].price const total = Number(qty) * Number(price) let addons = `
${title}
${rupiah.format(price)} ${data[i].title == '[US] Outerbloom Acrylic Frame 4R' ? '' : `x${qty}`}
${rupiah.format(total)}
` items.push(addons) } } c.html(items) const parent = $(".purchaseAddon") const next = parent.next(".sectionPurchase") parent.addClass("hide") next.removeClass("hide") // if(items2.length === 0) return $("#popupCart").addClass("no-addon-cart") // $(".itemAddonCart").find("h4").text(`add-ons (${items2.length})`) } async function listAddon() { const data = $("#itemAddons").find(".selected") let ids = [] $(data).each(function(){ const id = $(this).data("variant") const image = $(this).find(".card-image img").attr("src") const title = $(this).find(".card-meta h5").text() const qty = $(this).find(".card-qty input").val() const price = $(this).find(".card-qty input").data("price") ids.push({ id: Number(id), image, title, qty, price }) }) myAddon(ids) } async function customSpotify(idx, length, type){ let isCard = false let p = $(".purchasePopupSpotify") const preLink = $(".spotifyLinkFirst").val() $("[data-index]").hide() p.find(".headerPurchase h3").text(`personalize spotify photo print${length > 1 ? ` - ${idx}` : ''}`) p.find(".regulerAddons, .purchase-button").hide() p.find(".spotifyAddons").show() const data = await trackUrl(preLink) const html = `

upload photo

Add your Spotify link here

${data?.song ? `` : ''}
${data?.artist ? `` : ''}
${data?.song ? `

${data?.song}

` : '

'}${data?.artist ? `

${data?.artist}

` : '

'}

spotify outerbloom
` // console.log(html) $(".spotifyAddons").append(html) $(`[data-index=${idx}]`).show() if (preLink !== '') { $(".btn-action .btn").attr("disabled", false) } else { $(".btn-action .btn").attr("disabled", true) } return html } $(".spotifyLinkFirst").keyup(async function(){ const v = $(this).val() if(v.includes('spotify:user:spotify')) { const correct = v.split('user:spotify:')[1] console.log(correct, 'BNER') $(this).val(correct) return } if(v.includes("spotify:") || v.includes("https://open.spotify.com/")){ const data = await trackUrl(v) if(!data || !data.status) { $(this).parent().addClass("error") // $(this).parent().append(`

Make sure you copy the complete and correct link from Spotify. Ex: https://open.spotify.com/track/0C3xZJueyBvvMSsl0cETA6

`) $("#personalizeBtnSpotify .btn").attr("disabled", true) return } $(this).parent().removeClass("error") // $(this).parent().remove("txt-error") $("#personalizeBtnSpotify .btn").attr("disabled", false) } else { $("#personalizeBtnSpotify .btn").attr("disabled", true) } }) $(".purchaseAddon").delegate(".next-addon", "click", function(){ const parent = $(this).parents(".purchaseAddon") const next = parent.next(".sectionPurchase") if(next.hasClass("purchaseAddress")) { if(productType !== '') { console.log("clarity event " + productType + ' purchaseDelivery') window.clarity("event", `${productType} purchaseDelivery`) // window.clarity("set", productType, `purchaseDelivery - ${productDate}`) } } const data = $("#itemAddons").find(".selected") const length = $(".quantity-cart-46067682607319").val() const checked = data.length; if(checked > 0) { if(length > 0) { $(".purchaseAddon").addClass("purchaseAddonSpotify") customSpotify(1, length, 'addon') } else { listAddon() } } else { parent.addClass("hide") next.removeClass("hide") } }) $("#personalizeBtnSpotify .btn").click(async function(){ const isCity = $("#cities[required]") const isDate = $("#propDeliveryDate[required]") if((isDate.length > 0 && isCity.length > 0) && (isCity.val() === '' || isDate.val() === '')) { alert('Please choose Delivery City & Delivery Date') return } const data = await customSpotify(1, 1, 'product') if(data) { $("#backgroundPopup").fadeIn("slow"); $(".purchasePopupSpotify").fadeIn("slow"); if(productType !== '') { console.log("clarity event " + productType + ' spotify') window.clarity("event", `${productType} spotify`) // window.clarity("set", productType, `purchaseDelivery - ${productDate}`) } } }) function formatBytes(bytes, decimals = 2) { if (!+bytes) return '0 Bytes' const k = 1024 const dm = decimals < 0 ? 0 : decimals const sizes = ['B', 'KB', 'MB'] const i = Math.floor(Math.log(bytes) / Math.log(k)) return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}` } async function trackUrl(link){ try { let trackId = link.split('/').pop().split('?')[0]; let type = '' if(link.includes("spotify:")) { const uri = link.split('spotify:')[1] trackId = uri.split(':')[1] type = uri.split(':')[0] + 's' } else { if(link.match('track')){ type = 'tracks' } else if(link.match('playlist')) { type = 'playlists' } else if(link.match('artist')) { type = 'artists' } else if(link.match('album')) { type = 'albums' } } console.log(`${host}/api/spotify/${type}/${trackId}`) const data = await getFetch(`${host}/api/spotify/${type}/${trackId}`) console.log(data, 'DATA') const song = data?.data?.name const artist = data?.data?.artist return { song, artist, type, trackId, status: data.status } } catch(err) { console.log(err) } } $(".spotifyAddons").delegate(".uploadPhotoSpotify", "change", async function(){ const parent = $(this).parents("[data-index]") const preview = parent.find(".previewImage") const file = $(this)[0].files[0]; if (file) { const reader = new FileReader(); reader.onload = async function(e) { parent.find(".uploadResult label").hide() parent.find(".uploadedResult").remove() parent.find(".uploadResult").append(`

${file.name} (${formatBytes(file.size)}) is uploaded

Change
`) parent.find(".frameImageUploaded svg").hide() parent.find(".frameImage").addClass("uploaded") preview.attr("src", e.target.result); preview.show(); let formData = new FormData(); formData.append("file", file); const response = await fetch(`${host}/api/upload?name=${file.name}&type=image/jpeg&r=${Date.parse(new Date)}`, { method: "POST", body: formData }) const result = await response.json(); if(result){ parent.find(".resultPhotoSpotify").val(result.url) } } reader.readAsDataURL(file); } else { preview.hide(); } }); $(".spotifyAddons").delegate(".uploadResult", "click", function(){ $(this).next("input[type=file]").trigger("click") }) $(".spotifyAddons").delegate(".changeUpload", "click", function(){ $(this).parents("input[type=file]").trigger("click") }) $(".spotifyAddons").delegate(".removeUpload", "click", function(){ const parent = $(this).parents("[data-index]") parent.find(".uploadPhotoSpotify").val("") parent.find(".uploadResult label").show() parent.find(".uploadedResult").remove() parent.find(".frameImageUploaded svg").show() parent.find(".previewImage").hide() parent.find(".frameImage").removeClass("uploaded") }) $(".spotifyAddons").delegate("label.checkbox", "click", function(){ const parent = $(this).parents("[data-index]") parent.toggleClass("checked") }) $(".spotifyAddons").delegate(".spotifyLink", "change", async function(){ const parent = $(this).parents("[data-index]") const link = $(this).val() const data = await trackUrl(link) console.log(data) if(data.song) { parent.find(".spotifySong").val(data.song) parent.find(".spotifyData").find("h3").text(data.song) } if(data.artist) { parent.find(".spotifyArtist").val(data.artist) parent.find(".spotifyData").find("p").text(data.artist) } parent.find(".spotifyCode img").attr("src", `https://scannables.scdn.co/uri/plain/png/ff0000/black/640/spotify:${data.type.slice(0, -1)}:${data.trackId}`) // https://scannables.scdn.co/uri/plain/png/ff0000/black/640/spotify:track:1er51HCEBhIAtoEemKuC3M if (data.status === true) { parent.find(".btn-action .btn").attr("disabled", false) } else { parent.find(".btn-action .btn").attr("disabled", true) } }) $(".spotifyAddons").delegate(".spotifySong", "keyup", async function(){ const parent = $(this).parents("[data-index]") const v = $(this).val() parent.find(".spotifyData h3").text(v) }) $(".spotifyAddons").delegate(".spotifyArtist", "keyup", async function(){ const parent = $(this).parents("[data-index]") const v = $(this).val() parent.find(".spotifyData p").text(v) }) $(".spotifyAddons").delegate(".btn-action .btn:not(.no-addon)", "click", async function(){ const parent = $(this).parents("[data-index]") const length = parent.data("length") const index = parent.data("index") const indexNext = Number(index) + 1 customSpotify(indexNext, length, 'addon') }) $(".spotifyAddons").delegate(".btn-action .btn.finished", "click", async function(){ const parent = $(this).parents(".purchaseAddon") const next = parent.next(".sectionPurchase") parent.addClass("hide") next.removeClass("hide") next.find(".purchase-button").show() listAddon() }) $(".spotifyAddons").delegate(".back-spotify", "click", async function(){ const t = $(this).parents("[data-index]") const parent = $(this).parents(".sectionPurchase") const current = t.data("index") const prevCurrent = Number(current) - 1 if(current == 1) { parent.removeClass("purchaseAddonSpotify") parent.find(".purchase-button").show() parent.find(".headerPurchase h3").text("Make It More Special with Add-Ons!") $(".spotifyAddons").empty() $(".regulerAddons").show() return } t.hide() t.prev("[data-index]").show() t.remove() parent.find(".headerPurchase h3").text(`personalize spotify photo print - ${prevCurrent}`) }) $("#personalizeBtn .btn").click(async function() { loadPopupPersonalize() }); $(".sectionPurchaseSpotify").delegate(".btn[data-type=card]", "click", function(){ $(".sectionPurchaseSpotify").hide() loadPopupPersonalize() }) $(".close-purchase-popup").click(function() { disablePopup(); }); $("#backgroundPopup").click(function() { // disablePopup(); }); $("#popupCart .close-purchase-popup").click(function() { location.reload() }); $('#popupCart').on('hide.bs.modal', function (e) { location.reload() }) $(".next-card").click(function(){ const parent = $(this).parents(".sectionPurchase") const next = parent.next(".sectionPurchase") parent.addClass("hide") next.removeClass("hide") }) $(".back-purchase-button").click(function(){ const parent = $(this).parents(".sectionPurchase") const prev = parent.prev(".sectionPurchase") parent.addClass("hide") prev.removeClass("hide") }) $(document).keypress(function(e) { if (e.keyCode == 27 && popupStatus == 1) { disablePopup(); } }); const parentImg = $(".case-img-preview") const parentVid = $(".case-video-preview") function readURL(input) { if (input.files && input.files[0]) { let reader = new FileReader(); let type = 'image/jpeg' const size = input.files[0].size if(input.files[0].type.match('video/')){ type = 'video/mp4' if(size > 15728640) { alert('File size exceeds maximum limit 15 MB') return } } else { if(size > 5242880) { alert('File size exceeds maximum limit 5 MB') return } } reader.onload = function (e) { $(".nextBtn").attr("disabled", true) if(type === 'image/jpeg') { $('.placeholder-image').hide(); $('.preview-image').show() $('.preview-image').attr('src', e.target.result); } else { // parentVid.find(".ajax-loader").show(); $(".steps-card-preview").addClass("loading") } } reader.readAsDataURL(input.files[0]); } } async function readURLPapan(input) { if (input.files && input.files[0]) { let reader = new FileReader(); reader.onload = function (e) { $('.btn-upload-papan').siblings('label').hide(); $('.btn-upload-papan img').attr('src', e.target.result); $('.btn-upload-papan img').show(); $('.svgLogoPapan').hide(); } const type = 'image/jpeg' const name = `logo-8414949422247-${Date.parse(new Date())}` let formData = new FormData(); formData.append("file", input.files[0]); const response = await fetch(`${host}/api/upload?name=${name}&type=${type}&r=${randomString(3, '0123456789')}`, { method: "POST", body: formData }) const result = await response.json(); if(result) { const url = result.url $("[data-properties=papan-logo]").val(url) } reader.readAsDataURL(input.files[0]); } } async function readURLAddress(input) { console.log(input, 'readURLAddress') if (input.files && input.files[0]) { let reader = new FileReader(); reader.onload = function (e) { $('.photo-address').attr('src', e.target.result); $('.photo-address').show(); } const type = 'image/jpeg' const name = input.files[0].name?.split('.')[0] let formData = new FormData(); formData.append("file", input.files[0]); const response = await fetch(`${host}/api/upload?name=${name}&type=${type}&r=${randomString(3, '0123456789')}`, { method: "POST", body: formData }) const result = await response.json(); reader.readAsDataURL(input.files[0]); return result } } async function addToCartUang() { var productAddOnId1 = 42122101162199; var productAddOnId2 = 42122101194967; var product_id = 8414949422247 const data = { items: [ { quantity: $("#Quantity-" + productAddOnId1).val(), id: productAddOnId1, "properties": { "Time": $("#properties-time").val() } }, { quantity: $("#Quantity-" + productAddOnId2).val(), id: productAddOnId2, "properties": { "Time": $("#properties-time").val() } } ] } await fetch(window.Shopify.routes.root + 'cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }) .then(response => { console.error('Sukses Buket Uang:', response); $(".form-flower").submit() }) .catch((error) => { console.error('Error Buket Uang:', error); $(".form-flower").submit() }); } async function saveCard(){ let isCard = true const kartu_penerima = $("[data-properties=penerima]").val() !== '' ? $("[data-properties=penerima]").val() : '' const kartu_pengirim = $("[data-properties=pengirim]").val() !== '' ? $("[data-properties=pengirim]").val() : '' const kartu_ucapan = $("[data-properties=ucapan]").val() !== '' ? $("[data-properties=ucapan]").val() : '' const foto = $("#properties-photo").val() const video = $("#properties-video").val() const data = JSON.stringify({ "id": qrID, "penerima": $("#properties-nama-penerima").val(), "kartu_penerima": kartu_penerima, "kartu_ucapan": kartu_ucapan, "kartu_pengirim": kartu_pengirim, "foto": foto, "video": video, "productId": "8414949422247", "order_name": "", "status": "Cart" }) } async function additem(items){ try { let formData = items if(items?.length) { formData = { 'items': items }; } const add = await fetch(window.Shopify.routes.root + 'cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Requested-With':'xmlhttprequest' /* XMLHttpRequest is ok too, it's case insensitive */ }, body: JSON.stringify(formData) }) const data = await add.json(); return data } catch(err){ console.log('Error additem', err) } } async function addons(){ let items = [] $(".addon-item").each(function(){ const p = $(this) const props = p.next(".propsAddonSpotify") const id = $(this).data("id") const quantity = $(this).data("qty") const propId = $("#properties-time").val() let properties = {} if(id === 46067682607319) { const link = props.find(".spotifyLinkAddon").text() const photo = props.find(".spotifyFotoAddon").text() const song = props.find(".spotifySongAddon").text() const artist = props.find(".spotifyArtistAddon").text() properties = { id: propId, "Spotify Link": link !== '' ? link : '-', "Spotify Photo": photo !== '' ? photo : '-', "Spotify Song": song !== '' ? song : '-', "Spotify Artist": artist !== '' ? artist : '-', type: 'addon' } } else { properties = { "id": propId, "type": "addon" } } items.push({ id, quantity, properties }) }) return items } async function propItems() { let props = {} $("[data-properties]").each(function(e){ let elementType = this.tagName; const k = $(this).data("properties") if(k !== 'penerima' && k !== 'ucapan' && k !== 'pengirim' && k !== 'nama-penerima' && k !== 'alamat-penerima' && k !== 'telepon-penerima' && k !== 'company' && k !== 'province' && k !== 'foto-alamat' && k !== 'papan-logo') { const v = elementType === 'SELECT' ? $(this).find(":selected").val() : $(this).val(); if(v !== '') { props[k] = v?.replace(/[\s\n]/g, ''); } } }) return props } async function showPopupCart(items){ if(productType !== '') { console.log("clarity event " + productType + ' completeOrder') window.clarity("event", `${productType} completeOrder`) // window.clarity("set", productType, `completeOrder - ${productDate}`) } $("#popupCart").show() $(".propDeliveryCity").text($("#cities").val()) $(".propDeliveryDate").text($("#propDeliveryDate").val()) $(".propDeliveryTime").text($("#propDeliveryTime").val()) $(".propDeliveryName").text($("[data-properties=nama-penerima]").val()) $(".propDeliveryAddress").text($("[data-properties=alamat-penerima]").val()) $(".propDeliveryPhone").text($("[data-properties=telepon-penerima]").val()) $(".propDeliveryProv").text($("#province").val()) $(".propDeliveryZip").text($("#zip").val()) const addons = [] if(items && items.length > 0) { for(let i = 1; i < items.length; i++) { const spotifyLink = items[i].properties['Spotify Link'] const spotifyPhoto = items[i].properties['Spotify Photo'] const spotifySong = items[i].properties['Spotify Song'] const spotifyArtist = items[i].properties['Spotify Artist'] const price = items[i].price / 100 const props = spotifyLink ? `

spotify link ${spotifyLink}

Upload Photo ${spotifyPhoto}

song / playlist name ${spotifySong}

artist name ${spotifyArtist}

` : ''; addons.push(`
${items[i].title}
${rupiah.format(price)}
${props}`) } } // console.log(addons) if(addons.length === 0) { $(".itemAddonCart").hide() return } $(".toggleAddonCart h4").text(`add-ons (${items.length - 1})`) $(".wrapperItemAddonCart").html(addons) } const money = (money) => { return new Intl.NumberFormat('id-ID', { style: 'currency', currency: 'IDR', minimumFractionDigits: 0 } ).format(money); } async function showNoteMoney() { let qty50k = $("[data-properties='Uang 50k']").val() let qty100k = $("[data-properties='Uang 100k']").val() const total50k = Number(qty50k) * 50000 const total100k = Number(qty100k) * 100000 const total_all = total50k + total100k $(".prop50k").html(`${qty50k} Lembar: ${money(total50k)}`) $(".prop100k").html(`${qty100k} Lembar: ${money(total100k)}`) $(".itemMoney").html(`

For the money arrangement, please transfer IDR ${money(total_all)} to Bank Mandiri 1020001234522 (PT Modern Mekar Abadi) and contact our Customer Service to confirm with proof of payment.

`) } async function removeImage() { const data = JSON.stringify({ "ID": $("#properties-properties-qrId").val(), "Kartu Nama Penerima": $("#properties-kartu-nama-penerima").val(), "Kartu Nama Pengirim": $("#properties-kartu-nama-pengirim").val(), "Kartu Ucapan": $("[data-properties=ucapan]").val(), "Nama Penerima": $("#properties-nama-penerima").val(), "Order Number":"", "Status":"Product", "Foto": "", "Media": $("#properties-video").val(), "Image": "8414949422247" }) const remove = updateCard(data) if(remove) { $(this).hide() $("#properties-photo").val("-") $(".placeholder-image").show() $(".preview-image").attr("src", "") } } async function removeVideo() { const data = JSON.stringify({ "ID": $("#properties-properties-qrId").val(), "Kartu Nama Penerima": $("#properties-kartu-nama-penerima").val(), "Kartu Nama Pengirim": $("#properties-kartu-nama-pengirim").val(), "Kartu Ucapan": $("[data-properties=ucapan]").val(), "Nama Penerima": $("#properties-nama-penerima").val(), "Order Number":"", "Status":"Product", "Foto": $("#properties-photo").val(), "Media": "", "Image": "8414949422247" }) const remove = updateCard(data) if(remove) { $("#properties-video").val("-") $(this).find("img").hide() $(this).hide() $(this).prev("p").text("Add video to make it more special (optional)") $("#label-input-video").show() $("#label-input-video span").text("Upload Video") $(".case-video-preview p span").remove() } } async function loadItemOccasion(t, occasion) { const name = occasion?.replace('greeting-card-', '') $("#kartu-ucapan").val("") $("[data-occassion]").removeClass("selected") $("[data-properties=ucapan]").val("") $("#save-card").attr("disabled", true) t.addClass("selected") $("#show_note").attr("data-card-occassion", name) $.get(`https://outerbloom.com/collections/${occasion}/products.json`, function(data, status){ const products = data.products const html = [] for(let i = 0; i < products.length; i++) { const id = products[i].id const variantId = products[i].variants[0].id const img = products[i].images[0].src const title = products[i].title const price = products[i].variants[0].price const qty = products[i].variants[0].inventory_quantity const body = `
${title}
${title}

${price < 1 ? 'FREE' : rupiah.format(price)}

` html.push(body) } const withoutCard = `
Without card
Send without a greeting card
` $("#itemCards .items-card").html(html.length === 0 ? '

No Item available

' : html.join("")) }); } $(document).ready(function(){ // Observer to auto-trigger addon loading when addon section becomes visible const addonObserver = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { const target = $(mutation.target) if(target.hasClass('purchaseAddon') && mutation.type === 'attributes' && mutation.attributeName === 'class') { if(!target.hasClass('hide')) { // Addon section just became visible, ensure items are loaded setTimeout(function() { if($("#itemAddons .row").children().length === 0 || $("#itemAddons .row").text().includes("No Item available")) { console.log("Auto-triggering addon load...") $("[data-addon=upsell-all]").trigger("click") } }, 150) } } }) }) // Start observing addon section const addonSection = document.querySelector('.purchaseAddon') if(addonSection) { addonObserver.observe(addonSection, { attributes: true, attributeFilter: ['class'] }) } $(".purchasePopup").delegate("#addtocart-card", "click", async function(){ $(this).find("span").addClass("loading") let isValid = true $(".formAddressPurchase [required]").each(function(){ const t = $(this) const input = t.val() const p = t.parent() if(input === '') { p.addClass("error") isValid = false } }) if(!isValid) { $(this).find("span").removeClass("loading") return } let items = [] const mainProps = { "Delivery Date": $("#propDeliveryDate").val(), "Delivery Time": $("#propDeliveryTime").val() !== '' ? $("#propDeliveryTime").val() : '-' , "Kota Pengiriman": $("#cities").val(), "Nama Penerima": $("[data-properties=nama-penerima]").val() !== '' ? $("[data-properties=nama-penerima]").val() : '-' , "Alamat Penerima": $("[data-properties=alamat-penerima]").val() !== '' ? $("[data-properties=alamat-penerima]").val() : '-' , "Kodepos": $("#zip").val() !== '' ? $("#zip").val() : '-' , "Telepon Penerima": $("[data-properties=telepon-penerima").val() !== '' ? $("[data-properties=telepon-penerima").val() : '-' , "Papan Nama Penerima": $("[data-properties=penerima]").val() !== '' ? $("[data-properties=penerima]").val() : '-' , "Papan Ucapan": $("[data-properties=ucapan]").val() !== '' ? $("[data-properties=ucapan]").val() : '-' , "Papan Nama Pengirim": $("[data-properties=pengirim]").val() !== '' ? $("[data-properties=pengirim]").val() : '-' , "Papan Logo": $("[data-properties=papan-logo]").val() !== '' ? $("[data-properties=papan-logo]").val() : '-' , "Foto Alamat": $("[data-properties=foto-alamat]").val() !== '' ? $("[data-properties=foto-alamat]").val() : '-' , "Province": $("#province").val() !== '' ? $("#province").val() : '-' , "Country": $("#properties-kota-pengiriman-country").val() !== '' ? $("#properties-kota-pengiriman-country").val() : '-' , "Shipping": $("#properties-shipping").val() !== '' ? $("#properties-shipping").val() : '-' , "Company": $("[data-properties=company]").val() !== '' ? $("[data-properties=company]").val() : '-' , "id": $("#properties-time").val() !== '' ? $("#properties-time").val() : '-', "type": 'product' } const props = await propItems() properties = {...mainProps, ...props }; const id = $("#productSelect").find('option:selected').val() console.log(id, 'main ID') const mainItem = { id: Number(id), quantity: 1, properties } items.push(mainItem) const cardId = $("#itemCards").find(".selected input").val() const cardItem = { id: Number(cardId), quantity: 1, properties: { "id": $("#properties-time").val() !== '' ? $("#properties-time").val() : '-', type: 'card' } } console.log(cardId, 'cardId') if(cardId) { items.push(cardItem) } const addon = await addons() if(addon) { for(let i = 0; i < addon.length; i++){ items.push({ id: addon[i].id, quantity: addon[i].quantity, properties: addon[i].properties }) } } const addItems = await additem(items) console.log(addItems.items, 'add items') if(addItems) { $(this).find("span").removeClass("loading") disablePopup() showPopupCart(addItems.items) localStorage.setItem("items", JSON.stringify(addItems.items)) } }) $("#addtocart-cart .btn").click(async function(){ const id = $("#productSelect").find('option:selected').val() const mainProps = { id: $("#properties-time").val() !== '' ? $("#properties-time").val() : '-', type: 'product' } const props = await propItems() const properties = { ...mainProps, ...props }; const items = { id: Number(id), quantity: 1, properties } const addItems = await additem(items) if(addItems) { showPopupCart(addItems.items) localStorage.setItem("items", JSON.stringify(addItems)) } }) $(".formAddressPurchase [required]").change(function(){ const t = $(this) const p = t.parent() const v = t.val() if(v !== '') { p.removeClass("error") } }) $("#save-card").click(async function(){ const parent = $(this).parents(".sectionPurchase") const next = parent.next(".sectionPurchase") $(this).find("span").addClass("loading") const card = await saveCard() console.log(card, 'ssaveCCC') if(card?.status === 200 || card?.status === 201) { $(".scanCard").removeClass("hide") $(this).find("span").removeClass("loading") parent.addClass("hide") next.removeClass("hide") if(next.hasClass("purchaseAddon")) { $("[data-addon=upsell-all]").click() console.log("clarity event addons") window.clarity("event", `${productType} add-ons`) // Ensure addon items are loaded when entering addon popup setTimeout(function() { if($("#itemAddons .row").children().length === 0 || $("#itemAddons .row").text().includes("No Item available")) { $("[data-addon=upsell-all]").trigger("click") } }, 100) } if(next.hasClass("purchaseAddress")) { $("#zip").select2() } } }) $("#skip-card").click(async function(){ $("#greetingCard [data-properties]").val("") $("#properties-photo").val("") $("#properties-video").val("") const parent = $(this).parents(".sectionPurchase") const next = parent.next(".sectionPurchase") parent.addClass("hide") next.removeClass("hide") // $("#itemCards").html("") removeImage() removeVideo() if(next.hasClass("purchaseAddon")) { $("[data-addon='upsell-all']").click() console.log("clarity event addons") window.clarity("event", `${productType} add-ons`) // Ensure addon items are loaded when entering addon popup setTimeout(function() { if($("#itemAddons .row").children().length === 0 || $("#itemAddons .row").text().includes("No Item available")) { $("[data-addon='upsell-all']").trigger("click") } }, 100) } if(next.hasClass("purchaseAddress")) { $("#zip").select2() } }) $("#msgCard").click(async function(){ $(this).parent().addClass("loading") let occasion = $(".selected[data-occassion]").data("occassion") occasion = occasion?.replace("greeting-card-", "") const { data } = await getFetch(`${host}/api/card/template/occasion?name=${occasion}`); const d = data?.data for(let i = 0; i < d.length; i++) { const num = Math.floor(Math.random() * (d.length - 1 + 1) + 1); const greeting = d[num]?.Greeting $(".greetingCard textarea").val(greeting) $(this).parent().removeClass("loading") } $("#save-card").attr("disabled", false) }) $(".sectionPurchaseBoard .next-purchase-button").click(function(){ const parent = $(this).parents(".sectionPurchase") const next = parent.next(".sectionPurchase") parent.addClass("hide") next.removeClass("hide") }) $("#editCard").click(function(){ $(".custom-card").show() $(".preview-card").hide() }) $("#first_name, #last_name").change(function(){ const v = $(this).val() const first_name = $("#first_name").val() const last_name = $("#last_name").val() !== '' ? ' ' + $("#last_name").val() : '' $("[data-properties=nama-penerima]").val(first_name+last_name) }) $("[data-occassion]").click(function(){ const t = $(this) const p = t.parents(".sectionPurchase") // $(".greetingCard").addClass("disabled") const occasion = t.data("occassion") loadItemOccasion(t, occasion) }) $("#itemCards").delegate(".item-card:not(.item-without-card) label", "click", function(){ const id = $(this).parent(".item-card").data("id") const t = $(this).parent(".item-card") const target = t.find("input") const v = $('.item-card input[type="radio"]:checked').val(); $("#itemCards .item-card").removeClass("selected") t.addClass("selected") $("#itemCards .item-card").find("input").attr("name", "") if(target.length > 0) { target.attr("name", "id[]") $("#properties-card").val(id) $(".greetingCard").removeClass("disabled") $("#skip-card").attr("disabled", false) } else { $("#properties-card").val("") } }) $("#itemCards").delegate(".item-without-card label", "click", function(){ const parent = $(this).parents(".sectionPurchase") const next = parent.next(".sectionPurchase") $(".greetingCard").addClass("disabled") parent.addClass("hide") next.removeClass("hide") $("[data-addon=upsell-all]").click() $("#zip").select2() }) $("[data-properties=ucapan]").keyup(function(){ const v = $(this).val() const p = $(this).parents(".sectionPurchase") $(".purchaseAddress").find(".greetingCard textarea").val(v) if(v.length > 3) { p.find(".next-purchase-button").attr("disabled", false) } else { p.find(".next-purchase-button").attr("disabled", true) } }) $("[data-properties=penerima]").keyup(function(){ const v = $(this).val() $(".purchaseAddress").find("[data-properties=penerima]").val(v) }) $("[data-properties=pengirim]").keyup(function(){ const v = $(this).val() $(".purchaseAddress").find("[data-properties=pengirim]").val(v) }) $(document).click(function(e){ if($(e.target).closest('.wrapperPopupCart').length != 0) return false; // $('#popupCart').fadeOut('slow'); // location.reload() }); $(".toggleAddonCart").click(function(){ const p = $(this).parent(".itemAddonCart") p.toggleClass("open") }) $(".btnViewCart").click(function(){ window.location.href = "https://outerbloom.com/cart"; }) $(".btnViewCheckout").click(async function(){ $(this).find("span").addClass("loading") let zip = $("#zip").val() const first_name = $("#first_name").val() const last_name = $("#last_name").val() const company = $("#company").val() !== '' ? $("#company").val() : '' const address1 = $("#delivery_address").val() const address2 = zip && zip !== '' ? zip?.split(' - ')[1] : '' zip = zip && zip !== '' ? zip?.split(' - ')[0] : '' const phone = $("#recipient_number").val() const city = $("#cities").val() const province = $("#province").val() const country = 'Indonesia' const ver = Date.parse(new Date()) const params = `checkout[email]=&checkout[shipping_address][first_name]=${first_name}&checkout[shipping_address][last_name]=${last_name}&checkout[shipping_address][company]=${company}&checkout[shipping_address][address1]=${address1}&checkout[shipping_address][address2]=${address2}&checkout[shipping_address][city]=${city}&checkout[shipping_address][country]=${country}&checkout[shipping_address][province]=${province}&checkout[shipping_address][zip]=${zip}&checkout[shipping_address][phone]=${phone}&v=${ver}` const clear = await fetch(`/cart/clear.js`, {method: 'POST'}) if(clear.status === 200) { const savedItem = window.localStorage.getItem("items"); const items = JSON.parse(savedItem) const addItems = await additem(items) console.log(addItems, 'new addItems') if(addItems) { window.location.href = `https://outerbloom.com/checkout?${params}`; } } }) $(".btnContinueShopping").click(function(){ window.location.href = "https://outerbloom.com/"; }) if (isIOS) { $(".empty-state-card").click(function(){ $("#input-foto").trigger("click") }) $(".btn-upload-image").click(function(){ $("#input-foto").trigger("click") }) $("[for=input-video]").click(function(){ $("#input-video").trigger("click") }) $(".btn-upload-papan").click(function(){ $("#logoPapan").trigger("click") }) } $("[data-properties]").each(function(){ const select = $(this).parents(".form-group").find("select") $(this).change(function(){ const name = $(this).data("properties") const v = $(this).val() if (name == 'telepon-penerima') { let phone = v.replace(/[^0-9]/g, '') $(this).val(phone); $("#properties-telepon-penerima").val(phone) $('.iti__search-input').val('-') } else { $("#properties-" + name).val(v) } }) select.on("change", function(){ const name = $(this).data("properties") const v = $(this).val() $("#properties-" + name).val(v) }) }) $("#show_note").click(function(){ nameq = $("#properties-nama-penerima").val() dear = $("#properties-kartu-nama-penerima").val() card = $("[data-properties=ucapan]").val() sender = $("#properties-kartu-nama-pengirim").val() photo = $("#properties-photo").val() video = $("#properties-video").val() updateCard(nameq, dear, card, sender, photo, video, status) }) $(".remove-image").click(function(e){ e.preventDefault() $(this).find("img").show() removeImage() }) $(".remove-media").click(function(e){ e.preventDefault() $(this).find("img").show() removeVideo() }) $("[data-delivery_method]").click(function(e){ e.preventDefault() const t = $(this) const data = t.data("delivery_method") $("[data-delivery_method]").removeClass("selected") t.addClass("selected") $("#cities").val("") $("#properties-delivery-date").val("-") $("#deliveryDate button").removeClass("selected") $("#full-date").val("Full Calendar →") $("#propDeliveryDate").val("") const step3 = $("#step-3") if(data.match('PickUp')) { $(".selfpickup-point").show() step3.find("[data-finished=false]").hide() $("#panel-4").hide() step3.find("[data-finished=true]").show() $("#cities").attr("required", false) $("#form-group-city").hide() $("#row-delivery-time").hide() $("#propDeliveryTime, #properties-delivery-time, #properties-nama-penerima, #properties-alamat-penerima, #properties-kodepos, #properties-kodepos, #properties-telepon-penerima").val("-") $("#propDeliveryTime").attr("required", false) // $("#deliveryDate").find("button:first-child").addClass("stop") $(".form-selfpickup").show() $(".form-delivery").hide() $(".form-delivery").find("input, textarea, select").val("") $(".form-delivery").find("input, textarea, select").attr("required", false) $("#properties-shipping").val("0") $("#noteDeliveryDate").hide() $(".form-delivery .form-control").attr("required", false) $("#stepNav4").hide() $("#deliveryDate").find("button:nth-child(1)").addClass("stop") if(timeOfDay >= 16.01){ $("#deliveryDate").find("button:nth-child(2)").addClass("stop") } } else { $("#deliveryDate").find("button:nth-child(1)").removeClass("stop") step3.find("[data-finished=false]").show() $("#panel-4").show() step3.find("[data-finished=true]").hide() $("#cities").attr("required", true) $(".selfpickup-point").hide() $("#form-group-city").show() $("#cities").val('').trigger('change'); $("#properties-kota-pengiriman").val("-") $("#row-delivery-date, #row-delivery-time").show() $("#propDeliveryDate, #propDeliveryTime").attr("required", true) $("#deliveryDate").find("button").removeClass("stop") $(".form-selfpickup").hide() $(".form-delivery").show() $(".form-delivery").find("input, textarea, select").attr("required", true) $(".form-delivery [data-properties]").attr("readonly", false) $("#properties-kodepos").val("-") $("#properties-alamat-penerima").val("-") $(".form-delivery .form-control").attr("required", true) $(this).parents(".setup-content").attr("id", "step-1") $("#stepNav4").show() } }) $("[name=selfpickup]").click(function(){ const p = $(this).parents(".row-pickup") const pickupCity = $("input[name='selfpickup']:checked").val(); const pickupAddress = $("input[name='selfpickup']:checked").data("address"); const pickupZip = $("input[name='selfpickup']:checked").data("zip"); $(".row-pickup").removeClass("selected") p.addClass("selected") $("#properties-kota-pengiriman").val(pickupCity) $("#province").val("Jakarta") $("#properties-alamat-penerima").val(pickupAddress) $("#properties-kodepos").val(pickupZip) }) $("#cities").change(function(e){ e.preventDefault() $(this).parent(".row").find("p.error").remove() $("#full-date").val("Full Calendar") $("#deliveryDate, #deliveryDateFull label ").show() $("#deliveryDateFull").removeClass("filled") $(".btnChangeDeliveryDate").addClass("hide") $("#full-date").prop('disabled', false); $("#stepNav2, #stepNav3, #stepNav4").removeClass("btn-success") $("#stepNav2, #stepNav3, #stepNav4").find("a").attr("disabled", true) const step3 = $("#step-3") $("#cityNote").remove() $("#noteDeliveryDate").hide() $("#noteDeliveryDate").empty() let v = $(this).val() let v2 = $('option:selected', this).attr('data-city'); let v3 = $('option:selected', this).attr('data-province'); let price = $('option:selected', this).attr('data-price'); $("#country").val(v) $("#properties-kota-pengiriman").val(v) $("#properties-shipping").val(price) $("#deliveryDate button, #deliveryTime button, .calendarseasonal .button").removeClass("selected") $("#properties-delivery-date, #properties-delivery-time").val("-") $("#propDeliveryDate, #propDeliveryTime").val("") let note = $('option:selected', this).attr('data-note'); if(v === 'Kota Lainnya') { $("#noteDeliveryDate").show() $("#noteDeliveryDate").text("Order akan segera dikirim. Estimasi tanggal diterima akan disesuaikan dengan waktu pengiriman oleh pihak ekspedisi ke lokasi Anda.") $("#zip").attr("required", false) $("#zip").hide() $("#propDeliveryDate, #propDeliveryTime").attr("required", false) $("#propDeliveryDate, #properties-delivery-date, #propDeliveryTime, #properties-delivery-time").val("-") $("#row-delivery-date, #row-delivery-time").hide() $("#properties-shipping").val("") // $(this).parents(".setup-content").attr("id", "step-2") } else { $("#noteDeliveryDate").hide() $("#zip").attr("required", true) $("#zip").show() $("#row-delivery-date, #row-delivery-time").show() $("#propDeliveryDate, #propDeliveryTime").attr("required", true) $("#deliveryDate").find("button").removeClass("stop") // $(this).parents(".setup-content").attr("id", "step-1") } // if(v !== 'Jakarta') { // $("[data-type=upsell]").hide() // } else { // $("[data-type=upsell]").show() // } // $('.collection-addons')[0].swiper.update(); getProvince(v) $("#zip").html(``) renderZip(v, v2, v3) disabledSameDay() if(v !== 'Jakarta' && v !== 'Depok' && v !== 'Bekasi' && v !== 'Tangerang') { $("#cardOccasion, #navAddon, .collection-addons").hide() $("[data-addon=giftcard]").show() $("[data-addon=giftcard]").click() $("#itemAddons").show() $("#flower-step").addClass("nonjadetabek") } else { $("#cardOccasion, #navAddon, .collection-addons").show() $("[data-addon=all]").click() $("#flower-step").removeClass("nonjadetabek") } if(v !== '') { $("#personalizeBtn .btn").attr("disabled", false) } else { $("#personalizeBtn .btn").attr("disabled", true) } }) $("#zip").change(function(e){ let v = $(this).val() var city = $("#cities").find('option:selected'); $("#properties-kodepos").val(v) if(city === 'Kota Lainnya') { $(this).attr("required", true) $("#recipient-address").val("") } }) var minDate = +7 $("#full-date").datepicker({ minDate, dateFormat: 'Mdd_yy', //Nop22_2021, beforeShowDay: disabledays, onSelect: function (date) { $("#deliveryDate, #deliveryDateFull label ").hide() $("#deliveryDateFull").addClass("filled") $(".btnChangeDeliveryDate").removeClass("hide") $("#full-date").prop('disabled', true); $('#propDeliveryDate, #properties-delivery-date').val('Kirim_'+date); $(".date-full").addClass("selected") $(".date-single, .calendar-group").removeClass("selected") $("#propDeliveryTime").val('') $("#properties-delivery-time").val('-') $(".time-single").removeClass("selected") } }); $(".btnChangeDeliveryDate").click(function(){ $("#deliveryDate, #deliveryDateFull label ").show() $("#deliveryDateFull").removeClass("filled") $(".btnChangeDeliveryDate").addClass("hide") $("#full-date").prop('disabled', false); }) $("#deliveryDate").delegate(".calendarbutton:not(.date-full)", "click", function(e){ e.preventDefault() $(this).parents("#row-delivery-date").find("p.error").remove() const fulldate = $(this).data("fulldate") const day = $(this).data("day") const date = $(this).data("date") const month = $(this).data("month") const year = $(this).data("year") const off_pagi = $(this).data("offpagi") const off_siang = $(this).data("offsiang") const off_Malam = $(this).data("offMalam") $(".calendarbutton").removeClass("selected") $(this).addClass("selected") $("#propDeliveryDate, #properties-delivery-date").val(`Kirim_${month}${date}_${year}`) $("#propDeliveryTime").val('') $("#properties-delivery-time").val('-') $(".calendarbutton2").removeClass("selected") $("#full-date").val("Full Calendar") if(off_pagi && timeOfDay > off_pagi) { $("[data-time=Morning]").attr("disabled", true) } else { $("[data-time=Morning]").attr("disabled", false) } if(off_siang && timeOfDay > off_siang) { $("[data-time=Afternoon]").attr("disabled", true) } else { $("[data-time=Afternoon]").attr("disabled", false) } }) if(today === 14 && timeOfDay > 17.00) { $("#deliveryDate button:first-child").attr("disabled", true) } $("#deliveryTime").delegate(".calendarbutton2", "click", function(e){ e.preventDefault() const time = $(this).data("time") const date = $("#propDeliveryDate").val() if(date == '') { return alert('Silakan pilih tanggal terlebih dahulu') } $(".calendarbutton2").removeClass("selected") $(this).addClass("selected") $("#propDeliveryTime, #properties-delivery-time").val(`KirimJam_${date.replace('Kirim_','')}_${time}`) }) $('textarea.has-limit, input.has-limit').keyup(function () { max = this.getAttribute("maxlength"); let len = $(this).val().length; let limit = $(this).siblings(".limit"); if (len > max) { alert('you have reached the limit'); } else { limit.text(`${len}/${max}`); } }); $("#button-action-step .btn").click(function(){ $(this).find("span").text("Processing..."); }); $(".finishBtn").on('click', function() { $(this).addClass("is-adding"); // $(this).click(); }); $('.setup-panel .nav-item a.btn-success').trigger('click'); $("#button-action .btn").click(function(){ $("#flower-step").addClass("block"); $("#button-action").hide(); }); $(".close-how-order").click(function(){ $("#flower-step").removeClass("block"); $("#button-action").show(); }); $("#input-foto, #input-video").change(function(e){ readURL(this); }); $("#logoPapan").change(function(){ readURLPapan(this); }); $("#address-upload").change(async function(){ const upload_address = await readURLAddress(this) if(upload_address) { const url = upload_address.url $(".props-address-upload").val(url) $(".form-address").addClass("address-uploaded") $(".form-address-upload").addClass("uploaded") $(this).parents(".form-group").siblings(".form-group").find("[required]").attr("required", false) } }) $(".address-manualy").click(function(){ $(".form-address-upload").removeClass("uploaded"); $(".photo-address").hide(); $(".form-address").removeClass("address-uploaded") $("#formAddressPurchase").find(".form-control").attr("required", true) }); $(".case-video-preview").delegate(".replace-video", "click", function(){ $("#input-video").trigger("click") }) $('.date-single').click(function(e) { e.preventDefault(); $('.date-single').removeClass('selected'); $('#full-date').removeClass('selected'); $(this).addClass('selected'); $('#full-date').html('Full' + '
' + 'Calendar'); }); $('#full-date').click(function(e){ e.preventDefault(); $('.date-single').removeClass('selected'); $(this).addClass('selected'); }); // $("tr").each(function(){ // if($(this).text().match('SKU')) { // $(".sku-product").html($(this).parents("table").html()) // } // }) $("#product-image").scroll(function(){ $(".desc-add").each(function(){ const img = $(this).find("img") const src = img.data("src") img.attr("src", src) }) }) $(".product-fixed").hide() let target = $("#personalizeBtn") $(".product-meta").scroll(function() { if ($(window).scrollTop() >= target.offset().top ) { $(".product-fixed").addClass("show") } else { $(".product-fixed").removeClass("show") } }); $(window).scroll(function() { if ($(window).scrollTop() >= target.offset().top ) { $(".product-fixed").addClass("show") } else { $(".product-fixed").removeClass("show") } }); });

Pertanyaan yang Sering Ditanyakan

POKECUAN88 adalah platform slot online yang menyediakan berbagai pilihan permainan slot populer dengan tampilan modern dan akses yang mudah digunakan setiap hari.

POKECUAN88 menawarkan pengalaman bermain yang nyaman dengan sistem yang stabil, pilihan game lengkap, serta tampilan yang ringan digunakan melalui berbagai perangkat.

Ya, tersedia berbagai pilihan slot populer dengan variasi permainan menarik yang dapat dinikmati kapan saja melalui desktop maupun smartphone.

Karena POKECUAN88 memiliki akses permainan yang cepat, navigasi yang sederhana, serta pengalaman bermain yang terasa lebih nyaman setiap hari.

Tentu saja, platform ini memiliki tampilan responsif sehingga permainan dapat diakses dengan lancar melalui smartphone tanpa hambatan berarti.

Keranjang Belanja