()
| 3338 | |
| 3339 | function wifiHeatmapSetMetric(v) { |
| 3340 | _wifiHm.metric = (_WIFI_HM_METRICS[v] || v === 'serving' || v === 'handoff') ? v : 'rssi'; |
| 3341 | wifiHeatmapRender(); |
| 3342 | } |
| 3343 | |
| 3344 | function wifiHeatmapRenderLegend() { |
| 3345 | const el = document.getElementById('wifi-hm-legend'); if (!el) return; |
| 3346 | // Mesh maps have their own legends (node colours / hand-off bands). |
| 3347 | if (_wifiHm.mode !== 'design' && (_wifiHm.metric === 'serving' || _wifiHm.metric === 'handoff')) { |
| 3348 | if (_wifiHm.metric === 'serving') { |
| 3349 | const nodes = _wifiMeshNodeList(); |
| 3350 | const reg = (_wifiHm.data && _wifiHm.data.mesh_nodes) || {}; |
| 3351 | el.innerHTML = '<span>Serving node:</span> ' + (nodes.length ? nodes.map((b, i) => |
| 3352 | `<span class="flex items-center gap-1"><span style="width:10px;height:10px;border-radius:2px;display:inline-block;background:${_wifiMeshColor(b)}"></span>${String.fromCharCode(65 + i)} <span class="text-gray-500 font-mono text-[10px]">${b.slice(9)}</span><span class="text-gray-600">${reg[b] ? ' ' + reg[b].band + 'G ch' + reg[b].channel : ''}</span></span>` |
| 3353 | ).join('') : '<span class="text-gray-500">walk the space to map which node serves where</span>'); |
| 3354 | } else { |
| 3355 | el.innerHTML = '<span>Hand-off overlap:</span>' |
| 3356 | + '<span class="flex items-center gap-1"><span style="width:10px;height:10px;border-radius:2px;display:inline-block;background:#22c55e"></span>good (<6 dB)</span>' |
no test coverage detected