Skip to content
Snippets Groups Projects
Commit d02a0070 authored by Benedikt's avatar Benedikt
Browse files

added measEQ render

parent 337f4b73
No related branches found
No related tags found
No related merge requests found
Pipeline #52238 passed
// src/renderers/MeasuringEquipmentRenderer.js
import { DCCRealListQuantity } from "../dccQuantity.js";
export class MeasuringEquipmentRenderer {
constructor(equipmentData, language) {
// equipmentData may be a single object or an array of measuringEquipment elements
this.data = Array.isArray(equipmentData)
? equipmentData
: [equipmentData];
this.language = language;
}
render() {
const container = document.createElement("div");
container.innerHTML = `<h3>Measuring Equipment</h3>`;
this.data.forEach((equip) => {
// Create collapsible section for each equipment
const details = document.createElement("details");
details.style.border = "1px solid #ccc";
details.style.padding = "8px";
details.style.marginBottom = "10px";
// Build the summary (collapsed view)
const summary = document.createElement("summary");
summary.style.fontWeight = "bold";
// Equipment name
const equipName = this._getText(equip["dcc:name"]);
// Manufacturer name (if available)
let manufacturerName = "";
if (equip["dcc:manufacturer"] && equip["dcc:manufacturer"]["dcc:name"]) {
manufacturerName = this._getText(equip["dcc:manufacturer"]["dcc:name"]);
}
// Model
const model = equip["dcc:model"] ? equip["dcc:model"].trim() : "";
// First identification (if available)
let firstId = "";
if (
equip["dcc:identifications"] &&
equip["dcc:identifications"]["dcc:identification"]
) {
let ids = equip["dcc:identifications"]["dcc:identification"];
if (!Array.isArray(ids)) {
ids = [ids];
}
const id0 = ids[0];
// Get identification name (small label) and value
const idName = this._getText(id0["dcc:name"]);
const idValue = id0["dcc:value"] ? id0["dcc:value"].trim() : "";
firstId = `<span style="font-size:smaller;">${idName}: ${idValue}</span>`;
}
summary.innerHTML = `${equipName}${manufacturerName}${model} ${firstId}`;
details.appendChild(summary);
// Expanded content
const contentDiv = document.createElement("div");
contentDiv.style.marginTop = "8px";
contentDiv.style.fontFamily = "sans-serif";
// Render full identifications table
if (equip["dcc:identifications"] && equip["dcc:identifications"]["dcc:identification"]) {
const ids = Array.isArray(equip["dcc:identifications"]["dcc:identification"])
? equip["dcc:identifications"]["dcc:identification"]
: [equip["dcc:identifications"]["dcc:identification"]];
const idTable = document.createElement("table");
idTable.style.width = "100%";
idTable.style.borderCollapse = "collapse";
// Header row
const idHeaderRow = document.createElement("tr");
["Identification", "Issuer", "Value"].forEach((text) => {
const th = document.createElement("th");
th.textContent = text;
th.style.border = "1px solid #ccc";
th.style.padding = "4px";
idHeaderRow.appendChild(th);
});
idTable.appendChild(idHeaderRow);
// Data rows
ids.forEach((id) => {
const tr = document.createElement("tr");
// Identification name (small label)
const tdName = document.createElement("td");
tdName.style.border = "1px solid #ccc";
tdName.style.padding = "4px";
tdName.style.fontSize = "smaller";
tdName.textContent = this._getText(id["dcc:name"]);
tr.appendChild(tdName);
// Issuer
const tdIssuer = document.createElement("td");
tdIssuer.style.border = "1px solid #ccc";
tdIssuer.style.padding = "4px";
tdIssuer.textContent = id["dcc:issuer"] ? id["dcc:issuer"].trim() : "";
tr.appendChild(tdIssuer);
// Value
const tdValue = document.createElement("td");
tdValue.style.border = "1px solid #ccc";
tdValue.style.padding = "4px";
tdValue.textContent = id["dcc:value"] ? id["dcc:value"].trim() : "";
tr.appendChild(tdValue);
idTable.appendChild(tr);
});
contentDiv.appendChild(idTable);
}
// Render measuring equipment quantities table (if available)
if (
equip["dcc:measuringEquipmentQuantities"] &&
equip["dcc:measuringEquipmentQuantities"]["dcc:measuringEquipmentQuantity"]
) {
const qtys = Array.isArray(
equip["dcc:measuringEquipmentQuantities"]["dcc:measuringEquipmentQuantity"]
)
? equip["dcc:measuringEquipmentQuantities"]["dcc:measuringEquipmentQuantity"]
: [equip["dcc:measuringEquipmentQuantities"]["dcc:measuringEquipmentQuantity"]];
const qtyTable = document.createElement("table");
qtyTable.style.width = "100%";
qtyTable.style.borderCollapse = "collapse";
// Header row
const qtyHeaderRow = document.createElement("tr");
["Quantity", "Value", "Unit", "Uncertainty"].forEach((text) => {
const th = document.createElement("th");
th.textContent = text;
th.style.border = "1px solid #ccc";
th.style.padding = "4px";
qtyHeaderRow.appendChild(th);
});
qtyTable.appendChild(qtyHeaderRow);
// Data rows: use DCCRealListQuantity for each measuringEquipmentQuantity
qtys.forEach((q) => {
const row = document.createElement("tr");
// Quantity name
const tdName = document.createElement("td");
tdName.style.border = "1px solid #ccc";
tdName.style.padding = "4px";
tdName.textContent = this._getText(q["dcc:name"]);
row.appendChild(tdName);
// Value
const tdValue = document.createElement("td");
tdValue.style.border = "1px solid #ccc";
tdValue.style.padding = "4px";
// Create a DCCRealListQuantity instance to extract values, unit, uncertainty
const realQty = new DCCRealListQuantity(q);
const values = realQty.getValues();
tdValue.textContent = values.join(" / ");
row.appendChild(tdValue);
// Unit
const tdUnit = document.createElement("td");
tdUnit.style.border = "1px solid #ccc";
tdUnit.style.padding = "4px";
const rawUnit = q["si:realListXMLList"] && q["si:realListXMLList"]["si:unitXMLList"]
? q["si:realListXMLList"]["si:unitXMLList"].trim()
: "";
if (rawUnit) {
const unitObj = new DSIUnit(rawUnit);
// Here we return plain text instead of HTML markup for the table cell
tdUnit.textContent = unitObj.toString();
}
row.appendChild(tdUnit);
// Uncertainty
const tdUnc = document.createElement("td");
tdUnc.style.border = "1px solid #ccc";
tdUnc.style.padding = "4px";
const uncValues = realQty.getUncertainty();
tdUnc.textContent = uncValues.length ? uncValues.join(" / ") : "";
row.appendChild(tdUnc);
qtyTable.appendChild(row);
});
contentDiv.appendChild(qtyTable);
}
// Append expanded content to details
details.appendChild(contentDiv);
container.appendChild(details);
});
return container;
}
// Helper to extract language-specific text from a node
_getText(node) {
if (!node) return "";
const content = node["dcc:content"];
if (Array.isArray(content)) {
const match = content.find((item) => item.$ && item.$.lang === this.language) || content[0];
return match._ || match;
}
return content._ || content;
}
// (Optional) You can add additional helper methods to render other parts of the data
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment