@@ -32,6 +32,7 @@ function showView(view) {
3232}
3333
3434function setCurrentAndOpen ( ip ) {
35+ console . log ( "Opening miner:" , ip ) ; // Debug log
3536 currentMinerIP = ip ;
3637 openDetail ( ip ) ;
3738}
@@ -52,15 +53,16 @@ function renderMiners(data) {
5253 if ( hrVal > 1000 ) { hrVal = hrVal / 1000 ; hrUnit = 'TH/s' ; }
5354 const dName = miner . display_name || miner . name ;
5455 const statusBadge = isOnline ? '<span class="bg-green-900/30 text-green-400 px-2 py-0.5 rounded text-[10px] font-bold">LIVE</span>' : '<span class="bg-red-900/30 text-red-400 px-2 py-0.5 rounded text-[10px] font-bold">OFFLINE</span>' ;
55- const cardHTML = `<div class="theme-card p-5 rounded-xl shadow-sm border border-slate-700/50 hover:border-indigo-500/50 transition relative overflow-hidden group cursor-pointer" onclick="setCurrentAndOpen('${ miner . ip } ')">
56- <div class="flex justify-between items-start mb-4 relative z-10">
56+ // Updated HTML with z-index fixes
57+ const cardHTML = `<div class="theme-card p-5 rounded-xl shadow-sm border border-slate-700/50 hover:border-indigo-500/50 transition relative overflow-hidden group cursor-pointer z-10" onclick="setCurrentAndOpen('${ miner . ip } ')">
58+ <div class="flex justify-between items-start mb-4 relative z-20">
5759 <div class="flex items-center gap-3">
5860 <div class="w-2.5 h-2.5 rounded-full ${ isOnline ? 'bg-green-500 shadow-[0_0_8px_rgba(34,197,94,0.6)]' : 'bg-red-500' } "></div>
5961 <div><h3 class="font-bold text-sm text-slate-200">${ dName } </h3><div class="flex items-center gap-2 mt-1"><p class="text-xs text-slate-500 font-mono">${ miner . ip } </p>${ statusBadge } </div></div>
6062 </div>
61- <button onclick="event.stopPropagation(); removeMiner('${ miner . ip } ')" class="text-slate-500 hover:text-red-400 transition z-20 p-2 rounded-full hover:bg-slate-800"><i class="ph-bold ph-trash"></i></button>
63+ <button onclick="event.stopPropagation(); removeMiner('${ miner . ip } ')" class="text-slate-500 hover:text-red-400 transition z-30 p-2 rounded-full hover:bg-slate-800"><i class="ph-bold ph-trash"></i></button>
6264 </div>
63- <div class="flex justify-between items-end relative z-10 ">
65+ <div class="flex justify-between items-end relative z-20 ">
6466 <div><p class="text-[10px] font-bold uppercase tracking-wider text-slate-500 mb-0.5">Hashrate</p><p class="text-2xl font-bold text-white">${ hrVal . toFixed ( 2 ) } <span class="text-sm font-normal text-slate-400">${ hrUnit } </span></p></div>
6567 <div class="text-right"><p class="text-[10px] font-bold uppercase tracking-wider text-slate-500 mb-0.5">Temp</p><p class="text-lg font-bold text-white">${ ( s . temp || 0 ) . toFixed ( 0 ) } °C</p></div>
6668 </div>
@@ -106,13 +108,11 @@ function updateStats(data) {
106108
107109 const headerEl = document . getElementById ( 'app-header-subtitle' ) ;
108110 if ( headerEl ) {
109- // Dynamic Header
110111 let editionText = "Mining Edition" ;
111112 if ( coinSymbol === 'BC2' ) editionText = "BlockHunters Edition" ;
112113 if ( coinSymbol === 'BTC' ) editionText = "Mainnet Edition" ;
113114 if ( coinSymbol === 'DGB' ) editionText = "DigiByte Edition" ;
114- if ( coinSymbol === 'FB' ) editionText = "Fractal Edition" ;
115-
115+ if ( coinSymbol === 'XEC' ) editionText = "eCash Edition" ;
116116 headerEl . innerHTML = `${ coinSymbol } <span class="text-yellow-500">${ editionText } </span>` ;
117117 }
118118
@@ -170,27 +170,39 @@ function openDetail(ip) {
170170 const miner = allMiners . find ( m => m . ip === ip ) ;
171171 if ( ! miner ) return ;
172172 const s = miner . stats || { } ;
173- document . getElementById ( 'detailName' ) . innerText = miner . display_name || miner . name ;
174- document . getElementById ( 'detailIP' ) . innerText = miner . ip ;
175- document . getElementById ( 'detailVer' ) . innerText = s . version || "Unknown" ;
173+
174+ // Safely update elements only if they exist
175+ const setText = ( id , val ) => { const el = document . getElementById ( id ) ; if ( el ) el . innerText = val ; } ;
176+ const setHtml = ( id , val ) => { const el = document . getElementById ( id ) ; if ( el ) el . innerHTML = val ; } ;
177+ const setVal = ( id , val ) => { const el = document . getElementById ( id ) ; if ( el ) el . value = val ; } ;
178+
179+ setText ( 'detailName' , miner . display_name || miner . name ) ;
180+ setText ( 'detailIP' , miner . ip ) ;
181+ setText ( 'detailVer' , s . version || "Unknown" ) ;
182+
176183 let hr = s . hashrate_10m || 0 ; let hrUnit = "GH/s" ; if ( hr > 1000 ) { hr = hr / 1000 ; hrUnit = "TH/s" ; }
177- document . getElementById ( 'detailHash' ) . innerHTML = `${ hr . toFixed ( 2 ) } <span class="text-base font-normal text-slate-400">${ hrUnit } </span>` ;
178- document . getElementById ( 'detailHashRaw' ) . innerText = ( s . hashrate_raw || 0 ) . toFixed ( 0 ) + " GH/s" ;
184+ setHtml ( 'detailHash' , `${ hr . toFixed ( 2 ) } <span class="text-base font-normal text-slate-400">${ hrUnit } </span>` ) ;
185+ setText ( 'detailHashRaw' , ( s . hashrate_raw || 0 ) . toFixed ( 0 ) + " GH/s" ) ;
186+
179187 let tStr = `${ ( s . temp || 0 ) . toFixed ( 1 ) } <span class="text-lg font-normal opacity-70">°C</span>` ;
180188 if ( s . vrTemp && s . vrTemp > 0 ) tStr += ` <span class="text-sm opacity-50 ml-2 font-mono">VR:${ s . vrTemp . toFixed ( 0 ) } °</span>` ;
181- document . getElementById ( 'detailTemp' ) . innerHTML = tStr ;
182- document . getElementById ( 'detailWatts' ) . innerText = ( s . power || 0 ) . toFixed ( 0 ) + " W" ;
189+ setHtml ( 'detailTemp' , tStr ) ;
190+
191+ setText ( 'detailWatts' , ( s . power || 0 ) . toFixed ( 0 ) + " W" ) ;
183192 let eff = hr > 0 ? ( s . power || 0 ) / ( hrUnit === "TH/s" ? hr : hr / 1000 ) : 0 ;
184- document . getElementById ( 'detailEff' ) . innerText = eff . toFixed ( 2 ) + " J/TH" ;
185- document . getElementById ( 'detailBestDiff' ) . innerText = formatBigNum ( s . bestDiff || 0 ) ;
186- document . getElementById ( 'detailUptime' ) . innerText = "Uptime: " + formatUptime ( s . uptime || 0 ) ;
187- document . getElementById ( 'inputFreq' ) . value = s . frequency || 485 ;
188- document . getElementById ( 'valFreq' ) . innerText = s . frequency || 485 ;
189- document . getElementById ( 'inputVolt' ) . value = s . voltage || 1200 ;
190- document . getElementById ( 'valVolt' ) . innerText = s . voltage || 1200 ;
191- document . getElementById ( 'poolURL' ) . value = s . stratumURL || "" ;
192- document . getElementById ( 'poolUser' ) . value = s . stratumUser || "" ;
193- document . getElementById ( 'poolPass' ) . value = "" ;
193+ setText ( 'detailEff' , eff . toFixed ( 2 ) + " J/TH" ) ;
194+ setText ( 'detailBestDiff' , formatBigNum ( s . bestDiff || 0 ) ) ;
195+ setText ( 'detailUptime' , "Uptime: " + formatUptime ( s . uptime || 0 ) ) ;
196+
197+ setVal ( 'inputFreq' , s . frequency || 485 ) ;
198+ setText ( 'valFreq' , s . frequency || 485 ) ;
199+ setVal ( 'inputVolt' , s . voltage || 1200 ) ;
200+ setText ( 'valVolt' , s . voltage || 1200 ) ;
201+
202+ setVal ( 'poolURL' , s . stratumURL || "" ) ;
203+ setVal ( 'poolUser' , s . stratumUser || "" ) ;
204+ setVal ( 'poolPass' , "" ) ;
205+
194206 resetRebootBtn ( ) ;
195207 document . getElementById ( 'detailModal' ) . classList . remove ( 'hidden' ) ;
196208 document . getElementById ( 'detailModal' ) . classList . add ( 'flex' ) ;
0 commit comments