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