Quellcode durchsuchen

Test page init + start page UI + connection to test page

master
kj1352 vor 5 Jahren
Ursprung
Commit
1a9a066123
23 geänderte Dateien mit 508 neuen und 4 gelöschten Zeilen
  1. +2
    -0
      src/app/app-routing.module.ts
  2. +13
    -3
      src/app/app.module.ts
  3. +1
    -1
      src/app/tabs/courses/course-details/course-details.component.html
  4. +1
    -0
      src/app/tabs/courses/test/end/end.component.html
  5. +0
    -0
      src/app/tabs/courses/test/end/end.component.scss
  6. +25
    -0
      src/app/tabs/courses/test/end/end.component.spec.ts
  7. +15
    -0
      src/app/tabs/courses/test/end/end.component.ts
  8. +1
    -0
      src/app/tabs/courses/test/question-sheet/question-sheet.component.html
  9. +0
    -0
      src/app/tabs/courses/test/question-sheet/question-sheet.component.scss
  10. +25
    -0
      src/app/tabs/courses/test/question-sheet/question-sheet.component.spec.ts
  11. +15
    -0
      src/app/tabs/courses/test/question-sheet/question-sheet.component.ts
  12. +1
    -0
      src/app/tabs/courses/test/question-sheet/question/question.component.html
  13. +0
    -0
      src/app/tabs/courses/test/question-sheet/question/question.component.scss
  14. +25
    -0
      src/app/tabs/courses/test/question-sheet/question/question.component.spec.ts
  15. +15
    -0
      src/app/tabs/courses/test/question-sheet/question/question.component.ts
  16. +80
    -0
      src/app/tabs/courses/test/start/start.component.html
  17. +174
    -0
      src/app/tabs/courses/test/start/start.component.scss
  18. +25
    -0
      src/app/tabs/courses/test/start/start.component.spec.ts
  19. +37
    -0
      src/app/tabs/courses/test/start/start.component.ts
  20. +3
    -0
      src/app/tabs/courses/test/test.component.html
  21. +3
    -0
      src/app/tabs/courses/test/test.component.scss
  22. +25
    -0
      src/app/tabs/courses/test/test.component.spec.ts
  23. +22
    -0
      src/app/tabs/courses/test/test.component.ts

+ 2
- 0
src/app/app-routing.module.ts Datei anzeigen

@@ -13,6 +13,7 @@ import { QuizComponent } from './tabs/courses/quiz/quiz.component';
import { PostDetailsComponent } from './reusable-components/forum/post-details/post-details.component'; import { PostDetailsComponent } from './reusable-components/forum/post-details/post-details.component';
import { ChatPageComponent } from './chat-page/chat-page.component'; import { ChatPageComponent } from './chat-page/chat-page.component';
import { SettingsComponent } from './settings/settings.component'; import { SettingsComponent } from './settings/settings.component';
import { TestComponent } from './tabs/courses/test/test.component';


