diff --git a/.gitignore b/.gitignore index 0412c70ef..b3572fc64 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,4 @@ src/ui_ng/aot/**/*.json **/*ngfactory.ts **/aot **/dist +**/.bin \ No newline at end of file diff --git a/src/ui_ng/lib/README.md b/src/ui_ng/lib/README.md index 10ae806ee..01d46bac4 100644 --- a/src/ui_ng/lib/README.md +++ b/src/ui_ng/lib/README.md @@ -80,6 +80,8 @@ If **projectId** is set to the id of specified project, then only show the repli **projectId** is used to specify which projects the repositories are from. +**projectName** is used to generate the related commands for pushing images. + **hasSignedIn** is a user session related property to determined whether a valid user signed in session existing. This component supports anonymous user. **hasProjectAdminRole** is a user session related property to determined whether the current user has project administrator role. Some action menus might be disabled based on this property. @@ -87,7 +89,7 @@ If **projectId** is set to the id of specified project, then only show the repli **tagClickEvent** is an @output event emitter for you to catch the tag click events. ``` - + ... diff --git a/src/ui_ng/lib/package.json b/src/ui_ng/lib/package.json index 7db338ddf..c618fd735 100644 --- a/src/ui_ng/lib/package.json +++ b/src/ui_ng/lib/package.json @@ -18,21 +18,21 @@ }, "private": true, "dependencies": { - "@angular/animations": "^4.1.3", - "@angular/common": "^4.1.3", - "@angular/compiler": "^4.1.3", - "@angular/core": "^4.1.3", - "@angular/forms": "^4.1.3", - "@angular/http": "^4.1.3", - "@angular/platform-browser": "^4.1.3", - "@angular/platform-browser-dynamic": "^4.1.3", - "@angular/router": "^4.1.3", + "@angular/animations": "~4.1.3", + "@angular/common": "~4.1.3", + "@angular/compiler": "~4.1.3", + "@angular/core": "~4.1.3", + "@angular/forms": "~4.1.3", + "@angular/http": "~4.1.3", + "@angular/platform-browser": "~4.1.3", + "@angular/platform-browser-dynamic": "~4.1.3", + "@angular/router": "~4.1.3", "@ngx-translate/core": "^6.0.0", "@ngx-translate/http-loader": "0.0.3", "@webcomponents/custom-elements": "1.0.0-alpha.3", - "clarity-angular": "^0.9.7", - "clarity-icons": "^0.9.7", - "clarity-ui": "^0.9.7", + "clarity-angular": "~0.9.8", + "clarity-icons": "~0.9.8", + "clarity-ui": "~0.9.8", "core-js": "^2.4.1", "intl": "^1.2.5", "mutationobserver-shim": "^0.3.2", @@ -45,12 +45,13 @@ }, "devDependencies": { "@angular/cli": "^1.0.0", - "@angular/compiler-cli": "^4.0.1", + "@angular/compiler-cli": "~4.1.3", "@types/core-js": "^0.9.41", "@types/jasmine": "~2.2.30", "@types/node": "^6.0.42", "bootstrap": "4.0.0-alpha.5", "codelyzer": "~2.0.0-beta.4", + "copyfiles": "^1.2.0", "enhanced-resolve": "^3.0.0", "jasmine-core": "2.4.1", "jasmine-spec-reporter": "2.5.0", @@ -61,14 +62,14 @@ "karma-phantomjs-launcher": "^1.0.0", "karma-remap-istanbul": "^0.2.1", "protractor": "^4.0.9", + "rimraf": "^2.6.1", "rollup": "^0.41.6", + "rollup-plugin-node-resolve": "^3.0.0", "ts-node": "1.2.1", "tslint": "^4.1.1", "typescript": "~2.2.0", "typings": "^1.4.0", "uglify-js": "^2.8.22", - "webdriver-manager": "10.2.5", - "rimraf": "^2.6.1", - "copyfiles": "^1.2.0" + "webdriver-manager": "10.2.5" } } \ No newline at end of file diff --git a/src/ui_ng/lib/pkg/package.json b/src/ui_ng/lib/pkg/package.json index 3cd233c18..34660aa5a 100644 --- a/src/ui_ng/lib/pkg/package.json +++ b/src/ui_ng/lib/pkg/package.json @@ -19,21 +19,21 @@ }, "homepage": "https://github.com/vmware/harbor#readme", "peerDependencies": { - "@angular/animations": "^4.1.3", - "@angular/common": "^4.1.3", - "@angular/compiler": "^4.1.3", - "@angular/core": "^4.1.3", - "@angular/forms": "^4.1.3", - "@angular/http": "^4.1.3", - "@angular/platform-browser": "^4.1.3", - "@angular/platform-browser-dynamic": "^4.1.3", - "@angular/router": "^4.1.3", + "@angular/animations": "~4.1.3", + "@angular/common": "~4.1.3", + "@angular/compiler": "~4.1.3", + "@angular/core": "~4.1.3", + "@angular/forms": "~4.1.3", + "@angular/http": "~4.1.3", + "@angular/platform-browser": "~4.1.3", + "@angular/platform-browser-dynamic": "~4.1.3", + "@angular/router": "~4.1.3", "@ngx-translate/core": "^6.0.0", "@ngx-translate/http-loader": "0.0.3", "@webcomponents/custom-elements": "1.0.0-alpha.3", - "clarity-angular": "^0.9.7", - "clarity-icons": "^0.9.7", - "clarity-ui": "^0.9.7", + "clarity-angular": "~0.9.8", + "clarity-icons": "~0.9.8", + "clarity-ui": "~0.9.8", "core-js": "^2.4.1", "intl": "^1.2.5", "mutationobserver-shim": "^0.3.2", diff --git a/src/ui_ng/lib/rollup.config.js b/src/ui_ng/lib/rollup.config.js index 97d5f17b1..73785f82f 100644 --- a/src/ui_ng/lib/rollup.config.js +++ b/src/ui_ng/lib/rollup.config.js @@ -1,3 +1,5 @@ +import resolve from 'rollup-plugin-node-resolve'; + export default { entry: 'dist/index.js', dest: 'dist/bundles/harborui.umd.js', @@ -11,10 +13,14 @@ export default { '@angular/forms', '@angular/platform-browser', '@angular/http', + '@angular/router', 'clarity-angular', '@ngx-translate/core', '@ngx-translate/http-loader', + 'ngx-cookie', + 'ngx-clipboard', 'rxjs', + 'rxjs/Rx', 'rxjs/Subject', 'rxjs/Observable', 'rxjs/add/observable/of', @@ -29,8 +35,15 @@ export default { '@angular/forms': 'ng.forms', '@angular/http': 'ng.http', '@angular/platform-browser': 'ng.platformBrowser', + '@angular/router': 'ng.router', + 'ngx-clipboard': 'ngx.clipboard', + 'clarity-angular': 'ng.clarity', + 'ngx-cookie': 'ngx.cookie', + '@ngx-translate/core': 'ngx.translate', + '@ngx-translate/http-loader': 'ngx.translate', 'rxjs': 'rxjs', 'rxjs/Subject': 'rxjs.Subject', + 'rxjs/Rx': 'Rx', 'rxjs/Observable': 'Rx', 'rxjs/ReplaySubject': 'Rx', 'rxjs/add/operator/map': 'Rx.Observable.prototype', @@ -50,5 +63,10 @@ export default { // console.warn everything else console.warn(warning.message); - } + }, + plugins: [resolve({ + customResolveOptions: { + moduleDirectory: 'node_modules' + } + })] } \ No newline at end of file diff --git a/src/ui_ng/lib/src/push-image/push-image.css.ts b/src/ui_ng/lib/src/push-image/push-image.css.ts index 4fdca4ade..78ee359c5 100644 --- a/src/ui_ng/lib/src/push-image/push-image.css.ts +++ b/src/ui_ng/lib/src/push-image/push-image.css.ts @@ -39,4 +39,8 @@ export const PUSH_IMAGE_STYLE: string = ` min-width: 360px; max-width: 720px; } + +.btn-font { + font-size: 14px !important; +} `; \ No newline at end of file diff --git a/src/ui_ng/lib/src/push-image/push-image.html.ts b/src/ui_ng/lib/src/push-image/push-image.html.ts index 7fe84ed1e..998ba5f3e 100644 --- a/src/ui_ng/lib/src/push-image/push-image.html.ts +++ b/src/ui_ng/lib/src/push-image/push-image.html.ts @@ -1,7 +1,7 @@ export const PUSH_IMAGE_HTML: string = `
- @@ -10,10 +10,12 @@ export const PUSH_IMAGE_HTML: string = `
{{ 'PUSH_IMAGE.TITLE' | translate }}
- - - {{ 'PUSH_IMAGE.TOOLTIP' | translate }} - + + + + {{ 'PUSH_IMAGE.TOOLTIP' | translate }} + +
diff --git a/src/ui_ng/lib/src/repository-stackview/repository-stackview.component.html.ts b/src/ui_ng/lib/src/repository-stackview/repository-stackview.component.html.ts index 3d7882e7c..533c95583 100644 --- a/src/ui_ng/lib/src/repository-stackview/repository-stackview.component.html.ts +++ b/src/ui_ng/lib/src/repository-stackview/repository-stackview.component.html.ts @@ -1,9 +1,10 @@ export const REPOSITORY_STACKVIEW_TEMPLATE: string = `
-
+
+
diff --git a/src/ui_ng/lib/src/repository-stackview/repository-stackview.component.spec.ts b/src/ui_ng/lib/src/repository-stackview/repository-stackview.component.spec.ts index c04d7639b..1e7d94b97 100644 --- a/src/ui_ng/lib/src/repository-stackview/repository-stackview.component.spec.ts +++ b/src/ui_ng/lib/src/repository-stackview/repository-stackview.component.spec.ts @@ -15,6 +15,8 @@ import { RepositoryService, RepositoryDefaultService } from '../service/reposito import { TagService, TagDefaultService } from '../service/tag.service'; import { SystemInfoService, SystemInfoDefaultService } from '../service/system-info.service'; import { VULNERABILITY_DIRECTIVES } from '../vulnerability-scanning/index'; +import { PUSH_IMAGE_BUTTON_DIRECTIVES } from '../push-image/index'; +import { INLINE_ALERT_DIRECTIVES } from '../inline-alert/index'; import { click } from '../utils'; @@ -92,7 +94,9 @@ describe('RepositoryComponentStackview (inline template)', () => { TagComponent, ConfirmationDialogComponent, FilterComponent, - VULNERABILITY_DIRECTIVES + VULNERABILITY_DIRECTIVES, + PUSH_IMAGE_BUTTON_DIRECTIVES, + INLINE_ALERT_DIRECTIVES ], providers: [ ErrorHandler, diff --git a/src/ui_ng/lib/src/repository-stackview/repository-stackview.component.ts b/src/ui_ng/lib/src/repository-stackview/repository-stackview.component.ts index 97f86af63..e4dce5660 100644 --- a/src/ui_ng/lib/src/repository-stackview/repository-stackview.component.ts +++ b/src/ui_ng/lib/src/repository-stackview/repository-stackview.component.ts @@ -41,6 +41,7 @@ import { Tag, TagClickEvent } from '../service/interface'; export class RepositoryStackviewComponent implements OnInit { @Input() projectId: number; + @Input() projectName: string = "unknown"; @Input() hasSignedIn: boolean; @Input() hasProjectAdminRole: boolean; diff --git a/src/ui_ng/lib/src/vulnerability-scanning/result-grid.component.ts b/src/ui_ng/lib/src/vulnerability-scanning/result-grid.component.ts index 12d4f24e2..f75045841 100644 --- a/src/ui_ng/lib/src/vulnerability-scanning/result-grid.component.ts +++ b/src/ui_ng/lib/src/vulnerability-scanning/result-grid.component.ts @@ -61,6 +61,8 @@ export class ResultGridComponent implements OnInit { return 'VULNERABILITY.SEVERITY.MEDIUM'; case VulnerabilitySeverity.LOW: return 'VULNERABILITY.SEVERITY.LOW'; + case VulnerabilitySeverity.NONE: + return 'VULNERABILITY.SEVERITY.NEGLIGIBLE'; case VulnerabilitySeverity.UNKNOWN: return 'VULNERABILITY.SEVERITY.UNKNOWN'; default: diff --git a/src/ui_ng/lib/src/vulnerability-scanning/result-tip.component.ts b/src/ui_ng/lib/src/vulnerability-scanning/result-tip.component.ts index 349b343f3..ce76bd34b 100644 --- a/src/ui_ng/lib/src/vulnerability-scanning/result-tip.component.ts +++ b/src/ui_ng/lib/src/vulnerability-scanning/result-tip.component.ts @@ -41,7 +41,9 @@ export class ResultTipComponent implements OnInit { this.totalPackages = this.summary && this.summary.components ? this.summary.components.total : 0; if (this.summary && this.summary.components && this.summary.components.summary) { this.summary.components.summary.forEach(item => { - this.packagesWithVul += item.count + if (item.severity != VulnerabilitySeverity.NONE) { + this.packagesWithVul += item.count + } switch (item.severity) { case VulnerabilitySeverity.UNKNOWN: diff --git a/src/ui_ng/lib/src/vulnerability-scanning/scanning.css.ts b/src/ui_ng/lib/src/vulnerability-scanning/scanning.css.ts index 76b5f899d..bc6643101 100644 --- a/src/ui_ng/lib/src/vulnerability-scanning/scanning.css.ts +++ b/src/ui_ng/lib/src/vulnerability-scanning/scanning.css.ts @@ -1,8 +1,6 @@ export const SCANNING_STYLES: string = ` .bar-wrapper { width: 120px; - height: 24px; - display: inline-block; } .bar-state { text-align: center !important; @@ -18,7 +16,6 @@ export const SCANNING_STYLES: string = ` .tip-wrapper { display: inline-block; height: 10px; - max-height: 10px; max-width: 120px; } .tip-position { diff --git a/src/ui_ng/lib/src/vulnerability-scanning/scanning.html.ts b/src/ui_ng/lib/src/vulnerability-scanning/scanning.html.ts index a34c46484..b39052ba0 100644 --- a/src/ui_ng/lib/src/vulnerability-scanning/scanning.html.ts +++ b/src/ui_ng/lib/src/vulnerability-scanning/scanning.html.ts @@ -62,7 +62,13 @@ export const GRID_COMPONENT_HTML: string = ` {{'VULNERABILITY.GRID.PLACEHOLDER' | translate}} {{res.id}} - {{severityText(res.severity) | translate}} + + {{severityText(res.severity) | translate}} + {{severityText(res.severity) | translate}} + {{severityText(res.severity) | translate}} + {{severityText(res.severity) | translate}} + {{severityText(res.severity) | translate}} + {{res.package}} {{res.version}} {{res.fixedVersion}} diff --git a/src/ui_ng/package.json b/src/ui_ng/package.json index 63367ddbf..afbe66da3 100644 --- a/src/ui_ng/package.json +++ b/src/ui_ng/package.json @@ -1,6 +1,6 @@ { "name": "harbor", - "version": "1.1.0", + "version": "1.2.0", "description": "Harbor UI with Clarity", "angular-cli": {}, "scripts": { @@ -13,25 +13,25 @@ }, "private": true, "dependencies": { - "@angular/animations": "^4.1.3", - "@angular/common": "^4.1.3", - "@angular/compiler": "^4.1.3", - "@angular/compiler-cli": "^4.0.2", - "@angular/core": "^4.1.3", - "@angular/forms": "^4.1.3", - "@angular/http": "^4.1.3", - "@angular/platform-browser": "^4.1.3", - "@angular/platform-browser-dynamic": "^4.1.3", - "@angular/router": "^4.1.3", + "@angular/animations": "~4.1.3", + "@angular/common": "~4.1.3", + "@angular/compiler": "~4.1.3", + "@angular/compiler-cli": "~4.1.3", + "@angular/core": "~4.1.3", + "@angular/forms": "~4.1.3", + "@angular/http": "~4.1.3", + "@angular/platform-browser": "~4.1.3", + "@angular/platform-browser-dynamic": "~4.1.3", + "@angular/router": "~4.1.3", "@ngx-translate/core": "^6.0.0", "@ngx-translate/http-loader": "0.0.3", "@types/jquery": "^2.0.41", "@webcomponents/custom-elements": "1.0.0-alpha.3", - "clarity-angular": "^0.9.7", - "clarity-icons": "^0.9.7", - "clarity-ui": "^0.9.7", + "clarity-angular": "^0.9.8", + "clarity-icons": "^0.9.8", + "clarity-ui": "^0.9.8", "core-js": "^2.4.1", - "harbor-ui": "^0.1.99", + "harbor-ui": "^0.2.12", "intl": "^1.2.5", "mutationobserver-shim": "^0.3.2", "ngx-clipboard": "^8.0.2", @@ -43,7 +43,7 @@ }, "devDependencies": { "@angular/cli": "^1.0.0", - "@angular/compiler-cli": "^4.0.2", + "@angular/compiler-cli": "~4.1.3", "@types/core-js": "^0.9.34", "@types/jasmine": "~2.2.30", "@types/node": "^6.0.42", @@ -69,4 +69,4 @@ "typings": "^1.4.0", "webdriver-manager": "10.2.5" } -} +} \ No newline at end of file diff --git a/src/ui_ng/src/app/repository/repository-page.component.html b/src/ui_ng/src/app/repository/repository-page.component.html index 9377458e9..34e6bd8d0 100644 --- a/src/ui_ng/src/app/repository/repository-page.component.html +++ b/src/ui_ng/src/app/repository/repository-page.component.html @@ -1,3 +1,3 @@
- +
\ No newline at end of file diff --git a/src/ui_ng/src/app/repository/repository-page.component.ts b/src/ui_ng/src/app/repository/repository-page.component.ts index ff0241ead..edd9921b7 100644 --- a/src/ui_ng/src/app/repository/repository-page.component.ts +++ b/src/ui_ng/src/app/repository/repository-page.component.ts @@ -27,6 +27,7 @@ export class RepositoryPageComponent implements OnInit { projectId: number; hasProjectAdminRole: boolean; hasSignedIn: boolean; + projectName: string; constructor( private route: ActivatedRoute, @@ -39,7 +40,9 @@ export class RepositoryPageComponent implements OnInit { this.projectId = this.route.snapshot.parent.params['id']; let resolverData = this.route.snapshot.parent.data; if (resolverData) { - this.hasProjectAdminRole = (resolverData['projectResolver']).has_project_admin_role; + let pro: Project = resolverData['projectResolver']; + this.hasProjectAdminRole = pro.has_project_admin_role; + this.projectName = pro.name; } this.hasSignedIn = this.session.getCurrentUser() !== null; } diff --git a/src/ui_ng/src/i18n/lang/en-us-lang.json b/src/ui_ng/src/i18n/lang/en-us-lang.json index fd9f9f277..f3661f901 100644 --- a/src/ui_ng/src/i18n/lang/en-us-lang.json +++ b/src/ui_ng/src/i18n/lang/en-us-lang.json @@ -465,12 +465,13 @@ }, "CHART": { "SCANNING_TIME": "Scan completed", - "TOOLTIPS_TITLE": "This tag has {{totalVulnerability}} vulnerabilities across {{totalPackages}} packages." + "TOOLTIPS_TITLE": "This tag has {{totalVulnerability}} packages with vulnerabilities across all {{totalPackages}} packages." }, "SEVERITY": { "HIGH": "High level", "MEDIUM": "Medium level", "LOW": "Low level", + "NEGLIGIBLE": "Negligible", "UNKNOWN": "Unknown", "NONE": "None" }, diff --git a/src/ui_ng/src/i18n/lang/es-es-lang.json b/src/ui_ng/src/i18n/lang/es-es-lang.json index db2c6f1d9..2c714e4b0 100644 --- a/src/ui_ng/src/i18n/lang/es-es-lang.json +++ b/src/ui_ng/src/i18n/lang/es-es-lang.json @@ -464,12 +464,13 @@ }, "CHART": { "SCANNING_TIME": "Scan completed", - "TOOLTIPS_TITLE": "This tag has {{totalVulnerability}} vulnerabilities across {{totalPackages}} packages." + "TOOLTIPS_TITLE": "This tag has {{totalVulnerability}} packages with vulnerabilities across all {{totalPackages}} packages." }, "SEVERITY": { "HIGH": "High level", "MEDIUM": "Medium level", "LOW": "Low level", + "NEGLIGIBLE": "Negligible", "UNKNOWN": "Unknown", "NONE": "None" }, diff --git a/src/ui_ng/src/i18n/lang/zh-cn-lang.json b/src/ui_ng/src/i18n/lang/zh-cn-lang.json index 3c229e9ef..43d22a560 100644 --- a/src/ui_ng/src/i18n/lang/zh-cn-lang.json +++ b/src/ui_ng/src/i18n/lang/zh-cn-lang.json @@ -465,12 +465,13 @@ }, "CHART": { "SCANNING_TIME": "扫描完成", - "TOOLTIPS_TITLE": "在此镜像的{{totalPackages}}包中扫描出{{totalVulnerability}}缺陷。" + "TOOLTIPS_TITLE": "在此镜像的{{totalPackages}}包中扫描出{{totalVulnerability}}个有缺陷的包。" }, "SEVERITY": { "HIGH": "严重", "MEDIUM": "中等", "LOW": "一般", + "NEGLIGIBLE": "可忽略", "UNKNOWN": "未知", "NONE": "无" },