diff --git a/src/app/about/about.component.html b/src/app/about/about.component.html index 51ae13ab7b182bfeef4751f4e2fa8f56822a683f..7a2f2ed35271eacffbc9980c0dee508bdfeed206 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 adf6966614499ed5611a9cdb5ab81b94c6913034..675674ca1472c730544f7578089579857a7237d1 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 1afb1784d652c4d1b990eb5a64667d424045b0db..f5dd0528efac7128bd96d65a84d4c92cb1966970 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 0000000000000000000000000000000000000000..3638259f6d55a427048907d3a4470bfc123cfaf0 --- /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 23fe27f1a38420d0e989f344336d8184063744dd..05c749e14a2a79cfe5961a67092a0533e8d83d34 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 72be11de02c2bb2795f98901cadc4b0697911b78..0000000000000000000000000000000000000000 --- 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 4dff10b2301b8338ba78768d255019e077c287af..0000000000000000000000000000000000000000 --- 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 02cf855b4e79b0434c3a0e22f737990ac1f17a01..bcd53310a7472dcc1c537041e9ba3f3d46de3581 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 400d05d94afcc1e64c0526b20a731eb9444d9dce..aeecb449d39b6afcfedbee14e8b7f900b5b40458 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 9d044b67e0d1c96393d928edb3b6f2ab9a1469c7..de27c9f538689433fb7e0579bf40b8440d529aa0 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 9531d6407cd95c7b0079441d54689aef8da6d608..f3c3c4f27e9eb6a8f603114104c0762bee721bda 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 fa88720196b11366647076a3ff8963c575d5e493..4dd996356b46db1b72c95cbaf0a24b2d287387b0 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 e227530c33319f59133b13633b6200c02acbe3c3..1d51f4a05dfd86cb18c66de242827f2bde47505b 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 1359ecd993c0a60732214eee2eabcd454e0a81f0..ad953608358d826ceb0d5e58e21a1118c2bd60fb 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 cf12bb9386dcb3fa3bb43ba01603b7a5763c3c78..b32a246815d62e35f622cfe64069f1a85fda18b6 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 8873658bbbc5b5ad3a7ca16d17a08764fb90369f..760a2b9f45074dcb79298163fd0c9754d43d7df7 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 480584ca6f5cadae5c3a3bafb3fc22460201e21a..0acbf49b55bdf75fef06869ea4f13144003b548a 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 26fa5676eb8d4793a61676d25d46eac60a761b89..8166eb29726d223a7eb190aa073f022fd7976d42 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 83eaee88dbb4ebbe884d653da6ee51df5e00e787..71712ee8a0770fd023c2fa81cf7bb0ae060642a2 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 3ea84d608c9098923306daf05c5c287add31c736..6b13c454d5d28afec78a477f14ec2c2fdf5c4871 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 c8bd05a4db3fbe0bb1683cb3aa7a09cc9838c9ce..fc58ae7f81034b1a9b62d76ed8cfa6ce31242268 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 d709c3273158720fc361af05c164cd3df341e665..56778e2fbd18354f874a80a0862451f4c9ee101d 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 d97950a689907ce367e2d5c3f8e02bf6da81f15b..4f3602016dfbc738818ed5dc757f3e8a7dc56d33 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); } } // ''''''''''''''''''''''''''''''''''''''''''''''''''''