diff --git a/public/wallet-notice.js b/public/wallet-notice.js index a24d580..d20ebc7 100644 --- a/public/wallet-notice.js +++ b/public/wallet-notice.js @@ -7,16 +7,26 @@ fetch('/api/public/config').then(function (r) { return r.json(); }).then(function (c) { var msg = (c && c.walletNotice || '').trim(); if (!msg) return; - var btns = [].slice.call(document.querySelectorAll('button, a.btn')); - var targets = btns.filter(function (b) { return /connect|unlock/i.test(b.textContent || ''); }); - if (!targets.length) return; - targets.forEach(function (btn) { - if (btn.dataset.wnDone) return; btn.dataset.wnDone = '1'; - var n = document.createElement('div'); - n.className = 'callout'; - n.style.cssText = 'margin:0 0 12px;font-size:13px;line-height:1.5;border-color:rgba(243,190,67,.5)'; - n.innerHTML = 'ℹ️ ' + msg; // admin-authored, same trust level as other config-injected copy - btn.parentNode.insertBefore(n, btn); - }); + function attach() { + var btns = [].slice.call(document.querySelectorAll('button, a.btn')); + btns.filter(function (b) { return /connect|unlock/i.test(b.textContent || ''); }).forEach(function (btn) { + if (btn.dataset.wnDone) return; btn.dataset.wnDone = '1'; + var n = document.createElement('div'); + n.className = 'callout'; + n.style.cssText = 'margin:0 0 12px;font-size:13px;line-height:1.5;border-color:rgba(243,190,67,.5)'; + n.innerHTML = 'ℹ️ ' + msg; // admin-authored, same trust level as other config-injected copy + btn.parentNode.insertBefore(n, btn); + }); + } + attach(); + // Connect/unlock buttons on /my and /training are injected AFTER async + // data loads — watch the DOM so the notice still lands on them. + if (window.MutationObserver) { + var mo = new MutationObserver(function () { attach(); }); + mo.observe(document.body, { childList: true, subtree: true }); + setTimeout(function () { mo.disconnect(); }, 12000); + } else { + var t = 0, iv = setInterval(function () { attach(); if (++t > 12) clearInterval(iv); }, 800); + } }).catch(function () {}); })();