153 lines
7.4 KiB
JavaScript
153 lines
7.4 KiB
JavaScript
/* Functions used to buy or take assets */
|
|
|
|
function buyAsset(assetId, assetName, expectedPrice, currencyType){
|
|
const PurchaseModal = new bootstrap.Modal(document.getElementById('purchaseModal'), { keyboard: false })
|
|
const purchaseModalContent = document.getElementById('purchase-modal-content')
|
|
const purchaseModalTitle = document.getElementById('purchase-modal-title')
|
|
const purchaseModalButton = document.getElementById('purchase-modal-btn')
|
|
const purchaseModalClose = document.getElementById('purchase-modal-close')
|
|
|
|
const csrfToken = document.getElementById('csrf_token').getAttribute('data-csrf-token')
|
|
|
|
purchaseModalTitle.textContent = `Confirm purchase of ${assetName}`
|
|
purchaseModalContent.textContent = `Are you sure you want to buy ${assetName} for ${expectedPrice == 0 ? 'Free' : expectedPrice}${expectedPrice != 0 ? (currencyType == 0 ? " Robux" : " Tix") : ''}?`
|
|
|
|
purchaseModalButton.onclick = () => {
|
|
purchaseModalButton.disabled = true
|
|
purchaseModalClose.disabled = true
|
|
purchaseModalContent.textContent = `Processing purchase...`
|
|
fetch(`/catalog/api/purchase`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'X-CSRF-TOKEN': csrfToken
|
|
},
|
|
body: JSON.stringify({
|
|
assetId: Number(assetId),
|
|
expectedPrice: Number(expectedPrice),
|
|
currencyType: Number(currencyType)
|
|
})
|
|
}).then(response => response.json()).then(data => {
|
|
if(data.success){
|
|
window.location.reload()
|
|
}else{
|
|
purchaseModalContent.textContent = `There was an issue processing your purchase, please try again later. Error: ${data.message}`
|
|
}
|
|
}).catch(error => {
|
|
purchaseModalContent.textContent = `There was an issue processing your purchase, please try again later. Error: ${error}`
|
|
})
|
|
}
|
|
purchaseModalButton.disabled = false
|
|
purchaseModalClose.disabled = false
|
|
PurchaseModal.show()
|
|
}
|
|
|
|
async function PurchaseLimitedOffer( assetId, assetName, expectedPrice, expectedOwner, itemOwnershipId ) {
|
|
const PurchaseModal = new bootstrap.Modal(document.getElementById('purchaseModal'), { keyboard: false })
|
|
const purchaseModalContent = document.getElementById('purchase-modal-content')
|
|
const purchaseModalTitle = document.getElementById('purchase-modal-title')
|
|
const purchaseModalButton = document.getElementById('purchase-modal-btn')
|
|
const purchaseModalClose = document.getElementById('purchase-modal-close')
|
|
|
|
const csrfToken = document.getElementById('csrf_token').getAttribute('data-csrf-token')
|
|
|
|
purchaseModalTitle.textContent = `Confirm purchase of ${assetName}`
|
|
purchaseModalContent.textContent = `Are you sure you want to buy ${assetName} for R$${expectedPrice}?`
|
|
|
|
purchaseModalButton.onclick = async () => {
|
|
purchaseModalButton.disabled = true
|
|
purchaseModalClose.disabled = true
|
|
purchaseModalContent.textContent = `Processing purchase...`
|
|
var LimitedPurchaseResponse = await fetch("/catalog/api/purchase-limited", {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'X-CSRF-TOKEN': csrfToken
|
|
},
|
|
body: JSON.stringify({
|
|
assetId: Number(assetId),
|
|
expectedPrice: Number(expectedPrice),
|
|
expectedOwner: Number(expectedOwner),
|
|
itemOwnershipId: Number(itemOwnershipId)
|
|
})
|
|
})
|
|
var LimitedPurchaseResponseJson = await LimitedPurchaseResponse.json()
|
|
if(LimitedPurchaseResponseJson.success){
|
|
window.location.reload()
|
|
} else {
|
|
purchaseModalContent.textContent = `There was an issue processing your purchase, please try again later. Error: ${LimitedPurchaseResponseJson.message}`
|
|
}
|
|
}
|
|
purchaseModalButton.disabled = false
|
|
purchaseModalClose.disabled = false
|
|
PurchaseModal.show()
|
|
}
|
|
|
|
function updateOffsaleCountdown( offsaleAt ) {
|
|
var offsaleElement = document.getElementById('offsale-countdown')
|
|
if (!offsaleElement) {
|
|
console.warn("Could not find offsale countdown element")
|
|
return
|
|
}
|
|
var timeLeft = offsaleAt - new Date()
|
|
if (timeLeft <= 0) {
|
|
return
|
|
}
|
|
var hours = Math.floor(timeLeft / 1000 / 60 / 60)
|
|
var minutes = Math.floor(timeLeft / 1000 / 60) % 60
|
|
var seconds = Math.floor(timeLeft / 1000) % 60
|
|
offsaleElement.textContent = `${hours}:${minutes < 10 ? '0' : ''}${minutes}:${seconds < 10 ? '0' : ''}${seconds}`
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', async () => {
|
|
const AssetInfoMetaTag = document.getElementById('asset-info')
|
|
var AssetId = null
|
|
var DoesUserOwnAset = false
|
|
var AssetName = ""
|
|
var isAssetLimited = false
|
|
var isAssetOnsale = true
|
|
var offsaleAt = null
|
|
if(AssetInfoMetaTag){
|
|
AssetId = AssetInfoMetaTag.getAttribute('data-asset-id')
|
|
AssetName = AssetInfoMetaTag.getAttribute('data-asset-name')
|
|
DoesUserOwnAset = AssetInfoMetaTag.getAttribute('data-user-ownasset')
|
|
DoesUserOwnAset = DoesUserOwnAset == "true" ? true : false
|
|
isAssetLimited = AssetInfoMetaTag.getAttribute('data-islimited')
|
|
isAssetLimited = isAssetLimited == "true" ? true : false
|
|
isAssetOnsale = AssetInfoMetaTag.getAttribute('data-asset-onsale')
|
|
isAssetOnsale = isAssetOnsale == "true" ? true : false
|
|
offsaleAt = AssetInfoMetaTag.getAttribute('data-offsale')
|
|
if(offsaleAt != null){
|
|
offsaleAt = new Date(offsaleAt * 1000)
|
|
//offsaleAt = Date.UTC(offsaleAt.getFullYear(), offsaleAt.getMonth(), offsaleAt.getDate(), offsaleAt.getHours(), offsaleAt.getMinutes(), offsaleAt.getSeconds())
|
|
//offsaleAt = new Date(offsaleAt)
|
|
}
|
|
}
|
|
|
|
if (offsaleAt != null ){
|
|
updateOffsaleCountdown(offsaleAt)
|
|
setInterval(() => {
|
|
updateOffsaleCountdown(offsaleAt)
|
|
}, 1000)
|
|
}
|
|
const PurchaseButtons = document.getElementsByClassName('purchase-button')
|
|
for(let i = 0; i < PurchaseButtons.length; i++){
|
|
if (!DoesUserOwnAset || (isAssetLimited && !isAssetOnsale)) {
|
|
if (!isAssetLimited || isAssetOnsale) {
|
|
PurchaseButtons[i].onclick = () => {
|
|
if ( !AssetInfoMetaTag ) {
|
|
buyAsset(PurchaseButtons[i].getAttribute('data-asset-id'), PurchaseButtons[i].getAttribute('data-asset-name'), PurchaseButtons[i].getAttribute('data-expected-price'), PurchaseButtons[i].getAttribute('data-currency-type'))
|
|
} else {
|
|
buyAsset(AssetId, AssetName, PurchaseButtons[i].getAttribute('data-expected-price'), PurchaseButtons[i].getAttribute('data-currency-type'))
|
|
}
|
|
}
|
|
} else {
|
|
PurchaseButtons[i].onclick = async () => {
|
|
await PurchaseLimitedOffer(AssetId, AssetName, PurchaseButtons[i].getAttribute('data-expected-price'), PurchaseButtons[i].getAttribute('data-expectedowner'), PurchaseButtons[i].getAttribute('data-expectedid'))
|
|
}
|
|
}
|
|
} else {
|
|
PurchaseButtons[i].setAttribute("class", PurchaseButtons[i].getAttribute("class").replace("purchase-button", "purchase-button disabled"))
|
|
}
|
|
}
|
|
}) |