const routes: Routes = [ const routes: Routes = [
{ path: '', pathMatch: 'full', redirectTo: 'welcome' }, { path: '', pathMatch: 'full', redirectTo: 'welcome' },
@@ -24,6 +25,7 @@ const routes: Routes = [
{ component: VideoChapterComponent, path: 'video-chapter/:heading' }, { component: VideoChapterComponent, path: 'video-chapter/:heading' },
{ component: VideoNotesComponent, path: 'video-notes/:heading' }, { component: VideoNotesComponent, path: 'video-notes/:heading' },
{ component: QuizComponent, path: 'quiz' }, { component: QuizComponent, path: 'quiz' },
{ component: TestComponent, path: 'test'},
{ component: CalendarComponent, path: 'calendar' }, { component: CalendarComponent, path: 'calendar' },
{ component: AttendanceComponent, path: 'attendance'}, { component: AttendanceComponent, path: 'attendance'},
{ component: ForumPageComponent, path: 'forum'}, { component: ForumPageComponent, path: 'forum'},


+ 13
- 3
src/app/app.module.ts Datei anzeigen

@@ -8,6 +8,9 @@ import { NgxSiemaModule } from 'ngx-siema';
import { AppRoutingModule } from './app-routing.module'; import { AppRoutingModule } from './app-routing.module';
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';


// Import services
import { DemoService } from './services/demo.service';

// Component imports // Component imports
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
import { WelcomeComponent } from './welcome/welcome.component'; import { WelcomeComponent } from './welcome/welcome.component';
@@ -33,9 +36,11 @@ import { ChatPageComponent } from './chat-page/chat-page.component';
import { ChatWindowComponent } from './chat-page/chat-window/chat-window.component'; import { ChatWindowComponent } from './chat-page/chat-window/chat-window.component';
import { SettingsComponent } from './settings/settings.component'; import { SettingsComponent } from './settings/settings.component';
import { ClassCardListComponent } from './reusable-components/class-card-list/class-card-list.component'; import { ClassCardListComponent } from './reusable-components/class-card-list/class-card-list.component';

// Import services
import { DemoService } from './services/demo.service';
import { TestComponent } from './tabs/courses/test/test.component';
import { StartComponent } from './tabs/courses/test/start/start.component';
import { EndComponent } from './tabs/courses/test/end/end.component';
import { QuestionSheetComponent } from './tabs/courses/test/question-sheet/question-sheet.component';
import { QuestionComponent } from './tabs/courses/test/question-sheet/question/question.component';


@NgModule({ @NgModule({
declarations: [ declarations: [
@@ -61,6 +66,11 @@ import { DemoService } from './services/demo.service';
ChatWindowComponent, ChatWindowComponent,
SettingsComponent, SettingsComponent,
ClassCardListComponent, ClassCardListComponent,
TestComponent,
StartComponent,
EndComponent,
QuestionSheetComponent,
QuestionComponent,
], ],
imports: [ imports: [
BrowserModule, BrowserModule,


+ 1
- 1
src/app/tabs/courses/course-details/course-details.component.html Datei anzeigen

@@ -31,7 +31,7 @@
<p> <p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quidem ab vel reiciendis. Repudiandae nobis pariatur laboriosam, natus quidem quos architecto provident similique officiis vero at cum excepturi eius, eligendi aperiam. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quidem ab vel reiciendis. Repudiandae nobis pariatur laboriosam, natus quidem quos architecto provident similique officiis vero at cum excepturi eius, eligendi aperiam.
</p> </p>
<button> Take the test now! </button>
<button [routerLink]="'/test'"> Take the test now! </button>
</section> </section>
</section> </section>




+ 1
- 0
src/app/tabs/courses/test/end/end.component.html Datei anzeigen

@@ -0,0 +1 @@
<p>end works!</p>

+ 0
- 0
src/app/tabs/courses/test/end/end.component.scss Datei anzeigen


+ 25
- 0
src/app/tabs/courses/test/end/end.component.spec.ts Datei anzeigen

@@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';

import { EndComponent } from './end.component';

describe('EndComponent', () => {
let component: EndComponent;
let fixture: ComponentFixture<EndComponent>;

beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ EndComponent ]
})
.compileComponents();
}));

beforeEach(() => {
fixture = TestBed.createComponent(EndComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('should create', () => {
expect(component).toBeTruthy();
});
});

+ 15
- 0
src/app/tabs/courses/test/end/end.component.ts Datei anzeigen

@@ -0,0 +1,15 @@
import { Component, OnInit } from '@angular/core';

@Component({
selector: 'app-end',
templateUrl: './end.component.html',
styleUrls: ['./end.component.scss']
})
export class EndComponent implements OnInit {

constructor() { }

ngOnInit(): void {
}

}

+ 1
- 0
src/app/tabs/courses/test/question-sheet/question-sheet.component.html Datei anzeigen

@@ -0,0 +1 @@
<p>question-sheet works!</p>

+ 0
- 0
src/app/tabs/courses/test/question-sheet/question-sheet.component.scss Datei anzeigen


+ 25
- 0
src/app/tabs/courses/test/question-sheet/question-sheet.component.spec.ts Datei anzeigen

@@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';

import { QuestionSheetComponent } from './question-sheet.component';

describe('QuestionSheetComponent', () => {
let component: QuestionSheetComponent;
let fixture: ComponentFixture<QuestionSheetComponent>;

beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ QuestionSheetComponent ]
})
.compileComponents();
}));

beforeEach(() => {
fixture = TestBed.createComponent(QuestionSheetComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('should create', () => {
expect(component).toBeTruthy();
});
});

+ 15
- 0
src/app/tabs/courses/test/question-sheet/question-sheet.component.ts Datei anzeigen

@@ -0,0 +1,15 @@
import { Component, OnInit } from '@angular/core';

@Component({
selector: 'app-question-sheet',
templateUrl: './question-sheet.component.html',
styleUrls: ['./question-sheet.component.scss']
})
export class QuestionSheetComponent implements OnInit {

constructor() { }

ngOnInit(): void {
}

}

+ 1
- 0
src/app/tabs/courses/test/question-sheet/question/question.component.html Datei anzeigen

@@ -0,0 +1 @@
<p>question works!</p>

+ 0
- 0
src/app/tabs/courses/test/question-sheet/question/question.component.scss Datei anzeigen


+ 25
- 0
src/app/tabs/courses/test/question-sheet/question/question.component.spec.ts Datei anzeigen

@@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';

import { QuestionComponent } from './question.component';

describe('QuestionComponent', () => {
let component: QuestionComponent;
let fixture: ComponentFixture<QuestionComponent>;

beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ QuestionComponent ]
})
.compileComponents();
}));

