Highlight url input/output in tx diagram & list
This commit is contained in:
		
							parent
							
								
									626a1a2977
								
							
						
					
					
						commit
						75fd036ec2
					
				@ -209,6 +209,7 @@
 | 
				
			|||||||
            [maxStrands]="graphExpanded ? maxInOut : 24"
 | 
					            [maxStrands]="graphExpanded ? maxInOut : 24"
 | 
				
			||||||
            [network]="network"
 | 
					            [network]="network"
 | 
				
			||||||
            [tooltip]="true"
 | 
					            [tooltip]="true"
 | 
				
			||||||
 | 
					            [inputIndex]="inputIndex" [outputIndex]="outputIndex"
 | 
				
			||||||
            (selectInput)="selectInput($event)"
 | 
					            (selectInput)="selectInput($event)"
 | 
				
			||||||
            (selectOutput)="selectOutput($event)"
 | 
					            (selectOutput)="selectOutput($event)"
 | 
				
			||||||
          >
 | 
					          >
 | 
				
			||||||
 | 
				
			|||||||
@ -122,8 +122,15 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy {
 | 
				
			|||||||
      .pipe(
 | 
					      .pipe(
 | 
				
			||||||
        switchMap((params: ParamMap) => {
 | 
					        switchMap((params: ParamMap) => {
 | 
				
			||||||
          const urlMatch = (params.get('id') || '').split(':');
 | 
					          const urlMatch = (params.get('id') || '').split(':');
 | 
				
			||||||
 | 
					          if (urlMatch.length === 2 && urlMatch[1].length === 64) {
 | 
				
			||||||
 | 
					            this.inputIndex = parseInt(urlMatch[0], 10);
 | 
				
			||||||
 | 
					            this.outputIndex = null;
 | 
				
			||||||
 | 
					            this.txId = urlMatch[1];
 | 
				
			||||||
 | 
					          } else {
 | 
				
			||||||
            this.txId = urlMatch[0];
 | 
					            this.txId = urlMatch[0];
 | 
				
			||||||
            this.outputIndex = urlMatch[1] === undefined ? null : parseInt(urlMatch[1], 10);
 | 
					            this.outputIndex = urlMatch[1] === undefined ? null : parseInt(urlMatch[1], 10);
 | 
				
			||||||
 | 
					            this.inputIndex = null;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
          this.seoService.setTitle(
 | 
					          this.seoService.setTitle(
 | 
				
			||||||
            $localize`:@@bisq.transaction.browser-title:Transaction: ${this.txId}:INTERPOLATION:`
 | 
					            $localize`:@@bisq.transaction.browser-title:Transaction: ${this.txId}:INTERPOLATION:`
 | 
				
			||||||
          );
 | 
					          );
 | 
				
			||||||
 | 
				
			|||||||
@ -220,7 +220,7 @@
 | 
				
			|||||||
                      <fa-icon [icon]="['fas', 'arrow-alt-circle-right']" [fixedWidth]="true"></fa-icon>
 | 
					                      <fa-icon [icon]="['fas', 'arrow-alt-circle-right']" [fixedWidth]="true"></fa-icon>
 | 
				
			||||||
                    </span>
 | 
					                    </span>
 | 
				
			||||||
                    <ng-template #spent>
 | 
					                    <ng-template #spent>
 | 
				
			||||||
                      <a *ngIf="tx._outspends[vindex].txid else outputNoTxId" [routerLink]="['/tx/' | relativeUrl, tx._outspends[vindex].txid]" class="red">
 | 
					                      <a *ngIf="tx._outspends[vindex].txid else outputNoTxId" [routerLink]="['/tx/' | relativeUrl, tx._outspends[vindex].vin + ':' + tx._outspends[vindex].txid]" class="red">
 | 
				
			||||||
                        <fa-icon [icon]="['fas', 'arrow-alt-circle-right']" [fixedWidth]="true"></fa-icon>
 | 
					                        <fa-icon [icon]="['fas', 'arrow-alt-circle-right']" [fixedWidth]="true"></fa-icon>
 | 
				
			||||||
                      </a>
 | 
					                      </a>
 | 
				
			||||||
                      <ng-template #outputNoTxId>
 | 
					                      <ng-template #outputNoTxId>
 | 
				
			||||||
 | 
				
			|||||||
@ -104,7 +104,7 @@ export class TransactionsListComponent implements OnInit, OnChanges {
 | 
				
			|||||||
    if (changes.inputIndex || changes.outputIndex || changes.rowLimit) {
 | 
					    if (changes.inputIndex || changes.outputIndex || changes.rowLimit) {
 | 
				
			||||||
      this.inputRowLimit = Math.max(this.rowLimit, (this.inputIndex || 0) + 3);
 | 
					      this.inputRowLimit = Math.max(this.rowLimit, (this.inputIndex || 0) + 3);
 | 
				
			||||||
      this.outputRowLimit = Math.max(this.rowLimit, (this.outputIndex || 0) + 3);
 | 
					      this.outputRowLimit = Math.max(this.rowLimit, (this.outputIndex || 0) + 3);
 | 
				
			||||||
      if (this.inputIndex || this.outputIndex) {
 | 
					      if ((this.inputIndex || this.outputIndex) && !changes.transactions) {
 | 
				
			||||||
        setTimeout(() => {
 | 
					        setTimeout(() => {
 | 
				
			||||||
          const assetBoxElements = document.getElementsByClassName('assetBox');
 | 
					          const assetBoxElements = document.getElementsByClassName('assetBox');
 | 
				
			||||||
          if (assetBoxElements && assetBoxElements[0]) {
 | 
					          if (assetBoxElements && assetBoxElements[0]) {
 | 
				
			||||||
 | 
				
			|||||||
@ -41,6 +41,18 @@
 | 
				
			|||||||
        <stop offset="98%" [attr.stop-color]="gradient[0]" />
 | 
					        <stop offset="98%" [attr.stop-color]="gradient[0]" />
 | 
				
			||||||
        <stop offset="100%" [attr.stop-color]="gradient[0]" />
 | 
					        <stop offset="100%" [attr.stop-color]="gradient[0]" />
 | 
				
			||||||
      </linearGradient>
 | 
					      </linearGradient>
 | 
				
			||||||
 | 
					      <linearGradient id="input-highlight-gradient" x1="0%" y1="0%" x2="100%" y2="0%">
 | 
				
			||||||
 | 
					      <stop offset="0%" [attr.stop-color]="gradient[0]" />
 | 
				
			||||||
 | 
					      <stop offset="2%" [attr.stop-color]="gradient[0]" />
 | 
				
			||||||
 | 
					        <stop offset="30%" stop-color="#1bd8f4" />
 | 
				
			||||||
 | 
					        <stop offset="100%" [attr.stop-color]="gradient[1]" />
 | 
				
			||||||
 | 
					      </linearGradient>
 | 
				
			||||||
 | 
					      <linearGradient id="output-highlight-gradient" x1="0%" y1="0%" x2="100%" y2="0%">
 | 
				
			||||||
 | 
					        <stop offset="0%" [attr.stop-color]="gradient[1]" />
 | 
				
			||||||
 | 
					        <stop offset="70%" stop-color="#1bd8f4" />
 | 
				
			||||||
 | 
					        <stop offset="98%" [attr.stop-color]="gradient[0]" />
 | 
				
			||||||
 | 
					        <stop offset="100%" [attr.stop-color]="gradient[0]" />
 | 
				
			||||||
 | 
					      </linearGradient>
 | 
				
			||||||
      <linearGradient id="fee-hover-gradient" x1="0%" y1="0%" x2="100%" y2="0%">
 | 
					      <linearGradient id="fee-hover-gradient" x1="0%" y1="0%" x2="100%" y2="0%">
 | 
				
			||||||
        <stop offset="0%" [attr.stop-color]="gradient[1]" />
 | 
					        <stop offset="0%" [attr.stop-color]="gradient[1]" />
 | 
				
			||||||
        <stop offset="100%" stop-color="white" />
 | 
					        <stop offset="100%" stop-color="white" />
 | 
				
			||||||
@ -56,6 +68,7 @@
 | 
				
			|||||||
      <path
 | 
					      <path
 | 
				
			||||||
        [attr.d]="input.path"
 | 
					        [attr.d]="input.path"
 | 
				
			||||||
        class="line {{input.class}}"
 | 
					        class="line {{input.class}}"
 | 
				
			||||||
 | 
					        [class.highlight]="inputData[i].index === inputIndex"
 | 
				
			||||||
        [style]="input.style"
 | 
					        [style]="input.style"
 | 
				
			||||||
        attr.marker-start="url(#{{input.class}}-arrow)"
 | 
					        attr.marker-start="url(#{{input.class}}-arrow)"
 | 
				
			||||||
        (pointerover)="onHover($event, 'input', i);"
 | 
					        (pointerover)="onHover($event, 'input', i);"
 | 
				
			||||||
@ -67,6 +80,7 @@
 | 
				
			|||||||
      <path
 | 
					      <path
 | 
				
			||||||
        [attr.d]="output.path"
 | 
					        [attr.d]="output.path"
 | 
				
			||||||
        class="line {{output.class}}"
 | 
					        class="line {{output.class}}"
 | 
				
			||||||
 | 
					        [class.highlight]="outputData[i].index === outputIndex"
 | 
				
			||||||
        [style]="output.style"
 | 
					        [style]="output.style"
 | 
				
			||||||
        attr.marker-start="url(#{{output.class}}-arrow)"
 | 
					        attr.marker-start="url(#{{output.class}}-arrow)"
 | 
				
			||||||
        (pointerover)="onHover($event, 'output', i);"
 | 
					        (pointerover)="onHover($event, 'output', i);"
 | 
				
			||||||
 | 
				
			|||||||
@ -12,6 +12,17 @@
 | 
				
			|||||||
      stroke: url(#fee-gradient);
 | 
					      stroke: url(#fee-gradient);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    &.highlight {
 | 
				
			||||||
 | 
					      z-index: 8;
 | 
				
			||||||
 | 
					      cursor: pointer;
 | 
				
			||||||
 | 
					      &.input {
 | 
				
			||||||
 | 
					        stroke: url(#input-highlight-gradient);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      &.output {
 | 
				
			||||||
 | 
					        stroke: url(#output-highlight-gradient);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    &:hover {
 | 
					    &:hover {
 | 
				
			||||||
      z-index: 10;
 | 
					      z-index: 10;
 | 
				
			||||||
      cursor: pointer;
 | 
					      cursor: pointer;
 | 
				
			||||||
 | 
				
			|||||||
@ -40,6 +40,8 @@ export class TxBowtieGraphComponent implements OnInit, OnChanges {
 | 
				
			|||||||
  @Input() minWeight = 2; //
 | 
					  @Input() minWeight = 2; //
 | 
				
			||||||
  @Input() maxStrands = 24; // number of inputs/outputs to keep fully on-screen.
 | 
					  @Input() maxStrands = 24; // number of inputs/outputs to keep fully on-screen.
 | 
				
			||||||
  @Input() tooltip = false;
 | 
					  @Input() tooltip = false;
 | 
				
			||||||
 | 
					  @Input() inputIndex: number;
 | 
				
			||||||
 | 
					  @Input() outputIndex: number;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @Output() selectInput = new EventEmitter<number>();
 | 
					  @Output() selectInput = new EventEmitter<number>();
 | 
				
			||||||
  @Output() selectOutput = new EventEmitter<number>();
 | 
					  @Output() selectOutput = new EventEmitter<number>();
 | 
				
			||||||
@ -378,7 +380,7 @@ export class TxBowtieGraphComponent implements OnInit, OnChanges {
 | 
				
			|||||||
      const output = this.tx.vout[index];
 | 
					      const output = this.tx.vout[index];
 | 
				
			||||||
      const outspend = this.outspends[index];
 | 
					      const outspend = this.outspends[index];
 | 
				
			||||||
      if (output && outspend && outspend.spent && outspend.txid) {
 | 
					      if (output && outspend && outspend.spent && outspend.txid) {
 | 
				
			||||||
        this.router.navigate([this.relativeUrlPipe.transform('/tx'), outspend.txid], {
 | 
					        this.router.navigate([this.relativeUrlPipe.transform('/tx'), outspend.vin + ':' + outspend.txid], {
 | 
				
			||||||
          queryParamsHandling: 'merge',
 | 
					          queryParamsHandling: 'merge',
 | 
				
			||||||
          fragment: 'flow'
 | 
					          fragment: 'flow'
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user