(metrics)
| 41 | } |
| 42 | |
| 43 | function formatMetrics(metrics) { |
| 44 | if (!metrics || typeof metrics !== 'object') return ''; |
| 45 | let rows = Object.entries(metrics).map(([k, v]) => { |
| 46 | let min = 0, max = 1; |
| 47 | if (metricMinMax[k]) { |
| 48 | min = metricMinMax[k].min; |
| 49 | max = metricMinMax[k].max; |
| 50 | } |
| 51 | let valStr = (typeof v === 'number' && isFinite(v)) ? v.toFixed(4) : v; |
| 52 | return `<tr><td style='padding-right:0.7em;'><b>${k}</b></td><td style='padding-right:0.7em;'>${valStr}</td><td style='min-width:90px;'>${typeof v === 'number' ? renderMetricBar(v, min, max) : ''}</td></tr>`; |
| 53 | }).join(''); |
| 54 | return `<table class='metrics-table'><tbody>${rows}</tbody></table>`; |
| 55 | } |
| 56 | |
| 57 | function renderMetricBar(value, min, max, opts={}) { |
| 58 | let percent = 0; |
no test coverage detected