Przeglądaj źródła

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

master
kj1352 5 lat temu
rodzic
commit
1a9a066123
23 zmienionych plików z 508 dodań i 4 usunięć
  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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

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

+ 0
- 0
src/app/tabs/courses/test/end/end.component.scss Wyświetl plik


+ 25
- 0
src/app/tabs/courses/test/end/end.component.spec.ts Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

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

+ 0
- 0
src/app/tabs/courses/test/question-sheet/question-sheet.component.scss Wyświetl plik


+ 25
- 0
src/app/tabs/courses/test/question-sheet/question-sheet.component.spec.ts Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

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

+ 0
- 0
src/app/tabs/courses/test/question-sheet/question/question.component.scss Wyświetl plik


+ 25
- 0
src/app/tabs/courses/test/question-sheet/question/question.component.spec.ts Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

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

+ 25
- 0
src/app/tabs/courses/test/test.component.spec.ts Wyświetl plik

@@ -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 Wyświetl plik

@@ -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';
}
}

}