diff --git a/projects/ars/src/lib/ars.module.ts b/projects/ars/src/lib/ars.module.ts index 03efa211e66ea89466d009bff2aa9662e512889a..2d6b38838138c8a8952b3399fe009080c073c9de 100644 --- a/projects/ars/src/lib/ars.module.ts +++ b/projects/ars/src/lib/ars.module.ts @@ -31,6 +31,8 @@ import { TranslateModule } from '@ngx-translate/core'; import { MatMenuModule } from '@angular/material/menu'; import { MatInputModule } from '@angular/material/input'; import { MatSlideToggleModule } from '@angular/material/slide-toggle'; +import { ArsMatPaginatorComponent } from './components/content/paginator/ars-mat-paginator/ars-mat-paginator.component'; +import { MatPaginatorModule } from '@angular/material/paginator'; @NgModule({ declarations: [ @@ -55,20 +57,22 @@ import { MatSlideToggleModule } from '@angular/material/slide-toggle'; MatToggleComponent, MatChipListComponent, MatDatePickerComponent, - MatMenuItemComponent - ], - imports:[ - MatIconModule, - MatButtonModule, - CommonModule, - MatChipsModule, - MatFormFieldModule, - MatDatepickerModule, - TranslateModule, - MatMenuModule, - MatInputModule, - MatSlideToggleModule + MatMenuItemComponent, + ArsMatPaginatorComponent ], + imports:[ + MatIconModule, + MatButtonModule, + CommonModule, + MatChipsModule, + MatFormFieldModule, + MatDatepickerModule, + TranslateModule, + MatMenuModule, + MatInputModule, + MatSlideToggleModule, + MatPaginatorModule + ], exports:[ ArsComponent, FullScreenOverlayComponent, @@ -85,7 +89,8 @@ import { MatSlideToggleModule } from '@angular/material/slide-toggle'; ButtonWrapperDirective, ButtonBaseDirective, MaterialBtnComponent, - ArsComposeHostDirective + ArsComposeHostDirective, + ArsMatPaginatorComponent ] }) export class ArsModule { } diff --git a/projects/ars/src/lib/components/content/paginator/ars-mat-paginator/ars-mat-paginator.component.html b/projects/ars/src/lib/components/content/paginator/ars-mat-paginator/ars-mat-paginator.component.html new file mode 100644 index 0000000000000000000000000000000000000000..052cfa9bc1c73d6c1971b8a987b99b6b726fcac7 --- /dev/null +++ b/projects/ars/src/lib/components/content/paginator/ars-mat-paginator/ars-mat-paginator.component.html @@ -0,0 +1,11 @@ +<mat-paginator + class="paginator" + [pageIndex]="pageIndex" + [pageSize]="pageSize" + (page)="page.emit($event)" + [disabled]="disabled" + [pageSizeOptions]="pageSizeOptions" + [length]="length" + [hidePageSize]="hidePageSize" + [showFirstLastButtons]="showFirstLastButtons" +></mat-paginator> diff --git a/projects/ars/src/lib/components/content/paginator/ars-mat-paginator/ars-mat-paginator.component.scss b/projects/ars/src/lib/components/content/paginator/ars-mat-paginator/ars-mat-paginator.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..c375310ba69cc1340600ccf120b5dd4c17bec523 --- /dev/null +++ b/projects/ars/src/lib/components/content/paginator/ars-mat-paginator/ars-mat-paginator.component.scss @@ -0,0 +1,25 @@ +:host ::ng-deep{ + .mat-icon-button.mat-button-disabled.mat-button-disabled{ + color:var(--on-background); + opacity:0.2;//recommend the use of rgba instead of hex in theme config to avoid this + } + .mat-icon-button{ + color:var(--on-background); + } + .mat-select-arrow{ + color:var(--on-background); + } + .mat-select-value-text{ + color:var(--on-background); + } + .mat-form-field-underline{ + background-color:var(--on-background); + } + .mat-paginator-outer-container{ + color:var(--on-background); + } + .mat-paginator{ + background-color:transparent; + } +} + diff --git a/projects/ars/src/lib/components/content/paginator/ars-mat-paginator/ars-mat-paginator.component.ts b/projects/ars/src/lib/components/content/paginator/ars-mat-paginator/ars-mat-paginator.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..429e459b9a33cb676bf726e4ed439c3c8b7ee38c --- /dev/null +++ b/projects/ars/src/lib/components/content/paginator/ars-mat-paginator/ars-mat-paginator.component.ts @@ -0,0 +1,77 @@ +import { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; +import { MatPaginator, MatPaginatorIntl, PageEvent } from '@angular/material/paginator'; +import { LanguageService } from '../../../../../../../../src/app/services/util/language.service'; +import { HttpClient } from '@angular/common/http'; + +export interface ArsMatPaginatorTheme{ + buttonColor: string; +} + +@Component({ + selector:'ars-mat-paginator', + templateUrl:'./ars-mat-paginator.component.html', + styleUrls:['./ars-mat-paginator.component.scss'] +}) +export class ArsMatPaginatorComponent implements OnInit, AfterViewInit{ + + @Input() pageIndex: number; + @Input() pageSize: number; + @Input() disabled: boolean; + @Input() pageSizeOptions: number[]; + @Input() length: number; + @Input() hidePageSize: boolean; + @Input() showFirstLastButtons: boolean; + @Output() page: EventEmitter<PageEvent> = new EventEmitter<PageEvent>(); + currentLang: string; + + @Input() colors: ArsMatPaginatorTheme; + + @ViewChild(MatPaginator) paginator: MatPaginator; + + constructor( + public lang: LanguageService, + public http: HttpClient + ){ + this.lang.langEmitter.subscribe(lang => { + this.setLang(lang); + }); + } + + setLang(lang: string){ + this.currentLang = lang; + this.http.get('/assets/i18n/ars-lib/' + this.currentLang + '.json').subscribe(translation => { + const paginatorIntl = new MatPaginatorIntl(); + paginatorIntl.itemsPerPageLabel = translation['paginator']['itemsPerPageLabel']; + paginatorIntl.nextPageLabel = translation['paginator']['nextPageLabel']; + paginatorIntl.previousPageLabel = translation['paginator']['previousPageLabel']; + paginatorIntl.firstPageLabel = translation['paginator']['firstPageLabel']; + paginatorIntl.lastPageLabel = translation['paginator']['lastPageLabel']; + paginatorIntl.getRangeLabel = this.createRangeLabel(translation); + this.paginator._intl=paginatorIntl; + this.paginator._changePageSize(this.pageSize); + }); + } + + ngOnInit(): void{ + } + + ngAfterViewInit(){ + this.setLang(localStorage.getItem('currentLang')); + } + + private createRangeLabel(translation: any){ + return (page: number, pageSize: number, length: number) => { + if (length === 0 || pageSize === 0){ + return translation['paginator']['rangePageLabel1']; + } + length = Math.max(length, 0); + const startIndex = page * pageSize; + const endIndex = startIndex < length?Math.min(startIndex + pageSize, length):startIndex + pageSize; + return translation['paginator']['rangePageLabel2'] + .replace('%start',startIndex) + .replace("%end",endIndex) + .replace("%length",length); + }; + } + +} diff --git a/src/app/components/moderator/moderator-comment-list/moderator-comment-list.component.html b/src/app/components/moderator/moderator-comment-list/moderator-comment-list.component.html index 667de875d1b8db7466fa5b949e255b1f1574cc2d..7b52aea060be2052e558992e4682f0bc588f1ea8 100644 --- a/src/app/components/moderator/moderator-comment-list/moderator-comment-list.component.html +++ b/src/app/components/moderator/moderator-comment-list/moderator-comment-list.component.html @@ -125,6 +125,16 @@ (clickedUserNumber)="clickedUserNumber($event)"> </app-comment> </div> +<ars-mat-paginator + *ngIf="(hideCommentsList ? filteredComments : commentsFilteredByTime).length>0" + [pageSize]="5" + (page)="handlePageEvent($event)" + [showFirstLastButtons]="showFirstLastButtons" + [pageSizeOptions]="pageSizeOptions" + [pageIndex]="pageIndex" + [length]="(hideCommentsList ? filteredComments : commentsFilteredByTime).length"></ars-mat-paginator> +<ars-row [height]="64"> +</ars-row> <div *ngIf="comments && (commentsFilteredByTime.length < 1 && period === 'time-all' || comments.length === 0) && !isLoading" fxLayout="row" diff --git a/src/app/components/moderator/moderator-comment-list/moderator-comment-list.component.ts b/src/app/components/moderator/moderator-comment-list/moderator-comment-list.component.ts index b062e1ea34d777f5dcfbd7785adb485c5c9bd8d9..96ad723dc770ba147dde5249889d7451553a3202 100644 --- a/src/app/components/moderator/moderator-comment-list/moderator-comment-list.component.ts +++ b/src/app/components/moderator/moderator-comment-list/moderator-comment-list.component.ts @@ -22,6 +22,7 @@ import { Export } from '../../../models/export'; import { NotificationService } from '../../../services/util/notification.service'; import { BonusTokenService } from '../../../services/http/bonus-token.service'; import { CommentFilter, Period } from '../../../utils/filter-options'; +import { PageEvent } from '@angular/material/paginator'; @Component({ @@ -66,6 +67,10 @@ export class ModeratorCommentListComponent implements OnInit, OnDestroy { period: Period = Period.twoWeeks; fromNow: number; headerInterface = null; + pageIndex = 0; + pageSize = 10; + pageSizeOptions = [5, 10, 25]; + showFirstLastButtons = true; constructor( private commentService: CommentService, @@ -83,6 +88,11 @@ export class ModeratorCommentListComponent implements OnInit, OnDestroy { langService.langEmitter.subscribe(lang => translateService.use(lang)); } + handlePageEvent(e:PageEvent){ + this.pageIndex = e.pageIndex; + this.pageSize = e.pageSize; + } + initNavigation() { const navigation = {}; const nav = (b, c) => navigation[b] = c; diff --git a/src/app/components/moderator/moderator.module.ts b/src/app/components/moderator/moderator.module.ts index 3d17c18bf5b4d765ce070f607cbddbe37660551d..0131f408b1f31611cd5c7da3c6494c6308b01696 100644 --- a/src/app/components/moderator/moderator.module.ts +++ b/src/app/components/moderator/moderator.module.ts @@ -10,23 +10,25 @@ import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { HttpClient } from '@angular/common/http'; import { TranslateHttpLoader } from '@ngx-translate/http-loader'; import { MarkdownModule } from 'ngx-markdown'; +import { ArsModule } from '../../../../projects/ars/src/lib/ars.module'; @NgModule({ - imports: [ - CommonModule, - ModeratorRoutingModule, - EssentialsModule, - SharedModule, - TranslateModule.forChild({ - loader: { - provide: TranslateLoader, - useFactory: (HttpLoaderFactory), - deps: [HttpClient] - }, - isolate: true - }), - MarkdownModule - ], + imports:[ + CommonModule, + ModeratorRoutingModule, + EssentialsModule, + SharedModule, + TranslateModule.forChild({ + loader:{ + provide:TranslateLoader, + useFactory:(HttpLoaderFactory), + deps:[HttpClient] + }, + isolate:true + }), + MarkdownModule, + ArsModule + ], declarations: [ RoomModeratorPageComponent, ModeratorCommentListComponent, diff --git a/src/app/components/shared/comment-list/comment-list.component.html b/src/app/components/shared/comment-list/comment-list.component.html index facf1272289e5d4dee4ceff8fc4676fcfb11ad60..28de46839e532382f486ef32f0646a69d7e1ff1f 100644 --- a/src/app/components/shared/comment-list/comment-list.component.html +++ b/src/app/components/shared/comment-list/comment-list.component.html @@ -280,14 +280,14 @@ (clickedOnKeyword)="clickedOnKeyword($event)" (votedComment)="votedComment($event)"> </app-comment> - <mat-paginator class="mat-paginator" - [pageSize]="5" - (page)="handlePageEvent($event)" - [showFirstLastButtons]="showFirstLastButtons" - [pageSizeOptions]="pageSizeOptions" - [pageIndex]="pageIndex" - [color]="'primary'" - [length]="(hideCommentsList ? filteredComments : commentsFilteredByTime).length"></mat-paginator> + <ars-mat-paginator + *ngIf="(hideCommentsList ? filteredComments : commentsFilteredByTime).length>0" + [pageSize]="5" + (page)="handlePageEvent($event)" + [showFirstLastButtons]="showFirstLastButtons" + [pageSizeOptions]="pageSizeOptions" + [pageIndex]="pageIndex" + [length]="(hideCommentsList ? filteredComments : commentsFilteredByTime).length"></ars-mat-paginator> <ars-row [height]="64"> </ars-row> diff --git a/src/app/components/shared/comment-list/comment-list.component.scss b/src/app/components/shared/comment-list/comment-list.component.scss index 95eea764c51b99e2cdf661131e70f2fdc5fb5769..0406d467b2dcac776f2ed43c287f84adbcf72337 100644 --- a/src/app/components/shared/comment-list/comment-list.component.scss +++ b/src/app/components/shared/comment-list/comment-list.component.scss @@ -275,8 +275,3 @@ h3 { h1 { color: red; } - -.mat-paginator{ - background-color:transparent; - color:var(--on-background); -} diff --git a/src/assets/i18n/ars-lib/de.json b/src/assets/i18n/ars-lib/de.json new file mode 100644 index 0000000000000000000000000000000000000000..bbd3038ca3e2432b2a5e15b948833f0b39829284 --- /dev/null +++ b/src/assets/i18n/ars-lib/de.json @@ -0,0 +1,11 @@ +{ + "paginator": { + "itemsPerPageLabel": "Anzahl Kommentare", + "nextPageLabel": "Nächste", + "previousPageLabel": "Vorherige", + "firstPageLabel": "Erste", + "lastPageLabel": "Letzte", + "rangePageLabel1": "null", + "rangePageLabel2": "%start - %end von %length" + } +} diff --git a/src/assets/i18n/ars-lib/en.json b/src/assets/i18n/ars-lib/en.json new file mode 100644 index 0000000000000000000000000000000000000000..85f1d80c9480ec4ea22a8b7e3cbb66ed828e253f --- /dev/null +++ b/src/assets/i18n/ars-lib/en.json @@ -0,0 +1,12 @@ +{ + "paginator": { + "itemsPerPageLabel": "Number of Comments", + "nextPageLabel": "Next", + "previousPageLabel": "Previous", + "firstPageLabel": "First", + "lastPageLabel": "Last", + "rangePageLabel1": "null", + "rangePageLabel2": "%start - %end of %length" + } +} +