diff --git a/src/renderers/MeasurementRenderer.js b/src/renderers/MeasurementRenderer.js index 0a63c399bcab6d968322667b6e8b263938647b34..47f6a6c0bca31376d7dc7c1998d71ec1e45a470a 100644 --- a/src/renderers/MeasurementRenderer.js +++ b/src/renderers/MeasurementRenderer.js @@ -101,36 +101,30 @@ export function renderMeasurementResults(measurementResults, language) { const indexQuantities = []; const dataQuantities = []; - // extraInfo: for each data quantity, store { uncertainty, comments: [{ comment, validArray }], conformity } const extraInfo = []; quantityJSONs.forEach(q => { if (q.$ && q.$.refType && q.$.refType.match(/basic_tableIndex/)) { indexQuantities.push(new DCCRealListQuantity(q)); } else { - dataQuantities.push(new DCCRealListQuantity(q)); - const uncertainty = (new DCCRealListQuantity(q)).getUncertainty(); - let comments = []; + const quantity = new DCCRealListQuantity(q); + dataQuantities.push(quantity); + let uncertainty = quantity.getUncertainty(); + let comment = ''; let conformity = null; if (q['dcc:measurementMetaData'] && q['dcc:measurementMetaData']['dcc:metaData']) { let md = q['dcc:measurementMetaData']['dcc:metaData']; if (!Array.isArray(md)) { md = [md]; } md.forEach(item => { if (item.$ && item.$.refType && item.$.refType.includes('basic_tableRowComment')) { - let commentText = ''; if (item['dcc:description'] && item['dcc:description']['dcc:content']) { let desc = item['dcc:description']['dcc:content']; if (Array.isArray(desc)) { const match = desc.find(d => d.$ && d.$.lang === language) || desc[0]; - commentText = match._ || match; + comment = match._ || match; } else { - commentText = desc._ || desc; + comment = desc._ || desc; } } - let validArray = []; - if (item['dcc:validXMLList']) { - validArray = item['dcc:validXMLList'].trim().split(/\s+/); - } - comments.push({ comment: commentText, valid: validArray }); } if (item.$ && item.$.refType && item.$.refType.includes('basic_conformity')) { if (item['dcc:conformityXMLList']) { @@ -139,11 +133,10 @@ export function renderMeasurementResults(measurementResults, language) { } }); } - extraInfo.push({ uncertainty, comments, conformity }); + extraInfo.push({ uncertainty, comment, conformity }); } }); - // Build data headers array for each data quantity const dataHeaders = dataQuantities.map((q, idx) => { let header = q.getName(language); let unit = q.getUnit(); @@ -153,7 +146,6 @@ export function renderMeasurementResults(measurementResults, language) { return header; }); - // Create scaling toggles for log axes const scalingContainer = document.createElement('div'); scalingContainer.innerHTML = '<strong>Scaling:</strong> '; const logXToggle = document.createElement('input'); @@ -227,7 +219,6 @@ export function renderMeasurementResults(measurementResults, language) { const conformityArray = []; extraInfo.forEach((info, idx) => { headers.push(dataHeaders[idx]); - // Only include Conformity header if conformity exists for this quantity if (info.conformity) { headers.push('Conformity'); } dataValues.push(dataQuantities[idx].getValues()); uncertaintiesArray.push(info.uncertainty || []); @@ -249,18 +240,11 @@ export function renderMeasurementResults(measurementResults, language) { row.push(info.conformity[i] || ''); } }); - // For comments, combine all comments valid at this row from all quantities - let rowComments = extraInfo.map(info => { - if (info.comments) { - // info.comments is an array of { comment, valid } objects - return info.comments.filter(cObj => cObj.valid[i] === 'true').map(cObj => cObj.comment).join(' ; '); - } - return ''; - }).filter(c => c).join(' | '); - row.push(rowComments); + // Comments column remains uncolored + row.push(extraInfo.map(info => info.comment).filter(c => c).join(' ; ')); tableData.push(row); } - renderTable(tableData); + renderTable(tableData, headers); const unitGroups = {}; dataQuantities.forEach((q, idx) => { @@ -273,7 +257,7 @@ export function renderMeasurementResults(measurementResults, language) { const defaultColor = palette[idx % palette.length]; const markerColorArray = values.map((val, i) => { if (conformity && conformity[i] && conformity[i].toLowerCase().includes('fail')) { - return '#d62728'; + return conformityColors.fail; } return defaultColor; }); @@ -301,7 +285,9 @@ export function renderMeasurementResults(measurementResults, language) { y: trace.y, error_y: { type: 'data', - array: (trace.uncertainty && trace.uncertainty.length === xValues.length) ? trace.uncertainty : new Array(xValues.length).fill(0), + array: (trace.uncertainty && trace.uncertainty.length === xValues.length) + ? trace.uncertainty + : new Array(xValues.length).fill(0), visible: true, color: trace.defaultColor }, @@ -311,7 +297,9 @@ export function renderMeasurementResults(measurementResults, language) { marker: { color: trace.markerColor }, line: { color: trace.defaultColor }, hovertemplate: tooltip, - customdata: (trace.conformity && trace.conformity.length === xValues.length) ? trace.conformity : new Array(xValues.length).fill('') + customdata: (trace.conformity && trace.conformity.length === xValues.length) + ? trace.conformity + : new Array(xValues.length).fill('') }; }); let xaxisTitle = ''; @@ -361,7 +349,7 @@ export function renderMeasurementResults(measurementResults, language) { }); } - function renderTable(tableData) { + function renderTable(tableData, headers) { const tableContainer = document.getElementById('tableContainer'); tableContainer.innerHTML = ''; const table = document.createElement('table'); @@ -372,9 +360,7 @@ export function renderMeasurementResults(measurementResults, language) { if (rowIndex === 0) { cell.innerHTML = cellData; if (cellData !== 'Comments' && cellIndex > 0) { - // Use correct header mapping: assume each quantity occupies either 1 (if no conformity) or 2 columns. - // We'll compute the index based on dataHeaders length. - const qtyIndex = cellIndex % 2 === 1 ? Math.floor(cellIndex / 2) : Math.floor((cellIndex - 1) / 2); + const qtyIndex = Math.floor((cellIndex - 1) / 2); cell.style.backgroundColor = lightPalette[qtyIndex % lightPalette.length]; } } else { @@ -393,9 +379,7 @@ export function renderMeasurementResults(measurementResults, language) { function highlightTableRow(rowIndex) { const rows = document.getElementById('tableContainer').querySelectorAll('tr'); - if (rows[rowIndex]) { - rows[rowIndex].style.backgroundColor = '#fee'; - } + if (rows[rowIndex]) { rows[rowIndex].style.backgroundColor = '#fee'; } } function clearTableRowHighlights() {