import { HTMLappendIt, Positionable, svgNamespace } from "../types";
export class SVGArrow implements HTMLappendIt {
group;
lineText;
line;
from: Positionable;
to: Positionable;
constructor(from: Positionable, to: Positionable) {
this.from = from;
this.to = to;
this.group = document.createElementNS(svgNamespace, 'g');
this.group.classList.add("PEdge");
this.line = document.createElementNS(svgNamespace, 'line');
this.line.setAttribute('marker-end', "url(#arrowhead)");
this.group.setAttribute('transform', `translate(0, 0)`);
// Create the text inside the circle
this.lineText = document.createElementNS(svgNamespace, 'text');
this.lineText.classList.add("lineText");
this.lineText.setAttribute('x', '0');
this.lineText.setAttribute('y', '0');
this.lineText.textContent = "";
this.group.appendChild(this.line);
this.group.appendChild(this.lineText);
this.updatePosition();
}
updatePosition() {
let dx = this.to.x - this.from.x;
let dy = this.to.y - this.from.y;
let l = Math.sqrt(dx * dx + dy * dy);
dx /= l;
dy /= l;
this.line.setAttribute('x1', this.from.x + dx * 30);
this.line.setAttribute('y1', this.from.y + dy * 30);
this.line.setAttribute('x2', this.to.x - dx * 40);
this.line.setAttribute('y2', this.to.y - dy * 40);
}
appendIt(svg) {
svg.appendChild(this.group);
}
}