From 9987d897056ed7ca0d4370989ba56f8bcf36e751 Mon Sep 17 00:00:00 2001 From: Steven Zou Date: Fri, 8 Sep 2017 19:15:50 +0800 Subject: [PATCH 1/3] enable server end pagination for project list --- .../repository-stackview.component.ts | 6 +- .../list-project/list-project.component.html | 19 +- .../list-project/list-project.component.ts | 296 ++++++++++++++---- .../src/app/project/project.component.html | 4 +- .../src/app/project/project.component.ts | 160 +--------- src/ui_ng/src/app/shared/shared.utils.ts | 128 ++++++++ 6 files changed, 389 insertions(+), 224 deletions(-) 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 ac2dc7bfa..1ec92911d 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 @@ -68,9 +68,9 @@ export class RepositoryStackviewComponent implements OnChanges, OnInit { @ViewChild('confirmationDialog') confirmationDialog: ConfirmationDialogComponent; - pullCountComparator: Comparator = new CustomComparator('pull_count', 'number'); + pullCountComparator: Comparator = new CustomComparator('pull_count', 'number'); - tagsCountComparator: Comparator = new CustomComparator('tags_count', 'number'); + tagsCountComparator: Comparator = new CustomComparator('tags_count', 'number'); pageSize: number = DEFAULT_PAGE_SIZE; currentPage: number = 1; @@ -277,7 +277,7 @@ export class RepositoryStackviewComponent implements OnChanges, OnInit { let total: number = this.totalCount - 1; if (total <= 0) { return null; } - let totalPages: number = Math.floor(total / this.pageSize); + let totalPages: number = Math.ceil(total / this.pageSize); let targetPageNumber: number = this.currentPage; if (this.currentPage > totalPages) { diff --git a/src/ui_ng/src/app/project/list-project/list-project.component.html b/src/ui_ng/src/app/project/list-project/list-project.component.html index bc7c3c3ce..4c57c22f5 100644 --- a/src/ui_ng/src/app/project/list-project/list-project.component.html +++ b/src/ui_ng/src/app/project/list-project/list-project.component.html @@ -1,10 +1,10 @@ - - {{'PROJECT.NAME' | translate}} - {{'PROJECT.ACCESS_LEVEL' | translate}} - {{'PROJECT.ROLE' | translate}} - {{'PROJECT.REPO_COUNT'| translate}} - {{'PROJECT.CREATION_TIME' | translate}} - + + {{'PROJECT.NAME' | translate}} + {{'PROJECT.ACCESS_LEVEL' | translate}} + {{'PROJECT.ROLE' | translate}} + {{'PROJECT.REPO_COUNT'| translate}} + {{'PROJECT.CREATION_TIME' | translate}} + @@ -17,8 +17,7 @@ {{p.creation_time | date: 'short'}} - {{pagination.firstItem + 1}} - {{pagination.lastItem +1 }} {{'PROJECT.OF' | translate}} - {{pagination.totalItems }} {{'PROJECT.ITEMS' | translate}} - + {{pagination.firstItem + 1}} - {{pagination.lastItem +1 }} {{'PROJECT.OF' | translate}} {{pagination.totalItems }} {{'PROJECT.ITEMS' | translate}} + \ No newline at end of file diff --git a/src/ui_ng/src/app/project/list-project/list-project.component.ts b/src/ui_ng/src/app/project/list-project/list-project.component.ts index ccb579d08..4e4cfd4d8 100644 --- a/src/ui_ng/src/app/project/list-project/list-project.component.ts +++ b/src/ui_ng/src/app/project/list-project/list-project.component.ts @@ -11,7 +11,14 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -import { Component, EventEmitter, Output, Input, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core'; +import { + Component, + Output, + Input, + ChangeDetectionStrategy, + ChangeDetectorRef, + OnDestroy +} from '@angular/core'; import { Router, NavigationExtras } from '@angular/router'; import { Project } from '../project'; import { ProjectService } from '../project.service'; @@ -19,76 +26,241 @@ import { ProjectService } from '../project.service'; import { SessionService } from '../../shared/session.service'; import { SearchTriggerService } from '../../base/global-search/search-trigger.service'; import { ProjectTypes, RoleInfo } from '../../shared/shared.const'; +import { CustomComparator, doFiltering, doSorting, calculatePage } from '../../shared/shared.utils'; -import { State } from 'clarity-angular'; +import { Comparator, State } from 'clarity-angular'; +import { MessageHandlerService } from '../../shared/message-handler/message-handler.service'; +import { StatisticHandler } from '../../shared/statictics/statistic-handler.service'; +import { Subscription } from 'rxjs/Subscription'; +import { ConfirmationDialogService } from '../../shared/confirmation-dialog/confirmation-dialog.service'; +import { ConfirmationMessage } from '../../shared/confirmation-dialog/confirmation-message'; +import { ConfirmationTargets, ConfirmationState, ConfirmationButtons } from '../../shared/shared.const'; @Component({ - selector: 'list-project', - templateUrl: 'list-project.component.html', - changeDetection: ChangeDetectionStrategy.OnPush + selector: 'list-project', + templateUrl: 'list-project.component.html', + changeDetection: ChangeDetectionStrategy.OnPush }) -export class ListProjectComponent { - _filterType: string = ProjectTypes[0]; +export class ListProjectComponent implements OnDestroy { + loading: boolean = true; + projects: Project[] = []; + filteredType: number = 0;//All projects + searchKeyword: string = ""; - @Input() loading: boolean = true; - @Input() projects: Project[]; - @Input() - get filteredType(): string { - return this._filterType; - } - set filteredType(value: string) { - if (value && value.trim() !== "") { - this._filterType = value; + roleInfo = RoleInfo; + repoCountComparator: Comparator = new CustomComparator("repo_count", "number"); + timeComparator: Comparator = new CustomComparator("creation_time", "date"); + accessLevelComparator: Comparator = new CustomComparator("public", "number"); + roleComparator: Comparator = new CustomComparator("current_user_role_id", "number"); + currentPage: number = 1; + totalCount: number = 0; + pageSize: number = 15; + currentState: State; + subscription: Subscription; + + constructor( + private session: SessionService, + private router: Router, + private searchTrigger: SearchTriggerService, + private proService: ProjectService, + private msgHandler: MessageHandlerService, + private statisticHandler: StatisticHandler, + private deletionDialogService: ConfirmationDialogService, + private ref: ChangeDetectorRef) { + this.subscription = deletionDialogService.confirmationConfirm$.subscribe(message => { + if (message && + message.state === ConfirmationState.CONFIRMED && + message.source === ConfirmationTargets.PROJECT) { + let projectId = message.data; + this.proService + .deleteProject(projectId) + .subscribe( + response => { + this.msgHandler.showSuccess('PROJECT.DELETED_SUCCESS'); + let st: State = this.getStateAfterDeletion(); + if (!st) { + this.refresh(); + } else { + this.clrLoad(st); + this.statisticHandler.refresh(); + } + }, + error => { + if (error && error.status === 412) { + this.msgHandler.showError('PROJECT.FAILED_TO_DELETE_PROJECT', ''); + } else { + this.msgHandler.handleError(error); + } + } + ); + + let hnd = setInterval(() => ref.markForCheck(), 100); + setTimeout(() => clearInterval(hnd), 2000); + } + }); + + let hnd = setInterval(() => ref.markForCheck(), 100); + setTimeout(() => clearInterval(hnd), 5000); } - } - @Output() paginate = new EventEmitter(); - @Output() toggle = new EventEmitter(); - @Output() delete = new EventEmitter(); - - roleInfo = RoleInfo; - - constructor( - private session: SessionService, - private router: Router, - private searchTrigger: SearchTriggerService, - private ref: ChangeDetectorRef) { - let hnd = setInterval(() => ref.markForCheck(), 100); - setTimeout(() => clearInterval(hnd), 1000); - } - - get showRoleInfo(): boolean { - return this.filteredType !== ProjectTypes[2]; - } - - public get isSystemAdmin(): boolean { - let account = this.session.getCurrentUser(); - return account != null && account.has_admin_role > 0; - } - - goToLink(proId: number): void { - this.searchTrigger.closeSearch(true); - - let linkUrl = ['harbor', 'projects', proId, 'repositories']; - this.router.navigate(linkUrl); - } - - refresh(state: State) { - this.paginate.emit(state); - } - - newReplicationRule(p: Project) { - if (p) { - this.router.navigateByUrl(`/harbor/projects/${p.project_id}/replications?is_create=true`); + get showRoleInfo(): boolean { + return this.filteredType !== 2; } - } - toggleProject(p: Project) { - this.toggle.emit(p); - } + public get isSystemAdmin(): boolean { + let account = this.session.getCurrentUser(); + return account != null && account.has_admin_role > 0; + } - deleteProject(p: Project) { - this.delete.emit(p); - } + ngOnDestroy(): void { + if (this.subscription) { + this.subscription.unsubscribe(); + } + } + + goToLink(proId: number): void { + this.searchTrigger.closeSearch(true); + + let linkUrl = ['harbor', 'projects', proId, 'repositories']; + this.router.navigate(linkUrl); + } + + clrLoad(state: State) { + //Keep state for future filtering and sorting + this.currentState = state; + + let pageNumber: number = calculatePage(state); + if (pageNumber <= 0) { pageNumber = 1; } + + this.loading = true; + + let passInFilteredType: number = undefined; + if (this.filteredType > 0) { + passInFilteredType = this.filteredType - 1; + } + this.proService.listProjects(this.searchKeyword, passInFilteredType, pageNumber, this.pageSize).toPromise() + .then(response => { + //Get total count + if (response.headers) { + let xHeader: string = response.headers.get("X-Total-Count"); + if (xHeader) { + this.totalCount = parseInt(xHeader, 0); + } + } + + this.projects = response.json() as Project[]; + //Do customising filtering and sorting + this.projects = doFiltering(this.projects, state); + this.projects = doSorting(this.projects, state); + + this.loading = false; + }) + .catch(error => { + this.loading = false; + this.msgHandler.handleError(error); + }); + + //Force refresh view + let hnd = setInterval(() => this.ref.markForCheck(), 100); + setTimeout(() => clearInterval(hnd), 5000); + } + + newReplicationRule(p: Project) { + if (p) { + this.router.navigateByUrl(`/harbor/projects/${p.project_id}/replications?is_create=true`); + } + } + + toggleProject(p: Project) { + if (p) { + p.public === 0 ? p.public = 1 : p.public = 0; + this.proService + .toggleProjectPublic(p.project_id, p.public) + .subscribe( + response => { + this.msgHandler.showSuccess('PROJECT.TOGGLED_SUCCESS'); + let pp: Project = this.projects.find((item: Project) => item.project_id === p.project_id); + if (pp) { + pp.public = p.public; + this.statisticHandler.refresh(); + } + }, + error => this.msgHandler.handleError(error) + ); + + //Force refresh view + let hnd = setInterval(() => this.ref.markForCheck(), 100); + setTimeout(() => clearInterval(hnd), 2000); + } + } + + deleteProject(p: Project) { + let deletionMessage = new ConfirmationMessage( + 'PROJECT.DELETION_TITLE', + 'PROJECT.DELETION_SUMMARY', + p.name, + p.project_id, + ConfirmationTargets.PROJECT, + ConfirmationButtons.DELETE_CANCEL + ); + this.deletionDialogService.openComfirmDialog(deletionMessage); + } + + refresh(): void { + this.currentPage = 1; + this.filteredType = 0; + this.searchKeyword = ""; + + this.reload(); + this.statisticHandler.refresh(); + } + + doFilterProject(filter: number): void { + this.currentPage = 1; + this.filteredType = filter; + this.reload(); + } + + doSearchProject(proName: string): void { + this.currentPage = 1; + this.searchKeyword = proName; + this.reload(); + } + + reload(): void { + let st: State = this.currentState; + if (!st) { + st = { + page: {} + }; + } + st.page.from = 0; + st.page.to = this.pageSize - 1; + st.page.size = this.pageSize; + + this.clrLoad(st); + } + + getStateAfterDeletion(): State { + let total: number = this.totalCount - 1; + if (total <= 0) { return null; } + + let totalPages: number = Math.ceil(total / this.pageSize); + let targetPageNumber: number = this.currentPage; + + if (this.currentPage > totalPages) { + targetPageNumber = totalPages;//Should == currentPage -1 + } + + let st: State = this.currentState; + if (!st) { + st = { page: {} }; + } + st.page.size = this.pageSize; + st.page.from = (targetPageNumber - 1) * this.pageSize; + st.page.to = targetPageNumber * this.pageSize - 1; + + return st; + } } \ No newline at end of file diff --git a/src/ui_ng/src/app/project/project.component.html b/src/ui_ng/src/app/project/project.component.html index d55f95930..11bbfde3e 100644 --- a/src/ui_ng/src/app/project/project.component.html +++ b/src/ui_ng/src/app/project/project.component.html @@ -13,7 +13,7 @@
- @@ -25,6 +25,6 @@
- + \ No newline at end of file diff --git a/src/ui_ng/src/app/project/project.component.ts b/src/ui_ng/src/app/project/project.component.ts index f81017403..876e91bd6 100644 --- a/src/ui_ng/src/app/project/project.component.ts +++ b/src/ui_ng/src/app/project/project.component.ts @@ -11,44 +11,21 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -import {Component, OnInit, ViewChild, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy} from '@angular/core'; - +import { Component, OnInit, ViewChild, OnDestroy} from '@angular/core'; import { Router } from '@angular/router'; - import { Project } from './project'; -import { ProjectService } from './project.service'; - import { CreateProjectComponent } from './create-project/create-project.component'; - import { ListProjectComponent } from './list-project/list-project.component'; - -import { MessageHandlerService } from '../shared/message-handler/message-handler.service'; -import { Message } from '../global-message/message'; - -import { Response } from '@angular/http'; - -import { ConfirmationDialogService } from '../shared/confirmation-dialog/confirmation-dialog.service'; -import { ConfirmationMessage } from '../shared/confirmation-dialog/confirmation-message'; -import { ConfirmationTargets, ConfirmationState, ConfirmationButtons } from '../shared/shared.const'; - -import { Subscription } from 'rxjs/Subscription'; - -import { State } from 'clarity-angular'; - import { AppConfigService } from '../app-config.service'; import { SessionService } from '../shared/session.service'; import { ProjectTypes } from '../shared/shared.const'; -import { StatisticHandler } from '../shared/statictics/statistic-handler.service'; @Component({ selector: 'project', templateUrl: 'project.component.html', - styleUrls: ['./project.component.css'], - changeDetection: ChangeDetectionStrategy.OnPush + styleUrls: ['./project.component.css'] }) -export class ProjectComponent implements OnInit, OnDestroy { - - changedProjects: Project[]; +export class ProjectComponent implements OnInit { projectTypes = ProjectTypes; @ViewChild(CreateProjectComponent) @@ -60,65 +37,30 @@ export class ProjectComponent implements OnInit, OnDestroy { currentFilteredType: number = 0;//all projects projectName: string = ""; - subscription: Subscription; loading: boolean = true; - get selecteType (): number { + get selecteType(): number { return this.currentFilteredType; } set selecteType(_project: number) { + this.currentFilteredType = _project; if (window.sessionStorage) { window.sessionStorage['projectTypeValue'] = _project; } } constructor( - private projectService: ProjectService, - private messageHandlerService: MessageHandlerService, private appConfigService: AppConfigService, - private sessionService: SessionService, - private deletionDialogService: ConfirmationDialogService, - private statisticHandler: StatisticHandler, - private ref: ChangeDetectorRef) { - this.subscription = deletionDialogService.confirmationConfirm$.subscribe(message => { - if (message && - message.state === ConfirmationState.CONFIRMED && - message.source === ConfirmationTargets.PROJECT) { - let projectId = message.data; - this.projectService - .deleteProject(projectId) - .subscribe( - response => { - this.messageHandlerService.showSuccess('PROJECT.DELETED_SUCCESS'); - this.retrieve(); - this.statisticHandler.refresh(); - }, - error => { - if (error && error.status === 412) { - this.messageHandlerService.showError('PROJECT.FAILED_TO_DELETE_PROJECT', ''); - } else { - this.messageHandlerService.handleError(error); - } - } - ); - } - }); - + private sessionService: SessionService) { } ngOnInit(): void { - if (window.sessionStorage && window.sessionStorage['projectTypeValue'] && window.sessionStorage['fromDetails']) { + if (window.sessionStorage && window.sessionStorage['projectTypeValue'] && window.sessionStorage['fromDetails']) { this.currentFilteredType = +window.sessionStorage['projectTypeValue']; window.sessionStorage.removeItem('fromDetails'); } } - ngOnDestroy(): void { - if (this.subscription) { - this.subscription.unsubscribe(); - } - } - get projectCreationRestriction(): boolean { let account = this.sessionService.getCurrentUser(); if (account) { @@ -132,105 +74,29 @@ export class ProjectComponent implements OnInit, OnDestroy { return false; } - retrieve(state?: State): void { - this.projectName = ""; - if (this.currentFilteredType !== 0) { - this.getProjects('', this.currentFilteredType - 1); - return; - } - this.getProjects(); - } - - getProjects(name?: string, isPublic?: number, page?: number, pageSize?: number): void { - this.loading = true; - this.projectService - .listProjects(name, isPublic, page, pageSize) - .subscribe( - response => { - this.changedProjects = response.json(); - this.loading = false; - }, - error => { - this.loading = false; - this.messageHandlerService.handleError(error); - } - ); - let hnd = setInterval(()=>this.ref.markForCheck(), 100); - setTimeout(()=>clearInterval(hnd), 2000); - } - openModal(): void { this.creationProject.newProject(); } createProject(created: boolean) { if (created) { - this.retrieve(); - this.statisticHandler.refresh(); + this.refresh(); } } doSearchProjects(projectName: string): void { this.projectName = projectName; - if (projectName === "") { - if (this.currentFilteredType === 0) { - this.getProjects(); - } else { - this.getProjects(projectName, this.currentFilteredType - 1); - } - } else { - this.getProjects(projectName); - } + this.listProject.doSearchProject(this.projectName); } - doFilterProjects($event: any): void { - if ($event && $event.target && $event.target["value"]) { - this.projectName = ""; - this.currentFilteredType = +$event.target["value"]; - if (this.currentFilteredType === 0) { - this.getProjects(); - } else { - this.getProjects("", this.currentFilteredType - 1); - } - } - } - - toggleProject(p: Project) { - if (p) { - p.public === 0 ? p.public = 1 : p.public = 0; - this.projectService - .toggleProjectPublic(p.project_id, p.public) - .subscribe( - response => { - this.messageHandlerService.showSuccess('PROJECT.TOGGLED_SUCCESS'); - this.statisticHandler.refresh(); - if (this.currentFilteredType === 0) { - this.getProjects(); - } else { - this.getProjects("", this.currentFilteredType - 1); - } - }, - error => this.messageHandlerService.handleError(error) - ); - } - } - - deleteProject(p: Project) { - let deletionMessage = new ConfirmationMessage( - 'PROJECT.DELETION_TITLE', - 'PROJECT.DELETION_SUMMARY', - p.name, - p.project_id, - ConfirmationTargets.PROJECT, - ConfirmationButtons.DELETE_CANCEL - ); - this.deletionDialogService.openComfirmDialog(deletionMessage); + doFilterProjects(): void { + this.listProject.doFilterProject(this.selecteType); } refresh(): void { this.currentFilteredType = 0; - this.retrieve(); - this.statisticHandler.refresh(); + this.projectName = ""; + this.listProject.refresh(); } } \ No newline at end of file diff --git a/src/ui_ng/src/app/shared/shared.utils.ts b/src/ui_ng/src/app/shared/shared.utils.ts index 5e4ca4ffe..6f04d8542 100644 --- a/src/ui_ng/src/app/shared/shared.utils.ts +++ b/src/ui_ng/src/app/shared/shared.utils.ts @@ -14,6 +14,8 @@ import { NgForm } from '@angular/forms'; import { httpStatusCode, AlertType } from './shared.const'; import { MessageService } from '../global-message/message.service'; +import { Comparator, State } from 'clarity-angular'; + /** * To handle the error message body * @@ -106,4 +108,130 @@ export const maintainUrlQueryParmas = function (uri: string, key: string, value: return uri + separator + key + "=" + value + hash; } } +} + +//Copy from ui library utils.ts + +/** + * Calculate page number by state + */ +export function calculatePage(state: State): number { + if (!state || !state.page) { + return 1; + } + + return Math.ceil((state.page.to + 1) / state.page.size); +} + +/** + * Comparator for fields with specific type. + * + */ +export class CustomComparator implements Comparator { + + fieldName: string; + type: string; + + constructor(fieldName: string, type: string) { + this.fieldName = fieldName; + this.type = type; + } + + compare(a: { [key: string]: any | any[] }, b: { [key: string]: any | any[] }) { + let comp = 0; + if (a && b) { + let fieldA = a[this.fieldName]; + let fieldB = b[this.fieldName]; + switch (this.type) { + case "number": + comp = fieldB - fieldA; + break; + case "date": + comp = new Date(fieldB).getTime() - new Date(fieldA).getTime(); + break; + } + } + return comp; + } +} + +/** + * Filter columns via RegExp + * + * @export + * @param {State} state + * @returns {void} + */ +export function doFiltering(items: T[], state: State): T[] { + if (!items || items.length === 0) { + return items; + } + + if (!state || !state.filters || state.filters.length === 0) { + return items; + } + + state.filters.forEach((filter: { + property: string; + value: string; + }) => { + items = items.filter(item => regexpFilter(filter["value"], item[filter["property"]])); + }); + + return items; +} + +/** + * Match items via RegExp + * + * @export + * @param {string} terms + * @param {*} testedValue + * @returns {boolean} + */ +export function regexpFilter(terms: string, testedValue: any): boolean { + let reg = new RegExp('.*' + terms + '.*', 'i'); + return reg.test(testedValue); +} + +/** + * Sorting the data by column + * + * @export + * @template T + * @param {T[]} items + * @param {State} state + * @returns {T[]} + */ +export function doSorting(items: T[], state: State): T[] { + if (!items || items.length === 0) { + return items; + } + if (!state || !state.sort) { + return items; + } + + return items.sort((a: T, b: T) => { + let comp: number = 0; + if (typeof state.sort.by !== "string") { + comp = state.sort.by.compare(a, b); + } else { + let propA = a[state.sort.by.toString()], propB = b[state.sort.by.toString()]; + if (typeof propA === "string") { + comp = propA.localeCompare(propB); + } else { + if (propA > propB) { + comp = 1; + } else if (propA < propB) { + comp = -1; + } + } + } + + if (state.sort.reverse) { + comp = -comp; + } + + return comp; + }); } \ No newline at end of file From 07b6934c9dae1973526cfcc46ddb50f44af7c9f1 Mon Sep 17 00:00:00 2001 From: Steven Zou Date: Wed, 27 Sep 2017 12:33:41 +0800 Subject: [PATCH 2/3] add video demo references (both youtube and v.qq)to the readme.md and the user guide --- README.md | 7 ++ docs/img/video.png | Bin 0 -> 2451 bytes docs/user_guide.md | 10 +- src/ui_ng/CODE_OF_CONDUCT.md | 19 ---- src/ui_ng/CONTRIBUTING.md | 113 ----------------------- src/ui_ng/Clarity Seed_LICENSE_MIT.txt | 16 ---- src/ui_ng/Clarity Seed_NOTICE.txt | 8 -- src/ui_ng/README.md | 122 +------------------------ src/ui_ng/lib/README.md | 1 + 9 files changed, 20 insertions(+), 276 deletions(-) create mode 100644 docs/img/video.png delete mode 100644 src/ui_ng/CODE_OF_CONDUCT.md delete mode 100644 src/ui_ng/CONTRIBUTING.md delete mode 100644 src/ui_ng/Clarity Seed_LICENSE_MIT.txt delete mode 100644 src/ui_ng/Clarity Seed_NOTICE.txt diff --git a/README.md b/README.md index 9b6c0efc5..ca5c23e00 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,13 @@ More info on [partners and users](partners.md). ### Contribution We welcome contributions from the community. If you wish to contribute code and you have not signed our contributor license agreement (CLA), our bot will update the issue when you open a pull request. For any questions about the CLA process, please refer to our [FAQ](https://cla.vmware.com/faq). Contact us for any questions: harbor @vmware.com . +### Demos +* ![play](docs/img/video.png) **Content Trust** ( [youtube](https://www.youtube.com/watch?v=pPklSTJZY2E) [v.qq](https://v.qq.com/x/page/n0553fzzrnf.html) ) +* ![play](docs/img/video.png) **Role Based Access Control** ( [youtube](https://www.youtube.com/watch?v=2ZIu9XTvsC0) [v.qq](https://v.qq.com/x/page/l0553yw19ek.html) ) +* ![play](docs/img/video.png) **Vulnerability Scanning** ( [youtube](https://www.youtube.com/watch?v=K4tJ6B2cGR4) [v.qq](https://v.qq.com/x/page/s0553k9692d.html) ) +* ![play](docs/img/video.png) **Image Replication** ( [youtube](https://www.youtube.com/watch?v=1NPlzrm5ozE) [v.qq](https://v.qq.com/x/page/a0553wc7fs9.html) ) +* ![play](docs/img/video.png) **VMworld 2017** ( [youtube](https://www.youtube.com/watch?v=tI5xMe24fJ4) ) + ### License Harbor is available under the [Apache 2 license](LICENSE). diff --git a/docs/img/video.png b/docs/img/video.png new file mode 100644 index 0000000000000000000000000000000000000000..d766cdb34dec4cb39e485eaf643c51e089a18da1 GIT binary patch literal 2451 zcmY*Z2{;s58=m1JvZP@`)Lc?D%w)+j#*|3*ZH#@1FhA zID2b%W-jpSZ=RRpoz04HBpu;i? z_v8-rZCXn5bbf#BUv3}9u4c_t1{Oz;mDdxO0=CQWT_NeK_@3W}8D*%nr2rou^tk%m zq;s!rb$*#8f7etvKIxwF$M*%rd9o)&uY4FUx?3f?WZ_f$UaY#a>_%O4*3ZdvX$GrW zQ`(ushI7x+U2kiuulAL6#q_ou_gYyo`RUQcHt(Y4CnO#oeSKwaX5n~Ie?q(kpZg%* zYCVZmX8d_Rk+qsupe@F~S$K^u-%HP=R#=*?&rNODf3VpjtQe*=V@-wSGo`)Z)4upB z*08PQKEqcBZNY4As!REIi^fZ&l)IjyHO|>Nj_cQ-3<= z{!r7=pbQiZ+@Qq2Tnm1QTdqm>!GcaCYZ(fiIIIZSJ4zq+)3sjDi_!(E#%Cez*RLu! zfP$8|Z*3w@`ymZqZ#~G?bEzsmJ!ah0UViqw-cdUr^qX2O>3bK{`ZakXz8(C>{`Efd zT87T|rW8xt+=n>+95!Ef9m)^8@saw;eYu77#A~3v!LDa9!h;-(QNoK(gTMaC=)2gb zvKqDg$z8@Wx!@UN?(Ui|(lZh!ZCP6=!VTlNDLUj>)UMIjGMcnHjwESpJ?ZE8Usn+Gm~UpG~e#vYvgjpx$|a|2%F)eEiJZ(}g7^TcbKDsGYXMxAD$>_g^3 z+1CtQH}1QyR;d2sIO7t!2W^4|-L8LSCX>-v6;qBE;_+2RZW9_@7G7Y-lY~59A_#1$ zLHStQ7gqz7?iw5|C|Y1;-cq>m)b4T!I^!MQYrn|S_*(8-v2MEz$QyR1geUo^^ThHZ z4>onV2~eP%lKMoApfLPgY+S@>HSJx)`!1C{tHj+OUu`U|KjiAhC2zf&|IkaWozqTf zHZ&=HII%=|jXL?g1`wP>1(ug3Vw}!yM+*9bIMK?J3;^r~?HCYHR3c~{K+jND4~mDq z9ReGPhXn*h2I63Gc%lFe03hQK0vC^?1VG~O5d<2XPJT^8K7OMw~Bn88DjE#-q z$8_Pky4nJSHaVU^35e4skk$Ss`45i;j*KOR5-FjP1jr6=KwxAv#Z*;wN9f=2_dO}0 z=l-iiApcXApg{P}30wzu4E`^-AQib2ML3c|aRTKXev}UK2lD@7|L7p$JL3OynZGOj z5fzk*l0d@$eKwSYUH1`B06_SOwS}3hl~kRZtwx=*oZsC1)(~_>ndP&Wp+T0sLB7gh z+?ISQ2Re0;u@?ui(UcVik@I6$cFli4R+2j=Ui(h8ty{y$`S3s%w5j z)!NwDh-e%Q!D8ud?(XwbQ?wT^UT8p}muNH^Yj*a67I-(1UfR5`(N=TT8n4_aF} zRiKhgZ!fRSV zE-Wm3u167k2vZ2$Vlb4VDW>bDoAP_DGEEf0obsH8I6s-L5#}$GT+c9@$ z26v~X2HUEZ1=Z4e1%fPOWQZC3*&{x#<4qi3GS#?~%U3q$9PzXtXV}xMcSpq>UD946!yI!w5Y{Zj*fZ`4Getx`jt2|I5_j*0aEZ7 zZxd**%4RPu+DRx6VwH`yx0kXOsg`#2%#j_)*O++p_@NZN2SEbnfv5E@_Xk@TE%BIQh PbVuvc4i/clarity-seed.git - -# Navigate to the directory -cd clarity-seed - -# Set name and e-mail configuration -git config user.name "John Doe" -git config user.email johndoe@example.com - -# Setup the upstream remote -git remote add upstream https://github.com/vmware/clarity-seed.git - -# Create a topic branch for your changes -git checkout -b my-new-feature master - -# After making the desired changes, commit and push to your fork -git commit -a -s -git push origin my-new-feature -``` - -### Staying In Sync With Upstream - -When your branch gets out of sync with the master branch, use the following to update: - -``` shell -git checkout my-new-feature -git fetch -a -git pull --rebase upstream master -git push --force-with-lease origin my-new-feature -``` - -### Updating Pull Requests - -If your PR fails to pass CI, or requires changes based on code review, you'll most likely want to squash these changes into existing commits. - -If your pull request contains a single commit, or your changes are related to the most recent commit, you can amend the commit. - -``` shell -git add . -git commit --amend -git push --force-with-lease origin my-new-feature -``` - -If you need to squash changes into an earlier commit, use the following: - -``` shell -git add . -git commit --fixup -git rebase -i --autosquash master -git push --force-with-lease origin my-new-feature -``` - -Make sure you add a comment to the PR indicating that your changes are ready to review. GitHub does not generate a notification when you use git push. - -### Formatting Commit Messages - -Use this format for your commit message: - -``` - - - - -Signed-off-by: Your Name -``` - -#### Writing Guidelines - -These documents provide guidance creating a well-crafted commit message: - - * [How to Write a Git Commit Message](http://chris.beams.io/posts/git-commit/) - * [Closing Issues Via Commit Messages](https://help.github.com/articles/closing-issues-via-commit-messages/) - -## Reporting Bugs and Creating Issues - -You can submit an issue or a bug to our [GitHub repository](https://github.com/vmware/clarity-seed/issues). You must provide: - -* Instruction on how to replicate the issue -* The version number of Angular -* The version number of Clarity -* The version number of Node -* The browser name and version number -* The OS running the seed diff --git a/src/ui_ng/Clarity Seed_LICENSE_MIT.txt b/src/ui_ng/Clarity Seed_LICENSE_MIT.txt deleted file mode 100644 index d336bce7b..000000000 --- a/src/ui_ng/Clarity Seed_LICENSE_MIT.txt +++ /dev/null @@ -1,16 +0,0 @@ -Clarity Seed - -Copyright © 2016 VMware, Inc. All rights reserved - -The MIT license (the “License”) set forth below applies to all parts of the Clarity Seed project. You may not use this file except in compliance with the License.  - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - diff --git a/src/ui_ng/Clarity Seed_NOTICE.txt b/src/ui_ng/Clarity Seed_NOTICE.txt deleted file mode 100644 index 7d47a3de7..000000000 --- a/src/ui_ng/Clarity Seed_NOTICE.txt +++ /dev/null @@ -1,8 +0,0 @@ -Clarity Seed - -Copyright (c) 2016 VMware, Inc. All Rights Reserved. - -This product is licensed to you under the MIT license (the "MIT License"). You may not use this product except in compliance with the MIT License. - -This product may include a number of subcomponents with separate copyright notices and license terms. Your use of these subcomponents is subject to the terms and conditions of the subcomponent's license, as noted in the LICENSE file. - diff --git a/src/ui_ng/README.md b/src/ui_ng/README.md index b7b51fa70..c4d6bccf7 100644 --- a/src/ui_ng/README.md +++ b/src/ui_ng/README.md @@ -1,121 +1,5 @@ -![Clarity](logo.png) +![Harbor UI](../../docs/img/harbor_logo.png) -Clarity Seed +Harbor UI ============ -This is a seed project for Angular 2 applications using [Clarity](https://github.com/vmware/clarity). For more information on the Clarity Design System, visit the [Clarity website](https://vmware.github.io/clarity/). - -We offer this seed project in three different build systems: - -1. **Angular-CLI version (branch: master)** - -2. Webpack 2 version (branch: webpack) - -3. SystemJS version (branch: systemjs) - -Getting started ----------------------------------- - -#### Angular-CLI version - -This seed version provides the following out of the box: - -- Angular 2 application with [clarity-icons](https://www.npmjs.com/package/clarity-icons), [clarity-ui](https://www.npmjs.com/package/clarity-ui) and [clarity-angular](https://www.npmjs.com/package/clarity-angular) included -- Development and production builds -- Unit test setup with Jasmine and Karma -- End-to-end test setup with Protractor -- SASS processor -- TSLint -- And other goodies that come with [Angular-CLI](https://github.com/angular/angular-cli#generating-and-serving-an-angular2-project-via-a-development-server) (v1.0.0-beta.20-4) - -#### Installation -*Prerequisite*: Please install Angular-CLI by following [these instructions](https://github.com/angular/angular-cli#installation). -*Note*: Even though it's optional, we recommend you to use [yarn](https://yarnpkg.com/) instead of `npm install` for installing the dependencies. - -```bash -git clone https://github.com/vmware/clarity-seed.git -cd clarity-seed - -# install the project's dependencies -yarn # or run "npm install" - -# starts the application in dev mode and watches your files for livereload -ng serve -``` - -#### Using Angular-CLI -```bash -# generating a new component -ng g component my-new-component - -# generating a new directive -ng g directive my-new-directive - -# to learn more about Angular-CLI commands and their usages -ng help -``` - -For comprehensive documentation on Angular-CLI, please see their [github repository](https://github.com/angular/angular-cli). - -#### Test and build scripts - -```bash -# running unit tests -ng test - -# running e2e tests -ng e2e - -# dev build -ng build - -# prod build -ng build --prod -``` - -## Documentation - - -For documentation on the Clarity Design System, including a list of components and example usage, see [our website](https://vmware.github.io/clarity). - - -#### Directory structure -``` -. -β”œβ”€β”€ README.md - -β”œβ”€β”€ karma.conf.js <- configuration of the test runner -β”œβ”€β”€ package.json <- dependencies of the project -β”œβ”€β”€ protractor.config.js <- e2e tests configuration -β”œβ”€β”€ src/ <- source code of the application -β”‚Β Β  β”œβ”€β”€ app/ -β”‚Β Β  β”‚Β Β  └── component/ -β”‚Β Β  β”‚Β Β  └── .component.html -β”‚Β Β  β”‚Β Β  └── .component.scss -β”‚Β Β  β”‚Β Β  └── .component.spec.ts -β”‚Β Β  β”‚Β Β  └── .component.ts -β”‚Β Β  β”‚Β Β  └── app.component.html -β”‚Β Β  β”‚Β Β  └── app.component.scss -β”‚Β Β  β”‚Β Β  └── app.component.ts -β”‚Β Β  β”‚Β Β  └── app.e2e-spec.js <- sample e2e spec file -β”‚Β Β  β”‚Β Β  └── app.module.ts -β”‚Β Β  β”‚Β Β  └── app.routing.ts -β”‚Β Β  β”‚Β Β  └── main.ts <- boostrap file for the angular app -β”‚Β Β  └── index.html -β”œβ”€β”€ angular-cli.json <- configuration of the angular-cli -β”œβ”€β”€ tsconfig.json <- configuration of the typescript project -β”œβ”€β”€ tslint.json <- sample configuration file for tslint -└── yarn.lock -``` - - -## Contributing - -The Clarity project team welcomes contributions from the community. For more detailed information, see [CONTRIBUTING.md](CONTRIBUTING.md). - -## License - -The clarity-seed project is licensed under the MIT license. - -## Feedback - -If you find a bug or want to request a new feature, please open a [GitHub issue](https://github.com/vmware/clarity-seed/issues). +This is the project based on Clarity and Angular to build Harbor UI. \ No newline at end of file diff --git a/src/ui_ng/lib/README.md b/src/ui_ng/lib/README.md index 55ca7dceb..89e903d13 100644 --- a/src/ui_ng/lib/README.md +++ b/src/ui_ng/lib/README.md @@ -1,5 +1,6 @@ # Harbor UI library **NOTES: Odd version is development version and may be not stable. Even version is release version which should be stable.** +![Harbor UI Library](../../../docs/img/harbor_logo.png) Wrap the following Harbor UI components into a sharable library and published as npm package for other third-party applications to import and reuse. From 708a8b04a2ad4f3dc61c35b153dac0192556ea2b Mon Sep 17 00:00:00 2001 From: Steven Zou Date: Thu, 28 Sep 2017 10:10:44 +0800 Subject: [PATCH 3/3] add sceenshots for the demo references added in user guide document --- README.md | 8 ++++---- docs/img/demos/content_trust.png | Bin 0 -> 25112 bytes docs/img/demos/image_replication.png | Bin 0 -> 24667 bytes docs/img/demos/rbac.png | Bin 0 -> 25514 bytes docs/img/demos/vul_scan.png | Bin 0 -> 25008 bytes docs/user_guide.md | 8 ++++---- 6 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 docs/img/demos/content_trust.png create mode 100644 docs/img/demos/image_replication.png create mode 100644 docs/img/demos/rbac.png create mode 100644 docs/img/demos/vul_scan.png diff --git a/README.md b/README.md index ca5c23e00..6ec53049c 100644 --- a/README.md +++ b/README.md @@ -41,10 +41,10 @@ More info on [partners and users](partners.md). We welcome contributions from the community. If you wish to contribute code and you have not signed our contributor license agreement (CLA), our bot will update the issue when you open a pull request. For any questions about the CLA process, please refer to our [FAQ](https://cla.vmware.com/faq). Contact us for any questions: harbor @vmware.com . ### Demos -* ![play](docs/img/video.png) **Content Trust** ( [youtube](https://www.youtube.com/watch?v=pPklSTJZY2E) [v.qq](https://v.qq.com/x/page/n0553fzzrnf.html) ) -* ![play](docs/img/video.png) **Role Based Access Control** ( [youtube](https://www.youtube.com/watch?v=2ZIu9XTvsC0) [v.qq](https://v.qq.com/x/page/l0553yw19ek.html) ) -* ![play](docs/img/video.png) **Vulnerability Scanning** ( [youtube](https://www.youtube.com/watch?v=K4tJ6B2cGR4) [v.qq](https://v.qq.com/x/page/s0553k9692d.html) ) -* ![play](docs/img/video.png) **Image Replication** ( [youtube](https://www.youtube.com/watch?v=1NPlzrm5ozE) [v.qq](https://v.qq.com/x/page/a0553wc7fs9.html) ) +* ![play](docs/img/video.png) **Content Trust** ( [youtube](https://www.youtube.com/watch?v=pPklSTJZY2E) , [Tencent Video](https://v.qq.com/x/page/n0553fzzrnf.html) ) +* ![play](docs/img/video.png) **Role Based Access Control** ( [youtube](https://www.youtube.com/watch?v=2ZIu9XTvsC0) , [Tencent Video](https://v.qq.com/x/page/l0553yw19ek.html) ) +* ![play](docs/img/video.png) **Vulnerability Scanning** ( [youtube](https://www.youtube.com/watch?v=K4tJ6B2cGR4) , [Tencent Video](https://v.qq.com/x/page/s0553k9692d.html) ) +* ![play](docs/img/video.png) **Image Replication** ( [youtube](https://www.youtube.com/watch?v=1NPlzrm5ozE) , [Tencent Video](https://v.qq.com/x/page/a0553wc7fs9.html) ) * ![play](docs/img/video.png) **VMworld 2017** ( [youtube](https://www.youtube.com/watch?v=tI5xMe24fJ4) ) ### License diff --git a/docs/img/demos/content_trust.png b/docs/img/demos/content_trust.png new file mode 100644 index 0000000000000000000000000000000000000000..45da0e65f84083d4fa5fd8c3490768342a774fb1 GIT binary patch literal 25112 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 Hu0mjfe-aA! literal 0 HcmV?d00001 diff --git a/docs/img/demos/image_replication.png b/docs/img/demos/image_replication.png new file mode 100644 index 0000000000000000000000000000000000000000..35f5bfe1337cad707d1119a645daa1cc63224d26 GIT binary patch literal 24667 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 IM6N<$f_^R@KL7v# literal 0 HcmV?d00001 diff --git a/docs/user_guide.md b/docs/user_guide.md index 6408f2092..39d48b784 100644 --- a/docs/user_guide.md +++ b/docs/user_guide.md @@ -31,7 +31,7 @@ Besides the above three roles, there are two system-wide roles: * **SysAdmin**: "SysAdmin" has the most privileges. In addition to the privileges mentioned above, "SysAdmin" can also list all projects, set an ordinary user as administrator, delete users and set vulnerability scan policy for all images. The public project "library" is also owned by the administrator. * **Anonymous**: When a user is not logged in, the user is considered as an "Anonymous" user. An anonymous user has no access to private projects and has read-only access to public projects. -See video demo: [youtube](https://www.youtube.com/watch?v=2ZIu9XTvsC0) [v.qq](https://v.qq.com/x/page/l0553yw19ek.html) +**Video demo:** ![RBAC](img/demos/rbac.png) [youtube](https://www.youtube.com/watch?v=2ZIu9XTvsC0) , [Tencent Video](https://v.qq.com/x/page/l0553yw19ek.html) ## User account Harbor supports two authentication modes: @@ -107,7 +107,7 @@ Click a rule, jobs which belong to this rule will be listed. A job represents th ![browse project](img/new_rule_list.png) -See video demo: [youtube](https://www.youtube.com/watch?v=1NPlzrm5ozE) [v.qq](https://v.qq.com/x/page/a0553wc7fs9.html) +**Video demo:** ![Image replication](img/demos/image_replication.png) [youtube](https://www.youtube.com/watch?v=1NPlzrm5ozE) , [Tencent Video](https://v.qq.com/x/page/a0553wc7fs9.html) ## Searching projects and repositories Entering a keyword in the search field at the top lists all matching projects and repositories. The search result includes both public and private repositories you have access to. @@ -258,7 +258,7 @@ If you are using a self-signed cert, make sure to copy the CA cert into ```/etc/ When an image is signed, it has a tick shown in UI; otherwise, a cross sign(X) is displayed instead. ![browse project](img/content_trust.png) -See video demo: [youtube](https://www.youtube.com/watch?v=pPklSTJZY2E) [v.qq](https://v.qq.com/x/page/n0553fzzrnf.html) +**Video demo:** ![content trust](img/demos/content_trust.png) [youtube](https://www.youtube.com/watch?v=pPklSTJZY2E) , [Tencent Video](https://v.qq.com/x/page/n0553fzzrnf.html) ### Vulnerability scanning via Clair **CAUTION: Clair is an optional component, please make sure you have already installed it in your Harbor instance before you go through this section.** @@ -328,4 +328,4 @@ You can set policies to control the vulnerability analysis process. Currently, t **NOTES: Once the scheduled job is executed, the completion time of scanning all images will be updated accordingly. Please be aware that the completion time of the images may be different because the execution of analysis for each image may be carried out at different time.** -See video demo: [youtube](https://www.youtube.com/watch?v=K4tJ6B2cGR4) [v.qq](https://v.qq.com/x/page/s0553k9692d.html) \ No newline at end of file +**Video demo:** ![vulnerability scanning](img/demos/vul_scan.png) [youtube](https://www.youtube.com/watch?v=K4tJ6B2cGR4) , [Tencent Video](https://v.qq.com/x/page/s0553k9692d.html) \ No newline at end of file