<!--
~ Copyright 2018-present Open Networking Foundation
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~     http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<svg:defs xmlns:svg="http://www.w3.org/2000/svg">
    <svg:filter id="glow">
        <svg:feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0.9 0 0 0 0 0.9 0 0 0 0 1 0" />
        <svg:feGaussianBlur stdDeviation="2.5" result="coloredBlur" />
        <svg:feMerge>
            <svg:feMergeNode in="coloredBlur" />
            <svg:feMergeNode in="SourceGraphic"/>
        </svg:feMerge>
    </svg:filter>
</svg:defs>
<!-- Template explanation: Creates an SVG Line and in
    line 1) transform end A to the position calculated by the d3 force graph engine
    line 2) transform end B to the position calculated by the d3 force graph engine
    line 3) Give it various CSS styles depending on attributes
    ling 4) Change the line width depending on the scale
    line 4) When it is clicked, call the method that toggles the selection and
        emits an event.
    line 5) When the mouse is moved over call on enhance() function. This will
        flash up the port labels, and display the link in blue for 1 second
    Other child objects have their own description
-->
<svg:line xmlns:svg="http://www.w3.org/2000/svg"
        [attr.x1]="link.source?.x" [attr.y1]="link.source?.y"
        [attr.x2]="link.target?.x" [attr.y2]="link.target?.y"
        [ngClass]="['link', selected?'selected':'', enhanced?'enhanced':'', highlighted]"
        [ngStyle]="{'stroke-width': (enhanced ? 4 : 2) * scale + 'px'}"
        (click)="toggleSelected(link, $event)"
        (mouseover)="enhance()"
        [attr.filter]="highlighted?'url(#glow)':'none'">
</svg:line>
<svg:g xmlns:svg="http://www.w3.org/2000/svg"
       [ngClass]="['linkLabel']"
       [attr.transform]="'scale(' + scale + ')'">
    <!-- Template explanation: Creates SVG Text in the middle of the link to
          show traffic and in:
        line 1) Performs the animation 'linkLabelVisible' whenever the isHighlighted
            boolean value changes
        line 2 & 3) Sets the text at half way between the 2 end points of the line
        Note: we do not use an *ngIf to enable or disable this, because that would
        cause the fade out of the text to not work
    -->
    <svg:text xmlns:svg="http://www.w3.org/2000/svg"
              [@linkLabelVisible]="isHighlighted"
              [attr.x]="link.source?.x + (link.target?.x - link.source?.x)/2"
              [attr.y]="link.source?.y + (link.target?.y - link.source?.y)/2"
    >{{ label }}</svg:text>
</svg:g>
<!-- Template explanation: Creates an SVG Group if
    line 1) 'enhanced' is active and port text exists
    line 2) assigns classes to it
-->
<svg:g xmlns:svg="http://www.w3.org/2000/svg"
       *ngIf="enhanced && link.portA"
       class="portLabel"
       [attr.transform]="'translate(' + labelPosSrc.x + ',' + labelPosSrc.y + '),scale(' + scale + ')'">
    <!-- Template explanation: Creates an SVG Rectangle and in
        line 1) transform end A to the position calculated by the d3 force graph engine
        line 2) assigns classes to it
    -->
    <svg:rect
            [attr.x]="2 - textLength(link.portA)/2" y="-8"
            [attr.width]="4 + textLength(link.portA)" height="16" >
    </svg:rect>
    <!-- Template explanation: Creates SVG Text and in
        line 1) transform it to the position calculated by the method labelPosSrc()
        line 2) centre aligns it
        line 3) ensures that the text fills the rectangle by adjusting spacing
    -->
    <svg:text y="2" text-anchor="middle"
            [attr.textLength]= "textLength(link.portA)" lengthAdjust="spacing"
    >{{ link.portA }}</svg:text>
</svg:g>
<!-- A repeat of the above, but for the other end of the line -->
<svg:g xmlns:svg="http://www.w3.org/2000/svg"
       *ngIf="enhanced && link.portB"
       class="portLabel"
       [attr.transform]="'translate(' + labelPosTgt.x + ',' + labelPosTgt.y + '),scale(' + scale + ')'">
    <svg:rect
            [attr.x]="2 - textLength(link.portB)/2" y="-8"
            [attr.width]="4 + textLength(link.portB)" height="16">
    </svg:rect>
    <svg:text x="2" y="2" text-anchor="middle"
            [attr.textLength]= "textLength(link.portB)" lengthAdjust="spacing"
    >{{ link.portB }}</svg:text>
</svg:g>
