<!--
~ 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)"
        (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>
