From 5393a137644927deefe5770dc8003f05b1aeb119 Mon Sep 17 00:00:00 2001 From: mechtelm <mechtel@iqb.hu-berlin.de> Date: Tue, 11 Feb 2020 13:35:44 +0100 Subject: [PATCH] refurbishment of customtexts (implementing iqb-components version) - incomplete --- src/app/about/about.component.html | 2 +- src/app/about/about.component.ts | 4 +- src/app/app.component.ts | 23 ++-- src/app/app.config.ts | 116 ++++++++++++++++++ src/app/app.module.ts | 8 +- src/app/custom-text.pipe.spec.ts | 8 -- src/app/custom-text.pipe.ts | 14 --- src/app/maindata.service.ts | 69 ----------- src/app/start/start.component.html | 2 +- src/app/start/start.component.ts | 8 +- .../environment-check.component.ts | 4 +- .../network-check/network-check.component.ts | 4 +- .../questionnaire.component.html | 2 +- .../questionnaire/questionnaire.component.ts | 6 +- src/app/sys-check/report/report.component.ts | 4 +- src/app/sys-check/start.component.ts | 4 +- ...a.service.ts => sys-check-data.service.ts} | 2 +- src/app/sys-check/sys-check.component.ts | 15 ++- src/app/sys-check/sys-check.module.ts | 8 +- .../sys-check/syscheck-data.service.spec.ts | 6 +- .../unit-navi-buttons.component.ts | 4 +- .../unit-check/unit-check.component.ts | 4 +- .../test-controller.component.ts | 7 +- 23 files changed, 187 insertions(+), 137 deletions(-) create mode 100644 src/app/app.config.ts delete mode 100644 src/app/custom-text.pipe.spec.ts delete mode 100644 src/app/custom-text.pipe.ts rename src/app/sys-check/{syscheck-data.service.ts => sys-check-data.service.ts} (98%) diff --git a/src/app/about/about.component.html b/src/app/about/about.component.html index 51ae13ab..7a2f2ed3 100644 --- a/src/app/about/about.component.html +++ b/src/app/about/about.component.html @@ -11,7 +11,7 @@ <!-- - - - - - - - - - - - - - - - - --> <mat-card-content> <p>Das <a href="http://www.iqb.hu-berlin.de" target="_blank">Institut zur Qualitätsentwicklung im Bildungswesen</a> - {{ mds.refreshCostumTexts | customText:'app_intro1' }}</p> + {{ 'app_intro1' | customtext:'app_intro1':cts.updateCount }}</p> <p>Die mit diesem System erhobenen Daten enthalten grundsätzlich keinen direkten Personenbezug. Es werden z. B. nie Namen gespeichert. Um Auskünfte zu einer bestimmten Befragung bzw. Studie diff --git a/src/app/about/about.component.ts b/src/app/about/about.component.ts index adf69666..675674ca 100644 --- a/src/app/about/about.component.ts +++ b/src/app/about/about.component.ts @@ -1,6 +1,7 @@ import { MainDataService } from 'src/app/maindata.service'; import { Component, Inject } from '@angular/core'; import {Router} from "@angular/router"; +import {CustomtextService} from "iqb-components"; @Component({ templateUrl: './about.component.html' @@ -12,7 +13,8 @@ export class AboutComponent { @Inject('APP_PUBLISHER') public appPublisher: string, @Inject('APP_VERSION') public appVersion: string, private router: Router, - public mds: MainDataService + public mds: MainDataService, + private cts: CustomtextService ) { } goBack() { diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 1afb1784..f5dd0528 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -2,7 +2,8 @@ import { MainDataService } from './maindata.service'; import { Component, OnInit } from '@angular/core'; import { BackendService } from './backend.service'; import { LoginData } from './app.interfaces'; -import { ServerError } from 'iqb-components'; +import {CustomtextService, ServerError} from 'iqb-components'; +import {appconfig} from "./app.config"; @Component({ selector: 'tc-root', @@ -15,11 +16,14 @@ export class AppComponent implements OnInit { constructor ( private mds: MainDataService, - private bs: BackendService + private bs: BackendService, + private cts: CustomtextService ) { } ngOnInit() { + this.setDefaultCustomTexts(); // give a message to the central message broadcast + window.addEventListener('message', (event: MessageEvent) => { const msgData = event.data; const msgType = msgData['type']; @@ -31,7 +35,7 @@ export class AppComponent implements OnInit { }); this.bs.getSysConfig().subscribe(sc => { - this.mds.setCostumTextsApp(sc); + this.cts.addCustomTexts(sc); // restore login status if stored in localStorage const loginToken = localStorage.getItem('lt'); if (loginToken !== null) { @@ -57,7 +61,6 @@ export class AppComponent implements OnInit { this.bs.getLoginData(loginToken, personToken, bookletDbId).subscribe(ld => { if (ld instanceof ServerError) { this.mds.setNewLoginData(); - this.mds.setCostumTextsLogin(); } else { const loginData = ld as LoginData; loginData.logintoken = loginToken; @@ -67,17 +70,23 @@ export class AppComponent implements OnInit { loginData.booklet = 0; } this.mds.setNewLoginData(loginData); - this.mds.setCostumTextsLogin(loginData.costumTexts); + this.cts.addCustomTexts(loginData.costumTexts); } }); } else { this.mds.setNewLoginData(); - this.mds.setCostumTextsLogin(); } } else { this.mds.setNewLoginData(); - this.mds.setCostumTextsLogin(); } }); } + + private setDefaultCustomTexts() { + const myCustomTexts: {[key: string]: string} = {}; + for (const ct of Object.keys(appconfig.customtexts)) { + myCustomTexts[ct] = appconfig.customtexts[ct].defaultvalue; + } + this.cts.addCustomTexts(myCustomTexts); + } } diff --git a/src/app/app.config.ts b/src/app/app.config.ts new file mode 100644 index 00000000..3638259f --- /dev/null +++ b/src/app/app.config.ts @@ -0,0 +1,116 @@ +export const appconfig = { + customtexts: <CustomTextDefs>{ + 'app_title': { + defaultvalue: 'IQB-Testcenter', + description: 'Titel der Hauptanwendung, z. B. Homepage' + }, + 'app_intro1': { + defaultvalue: 'betreibt auf diesen Seiten eine Pilotanwendung für das computerbasierte Leistungstesten von ' + + 'Schülerinnen und Schülern. Der Zugang zu einem Test ist nur möglich, wenn Sie von Testverantwortlichen ' + + 'Zugangsdaten erhalten haben, die Sie bitte links eingeben. Es sind keine weiteren Seiten öffentlich verfügbar.', + description: 'Begrüßungstext auf der Startseite' + }, + 'login_testRunningText': { + defaultvalue: 'Ein Testheft ist gestartet', + description: 'Nachricht, dass ein Test (Booklet) gestartet ist' + }, + 'login_testRunningLongText': { + defaultvalue: 'Es wird gerade ein Test ausgeführt. Bitte durch Klicken auf eine der beiden Schaltflächen ' + + 'links wählen, ob der Test fortgesetzt oder beendet werden soll!', + description: 'Nachricht, dass ein Test (Booklet) gestartet ist, mit Aufforderung zum Klicken' + }, + 'login_testEndButtonText': { + defaultvalue: 'Test beenden', + description: 'Schalterbeschriftung für "Test beenden"' + }, + 'login_testReturnButtonText': { + defaultvalue: 'Zum Test zurückkehren', + description: 'Schalterbeschriftung für "Zurück zum Test"' + }, + 'login_bookletSelectPromptNull': { + defaultvalue: 'Beendet. Es können keine weiteren Testhefte gestartet werden.', + description: 'Nachricht für den Fall, dass Booklet(s) beendet wurden und keine weiteren zur Verfügung stehen' + }, + 'login_bookletSelectPromptOne': { + defaultvalue: 'Bitte klicke auf die Schaltfläche auf der linken Seite, um den Test zu starten!', + description: 'Aufforderung, aus einer Schalterliste einen Test auszusuchen' + }, + 'login_bookletSelectPromptMany': { + defaultvalue: 'Bitte klicke auf eine der Schaltflächen auf der linken Seite, um einen Test zu starten!', + description: '' + }, + 'login_codeInputPrompt': { + defaultvalue: 'Bitte Log-in eingeben, der auf dem Zettel steht!', + description: '' + }, + 'login_codeInputTitle': { + defaultvalue: 'Log-in eingeben', + description: '' + }, + 'booklet_msgPresentationNotCompleteTitleNext': { + defaultvalue: 'Weiterblättern nicht möglich!', + description: '' + }, + 'booklet_msgPresentationNotCompleteTextNext': { + defaultvalue: 'Du kannst erst weiterblättern, wenn Audio-Dateien vollständig abgespielt wurden ' + + 'und wenn du in allen Fenstern bis ganz nach unten gescrollt hast.', + description: '' + }, + 'booklet_msgPresentationNotCompleteTitlePrev': { + defaultvalue: 'Zurückblättern - Warnung', + description: '' + }, + 'booklet_msgPresentationNotCompleteTextPrev': { + defaultvalue: 'Eine Audio-Datei ist noch nicht bis zu Ende abgespielt oder Seiten wurden noch nicht vollständig gezeigt. ' + + 'Wenn du jetzt zurückblätterst, kannst Du später Audio-Dateien nicht nocheinmal starten.', + description: '' + }, + 'booklet_codeToEnterTitle': { + defaultvalue: 'Freigabewort', + description: '' + }, + 'booklet_codeToEnterPrompt': { + defaultvalue: 'Bitte gib das Freigabewort ein, das angesagt wurde!', + description: '' + }, + 'booklet_msgSoonTimeOver5Minutes': { + defaultvalue: 'Du hast noch 5 Minuten Zeit für die Bearbeitung der Aufgaben in diesem Abschnitt.', + description: '' + }, + 'booklet_msgSoonTimeOver1Minute': { + defaultvalue: 'Du hast noch 1 Minute Zeit für die Bearbeitung der Aufgaben in diesem Abschnitt.', + description: '' + }, + 'booklet_msgTimerStarted': { + defaultvalue: 'Die Bearbeitungszeit für diesen Abschnitt hat begonnen: ', + description: '' + }, + 'booklet_msgTimerCancelled': { + defaultvalue: 'Die Bearbeitung des Abschnittes wurde abgebrochen.', + description: '' + }, + 'booklet_msgTimeOver': { + defaultvalue: 'Die Bearbeitung des Abschnittes ist beendet.', + description: '' + }, + 'booklet_warningLeaveTimerBlockTitle': { + defaultvalue: 'Aufgabenabschnitt verlassen?', + description: '' + }, + 'booklet_warningLeaveTimerBlockPrompt': { + defaultvalue: 'Wenn du jetzt weiterblätterst, beendest ' + + 'du vorzeitig die Bearbeitung dieses Aufgabenabschnitts und du kannst nicht mehr zurück.', + description: '' + }, + 'login_trialmodeText': { + defaultvalue: 'Ausführungsmodus "trial": Navigationsbeschränkungen sowie Zeit-Beschränkungen, ' + + 'die eventuell für das Testheft oder bestimmte Aufgaben festgelegt wurden, gelten nicht.', + description: '' + }, + 'login_reviewmodeText': { + defaultvalue: 'Ausführungsmodus "review": Beschränkungen für Zeit und Navigation sind nicht wirksam. Antworten werden ' + + 'nicht gespeichert. Sie können Kommentare über das Menü oben rechts speichern.', + description: '' + } + } +}; diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 23fe27f1..05c749e1 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -17,7 +17,7 @@ import { LocationStrategy, HashLocationStrategy } from '@angular/common'; import { FlexLayoutModule } from '@angular/flex-layout'; import { ErrormsgComponent } from './errormsg/errormsg.component'; import { httpInterceptorProviders } from './app.interceptor'; -import { CustomTextPipe } from './custom-text.pipe'; +import {IqbComponentsModule} from "iqb-components"; @NgModule({ @@ -25,8 +25,7 @@ import { CustomTextPipe } from './custom-text.pipe'; AppComponent, StartComponent, AboutComponent, - ErrormsgComponent, - CustomTextPipe + ErrormsgComponent ], imports: [ BrowserModule, @@ -49,7 +48,8 @@ import { CustomTextPipe } from './custom-text.pipe'; ReactiveFormsModule, HttpClientModule, MatToolbarModule, - AppRoutingModule + AppRoutingModule, + IqbComponentsModule ], providers: [ BackendService, diff --git a/src/app/custom-text.pipe.spec.ts b/src/app/custom-text.pipe.spec.ts deleted file mode 100644 index 72be11de..00000000 --- a/src/app/custom-text.pipe.spec.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { CustomTextPipe } from './custom-text.pipe'; - -describe('CustomTextPipe', () => { - it('create an instance', () => { - const pipe = new CustomTextPipe(); - expect(pipe).toBeTruthy(); - }); -}); diff --git a/src/app/custom-text.pipe.ts b/src/app/custom-text.pipe.ts deleted file mode 100644 index 4dff10b2..00000000 --- a/src/app/custom-text.pipe.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Pipe, PipeTransform } from '@angular/core'; -import { MainDataService } from './maindata.service'; - -@Pipe({ - name: 'customText' -}) -export class CustomTextPipe implements PipeTransform { - - constructor ( private mds: MainDataService ) {} - - transform(valueForChangeDetection: any, key: string): string { - return this.mds.getCostumText(key); - } -} diff --git a/src/app/maindata.service.ts b/src/app/maindata.service.ts index 02cf855b..bcd53310 100644 --- a/src/app/maindata.service.ts +++ b/src/app/maindata.service.ts @@ -22,47 +22,6 @@ export class MainDataService { bookletlabel: '', costumTexts: {} }; - private static defaultCostumTexts: KeyValuePair = { - 'app_title': 'IQB-Testcenter', - 'app_intro1': 'betreibt auf diesen Seiten eine Pilotanwendung für das computerbasierte Leistungstesten von ' + - 'Schülerinnen und Schülern. Der Zugang zu einem Test ist nur möglich, wenn Sie von Testverantwortlichen ' + - 'Zugangsdaten erhalten haben, die Sie bitte links eingeben. Es sind keine weiteren Seiten öffentlich verfügbar.', - 'login_testRunningText': 'Ein Testheft ist gestartet', - 'login_testRunningLongText': 'Es wird gerade ein Test ausgeführt. Bitte durch Klicken auf eine der beiden Schaltflächen ' + - 'links wählen, ob der Test fortgesetzt oder beendet werden soll!', - 'login_testEndButtonText': 'Test beenden', - 'login_testReturnButtonText': 'Zum Test zurückkehren', - 'login_bookletSelectPromptNull': 'Beendet. Es können keine weiteren Testhefte gestartet werden.', - 'login_bookletSelectPromptOne': 'Bitte klicke auf die Schaltfläche auf der linken Seite, um den Test zu starten!', - 'login_bookletSelectPromptMany': 'Bitte klicke auf eine der Schaltflächen auf der linken Seite, um einen Test zu starten!', - 'login_codeInputPrompt': 'Bitte Log-in eingeben, der auf dem Zettel steht!', - 'login_codeInputTitle': 'Log-in eingeben', - 'booklet_msgPresentationNotCompleteTitleNext': - 'Weiterblättern nicht möglich!', - 'booklet_msgPresentationNotCompleteTextNext': - 'Du kannst erst weiterblättern, wenn Audio-Dateien vollständig abgespielt wurden ' - + 'und wenn du in allen Fenstern bis ganz nach unten gescrollt hast.', - 'booklet_msgPresentationNotCompleteTitlePrev': - 'Zurückblättern - Warnung', - 'booklet_msgPresentationNotCompleteTextPrev': - 'Eine Audio-Datei ist noch nicht bis zu Ende abgespielt oder Seiten wurden noch nicht vollständig gezeigt. ' - + 'Wenn du jetzt zurückblätterst, kannst Du später Audio-Dateien nicht nocheinmal starten.', - 'booklet_codeToEnterTitle': 'Freigabewort', - 'booklet_codeToEnterPrompt': 'Bitte gib das Freigabewort ein, das angesagt wurde!', - 'booklet_msgSoonTimeOver5Minutes': 'Du hast noch 5 Minuten Zeit für die Bearbeitung der Aufgaben in diesem Abschnitt.', - 'booklet_msgSoonTimeOver1Minute': 'Du hast noch 1 Minute Zeit für die Bearbeitung der Aufgaben in diesem Abschnitt.', - 'booklet_msgTimerStarted': 'Die Bearbeitungszeit für diesen Abschnitt hat begonnen: ', - 'booklet_msgTimerCancelled': 'Die Bearbeitung des Abschnittes wurde abgebrochen.', - 'booklet_msgTimeOver': 'Die Bearbeitung des Abschnittes ist beendet.', - 'booklet_warningLeaveTimerBlockTitle': 'Aufgabenabschnitt verlassen?', - 'booklet_warningLeaveTimerBlockPrompt': 'Wenn du jetzt weiterblätterst, beendest ' + - 'du vorzeitig die Bearbeitung dieses Aufgabenabschnitts und du kannst nicht mehr zurück.', - 'login_trialmodeText': 'Ausführungsmodus "trial": Navigationsbeschränkungen sowie Zeit-Beschränkungen, ' + - 'die eventuell für das Testheft oder bestimmte Aufgaben festgelegt wurden, gelten nicht.', - 'login_reviewmodeText': 'Ausführungsmodus "review": Beschränkungen für Zeit und Navigation sind nicht wirksam. Antworten werden ' + - 'nicht gespeichert. Sie können Kommentare über das Menü oben rechts speichern.' - - }; public loginData$ = new BehaviorSubject<LoginData>(MainDataService.defaultLoginData); public globalErrorMsg$ = new BehaviorSubject<ServerError>(null); @@ -182,32 +141,4 @@ export class MainDataService { const myLoginData = this.loginData$.getValue(); return myLoginData.persontoken; } - - // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - setCostumTextsApp(sc: KeyValuePair = {}) { - this.refreshCostumTexts = false; - this._costumTextsApp = sc; - this.refreshCostumTexts = true; - } - setCostumTextsLogin(sc: KeyValuePair = {}) { - this.refreshCostumTexts = false; - this._costumTextsLogin = sc; - this.refreshCostumTexts = true; - } - getCostumText(key: string): string { - if (this._costumTextsLogin) { - if (this._costumTextsLogin.hasOwnProperty(key)) { - return this._costumTextsLogin[key]; - } - } - if (this._costumTextsApp) { - if (this._costumTextsApp.hasOwnProperty(key)) { - return this._costumTextsApp[key]; - } - } - if (MainDataService.defaultCostumTexts.hasOwnProperty(key)) { - return MainDataService.defaultCostumTexts[key]; - } - return key; - } } diff --git a/src/app/start/start.component.html b/src/app/start/start.component.html index 400d05d9..aeecb449 100644 --- a/src/app/start/start.component.html +++ b/src/app/start/start.component.html @@ -34,7 +34,7 @@ <!-- - - - - - - - - - - - - - - - - --> <mat-card fxFlex="0 0 400px" *ngIf="showCodeForm"> <form [formGroup]="codeinputform" (ngSubmit)="codeinput()"> - <mat-card-title>{{ showCodeForm | customText:'login_codeInputTitle' }}</mat-card-title> + <mat-card-title>{{ 'login_codeInputTitle' | customtext:'login_codeInputTitle':cts.updateCount }}</mat-card-title> <mat-card-content> <mat-form-field> <input matInput formControlName="code" (keyup.enter)="codeinput()"> <!-- no placeholder! --> diff --git a/src/app/start/start.component.ts b/src/app/start/start.component.ts index 9d044b67..de27c9f5 100644 --- a/src/app/start/start.component.ts +++ b/src/app/start/start.component.ts @@ -1,6 +1,6 @@ import { MainDataService } from '../maindata.service'; import { Subscription, forkJoin } from 'rxjs'; -import { MessageDialogComponent, MessageDialogData, MessageType, ServerError } from 'iqb-components'; +import {CustomtextService, MessageDialogComponent, MessageDialogData, MessageType, ServerError} from 'iqb-components'; import { MatDialog } from '@angular/material'; import { BackendService } from '../backend.service'; import { PersonTokenAndBookletDbId, LoginData } from '../app.interfaces'; @@ -44,8 +44,8 @@ export class StartComponent implements OnInit, OnDestroy { public mds: MainDataService, public messsageDialog: MatDialog, private router: Router, - private bs: BackendService) { - + private bs: BackendService, + private cts: CustomtextService) { } ngOnInit() { @@ -60,7 +60,7 @@ export class StartComponent implements OnInit, OnDestroy { this.loginStatusText.push('Gruppe: ' + logindata.groupname); if (logindata.mode === 'trial') { - const tmt = this.mds.getCostumText('login_trialmodeText'); + const tmt = this.cts.getCostumText('login_trialmodeText'); if (tmt.length > 0) { this.loginStatusText.push(tmt); } diff --git a/src/app/sys-check/environment-check/environment-check.component.ts b/src/app/sys-check/environment-check/environment-check.component.ts index 9531d640..f3c3c4f2 100644 --- a/src/app/sys-check/environment-check/environment-check.component.ts +++ b/src/app/sys-check/environment-check/environment-check.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { SyscheckDataService } from '../syscheck-data.service'; +import { SysCheckDataService } from '../sys-check-data.service'; import { ReportEntry } from '../sys-check.interfaces'; @Component({ @@ -27,7 +27,7 @@ export class EnvironmentCheckComponent implements OnInit { }; constructor( - private ds: SyscheckDataService + private ds: SysCheckDataService ) { } ngOnInit() { diff --git a/src/app/sys-check/network-check/network-check.component.ts b/src/app/sys-check/network-check/network-check.component.ts index fa887201..4dd99635 100644 --- a/src/app/sys-check/network-check/network-check.component.ts +++ b/src/app/sys-check/network-check/network-check.component.ts @@ -1,4 +1,4 @@ -import { SyscheckDataService } from '../syscheck-data.service'; +import { SysCheckDataService } from '../sys-check-data.service'; import { Component, Input, OnInit, ViewChild } from '@angular/core'; import {BackendService} from '../backend.service'; import { combineLatest } from 'rxjs'; @@ -16,7 +16,7 @@ import { export class NetworkCheckComponent implements OnInit { constructor( - private ds: SyscheckDataService, + private ds: SysCheckDataService, private bs: BackendService ) {} diff --git a/src/app/sys-check/questionnaire/questionnaire.component.html b/src/app/sys-check/questionnaire/questionnaire.component.html index e227530c..1d51f4a0 100644 --- a/src/app/sys-check/questionnaire/questionnaire.component.html +++ b/src/app/sys-check/questionnaire/questionnaire.component.html @@ -1,6 +1,6 @@ <mat-card-header> <mat-card-title>Fragen</mat-card-title> - <mat-card-subtitle>Bitte bearbeiten Sie die nachfolgenden Fragen.</mat-card-subtitle> + <mat-card-subtitle>{{'Bitte bearbeiten Sie die nachfolgenden Fragen.'| customtext:'QuestionsIntro':cts.updateCount}}</mat-card-subtitle> </mat-card-header> <mat-card-content style="height: 610px; overflow: auto"> diff --git a/src/app/sys-check/questionnaire/questionnaire.component.ts b/src/app/sys-check/questionnaire/questionnaire.component.ts index 1359ecd9..ad953608 100644 --- a/src/app/sys-check/questionnaire/questionnaire.component.ts +++ b/src/app/sys-check/questionnaire/questionnaire.component.ts @@ -1,7 +1,8 @@ import { FormControl, FormGroup } from '@angular/forms'; -import { SyscheckDataService } from '../syscheck-data.service'; +import { SysCheckDataService } from '../sys-check-data.service'; import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; import {FormDefEntry, ReportEntry} from "../sys-check.interfaces"; +import {CustomtextService} from "iqb-components"; @Component({ selector: 'iqb-questionnaire', @@ -15,7 +16,8 @@ export class QuestionnaireComponent implements OnInit { form: FormGroup; constructor( - private ds: SyscheckDataService + private ds: SysCheckDataService, + private cts: CustomtextService ) { } diff --git a/src/app/sys-check/report/report.component.ts b/src/app/sys-check/report/report.component.ts index cf12bb93..b32a2468 100644 --- a/src/app/sys-check/report/report.component.ts +++ b/src/app/sys-check/report/report.component.ts @@ -1,5 +1,5 @@ import {BackendService} from '../backend.service'; -import { SyscheckDataService } from '../syscheck-data.service'; +import { SysCheckDataService } from '../sys-check-data.service'; import {Component, Input} from '@angular/core'; import {SaveReportComponent} from './save-report/save-report.component'; import {MatDialog, MatSnackBar} from '@angular/material'; @@ -30,7 +30,7 @@ export class ReportComponent { constructor( private bs: BackendService, - private ds: SyscheckDataService, + private ds: SysCheckDataService, private saveDialog: MatDialog, private snackBar: MatSnackBar ) { diff --git a/src/app/sys-check/start.component.ts b/src/app/sys-check/start.component.ts index 8873658b..760a2b9f 100644 --- a/src/app/sys-check/start.component.ts +++ b/src/app/sys-check/start.component.ts @@ -1,4 +1,4 @@ -import { SyscheckDataService } from './syscheck-data.service'; +import { SysCheckDataService } from './sys-check-data.service'; import { Router, ActivatedRoute } from '@angular/router'; import { BackendService } from './backend.service'; import { Component, OnInit } from '@angular/core'; @@ -17,7 +17,7 @@ export class StartComponent implements OnInit { constructor( private bs: BackendService, - private ds: SyscheckDataService, + private ds: SysCheckDataService, private route: ActivatedRoute, private router: Router) { } diff --git a/src/app/sys-check/syscheck-data.service.ts b/src/app/sys-check/sys-check-data.service.ts similarity index 98% rename from src/app/sys-check/syscheck-data.service.ts rename to src/app/sys-check/sys-check-data.service.ts index 480584ca..0acbf49b 100644 --- a/src/app/sys-check/syscheck-data.service.ts +++ b/src/app/sys-check/sys-check-data.service.ts @@ -7,7 +7,7 @@ type Task = 'loadunit' | 'speedtest' | null; @Injectable({ providedIn: 'root' }) -export class SyscheckDataService { +export class SysCheckDataService { public checkConfig$ = new BehaviorSubject<CheckConfigData>( { diff --git a/src/app/sys-check/sys-check.component.ts b/src/app/sys-check/sys-check.component.ts index 26fa5676..8166eb29 100644 --- a/src/app/sys-check/sys-check.component.ts +++ b/src/app/sys-check/sys-check.component.ts @@ -1,8 +1,9 @@ -import { SyscheckDataService } from './syscheck-data.service'; +import { SysCheckDataService } from './sys-check-data.service'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { Component, OnInit} from '@angular/core'; import {BackendService} from './backend.service'; import {Subscription} from "rxjs"; +import {CustomtextService} from "iqb-components"; interface Checks { @@ -34,8 +35,9 @@ export class SysCheckComponent implements OnInit { constructor( private bs: BackendService, - private ds: SyscheckDataService, - private route: ActivatedRoute + private ds: SysCheckDataService, + private route: ActivatedRoute, + private cts: CustomtextService ) { } @@ -57,6 +59,13 @@ export class SysCheckComponent implements OnInit { if (this.checks.network) { this.ds.taskQueue.push('speedtest'); } + if (checkConfig.customtexts.length > 0) { + const myCustomTexts: {[key: string]: string} = {}; + checkConfig.customtexts.forEach(ct => { + myCustomTexts[ct.key] = ct.value; + }) + this.cts.addCustomTexts(myCustomTexts); + } this.ds.nextTask(); this.taskSubscription = this.ds.task$.subscribe(task => { this.dataLoading = (typeof task !== 'undefined') && (this.ds.taskQueue.length > 0); diff --git a/src/app/sys-check/sys-check.module.ts b/src/app/sys-check/sys-check.module.ts index 83eaee88..71712ee8 100644 --- a/src/app/sys-check/sys-check.module.ts +++ b/src/app/sys-check/sys-check.module.ts @@ -1,5 +1,5 @@ import { ResizeIFrameChildDirective } from './unit-check/resize-IFrameChild/resize-IFrameChild.directive'; -import { SyscheckDataService } from './syscheck-data.service'; +import { SysCheckDataService } from './sys-check-data.service'; import { BackendService } from './backend.service'; import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; @@ -25,6 +25,7 @@ import { UnitNaviButtonsComponent } from './unit-check/tc-navi-buttons/unit-navi import { TcSpeedChartComponent } from './network-check/tc-speed-chart.component'; import {MatTooltipModule} from "@angular/material/tooltip"; +import {IqbComponentsModule} from "iqb-components"; @NgModule({ imports: [ @@ -46,7 +47,8 @@ import {MatTooltipModule} from "@angular/material/tooltip"; MatTooltipModule, MatSnackBarModule, MatDialogModule, - ReactiveFormsModule + ReactiveFormsModule, + IqbComponentsModule ], declarations: [ StartComponent, @@ -69,7 +71,7 @@ import {MatTooltipModule} from "@angular/material/tooltip"; ], providers: [ BackendService, - SyscheckDataService + SysCheckDataService ] }) export class SysCheckModule { } diff --git a/src/app/sys-check/syscheck-data.service.spec.ts b/src/app/sys-check/syscheck-data.service.spec.ts index 3ea84d60..6b13c454 100644 --- a/src/app/sys-check/syscheck-data.service.spec.ts +++ b/src/app/sys-check/syscheck-data.service.spec.ts @@ -1,15 +1,15 @@ import { TestBed, inject } from '@angular/core/testing'; -import { SyscheckDataService } from './syscheck-data.service'; +import { SysCheckDataService } from './sys-check-data.service'; describe('SyscheckDataService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [SyscheckDataService] + providers: [SysCheckDataService] }); }); - it('should be created', inject([SyscheckDataService], (service: SyscheckDataService) => { + it('should be created', inject([SysCheckDataService], (service: SysCheckDataService) => { expect(service).toBeTruthy(); })); }); diff --git a/src/app/sys-check/unit-check/tc-navi-buttons/unit-navi-buttons.component.ts b/src/app/sys-check/unit-check/tc-navi-buttons/unit-navi-buttons.component.ts index c8bd05a4..fc58ae7f 100644 --- a/src/app/sys-check/unit-check/tc-navi-buttons/unit-navi-buttons.component.ts +++ b/src/app/sys-check/unit-check/tc-navi-buttons/unit-navi-buttons.component.ts @@ -1,4 +1,4 @@ -import { SyscheckDataService } from '../../syscheck-data.service'; +import { SysCheckDataService } from '../../sys-check-data.service'; import { Component, OnInit } from '@angular/core'; @Component({ @@ -11,7 +11,7 @@ export class UnitNaviButtonsComponent { private pagePrevEnabled = false; private pageNextEnabled = false; - constructor(private ds: SyscheckDataService) { + constructor(private ds: SysCheckDataService) { this.ds.itemplayerValidPages$.subscribe((pages: string[]) => this.showPageNaviButtons = pages.length > 1); this.ds.itemplayerCurrentPage$.subscribe((p: string) => { diff --git a/src/app/sys-check/unit-check/unit-check.component.ts b/src/app/sys-check/unit-check/unit-check.component.ts index d709c327..56778e2f 100644 --- a/src/app/sys-check/unit-check/unit-check.component.ts +++ b/src/app/sys-check/unit-check/unit-check.component.ts @@ -1,6 +1,6 @@ import { MainDataService } from '../../maindata.service'; import { BackendService } from '../backend.service'; -import { SyscheckDataService } from '../syscheck-data.service'; +import { SysCheckDataService } from '../sys-check-data.service'; import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; import { OnDestroy } from '@angular/core'; import { Subscription, BehaviorSubject, combineLatest} from 'rxjs'; @@ -28,7 +28,7 @@ export class UnitCheckComponent implements OnInit, OnDestroy { public errorMessage = ''; constructor( - private ds: SyscheckDataService, + private ds: SysCheckDataService, private bs: BackendService, private mds: MainDataService ) { diff --git a/src/app/test-controller/test-controller.component.ts b/src/app/test-controller/test-controller.component.ts index d97950a6..4f360201 100644 --- a/src/app/test-controller/test-controller.component.ts +++ b/src/app/test-controller/test-controller.component.ts @@ -11,7 +11,7 @@ import { UnitDef, Testlet, EnvironmentData, MaxTimerData } from './test-controll import { LastStateKey, LogEntryKey, BookletData, UnitData, MaxTimerDataType, TaggedString } from './test-controller.interfaces'; import { Subscription, Observable, of, from } from 'rxjs'; import { switchMap, concatMap } from 'rxjs/operators'; -import {ServerError} from "iqb-components"; +import {CustomtextService, ServerError} from "iqb-components"; @Component({ templateUrl: './test-controller.component.html', @@ -42,7 +42,8 @@ export class TestControllerComponent implements OnInit, OnDestroy { private bs: BackendService, private reviewDialog: MatDialog, private snackBar: MatSnackBar, - private router: Router + private router: Router, + private cts: CustomtextService ) { } // '''''''''''''''''''''''''''''''''''''''''''''''''''' @@ -51,7 +52,7 @@ export class TestControllerComponent implements OnInit, OnDestroy { if (value.length > 0) { return value; } else { - return this.mds.getCostumText(key); + return this.cts.getCustomText(key, key); } } // '''''''''''''''''''''''''''''''''''''''''''''''''''' -- GitLab