36 lines
1.0 KiB
JavaScript
36 lines
1.0 KiB
JavaScript
// lib/forms/parseFormXml.js
|
|
import xpath from "xpath";
|
|
|
|
/**
|
|
* NOTE: Your current page uses DOMParser, which is available in the browser.
|
|
* For SSR parsing you'd usually use xmldom or a similar package.
|
|
*
|
|
* This module supports BOTH:
|
|
* - Browser: pass DOMParser output doc
|
|
* - Server: if you later add xmldom, pass its doc here
|
|
*/
|
|
|
|
export function getSectionCount(doc) {
|
|
const tabs = xpath.select("/form/tabs/tab[*]", doc);
|
|
return Array.isArray(tabs) ? tabs.length : 0;
|
|
}
|
|
|
|
export function getTabTitles(doc) {
|
|
// same XPath you had
|
|
const titleAttrs = xpath.select(
|
|
"//form/tabs/tab[*]/labels/label[@description]/@description",
|
|
doc
|
|
);
|
|
|
|
if (!Array.isArray(titleAttrs)) return [];
|
|
// Attribute nodes differ by parser; be defensive:
|
|
return titleAttrs
|
|
.map((n) => (typeof n?.value === "string" ? n.value : n?.toString?.()))
|
|
.filter(Boolean);
|
|
}
|
|
|
|
export function getTabs(doc) {
|
|
const tabs = xpath.select("//form/tabs/tab[*]", doc);
|
|
return Array.isArray(tabs) ? tabs : [];
|
|
}
|