beforeEach(() => {
fixture = TestBed.createComponent(QuestionComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('should create', () => {
expect(component).toBeTruthy();
});
});

+ 15
- 0
src/app/tabs/courses/test/question-sheet/question/question.component.ts Datei anzeigen

@@ -0,0 +1,15 @@
import { Component, OnInit } from '@angular/core';

@Component({
selector: 'app-question',
templateUrl: './question.component.html',
styleUrls: ['./question.component.scss']
})
export class QuestionComponent implements OnInit {

constructor() { }

ngOnInit(): void {
}

}

+ 80
- 0
src/app/tabs/courses/test/start/start.component.html Datei anzeigen

@@ -0,0 +1,80 @@
<section class="page-container">
<header class="nav-header">
<button class="close-button" (click)="back()">
<svg-icon [applyClass]="true" class="icon" src="assets/custom-icons/close.svg"></svg-icon>
</button>
</header>

<div class="container">
<section class="subject-details">
<svg-icon [applyClass]="true" class="icon" src="assets/custom-icons/beaker.svg"></svg-icon>
<h2> CHEMISTRY </h2>
<h4> PREPERATORY EXAM </h4>
<p> Total Marks: 100 </p>

<div class="timer">
<p> Exam Start in: </p>
<div class="count"> 00:00:0{{ secondsCounter }} </div>
</div>
<button class="start-button" *ngIf="secondsCounter === 0"
(click)="startTest()">
START
</button>
</section>
</div>

<button class="rules-button" (click)="showRules = true">
<svg-icon [applyClass]="true" class="icon" src="assets/custom-icons/information.svg"></svg-icon>
Examination Rules &amp; Technologies
</button>


<section class="rules" [ngClass]="{'active' : showRules }">
<header>
<h5>
<svg-icon [applyClass]="true" class="icon" src="assets/custom-icons/information.svg"></svg-icon>
Information
</h5>

<button (click)="showRules = false">
<svg-icon [applyClass]="true" class="icon" src="assets/custom-icons/close.svg"></svg-icon>
</button>
</header>

<h2> Exam Rules &amp; Technologies </h2>

<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugiat voluptate eligendi provident nulla reiciendis. Corporis nihil at incidunt voluptas repellat aliquam beatae minima nam voluptatum, quaerat, ullam dolor sunt repudiandae.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, laboriosam sapiente, ab optio, unde a suscipit expedita consequuntur modi repellendus eligendi obcaecati explicabo repellat voluptatem nihil earum! Quisquam asperiores, nemo!
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Molestias architecto nostrum culpa aliquam vitae pariatur porro voluptatibus quisquam exercitationem sit voluptate tempore atque, natus quod rem voluptatem esse? Nostrum, voluptatibus.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente commodi labore saepe, temporibus cum deserunt voluptate minima dolorem doloremque dolores, libero vel voluptates expedita tempore quos incidunt recusandae dolor explicabo.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quia excepturi, corporis voluptatum illum autem dolore consequuntur cupiditate itaque facilis doloremque, ipsum voluptas perspiciatis quas eius commodi minima labore, omnis natus.
</p>

<h2> List of item to use </h2>

<ol>
<li>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nostrum mollitia harum nisi repellendus possimus fugiat dolores debitis voluptatum. Ullam doloremque nemo porro numquam! Adipisci incidunt vitae consequatur sapiente eius cum.
</li>
<li>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Vero voluptatem magnam quidem, autem, dolorem pariatur? Rem libero doloremque ipsa, earum. Tempore aut ex voluptatem accusamus maxime, laudantium, atque harum blanditiis.
</li>
<li>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa consequatur, eveniet. Expedita, reprehenderit! Exercitationem repudiandae sapiente laboriosam laudantium doloribus velit totam dolorem eos dolores optio, labore blanditiis eveniet, sint maiores!
</li>
</ol>

<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nostrum delectus, voluptatibus facilis magnam, cum veritatis quis reiciendis unde, porro nihil sed! Quibusdam maxime voluptatum consequuntur neque ipsa incidunt, eos, quidem.
</p>
</section>
</section>

+ 174
- 0
src/app/tabs/courses/test/start/start.component.scss Datei anzeigen

@@ -0,0 +1,174 @@
.page-container {
padding-bottom: 0;
position: relative;
}

.nav-header {
background-color: var(--black);
}


.rules-button {
background-color: var(--ash-black);
border: 0px;
width: 100%;
height: 40px;
color: var(--teal-green);
font-size: 14px;
display: flex;
align-items: center;
justify-content: center;

.icon {
width: 14px;
height: 14px;
fill: var(--teal-green);
margin-right: 5px;
}
}

.container {
height: calc(100vh - 40px - 60px);
width: 100%;
display: flex;
align-items: center;
justify-content: center;
}

.subject-details {
text-align: center;

.icon {
width: 60px;
height: 60px;
display: block;
margin: 0 auto;
}

h2 {
font-size: 26px;
color: white;
font-weight: 500;
margin: 10px auto;
}

h4 {
font-size: 18px;
color: var(--teal-green);
font-weight: 500;
margin: 10px auto;
}

p {
margin: 10px auto;
font-size: 16px;
color: var(--light-grey);
}

.timer {
margin: 60px auto 10px;

p {
margin: 0;
}

.count {
font-size: 30px;
font-weight: 500;
color: var(--green);
}
}

.start-button {
font-size: 18px;
height: 45px;
border-radius: 30px;
background-color: var(--teal-green);
border: 0px;
color: white;
width: 150px;
display: block;
margin: 20px auto 0;
}
}

.rules {
position: fixed;
left: 0;
bottom: 0;
z-index: 1;
max-height: calc(100vh - 100px);
width: 100%;
background-color: white;
border-top-left-radius: 30px;
border-top-right-radius: 30px;
padding: 0px 7% 30px;
overflow: auto;
transform: translateY(100vh);
transition: transform 0.5s;

&.active {
transform: translateY(0);
}

header {
display: flex;
width: 100%;
justify-content: space-between;
position: sticky;
position: -webkit-sticky;
z-index: 1;
top: 0;
background-color: white;
padding: 30px 0 10px;
}

h5 {
font-size: 16px;
font-weight: 400;
color: var(--dark-grey);
display: flex;
align-items: center;
justify-content: center;

.icon {
width: 15px;
height: 15px;
margin-right: 5px;
margin-top: -5px;
fill: var(--dark-grey);
}
}

button {
width: 30px;
height: 30px;
background-color: var(--light-grey);
border: 0px;
color: white;
border-radius: 50%;

.icon {
width: 12px;
height: 12px;
fill: white;
}
}

h2 {
font-size: 18px;
color: var(--ash-black);
margin-bottom: 10px;
}

p, li {
margin-bottom: 20px;
font-size: 16px;
color: var(--black);
line-height: 1.5;
}

ol {
margin-left: 30px;
}
}

+ 25
- 0
src/app/tabs/courses/test/start/start.component.spec.ts Datei anzeigen

@@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';

import { StartComponent } from './start.component';

describe('StartComponent', () => {
let component: StartComponent;
let fixture: ComponentFixture<StartComponent>;

beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ StartComponent ]
})
.compileComponents();
}));

