From 9c3eeef5eb09eb680b16b086b37e453171bca55b Mon Sep 17 00:00:00 2001
From: Braks <78412429+bcakmakoglu@users.noreply.github.com>
Date: Mon, 15 Nov 2021 12:44:09 +0100
Subject: [PATCH] fix: warnings when NaN values are passed to svg
transformations
Signed-off-by: Braks <78412429+bcakmakoglu@users.noreply.github.com>
---
src/additional-components/MiniMap/MiniMap.vue | 45 ++++++++++---------
src/components/Edges/BezierEdge.vue | 12 ++---
src/components/Edges/EdgeAnchor.vue | 15 ++++++-
src/components/Edges/EdgeText.vue | 2 +-
src/components/Edges/SmoothStepEdge.vue | 13 +++---
src/components/Edges/StraightEdge.vue | 20 ++++-----
6 files changed, 62 insertions(+), 45 deletions(-)
diff --git a/src/additional-components/MiniMap/MiniMap.vue b/src/additional-components/MiniMap/MiniMap.vue
index 0cfb617b..2ae9cc18 100644
--- a/src/additional-components/MiniMap/MiniMap.vue
+++ b/src/additional-components/MiniMap/MiniMap.vue
@@ -44,15 +44,16 @@ const nodeClassNameFunc = props.nodeClassName instanceof Function ? props.nodeCl
const shapeRendering: ShapeRendering = typeof window === 'undefined' || !!window.chrome ? 'crispEdges' : 'geometricPrecision'
+const nodes = computed(() => store.nodes.filter((node) => !node.isHidden))
+const bb = computed(() => getRectOfNodes(nodes.value))
+const viewBB = computed(() => ({
+ x: -store.transform[0] / store.transform[2],
+ y: -store.transform[1] / store.transform[2],
+ width: store.dimensions.width / store.transform[2],
+ height: store.dimensions.height / store.transform[2],
+}))
const viewBox = computed(() => {
- const bb = getRectOfNodes(store.nodes)
- const viewBB = {
- x: -store.transform[0] / store.transform[2],
- y: -store.transform[1] / store.transform[2],
- width: store.dimensions.width / store.transform[2],
- height: store.dimensions.height / store.transform[2],
- }
- const boundingRect = store.nodes && store.nodes.length ? getBoundsofRects(bb, viewBB) : viewBB
+ const boundingRect = store.nodes && store.nodes.length ? getBoundsofRects(bb.value, viewBB.value) : viewBB.value
const scaledWidth = boundingRect.width / elementWidth
const scaledHeight = boundingRect.height / elementHeight
const viewScale = Math.max(scaledWidth, scaledHeight)
@@ -60,7 +61,6 @@ const viewBox = computed(() => {
const viewHeight = viewScale * elementHeight
const offset = 5 * viewScale
return {
- viewBB,
offset,
x: boundingRect.x - (viewWidth - boundingRect.width) / 2 - offset,
y: boundingRect.y - (viewHeight - boundingRect.height) / 2 - offset,
@@ -69,13 +69,25 @@ const viewBox = computed(() => {
}
})
-const nodes = computed(() => store.nodes.filter((node) => !node.isHidden))
+const d = computed(() => {
+ if (viewBox.value.x && viewBox.value.y)
+ return `
+ M${viewBox.value.x - viewBox.value.offset},${viewBox.value.y - viewBox.value.offset}
+ h${viewBox.value.width + viewBox.value.offset * 2}
+ v${viewBox.value.height + viewBox.value.offset * 2}
+ h${-viewBox.value.width - viewBox.value.offset * 2}z
+ M${viewBB.value.x},${viewBB.value.y}
+ h${viewBB.value.width}
+ v${viewBB.value.height}
+ h${-viewBB.value.width}z`
+ else return ''
+})
-
+
diff --git a/src/components/Edges/BezierEdge.vue b/src/components/Edges/BezierEdge.vue
index 25393b17..181e4932 100644
--- a/src/components/Edges/BezierEdge.vue
+++ b/src/components/Edges/BezierEdge.vue
@@ -48,11 +48,13 @@ const centered = computed(() =>
...props,
}),
)
-const path = computed(() =>
- getBezierPath({
- ...props,
- }),
-)
+const path = computed(() => {
+ if (props.sourceX && props.sourceY)
+ return getBezierPath({
+ ...props,
+ })
+ else return ''
+})
const markerEnd = computed(() => getMarkerEnd(props.arrowHeadType, props.markerEndId))
diff --git a/src/components/Edges/EdgeAnchor.vue b/src/components/Edges/EdgeAnchor.vue
index 38850c91..e27bee8a 100644
--- a/src/components/Edges/EdgeAnchor.vue
+++ b/src/components/Edges/EdgeAnchor.vue
@@ -23,10 +23,21 @@ interface EdgeAnchorProps extends HTMLAttributes {
const props = withDefaults(defineProps(), {
radius: 10,
+ centerX: 0,
+ centerY: 0,
+ position: Position.Top,
})
-const cx = computed(() => shiftX(props.centerX, props.radius, props.position))
-const cy = computed(() => shiftY(props.centerY, props.radius, props.position))
+const cx = computed(() => {
+ const val = shiftX(props.centerX, props.radius, props.position)
+ if (isNaN(val)) return 0
+ else return val
+})
+const cy = computed(() => {
+ const val = shiftY(props.centerY, props.radius, props.position)
+ if (isNaN(val)) return 0
+ else return val
+})
diff --git a/src/components/Edges/EdgeText.vue b/src/components/Edges/EdgeText.vue
index 09a37808..aa58b50e 100644
--- a/src/components/Edges/EdgeText.vue
+++ b/src/components/Edges/EdgeText.vue
@@ -22,7 +22,7 @@ const props = withDefaults(defineProps(), {
const edgeRef = templateRef('edge-text', null)
const { width, height, x, y } = useElementBounding(edgeRef)
-const transform = computed(() => `translate(${props.x - width.value / 2} ${props.y - height.value / 2})`)
+const transform = computed(() => `translate(${props.x - width.value / 2 || 0} ${props.y - height.value / 2 || 0})`)
const bgPadding = computed(() => [props.labelBgPadding[0], props.labelBgPadding[1]])
diff --git a/src/components/Edges/SmoothStepEdge.vue b/src/components/Edges/SmoothStepEdge.vue
index 88e39e7f..4e2328e6 100644
--- a/src/components/Edges/SmoothStepEdge.vue
+++ b/src/components/Edges/SmoothStepEdge.vue
@@ -50,11 +50,14 @@ const centered = computed(() =>
...props,
}),
)
-const path = computed(() =>
- getSmoothStepPath({
- ...props,
- }),
-)
+
+const path = computed(() => {
+ if (props.sourceX && props.sourceY)
+ return getSmoothStepPath({
+ ...props,
+ })
+ else return ''
+})
const markerEnd = computed(() => getMarkerEnd(props.arrowHeadType, props.markerEndId))
diff --git a/src/components/Edges/StraightEdge.vue b/src/components/Edges/StraightEdge.vue
index 51cce71e..2b60cf5f 100644
--- a/src/components/Edges/StraightEdge.vue
+++ b/src/components/Edges/StraightEdge.vue
@@ -52,21 +52,19 @@ const centerX = computed(() => {
const xOffset = Math.abs(props.targetX - props.sourceX) / 2
return props.targetX < props.sourceX ? props.targetX + xOffset : props.targetX - xOffset
})
-const path = computed(() =>
- getBezierPath({
- ...props,
- }),
-)
+
+const path = computed(() => {
+ if (props.sourceX && props.sourceY)
+ return getBezierPath({
+ ...props,
+ })
+ else return ''
+})
const markerEnd = computed(() => getMarkerEnd(props.arrowHeadType, props.markerEndId))
-
+