mirror of
https://github.com/goharbor/harbor.git
synced 2024-11-18 00:05:12 +01:00
Merge pull request #11530 from jwangyangls/200408-fix-bug-round2
[Fixed] fix part issue of round2
This commit is contained in:
commit
5d76f1ea4b
@ -135,16 +135,11 @@ export class CreateProjectComponent implements AfterViewInit, OnChanges, OnDest
|
|||||||
Validators.pattern('(^-1$)|(^([1-9]+)([0-9]+)*$)'),
|
Validators.pattern('(^-1$)|(^([1-9]+)([0-9]+)*$)'),
|
||||||
validateLimit(this.currentForm.form.controls['create_project_storage_limit_unit'])
|
validateLimit(this.currentForm.form.controls['create_project_storage_limit_unit'])
|
||||||
]);
|
]);
|
||||||
this.currentForm.form.controls['create_project_count_limit'].setValidators(
|
|
||||||
[
|
|
||||||
Validators.required,
|
|
||||||
Validators.pattern('(^-1$)|(^([1-9]+)([0-9]+)*$)')
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
this.currentForm.form.valueChanges
|
this.currentForm.form.valueChanges
|
||||||
.pipe(distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)))
|
.pipe(distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)))
|
||||||
.subscribe((data) => {
|
.subscribe((data) => {
|
||||||
['create_project_storage_limit', 'create_project_storage_limit_unit', 'create_project_count_limit'].forEach(fieldName => {
|
['create_project_storage_limit', 'create_project_storage_limit_unit'].forEach(fieldName => {
|
||||||
if (this.currentForm.form.get(fieldName) && this.currentForm.form.get(fieldName).value !== null) {
|
if (this.currentForm.form.get(fieldName) && this.currentForm.form.get(fieldName).value !== null) {
|
||||||
this.currentForm.form.get(fieldName).updateValueAndValidity();
|
this.currentForm.form.get(fieldName).updateValueAndValidity();
|
||||||
}
|
}
|
||||||
|
@ -182,7 +182,7 @@
|
|||||||
</clr-dg-cell>
|
</clr-dg-cell>
|
||||||
<clr-dg-cell *ngIf="depth">
|
<clr-dg-cell *ngIf="depth">
|
||||||
<div class="cell">
|
<div class="cell">
|
||||||
{{artifact.extra_attrs?.os}}/{{artifact.extra_attrs?.architecture}}
|
{{artifact.platform?.os}}/{{artifact.platform?.architecture}}{{artifact.platform?.variant?'/'+artifact.platform?.variant: ''}}
|
||||||
</div>
|
</div>
|
||||||
</clr-dg-cell>
|
</clr-dg-cell>
|
||||||
<clr-dg-cell class="w-rem-4">
|
<clr-dg-cell class="w-rem-4">
|
||||||
@ -208,7 +208,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th class="left tag-header-color">
|
<th class="left tag-header-color">
|
||||||
{{'REPOSITORY.TAGS' | translate | uppercase}}</th>
|
{{'REPOSITORY.TAGS' | translate | uppercase}}</th>
|
||||||
<th class="left tag-header-color">
|
<th *ngIf="withNotary" class="left tag-header-color">
|
||||||
{{'REPOSITORY.SIGNED' | translate | uppercase}}</th>
|
{{'REPOSITORY.SIGNED' | translate | uppercase}}</th>
|
||||||
<th class="left tag-header-color">
|
<th class="left tag-header-color">
|
||||||
{{'REPOSITORY.PULL_TIME' | translate | uppercase}}</th>
|
{{'REPOSITORY.PULL_TIME' | translate | uppercase}}</th>
|
||||||
@ -219,7 +219,7 @@
|
|||||||
<tbody class="tag-tbody">
|
<tbody class="tag-tbody">
|
||||||
<tr class="tag-tr" *ngFor="let tag of artifact.tags">
|
<tr class="tag-tr" *ngFor="let tag of artifact.tags">
|
||||||
<td class="left tag-body-color">{{tag.name}}</td>
|
<td class="left tag-body-color">{{tag.name}}</td>
|
||||||
<td class="left tag-body-color" [ngSwitch]="tag.signed">
|
<td *ngIf="withNotary" class="left tag-body-color" [ngSwitch]="tag.signed">
|
||||||
<div class="cell">
|
<div class="cell">
|
||||||
<clr-icon shape="check-circle" *ngSwitchCase="true" size="20" class="color-green"></clr-icon>
|
<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>
|
<clr-icon shape="times-circle" *ngSwitchCase="false" size="16" class="color-red"></clr-icon>
|
||||||
|
@ -58,6 +58,7 @@ import { ArtifactFront as Artifact, mutipleFilter } from "../../../artifact/arti
|
|||||||
import { Project } from "../../../../project";
|
import { Project } from "../../../../project";
|
||||||
import { ArtifactService as NewArtifactService } from "../../../../../../../ng-swagger-gen/services/artifact.service";
|
import { ArtifactService as NewArtifactService } from "../../../../../../../ng-swagger-gen/services/artifact.service";
|
||||||
import { ADDITIONS } from "../../../artifact/artifact-additions/models";
|
import { ADDITIONS } from "../../../artifact/artifact-additions/models";
|
||||||
|
import { Platform } from "../../../../../../../ng-swagger-gen/models/platform";
|
||||||
export interface LabelState {
|
export interface LabelState {
|
||||||
iconsShow: boolean;
|
iconsShow: boolean;
|
||||||
label: Label;
|
label: Label;
|
||||||
@ -347,6 +348,7 @@ export class ArtifactListTabComponent implements OnInit, OnDestroy {
|
|||||||
this.newArtifactService.getArtifact(artifactParam).subscribe(
|
this.newArtifactService.getArtifact(artifactParam).subscribe(
|
||||||
res => {
|
res => {
|
||||||
let observableLists: Observable<Artifact>[] = [];
|
let observableLists: Observable<Artifact>[] = [];
|
||||||
|
let platFormAttr: { platform: Platform }[] = [];
|
||||||
this.totalCount = res.references.length;
|
this.totalCount = res.references.length;
|
||||||
res.references.forEach((child, index) => {
|
res.references.forEach((child, index) => {
|
||||||
if (index >= (pageNumber - 1) * this.pageSize && index < pageNumber * this.pageSize) {
|
if (index >= (pageNumber - 1) * this.pageSize && index < pageNumber * this.pageSize) {
|
||||||
@ -360,6 +362,7 @@ export class ArtifactListTabComponent implements OnInit, OnDestroy {
|
|||||||
withSignature: true,
|
withSignature: true,
|
||||||
withTag: true
|
withTag: true
|
||||||
};
|
};
|
||||||
|
platFormAttr.push({platform: child.platform});
|
||||||
observableLists.push(this.newArtifactService.getArtifact(childParams));
|
observableLists.push(this.newArtifactService.getArtifact(childParams));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -367,6 +370,9 @@ export class ArtifactListTabComponent implements OnInit, OnDestroy {
|
|||||||
this.loading = false;
|
this.loading = false;
|
||||||
})).subscribe(artifacts => {
|
})).subscribe(artifacts => {
|
||||||
this.artifactList = artifacts;
|
this.artifactList = artifacts;
|
||||||
|
this.artifactList.forEach((artifact, index) => {
|
||||||
|
artifact.platform = clone(platFormAttr[index].platform);
|
||||||
|
});
|
||||||
this.getArtifactAnnotationsArray(this.artifactList);
|
this.getArtifactAnnotationsArray(this.artifactList);
|
||||||
}, error => {
|
}, error => {
|
||||||
this.errorHandlerService.error(error);
|
this.errorHandlerService.error(error);
|
||||||
@ -681,12 +687,12 @@ export class ArtifactListTabComponent implements OnInit, OnDestroy {
|
|||||||
this.newArtifactService.CopyArtifact(params)
|
this.newArtifactService.CopyArtifact(params)
|
||||||
.pipe(finalize(() => {
|
.pipe(finalize(() => {
|
||||||
this.imageNameInput.form.reset();
|
this.imageNameInput.form.reset();
|
||||||
|
this.retagDialogOpened = false;
|
||||||
}))
|
}))
|
||||||
.subscribe(response => {
|
.subscribe(response => {
|
||||||
this.translateService.get('RETAG.MSG_SUCCESS').subscribe((res: string) => {
|
this.translateService.get('RETAG.MSG_SUCCESS').subscribe((res: string) => {
|
||||||
this.errorHandlerService.info(res);
|
this.errorHandlerService.info(res);
|
||||||
});
|
});
|
||||||
this.retagDialogOpened = false;
|
|
||||||
}, error => {
|
}, error => {
|
||||||
this.errorHandlerService.error(error);
|
this.errorHandlerService.error(error);
|
||||||
});
|
});
|
||||||
|
@ -41,7 +41,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 *ngIf="withNotary">{{'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>
|
||||||
|
|
||||||
@ -52,7 +52,7 @@
|
|||||||
<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.signed">
|
<clr-dg-cell *ngIf="withNotary" [ngSwitch]="tag.signed">
|
||||||
<div class="cell">
|
<div class="cell">
|
||||||
<clr-icon shape="check-circle" *ngSwitchCase="true" size="20" class="color-green"></clr-icon>
|
<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>
|
<clr-icon shape="times-circle" *ngSwitchCase="false" size="16" class="color-red"></clr-icon>
|
||||||
|
@ -12,7 +12,7 @@ import { OperationService } from "../../../../../lib/components/operation/operat
|
|||||||
import { CURRENT_BASE_HREF } from "../../../../../lib/utils/utils";
|
import { CURRENT_BASE_HREF } from "../../../../../lib/utils/utils";
|
||||||
import { USERSTATICPERMISSION, UserPermissionService, UserPermissionDefaultService } from '../../../../../lib/services';
|
import { USERSTATICPERMISSION, UserPermissionService, UserPermissionDefaultService } from '../../../../../lib/services';
|
||||||
import { delay } from 'rxjs/operators';
|
import { delay } from 'rxjs/operators';
|
||||||
|
import { AppConfigService } from "../../../../services/app-config.service";
|
||||||
|
|
||||||
describe('ArtifactTagComponent', () => {
|
describe('ArtifactTagComponent', () => {
|
||||||
let component: ArtifactTagComponent;
|
let component: ArtifactTagComponent;
|
||||||
@ -29,6 +29,18 @@ describe('ArtifactTagComponent', () => {
|
|||||||
const config: IServiceConfig = {
|
const config: IServiceConfig = {
|
||||||
repositoryBaseEndpoint: CURRENT_BASE_HREF + "/repositories/testing"
|
repositoryBaseEndpoint: CURRENT_BASE_HREF + "/repositories/testing"
|
||||||
};
|
};
|
||||||
|
const mockAppConfigService = {
|
||||||
|
getConfig: () => {
|
||||||
|
return {
|
||||||
|
project_creation_restriction: "",
|
||||||
|
with_chartmuseum: "",
|
||||||
|
with_notary: "",
|
||||||
|
with_clair: "",
|
||||||
|
with_admiral: "",
|
||||||
|
registry_url: "",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
let userPermissionService;
|
let userPermissionService;
|
||||||
const permissions = [
|
const permissions = [
|
||||||
{ resource: USERSTATICPERMISSION.REPOSITORY_TAG.KEY, action: USERSTATICPERMISSION.REPOSITORY_TAG.VALUE.DELETE },
|
{ resource: USERSTATICPERMISSION.REPOSITORY_TAG.KEY, action: USERSTATICPERMISSION.REPOSITORY_TAG.VALUE.DELETE },
|
||||||
@ -51,6 +63,7 @@ describe('ArtifactTagComponent', () => {
|
|||||||
{ provide: SERVICE_CONFIG, useValue: config },
|
{ provide: SERVICE_CONFIG, useValue: config },
|
||||||
{ provide: mockErrorHandler, useValue: ErrorHandler },
|
{ provide: mockErrorHandler, useValue: ErrorHandler },
|
||||||
{ provide: ArtifactService, useValue: mockArtifactService },
|
{ provide: ArtifactService, useValue: mockArtifactService },
|
||||||
|
{ provide: AppConfigService, useValue: mockAppConfigService },
|
||||||
{ provide: UserPermissionService, useClass: UserPermissionDefaultService },
|
{ provide: UserPermissionService, useClass: UserPermissionDefaultService },
|
||||||
{ provide: OperationService },
|
{ provide: OperationService },
|
||||||
]
|
]
|
||||||
|
@ -22,6 +22,7 @@ import {
|
|||||||
} from "../../../../../lib/services";
|
} from "../../../../../lib/services";
|
||||||
import { ClrDatagridStateInterface } from '@clr/angular';
|
import { ClrDatagridStateInterface } from '@clr/angular';
|
||||||
import { DEFAULT_PAGE_SIZE, calculatePage, dbEncodeURIComponent } from '../../../../../lib/utils/utils';
|
import { DEFAULT_PAGE_SIZE, calculatePage, dbEncodeURIComponent } from '../../../../../lib/utils/utils';
|
||||||
|
import { AppConfigService } from "../../../../services/app-config.service";
|
||||||
|
|
||||||
class InitTag {
|
class InitTag {
|
||||||
name = "";
|
name = "";
|
||||||
@ -64,6 +65,7 @@ export class ArtifactTagComponent implements OnInit, OnDestroy {
|
|||||||
private artifactService: ArtifactService,
|
private artifactService: ArtifactService,
|
||||||
private translateService: TranslateService,
|
private translateService: TranslateService,
|
||||||
private userPermissionService: UserPermissionService,
|
private userPermissionService: UserPermissionService,
|
||||||
|
private appConfigService: AppConfigService,
|
||||||
private errorHandlerService: ErrorHandler
|
private errorHandlerService: ErrorHandler
|
||||||
|
|
||||||
) { }
|
) { }
|
||||||
@ -156,7 +158,7 @@ export class ArtifactTagComponent implements OnInit, OnDestroy {
|
|||||||
// const tag: NewTag = {name: this.newTagName};
|
// const tag: NewTag = {name: this.newTagName};
|
||||||
const createTagParams: ArtifactService.CreateTagParams = {
|
const createTagParams: ArtifactService.CreateTagParams = {
|
||||||
projectName: this.projectName,
|
projectName: this.projectName,
|
||||||
repositoryName: this.repositoryName,
|
repositoryName: dbEncodeURIComponent(this.repositoryName),
|
||||||
reference: this.artifactDetails.digest,
|
reference: this.artifactDetails.digest,
|
||||||
tag: this.newTagName
|
tag: this.newTagName
|
||||||
};
|
};
|
||||||
@ -249,7 +251,7 @@ export class ArtifactTagComponent implements OnInit, OnDestroy {
|
|||||||
this.operationService.publishInfo(operMessage);
|
this.operationService.publishInfo(operMessage);
|
||||||
const deleteTagParams: ArtifactService.DeleteTagParams = {
|
const deleteTagParams: ArtifactService.DeleteTagParams = {
|
||||||
projectName: this.projectName,
|
projectName: this.projectName,
|
||||||
repositoryName: this.repositoryName,
|
repositoryName: dbEncodeURIComponent(this.repositoryName),
|
||||||
reference: this.artifactDetails.digest,
|
reference: this.artifactDetails.digest,
|
||||||
tagName: tag.name
|
tagName: tag.name
|
||||||
};
|
};
|
||||||
@ -292,4 +294,7 @@ export class ArtifactTagComponent implements OnInit, OnDestroy {
|
|||||||
ngOnDestroy(): void {
|
ngOnDestroy(): void {
|
||||||
this.tagNameCheckSub.unsubscribe();
|
this.tagNameCheckSub.unsubscribe();
|
||||||
}
|
}
|
||||||
|
get withNotary(): boolean {
|
||||||
|
return this.appConfigService.getConfig().with_notary;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import { Artifact } from "../../../../../ng-swagger-gen/models/artifact";
|
import { Artifact } from "../../../../../ng-swagger-gen/models/artifact";
|
||||||
|
import { Platform } from "../../../../../ng-swagger-gen/models/platform";
|
||||||
|
|
||||||
export interface ArtifactFront extends Artifact {
|
export interface ArtifactFront extends Artifact {
|
||||||
annotationsArray?: string[];
|
annotationsArray?: string[];
|
||||||
|
platform?: Platform;
|
||||||
showImage?: string;
|
showImage?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,6 +187,6 @@ export class ResultBarChartComponent implements OnInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
viewLog(): string {
|
viewLog(): string {
|
||||||
return `${ CURRENT_BASE_HREF }/projects/${this.projectName
|
return `${ CURRENT_BASE_HREF }/projects/${this.projectName
|
||||||
}/repositories/${this.repoName}/artifacts/${this.artifactDigest}/scan/${this.summary.report_id}/log`;
|
}/repositories/${dbEncodeURIComponent(this.repoName)}/artifacts/${this.artifactDigest}/scan/${this.summary.report_id}/log`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,8 +23,8 @@
|
|||||||
<div class="black-point-container margin-left-10">
|
<div class="black-point-container margin-left-10">
|
||||||
<div class="black-point "></div>
|
<div class="black-point "></div>
|
||||||
</div>
|
</div>
|
||||||
<span class="margin-left-10 font-weight-800 color-green font-size-12">{{fixableCount}}</span>
|
<span class="margin-left-10 font-weight-800 font-size-12">{{fixableCount}}</span>
|
||||||
<span class="margin-left-5 color-green font-size-12">{{'SCANNER.FIXABLE' | translate}}</span>
|
<span class="margin-left-5 font-size-12">{{'SCANNER.FIXABLE' | translate}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="isNone" class="pl-1 margin-left-5 tip-wrapper bar-block-none shadow-none width-150">{{'VULNERABILITY.NO_VULNERABILITY' | translate }}</div>
|
<div *ngIf="isNone" class="pl-1 margin-left-5 tip-wrapper bar-block-none shadow-none width-150">{{'VULNERABILITY.NO_VULNERABILITY' | translate }}</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -82,7 +82,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="left">
|
<td class="left">
|
||||||
<span>{{'ROBOT_ACCOUNT.PERMISSIONS_IMAGE' | translate}}</span>
|
<span>{{'ROBOT_ACCOUNT.PERMISSIONS_ARTIFACT' | 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="lg" *clrIfOpen>
|
<clr-tooltip-content clrPosition="top-right" clrSize="lg" *clrIfOpen>
|
||||||
|
@ -336,8 +336,8 @@
|
|||||||
"ENABLE_ACCOUNT": "Enable Account",
|
"ENABLE_ACCOUNT": "Enable Account",
|
||||||
"DELETE": "Delete",
|
"DELETE": "Delete",
|
||||||
"CREAT_ROBOT_ACCOUNT": "Create Robot Account",
|
"CREAT_ROBOT_ACCOUNT": "Create Robot Account",
|
||||||
"PERMISSIONS_IMAGE": "Image",
|
"PERMISSIONS_ARTIFACT": "Artifact",
|
||||||
"PERMISSIONS_HELMCHART": "Helm Chart",
|
"PERMISSIONS_HELMCHART": "Helm Chart (Chart Museum)",
|
||||||
"PUSH": "Push",
|
"PUSH": "Push",
|
||||||
"PULL": "Pull",
|
"PULL": "Pull",
|
||||||
"FILTER_PLACEHOLDER": "Filter Robot Accounts",
|
"FILTER_PLACEHOLDER": "Filter Robot Accounts",
|
||||||
@ -642,7 +642,7 @@
|
|||||||
"NAME": "Name",
|
"NAME": "Name",
|
||||||
"TAGS": "Tags",
|
"TAGS": "Tags",
|
||||||
"PLATFORM": "OS/ARCH",
|
"PLATFORM": "OS/ARCH",
|
||||||
"ARTIFACT_TOOTIP": "Click this icon to enter the Artifact list of refer",
|
"ARTIFACT_TOOTIP": "Click to view this OCI index's artifact list",
|
||||||
"ARTIFACTS_COUNT": "Artifacts",
|
"ARTIFACTS_COUNT": "Artifacts",
|
||||||
"PULL_COUNT": "Pulls",
|
"PULL_COUNT": "Pulls",
|
||||||
"PULL_COMMAND": "Pull Command",
|
"PULL_COMMAND": "Pull Command",
|
||||||
|
@ -337,8 +337,8 @@
|
|||||||
"ENABLE_ACCOUNT": "Enable Account",
|
"ENABLE_ACCOUNT": "Enable Account",
|
||||||
"DELETE": "Delete",
|
"DELETE": "Delete",
|
||||||
"CREAT_ROBOT_ACCOUNT": "Creat Robot Account",
|
"CREAT_ROBOT_ACCOUNT": "Creat Robot Account",
|
||||||
"PERMISSIONS_IMAGE": "Image",
|
"PERMISSIONS_ARTIFACT": "Artifact",
|
||||||
"PERMISSIONS_HELMCHART": "Helm Chart",
|
"PERMISSIONS_HELMCHART": "Helm Chart (Chart Museum)",
|
||||||
"PUSH": "Push",
|
"PUSH": "Push",
|
||||||
"PULL": "Pull",
|
"PULL": "Pull",
|
||||||
"FILTER_PLACEHOLDER": "Filter Robot Accounts",
|
"FILTER_PLACEHOLDER": "Filter Robot Accounts",
|
||||||
@ -643,7 +643,7 @@
|
|||||||
"NAME": "Nombre",
|
"NAME": "Nombre",
|
||||||
"TAGS": "Etiquetas",
|
"TAGS": "Etiquetas",
|
||||||
"PLATFORM": "OS/ARCH",
|
"PLATFORM": "OS/ARCH",
|
||||||
"ARTIFACT_TOOTIP": "Click this icon to enter the Artifact list of refer",
|
"ARTIFACT_TOOTIP": "Click to view this OCI index's artifact list",
|
||||||
"ARTIFACTS_COUNT": "Artifacts",
|
"ARTIFACTS_COUNT": "Artifacts",
|
||||||
"PULL_COUNT": "Pulls",
|
"PULL_COUNT": "Pulls",
|
||||||
"PULL_COMMAND": "Comando Pull",
|
"PULL_COMMAND": "Comando Pull",
|
||||||
@ -790,6 +790,7 @@
|
|||||||
"SUB_TITLE_SUFIX": "logs"
|
"SUB_TITLE_SUFIX": "logs"
|
||||||
},
|
},
|
||||||
"CONFIG": {
|
"CONFIG": {
|
||||||
|
"HISTORY": "History",
|
||||||
"TITLE": "Configuración",
|
"TITLE": "Configuración",
|
||||||
"AUTH": "Autentificación",
|
"AUTH": "Autentificación",
|
||||||
"REPLICATION": "Replicación",
|
"REPLICATION": "Replicación",
|
||||||
|
@ -328,8 +328,8 @@
|
|||||||
"ENABLE_ACCOUNT": "permettre à compte ",
|
"ENABLE_ACCOUNT": "permettre à compte ",
|
||||||
"DELETE": "Supprimer",
|
"DELETE": "Supprimer",
|
||||||
"CREAT_ROBOT_ACCOUNT": "créat robot compte ",
|
"CREAT_ROBOT_ACCOUNT": "créat robot compte ",
|
||||||
"PERMISSIONS_IMAGE": "Image",
|
"PERMISSIONS_ARTIFACT": "Artifact",
|
||||||
"PERMISSIONS_HELMCHART": "Helm Chart",
|
"PERMISSIONS_HELMCHART": "Helm Chart (Chart Museum)",
|
||||||
"PUSH": "Push",
|
"PUSH": "Push",
|
||||||
"PULL": "Pull",
|
"PULL": "Pull",
|
||||||
"FILTER_PLACEHOLDER": "Filter Robot Accounts",
|
"FILTER_PLACEHOLDER": "Filter Robot Accounts",
|
||||||
@ -631,7 +631,7 @@
|
|||||||
"NAME": "Nom",
|
"NAME": "Nom",
|
||||||
"TAGS": "Tags",
|
"TAGS": "Tags",
|
||||||
"PLATFORM": "OS/ARCH",
|
"PLATFORM": "OS/ARCH",
|
||||||
"ARTIFACT_TOOTIP": "Click this icon to enter the Artifact list of refer",
|
"ARTIFACT_TOOTIP": "Click to view this OCI index's artifact list",
|
||||||
"ARTIFACTS_COUNT": "Artifacts",
|
"ARTIFACTS_COUNT": "Artifacts",
|
||||||
"PULL_COUNT": "Pulls",
|
"PULL_COUNT": "Pulls",
|
||||||
"PULL_COMMAND": "Commande de Pull",
|
"PULL_COMMAND": "Commande de Pull",
|
||||||
@ -775,6 +775,7 @@
|
|||||||
"SUB_TITLE_SUFIX": "logs"
|
"SUB_TITLE_SUFIX": "logs"
|
||||||
},
|
},
|
||||||
"CONFIG": {
|
"CONFIG": {
|
||||||
|
"HISTORY": "History",
|
||||||
"TITLE": "Configuration",
|
"TITLE": "Configuration",
|
||||||
"AUTH": "Identification",
|
"AUTH": "Identification",
|
||||||
"REPLICATION": "Réplication",
|
"REPLICATION": "Réplication",
|
||||||
|
@ -334,8 +334,8 @@
|
|||||||
"ENABLE_ACCOUNT": "Ativar conta",
|
"ENABLE_ACCOUNT": "Ativar conta",
|
||||||
"DELETE": "Remover",
|
"DELETE": "Remover",
|
||||||
"CREAT_ROBOT_ACCOUNT": "CRIA robô conta",
|
"CREAT_ROBOT_ACCOUNT": "CRIA robô conta",
|
||||||
"PERMISSIONS_IMAGE": "Image",
|
"PERMISSIONS_ARTIFACT": "Artifact",
|
||||||
"PERMISSIONS_HELMCHART": "Helm Chart",
|
"PERMISSIONS_HELMCHART": "Helm Chart (Chart Museum)",
|
||||||
"PUSH": "Push",
|
"PUSH": "Push",
|
||||||
"PULL": "Pull",
|
"PULL": "Pull",
|
||||||
"FILTER_PLACEHOLDER": "Filtro robot accounts",
|
"FILTER_PLACEHOLDER": "Filtro robot accounts",
|
||||||
@ -642,7 +642,7 @@
|
|||||||
"NAME": "Nome",
|
"NAME": "Nome",
|
||||||
"TAGS": "Tags",
|
"TAGS": "Tags",
|
||||||
"PLATFORM": "OS/ARCH",
|
"PLATFORM": "OS/ARCH",
|
||||||
"ARTIFACT_TOOTIP": "Click this icon to enter the Artifact list of refer",
|
"ARTIFACT_TOOTIP": "Click to view this OCI index's artifact list",
|
||||||
"ARTIFACTS_COUNT": "Artifacts",
|
"ARTIFACTS_COUNT": "Artifacts",
|
||||||
"PULL_COUNT": "Pulls",
|
"PULL_COUNT": "Pulls",
|
||||||
"PULL_COMMAND": "Comando de Pull",
|
"PULL_COMMAND": "Comando de Pull",
|
||||||
@ -786,6 +786,7 @@
|
|||||||
"SUB_TITLE_SUFIX": "logs"
|
"SUB_TITLE_SUFIX": "logs"
|
||||||
},
|
},
|
||||||
"CONFIG": {
|
"CONFIG": {
|
||||||
|
"HISTORY": "History",
|
||||||
"TITLE": "Configuração",
|
"TITLE": "Configuração",
|
||||||
"AUTH": "Autenticação",
|
"AUTH": "Autenticação",
|
||||||
"REPLICATION": "Replicação",
|
"REPLICATION": "Replicação",
|
||||||
|
@ -336,8 +336,8 @@
|
|||||||
"ENABLE_ACCOUNT": "Hesabı Etkinleştir",
|
"ENABLE_ACCOUNT": "Hesabı Etkinleştir",
|
||||||
"DELETE": "Sil",
|
"DELETE": "Sil",
|
||||||
"CREAT_ROBOT_ACCOUNT": "Robot Hesabı Yarat",
|
"CREAT_ROBOT_ACCOUNT": "Robot Hesabı Yarat",
|
||||||
"PERMISSIONS_IMAGE": "İmaj",
|
"PERMISSIONS_ARTIFACT": "Artifact",
|
||||||
"PERMISSIONS_HELMCHART": "Helm Tablosu",
|
"PERMISSIONS_HELMCHART": "Helm Tablosu (Chart Museum)",
|
||||||
"PUSH": "Yükle",
|
"PUSH": "Yükle",
|
||||||
"PULL": "Çek",
|
"PULL": "Çek",
|
||||||
"FILTER_PLACEHOLDER": "Robot Hesaplarını Filtrele",
|
"FILTER_PLACEHOLDER": "Robot Hesaplarını Filtrele",
|
||||||
@ -642,7 +642,7 @@
|
|||||||
"NAME": "İsim",
|
"NAME": "İsim",
|
||||||
"TAGS": "Etiketler",
|
"TAGS": "Etiketler",
|
||||||
"PLATFORM": "OS/ARCH",
|
"PLATFORM": "OS/ARCH",
|
||||||
"ARTIFACT_TOOTIP": "Click this icon to enter the Artifact list of refer",
|
"ARTIFACT_TOOTIP": "Click to view this OCI index's artifact list",
|
||||||
"ARTIFACTS_COUNT": "Artifacts",
|
"ARTIFACTS_COUNT": "Artifacts",
|
||||||
"PULL_COUNT": "İndirmeler",
|
"PULL_COUNT": "İndirmeler",
|
||||||
"PULL_COMMAND": "İndirme Komutu",
|
"PULL_COMMAND": "İndirme Komutu",
|
||||||
|
@ -335,8 +335,8 @@
|
|||||||
"ENABLE_ACCOUNT": "启用账户",
|
"ENABLE_ACCOUNT": "启用账户",
|
||||||
"DELETE": "删除",
|
"DELETE": "删除",
|
||||||
"CREAT_ROBOT_ACCOUNT": "创建机器人账户",
|
"CREAT_ROBOT_ACCOUNT": "创建机器人账户",
|
||||||
"PERMISSIONS_IMAGE": "镜像",
|
"PERMISSIONS_ARTIFACT": "Artifact",
|
||||||
"PERMISSIONS_HELMCHART": "Helm Chart",
|
"PERMISSIONS_HELMCHART": "Helm Chart (Chart Museum)",
|
||||||
"PUSH": "推送",
|
"PUSH": "推送",
|
||||||
"PULL": "拉取",
|
"PULL": "拉取",
|
||||||
"FILTER_PLACEHOLDER": "过滤机器人账户",
|
"FILTER_PLACEHOLDER": "过滤机器人账户",
|
||||||
@ -643,7 +643,7 @@
|
|||||||
"NAME": "名称",
|
"NAME": "名称",
|
||||||
"TAGS": "Tags",
|
"TAGS": "Tags",
|
||||||
"PLATFORM": "OS/ARCH",
|
"PLATFORM": "OS/ARCH",
|
||||||
"ARTIFACT_TOOTIP": "Click this icon to enter the Artifact list of refer",
|
"ARTIFACT_TOOTIP": "点击查看此 OCI 索引的 Artifact 列表",
|
||||||
"ARTIFACTS_COUNT": "Artifacts",
|
"ARTIFACTS_COUNT": "Artifacts",
|
||||||
"PULL_COUNT": "下载数",
|
"PULL_COUNT": "下载数",
|
||||||
"PULL_COMMAND": "Pull命令",
|
"PULL_COMMAND": "Pull命令",
|
||||||
@ -790,6 +790,7 @@
|
|||||||
"SUB_TITLE_SUFIX": "条日志"
|
"SUB_TITLE_SUFIX": "条日志"
|
||||||
},
|
},
|
||||||
"CONFIG": {
|
"CONFIG": {
|
||||||
|
"HISTORY": "历史记录",
|
||||||
"TITLE": "配置",
|
"TITLE": "配置",
|
||||||
"AUTH": "认证模式",
|
"AUTH": "认证模式",
|
||||||
"REPLICATION": "复制",
|
"REPLICATION": "复制",
|
||||||
@ -1153,6 +1154,7 @@
|
|||||||
"UNKNOWN": "未知",
|
"UNKNOWN": "未知",
|
||||||
"STATUS": "状态",
|
"STATUS": "状态",
|
||||||
"START_TIME": "创建时间",
|
"START_TIME": "创建时间",
|
||||||
|
"CREATION_TIME": "创建时间",
|
||||||
"UPDATE_TIME": "更新时间",
|
"UPDATE_TIME": "更新时间",
|
||||||
"LOGS": "日志",
|
"LOGS": "日志",
|
||||||
"PENDING": "未开始",
|
"PENDING": "未开始",
|
||||||
|
@ -83,7 +83,7 @@
|
|||||||
<select class="clr-select width-100" formControlName="value" #selectedValue id="{{'select_'+ supportedFilters[i]?.type}}"
|
<select class="clr-select width-100" formControlName="value" #selectedValue id="{{'select_'+ supportedFilters[i]?.type}}"
|
||||||
name="{{supportedFilters[i]?.type}}">
|
name="{{supportedFilters[i]?.type}}">
|
||||||
<option value="">{{'REPLICATION.ALL' | translate}}</option>
|
<option value="">{{'REPLICATION.ALL' | translate}}</option>
|
||||||
<option *ngFor="let value of supportedFilters[i]?.values;" value="{{value}}">{{value}}</option>
|
<option *ngFor="let value of supportedFilters[i]?.values;" value="{{value}}">{{value}}{{value==='chart'? ' (chartmuseum)': ''}}</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="select resource-box" *ngIf="supportedFilters[i]?.type==='label'&& supportedFilters[i]?.style==='list'">
|
<div class="select resource-box" *ngIf="supportedFilters[i]?.type==='label'&& supportedFilters[i]?.style==='list'">
|
||||||
@ -93,7 +93,7 @@
|
|||||||
<ng-template ngFor let-label [ngForOf]="filter.value.value" let-m="index">
|
<ng-template ngFor let-label [ngForOf]="filter.value.value" let-m="index">
|
||||||
<span class="label" *ngIf="m<1"> {{label}} </span>
|
<span class="label" *ngIf="m<1"> {{label}} </span>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
<span class="ellipsis" *ngIf="filter.value.value.length>1">···</span>
|
<span class="ellipsis color-white-dark" *ngIf="filter.value.value.length>1">···</span>
|
||||||
<div *ngFor="let label1 of filter.value.value;let k = index" hidden="true">
|
<div *ngFor="let label1 of filter.value.value;let k = index" hidden="true">
|
||||||
<input type="text" [formControlName]="k" #labelValue id="{{'label_'+ supportedFilters[i]?.type + '_' + label1}}" name="{{'label_'+ supportedFilters[i]?.type + '_' + label1}}"
|
<input type="text" [formControlName]="k" #labelValue id="{{'label_'+ supportedFilters[i]?.type + '_' + label1}}" name="{{'label_'+ supportedFilters[i]?.type + '_' + label1}}"
|
||||||
placeholder="select labels">
|
placeholder="select labels">
|
||||||
|
@ -448,7 +448,7 @@ export class CreateEditRuleComponent implements OnInit, OnDestroy {
|
|||||||
supportedFilter.values.forEach( value => {
|
supportedFilter.values.forEach( value => {
|
||||||
this.supportedFilterLabels.push({
|
this.supportedFilterLabels.push({
|
||||||
name: value,
|
name: value,
|
||||||
color: '#fff',
|
color: '#FFFFFF',
|
||||||
select: false,
|
select: false,
|
||||||
scope: 'g'
|
scope: 'g'
|
||||||
});
|
});
|
||||||
@ -468,7 +468,7 @@ export class CreateEditRuleComponent implements OnInit, OnDestroy {
|
|||||||
this.supportedFilterLabels = [
|
this.supportedFilterLabels = [
|
||||||
{
|
{
|
||||||
name: labelValue,
|
name: labelValue,
|
||||||
color: '#fff',
|
color: '#FFFFFF',
|
||||||
select: true,
|
select: true,
|
||||||
scope: 'g'
|
scope: 'g'
|
||||||
}, ...this.supportedFilterLabels];
|
}, ...this.supportedFilterLabels];
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
id="project-name"
|
id="project-name"
|
||||||
class="clr-input w-90"
|
class="clr-input w-90"
|
||||||
(keyup)='validateProjectName()'
|
(keyup)='validateProjectName()'
|
||||||
(blur)='blurProjectInput()'
|
|
||||||
formControlName="projectName" autocomplete="off" />
|
formControlName="projectName" autocomplete="off" />
|
||||||
<clr-icon class="clr-validate-icon" shape="exclamation-circle"></clr-icon>
|
<clr-icon class="clr-validate-icon" shape="exclamation-circle"></clr-icon>
|
||||||
<div class="select-box" [style.display]="selectedProjectList.length ? 'block' : 'none'">
|
<div class="select-box" [style.display]="selectedProjectList.length ? 'block' : 'none'">
|
||||||
|
@ -76,10 +76,6 @@ export class ImageNameInputComponent implements OnInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
blurProjectInput(): void {
|
|
||||||
this.validateProjectName();
|
|
||||||
}
|
|
||||||
|
|
||||||
get form(): AbstractControl {
|
get form(): AbstractControl {
|
||||||
return this.imageNameForm;
|
return this.imageNameForm;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user