diff --git a/web-static/dashboard.html b/web-static/dashboard.html index e51a1db38..1c6e57f69 100644 --- a/web-static/dashboard.html +++ b/web-static/dashboard.html @@ -1783,6 +1783,13 @@

๐ŸŒ c2pool Hash Rate

DOA+Orphan: -
Share Difficulty: -
+ + @@ -2880,6 +2887,31 @@

Legend

d3.json('../global_stats', function(d) { _gs = d; _tryRenderStats(); }); d3.json('../merged_stats', function(d) { _ms = d || {}; _tryRenderStats(); }); d3.json('../best_share', function(d) { _bs = d || {}; _tryRenderStats(); }); + d3.json('../v36_status', function(d) { if (d) renderV36Status(d); }); + } + + // V36 crossing widget: maps /v36_status ratchet state to an at-a-glance label. + // Sourced from the same internal state debug.log uses -- never a stub. + function renderV36Status(v) { + var card = document.getElementById('v36_card'); + if (!card) return; + var labels = { + no_transition: 'ACTIVATED', + activating: 'ACTIVATING', + signaling_strong: 'VOTING (strong)', + signaling: 'VOTING', + propagating: 'PROPAGATING', + building_chain: 'BUILDING CHAIN', + waiting: 'WAITING' + }; + card.style.display = ''; + card.classList.toggle('transitioning', !!v.is_transitioning); + d3.select('#v36_status_label').text(labels[v.status] || v.status || '-'); + d3.select('#v36_vote_pct').text(v.overall_v36_vote_pct != null ? v.overall_v36_vote_pct + '%' : '-'); + d3.select('#v36_ww_pct').text(v.sampling_signaling != null ? v.sampling_signaling + '%' : '-'); + d3.select('#v36_share_label').text(v.current_share_name || (v.current_share_type != null ? 'V' + v.current_share_type : '-')); + d3.select('#v36_target_label').text(v.target_version_name || (v.target_version != null ? 'V' + v.target_version : '-')); + d3.select('#v36_msg').text(v.message ? '\u00b7 ' + v.message : ''); } function renderBestShare(bs) {