diff --git a/src/app/components/creator/room-creator-page/room-creator-page.component.ts b/src/app/components/creator/room-creator-page/room-creator-page.component.ts index f74f46aa17e5067bc03b9a3f179fb60cc86bb39b..d7ccbb31a9649364a9bbe352b7e2461a036c9dec 100644 --- a/src/app/components/creator/room-creator-page/room-creator-page.component.ts +++ b/src/app/components/creator/room-creator-page/room-creator-page.component.ts @@ -22,6 +22,9 @@ import { EventService } from '../../../services/util/event.service'; import { KeyboardUtils } from '../../../utils/keyboard'; import { KeyboardKey } from '../../../utils/keyboard/keys'; import { TitleService } from '../../../services/util/title.service'; +import { DeleteCommentsComponent } from '../_dialogs/delete-comments/delete-comments.component'; +import { Export } from '../../../models/export'; +import { BonusTokenService } from '../../../services/http/bonus-token.service'; @Component({ selector: 'app-room-creator-page', @@ -39,6 +42,7 @@ export class RoomCreatorPageComponent extends RoomPageComponent implements OnIni moderatorCommentCounter: number; commentCounterEmitSubscription: any; urlToCopy = `${window.location.protocol}//${window.location.hostname}/participant/room/`; + headerInterface = null; constructor(protected roomService: RoomService, protected notification: NotificationService, @@ -52,7 +56,9 @@ export class RoomCreatorPageComponent extends RoomPageComponent implements OnIni private liveAnnouncer: LiveAnnouncer, private _r: Renderer2, public eventService: EventService, - public titleService: TitleService) { + public titleService: TitleService, + private notificationService: NotificationService, + private bonusTokenService: BonusTokenService) { super(roomService, route, location, wsCommentService, commentService, eventService); this.commentCounterEmitSubscription = this.commentCounterEmit.subscribe(e => { this.titleService.attachTitle('(' + e + ')'); @@ -60,10 +66,51 @@ export class RoomCreatorPageComponent extends RoomPageComponent implements OnIni langService.langEmitter.subscribe(lang => translateService.use(lang)); } + initNavigation() { + const navigation = {}; + const nav = (b, c) => navigation[b] = c; + nav('roomBonusToken', () => this.showBonusTokenDialog()); + nav('moderator', () => this.showModeratorsDialog()); + nav('tags', () => this.showTagsDialog()); + nav('exportQuestions', () => { + const exp: Export = new Export( + this.room, + this.commentService, + this.bonusTokenService, + this.translateService, + 'comment-list', + this.notificationService); + exp.exportAsCsv(); + }); + nav('deleteQuestions', () => { + const dialogRef = this.dialog.open(DeleteCommentsComponent, { + width: '400px' + }); + dialogRef.componentInstance.roomId = this.room.id; + dialogRef.afterClosed() + .subscribe(result => { + if (result === 'delete') { + this.translateService.get('room-page.comments-deleted').subscribe(msg => { + this.notificationService.show(msg); + }); + this.commentService.deleteCommentsByRoomId(this.room.id).subscribe(); + } + }); + }); + this.headerInterface = this.eventService.on<string>('navigate').subscribe(e => { + if (navigation.hasOwnProperty(e)) { + navigation[e](); + } + }); + } + ngOnDestroy() { super.ngOnDestroy(); this.commentCounterEmitSubscription.unsubscribe(); this.titleService.resetTitle(); + if (this.headerInterface) { + this.headerInterface.unsubscribe(); + } } ngAfterContentInit(): void { @@ -73,6 +120,7 @@ export class RoomCreatorPageComponent extends RoomPageComponent implements OnIni } ngOnInit() { + this.initNavigation(); window.scroll(0, 0); this.translateService.use(localStorage.getItem('currentLang')); this.route.params.subscribe(params => { diff --git a/src/app/components/home/new-landing/new-landing.component.scss b/src/app/components/home/new-landing/new-landing.component.scss index 5d6f0b2447a8e3de1e649a9db36ee65f53535b3c..ba491d4e6f0f7ec9369485257ff1fc85ec05fd62 100644 --- a/src/app/components/home/new-landing/new-landing.component.scss +++ b/src/app/components/home/new-landing/new-landing.component.scss @@ -12,5 +12,5 @@ padding-right: 10px; padding-left: 10px; transform: scale(2); - color: var(--secondary); + color: var(--primary); } 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 1e38a67d87d1cfe1e6c944b5ee4634c436d760cd..dd2204a49b8c2dc48b75f6575bbcefe6b1390d4f 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 @@ -1,4 +1,4 @@ -import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core'; +import { Component, ElementRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core'; import { Comment } from '../../../models/comment'; import { CommentService } from '../../../services/http/comment.service'; import { TranslateService } from '@ngx-translate/core'; @@ -16,13 +16,20 @@ import { EventService } from '../../../services/util/event.service'; import { Router } from '@angular/router'; import { AppComponent } from '../../../app.component'; import { Period } from '../../shared/comment-list/comment-list.component'; +import { ModeratorsComponent } from '../../creator/_dialogs/moderators/moderators.component'; +import { TagsComponent } from '../../creator/_dialogs/tags/tags.component'; +import { DeleteCommentsComponent } from '../../creator/_dialogs/delete-comments/delete-comments.component'; +import { Export } from '../../../models/export'; +import { CreateCommentComponent } from '../../shared/_dialogs/create-comment/create-comment.component'; +import { NotificationService } from '../../../services/util/notification.service'; +import { BonusTokenService } from '../../../services/http/bonus-token.service'; @Component({ selector: 'app-moderator-comment-list', templateUrl: './moderator-comment-list.component.html', styleUrls: ['./moderator-comment-list.component.scss'] }) -export class ModeratorCommentListComponent implements OnInit { +export class ModeratorCommentListComponent implements OnInit, OnDestroy { @ViewChild('searchBox') searchField: ElementRef; @Input() user: User; @Input() roomId: string; @@ -58,6 +65,7 @@ export class ModeratorCommentListComponent implements OnInit { periodsList = Object.values(Period); period: Period = Period.TWOWEEKS; fromNow: number; + headerInterface = null; constructor( private commentService: CommentService, @@ -67,12 +75,94 @@ export class ModeratorCommentListComponent implements OnInit { private wsCommentService: WsCommentServiceService, protected roomService: RoomService, public eventService: EventService, - private router: Router + private router: Router, + private notificationService: NotificationService, + private translationService: TranslateService, + private bonusTokenService: BonusTokenService ) { langService.langEmitter.subscribe(lang => translateService.use(lang)); } + initNavigation() { + const navigation = {}; + const nav = (b, c) => navigation[b] = c; + nav('moderator', () => { + const dialogRef = this.dialog.open(ModeratorsComponent, { + width: '400px' + }); + dialogRef.componentInstance.roomId = this.room.id; + }); + nav('tags', () => { + const updRoom = JSON.parse(JSON.stringify(this.room)); + const dialogRef = this.dialog.open(TagsComponent, { + width: '400px' + }); + let tags = []; + if (this.room.tags !== undefined) { + tags = this.room.tags; + } + dialogRef.componentInstance.tags = tags; + dialogRef.afterClosed() + .subscribe(result => { + if (!result || result === 'abort') { + return; + } else { + updRoom.tags = result; + this.roomService.updateRoom(updRoom) + .subscribe((room) => { + this.room = room; + this.translateService.get('room-page.changes-successful').subscribe(msg => { + this.notificationService.show(msg); + }); + }, + error => { + this.translateService.get('room-page.changes-gone-wrong').subscribe(msg => { + this.notificationService.show(msg); + }); + }); + } + }); + }); + nav('deleteQuestions', () => { + const dialogRef = this.dialog.open(DeleteCommentsComponent, { + width: '400px' + }); + dialogRef.componentInstance.roomId = this.roomId; + dialogRef.afterClosed() + .subscribe(result => { + if (result === 'delete') { + this.translationService.get('room-page.comments-deleted').subscribe(msg => { + this.notificationService.show(msg); + }); + this.commentService.deleteCommentsByRoomId(this.roomId).subscribe(); + } + }); + }); + nav('exportQuestions', () => { + const exp: Export = new Export( + this.room, + this.commentService, + this.bonusTokenService, + this.translationService, + 'comment-list', + this.notificationService); + exp.exportAsCsv(); + }); + this.headerInterface = this.eventService.on<string>('navigate').subscribe(e => { + if (navigation.hasOwnProperty(e)) { + navigation[e](); + } + }); + } + + ngOnDestroy() { + if (this.headerInterface) { + this.headerInterface.unsubscribe(); + } + } + ngOnInit() { + this.initNavigation(); this.roomId = localStorage.getItem(`roomId`); const userId = this.user.id; this.userRole = this.user.role; diff --git a/src/app/components/shared/comment-list/comment-list.component.ts b/src/app/components/shared/comment-list/comment-list.component.ts index 0037ba8af90e4e3d3defef9798ca73fe953c7caf..731dc3b9f3880c00f925fb430e55c6831692e45d 100644 --- a/src/app/components/shared/comment-list/comment-list.component.ts +++ b/src/app/components/shared/comment-list/comment-list.component.ts @@ -23,6 +23,11 @@ import { Router, ActivatedRoute } from '@angular/router'; import { AuthenticationService } from '../../../services/http/authentication.service'; import { Title } from '@angular/platform-browser'; import { TitleService } from '../../../services/util/title.service'; +import { ModeratorsComponent } from '../../creator/_dialogs/moderators/moderators.component'; +import { TagsComponent } from '../../creator/_dialogs/tags/tags.component'; +import { DeleteCommentsComponent } from '../../creator/_dialogs/delete-comments/delete-comments.component'; +import { Export } from '../../../models/export'; +import { BonusTokenService } from '../../../services/http/bonus-token.service'; export enum Period { FROMNOW = 'from-now', @@ -84,6 +89,7 @@ export class CommentListComponent implements OnInit, OnDestroy { freeze = false; commentStream: Subscription; periodsList = Object.values(Period); + headerInterface = null; period: Period = Period.TWOWEEKS; fromNow: number; @@ -102,11 +108,87 @@ export class CommentListComponent implements OnInit, OnDestroy { private route: ActivatedRoute, private router: Router, private titleService: TitleService, + private translationService: TranslateService, + private bonusTokenService: BonusTokenService ) { langService.langEmitter.subscribe(lang => translateService.use(lang)); } + initNavigation() { + const navigation = {}; + const nav = (b, c) => navigation[b] = c; + nav('createQuestion', () => this.openCreateDialog()); + nav('moderator', () => { + const dialogRef = this.dialog.open(ModeratorsComponent, { + width: '400px' + }); + dialogRef.componentInstance.roomId = this.room.id; + }); + nav('tags', () => { + const updRoom = JSON.parse(JSON.stringify(this.room)); + const dialogRef = this.dialog.open(TagsComponent, { + width: '400px' + }); + let tags = []; + if (this.room.tags !== undefined) { + tags = this.room.tags; + } + dialogRef.componentInstance.tags = tags; + dialogRef.afterClosed() + .subscribe(result => { + if (!result || result === 'abort') { + return; + } else { + updRoom.tags = result; + this.roomService.updateRoom(updRoom) + .subscribe((room) => { + this.room = room; + this.translateService.get('room-page.changes-successful').subscribe(msg => { + this.notificationService.show(msg); + }); + }, + error => { + this.translateService.get('room-page.changes-gone-wrong').subscribe(msg => { + this.notificationService.show(msg); + }); + }); + } + }); + }); + nav('deleteQuestions', () => { + const dialogRef = this.dialog.open(DeleteCommentsComponent, { + width: '400px' + }); + dialogRef.componentInstance.roomId = this.roomId; + dialogRef.afterClosed() + .subscribe(result => { + if (result === 'delete') { + this.translationService.get('room-page.comments-deleted').subscribe(msg => { + this.notificationService.show(msg); + }); + this.commentService.deleteCommentsByRoomId(this.roomId).subscribe(); + } + }); + }); + nav('exportQuestions', () => { + const exp: Export = new Export( + this.room, + this.commentService, + this.bonusTokenService, + this.translationService, + 'comment-list', + this.notificationService); + exp.exportAsCsv(); + }); + this.headerInterface = this.eventService.on<string>('navigate').subscribe(e => { + if (navigation.hasOwnProperty(e)) { + navigation[e](); + } + }); + } + ngOnInit() { + this.initNavigation(); this.authenticationService.watchUser.subscribe(newUser => { if (newUser) { this.user = newUser; @@ -162,6 +244,9 @@ export class CommentListComponent implements OnInit, OnDestroy { this.commentStream.unsubscribe(); } this.titleService.resetTitle(); + if (this.headerInterface) { + this.headerInterface.unsubscribe(); + } } checkScroll(): void { diff --git a/src/app/components/shared/header/header.component.html b/src/app/components/shared/header/header.component.html index 97c593ef5e0ea901985dd5b24e33c388ee03df4c..1132962959735a32023401b456f86f5b437ce725 100644 --- a/src/app/components/shared/header/header.component.html +++ b/src/app/components/shared/header/header.component.html @@ -23,14 +23,6 @@ </h2> <span *ngIf="router.url.includes('comments') && !router.url.includes('moderator/comments') && deviceType === 'desktop'" class="fill-remaining-space"></span> - <button *ngIf="router.url.includes('comments') && !router.url.includes('moderator/comments') && deviceType === 'desktop'" - mat-flat-button - class="question-focus-btn" - routerLink="participant/room/{{shortId}}/comments/questionwall"> - <mat-icon svgIcon="beamer" - class="header-icons beamer-icon"></mat-icon> - <span class="question-focus-btn-txt">{{'header.question-wall' | translate}}</span> - </button> <span class="fill-remaining-space" *ngIf="router.url.includes('comments') && deviceType === 'desktop'"></span> <span @@ -47,32 +39,186 @@ *ngIf="router.url.includes('comments')" fxLayoutAlign="center center"> {{ shortId.slice(0, 4) }} {{ shortId.slice(4, 8) }} - </h2> + </h2>--> <!--Feedback im Hörsaal--> <h2 class="oldtypo-h2" *ngIf="router.url.includes('home')" fxLayoutAlign="center center"> {{ 'header.home-header' | translate }} </h2> - <button *ngIf="router.url.includes('room')" - mat-icon-button - (click)="showQRDialog();" - fxLayoutAlign="center center"> - <mat-icon svgIcon="qrcode" - class="header-icons qrcode" - matTooltip="{{ 'header.QR' | translate }}"> - </mat-icon> - - </button> <span class="fill-remaining-space"></span> - <button mat-icon-button *ngIf="user" (click)="showMotdDialog()"> - <mat-icon class="header-icons">{{ motdState ? 'notifications_active' : 'notifications_none' }}</mat-icon> - </button> <mat-menu #userMenu="matMenu" [overlapTrigger]="false"> + <!-- <p class="mat-menu-inner-title">Account</p>--> + + <div class="mat-menu-inner-box"> + + <!-- Home --> + <ng-container *ngIf="router.url.endsWith('/home')"> + </ng-container> + + <!-- Session list --> + <ng-container *ngIf="router.url.endsWith('/user')"> + </ng-container> + + <!-- Room --> + <ng-container *ngIf="router.url.includes('/room/')"> + + <!-- Room General Options - top --> + + <!-- Moderator board / index --> + + <ng-container *ngIf="router.url.endsWith('/moderator/comments')"> + + <button mat-menu-item + tabindex="0" + routerLink="participant/room/{{shortId}}/comments"> + <mat-icon + matTooltip="{{ 'header.back-to-questionboard' | translate }}"> + forum + </mat-icon> + <span>{{'header.back-to-questionboard' | translate}}</span> + </button> + + </ng-container> + + <!-- Question board --> + <ng-container *ngIf="router.url.endsWith('/comments')"> + + <button mat-menu-item + *ngIf="user && user.role > 0 && !router.url.endsWith('moderator/comments')" + tabindex="0" + (click)="navigateCreateQuestion();"> + <mat-icon + matTooltip="{{ 'header.create-question' | translate }}"> + comment + </mat-icon> + <span>{{'header.create-question' | translate}}</span> + </button> + + <ng-container *ngIf="user && user.role > 0"> + + <button mat-menu-item + tabindex="0" + *ngIf="deviceType !== 'mobile' && !router.url.includes('/participant/')" + routerLink="participant/room/{{shortId}}/comments/questionwall"> + <mat-icon + svgIcon="beamer" + matTooltip="{{ 'header.questionwall-title' | translate }}"> + comment + </mat-icon> + <span>{{'header.questionwall' | translate}}</span> + </button> + + </ng-container> + + <ng-container *ngIf="router.url.includes('/participant/room/')"> + </ng-container> + <ng-container *ngIf="router.url.includes('/moderator/room/')"> + </ng-container> + <ng-container *ngIf="router.url.includes('/creator/room/')"> + </ng-container> + + <button mat-menu-item + *ngIf="user" + (click)="navigateExportQuestions()" + tabindex="0"> + <mat-icon>save</mat-icon> + <span>{{'header.export-questions' | translate}}</span> + </button> + + <button mat-menu-item + *ngIf="user && user.role > 0 && !router.url.includes('/participant/')" + (click)="navigateDeleteQuestions()" + tabindex="0"> + <mat-icon class="color-warn">delete</mat-icon> + <span>{{'header.delete-questions' | translate}}</span> + </button> + + </ng-container> + + <!-- Session --> + <ng-container *ngIf="!router.url.endsWith('/comments')"> + + <!-- app-room-participant-page --> + <ng-container *ngIf="router.url.includes('/participant/room/')"> + </ng-container> + <!-- app-room-creator-page --> + <ng-container *ngIf="router.url.includes('/moderator/room/')"> + </ng-container> + <!-- app-room-creator-page --> + <ng-container *ngIf="router.url.includes('/creator/room/')"> + + <button mat-menu-item + *ngIf="user" + (click)="navigateRoomBonusToken()" + tabindex="0"> + <mat-icon class="star">grade</mat-icon> + <span>{{'header.bonustoken' | translate}}</span> + </button> + + <button mat-menu-item + *ngIf="user" + (click)="navigateExportQuestions()" + tabindex="0"> + <mat-icon>save</mat-icon> + <span>{{'header.export-questions' | translate}}</span> + </button> + + <button mat-menu-item + *ngIf="user" + (click)="navigateDeleteQuestions()" + tabindex="0"> + <mat-icon class="color-warn">delete</mat-icon> + <span>{{'header.delete-questions' | translate}}</span> + </button> + + </ng-container> + + </ng-container> + + <!-- Room General Options - bot --> + + <ng-container *ngIf="user && user.role > 0 && !router.url.includes('/participant')"> + + <button mat-menu-item + *ngIf="user" + (click)="navigateModerator()" + tabindex="0"> + <mat-icon>gavel</mat-icon> + <span>{{'header.edit-moderator' | translate}}</span> + </button> + + <button mat-menu-item + *ngIf="user" + (click)="navigateTags()" + tabindex="0"> + <mat-icon svgIcon="comment_tag"></mat-icon> + <span>{{'header.edit-tags' | translate}}</span> + </button> + + </ng-container> + + <button mat-menu-item + *ngIf="user && user.role > 0" + tabindex="0" + (click)="showQRDialog();"> + <mat-icon svgIcon="qrcode" + class="header-icons qrcode" + matTooltip="{{ 'header.QR' | translate }}"> + </mat-icon> + <span>{{'header.room-qr' | translate}}</span> + </button> + + </ng-container> + + </div> + + <!-- General Options --> + <button mat-menu-item - *ngIf="user" + *ngIf="user && !router.url.endsWith('/user')" routerLink="/user" tabindex="0"> <mat-icon class="sessions">group</mat-icon> @@ -80,6 +226,7 @@ <span *ngIf="user.isGuest" svgIcon="meeting_room">{{'header.visited-sessions' | translate}}</span> </button> + <button mat-menu-item *ngIf="user" (click)="openUserBonusTokenDialog()" @@ -87,19 +234,42 @@ <mat-icon class="star">grade</mat-icon> <span>{{'header.user-bonus-token' | translate}}</span> </button> + + <button mat-menu-item + *ngIf="user" + (click)="showMotdDialog()"> + <mat-icon> + {{ motdState ? 'notifications_active' : 'notifications_none' }} + </mat-icon> + <span>{{'header.motd' | translate}}</span> + </button> + + <button mat-menu-item + aria-hidden="true" + *ngIf="isSafari === 'false' && !router.url.includes('home')" + (click)="getRescale().toggleState();"> + <mat-icon (click)="getRescale().toggleState();">fullscreen + </mat-icon> + <span>{{'header.fullscreen' | translate}}</span> + </button> + + <mat-divider></mat-divider> + <button mat-menu-item - *ngIf="user && !user.isGuest" + *ngIf="user && !user.isGuest && user.loginId" (click)="openDeleteUserDialog()" tabindex="0"> <mat-icon class="color-warn">delete</mat-icon> <span>{{'header.delete-account' | translate}}</span> </button> + <button mat-menu-item (click)="logout()" tabindex="0"> <mat-icon class="color-warn">exit_to_app</mat-icon> <span>{{ 'header.logout' | translate }}</span> </button> + </mat-menu> <button [disabled]="cookiesDisabled()" diff --git a/src/app/components/shared/header/header.component.scss b/src/app/components/shared/header/header.component.scss index 4b807c048bd9b055b9392094a10e8f58aeea4d97..2cbe46f2d37731df916225704471332a85e17dec 100644 --- a/src/app/components/shared/header/header.component.scss +++ b/src/app/components/shared/header/header.component.scss @@ -79,3 +79,21 @@ svg { .beamer-icon { transform: scale(1.5); } + +.mat-menu-inner-title { + font-family: 'Roboto', sans-serif; + font-size: 16px; + width: 100%; + box-sizing: border-box; + padding-left: 15px; + color: var(--on-background); +} + +.mat-menu-inner-box { + background-color: var(--primary-variant); + border-radius: 5px; + + * { + background-color: transparent !important; + } +} diff --git a/src/app/components/shared/header/header.component.ts b/src/app/components/shared/header/header.component.ts index 48b9abe735ad3e6ca2090d9de68415ce9ff0b8b7..f9ecf68ef429f9276e283647b58404c6b1e8cf99 100644 --- a/src/app/components/shared/header/header.component.ts +++ b/src/app/components/shared/header/header.component.ts @@ -253,4 +253,33 @@ export class HeaderComponent implements OnInit { Rescale.exitFullscreen(); }); } + + public navigateQuestionBoard() { + this.eventService.broadcast('navigate', 'questionBoard'); + } + + public navigateRoomBonusToken() { + this.eventService.broadcast('navigate', 'roomBonusToken'); + } + + public navigateModerator() { + this.eventService.broadcast('navigate', 'moderator'); + } + + public navigateTags() { + this.eventService.broadcast('navigate', 'tags'); + } + + public navigateExportQuestions() { + this.eventService.broadcast('navigate', 'exportQuestions'); + } + + public navigateDeleteQuestions() { + this.eventService.broadcast('navigate', 'deleteQuestions'); + } + + public navigateCreateQuestion() { + this.eventService.broadcast('navigate', 'createQuestion'); + } + } diff --git a/src/app/components/shared/room-join/room-join.component.scss b/src/app/components/shared/room-join/room-join.component.scss index f713d86838f66172aee687c3e74a9e291bce49c5..602a813b4384966d20956d9a653992ec8805be29 100644 --- a/src/app/components/shared/room-join/room-join.component.scss +++ b/src/app/components/shared/room-join/room-join.component.scss @@ -14,8 +14,8 @@ mat-error { .mat-fab { width: 65px; height: 65px; - background-color: var(--secondary); - color: var(--on-secondary); + background-color: var(--primary); + color: var(--on-primary); } input[type="number"]::-webkit-outer-spin-button, input[type="number"]::-webkit-inner-spin-button { diff --git a/src/assets/i18n/creator/de.json b/src/assets/i18n/creator/de.json index 7ee7119eff7e1b71fa5ed0bb0638e1d83971fe31..41ab54f1c59fe53d5b5c7bb55e7ee4f072b8f3e9 100644 --- a/src/assets/i18n/creator/de.json +++ b/src/assets/i18n/creator/de.json @@ -63,7 +63,17 @@ "select-time-1d": "Letzte 24 Stunden", "select-time-1w": "Letzte 7 Tage", "select-time-2w": "Letzte 14 Tage", - "select-time-all": "Zeitlich unbegrenzt" + "select-time-all": "Zeitlich unbegrenzt", + "question": "Frage", + "timestamp": "Zeitstempel", + "presented": "Präsentiert", + "correct/wrong": "Richtig/Falsch", + "score": "Score", + "answer": "Antwort", + "token": "Bonus-Token", + "token-time": "Token-Zeitstempel", + "no-comments": "Es sind noch keine Fragen vorhanden.", + "export-comments": "Fragen exportieren" }, "comment-page": { "a11y-comment_delete": "Löscht diese Frage", @@ -232,7 +242,7 @@ "comments": "Fragen", "comments-deleted": "Alle Fragen wurden gelöscht.", "copy-session-id": "Kopiere den Link zu dieser Sitzung in die Zwischenablage und gib ihn an die Sitzungsteilnehmer weiter.", - "create-content": "Frage erstellen", + "create-content": "Frage stellen", "default-content-group": "Standard", "delete-all-comments": "Fragen löschen", "delete-room": "Sitzung Löschen", diff --git a/src/assets/i18n/creator/en.json b/src/assets/i18n/creator/en.json index 2494ab70b9a694e97c23ce5ebd18f8032480a126..9f6d8800044c7f0af633d6513ffa3db2f2a7012a 100644 --- a/src/assets/i18n/creator/en.json +++ b/src/assets/i18n/creator/en.json @@ -64,7 +64,17 @@ "select-time-1d": "Last 24 hours", "select-time-1w": "Last 7 days", "select-time-2w": "Last 14 days", - "select-time-all": "Unlimited in time" + "select-time-all": "Unlimited in time", + "question": "Question", + "timestamp": "Timestamp", + "presented": "Presented", + "correct/wrong": "Correct/Wrong", + "score": "Score", + "answer": "Answer", + "token": "Bonus token", + "token-time": "Token timestamp", + "no-comments": "There are no questions yet.", + "export-comments": "Export questions" }, "comment-page": { "a11y-comment_delete": "Deletes this question", diff --git a/src/assets/i18n/home/de.json b/src/assets/i18n/home/de.json index a304f49818a3ddbdf3764941754c1f04fa9a2cd5..642c18a9f4f95c84ffaa4220a982f929a7417057 100644 --- a/src/assets/i18n/home/de.json +++ b/src/assets/i18n/home/de.json @@ -70,7 +70,19 @@ "user-bonus-token": "Deine Sterne", "user-got-tokens": "Du hast noch Sterne für Bonuspunkte, die verloren gehen!", "visited-sessions": "Sitzungen", - "question-wall": "Fragen präsentieren" + "question-wall": "Fragen präsentieren", + "room-qr": "QR-Code", + "question-board": "Fragenboard", + "bonustoken": "Bonustoken", + "edit-moderator": "Moderatoren", + "edit-tags": "Tags", + "export-questions": "Fragen exportieren", + "delete-questions": "Fragen löschen", + "back-to-questionboard": "Zum Fragenboard", + "create-question": "Frage stellen", + "questionwall": "Fragenwand", + "fullscreen": "Vollansicht", + "motd": "News" }, "help": { "cancel": "Schließen", diff --git a/src/assets/i18n/home/en.json b/src/assets/i18n/home/en.json index bdbd034467ad80d0184d1bae82764d11168a78b7..380decc806f6111ae1145b6294f4f313353b4473 100644 --- a/src/assets/i18n/home/en.json +++ b/src/assets/i18n/home/en.json @@ -71,7 +71,19 @@ "user-bonus-token": "Your stars", "user-got-tokens": "You haven't received a star for a good question yet.", "visited-sessions": "Sessions", - "question-wall": "Present questions" + "question-wall": "Present questions", + "room-qr": "QR code", + "question-board": "Question board", + "bonustoken": "Assigned Stars", + "edit-moderator": "Moderators", + "edit-tags": "Tags", + "export-questions": "Export questions", + "delete-questions": "Delete questions", + "back-to-questionboard": "Back to question board", + "create-question": "Ask a question", + "questionwall": "Question wall", + "fullscreen": "Fullscreen", + "motd": "News" }, "help": { "cancel": "Close", diff --git a/src/assets/i18n/participant/de.json b/src/assets/i18n/participant/de.json index d6f90f3248ff197f17c7f222aa802bd60ed40e1f..b03c8017b5c76017a1c3a773e93a8d29350fbba0 100644 --- a/src/assets/i18n/participant/de.json +++ b/src/assets/i18n/participant/de.json @@ -64,7 +64,17 @@ "select-time-1d": "Letzte 24 Stunden", "select-time-1w": "Letzte 7 Tage", "select-time-2w": "Letzte 14 Tage", - "select-time-all": "Unbegrenzt" + "select-time-all": "Unbegrenzt", + "question": "Frage", + "timestamp": "Zeitstempel", + "presented": "Präsentiert", + "correct/wrong": "Richtig/Falsch", + "score": "Score", + "answer": "Antwort", + "token": "Bonus-Token", + "token-time": "Token-Zeitstempel", + "no-comments": "Es sind noch keine Fragen vorhanden.", + "export-comments": "Fragen exportieren" }, "content": { "cancel": "Abbrechen", diff --git a/src/assets/i18n/participant/en.json b/src/assets/i18n/participant/en.json index e8ff045d5543a2899f6fdb4809ccd5c47ced6e62..df5ff126fd8a3ca7dfc02fae257ae88d29bcd6cd 100644 --- a/src/assets/i18n/participant/en.json +++ b/src/assets/i18n/participant/en.json @@ -74,7 +74,17 @@ "select-time-1d": "Last 24 hours", "select-time-1w": "Last 7 days", "select-time-2w": "Last 14 days", - "select-time-all": "Unlimited" + "select-time-all": "Unlimited", + "question": "Question", + "timestamp": "Timestamp", + "presented": "Presented", + "correct/wrong": "Correct/Wrong", + "score": "Score", + "answer": "Answer", + "token": "Bonus token", + "token-time": "Token timestamp", + "no-comments": "There are no questions yet.", + "export-comments": "Export questions" }, "content": { "cancel": "Cancel",