diff --git a/src/portal/src/app/base/harbor-shell/harbor-shell.component.html b/src/portal/src/app/base/harbor-shell/harbor-shell.component.html index 36ac6b828..9c30266b7 100644 --- a/src/portal/src/app/base/harbor-shell/harbor-shell.component.html +++ b/src/portal/src/app/base/harbor-shell/harbor-shell.component.html @@ -80,28 +80,22 @@ -
- - + diff --git a/src/portal/src/app/config/config.component.scss b/src/portal/src/app/config/config.component.scss index d33e6f39a..585f6b8d9 100644 --- a/src/portal/src/app/config/config.component.scss +++ b/src/portal/src/app/config/config.component.scss @@ -1,25 +1,3 @@ - -.info-tips-icon { - color: grey; -} - -.info-tips-icon:hover { - color: #007CBB; -} - -clr-icon { - color: grey; - margin-top: -3px; -} - -clr-icon:hover { - color: #007CBB; -} - -.clr-validate-icon { - color: red; -} - .config-title { display: inline-block; } diff --git a/src/portal/src/app/config/scanner/config-scanner.component.scss b/src/portal/src/app/config/scanner/config-scanner.component.scss index 1e2e42d45..aea3b2b44 100644 --- a/src/portal/src/app/config/scanner/config-scanner.component.scss +++ b/src/portal/src/app/config/scanner/config-scanner.component.scss @@ -4,18 +4,10 @@ display: flex; justify-content: flex-end; } - .refresh-btn { cursor: pointer; margin-top: 7px; } -.clr-icon { - color: #0079b8; - margin-top: 0; -} -.color-b { - color: #bbb; -} .margin-left-5 { margin-left: 5px; } diff --git a/src/portal/src/app/project/helm-chart/helm-chart-detail/chart-detail/chart-detail-value.component.scss b/src/portal/src/app/project/helm-chart/helm-chart-detail/chart-detail/chart-detail-value.component.scss index 7e35a5262..2f482bfe4 100644 --- a/src/portal/src/app/project/helm-chart/helm-chart-detail/chart-detail/chart-detail-value.component.scss +++ b/src/portal/src/app/project/helm-chart/helm-chart-detail/chart-detail/chart-detail-value.component.scss @@ -1,6 +1,7 @@ .value-container { ::ng-deep pre { min-height: fit-content; + max-height: none !important; } } @@ -19,4 +20,4 @@ pre { max-height: max-content; padding-left: 21px; -} \ No newline at end of file +} diff --git a/src/portal/src/app/project/helm-chart/list-chart-versions/helm-chart-versions-detail/helm-chart-version.component.scss b/src/portal/src/app/project/helm-chart/list-chart-versions/helm-chart-versions-detail/helm-chart-version.component.scss index daae0c5ec..662314f9d 100644 --- a/src/portal/src/app/project/helm-chart/list-chart-versions/helm-chart-versions-detail/helm-chart-version.component.scss +++ b/src/portal/src/app/project/helm-chart/list-chart-versions/helm-chart-versions-detail/helm-chart-version.component.scss @@ -20,8 +20,7 @@ .filter-divider { display: inline-block; height: 16px; - width: 2px; - background-color: #cccccc; + width: 1px; padding-top: 12px; padding-bottom: 12px; position: relative; @@ -115,4 +114,4 @@ hbr-resource-label-signpost { .version-position { position: relative; -} \ No newline at end of file +} diff --git a/src/portal/src/app/project/helm-chart/list-charts-detail/helm-chart.component.scss b/src/portal/src/app/project/helm-chart/list-charts-detail/helm-chart.component.scss index 84b6b56bf..f989289be 100644 --- a/src/portal/src/app/project/helm-chart/list-charts-detail/helm-chart.component.scss +++ b/src/portal/src/app/project/helm-chart/list-charts-detail/helm-chart.component.scss @@ -18,8 +18,7 @@ $size60:60px; .filter-divider { display: inline-block; height: 16px; - width: 2px; - background-color: #ccc; + width: 1px; padding-top: 12px; padding-bottom: 12px; position: relative; @@ -133,4 +132,4 @@ button { .version-position { position: relative; -} \ No newline at end of file +} diff --git a/src/portal/src/app/project/list-project/list-project.component.ts b/src/portal/src/app/project/list-project/list-project.component.ts index 8a1c33bf6..8fbfcf701 100644 --- a/src/portal/src/app/project/list-project/list-project.component.ts +++ b/src/portal/src/app/project/list-project/list-project.component.ts @@ -200,6 +200,9 @@ export class ListProjectComponent implements OnDestroy { observableLists.push(this.delOperate(data)); }); forkJoin(...observableLists).subscribe(item => { + this.translate.get("BATCH.DELETED_SUCCESS").subscribe(res => { + this.msgHandler.showSuccess(res); + }); let st: State = this.getStateAfterDeletion(); this.selectedRow = []; if (!st) { @@ -208,6 +211,10 @@ export class ListProjectComponent implements OnDestroy { this.clrLoad(st); this.statisticHandler.refresh(); } + }, error => { + this.translate.get("BATCH.DELETED_FAILURE").subscribe(res => { + this.msgHandler.handleError(res); + }); }); } } @@ -220,13 +227,10 @@ export class ListProjectComponent implements OnDestroy { operMessage.state = OperationState.progressing; operMessage.data.name = project.name; this.operationService.publishInfo(operMessage); - return this.proService.deleteProject(project.project_id) .pipe(map( () => { - this.translate.get("BATCH.DELETED_SUCCESS").subscribe(res => { - operateChanges(operMessage, OperationState.success); - }); + operateChanges(operMessage, OperationState.success); }), catchError( error => { const message = errorHandler(error); diff --git a/src/portal/src/app/project/repository/artifact-list-page/artifact-list/artifact-list-tab/artifact-list-tab.component.html b/src/portal/src/app/project/repository/artifact-list-page/artifact-list/artifact-list-tab/artifact-list-tab.component.html index bd3cc5b8e..50f913b68 100644 --- a/src/portal/src/app/project/repository/artifact-list-page/artifact-list/artifact-list-tab/artifact-list-tab.component.html +++ b/src/portal/src/app/project/repository/artifact-list-page/artifact-list/artifact-list-tab/artifact-list-tab.component.html @@ -299,7 +299,7 @@
- +
diff --git a/src/portal/src/app/project/repository/repository-gridview.component.scss b/src/portal/src/app/project/repository/repository-gridview.component.scss index d933402d0..4ef3d00bf 100644 --- a/src/portal/src/app/project/repository/repository-gridview.component.scss +++ b/src/portal/src/app/project/repository/repository-gridview.component.scss @@ -56,8 +56,7 @@ .filter-divider { display: inline-block; height: 16px; - width: 2px; - background-color: #ccc; + width: 1px; padding-top: 12px; padding-bottom: 12px; position: relative; diff --git a/src/portal/src/app/project/repository/vulnerability-scanning/result-tip-histogram/result-tip-histogram.component.html b/src/portal/src/app/project/repository/vulnerability-scanning/result-tip-histogram/result-tip-histogram.component.html index 2d2242570..fdfeac2d1 100644 --- a/src/portal/src/app/project/repository/vulnerability-scanning/result-tip-histogram/result-tip-histogram.component.html +++ b/src/portal/src/app/project/repository/vulnerability-scanning/result-tip-histogram/result-tip-histogram.component.html @@ -15,14 +15,10 @@
-
-
-
+
{{total}} {{'SCANNER.TOTAL' | translate}} -
-
-
+
-
{{fixableCount}} {{'SCANNER.FIXABLE' | translate}}
@@ -32,7 +28,7 @@
-
+
{{vulnerabilitySummary?.severity | slice:0:1}}
diff --git a/src/portal/src/app/project/repository/vulnerability-scanning/result-tip-histogram/result-tip-histogram.component.scss b/src/portal/src/app/project/repository/vulnerability-scanning/result-tip-histogram/result-tip-histogram.component.scss index 01e788853..430ff7368 100644 --- a/src/portal/src/app/project/repository/vulnerability-scanning/result-tip-histogram/result-tip-histogram.component.scss +++ b/src/portal/src/app/project/repository/vulnerability-scanning/result-tip-histogram/result-tip-histogram.component.scss @@ -1,5 +1,5 @@ -$thirty-pixel: 30px; -$twenty-two-pixel: 22px; +$thirty-pixel: 26px; +$twenty-two-pixel: 18px; .bar-wrapper { width: 144px; @@ -235,11 +235,10 @@ hr { height: $twenty-two-pixel; width: $twenty-two-pixel; line-height: $twenty-two-pixel; - font-size: 14px; + font-size: 12px; font-weight: 600; border-radius: 50%; text-align: center; - background-color: #fff; } .level-critical { @@ -294,4 +293,10 @@ hr { } .margin-right-5 { margin-right: 5px; -} \ No newline at end of file +} +.is-white { + background-color: #fff; +} +.is-dark { + background-color: #000; +} diff --git a/src/portal/src/app/project/tag-feature-integration/immutable-tag/immutable-tag.component.scss b/src/portal/src/app/project/tag-feature-integration/immutable-tag/immutable-tag.component.scss index cab95c55c..a1054a03f 100644 --- a/src/portal/src/app/project/tag-feature-integration/immutable-tag/immutable-tag.component.scss +++ b/src/portal/src/app/project/tag-feature-integration/immutable-tag/immutable-tag.component.scss @@ -22,18 +22,7 @@ .font-size-54 { font-size: 0.541667rem; } -::ng-deep { - .normal-wrapper-box { - .normal-wrapper { - .font-style { - width: 150px !important; - } - } - .btn { - margin-left: 150px !important; - } - } -} + .flex-150 { flex: 0 0 150px; } diff --git a/src/portal/src/app/project/tag-feature-integration/tag-feature-integration.component.html b/src/portal/src/app/project/tag-feature-integration/tag-feature-integration.component.html index c086b88b3..f61df41a8 100644 --- a/src/portal/src/app/project/tag-feature-integration/tag-feature-integration.component.html +++ b/src/portal/src/app/project/tag-feature-integration/tag-feature-integration.component.html @@ -1,11 +1,11 @@ - \ No newline at end of file + diff --git a/src/portal/src/app/project/tag-feature-integration/tag-feature-integration.component.scss b/src/portal/src/app/project/tag-feature-integration/tag-feature-integration.component.scss index bccf1a691..a31f75ede 100644 --- a/src/portal/src/app/project/tag-feature-integration/tag-feature-integration.component.scss +++ b/src/portal/src/app/project/tag-feature-integration/tag-feature-integration.component.scss @@ -1,17 +1,12 @@ .btn-tag-integration { margin-top: 1.5rem; margin-bottom: 1rem; - .nav-link { + .strategy-nav-link { height: 100%; width: 100%; display: inline-block; padding-left: 0.5rem; padding-right: 0.5rem; text-decoration: none; - color: #0077b8; - } - .active { - background: #0077b8; - color: #fff; } } diff --git a/src/portal/src/app/project/tag-feature-integration/tag-retention/tag-retention.component.html b/src/portal/src/app/project/tag-feature-integration/tag-retention/tag-retention.component.html index 62ca13138..172750c6b 100644 --- a/src/portal/src/app/project/tag-feature-integration/tag-retention/tag-retention.component.html +++ b/src/portal/src/app/project/tag-feature-integration/tag-retention/tag-retention.component.html @@ -67,7 +67,7 @@
- +
diff --git a/src/portal/src/app/project/tag-feature-integration/tag-retention/tag-retention.component.scss b/src/portal/src/app/project/tag-feature-integration/tag-retention/tag-retention.component.scss index c842ec340..1c9759a1f 100644 --- a/src/portal/src/app/project/tag-feature-integration/tag-retention/tag-retention.component.scss +++ b/src/portal/src/app/project/tag-feature-integration/tag-retention/tag-retention.component.scss @@ -44,7 +44,7 @@ z-index: 999; } .cron-selection { - margin-top: 20px; + margin-top: 30px; display: flex; align-items: center; } diff --git a/src/portal/src/app/project/webhook/webhook.component.html b/src/portal/src/app/project/webhook/webhook.component.html index 8669ffd00..1ee120401 100644 --- a/src/portal/src/app/project/webhook/webhook.component.html +++ b/src/portal/src/app/project/webhook/webhook.component.html @@ -82,7 +82,7 @@
- +
{{eventTypeToText(e)}} diff --git a/src/portal/src/css/common.scss b/src/portal/src/css/common.scss index d43c651c6..fd858d2cd 100644 --- a/src/portal/src/css/common.scss +++ b/src/portal/src/css/common.scss @@ -123,6 +123,32 @@ hbr-tag { } } +.filter-divider { + background-color: $filter-divider-bg-color ; +} + +.selectBox { + background: $select-back-color !important; + color: $select-option-color !important; +} + +.selectBox ul li:hover{ + background-image: linear-gradient(180deg,$selectBox-option-hover-bg-color-start 0,$selectBox-option-hover-bg-color-end) !important; +} + +.btn-tag-integration { + .active { + background: $btn-tag-integration-active-bg-color; + color: $btn-tag-integration-active-color; + } +} + +hbr-result-tip-histogram { + .inner { + background-color: $hbr-result-tip-histogram-inner-bg-color; + } +} + // style of hbr-artifact-summary component @mixin align-text-mixin($values...) { @each $var in $values { @@ -137,6 +163,10 @@ hbr-tag { padding: 2px 4px; } +:not(pre) > code[class*="language-"], pre[class*="language-"] { + background-color: $color-yaml; +} + .md-div { code:not([class*="language-"]) { @extend %code-block; @@ -188,4 +218,4 @@ hbr-tag { clr-header { background-color: $header-color; -} \ No newline at end of file +} diff --git a/src/portal/src/css/dark-theme.scss b/src/portal/src/css/dark-theme.scss index 3f9c9f4bb..b8e240d20 100644 --- a/src/portal/src/css/dark-theme.scss +++ b/src/portal/src/css/dark-theme.scss @@ -25,6 +25,13 @@ $color-f2: none; $color-657b83: none; $color-fdf6e3: none; $header-color: hsl(198, 100%, 15%)!important; +$color-yaml: #253c46; +$filter-divider-bg-color: #495865; +$selectBox-option-hover-bg-color-start: #4aaed9; +$selectBox-option-hover-bg-color-end: #0077b8; +$btn-tag-integration-active-bg-color: #4aaed9; +$btn-tag-integration-active-color: #000; +$hbr-result-tip-histogram-inner-bg-color: #21333b; $harbor-icon-translate-x: 0; $harbor-icon-drop-shadow-x: 58px; diff --git a/src/portal/src/css/light-theme.scss b/src/portal/src/css/light-theme.scss index 212eb272e..9b76332ab 100644 --- a/src/portal/src/css/light-theme.scss +++ b/src/portal/src/css/light-theme.scss @@ -27,6 +27,13 @@ $color-f2: #f2f2f2; $color-657b83: #657b83; $color-fdf6e3: #fdf6e3; $header-color: rgb(0, 74, 112); +$color-yaml: none; +$filter-divider-bg-color: #ccc; +$selectBox-option-hover-bg-color-start: #f5f5f5; +$selectBox-option-hover-bg-color-end: #e8e8e8; +$btn-tag-integration-active-bg-color: #0077b8; +$btn-tag-integration-active-color: #fff; +$hbr-result-tip-histogram-inner-bg-color: #fff; $harbor-icon-translate-x: 100%; $harbor-icon-drop-shadow-x: -56px; diff --git a/src/portal/src/i18n/lang/en-us-lang.json b/src/portal/src/i18n/lang/en-us-lang.json index 544de2fcc..49eae0a18 100644 --- a/src/portal/src/i18n/lang/en-us-lang.json +++ b/src/portal/src/i18n/lang/en-us-lang.json @@ -54,7 +54,7 @@ }, "BATCH": { "DELETED_SUCCESS": "Deleted successfully", - "DELETED_FAILURE": "Deleted failed", + "DELETED_FAILURE": "Deleted failed or partly failed", "SWITCH_SUCCESS": "Switch successfully", "SWITCH_FAILURE": "Switch failed", "REPLICATE_SUCCESS": "Started successfully", @@ -238,7 +238,7 @@ "STORAGE_QUOTA": "Storage quota", "COUNT_QUOTA_TIP": "Please enter an integer between '1' & '100,000,000', '-1' for unlimited.", "STORAGE_QUOTA_TIP": "The upper limit of Storage Quota only takes integer values, capped at '1024TB'. Enter '-1' for unlimited quota", - "QUOTA_UNLIMIT_TIP": "For unlimited quota, please enter '-1'." + "QUOTA_UNLIMIT_TIP": "For unlimited quota enter '-1'." }, "PROJECT_DETAIL": { "SUMMARY": "Summary", @@ -503,10 +503,10 @@ "ENDPOINTS": "Endpoints", "FILTER_POLICIES_PLACEHOLDER": "Filter Rules", "FILTER_EXECUTIONS_PLACEHOLDER": "Filter Executions", - "DELETION_TITLE": "Confirm Rules Deletion", - "DELETION_SUMMARY": "Do you want to delete rules {{param}}?", - "REPLICATION_TITLE": "Confirm Rules replication", - "REPLICATION_SUMMARY": "Do you want to replicate the Rules {{param}}?", + "DELETION_TITLE": "Confirm Replication Rule Deletion", + "DELETION_SUMMARY": "Do you want to delete replication rule {{param}}?", + "REPLICATION_TITLE": "Confirm Rule Replication", + "REPLICATION_SUMMARY": "Do you want to replicate the rule {{param}}?", "DELETION_TITLE_FAILURE": "failed to delete Rule Deletion", "DELETION_SUMMARY_FAILURE": "have pending/running/retrying status", "REPLICATE_SUMMARY_FAILURE": "have pending/running status", @@ -1190,7 +1190,7 @@ }, "GC": { - "CURRENT_SCHEDULE": "Current Schedule", + "CURRENT_SCHEDULE": "Schedule to GC", "GC_NOW": "GC NOW", "JOB_HISTORY": "GC History", "JOB_ID": "Job ID", @@ -1200,7 +1200,8 @@ "MSG_SCHEDULE_SET": "Garbage Collection schedule has been set", "MSG_SCHEDULE_RESET": "Garbage Collection schedule has been reset", "PARAMETERS": "Parameters", - "DELETE_UNTAGGED": "Delete Untagged Artifacts" + "DELETE_UNTAGGED": "Allow garbage collection on untagged artifacts", + "EXPLAIN": "GC is a compute intensive operation that may impact registry performance" }, "RETAG": { "MSG_SUCCESS": "Copy artifact successfully", diff --git a/src/portal/src/i18n/lang/es-es-lang.json b/src/portal/src/i18n/lang/es-es-lang.json index 2c7d880b1..64e12dfdf 100644 --- a/src/portal/src/i18n/lang/es-es-lang.json +++ b/src/portal/src/i18n/lang/es-es-lang.json @@ -54,7 +54,7 @@ }, "BATCH": { "DELETED_SUCCESS": "Deleted successfully", - "DELETED_FAILURE": "Deleted failed", + "DELETED_FAILURE": "Deleted failed or partly failed", "SWITCH_SUCCESS": "Switch successfully", "SWITCH_FAILURE": "Switch failed", "REPLICATE_SUCCESS": "Started successfully", @@ -239,7 +239,7 @@ "STORAGE_QUOTA": "Storage quota", "COUNT_QUOTA_TIP": "Please enter an integer between '1' & '100,000,000', '-1' for unlimited", "STORAGE_QUOTA_TIP": "The upper limit of Storage Quota only takes integer values, capped at '1024TB'. Enter '-1' for unlimited quota", - "QUOTA_UNLIMIT_TIP": "For unlimited quota, please enter '-1'." + "QUOTA_UNLIMIT_TIP": "For unlimited quota enter '-1'." }, "PROJECT_DETAIL": { "SUMMARY": "Summary", @@ -510,8 +510,8 @@ "DELETION_TITLE_FAILURE": "failed to delete Rule Deletion", "DELETION_SUMMARY_FAILURE": "have pending/running/retrying status", "REPLICATE_SUMMARY_FAILURE": "have pending/running status", - "REPLICATION_TITLE": "Confirm Rules replication", - "REPLICATION_SUMMARY": "Do you want to replicate the Rules {{param}}?", + "REPLICATION_TITLE": "Confirm Rule replication", + "REPLICATION_SUMMARY": "Do you want to replicate the Rule {{param}}?", "FILTER_TARGETS_PLACEHOLDER": "Filtrar Endpoints", "DELETION_TITLE_TARGET": "Confirmar Eliminación de Endpoint", "DELETION_SUMMARY_TARGET": "¿Quiere eliminar el endpoint {{param}}?", @@ -1188,7 +1188,7 @@ }, "GC": { - "CURRENT_SCHEDULE": "Current Schedule", + "CURRENT_SCHEDULE": "Schedule to GC", "GC_NOW": "GC NOW", "JOB_HISTORY": "GC History", "JOB_ID": "Job ID", @@ -1198,7 +1198,8 @@ "MSG_SCHEDULE_SET": "Garbage Collection schedule has been set", "MSG_SCHEDULE_RESET": "Garbage Collection schedule has been reset", "PARAMETERS": "Parameters", - "DELETE_UNTAGGED": "Delete Untagged Artifacts" + "DELETE_UNTAGGED": "Allow garbage collection on untagged artifacts", + "EXPLAIN": "GC is a compute intensive operation that may impact registry performance" }, "RETAG": { "MSG_SUCCESS": "Copy artifact successfully", diff --git a/src/portal/src/i18n/lang/fr-fr-lang.json b/src/portal/src/i18n/lang/fr-fr-lang.json index b9070a169..a2cb37123 100644 --- a/src/portal/src/i18n/lang/fr-fr-lang.json +++ b/src/portal/src/i18n/lang/fr-fr-lang.json @@ -51,7 +51,7 @@ }, "BATCH": { "DELETED_SUCCESS": "Deleted successfully", - "DELETED_FAILURE": "Deleted failed", + "DELETED_FAILURE": "Deleted failed or partly failed", "SWITCH_SUCCESS": "Switch successfully", "SWITCH_FAILURE": "Switch failed", "REPLICATE_SUCCESS": "Started successfully", @@ -232,7 +232,7 @@ "STORAGE_QUOTA": "Storage quota", "COUNT_QUOTA_TIP": "Please enter an integer between '1' & '100,000,000', '-1' for unlimited", "STORAGE_QUOTA_TIP": "The upper limit of Storage Quota only takes integer values, capped at '1024TB'. Enter '-1' for unlimited quota", - "QUOTA_UNLIMIT_TIP": "For unlimited quota, please enter '-1'." + "QUOTA_UNLIMIT_TIP": "For unlimited quota enter '-1'." }, "PROJECT_DETAIL": { "SUMMARY": "Summary", @@ -1158,7 +1158,7 @@ "NOSCHEDULE": "An error occurred in Get schedule" }, "GC": { - "CURRENT_SCHEDULE": "Current Schedule", + "CURRENT_SCHEDULE": "Schedule to GC", "GC_NOW": "GC NOW", "JOB_HISTORY": "GC History", "JOB_ID": "Job ID", @@ -1168,7 +1168,8 @@ "MSG_SCHEDULE_SET": "Garbage Collection schedule has been set", "MSG_SCHEDULE_RESET": "Garbage Collection schedule has been reset", "PARAMETERS": "Parameters", - "DELETE_UNTAGGED": "Delete Untagged Artifacts" + "DELETE_UNTAGGED": "Allow garbage collection on untagged artifacts", + "EXPLAIN": "GC is a compute intensive operation that may impact registry performance" }, "RETAG": { "MSG_SUCCESS": "Copy artifact successfully", diff --git a/src/portal/src/i18n/lang/pt-br-lang.json b/src/portal/src/i18n/lang/pt-br-lang.json index da6095dc9..03a51c2b8 100644 --- a/src/portal/src/i18n/lang/pt-br-lang.json +++ b/src/portal/src/i18n/lang/pt-br-lang.json @@ -54,7 +54,7 @@ }, "BATCH": { "DELETED_SUCCESS": "Removido com sucesso", - "DELETED_FAILURE": "Falha ao remover", + "DELETED_FAILURE": "Deleted failed or partly failed", "SWITCH_SUCCESS": "Alterado com sucesso", "SWITCH_FAILURE": "Falha ao alterar", "REPLICATE_SUCCESS": "Iniciado com sucesso", @@ -236,7 +236,7 @@ "STORAGE_QUOTA": "Storage quota", "COUNT_QUOTA_TIP": "Please enter an integer between '1' & '100,000,000', '-1' for unlimited", "STORAGE_QUOTA_TIP": "The upper limit of Storage Quota only takes integer values, capped at '1024TB'. Enter '-1' for unlimited quota", - "QUOTA_UNLIMIT_TIP": "For unlimited quota, please enter '-1'." + "QUOTA_UNLIMIT_TIP": "For unlimited quota enter '-1'." }, "PROJECT_DETAIL": { "SUMMARY": "Summary", @@ -1182,7 +1182,7 @@ }, "GC": { - "CURRENT_SCHEDULE": "Agendamento atual", + "CURRENT_SCHEDULE": "Schedule to GC", "ON": "em", "AT": "em", "GC_NOW": "GC AGORA", @@ -1196,7 +1196,8 @@ "MSG_SCHEDULE_SET": "Agendamento de Garbage Collection efetuado", "MSG_SCHEDULE_RESET": "Agendamento de Garbage Collection foi redefinido", "PARAMETERS": "Parameters", - "DELETE_UNTAGGED": "Delete Untagged Artifacts" + "DELETE_UNTAGGED": "Allow garbage collection on untagged artifacts", + "EXPLAIN": "GC is a compute intensive operation that may impact registry performance" }, "RETAG": { "MSG_SUCCESS": "Copy artifact successfully", diff --git a/src/portal/src/i18n/lang/tr-tr-lang.json b/src/portal/src/i18n/lang/tr-tr-lang.json index 68beb79e9..1c9db368e 100644 --- a/src/portal/src/i18n/lang/tr-tr-lang.json +++ b/src/portal/src/i18n/lang/tr-tr-lang.json @@ -54,7 +54,7 @@ }, "BATCH": { "DELETED_SUCCESS": "Başarı ile silindi.", - "DELETED_FAILURE": "Silme başarısız.", + "DELETED_FAILURE": "Deleted failed or partly failed", "SWITCH_SUCCESS": "Değiştirme başarılı", "SWITCH_FAILURE": "Değiştirme başarısız", "REPLICATE_SUCCESS": "Başlatma başarılı.", @@ -1190,7 +1190,7 @@ }, "GC": { - "CURRENT_SCHEDULE": "Mevcut Program", + "CURRENT_SCHEDULE": "Schedule to GC", "GC_NOW": "ŞİMDİ ÇT", "JOB_HISTORY": "ÇT Geçmişi", "JOB_ID": "İş ID", @@ -1200,7 +1200,8 @@ "MSG_SCHEDULE_SET": "Çöp Toplama programı belirlendi", "MSG_SCHEDULE_RESET": "Çöp Toplama programı sıfırlandı", "PARAMETERS": "Parameters", - "DELETE_UNTAGGED": "Delete Untagged Artifacts" + "DELETE_UNTAGGED": "Allow garbage collection on untagged artifacts", + "EXPLAIN": "GC is a compute intensive operation that may impact registry performance" }, "RETAG": { "MSG_SUCCESS": "Copy artifact successfully", diff --git a/src/portal/src/i18n/lang/zh-cn-lang.json b/src/portal/src/i18n/lang/zh-cn-lang.json index fd1ff276e..769304854 100644 --- a/src/portal/src/i18n/lang/zh-cn-lang.json +++ b/src/portal/src/i18n/lang/zh-cn-lang.json @@ -54,7 +54,7 @@ }, "BATCH": { "DELETED_SUCCESS": "删除成功", - "DELETED_FAILURE": "删除失败", + "DELETED_FAILURE": "删除失败或部分失败", "SWITCH_SUCCESS": "切换成功", "SWITCH_FAILURE": "切换失败", "REPLICATE_SUCCESS": "开始成功", @@ -1197,7 +1197,8 @@ "MSG_SCHEDULE_SET": "垃圾回收定时任务设置成功", "MSG_SCHEDULE_RESET": "垃圾回收定时任务已被重置", "PARAMETERS": "参数", - "DELETE_UNTAGGED": "删除无 Tag 的 Artifacts" + "DELETE_UNTAGGED": "允许回收无 tag 的 artifacts", + "EXPLAIN": "垃圾回收是一个计算密集型操作,可能会影响仓库性能" }, "RETAG": { "MSG_SUCCESS": "Artifact 拷贝成功", diff --git a/src/portal/src/i18n/lang/zh-tw-lang.json b/src/portal/src/i18n/lang/zh-tw-lang.json index ca46f2e21..49ad0fa9d 100644 --- a/src/portal/src/i18n/lang/zh-tw-lang.json +++ b/src/portal/src/i18n/lang/zh-tw-lang.json @@ -54,7 +54,7 @@ }, "BATCH":{ "DELETED_SUCCESS": "刪除成功", - "DELETED_FAILURE": "刪除失敗", + "DELETED_FAILURE": "Deleted failed or partly failed", "SWITCH_SUCCESS": "切換成功", "SWITCH_FAILURE": "切換失敗", "REPLICATE_SUCCESS": "開始成功", @@ -1184,7 +1184,8 @@ "MSG_SCHEDULE_SET": "垃圾回收定時任務設置成功", "MSG_SCHEDULE_RESET": "垃圾回收定時任務已被重置", "PARAMETERS": "參數", - "DELETE_UNTAGGED": "刪除無Tag 的Artifacts" + "DELETE_UNTAGGED": "Allow garbage collection on untagged artifacts", + "EXPLAIN": "GC is a compute intensive operation that may impact registry performance" }, "RETAG":{ "MSG_SUCCESS": "Artifact 拷貝成功", diff --git a/src/portal/src/lib/components/config/gc/gc.component.html b/src/portal/src/lib/components/config/gc/gc.component.html index 4315f26da..22382675e 100644 --- a/src/portal/src/lib/components/config/gc/gc.component.html +++ b/src/portal/src/lib/components/config/gc/gc.component.html @@ -1,15 +1,27 @@ -
- - - - - - -
- -
+ diff --git a/src/portal/src/lib/components/config/gc/gc.component.scss b/src/portal/src/lib/components/config/gc/gc.component.scss index 6eafa7694..955d212aa 100644 --- a/src/portal/src/lib/components/config/gc/gc.component.scss +++ b/src/portal/src/lib/components/config/gc/gc.component.scss @@ -1,15 +1,29 @@ .cron-selection { - padding-left: 0.25rem; + margin-top: 1rem; display: flex; align-items: center; } .gc-start-btn { width:150px; - margin-top: 41px; + margin-left: 0.5rem; + margin-top: 35px; +} + +.flex-200 { + flex: 0 0 200px; + max-width: 200px; +} + +.mt-05 { + margin-top: 0.5rem; +} + +.font-weight-400 { + font-weight: 400; +} + +.explain { + font-weight: 100; + font-size: 10px; } -.parameters { - font-size: 0.541667rem !important; - width: 200px !important; - font-weight: 400 !important; -} \ No newline at end of file diff --git a/src/portal/src/lib/components/config/gc/gc.component.ts b/src/portal/src/lib/components/config/gc/gc.component.ts index 70221b0b7..f12038817 100644 --- a/src/portal/src/lib/components/config/gc/gc.component.ts +++ b/src/portal/src/lib/components/config/gc/gc.component.ts @@ -29,8 +29,7 @@ export class GcComponent implements OnInit { schedule: GCSchedule = {}; originCron: OriginCron; disableGC: boolean = false; - getText = ''; - getLabelCurrent = ''; + getLabelCurrent = 'GC.CURRENT_SCHEDULE'; @Output() loadingGcStatus = new EventEmitter(); @ViewChild(CronScheduleComponent, {static: false}) CronScheduleComponent: CronScheduleComponent; diff --git a/src/portal/src/lib/components/config/system/system-settings.component.html b/src/portal/src/lib/components/config/system/system-settings.component.html index 9ca14e966..9baa1ef8b 100644 --- a/src/portal/src/lib/components/config/system/system-settings.component.html +++ b/src/portal/src/lib/components/config/system/system-settings.component.html @@ -117,9 +117,10 @@
  • {{'CVE_WHITELIST.NONE'|translate}}
  • - {{item.cve_id}} - + {{item.cve_id}} + + +
  • diff --git a/src/portal/src/lib/components/config/system/system-settings.component.scss b/src/portal/src/lib/components/config/system/system-settings.component.scss index df83a3646..370a1bd4e 100644 --- a/src/portal/src/lib/components/config/system/system-settings.component.scss +++ b/src/portal/src/lib/components/config/system/system-settings.component.scss @@ -56,7 +56,6 @@ padding: 12px; height: 224px; width: 222px; - color: #0079bb; overflow-y: auto; li { height: 24px; diff --git a/src/portal/src/lib/components/config/vulnerability/vulnerability-config.component.html b/src/portal/src/lib/components/config/vulnerability/vulnerability-config.component.html index 7843b9ca9..fdec2cb6e 100644 --- a/src/portal/src/lib/components/config/vulnerability/vulnerability-config.component.html +++ b/src/portal/src/lib/components/config/vulnerability/vulnerability-config.component.html @@ -6,14 +6,14 @@ {{ updatedTimeStr }}
    -
    - +
    -
    - {{ labelEdit | translate }} +
    + {{ labelEdit | translate }}
    + #cronStringInput="ngModel" required class="clr-input form-control ml-1" [(ngModel)]="cronString"> {{'TOOLTIP.CRON_REQUIRED' | translate}}
    -
    - - -
    -
    \ No newline at end of file + + +
    diff --git a/src/portal/src/lib/components/cron-schedule/cron-schedule.component.scss b/src/portal/src/lib/components/cron-schedule/cron-schedule.component.scss index 3cf4c61f5..af94f039f 100644 --- a/src/portal/src/lib/components/cron-schedule/cron-schedule.component.scss +++ b/src/portal/src/lib/components/cron-schedule/cron-schedule.component.scss @@ -1,71 +1,20 @@ -.flex-layout { - margin: 20px 0; - font-size: .541667rem; +.normal-wrapper-box { + display: flex; + align-items: center; } - - .normal-wrapper-box { - position: relative; - .normal-wrapper { - position: absolute; - width: 700px; - > span:not(:first-child) { - margin-right: 18px; - } - > a { - margin-left: -10px; - } - } - button { - margin: 35px 20px 0; - } - } - - .setting-wrapper { - position: relative; - .confirm-button { - margin: 11px 0 0; - } - - *:not(:first-child) { - margin-right: 18px; - } - - .select-schedule { - display: inline-block; - width: 100px; - } - .cron-input { - position: absolute; - display: inline-block; - width: 270px; - } +.font-style { + display: inline-block; + color: #000; + font-size: .541667rem; +} - .cron-label { - width: 195px; - } - .cron-tooltip { - color: gray; - cursor: default; - position: absolute; - .table-box { - width: 20rem; - } - } - } - - .font-style { - display: inline-block; - color: #000; - font-size: .541667rem; - } - - span.required { - &:after { - content: '*'; - font-size: .58479532rem; - line-height: .5rem; - color: #c92100; - margin-left: .25rem; - } +span.required { + &:after { + content: '*'; + font-size: .58479532rem; + line-height: .5rem; + color: #c92100; + margin-left: .25rem; } +} diff --git a/src/portal/src/lib/components/cron-schedule/cron-schedule.component.ts b/src/portal/src/lib/components/cron-schedule/cron-schedule.component.ts index 376c84e8c..d41e42cdc 100644 --- a/src/portal/src/lib/components/cron-schedule/cron-schedule.component.ts +++ b/src/portal/src/lib/components/cron-schedule/cron-schedule.component.ts @@ -28,7 +28,7 @@ export class CronScheduleComponent implements OnChanges { @Input() labelEdit: string; @Input() labelCurrent: string; @Input() disabled: boolean; - @Input() buttonMarginLeft: string = '200px'; + @Input() labelWidth: string = '200px'; dateInvalid: boolean; originScheduleType: string; oriCron: string; diff --git a/src/portal/src/lib/components/endpoint/endpoint.component.html b/src/portal/src/lib/components/endpoint/endpoint.component.html index acf4bc4e7..ef0787c91 100644 --- a/src/portal/src/lib/components/endpoint/endpoint.component.html +++ b/src/portal/src/lib/components/endpoint/endpoint.component.html @@ -33,7 +33,7 @@
    Unknown
    {{t.url}} - {{t.type}} + {{getAdapterText(t.type)}} {{!t.insecure}} diff --git a/src/portal/src/lib/components/endpoint/endpoint.component.ts b/src/portal/src/lib/components/endpoint/endpoint.component.ts index 1dca86d70..983a8880b 100644 --- a/src/portal/src/lib/components/endpoint/endpoint.component.ts +++ b/src/portal/src/lib/components/endpoint/endpoint.component.ts @@ -234,4 +234,8 @@ export class EndpointComponent implements OnInit, OnDestroy { } }, duration); } + + getAdapterText(adapter: string): string { + return this.endpointService.getAdapterText(adapter); + } } diff --git a/src/portal/src/lib/components/filter/filter.component.scss b/src/portal/src/lib/components/filter/filter.component.scss index 1a928850b..2ea83e663 100644 --- a/src/portal/src/lib/components/filter/filter.component.scss +++ b/src/portal/src/lib/components/filter/filter.component.scss @@ -6,8 +6,7 @@ .filter-divider { display: inline-block; height: 16px; - width: 2px; - background-color: #cccccc; + width: 1px; padding-top: 12px; padding-bottom: 12px; position: relative; @@ -26,4 +25,4 @@ .filter-input { padding-left: 15px; -} \ No newline at end of file +} diff --git a/src/portal/src/lib/components/project-policy-config/project-policy-config.component.html b/src/portal/src/lib/components/project-policy-config/project-policy-config.component.html index 0b99fe3b3..3391bcee7 100644 --- a/src/portal/src/lib/components/project-policy-config/project-policy-config.component.html +++ b/src/portal/src/lib/components/project-policy-config/project-policy-config.component.html @@ -121,16 +121,17 @@
  • {{'CVE_WHITELIST.NONE'|translate}}
  • - {{item.cve_id}} + {{item.cve_id}}
  • diff --git a/src/portal/src/lib/components/project-policy-config/project-policy-config.component.scss b/src/portal/src/lib/components/project-policy-config/project-policy-config.component.scss index 06291b467..22630a95c 100644 --- a/src/portal/src/lib/components/project-policy-config/project-policy-config.component.scss +++ b/src/portal/src/lib/components/project-policy-config/project-policy-config.component.scss @@ -16,7 +16,6 @@ padding: 12px; height: 224px; width: 270px; - color: #0079bb; overflow-y: auto; li { diff --git a/src/portal/src/lib/services/endpoint.service.ts b/src/portal/src/lib/services/endpoint.service.ts index a03b24636..b9a8f4816 100644 --- a/src/portal/src/lib/services/endpoint.service.ts +++ b/src/portal/src/lib/services/endpoint.service.ts @@ -12,6 +12,22 @@ import { RequestQueryParams } from "./RequestQueryParams"; import { Endpoint, ReplicationRule, PingEndpoint } from "./interface"; import { catchError, map } from "rxjs/operators"; +const ADAPTERS_MAP = { + "ali-acr": "Alibaba ACR", + "aws-ecr": "Aws ECR", + "azure-acr": "Azure ACR", + "docker-hub": "Docker Hub", + "docker-registry": "Docker Registry", + "gitlab": "Gitlab", + "google-gcr": "Google GCR", + "harbor": "Harbor", + "helm-hub": "Helm Hub", + "huawei-SWR": "Huawei SWR", + "jfrog-artifactory": "jFrog Artifactory", + "quay-io": "Quay.io" +}; + + /** * Define the service methods to handle the endpoint related things. @@ -125,6 +141,8 @@ export abstract class EndpointService { abstract getEndpointWithReplicationRules( endpointId: number | string ): Observable; + + abstract getAdapterText(adapter: string): string; } /** @@ -248,4 +266,11 @@ export class EndpointDefaultService extends EndpointService { .pipe(map(response => response as ReplicationRule[]) , catchError(error => observableThrowError(error))); } + + getAdapterText(adapter: string): string { + if (ADAPTERS_MAP && ADAPTERS_MAP[adapter]) { + return ADAPTERS_MAP[adapter]; + } + return adapter; + } }