From 2e2728f4e21ee69bff00768fd398a4591b248fe9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ml=C3=A1dek?= Date: Sat, 16 Jan 2021 14:52:05 +0100 Subject: [PATCH] if ellipse is found, consider it a circle with r=rx+ry/2 (fix #2) --- app/src/components/SVGContent.vue | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/src/components/SVGContent.vue b/app/src/components/SVGContent.vue index 952f292..4e7d5de 100644 --- a/app/src/components/SVGContent.vue +++ b/app/src/components/SVGContent.vue @@ -392,19 +392,25 @@ async function processScrolls(svg: XMLDocument): Promise { } function processAudio(svg: XMLDocument): AudioAreaDef[] { - return Array.from(svg.getElementsByTagName("circle")) + const circles: (SVGCircleElement | SVGEllipseElement)[] = Array.from(svg.getElementsByTagName("circle")); + const ellipses: (SVGCircleElement | SVGEllipseElement)[] = Array.from(svg.getElementsByTagName("ellipse")); + return circles.concat(ellipses) .filter((el) => Array.from(el.children).some((el) => el.tagName == "desc")) .map((el) => { const descNode = Array.from(el.children).find((el) => el.tagName == "desc"); console.debug(`[SVG/AUDIOAREAS] Found audio area #${el.id}: ${descNode?.textContent}`); const audioSrc = descNode!.textContent!.trim(); + const radius = el.hasAttribute("r") ? + (el as SVGCircleElement).r.baseVal.value : + ((el as SVGEllipseElement).rx.baseVal.value + (el as SVGEllipseElement).ry.baseVal.value) / 2; + el.classList.add("internal"); return { cx: el.cx.baseVal.value, cy: el.cy.baseVal.value, - radius: el.r.baseVal.value, + radius, src: `content/${audioSrc}`, }; });