forked from bitcoinafterlife/bal-welist-website
refactor: move fetch after terms accept, add donations/nextdep/unconfirmed balance, fix download blob
This commit is contained in:
84
index.html
84
index.html
@@ -315,10 +315,11 @@ footer a{color:var(--accent);text-decoration:none}
|
|||||||
<div class="row"><span>Chain</span><span id="iv-chain">—</span></div>
|
<div class="row"><span>Chain</span><span id="iv-chain">—</span></div>
|
||||||
<div class="row"><span>Address</span><span id="iv-addr">—</span></div>
|
<div class="row"><span>Address</span><span id="iv-addr">—</span></div>
|
||||||
<div class="row"><span>Balance</span><span id="iv-balance">—</span></div>
|
<div class="row"><span>Balance</span><span id="iv-balance">—</span></div>
|
||||||
<div class="row"><span>Status</span><span id="iv-status">—</span></div>
|
<div class="row"><span>Donations</span><span id="iv-donations">—</span></div>
|
||||||
<div class="row"><span>Contact</span><span id="iv-contact">—</span></div>
|
<div class="row"><span>Contact</span><span id="iv-contact">—</span></div>
|
||||||
<div class="row"><span>Server</span><span id="iv-url">—</span></div>
|
<div class="row"><span>Server</span><span id="iv-url">—</span></div>
|
||||||
<div class="row"><span>Will Executor</span><span><a id="iv-weinfo" href="#" target="_blank">—</a></span></div>
|
<div class="row"><span>Will Executor</span><span><a id="iv-weinfo" href="#" target="_blank">—</a></span></div>
|
||||||
|
<div class="row" id="iv-nextdep-row" style="display:none"><span>Next deposit</span><span id="iv-nextdep">—</span></div>
|
||||||
<div id="qrcode"></div>
|
<div id="qrcode"></div>
|
||||||
<button class="btn-share" id="share-btn">Share invoice</button>
|
<button class="btn-share" id="share-btn">Share invoice</button>
|
||||||
<p class="note">
|
<p class="note">
|
||||||
@@ -521,18 +522,45 @@ document.getElementById('submit').addEventListener('click', async () => {
|
|||||||
document.getElementById('iv-chain').textContent = '—';
|
document.getElementById('iv-chain').textContent = '—';
|
||||||
document.getElementById('iv-addr').textContent = '—';
|
document.getElementById('iv-addr').textContent = '—';
|
||||||
document.getElementById('iv-balance').textContent = '—';
|
document.getElementById('iv-balance').textContent = '—';
|
||||||
|
document.getElementById('iv-donations').textContent = '—';
|
||||||
document.getElementById('iv-url').textContent = '—';
|
document.getElementById('iv-url').textContent = '—';
|
||||||
document.getElementById('iv-contact').textContent = '—';
|
document.getElementById('iv-contact').textContent = '—';
|
||||||
document.getElementById('iv-weinfo').href = '#';
|
document.getElementById('iv-weinfo').href = '#';
|
||||||
document.getElementById('iv-weinfo').textContent = '—';
|
document.getElementById('iv-weinfo').textContent = '—';
|
||||||
|
document.getElementById('iv-nextdep-row').style.display = 'none';
|
||||||
|
document.getElementById('iv-nextdep').textContent = '—';
|
||||||
|
document.getElementById('iv-min').parentElement.style.display = '';
|
||||||
|
document.getElementById('iv-addr').parentElement.style.display = '';
|
||||||
|
document.getElementById('qrcode').style.display = '';
|
||||||
|
document.getElementById('share-btn').style.display = '';
|
||||||
document.getElementById('qrcode').innerHTML = '';
|
document.getElementById('qrcode').innerHTML = '';
|
||||||
document.getElementById('qrcode').style.cursor = '';
|
document.getElementById('qrcode').style.cursor = '';
|
||||||
document.getElementById('qr-overlay').classList.remove('show');
|
document.getElementById('qr-overlay').classList.remove('show');
|
||||||
document.getElementById('share-btn').textContent = 'Share invoice';
|
document.getElementById('share-btn').textContent = 'Share invoice';
|
||||||
document.getElementById('terms-box').classList.remove('show');
|
document.getElementById('terms-box').classList.remove('show');
|
||||||
|
document.getElementById('terms-box').style.display = '';
|
||||||
document.getElementById('terms-check').checked = false;
|
document.getElementById('terms-check').checked = false;
|
||||||
document.getElementById('terms-accept').disabled = true;
|
document.getElementById('terms-accept').disabled = true;
|
||||||
const chain = getChain();
|
const chain = getChain();
|
||||||
|
const infoUrl = url + '/' + chain + '/info';
|
||||||
|
document.getElementById('terms-url').href = infoUrl;
|
||||||
|
document.getElementById('terms-url').textContent = url;
|
||||||
|
document.getElementById('terms-box').classList.add('show');
|
||||||
|
document.getElementById('terms-box').scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
||||||
|
});
|
||||||
|
|
||||||
|
document.getElementById('terms-check').addEventListener('change', function () {
|
||||||
|
document.getElementById('terms-accept').disabled = !this.checked;
|
||||||
|
});
|
||||||
|
|
||||||
|
document.getElementById('terms-accept').addEventListener('click', async function () {
|
||||||
|
document.getElementById('terms-box').classList.remove('show');
|
||||||
|
const urlInput = document.getElementById('url');
|
||||||
|
let url = urlInput.value.trim();
|
||||||
|
if (!url.startsWith('http://') && !url.startsWith('https://')) {
|
||||||
|
url = 'https://' + url;
|
||||||
|
}
|
||||||
|
const chain = getChain();
|
||||||
try {
|
try {
|
||||||
const response = await fetch('/data', {
|
const response = await fetch('/data', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
@@ -548,10 +576,10 @@ document.getElementById('submit').addEventListener('click', async () => {
|
|||||||
document.getElementById('iv-min').textContent = fmt(result.min_amount != null ? result.min_amount : minAmount) + ' sats';
|
document.getElementById('iv-min').textContent = fmt(result.min_amount != null ? result.min_amount : minAmount) + ' sats';
|
||||||
document.getElementById('iv-chain').textContent = result.chain || chain;
|
document.getElementById('iv-chain').textContent = result.chain || chain;
|
||||||
document.getElementById('iv-addr').textContent = result.address || '—';
|
document.getElementById('iv-addr').textContent = result.address || '—';
|
||||||
document.getElementById('iv-balance').textContent = result.balance != null ? fmt(result.balance) : '—';
|
const balStr = result.balance != null ? fmt(result.balance) : null;
|
||||||
const statusVal = result.status || '—';
|
const uncStr = result.unconfirmed_balance != null ? fmt(result.unconfirmed_balance) : null;
|
||||||
const st = (statusVal||'').split(':')[0];
|
document.getElementById('iv-balance').textContent = balStr ? (uncStr ? balStr + ' (' + uncStr + ')' : balStr) : '—';
|
||||||
document.getElementById('iv-status').textContent = statusMap[st] || '—';
|
document.getElementById('iv-donations').textContent = result.donations != null ? fmt(result.donations) : '—';
|
||||||
document.getElementById('iv-contact').textContent = document.getElementById('contact').value.trim() || '—';
|
document.getElementById('iv-contact').textContent = document.getElementById('contact').value.trim() || '—';
|
||||||
const weLink = result.id ? `/weinfo/${result.chain || chain}/${result.id}` : null;
|
const weLink = result.id ? `/weinfo/${result.chain || chain}/${result.id}` : null;
|
||||||
const weinfoEl = document.getElementById('iv-weinfo');
|
const weinfoEl = document.getElementById('iv-weinfo');
|
||||||
@@ -562,6 +590,22 @@ document.getElementById('submit').addEventListener('click', async () => {
|
|||||||
weinfoEl.href = '#';
|
weinfoEl.href = '#';
|
||||||
weinfoEl.textContent = '—';
|
weinfoEl.textContent = '—';
|
||||||
}
|
}
|
||||||
|
const serverUrl = result.url || url;
|
||||||
|
document.getElementById('iv-url').textContent = serverUrl;
|
||||||
|
if (result.payment_needed === false) {
|
||||||
|
document.getElementById('iv-min').parentElement.style.display = 'none';
|
||||||
|
document.getElementById('iv-addr').parentElement.style.display = 'none';
|
||||||
|
document.getElementById('qrcode').style.display = 'none';
|
||||||
|
document.getElementById('share-btn').style.display = 'none';
|
||||||
|
document.getElementById('iv-nextdep').textContent = result.next_deposit_date || '—';
|
||||||
|
document.getElementById('iv-nextdep-row').style.display = 'flex';
|
||||||
|
document.getElementById('iv-status').className = 'ok-line';
|
||||||
|
document.getElementById('iv-status').textContent = 'Server is already listed. Next deposit: ' + (result.next_deposit_date || '—');
|
||||||
|
const inv = document.getElementById('invoice');
|
||||||
|
inv.classList.add('show');
|
||||||
|
inv.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
const amountSats = result.amount != null ? result.amount : minAmount;
|
const amountSats = result.amount != null ? result.amount : minAmount;
|
||||||
const amountBtc = (amountSats / 1e8).toFixed(8).replace(/\.?0+$/, '');
|
const amountBtc = (amountSats / 1e8).toFixed(8).replace(/\.?0+$/, '');
|
||||||
const invoiceuri = `bitcoin:${result.address}?amount=${amountBtc}&label=BAL&message=Order+For+url+%26+${encodeURIComponent(url)}`;
|
const invoiceuri = `bitcoin:${result.address}?amount=${amountBtc}&label=BAL&message=Order+For+url+%26+${encodeURIComponent(url)}`;
|
||||||
@@ -591,41 +635,25 @@ document.getElementById('submit').addEventListener('click', async () => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const serverUrl = result.url || url;
|
document.getElementById('iv-status').className = 'ok-line';
|
||||||
const infoUrl = serverUrl + '/' + (result.chain || chain) + '/info';
|
document.getElementById('iv-status').textContent = '✓ Server added: ' + serverUrl + '. Pay the invoice to complete.';
|
||||||
document.getElementById('iv-url').textContent = serverUrl;
|
const inv = document.getElementById('invoice');
|
||||||
document.getElementById('terms-url').href = infoUrl;
|
inv.classList.add('show');
|
||||||
document.getElementById('terms-url').textContent = serverUrl;
|
inv.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
||||||
document.getElementById('terms-box').classList.add('show');
|
|
||||||
document.getElementById('terms-box').scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
document.getElementById('iv-status').className = 'err-line';
|
document.getElementById('iv-status').className = 'err-line';
|
||||||
document.getElementById('iv-status').textContent = 'Network error. Please try again.';
|
document.getElementById('iv-status').textContent = 'Network error. Please try again.';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
document.getElementById('terms-check').addEventListener('change', function () {
|
|
||||||
document.getElementById('terms-accept').disabled = !this.checked;
|
|
||||||
});
|
|
||||||
|
|
||||||
document.getElementById('terms-accept').addEventListener('click', function () {
|
|
||||||
document.getElementById('terms-box').classList.remove('show');
|
|
||||||
const inv = document.getElementById('invoice');
|
|
||||||
document.getElementById('iv-status').className = 'ok-line';
|
|
||||||
document.getElementById('iv-status').textContent = '✓ Server added: ' + document.getElementById('iv-url').textContent + '. Pay the invoice to complete.';
|
|
||||||
inv.classList.add('show');
|
|
||||||
inv.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
|
||||||
});
|
|
||||||
|
|
||||||
document.getElementById('url').addEventListener('keydown', e => {
|
document.getElementById('url').addEventListener('keydown', e => {
|
||||||
if (e.key === 'Enter') document.getElementById('submit').click();
|
if (e.key === 'Enter') document.getElementById('submit').click();
|
||||||
});
|
});
|
||||||
|
|
||||||
(function init() {
|
(async function init() {
|
||||||
|
await Promise.all([fetchData(), fetchMinAmount()]);
|
||||||
const blob = new Blob([JSON.stringify(allServers, null, 2)], { type: 'application/json' });
|
const blob = new Blob([JSON.stringify(allServers, null, 2)], { type: 'application/json' });
|
||||||
document.getElementById('download').href = URL.createObjectURL(blob);
|
document.getElementById('download').href = URL.createObjectURL(blob);
|
||||||
fetchData();
|
|
||||||
fetchMinAmount();
|
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
<div id="qr-overlay"><div id="qr-big"></div></div>
|
<div id="qr-overlay"><div id="qr-big"></div></div>
|
||||||
|
|||||||
@@ -49,6 +49,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div style="border:1;margin-right:50px;">
|
<div style="border:1;margin-right:50px;">
|
||||||
<div><span>Balance:</span><span id="webalance"> </span></div>
|
<div><span>Balance:</span><span id="webalance"> </span></div>
|
||||||
|
<div><span>Donations:</span><span id="wedonations"> </span></div>
|
||||||
<div><span>Status:</span><span id="westatus"> </span></div>
|
<div><span>Status:</span><span id="westatus"> </span></div>
|
||||||
<div><span>Last Update:</span><span id="weupdate"> </span></div>
|
<div><span>Last Update:</span><span id="weupdate"> </span></div>
|
||||||
</div>
|
</div>
|
||||||
@@ -89,7 +90,10 @@
|
|||||||
document.getElementById('wepoints').innerHTML = data.points != null ? data.points : '—';
|
document.getElementById('wepoints').innerHTML = data.points != null ? data.points : '—';
|
||||||
document.getElementById('wewin').innerHTML = data.count_win != null ? data.count_win : '—';
|
document.getElementById('wewin').innerHTML = data.count_win != null ? data.count_win : '—';
|
||||||
document.getElementById('wetld').innerHTML = DOMPurify.sanitize(data.tld||'—');
|
document.getElementById('wetld').innerHTML = DOMPurify.sanitize(data.tld||'—');
|
||||||
document.getElementById('webalance').innerHTML = data.balance != null ? data.balance : '—';
|
const bal = data.balance != null ? data.balance : null;
|
||||||
|
const unc = data.unconfirmed_balance != null ? data.unconfirmed_balance : null;
|
||||||
|
document.getElementById('webalance').innerHTML = bal ? (unc ? bal + ' (' + unc + ')' : bal) : '—';
|
||||||
|
document.getElementById('wedonations').innerHTML = data.donations != null ? data.donations : '—';
|
||||||
document.getElementById('weversion').innerHTML = data.version||'—';
|
document.getElementById('weversion').innerHTML = data.version||'—';
|
||||||
const statusMap = {
|
const statusMap = {
|
||||||
'OK': 'Health check passed',
|
'OK': 'Health check passed',
|
||||||
|
|||||||
Reference in New Issue
Block a user