From d35e58f076d85689338d32de70fcfe9fad83fc6c Mon Sep 17 00:00:00 2001 From: Benedikt Seeger <benedikt.seeger@ptb.de> Date: Tue, 4 Mar 2025 11:25:42 +0100 Subject: [PATCH] added usedMethodeRenderer --- src/renderers/MeasurementRenderer.js | 14 +++---- src/renderers/UsedMethodsRenderer.js | 60 ++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 8 deletions(-) create mode 100644 src/renderers/UsedMethodsRenderer.js diff --git a/src/renderers/MeasurementRenderer.js b/src/renderers/MeasurementRenderer.js index ef22456..56fe787 100644 --- a/src/renderers/MeasurementRenderer.js +++ b/src/renderers/MeasurementRenderer.js @@ -2,6 +2,7 @@ import Plotly from 'plotly.js-dist'; import { DCCRealListQuantity, DCCConformity } from '../dccQuantity.js'; import JSONEditor from 'jsoneditor'; import 'jsoneditor/dist/jsoneditor.css'; +import { UsedMethodsRenderer } from './UsedMethodsRenderer.js'; const palette = [ '#1f77b4', @@ -97,14 +98,11 @@ export function renderMeasurementResults(measurementResults, language) { renderSingleMeasurementResult(singleResult, language, tabPanel); } - // Add expandable section for Used Methods using JSONEditor - const methodsDetails = document.createElement('details'); - methodsDetails.open = false; - const methodsSummary = document.createElement('summary'); - methodsSummary.textContent = 'Used Methods'; - methodsDetails.appendChild(methodsSummary); - methodsDetails.appendChild(renderUsedMethods(result, language)); - tabPanel.appendChild(methodsDetails); + // Render Used Methods directly (always expanded) + const usedMethodsContainer = document.createElement('div'); + const usedMethodsRenderer = new UsedMethodsRenderer(result['dcc:usedMethods'], language); + usedMethodsContainer.appendChild(usedMethodsRenderer.render()); + tabPanel.appendChild(usedMethodsContainer); // Add expandable section for Influence Conditions using JSONEditor const influenceDetails = document.createElement('details'); diff --git a/src/renderers/UsedMethodsRenderer.js b/src/renderers/UsedMethodsRenderer.js new file mode 100644 index 0000000..a646ce5 --- /dev/null +++ b/src/renderers/UsedMethodsRenderer.js @@ -0,0 +1,60 @@ +export class UsedMethodsRenderer { + constructor(usedMethodsData, language) { + this.usedMethodsData = usedMethodsData; + this.language = language; + } + + render() { + const container = document.createElement('div'); + container.style.marginBottom = '20px'; + container.innerHTML = `<h3>Used Methods</h3>`; + let methods = this.usedMethodsData['dcc:usedMethod']; + if (!methods) { + container.textContent = 'No used methods data available.'; + return container; + } + if (!Array.isArray(methods)) { + methods = [methods]; + } + methods.forEach(method => { + const details = document.createElement('details'); + details.style.border = '1px solid #ccc'; + details.style.padding = '8px'; + details.style.marginBottom = '10px'; + + // Summary: show method name (language-specific), norm and reference + const summary = document.createElement('summary'); + let methodName = ''; + if (method['dcc:name'] && method['dcc:name']['dcc:content']) { + const content = method['dcc:name']['dcc:content']; + methodName = Array.isArray(content) + ? (content.find(item => item.$ && item.$.lang === this.language) || content[0])._ || '' + : content._ || ''; + } + const norm = method['dcc:norm'] || ''; + const reference = method['dcc:reference'] || ''; + summary.innerHTML = `<strong>${methodName}</strong> (${norm})`; + if (reference) { + summary.innerHTML += ` - <a href="${reference}" target="_blank">Reference</a>`; + } + details.appendChild(summary); + + // Expanded content: language-specific description + const contentDiv = document.createElement('div'); + contentDiv.style.marginTop = '8px'; + contentDiv.style.fontFamily = 'sans-serif'; + let description = ''; + if (method['dcc:description'] && method['dcc:description']['dcc:content']) { + const desc = method['dcc:description']['dcc:content']; + description = Array.isArray(desc) + ? (desc.find(c => c.$ && c.$.lang === this.language) || desc[0])._ || '' + : desc._ || ''; + } + contentDiv.innerHTML = description; + details.appendChild(contentDiv); + + container.appendChild(details); + }); + return container; + } +} \ No newline at end of file -- GitLab