diff --git a/public/analytics.js b/public/analytics.js index 300848f3..6769da3a 100644 --- a/public/analytics.js +++ b/public/analytics.js @@ -2100,7 +2100,7 @@
-
⏱️ Timeline
+
Timeline
First seen: ${data.firstSeen ? (typeof formatAbsoluteTimestamp === 'function' ? formatAbsoluteTimestamp(data.firstSeen) : new Date(data.firstSeen).toLocaleString()) : '—'}
Last seen: ${data.lastSeen ? (typeof formatAbsoluteTimestamp === 'function' ? formatAbsoluteTimestamp(data.lastSeen) : new Date(data.lastSeen).toLocaleString()) : '—'}
@@ -2222,7 +2222,7 @@ }).join('')} - ${myKeys.size ? `

⭐ My Claimed Nodes

+ ${myKeys.size ? `

My Claimed Nodes

@@ -2285,7 +2285,7 @@
NodeRolePacketsAvg SNRObserversLast Heard
-

⏰ Recently Active

+

Recently Active

@@ -4077,7 +4077,7 @@ function destroy() { _stopRolesRefresh(); _stopScopesRefresh(); _analyticsData = ''; }).join(''); - el.innerHTML = '

⏰ Clock Health

' + + el.innerHTML = '

Clock Health

' + filterHtml + '
NodeRoleLast HeardPackets TodayAnalytics
' + '' + diff --git a/public/channel-qr.js b/public/channel-qr.js index b4da84be..8ccaade3 100644 --- a/public/channel-qr.js +++ b/public/channel-qr.js @@ -130,14 +130,17 @@ const copyBtn = document.createElement('button'); copyBtn.type = 'button'; copyBtn.className = 'channel-qr-copy'; - copyBtn.textContent = '📋 Copy Key'; + // #1648 M6: Phosphor sprite for copy/copied state (was 📋 / ✓). + const ICON_COPY = ''; + const ICON_CHECK = ''; + copyBtn.innerHTML = ICON_COPY + ' Copy Key'; copyBtn.style.cssText = 'margin-top:6px;'; copyBtn.addEventListener('click', function () { const text = secretHex; const done = function () { - const orig = copyBtn.textContent; - copyBtn.textContent = '✓ Copied'; - setTimeout(function () { copyBtn.textContent = orig; }, 1200); + const orig = copyBtn.innerHTML; + copyBtn.innerHTML = ICON_CHECK + ' Copied'; + setTimeout(function () { copyBtn.innerHTML = orig; }, 1200); }; if (root.navigator && root.navigator.clipboard && root.navigator.clipboard.writeText) { root.navigator.clipboard.writeText(text).then(done, function () { diff --git a/public/customize-v2.js b/public/customize-v2.js index 89d4404c..2a8388ca 100644 --- a/public/customize-v2.js +++ b/public/customize-v2.js @@ -2430,6 +2430,16 @@ arr[parseInt(path[1])][path[2]] = inp.value; setOverride('home', path[0], arr); } + // #1648 M6 (M5 CDP carry-forward): live re-render of the glyph + // preview when an operator types a new `ph:` token or + // legacy emoji into a steps.N.emoji input. Without this, the + // .cust-emoji-preview swatch only updated on Save+reload. + if (inp.classList.contains('cust-emoji-input')) { + var preview = inp.previousElementSibling; + if (preview && preview.classList && preview.classList.contains('cust-emoji-preview')) { + preview.innerHTML = renderConfigGlyph(inp.value); + } + } }); }); diff --git a/public/geofilter-builder.html b/public/geofilter-builder.html index 48556052..2a55ca84 100644 --- a/public/geofilter-builder.html +++ b/public/geofilter-builder.html @@ -73,7 +73,7 @@
0 points - +
diff --git a/public/index.html b/public/index.html index b42da335..4b1f79de 100644 --- a/public/index.html +++ b/public/index.html @@ -137,7 +137,7 @@