beforeEach(() => {
fixture = TestBed.createComponent(StartComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('should create', () => {
expect(component).toBeTruthy();
});
});

+ 37
- 0
src/app/tabs/courses/test/start/start.component.ts Datei anzeigen

@@ -0,0 +1,37 @@
import { Component, OnInit, Output, EventEmitter} from '@angular/core';
import { Location } from '@angular/common';

@Component({
selector: 'app-start',
templateUrl: './start.component.html',
styleUrls: ['./start.component.scss']
})
export class StartComponent implements OnInit {
secondsCounter: number = 3;
timerInterval: any;
showRules: boolean = false;
@Output() startPageEvent = new EventEmitter();

constructor(
private location: Location
) { }

ngOnInit(): void {
this.timerInterval = setInterval(() => {
if (this.secondsCounter > 0) {
this.secondsCounter -= 1;
} else {
clearInterval(this.timerInterval);
}
}, 1000);
}

back() {
this.location.back();
}

startTest() {
this.startPageEvent.emit('start-test');
}

}

+ 3
- 0
src/app/tabs/courses/test/test.component.html Datei anzeigen

@@ -0,0 +1,3 @@
<section class="page-container full-bg" color="black">
<app-start *ngIf="testStatus === 'START'" (startPageEvent)="getStartPageEvents($event)"></app-start>
</section>

+ 3
- 0
src/app/tabs/courses/test/test.component.scss Datei anzeigen

@@ -0,0 +1,3 @@
.page-container {
padding-bottom: 0;
}

+ 25
- 0
src/app/tabs/courses/test/test.component.spec.ts Datei anzeigen

@@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';

import { TestComponent } from './test.component';

describe('TestComponent', () => {
let component: TestComponent;
let fixture: ComponentFixture<TestComponent>;

beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ TestComponent ]
})
.compileComponents();
}));

beforeEach(() => {
fixture = TestBed.createComponent(TestComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('should create', () => {
expect(component).toBeTruthy();
});
});

+ 22
- 0
src/app/tabs/courses/test/test.component.ts Datei anzeigen

@@ -0,0 +1,22 @@
import { Component, OnInit } from '@angular/core';

@Component({
selector: 'app-test',
templateUrl: './test.component.html',
styleUrls: ['./test.component.scss']
})
export class TestComponent implements OnInit {
testStatus: string = 'START';

constructor() { }

ngOnInit(): void {
}

getStartPageEvents(e: string) {
if (e === 'start-test') {
this.testStatus = 'PROGRESS';
}
}

}