59 lines
1.8 KiB
JavaScript
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;
|
|
}
|