Commit efac5045 authored by Andrea's avatar Andrea
Browse files

testmodule: test finished; layout main site

parent ada125b8
{
"name": "mc_frontend",
"version": "0.7.3",
"version": "0.7.5",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
......@@ -1277,7 +1277,6 @@
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
"integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
"dev": true,
"optional": true,
"requires": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
......@@ -2516,8 +2515,7 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
"dev": true,
"optional": true
"dev": true
},
"constants-browserify": {
"version": "1.0.0",
......@@ -3808,8 +3806,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
"dev": true,
"optional": true
"dev": true
},
"depd": {
"version": "1.1.2",
......@@ -5311,7 +5308,6 @@
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
"integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
"dev": true,
"optional": true,
"requires": {
"graceful-fs": "^4.1.2",
"inherits": "~2.0.0",
......@@ -5324,7 +5320,6 @@
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"dev": true,
"optional": true,
"requires": {
"aproba": "^1.0.3",
"console-control-strings": "^1.0.0",
......@@ -5362,8 +5357,7 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
"integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
"dev": true,
"optional": true
"dev": true
},
"get-stream": {
"version": "3.0.0",
......@@ -5543,8 +5537,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
"dev": true,
"optional": true
"dev": true
},
"has-value": {
"version": "1.0.0",
......@@ -6269,8 +6262,7 @@
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
"integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
"dev": true,
"optional": true
"dev": true
},
"is-windows": {
"version": "1.0.2",
......@@ -6950,7 +6942,6 @@
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
"integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
"dev": true,
"optional": true,
"requires": {
"graceful-fs": "^4.1.2",
"parse-json": "^2.2.0",
......@@ -6963,8 +6954,7 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true,
"optional": true
"dev": true
}
}
},
......@@ -7239,8 +7229,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
"integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
"dev": true,
"optional": true
"dev": true
},
"map-visit": {
"version": "1.0.0",
......@@ -7881,7 +7870,6 @@
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
"dev": true,
"optional": true,
"requires": {
"are-we-there-yet": "~1.1.2",
"console-control-strings": "~1.1.0",
......@@ -8898,7 +8886,6 @@
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
"integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
"dev": true,
"optional": true,
"requires": {
"load-json-file": "^1.0.0",
"normalize-package-data": "^2.3.2",
......@@ -8910,7 +8897,6 @@
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
"integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
"dev": true,
"optional": true,
"requires": {
"graceful-fs": "^4.1.2",
"pify": "^2.0.0",
......@@ -8921,8 +8907,7 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true,
"optional": true
"dev": true
}
}
},
......@@ -8931,7 +8916,6 @@
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
"integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
"dev": true,
"optional": true,
"requires": {
"find-up": "^1.0.0",
"read-pkg": "^1.0.0"
......@@ -8942,7 +8926,6 @@
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
"integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
"dev": true,
"optional": true,
"requires": {
"path-exists": "^2.0.0",
"pinkie-promise": "^2.0.0"
......@@ -8953,7 +8936,6 @@
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
"integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
"dev": true,
"optional": true,
"requires": {
"pinkie-promise": "^2.0.0"
}
......@@ -10227,7 +10209,6 @@
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
"integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
"dev": true,
"optional": true,
"requires": {
"is-utf8": "^0.2.0"
}
......@@ -11600,7 +11581,6 @@
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
"integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
"dev": true,
"optional": true,
"requires": {
"string-width": "^1.0.2 || 2"
}
......
......@@ -80,4 +80,4 @@
"cordova-plugin-splashscreen": {}
}
}
}
\ No newline at end of file
}
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: 'home', loadChildren: './home/home.module#HomePageModule' },
{ path: 'vocabulary-check', loadChildren: './vocabulary-check/vocabulary-check.module#VocabularyCheckPageModule' },
{ path: 'author', loadChildren: './author/author.module#AuthorPageModule' },
{ path: 'author-detail', loadChildren: './author-detail/author-detail.module#AuthorDetailPageModule' },
{ path: 'text-range', loadChildren: './text-range/text-range.module#TextRangePageModule' },
{ path: 'show-text', loadChildren: './show-text/show-text.module#ShowTextPageModule' },
{ path: 'exercise-parameters', loadChildren: './exercise-parameters/exercise-parameters.module#ExerciseParametersPageModule' },
{ path: 'preview', loadChildren: './preview/preview.module#PreviewPageModule' },
{ path: 'kwic', loadChildren: './kwic/kwic.module#KwicPageModule' },
{ path: 'ranking', loadChildren: './ranking/ranking.module#RankingPageModule' },
{ path: 'feedback', loadChildren: './feedback/feedback.module#FeedbackPageModule' },
{ path: 'change-language', loadChildren: './change-language/change-language.module#ChangeLanguagePageModule' }, { path: 'info', loadChildren: './info/info.module#InfoPageModule' },
{ path: 'sources', loadChildren: './sources/sources.module#SourcesPageModule' },
{ path: 'imprint', loadChildren: './imprint/imprint.module#ImprintPageModule' },
{ path: 'test', loadChildren: './test/test.module#TestPageModule' },
const routes: Routes = [
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: 'home', loadChildren: './home/home.module#HomePageModule' },
{ path: 'vocabulary-check', loadChildren: './vocabulary-check/vocabulary-check.module#VocabularyCheckPageModule' },
{ path: 'author', loadChildren: './author/author.module#AuthorPageModule' },
{ path: 'author-detail', loadChildren: './author-detail/author-detail.module#AuthorDetailPageModule' },
{ path: 'text-range', loadChildren: './text-range/text-range.module#TextRangePageModule' },
{ path: 'show-text', loadChildren: './show-text/show-text.module#ShowTextPageModule' },
{ path: 'exercise-parameters', loadChildren: './exercise-parameters/exercise-parameters.module#ExerciseParametersPageModule' },
{ path: 'preview', loadChildren: './preview/preview.module#PreviewPageModule' },
{ path: 'kwic', loadChildren: './kwic/kwic.module#KwicPageModule' },
{ path: 'ranking', loadChildren: './ranking/ranking.module#RankingPageModule' },
{ path: 'feedback', loadChildren: './feedback/feedback.module#FeedbackPageModule' },
{ path: 'change-language', loadChildren: './change-language/change-language.module#ChangeLanguagePageModule' },
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
......
......@@ -17,6 +17,19 @@
<ion-content padding>
<ion-grid>
<ion-row>
<ion-col>
<b>{{ 'MOST_RECENT_SETUP' | translate }}:</b>
<br>
</ion-col>
</ion-row>
<ion-row *ngIf="HelperService.mostRecentSetup">
<ion-col>
<a (click)="restoreLastSetup()">{{ [HelperService.mostRecentSetup.currentCorpus.author,
HelperService.mostRecentSetup.currentCorpus.title,
HelperService.mostRecentSetup.workReference].join(", ") }}</a>
</ion-col>
</ion-row>
<ion-row>
<ion-col>
<label>{{ "AUTHOR_SHOW_ONLY_TREEBANKS" | translate}}
......
......@@ -5,6 +5,7 @@ import {TranslateService} from '@ngx-translate/core';
import {CorpusService} from 'src/app/corpus.service';
import {HttpClient} from '@angular/common/http';
import {HelperService} from '../helper.service';
import { ExerciseService } from '../exercise.service';
/**
* Generated class for the AuthorPage page.
......@@ -23,7 +24,8 @@ export class AuthorPage {
constructor(public navCtrl: NavController,
public translate: TranslateService,
public corpusService: CorpusService,
public http: HttpClient) {
public http: HttpClient,
public exerciseService: ExerciseService) {
this.toggleTreebankAuthors();
this.corpusService.currentCorpus = null;
this.corpusService.isTextRangeCorrect = false;
......@@ -54,6 +56,18 @@ export class AuthorPage {
return this.corpusService.availableAuthors.filter(author => author.corpora.some(corpus => this.corpusService.isTreebank(corpus)));
}
restoreLastSetup() {
this.corpusService.restoreLastCorpus();
this.exerciseService.restoreLastURN().then(() => {
if (HelperService.isVocabularyCheck) {
this.navCtrl.navigateForward('/vocabulary-check').then();
} else {
this.navCtrl.navigateForward('show-text').then();
}
}, () => {
});
}
showCorpora(author: Author) {
this.corpusService.currentAuthor = author;
this.navCtrl.navigateForward('/author-detail').then();
......
......@@ -34,6 +34,22 @@ export class HelperService {
navCtrl.navigateRoot('/home').then();
}
static goToImprintPage(navCtrl: NavController) {
navCtrl.navigateRoot('/imprint').then();
}
static goToInfoPage(navCtrl: NavController) {
navCtrl.navigateRoot('/info').then();
}
static goToSourcesPage(navCtrl: NavController) {
navCtrl.navigateRoot('/sources').then();
}
static goToTestPage(navCtrl: NavController) {
navCtrl.navigateRoot('/test').then();
}
initConfig() {
this.http.get('assets/config.json').subscribe((config: object) => {
HelperService.config = config;
......
......@@ -22,28 +22,14 @@
<ion-button (click)="goToAuthorPage()">{{ 'EXERCISE_GENERATE' | translate }}</ion-button>
</ion-col>
</ion-row>
<ion-row class="lastMainElement">
<ion-col>
<ion-button (click)="goToVocabularyCheckPage()">{{ 'VOCABULARY_CHECK' | translate }}</ion-button>
</ion-col>
</ion-row>
<ion-row>
<ion-col>
<br>
<ion-button *ngIf="isProductionEnv" (click)="test()">{{ 'TEST' | translate }}</ion-button>
</ion-col>
<ion-col>
<ion-button (click)="HelperService.goToTestPage(navCtrl)">{{ 'START_TEST' | translate }}</ion-button>
</ion-col>
</ion-row>
<ion-row *ngIf="HelperService.mostRecentSetup" padding-top>
<ion-col>
<h3>{{ 'MOST_RECENT_SETUP' | translate }}</h3>
<a (click)="restoreLastSetup()">{{ [HelperService.mostRecentSetup.currentCorpus.author,
HelperService.mostRecentSetup.currentCorpus.title,
HelperService.mostRecentSetup.workReference].join(", ") }}</a>
</ion-col>
</ion-row>
<ion-row padding-top>
<ion-row class="lastMainElement">
<ion-col>
<ion-button (click)="refreshCorpora()">{{ 'CORPORA_REFRESH' | translate }}</ion-button>
<ion-button (click)="goToVocabularyCheckPage()">{{ 'VOCABULARY_CHECK' | translate }}</ion-button>
</ion-col>
</ion-row>
</ion-grid>
......@@ -52,3 +38,28 @@
<ion-button (click)="isCorpusUpdateInProgress = false">{{ 'CANCEL' | translate }}</ion-button>
</ng-template>
</ion-content>
<ion-footer>
<ion-toolbar>
<ion-tabs>
<ion-tab-bar slot="bottom">
<ion-tab-button (click)="HelperService.goToInfoPage(navCtrl)">
<ion-icon name="information-circle"></ion-icon>
<ion-label>{{ 'ABOUT' | translate }}</ion-label>
</ion-tab-button>
<ion-tab-button (click)="HelperService.goToSourcesPage(navCtrl)">
<ion-icon name="globe"></ion-icon>
<ion-label>{{ 'SOURCES' | translate}}</ion-label>
</ion-tab-button>
<ion-tab-button (click)="HelperService.goToImprintPage(navCtrl)">
<ion-icon name="today"></ion-icon>
<ion-label>{{ 'IMPRINT' | translate }}</ion-label>
</ion-tab-button>
<ion-tab-button (click)="refreshCorpora()">
<ion-icon name="refresh"></ion-icon>
<ion-label >{{ 'CORPORA_REFRESH' | translate }}</ion-label>
</ion-tab-button>
</ion-tab-bar>
</ion-tabs>
</ion-toolbar>
</ion-footer>
......@@ -44,6 +44,10 @@ export class HomePage {
this.navCtrl.navigateForward('/author').then();
}
goToTestPage() {
this.navCtrl.navigateForward('/test').then();
}
goToVocabularyCheckPage() {
HelperService.isVocabularyCheck = true;
this.navCtrl.navigateForward('/vocabulary-check').then();
......
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { ImprintPage } from './imprint.page';
import {TranslateModule} from "@ngx-translate/core";
const routes: Routes = [
{
path: '',
component: ImprintPage
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes),
TranslateModule.forChild(),
],
declarations: [ImprintPage]
})
export class ImprintPageModule {}
<ion-header>
<ion-toolbar>
<div class="toolbar-left">
<ion-back-button icon="arrow-back" defaultHref="home"></ion-back-button>
<ion-title>{{ 'IMPRINT' | translate }}</ion-title>
</div>
<div class="toolbar-right">
<button (click)="HelperService.goToHomePage(navCtrl)">
<ion-icon name="home"></ion-icon>
</button>
</div>
</ion-toolbar>
</ion-header>
<ion-content padding>
<ion-card>
<ion-card-header>
<ion-card-title>Angaben gemäß §5 TMG: </ion-card-title>
</ion-card-header>
<ion-card-content>
Humboldt-Universität zu Berlin<br>
Institut für deutsche Sprache und Linguistik<br>
Sprach- und literaturwissenschaftliche Fakultät<br>
Herr Konstantin Schulz<br>
Dorotheenstraße 24<br>
10099 Berlin<br>
Tel.: +49 (30) 2093-9720<br>
E-Mail: sulzkons@hu-berlin.de<br>
Website: <a href="https://www.projekte.hu-berlin.de/de/callidus" target="_blank">CALLIDUS-Projekt</a>
</ion-card-content>
</ion-card>
<ion-card>
<ion-card-header>
<ion-card-title>Haftung für Inhalte</ion-card-title>
</ion-card-header>
<ion-card-content>
Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten
nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als Diensteanbieter
jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen
oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen.<br>
Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen
Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt
der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden
Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.
</ion-card-content>
</ion-card>
<ion-card>
<ion-card-header>
<ion-card-title>Haftung für Links</ion-card-title>
</ion-card-header>
<ion-card-content>
Unser Angebot enthält Links zu externen Webseiten Dritter, auf deren Inhalte wir keinen
Einfluss haben. Deshalb können wir für diese fremden Inhalte auch keine Gewähr übernehmen.
Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der
Seiten verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche
Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung nicht
erkennbar.<br>
Eine permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete
Anhaltspunkte einer Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen
werden wir derartige Links umgehend entfernen.
</ion-card-content>
</ion-card>
<ion-card>
<ion-card-header>
<ion-card-title>Urheberrecht</ion-card-title>
</ion-card-header>
<ion-card-content>
Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen
dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art
der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen
Zustimmung des jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite
sind nur für den privaten, nicht kommerziellen Gebrauch gestattet.<br>
Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die
Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet.
Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um
einen entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige
Inhalte umgehend entfernen.
</ion-card-content>
</ion-card>
</ion-content>
<ion-footer>
<ion-toolbar>
<ion-tabs>
<ion-tab-bar slot="bottom">
<ion-tab-button (click)="goToAuthorPage()">
<ion-icon name="walk"></ion-icon>
<ion-label>Übung erstellen</ion-label>
</ion-tab-button>
<ion-tab-button (click)="HelperService.goToTestPage(navCtrl)">
<ion-icon name="school"></ion-icon>
<ion-label>Test beginnen</ion-label>
</ion-tab-button>
</ion-tab-bar>
</ion-tabs>
</ion-toolbar>
</ion-footer>
\ No newline at end of file
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ImprintPage } from './imprint.page';
describe('ImprintPage', () => {
let component: ImprintPage;
let fixture: ComponentFixture<ImprintPage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ImprintPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ImprintPage);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import {Component, OnInit} from '@angular/core';
import {HelperService} from 'src/app/helper.service';
import {NavController} from '@ionic/angular';
import {HttpClient} from '@angular/common/http';
import {TranslateService} from '@ngx-translate/core';
@Component({
selector: 'app-imprint',
templateUrl: './imprint.page.html',
styleUrls: ['./imprint.page.scss'],
})
export class ImprintPage {
HelperService = HelperService;
constructor(public navCtrl: NavController,
public http: HttpClient,
public translate: TranslateService) { }
goToAuthorPage() {
this.navCtrl.navigateForward('/author').then();
}
goToTestPage() {
this.navCtrl.navigateForward('/test').then();
}
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { InfoPage } from './info.page';
import {TranslateModule} from "@ngx-translate/core";
const routes: Routes = [
{
path: '',
component: InfoPage
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes),
TranslateModule.forChild(),
],
declarations: [InfoPage]