monero-faucet/assets/script.js
2025-10-13 15:30:14 +02:00

59 lines
1.8 KiB
JavaScript

const addressInput = document.getElementById("address");
const amountInput = document.getElementById("amount");
amountInput.addEventListener('input', () => {
const value = parseFloat(amountInput.value);
let error = null;
let decimals;
if (isNaN(value)) {
error = "Enter a valid amount";
} else if (value < amountInput.min) {
error = "Amount must be at least " + amountInput.min;
} else if (value > amountInput.max) {
error = "Amount must be at most " + amountInput.max;
} else if ((decimals = value.countDecimals()) > 12) {
error = `Amount too precise (must be at most 12 decimals, is ${decimals})`;
}
if (error !== null) {
amountInput.setCustomValidity(error);
amountInput.reportValidity();
amountInput.classList.add("invalid");
} else {
amountInput.setCustomValidity("");
amountInput.classList.remove("invalid");
}
});
addressInput.addEventListener("input", () => {
const value = addressInput.value;
let error = null;
if (value.length !== 95 || value.length !== 106) {
error = "Address must be 95 characters long";
}
if (error !== null) {
addressInput.setCustomValidity(error);
addressInput.reportValidity();
addressInput.classList.add("invalid");
} else {
addressInput.setCustomValidity("");
addressInput.classList.remove("invalid");
}
});
Number.prototype.countDecimals = function () {
if (Math.floor(this.valueOf()) === this.valueOf()) return 0;
const str = this.toString();
if (str.indexOf(".") !== -1 && str.indexOf("-") !== -1) {
return str.split("-")[1] || 0;
} else if (str.indexOf(".") !== -1) {
return str.split(".")[1].length || 0;
}
return str.split("-")[1] || 0;
}