diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 552d1e3..62af6f6 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -7,6 +7,7 @@ import {FormsModule, ReactiveFormsModule} from '@angular/forms'; import {HttpClientModule, HttpInterceptor, HttpHandler, HttpRequest, HTTP_INTERCEPTORS} from '@angular/common/http'; import {MaterialModule} from './material/material.module'; import {QRCodeModule} from 'angularx-qrcode'; +import { DatePipe } from '@angular/common'; import {I18nPipe} from './utils/i18n.pipe'; import {ImprintComponent, PrivacyPolicyComponent, TermsOfServiceComponent} from './pages/general/general.component'; @@ -104,7 +105,7 @@ export class XhrInterceptor implements HttpInterceptor { QRCodeModule, ], exports: [MaterialModule], - providers: [{provide: APP_INITIALIZER, useFactory: init_app, deps: [I18nService], multi: true}, {provide: HTTP_INTERCEPTORS, useClass: XhrInterceptor, multi: true}], + providers: [{provide: APP_INITIALIZER, useFactory: init_app, deps: [I18nService], multi: true}, {provide: HTTP_INTERCEPTORS, useClass: XhrInterceptor, multi: true}, DatePipe], bootstrap: [AppComponent], }) export class AppModule { diff --git a/src/app/pages/jitsi/jitsi.component.html b/src/app/pages/jitsi/jitsi.component.html index b83f42d..fda9a22 100644 --- a/src/app/pages/jitsi/jitsi.component.html +++ b/src/app/pages/jitsi/jitsi.component.html @@ -2,17 +2,32 @@ - - + + + + + + + + @@ -26,10 +41,15 @@ diff --git a/src/app/pages/jitsi/jitsi.component.scss b/src/app/pages/jitsi/jitsi.component.scss index d6bdddc..2640e9b 100644 --- a/src/app/pages/jitsi/jitsi.component.scss +++ b/src/app/pages/jitsi/jitsi.component.scss @@ -9,6 +9,10 @@ mat-form-field { } } +.mat-cell .mat-button { + padding-left: 0px; +} + .align-right{ display: flex; padding: 21px 0; diff --git a/src/app/pages/jitsi/jitsi.component.ts b/src/app/pages/jitsi/jitsi.component.ts index c4e94ff..4d41c1c 100644 --- a/src/app/pages/jitsi/jitsi.component.ts +++ b/src/app/pages/jitsi/jitsi.component.ts @@ -3,6 +3,7 @@ import {MatSnackBar} from '@angular/material/snack-bar'; import {Sort} from '@angular/material/sort'; import {FormBuilder, FormGroup, Validators, NgForm} from '@angular/forms'; import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {DatePipe} from '@angular/common'; import {QuotaService} from '../../services/quota.service'; import {JitsiService} from '../../services/jitsi.service'; @@ -25,7 +26,7 @@ export class JitsiComponent implements OnInit { working: boolean; datetimeformat: String; - jitsiRoomsColumns = ["room", "starts", "expires", "moderationUrl", "delete"]; + jitsiRoomsColumns = ["share", "room", "starts", "expires", "moderationUrl", "delete"]; constructor( private quotaService: QuotaService, @@ -129,8 +130,11 @@ export class JitsiComponent implements OnInit { minWidth: '300px', }); } -} + open(jitsiRoom: any) { + return (!jitsiRoom.starts || new Date(jitsiRoom.start) < new Date()) && (!jitsiRoom.expires || new Date(jitsiRoom.expires) > new Date()); + } +} @Component({ selector: 'app-jitsi-share-dialog', @@ -140,18 +144,33 @@ export class JitsiComponent implements OnInit { export class JitsiShareDialog { jitsiRoom: any; + datetimeformat: string; constructor( private i18n: I18nService, private snackBar: MatSnackBar, + private datePipe: DatePipe, public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: any) { this.jitsiRoom = data; } - copyToClipboard(jitsiRoom: any) { + ngOnInit(): void { + this.datetimeformat = this.i18n.get('format.datetime', []); + this.jitsiRoom.shareText = this.i18n.get('jitsi.share.text.intro', []); + if(this.jitsiRoom.starts && !this.jitsiRoom.expires) { + this.jitsiRoom.shareText += "\n\n" + this.i18n.get('jitsi.share.text.starts', [this.datePipe.transform(new Date(this.jitsiRoom.starts), this.datetimeformat)]); + } else if(!this.jitsiRoom.starts && this.jitsiRoom.expires) { + this.jitsiRoom.shareText += "\n\n" + this.i18n.get('jitsi.share.text.expires', [this.datePipe.transform(new Date(this.jitsiRoom.expires), this.datetimeformat)]); + } else if(this.jitsiRoom.starts && this.jitsiRoom.expires) { + this.jitsiRoom.shareText += "\n\n" + this.i18n.get('jitsi.share.text.both', [this.datePipe.transform(new Date(this.jitsiRoom.starts), this.datetimeformat), this.datePipe.transform(new Date(this.jitsiRoom.expires), this.datetimeformat)]); + } + this.jitsiRoom.shareText += "\n\n" + this.i18n.get('jitsi.share.text.outro', [this.jitsiRoom.url]); + } + + copyToClipboard(text) { const selBox = document.createElement('textarea'); - selBox.value = jitsiRoom.url; + selBox.value = text; document.body.appendChild(selBox); selBox.focus(); selBox.select(); diff --git a/src/app/pages/jitsi/jitsi.share.html b/src/app/pages/jitsi/jitsi.share.html index 074e56f..4c98419 100644 --- a/src/app/pages/jitsi/jitsi.share.html +++ b/src/app/pages/jitsi/jitsi.share.html @@ -1,16 +1,29 @@ -

share {{'jitsi.share' | i18n}}

+

+ share {{'jitsi.share' | i18n}} +

+ + + + + - + mail {{'jitsi.share.email' | i18n}} - - content_paste {{'jitsi.share.clipboard' | i18n}} + + content_paste {{'jitsi.share.clipboard.text' | i18n}} + + + + + + content_paste {{'jitsi.share.clipboard.url' | i18n}} diff --git a/src/app/pages/jitsi/jitsi.share.scss b/src/app/pages/jitsi/jitsi.share.scss index 7d78fe3..983874d 100644 --- a/src/app/pages/jitsi/jitsi.share.scss +++ b/src/app/pages/jitsi/jitsi.share.scss @@ -2,3 +2,12 @@ display: block; width: 100%; } + +mat-form-field { + display: block; +} + +textarea { + width: 100%; + min-height: 300px; +} diff --git a/src/assets/i18n/de-informal.json b/src/assets/i18n/de-informal.json index 5bc95f9..5dbd241 100644 --- a/src/assets/i18n/de-informal.json +++ b/src/assets/i18n/de-informal.json @@ -18,7 +18,7 @@ }, "format": { "date": "dd.MM.yyyy", - "datetime": "dd.MM.yyyy HH:mm:ss", + "datetime": "dd.MM.yyyy HH:mm", "time": "HH:mm:ss" }, "greet": "Hallo {0}", @@ -35,26 +35,35 @@ "delete": "Löschen", "error": { "expires": "Ungültiges Ende.", - "room": "Bitte wähle einen anderen Namen für den Raum. Erlaubt sind nur Buchstaben und Zahlen.", + "room": "Bitte gebe einen gültigen Namen an. Erlaubt sind nur Buchstaben und Zahlen.", "starts": "Ungültiger Beginn." }, "expires": "Ende", "info": "Du kannst hier Jitsi Räume erstellen. Die Anzahl wird über eine Quota begrenzt.", - "left": "Du kannst noch {0} Jitsi Räume erstellen.", + "left": "Du kannst noch {0} Jitsi Raum/Räume erstellen.", "moderationUrl": "Url für Moderation", "noQuota": "Deine Quota für Jitsi Räume ist leider aufgebraucht.", + "notStarted" : "Die Konferenz hat noch nicht begonnen.", "room": "Name", "starts": "Beginn" }, "share": { ".": "Teilen", "clipboard": { - ".": "In Zwischenablage kopieren", - "copied": "In die Zwischenablage kopiert" + "copied": "In die Zwischenablage kopiert", + "text": "Text in Zwischenablage kopieren", + "url": "Url in Zwischenablage kopieren" }, "email": { ".": "Via E-Mail teilen", "subject": "Einladung in Videokonferenz {0}" + }, + "text" : { + "both" : "Die Konferenz beginnt am {0} und endet am {1}.", + "expires" : "Die Konferenz endet am {0}.", + "intro" : "Hallo, ich möchte dich zu einer Videokonferenz einladen.", + "outro" : "Du kannst der Konferenz unter folgendem Link beitreten:\n {0}", + "starts" : "Die Konferenz beginnt am {0}." } } }, diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 6368296..7d30535 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -18,7 +18,7 @@ }, "format": { "date": "MM/dd/yyy", - "datetime": "MM/dd/yyy h:mm:ss a", + "datetime": "MM/dd/yyy h:mm a", "time": "h:mm:ss a" }, "greet": "Hello {0}", @@ -35,7 +35,7 @@ "delete": "Delete", "error": { "expires": "Invalid expiry.", - "room": "Please choose another name for the room. Only letters and numbers are allowed", + "room": "Please provide a valid name. Only letters and numbers are allowed.", "starts": "Invalid start." }, "expires": "Expires", @@ -43,18 +43,27 @@ "left": "You have {0} Jitsi Room(s) left.", "moderationUrl": "Moderation url", "noQuota": "Your quota for Jitsi Rooms is depleted.", + "notStarted" : "The conference has not started yet.", "room": "Name", "starts": "Starts" }, - "share" : { - "." : "Share", - "clipboard" : { - "." : "Copy to clipboard", - "copied": "Copied to clipboard" + "share": { + ".": "Share", + "clipboard": { + "copied": "Copied to clipboard", + "text": "Copy text to clipboard", + "url": "Copy url to clipboard" }, - "email" : { - "." : "Share via email", - "subject" : "Invite to videoconference {0}" + "email": { + ".": "Share via email", + "subject": "Invite to video conference {0}" + }, + "text": { + "both": "The conference begins at {0} and ends at {1}.", + "expires": "The conference ends at {0}.", + "intro": "Hello, I want to invite you to a video conference.", + "outro": "You can join the conference under:\n{0}", + "starts": "The conference begins at {0}." } } }, @@ -278,7 +287,7 @@ "title": "Gitea" }, "goto": "To service", - "jitsi" : { + "jitsi": { "icon": "video_call", "subtitle": "Video conferencing", "text": "Video conferencing with all functionality needed for meeting online with Video and Audio streams.",
{{'jitsi.rooms.room' | i18n}} {{'jitsi.share' | i18n}} - {{ jitsiRoom.room }}open_in_new - {{'jitsi.rooms.room' | i18n}} + + {{ jitsiRoom.room }} + open_in_new + + + + + {{ jitsiRoom.room }} + + {{'jitsi.rooms.starts' | i18n}} {{ jitsiRoom.starts | date:datetimeformat}} {{'jitsi.rooms.moderationUrl' | i18n}} - {{ - jitsiRoom.moderationUrl }} - open_in_new - + + {{ jitsiRoom.moderationUrl }} + open_in_new + + + + {{ jitsiRoom.moderationUrl }}