( graphicFrame: SafeXmlNode, slideRels: Map<string, RelEntry>, slidePath: string )
| 19 | * @param slidePath Full path of the slide (e.g. "ppt/slides/slide1.xml") |
| 20 | */ |
| 21 | export function parseChartNode( |
| 22 | graphicFrame: SafeXmlNode, |
| 23 | slideRels: Map<string, RelEntry>, |
| 24 | slidePath: string |
| 25 | ): ChartNodeData | undefined { |
| 26 | const base = parseBaseProps(graphicFrame) |
| 27 | |
| 28 | // Find chart relationship |
| 29 | const graphic = graphicFrame.child('graphic') |
| 30 | const graphicData = graphic.child('graphicData') |
| 31 | |
| 32 | // Find the chart reference - look for c:chart element with r:id |
| 33 | let chartRId: string | undefined |
| 34 | for (const child of graphicData.allChildren()) { |
| 35 | if (child.localName === 'chart') { |
| 36 | chartRId = child.attr('r:id') || child.attr('id') |
| 37 | break |
| 38 | } |
| 39 | } |
| 40 | |
| 41 | if (!chartRId) return undefined |
| 42 | |
| 43 | const rel = slideRels.get(chartRId) |
| 44 | if (!rel) return undefined |
| 45 | |
| 46 | // Resolve chart path relative to slide |
| 47 | const slideDir = slidePath.substring(0, slidePath.lastIndexOf('/')) |
| 48 | const chartPath = resolveRelTarget(slideDir, rel.target) |
| 49 | |
| 50 | return { |
| 51 | ...base, |
| 52 | nodeType: 'chart' as const, |
| 53 | chartPath, |
| 54 | } |
| 55 | } |
no test coverage detected