Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion angular.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
{
"type": "anyComponentStyle",
"maximumWarning": "8kb",
"maximumError": "10kb"
"maximumError": "20kb"
}
],
"fileReplacements": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -217,11 +217,13 @@
<span class="cell-with-icon">
<mat-icon
class="cell-icon"
[class.pinned]="isHoverCardPinned(row, column)"
fontIcon="description"
#hoverOriginSpan="cdkOverlayOrigin"
cdkOverlayOrigin
(mouseenter)="hoverKey = makeKey(row, column)"
(mouseleave)="hoverKey = null"
(mouseenter)="onHoverCardTriggerEnter(row, column)"
(mouseleave)="onHoverCardTriggerLeave(row, column)"
(click)="togglePinnedHoverCard($event, row, column)"
></mat-icon>
<span
class="cell-text"
Expand All @@ -231,20 +233,55 @@
<ng-template
cdkConnectedOverlay
[cdkConnectedOverlayOrigin]="hoverOriginSpan"
[cdkConnectedOverlayOpen]="hoverKey === makeKey(row, column)"
[cdkConnectedOverlayOpen]="isHoverCardOpen(row, column)"
[cdkConnectedOverlayPositions]="metadataOverlayPositions"
[cdkConnectedOverlayHasBackdrop]="
isHoverCardPinned(row, column)
"
cdkConnectedOverlayBackdropClass="cdk-overlay-transparent-backdrop"
(backdropClick)="closePinnedHoverCard()"
>
<mat-card class="hover-card">
<mat-card
class="hover-card"
[class.metadata-hover-card]="
isScientificMetadataColumn(column)
"
(mouseenter)="onHoverCardContentEnter(row, column)"
(mouseleave)="onHoverCardContentLeave(row, column)"
(click)="stopEventPropagation($event)"
>
<mat-card-title class="hover-card-title">
{{
column.header || column.name | translate: localization
}}
</mat-card-title>
<div
mat-card-content
class="hover-card-content"
[innerHTML]="metadataNameHoverContent(row)"
></div>
<ng-container
*ngIf="
isScientificMetadataColumn(column);
else metadataNameHoverContentCard
"
>
<div mat-card-content class="hover-card-content">
<div
*ngIf="
hasScientificMetadata(row, column);
else emptyScientificMetadata
"
class="scientific-metadata-hover-content"
>
<tree-view
[metadata]="getScientificMetadata(row, column)"
></tree-view>
</div>
</div>
</ng-container>
<ng-template #metadataNameHoverContentCard>
<div
mat-card-content
class="hover-card-content"
[innerHTML]="metadataNameHoverContent(row)"
></div>
</ng-template>
</mat-card>
</ng-template>
</ng-container>
Expand Down Expand Up @@ -321,25 +358,68 @@
<ng-container *ngIf="column.hoverContent && !column.hoverOnCell">
<span
class="icon-wrapper"
[class.pinned]="pinnedHoverKey && isHoverCardPinned(row, column)"
[class.not-pinned]="
pinnedHoverKey && !isHoverCardPinned(row, column)
"
#hoverOrigin="cdkOverlayOrigin"
cdkOverlayOrigin
(mouseenter)="hoverKey = makeKey(row, column)"
(mouseleave)="hoverKey = null"
(mouseenter)="onHoverCardTriggerEnter(row, column)"
(mouseleave)="onHoverCardTriggerLeave(row, column)"
(click)="togglePinnedHoverCard($event, row, column)"
>
<mat-icon class="hover-icon" fontIcon="description"></mat-icon>
<ng-template
cdkConnectedOverlay
[cdkConnectedOverlayOrigin]="hoverOrigin"
[cdkConnectedOverlayOpen]="hoverKey === makeKey(row, column)"
[cdkConnectedOverlayOpen]="isHoverCardOpen(row, column)"
[cdkConnectedOverlayPositions]="overlayPositions"
[cdkConnectedOverlayHasBackdrop]="isHoverCardPinned(row, column)"
cdkConnectedOverlayBackdropClass="cdk-overlay-transparent-backdrop"
(backdropClick)="closePinnedHoverCard()"
>
<mat-card class="hover-card">
<mat-card
class="hover-card"
[class.metadata-hover-card]="isScientificMetadataColumn(column)"
[class.pinned-card]="pinnedHoverKey"
(mouseenter)="onHoverCardContentEnter(row, column)"
(mouseleave)="onHoverCardContentLeave(row, column)"
(click)="stopEventPropagation($event)"
>
<mat-card-title class="hover-card-title">
{{ column.header || column.name | translate: localization }}
<mat-icon
*ngIf="pinnedHoverKey"
class="pinned-icon"
aria-label="Pinned hover card"
>push_pin</mat-icon
>
</mat-card-title>
<div mat-card-content class="hover-card-content">
{{ getColumnValue(row, column) || "No content" }}
</div>
<ng-container
*ngIf="
isScientificMetadataColumn(column);
else standardHoverContentCard
"
>
<div mat-card-content class="hover-card-content">
<div
*ngIf="
hasScientificMetadata(row, column);
else emptyScientificMetadata
"
class="scientific-metadata-hover-content"
>
<tree-view
[metadata]="getScientificMetadata(row, column)"
></tree-view>
</div>
</div>
</ng-container>
<ng-template #standardHoverContentCard>
<div mat-card-content class="hover-card-content">
{{ getColumnValue(row, column) || "No content" }}
</div>
</ng-template>
</mat-card>
</ng-template>
</span>
Expand All @@ -355,6 +435,10 @@
</mat-footer-cell>
</ng-container>

<ng-template #emptyScientificMetadata>
<div class="hover-card-empty">No content</div>
</ng-template>

<ng-container matColumnDef="progress">
<mat-header-cell
*matHeaderCellDef
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,25 @@ cdk-virtual-scroll-viewport {
display: flex;
justify-content: center;
width: 100%;

&.pinned {
.mat-icon {
position: relative;

&::after {
content: "push_pin";
color: var(--mat-table-row-item-label-text-color);
font-size: 12px;
position: absolute;
bottom: -2px;
right: -2px;
}
}
}

&.not-pinned {
opacity: 0.5;
}
}

.footer-column {
Expand Down Expand Up @@ -333,18 +352,36 @@ cdk-virtual-scroll-viewport {
.hover-card {
min-width: 300px;
max-width: 620px;
max-height: min(70vh, 640px);
display: flex;
flex-direction: column;
}

.metadata-hover-card {
max-width: calc(100vw - 32px);

&.pinned-card {
box-shadow: 0 0 16px rgba(0, 0, 0, 0.5);
}
}

.hover-icon {
color: var(--theme-primary-default);
cursor: pointer;
}

.hover-card-title {
padding: 0 16px;
font-size: 14px;
border-radius: 4px 4px 0 0;
color: white;
color: var(--theme-header-1-lighter-contrast);
background: var(--theme-header-1-lighter);

.pinned-icon {
font-size: inherit;
line-height: inherit;
vertical-align: top;
}
}

.hover-card-content {
Expand All @@ -354,6 +391,22 @@ cdk-virtual-scroll-viewport {
border-radius: 0 0 4px 4px;
white-space: pre-line;
word-wrap: break-word;
overflow: auto;
flex: 1 1 auto;
max-height: min(60vh, 560px);
}

.scientific-metadata-hover-content {
width: 100%;
min-width: min(40vw, 720px);
}

.hover-card-empty {
padding: 4px 0;
}

.icon-wrapper {
display: inline-flex;
}

/* zebra stripes */
Expand Down
Loading
Loading