mirror of
https://github.com/goharbor/harbor.git
synced 2025-01-31 03:51:23 +01:00
Fix issue from louis and improve artifact list
Signed-off-by: Yogi_Wang <yawang@vmware.com>
This commit is contained in:
parent
beddef6873
commit
99d02a14f5
@ -1,5 +1,5 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 log-top">
|
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 reverse-row log-top">
|
||||||
<div class="row flex-items-xs-right option-right display-f">
|
<div class="row flex-items-xs-right option-right display-f">
|
||||||
<div class="flex-xs-middle">
|
<div class="flex-xs-middle">
|
||||||
<button class="btn btn-link" (click)="toggleOptionalName(currentOption)">{{toggleName[currentOption] | translate}}</button>
|
<button class="btn btn-link" (click)="toggleOptionalName(currentOption)">{{toggleName[currentOption] | translate}}</button>
|
||||||
|
@ -26,3 +26,17 @@
|
|||||||
.display-f{
|
.display-f{
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
.reverse-row {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row-reverse;
|
||||||
|
align-items: baseline;
|
||||||
|
}
|
||||||
|
.flex-items-xs-right {
|
||||||
|
display: flex;
|
||||||
|
align-items: baseline;
|
||||||
|
::ng-deep {
|
||||||
|
clr-date-container{
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -43,4 +43,8 @@ clr-datagrid {
|
|||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dropdown-header {
|
||||||
|
text-transform: none;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -84,12 +84,6 @@ export class ProjectDetailComponent implements OnInit, AfterViewInit, OnDestroy
|
|||||||
showTabName: "SCANNER.SCANNER",
|
showTabName: "SCANNER.SCANNER",
|
||||||
permissions: () => this.hasScannerReadPermission
|
permissions: () => this.hasScannerReadPermission
|
||||||
},
|
},
|
||||||
{
|
|
||||||
linkName: "configs",
|
|
||||||
tabLinkInOverflow: false,
|
|
||||||
showTabName: "PROJECT_DETAIL.CONFIG",
|
|
||||||
permissions: () => this.isSessionValid && this.hasConfigurationListPermission
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
linkName: "tag-strategy",
|
linkName: "tag-strategy",
|
||||||
tabLinkInOverflow: false,
|
tabLinkInOverflow: false,
|
||||||
@ -113,6 +107,12 @@ export class ProjectDetailComponent implements OnInit, AfterViewInit, OnDestroy
|
|||||||
tabLinkInOverflow: false,
|
tabLinkInOverflow: false,
|
||||||
showTabName: "PROJECT_DETAIL.LOGS",
|
showTabName: "PROJECT_DETAIL.LOGS",
|
||||||
permissions: () => this.hasLogListPermission
|
permissions: () => this.hasLogListPermission
|
||||||
|
},
|
||||||
|
{
|
||||||
|
linkName: "configs",
|
||||||
|
tabLinkInOverflow: false,
|
||||||
|
showTabName: "PROJECT_DETAIL.CONFIG",
|
||||||
|
permissions: () => this.isSessionValid && this.hasConfigurationListPermission
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
previousWindowWidth: number;
|
previousWindowWidth: number;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
@import "../../lib/mixin";
|
@import "../../lib/mixin";
|
||||||
.header-title {
|
.header-title {
|
||||||
margin-top: 0;
|
margin-top: 34px;
|
||||||
|
margin-bottom: -34px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.option-left {
|
.option-left {
|
||||||
@ -21,6 +22,7 @@
|
|||||||
}
|
}
|
||||||
.rightPos {
|
.rightPos {
|
||||||
@include grid-right-top-pos;
|
@include grid-right-top-pos;
|
||||||
|
margin-top: 28px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.projectPos {
|
.projectPos {
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
<div class="clr-input-wrapper">
|
<div class="clr-input-wrapper">
|
||||||
<div class="clr-input-wrapper name">
|
<div class="clr-input-wrapper name">
|
||||||
<span id="scanner-name" class="scanner-name">{{scanner?.name}}</span>
|
<span id="scanner-name" class="scanner-name">{{scanner?.name}}</span>
|
||||||
<button *ngIf="hasCreatePermission && scanners && scanners.length > 0" id="edit-scanner" class="btn btn-primary " (click)="open()">{{'SCANNER.EDIT' | translate}}</button>
|
|
||||||
<span *ngIf="scanner?.disabled" class="label label-warning ml-1">{{'SCANNER.DISABLED' | translate}}</span>
|
<span *ngIf="scanner?.disabled" class="label label-warning ml-1">{{'SCANNER.DISABLED' | translate}}</span>
|
||||||
<span *ngIf="scanner?.health === 'unhealthy'" class="label label-danger ml-1">{{'SCANNER.UNHEALTHY' | translate}}</span>
|
<span *ngIf="scanner?.health === 'unhealthy'" class="label label-danger ml-1">{{'SCANNER.UNHEALTHY' | translate}}</span>
|
||||||
<span *ngIf="scanner?.health === 'healthy'" class="label label-success ml-1">{{'SCANNER.HEALTHY' | translate}}</span>
|
<span *ngIf="scanner?.health === 'healthy'" class="label label-success ml-1">{{'SCANNER.HEALTHY' | translate}}</span>
|
||||||
@ -62,7 +61,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
<button *ngIf="hasCreatePermission && scanners && scanners.length > 0" id="edit-scanner" type="button" (click)="open()" class="btn btn-secondary mt-1">{{'SCANNER.SELECT_SCANNER' | translate}}</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<clr-modal [clrModalSize]="'xl'" [(clrModalOpen)]="opened" [clrModalStaticBackdrop]="true" [clrModalClosable]="false">
|
<clr-modal [clrModalSize]="'xl'" [(clrModalOpen)]="opened" [clrModalStaticBackdrop]="true" [clrModalClosable]="false">
|
||||||
<h3 class="modal-title">{{'SCANNER.SELECT_SCANNER' | translate}}</h3>
|
<h3 class="modal-title">{{'SCANNER.SELECT_SCANNER' | translate}}</h3>
|
||||||
<div class="modal-body body-format">
|
<div class="modal-body body-format">
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
<button type="button" id="new-webhook-continue" class="btn btn-primary" [disabled]="!isValid" (click)="onSubmit()">{{'BUTTON.CONTINUE' | translate}}</button>
|
<button type="button" id="new-webhook-continue" class="btn btn-primary" [disabled]="!isValid" (click)="onSubmit()">{{'BUTTON.CONTINUE' | translate}}</button>
|
||||||
<button type="button" [clrLoading]="checkBtnState" class="btn btn-outline" (click)="onTestEndpoint()" [disabled]="checking || enpointURL.errors">{{'WEBHOOK.TEST_ENDPOINT_BUTTON' | translate}}</button>
|
<button type="button" [clrLoading]="checkBtnState" class="btn btn-outline" (click)="onTestEndpoint()" [disabled]="checking || enpointURL.errors">{{'WEBHOOK.TEST_ENDPOINT_BUTTON' | translate}}</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-1" *ngIf="isModify">
|
<div class="mt-1 bottom-btn" *ngIf="isModify">
|
||||||
<button type="button" [clrLoading]="checkBtnState" class="btn btn-outline" id="webhook-test" (click)="onTestEndpoint()" [disabled]="checking || enpointURL.errors">{{'WEBHOOK.TEST_ENDPOINT_BUTTON' | translate}}</button>
|
<button type="button" [clrLoading]="checkBtnState" class="btn btn-outline" id="webhook-test" (click)="onTestEndpoint()" [disabled]="checking || enpointURL.errors">{{'WEBHOOK.TEST_ENDPOINT_BUTTON' | translate}}</button>
|
||||||
<button type="button" class="btn btn-outline" id="edit-webhook-cancel" (click)="onCancel()">{{'BUTTON.CANCEL' | translate}}</button>
|
<button type="button" class="btn btn-outline" id="edit-webhook-cancel" (click)="onCancel()">{{'BUTTON.CANCEL' | translate}}</button>
|
||||||
<button type="button" class="btn btn-primary" id="edit-webhook-save" [disabled]="!isValid" (click)="onSubmit()">{{'BUTTON.SAVE' | translate}}</button>
|
<button type="button" class="btn btn-primary" id="edit-webhook-save" [disabled]="!isValid" (click)="onSubmit()">{{'BUTTON.SAVE' | translate}}</button>
|
||||||
|
@ -4,3 +4,7 @@
|
|||||||
.padding-top-3 {
|
.padding-top-3 {
|
||||||
padding-top: 3px;
|
padding-top: 3px;
|
||||||
}
|
}
|
||||||
|
.bottom-btn {
|
||||||
|
text-align: right;
|
||||||
|
margin-right: 3.4rem;
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
<clr-modal [(clrModalOpen)]="opened" [clrModalClosable]="false" [clrModalStaticBackdrop]="true">
|
<clr-modal [(clrModalOpen)]="opened" [clrModalClosable]="false" [clrModalStaticBackdrop]="true">
|
||||||
<h3 class="modal-title confirmation-title">{{dialogTitle}}</h3>
|
<h3 class="modal-title confirmation-title">{{dialogTitle}}</h3>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<div class="confirmation-icon-inline">
|
<div class="confirmation-icon-inline" *ngIf="buttons!==2">
|
||||||
<clr-icon shape="warning" class="is-warning" size="64"></clr-icon>
|
<clr-icon shape="warning" class="is-warning" size="64"></clr-icon>
|
||||||
</div>
|
</div>
|
||||||
<div class="confirmation-content">{{dialogContent}}</div>
|
<div class="confirmation-content">{{dialogContent}}</div>
|
||||||
|
@ -8,3 +8,4 @@
|
|||||||
margin-right: 0px !important;
|
margin-right: 0px !important;
|
||||||
top: 2px;
|
top: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
10
src/portal/src/app/user/new-user-madal.component.scss
Normal file
10
src/portal/src/app/user/new-user-madal.component.scss
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
::ng-deep {
|
||||||
|
.modal-title {
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
.modal-header {
|
||||||
|
.modal-title {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -24,7 +24,7 @@ import { MessageHandlerService } from '../shared/message-handler/message-handler
|
|||||||
@Component({
|
@Component({
|
||||||
selector: "new-user-modal",
|
selector: "new-user-modal",
|
||||||
templateUrl: "new-user-modal.component.html",
|
templateUrl: "new-user-modal.component.html",
|
||||||
styleUrls: ['../common.scss']
|
styleUrls: ['../common.scss', "./new-user-madal.component.scss"]
|
||||||
})
|
})
|
||||||
|
|
||||||
export class NewUserModalComponent {
|
export class NewUserModalComponent {
|
||||||
|
@ -184,3 +184,4 @@ hbr-tag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -314,7 +314,7 @@
|
|||||||
"OF": "of",
|
"OF": "of",
|
||||||
"SWITCH_TITLE": "Confirm project members switch",
|
"SWITCH_TITLE": "Confirm project members switch",
|
||||||
"SWITCH_SUMMARY": "Do you want to switch project members {{param}}?",
|
"SWITCH_SUMMARY": "Do you want to switch project members {{param}}?",
|
||||||
"SET_ROLE": "SET ROLE",
|
"SET_ROLE": "Set Role",
|
||||||
"REMOVE": "Remove"
|
"REMOVE": "Remove"
|
||||||
},
|
},
|
||||||
"ROBOT_ACCOUNT": {
|
"ROBOT_ACCOUNT": {
|
||||||
@ -1025,6 +1025,7 @@
|
|||||||
"PULL_TIME": "Pull Time",
|
"PULL_TIME": "Pull Time",
|
||||||
"PUSH_TIME": "Push Time",
|
"PUSH_TIME": "Push Time",
|
||||||
"OF": "of",
|
"OF": "of",
|
||||||
|
"ITEMS": "items",
|
||||||
"ADD_TAG": "ADD TAG",
|
"ADD_TAG": "ADD TAG",
|
||||||
"REMOVE_TAG": "REMOVE TAG"
|
"REMOVE_TAG": "REMOVE TAG"
|
||||||
},
|
},
|
||||||
|
@ -315,7 +315,7 @@
|
|||||||
"OF": "of",
|
"OF": "of",
|
||||||
"SWITCH_TITLE": "Confirm project members switch",
|
"SWITCH_TITLE": "Confirm project members switch",
|
||||||
"SWITCH_SUMMARY": "Do you want to switch project members {{param}}?",
|
"SWITCH_SUMMARY": "Do you want to switch project members {{param}}?",
|
||||||
"SET_ROLE": "SET ROLE",
|
"SET_ROLE": "Set Role",
|
||||||
"REMOVE": "Remove"
|
"REMOVE": "Remove"
|
||||||
},
|
},
|
||||||
"ROBOT_ACCOUNT": {
|
"ROBOT_ACCOUNT": {
|
||||||
@ -1019,6 +1019,7 @@
|
|||||||
"LABELS": "Labels",
|
"LABELS": "Labels",
|
||||||
"CREATION": "Tiempo de creación",
|
"CREATION": "Tiempo de creación",
|
||||||
"COMMAND": "Mando",
|
"COMMAND": "Mando",
|
||||||
|
"ITEMS": "items",
|
||||||
"UPLOADTIME": "Upload Time",
|
"UPLOADTIME": "Upload Time",
|
||||||
"NAME": "Name",
|
"NAME": "Name",
|
||||||
"PULL_TIME": "Pull Time",
|
"PULL_TIME": "Pull Time",
|
||||||
|
@ -306,7 +306,7 @@
|
|||||||
"DELETED_SUCCESS": "Membre supprimé avec succès.",
|
"DELETED_SUCCESS": "Membre supprimé avec succès.",
|
||||||
"SWITCHED_SUCCESS": "Rôle du membre changé avec succés.",
|
"SWITCHED_SUCCESS": "Rôle du membre changé avec succés.",
|
||||||
"OF": "de",
|
"OF": "de",
|
||||||
"SET_ROLE": "SET ROLE",
|
"SET_ROLE": "Set Role",
|
||||||
"REMOVE": "Remove"
|
"REMOVE": "Remove"
|
||||||
},
|
},
|
||||||
"ROBOT_ACCOUNT": {
|
"ROBOT_ACCOUNT": {
|
||||||
@ -996,6 +996,7 @@
|
|||||||
"PULL_TIME": "Pull Time",
|
"PULL_TIME": "Pull Time",
|
||||||
"PUSH_TIME": "Push Time",
|
"PUSH_TIME": "Push Time",
|
||||||
"OF": "of",
|
"OF": "of",
|
||||||
|
"ITEMS": "items",
|
||||||
"ADD_TAG": "ADD TAG",
|
"ADD_TAG": "ADD TAG",
|
||||||
"REMOVE_TAG": "REMOVE TAG"
|
"REMOVE_TAG": "REMOVE TAG"
|
||||||
},
|
},
|
||||||
|
@ -1017,6 +1017,7 @@
|
|||||||
"PULL_TIME": "Pull Time",
|
"PULL_TIME": "Pull Time",
|
||||||
"PUSH_TIME": "Push Time",
|
"PUSH_TIME": "Push Time",
|
||||||
"OF": "of",
|
"OF": "of",
|
||||||
|
"ITEMS": "items",
|
||||||
"ADD_TAG": "ADD TAG",
|
"ADD_TAG": "ADD TAG",
|
||||||
"REMOVE_TAG": "REMOVE TAG"
|
"REMOVE_TAG": "REMOVE TAG"
|
||||||
},
|
},
|
||||||
|
@ -1024,6 +1024,7 @@
|
|||||||
"PULL_TIME": "Pull Time",
|
"PULL_TIME": "Pull Time",
|
||||||
"PUSH_TIME": "Push Time",
|
"PUSH_TIME": "Push Time",
|
||||||
"OF": "of",
|
"OF": "of",
|
||||||
|
"ITEMS": "items",
|
||||||
"ADD_TAG": "ADD TAG",
|
"ADD_TAG": "ADD TAG",
|
||||||
"REMOVE_TAG": "REMOVE TAG"
|
"REMOVE_TAG": "REMOVE TAG"
|
||||||
},
|
},
|
||||||
|
35
src/portal/src/images/cnab.svg
Normal file
35
src/portal/src/images/cnab.svg
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="132px" height="144px" viewBox="0 0 132 144" enable-background="new 0 0 132 144" xml:space="preserve"> <image id="image0" width="132" height="144" x="0" y="0"
|
||||||
|
href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIQAAACQCAMAAAD+3TMYAAAABGdBTUEAALGPC/xhBQAAACBjSFJN
|
||||||
|
AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABklBMVEUAAAA3Mqo4Mqo4NKs4
|
||||||
|
MarM/2bM/2bM/2bM/2bM/2bN/2nM/2bN/2bN/2nM/2bN/2fO/2fM/2bM/2bQ/2vM/2bM/2fS/2nM
|
||||||
|
/2bN/2bO/2vM/2bN/2fQ/2jM/2bM/2fV/2rM/2bN/2bO/23M/2bM/2bV/3HM/2bN/2bP/3DM/2bM
|
||||||
|
/2bY/3bM/2bN/2bR/3TM/2bM/2fj/3HM/2bN/2fb/23M/2bN/2bV/4DM/2bM/2f//4DM/2bM/2b/
|
||||||
|
/6rM/2bN/2f//4DM/2bN/2b////M/2bN/2fM/2bM/2bM/2bM/2bM/2b/VarqNobpNoToN4TpN4Po
|
||||||
|
N4TqQJXqOIXpNoToNoPqN4rvOIfoN4PpNoPoOIXoN4TqQIrpN4TrN4fpN4PqOIXqOIXqOITqOoTo
|
||||||
|
NoToNoPrPIY3MarM/2bT3fessuReW73qRIvpOoXrTo/uYprxf6n1m7j6xc7/7+T/8+boNoPpPYfv
|
||||||
|
ap/3rMH+6uL819jpN4Pwd6X929r0mLfuYJn94t3rS477zdP4tMUuxLb4s8T///9wvo0QAAAAZnRS
|
||||||
|
TlMA+dtAwL48uTe0M6/+Lqr9KqX8JqD7Ipv5H5b4G5H2GIz0FYfyEoLvEH3tDXjqC3PnCW7kB2ng
|
||||||
|
BmTdBF/ZA1rVAlXRAVDMS8hGw0EGPXadxN8MYLj1JSCn/Xv2GMcz41Z3Vz7s+Sacrx9IAAAAAWJL
|
||||||
|
R0RDZ9ANYgAAAAd0SU1FB+QCEREnOtJJMj4AAAO8SURBVHja7dxnc9pAEIBh2ZDee++9916c3ohx
|
||||||
|
70kcO4mUBGxcDnc79YcHmaaC0N7eLsdktN/8AXjm1SHgpLFhQseQHvhTR4gIURHR0Bg+8gjAkzY4
|
||||||
|
EIhXoJnGCBEhaBGxWB0g4nH9iJhpUqRQQ8RNkyKFEiJmP4oghRIibj+KIEUQwgqaFZ4Q/hRfoYNH
|
||||||
|
rPSE8KfgR6zyhfCl4Ees9oXwpWBHrKkQwpuCHbG2QghvCm7EuoohPCmYEes3VAzhScGM2BgQwp2C
|
||||||
|
F7Fpc0AIdwpexJbAEK4UrIit2wJDuFKwIrZXCeFMwYnYsbNKCGcKTsSuqiEcKRgRu/dUDeFIwYjY
|
||||||
|
GxKinIIPsW9/SIhyCj7EgdAQpRRsiIOHQkOUUrAhDgNCFFNwIY4cBYQopuBCHAOFKKRgQhw/AQpR
|
||||||
|
SIFG+MaFOAkMkU8hjwgap+HUaWCIfAoexBlwiOUULIiz58AhllOwIM5LhLBTcCAuXJQIYafgQFyS
|
||||||
|
CpFLwYC4fEUqRC4FA+KqZAjT/EaOuHZdMoRpfidH3JAOAU8BRdy8JR0CngKKuI0IAU4BRNy5iwgB
|
||||||
|
TgFE3EOFgKaAIe4/QIWApoAhHiJDAFOAEE2PkCFodrzziMfoEDSb/zbiyVN0CKIUOcQzhRA0KSzr
|
||||||
|
ueMv6RA0KSzrhVIIkhTWS7UQJCmsV4ohKFK8Vg1BkeKNcgiic4VaCKrTZuJtc7KlNZVOp0ZGM2Pj
|
||||||
|
E5OSoy5oa+/oFK7JTk3P1BTRlfQICo7MbM0Q3T29ImDm5hdqgkj09Ysqk12ELg4Fw8A7ETJLP7gR
|
||||||
|
7z+EGYT4+YsXMdgfbsgdkt+ciI8Qgj1jfIghqEEIQAvkegAdi8IRCV8XKMMAYE06VmfoewRjSIS+
|
||||||
|
N92z5Dlf/JGaAESfnEGIRXpEt8SCKCyLBXJEj6xBiHlqRFevPGJulhiRlDcIkaFFtHViENkZUkQ7
|
||||||
|
xiDENCmiA4eYokQkUEcjdzwmCBHDOIMQ44SIZixijBCBeoPakyFEtGARo4SIVixihBDxCYtIESI+
|
||||||
|
YxHp/w1RF4ejLhZmXbxF6+JkpfW0Xbx1QesHWBGh9aO8dBOHzi81JYTOr3clhM4vuuV7ajR+5S8j
|
||||||
|
NP74cdxdpO9noAOh7wex8z4rbVsDToS2TRLXHWeK20U0CMWNMyKEMQhH+LcQqRBKm6lkCGMItq38
|
||||||
|
d5ITobDBTojAX2qgRKAvupAisJefiBGG8QVxIY4cgbkkyYCwF8ew1MVZHoTk1AUCPREiQkSICBEh
|
||||||
|
8q8A/scojAO+IypCRAjv/APqQg4umgliaAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMC0wMi0xOFQw
|
||||||
|
MDozOTo1OC0wNzowMNnr4mMAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjAtMDItMThUMDA6Mzk6NTgt
|
||||||
|
MDc6MDCotlrfAAAAAElFTkSuQmCC" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.8 KiB |
@ -75,7 +75,7 @@
|
|||||||
<clr-icon shape="shield-check" size="16"></clr-icon> {{'VULNERABILITY.SCAN_NOW' | translate}}
|
<clr-icon shape="shield-check" size="16"></clr-icon> {{'VULNERABILITY.SCAN_NOW' | translate}}
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<clr-dropdown class="btn btn-link mt-1">
|
<clr-dropdown class="btn btn-link">
|
||||||
<span clrDropdownTrigger id="artifact-list-action" class="btn pl-0">
|
<span clrDropdownTrigger id="artifact-list-action" class="btn pl-0">
|
||||||
{{'BUTTON.ACTIONS' | translate}}
|
{{'BUTTON.ACTIONS' | translate}}
|
||||||
<clr-icon shape="caret down"></clr-icon>
|
<clr-icon shape="caret down"></clr-icon>
|
||||||
@ -144,7 +144,7 @@
|
|||||||
<clr-dg-cell class="truncated flex-max-width">
|
<clr-dg-cell class="truncated flex-max-width">
|
||||||
<div class="cell white-normal">
|
<div class="cell white-normal">
|
||||||
<img class="artifact-icon"
|
<img class="artifact-icon"
|
||||||
[src]="artifact.type==='IMAGE'||artifact.type==='CHART'?'images/artifact-'+artifact.type.toLowerCase()+'.svg':'images/artifact-default.svg'" />
|
[src]="artifact.type==='IMAGE'||artifact.type==='CHART'||artifact.type ==='CNAB'?'images/artifact-'+artifact.type.toLowerCase()+'.svg':'images/artifact-default.svg'" />
|
||||||
|
|
||||||
<a href="javascript:void(0)" class="max-width-100" (click)="onTagClick(artifact)"
|
<a href="javascript:void(0)" class="max-width-100" (click)="onTagClick(artifact)"
|
||||||
title="{{artifact.digest}}">
|
title="{{artifact.digest}}">
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
right: 35px;
|
right: 35px;
|
||||||
margin-top: 20px;
|
margin-top: 34px;
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -313,6 +313,11 @@ export class ArtifactListTabComponent implements OnInit, AfterViewInit {
|
|||||||
|
|
||||||
// Pagination
|
// Pagination
|
||||||
let params = new HttpParams();
|
let params = new HttpParams();
|
||||||
|
params = params.set('with_label', 'true');
|
||||||
|
params = params.set('with_scan_overview', 'true');
|
||||||
|
params = params.set('with_signature', 'true');
|
||||||
|
params = params.set('with_immutable_status', 'true');
|
||||||
|
|
||||||
if (pageNumber && this.pageSize) {
|
if (pageNumber && this.pageSize) {
|
||||||
params = params.set('page', pageNumber + '').set('page_size', this.pageSize + '');
|
params = params.set('page', pageNumber + '').set('page_size', this.pageSize + '');
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,10 @@ export class ArtifactSummaryComponent implements OnInit {
|
|||||||
repositoryName: this.repositoryName,
|
repositoryName: this.repositoryName,
|
||||||
reference: this.artifactDigest,
|
reference: this.artifactDigest,
|
||||||
projectName: this.projectName,
|
projectName: this.projectName,
|
||||||
|
withLabel: true,
|
||||||
|
withScanOverview: true,
|
||||||
|
withSignature: true,
|
||||||
|
withImmutableStatus: true
|
||||||
}).subscribe(response => {
|
}).subscribe(response => {
|
||||||
this.artifact = response;
|
this.artifact = response;
|
||||||
}, error => {
|
}, error => {
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
</form>
|
</form>
|
||||||
</clr-dg-action-bar>
|
</clr-dg-action-bar>
|
||||||
<clr-dg-column [clrDgField]="'name'">{{'TAG.NAME' | translate}}</clr-dg-column>
|
<clr-dg-column [clrDgField]="'name'">{{'TAG.NAME' | translate}}</clr-dg-column>
|
||||||
|
<clr-dg-column >{{'REPOSITORY.SIGNED' | translate}}</clr-dg-column>
|
||||||
<clr-dg-column>{{'TAG.PULL_TIME' | translate}}</clr-dg-column>
|
<clr-dg-column>{{'TAG.PULL_TIME' | translate}}</clr-dg-column>
|
||||||
<clr-dg-column>{{'TAG.PUSH_TIME' | translate}}</clr-dg-column>
|
<clr-dg-column>{{'TAG.PUSH_TIME' | translate}}</clr-dg-column>
|
||||||
|
|
||||||
@ -43,6 +44,16 @@
|
|||||||
<span *ngIf="tag.immutable" class="label label-info ml-8">{{'REPOSITORY.IMMUTABLE' | translate}}</span>
|
<span *ngIf="tag.immutable" class="label label-info ml-8">{{'REPOSITORY.IMMUTABLE' | translate}}</span>
|
||||||
</div>
|
</div>
|
||||||
</clr-dg-cell>
|
</clr-dg-cell>
|
||||||
|
<clr-dg-cell [ngSwitch]="tag.signature != null">
|
||||||
|
<div class="cell">
|
||||||
|
<clr-icon shape="check-circle" *ngSwitchCase="true" size="20" class="color-green"></clr-icon>
|
||||||
|
<clr-icon shape="times-circle" *ngSwitchCase="false" size="16" class="color-red"></clr-icon>
|
||||||
|
<a href="javascript:void(0)" *ngSwitchDefault role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right">
|
||||||
|
<clr-icon shape="help" class="color-gray" size="16"></clr-icon>
|
||||||
|
<span class="tooltip-content">{{'REPOSITORY.NOTARY_IS_UNDETERMINED' | translate}}</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</clr-dg-cell>
|
||||||
<clr-dg-cell>{{tag.pull_time !== availableTime? (tag.pull_time | date: 'short') : ""}}</clr-dg-cell>
|
<clr-dg-cell>{{tag.pull_time !== availableTime? (tag.pull_time | date: 'short') : ""}}</clr-dg-cell>
|
||||||
<clr-dg-cell>{{tag.push_time | date: 'short'}}</clr-dg-cell>
|
<clr-dg-cell>{{tag.push_time | date: 'short'}}</clr-dg-cell>
|
||||||
</clr-dg-row>
|
</clr-dg-row>
|
||||||
|
@ -4,17 +4,18 @@
|
|||||||
.default-quota-text {
|
.default-quota-text {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
text-transform: uppercase;
|
|
||||||
font-family: Metropolis, "Avenir Next", "Helvetica Neue", Arial, sans-serif;
|
font-family: Metropolis, "Avenir Next", "Helvetica Neue", Arial, sans-serif;
|
||||||
.width-10rem {
|
.width-10rem {
|
||||||
width: 15rem;
|
width: 15rem;
|
||||||
|
font-size: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.num-count {
|
.num-count {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
min-width: 2rem;
|
min-width: 2rem;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 18px;
|
font-size: 15px;
|
||||||
|
text-transform: uppercase;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -48,14 +48,14 @@
|
|||||||
|
|
||||||
</clr-input-container>
|
</clr-input-container>
|
||||||
<label *ngIf="canDownloadCert" for="certDownloadLink"
|
<label *ngIf="canDownloadCert" for="certDownloadLink"
|
||||||
class="required clr-control-label mt-1">{{'CONFIG.ROOT_CERT' | translate}}
|
class="clr-control-label cert-down-label mt-1">{{'CONFIG.ROOT_CERT' | translate}}
|
||||||
<a #certDownloadLink [href]="downloadLink" target="_blank">{{'CONFIG.ROOT_CERT_LINK' | translate}}</a>
|
|
||||||
<clr-tooltip>
|
<clr-tooltip>
|
||||||
<clr-icon clrTooltipTrigger shape="info-circle" size="24"></clr-icon>
|
<clr-icon clrTooltipTrigger shape="info-circle" size="24"></clr-icon>
|
||||||
<clr-tooltip-content clrPosition="top-right" clrSize="lg" *clrIfOpen>
|
<clr-tooltip-content clrPosition="top-right" clrSize="lg" *clrIfOpen>
|
||||||
<span>{{'CONFIG.TOOLTIP.ROOT_CERT_DOWNLOAD' | translate}}</span>
|
<span>{{'CONFIG.TOOLTIP.ROOT_CERT_DOWNLOAD' | translate}}</span>
|
||||||
</clr-tooltip-content>
|
</clr-tooltip-content>
|
||||||
</clr-tooltip>
|
</clr-tooltip>
|
||||||
|
<a #certDownloadLink class="cert-down" [href]="downloadLink" target="_blank">{{'CONFIG.ROOT_CERT_LINK' | translate}}</a>
|
||||||
</label>
|
</label>
|
||||||
<clr-checkbox-container *ngIf="!withAdmiral">
|
<clr-checkbox-container *ngIf="!withAdmiral">
|
||||||
<label id="repo_read_only_lbl" for="repoReadOnly">{{'CONFIG.REPO_READ_ONLY' | translate}}
|
<label id="repo_read_only_lbl" for="repoReadOnly">{{'CONFIG.REPO_READ_ONLY' | translate}}
|
||||||
|
@ -103,3 +103,13 @@
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.cert-down-label {
|
||||||
|
position: relative;
|
||||||
|
.cert-down {
|
||||||
|
position: absolute;
|
||||||
|
left: 240px;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -67,7 +67,7 @@
|
|||||||
<div class="clr-form-control">
|
<div class="clr-form-control">
|
||||||
<label for="destination_password" class="clr-control-label">{{ 'DESTINATION.ACCESS_SECRET' | translate }}</label>
|
<label for="destination_password" class="clr-control-label">{{ 'DESTINATION.ACCESS_SECRET' | translate }}</label>
|
||||||
<div class="clr-control-container">
|
<div class="clr-control-container">
|
||||||
<div class="clr-textarea-wrapper">
|
<div class="clr-textarea-wrapper mt-0">
|
||||||
<input autocomplete="off" class="clr-input" *ngIf="isNormalCredential();else gcr_secret" type="password" placeholder="Access Secret"
|
<input autocomplete="off" class="clr-input" *ngIf="isNormalCredential();else gcr_secret" type="password" placeholder="Access Secret"
|
||||||
id="destination_password" [disabled]="testOngoing" [readonly]="!editable" [(ngModel)]="target.credential.access_secret"
|
id="destination_password" [disabled]="testOngoing" [readonly]="!editable" [(ngModel)]="target.credential.access_secret"
|
||||||
size="30" name="access_secret" #access_secret="ngModel">
|
size="30" name="access_secret" #access_secret="ngModel">
|
||||||
@ -80,8 +80,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- Verify Remote Cert -->
|
<!-- Verify Remote Cert -->
|
||||||
<clr-checkbox-container>
|
<clr-checkbox-container>
|
||||||
<label id="destination_insecure_checkbox"
|
<label class="destination-insecure-label" id="destination_insecure_checkbox"
|
||||||
for="destination_insecure">{{'CONFIG.VERIFY_REMOTE_CERT' | translate }}
|
for="destination_insecure"><span>{{'CONFIG.VERIFY_REMOTE_CERT' | translate }}</span>
|
||||||
<clr-tooltip>
|
<clr-tooltip>
|
||||||
<clr-icon clrTooltipTrigger shape="info-circle" size="24"></clr-icon>
|
<clr-icon clrTooltipTrigger shape="info-circle" size="24"></clr-icon>
|
||||||
<clr-tooltip-content clrPosition="top-right" clrSize="md" *clrIfOpen>
|
<clr-tooltip-content clrPosition="top-right" clrSize="md" *clrIfOpen>
|
||||||
|
@ -3,11 +3,6 @@
|
|||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
clr-tooltip {
|
|
||||||
top: 3px;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.form-height {
|
.form-height {
|
||||||
height: 30px;
|
height: 30px;
|
||||||
}
|
}
|
||||||
@ -65,3 +60,7 @@
|
|||||||
.endpoint-input {
|
.endpoint-input {
|
||||||
padding-right: 21px;
|
padding-right: 21px;
|
||||||
}
|
}
|
||||||
|
.destination-insecure-label {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
@ -287,3 +287,13 @@ clr-modal {
|
|||||||
.select-width {
|
.select-width {
|
||||||
min-width:11rem;
|
min-width:11rem;
|
||||||
}
|
}
|
||||||
|
::ng-deep {
|
||||||
|
.modal-title {
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
.modal-header {
|
||||||
|
.modal-title {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -34,7 +34,7 @@ export class LabelPieceComponent implements OnInit, OnChanges {
|
|||||||
ngOnChanges(): void {
|
ngOnChanges(): void {
|
||||||
if (this.label) {
|
if (this.label) {
|
||||||
let color = this.label.color;
|
let color = this.label.color;
|
||||||
if (color === '') {color = '#FFFFFF'; }
|
if (!color) {color = '#FFFFFF'; }
|
||||||
this.labelColor = LabelColor.find(data => data.color === color);
|
this.labelColor = LabelColor.find(data => data.color === color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
padding: 8px 5px 8px 10px; border-bottom: 1px solid #ccc;}
|
padding: 8px 5px 8px 10px; border-bottom: 1px solid #ccc;}
|
||||||
.iconsArea{ flex-shrink: 1;}
|
.iconsArea{ flex-shrink: 1;}
|
||||||
.infoArea{ margin-left: 10px; width: 270px;}
|
.infoArea{ margin-left: 10px; width: 270px;}
|
||||||
.eventName{display: block; margin-bottom: -5px;font-size: 16px; color: rgb(11, 127, 189); }
|
.eventName{display: block; margin-bottom: -5px;font-size: 16px; }
|
||||||
.eventErrorInf {display:block; font-size: 12px;color:red;line-height: .6rem;}
|
.eventErrorInf {display:block; font-size: 12px;color:red;line-height: .6rem;}
|
||||||
.eventTarget{display: inline-flex; width: 172px; font-size: 12px; flex-shrink:1; overflow: hidden; text-overflow: ellipsis;white-space: nowrap;}
|
.eventTarget{display: inline-flex; width: 172px; font-size: 12px; flex-shrink:1; overflow: hidden; text-overflow: ellipsis;white-space: nowrap;}
|
||||||
.eventTime{ float: right; font-size: 12px;}
|
.eventTime{ float: right; font-size: 12px;}
|
||||||
|
@ -60,16 +60,16 @@
|
|||||||
<label for="systemWhitelist" class="clr-control-label">{{'CVE_WHITELIST.CVE_WHITELIST'|translate}}</label>
|
<label for="systemWhitelist" class="clr-control-label">{{'CVE_WHITELIST.CVE_WHITELIST'|translate}}</label>
|
||||||
<div class="w-100 clr-control-container">
|
<div class="w-100 clr-control-container">
|
||||||
<div class="config-subtext">
|
<div class="config-subtext">
|
||||||
<div class="mt-05">
|
<div>
|
||||||
<span>{{'CVE_WHITELIST.PRO_WHITELIST_EXPLAIN'|translate}}</span>
|
<span>{{'CVE_WHITELIST.PRO_WHITELIST_EXPLAIN'|translate}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-05">
|
<div>
|
||||||
<span>{{'CVE_WHITELIST.PRO_OR_SYS'|translate}}</span>
|
<span>{{'CVE_WHITELIST.PRO_OR_SYS'|translate}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-05">
|
<div>
|
||||||
<span>{{'CVE_WHITELIST.MERGE_INTO'|translate}}</span>
|
<span>{{'CVE_WHITELIST.MERGE_INTO'|translate}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="hasExpired" class="mt-05">
|
<div *ngIf="hasExpired">
|
||||||
<span *ngIf="isUseSystemWhitelist()"
|
<span *ngIf="isUseSystemWhitelist()"
|
||||||
class="label label-warning">{{'CVE_WHITELIST.WARNING_SYS'|translate}}</span>
|
class="label label-warning">{{'CVE_WHITELIST.WARNING_SYS'|translate}}</span>
|
||||||
<span *ngIf="!isUseSystemWhitelist()"
|
<span *ngIf="!isUseSystemWhitelist()"
|
||||||
|
@ -75,10 +75,6 @@
|
|||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mt-05 {
|
|
||||||
margin-bottom: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.col-flex-grow-0 {
|
.col-flex-grow-0 {
|
||||||
flex-grow: 0;
|
flex-grow: 0;
|
||||||
}
|
}
|
||||||
|
@ -53,24 +53,17 @@
|
|||||||
</div>
|
</div>
|
||||||
</clr-dg-action-bar>
|
</clr-dg-action-bar>
|
||||||
<clr-dg-column [clrDgSortBy]="'id'">{{'REPLICATION.ID' | translate}}</clr-dg-column>
|
<clr-dg-column [clrDgSortBy]="'id'">{{'REPLICATION.ID' | translate}}</clr-dg-column>
|
||||||
|
<clr-dg-column [clrDgField]="'status'">{{'REPLICATION.STATUS' | translate}}</clr-dg-column>
|
||||||
<clr-dg-column [clrDgField]="'trigger'">{{'REPLICATION.REPLICATION_TRIGGER' | translate}}</clr-dg-column>
|
<clr-dg-column [clrDgField]="'trigger'">{{'REPLICATION.REPLICATION_TRIGGER' | translate}}</clr-dg-column>
|
||||||
<clr-dg-column [clrDgSortBy]="creationTimeComparator">{{'REPLICATION.CREATION_TIME' | translate}}</clr-dg-column>
|
<clr-dg-column [clrDgSortBy]="creationTimeComparator">{{'REPLICATION.CREATION_TIME' | translate}}</clr-dg-column>
|
||||||
<clr-dg-column>{{'REPLICATION.DURATION' | translate}}</clr-dg-column>
|
<clr-dg-column>{{'REPLICATION.DURATION' | translate}}</clr-dg-column>
|
||||||
<clr-dg-column>{{'REPLICATION.SUCCESS_RATE' | translate}}</clr-dg-column>
|
<clr-dg-column>{{'REPLICATION.SUCCESS_RATE' | translate}}</clr-dg-column>
|
||||||
<clr-dg-column>{{'REPLICATION.TOTAL' | translate}}</clr-dg-column>
|
<clr-dg-column>{{'REPLICATION.TOTAL' | translate}}</clr-dg-column>
|
||||||
<clr-dg-column [clrDgField]="'status'">{{'REPLICATION.STATUS' | translate}}</clr-dg-column>
|
|
||||||
<clr-dg-placeholder>{{'REPLICATION.JOB_PLACEHOLDER' | translate }}</clr-dg-placeholder>
|
<clr-dg-placeholder>{{'REPLICATION.JOB_PLACEHOLDER' | translate }}</clr-dg-placeholder>
|
||||||
<clr-dg-row *ngFor="let j of jobs" [clrDgItem]="j">
|
<clr-dg-row *ngFor="let j of jobs" [clrDgItem]="j">
|
||||||
<clr-dg-cell>
|
<clr-dg-cell>
|
||||||
<a href="javascript:void(0)" (click)="goToLink(j.id)">{{j.id}}</a>
|
<a href="javascript:void(0)" (click)="goToLink(j.id)">{{j.id}}</a>
|
||||||
</clr-dg-cell>
|
</clr-dg-cell>
|
||||||
<clr-dg-cell>{{j.trigger}}</clr-dg-cell>
|
|
||||||
<clr-dg-cell>{{j.start_time | date: 'short'}}</clr-dg-cell>
|
|
||||||
<clr-dg-cell>{{getDuration(j)}}</clr-dg-cell>
|
|
||||||
<clr-dg-cell>
|
|
||||||
{{(j.succeed > 0 ? j.succeed / j.total : 0) | percent }}
|
|
||||||
</clr-dg-cell>
|
|
||||||
<clr-dg-cell>{{j.total}}</clr-dg-cell>
|
|
||||||
<clr-dg-cell>
|
<clr-dg-cell>
|
||||||
{{j.status}}
|
{{j.status}}
|
||||||
<clr-tooltip>
|
<clr-tooltip>
|
||||||
@ -80,6 +73,13 @@
|
|||||||
</clr-tooltip-content>
|
</clr-tooltip-content>
|
||||||
</clr-tooltip>
|
</clr-tooltip>
|
||||||
</clr-dg-cell>
|
</clr-dg-cell>
|
||||||
|
<clr-dg-cell>{{j.trigger}}</clr-dg-cell>
|
||||||
|
<clr-dg-cell>{{j.start_time | date: 'short'}}</clr-dg-cell>
|
||||||
|
<clr-dg-cell>{{getDuration(j)}}</clr-dg-cell>
|
||||||
|
<clr-dg-cell>
|
||||||
|
{{(j.succeed > 0 ? j.succeed / j.total : 0) | percent }}
|
||||||
|
</clr-dg-cell>
|
||||||
|
<clr-dg-cell>{{j.total}}</clr-dg-cell>
|
||||||
</clr-dg-row>
|
</clr-dg-row>
|
||||||
<clr-dg-footer>
|
<clr-dg-footer>
|
||||||
<span *ngIf="showPaginationIndex">{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} {{'REPLICATION.OF' | translate}}</span>
|
<span *ngIf="showPaginationIndex">{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} {{'REPLICATION.OF' | translate}}</span>
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
.rightPos{
|
.rightPos{
|
||||||
@include grid-right-top-pos;
|
@include grid-right-top-pos;
|
||||||
|
top: 22px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toolbar {
|
.toolbar {
|
||||||
|
@ -16,6 +16,6 @@
|
|||||||
<hbr-result-tip-histogram [scanner]="scanner" [vulnerabilitySummary]="summary"></hbr-result-tip-histogram>
|
<hbr-result-tip-histogram [scanner]="scanner" [vulnerabilitySummary]="summary"></hbr-result-tip-histogram>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="otherStatus" class="bar-state">
|
<div *ngIf="otherStatus" class="bar-state">
|
||||||
<span class="label">{{'VULNERABILITY.STATE.OTHER_STATUS' | translate}}</span>
|
<span class="label not-scan">{{'VULNERABILITY.STATE.OTHER_STATUS' | translate}}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -2,10 +2,12 @@
|
|||||||
width: 210px;
|
width: 210px;
|
||||||
}
|
}
|
||||||
.bar-state {
|
.bar-state {
|
||||||
text-align: center !important;
|
|
||||||
.unknow-text {
|
.unknow-text {
|
||||||
margin-left: -5px;
|
margin-left: -5px;
|
||||||
}
|
}
|
||||||
|
.label {
|
||||||
|
width: 90%;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.bar-state-chart {
|
.bar-state-chart {
|
||||||
@ -161,3 +163,9 @@ hr{
|
|||||||
.no-border {
|
.no-border {
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hbr-vulnerability-bar {
|
||||||
|
.label,.not-scan {
|
||||||
|
width: 90%;
|
||||||
|
}
|
||||||
|
}
|
@ -55,7 +55,7 @@ ${tag_table_column_size} xpath=//clr-dg-column//span[contains(.,'Size')]
|
|||||||
${tag_table_column_vulnerability} xpath=//clr-dg-column//span[contains(.,'Vulnerability')]
|
${tag_table_column_vulnerability} xpath=//clr-dg-column//span[contains(.,'Vulnerability')]
|
||||||
${tag_images_btn} xpath=//hbr-repository//button[contains(.,'Images')]
|
${tag_images_btn} xpath=//hbr-repository//button[contains(.,'Images')]
|
||||||
${project_member_action_xpath} xpath=//*[@id='member-action']
|
${project_member_action_xpath} xpath=//*[@id='member-action']
|
||||||
${project_member_set_role_xpath} xpath=//clr-dropdown-menu//label[contains(.,'SET ROLE')]
|
${project_member_set_role_xpath} xpath=//clr-dropdown-menu//label[contains(.,'Set Role')]
|
||||||
${project_config_public_checkbox} xpath=//input[@name='public']
|
${project_config_public_checkbox} xpath=//input[@name='public']
|
||||||
${project_config_content_trust_checkbox} xpath=//input[@name='content-trust']
|
${project_config_content_trust_checkbox} xpath=//input[@name='content-trust']
|
||||||
${project_config_scan_images_on_push_checkbox} xpath=//input[@name='scan-image-on-push']
|
${project_config_scan_images_on_push_checkbox} xpath=//input[@name='scan-image-on-push']
|
||||||
|
Loading…
Reference in New Issue
Block a user