| @@ -201,9 +201,25 @@ | |||
| } | |||
| }, | |||
| "@angular/animations": { | |||
| "version": "9.1.9", | |||
| "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-9.1.9.tgz", | |||
| "integrity": "sha512-qWVi0TxmU6HeXAgEsfpQvFFygh+a0kH2kGe6bWij4XvG6dWfV3xZjlaFwSIYGk+yK4yL0+9+PAXH+ENfxNw+Cw==" | |||
| "version": "9.1.11", | |||
| "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-9.1.11.tgz", | |||
| "integrity": "sha512-VKAExUnEJfo1PDQKagpx2pn+QMZCsPLRiADzTdl4U0VPylK3ALbn4ZNY9UbdwyE2plitz++LkH7sEGGfh+PNrQ==" | |||
| }, | |||
| "@angular/cdk": { | |||
| "version": "9.2.4", | |||
| "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-9.2.4.tgz", | |||
| "integrity": "sha512-iw2+qHMXHYVC6K/fttHeNHIieSKiTEodVutZoOEcBu9rmRTGbLB26V/CRsfIRmA1RBk+uFYWc6UQZnMC3RdnJQ==", | |||
| "requires": { | |||
| "parse5": "^5.0.0" | |||
| }, | |||
| "dependencies": { | |||
| "parse5": { | |||
| "version": "5.1.1", | |||
| "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", | |||
| "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", | |||
| "optional": true | |||
| } | |||
| } | |||
| }, | |||
| "@angular/cli": { | |||
| "version": "9.1.7", | |||
| @@ -11,7 +11,8 @@ | |||
| }, | |||
| "private": true, | |||
| "dependencies": { | |||
| "@angular/animations": "~9.1.1", | |||
| "@angular/animations": "^9.1.11", | |||
| "@angular/cdk": "^9.2.4", | |||
| "@angular/common": "~9.1.1", | |||
| "@angular/compiler": "~9.1.1", | |||
| "@angular/core": "~9.1.1", | |||
| @@ -7,6 +7,7 @@ import { ScrollEventModule } from 'ngx-scroll-event'; | |||
| import { NgxSiemaModule } from 'ngx-siema'; | |||
| import { AppRoutingModule } from './app-routing.module'; | |||
| import { FormsModule } from '@angular/forms'; | |||
| import { DragDropModule } from '@angular/cdk/drag-drop'; | |||
| // Import services | |||
| import { DemoService } from './services/demo.service'; | |||
| @@ -78,6 +79,7 @@ import { QuestionComponent } from './tabs/courses/test/question-sheet/question/q | |||
| HttpClientModule, | |||
| ScrollEventModule, | |||
| FormsModule, | |||
| DragDropModule, | |||
| NgxSiemaModule.forRoot(), | |||
| AngularSvgIconModule.forRoot(), | |||
| ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production }) | |||
| @@ -1,4 +1,4 @@ | |||
| import { Component, OnInit, Input, Output } from '@angular/core'; | |||
| import { Component, OnInit, Input } from '@angular/core'; | |||
| @Component({ | |||
| selector: 'app-class-card-list', | |||
| @@ -11,7 +11,7 @@ export class ClassCardListComponent implements OnInit { | |||
| constructor() { } | |||
| ngOnInit(): void { | |||
| } | |||
| } | |||
| @@ -1,4 +1,4 @@ | |||
| .page-container { | |||
| .page-container { | |||
| padding-bottom: 0; | |||
| } | |||
| @@ -1,6 +1,6 @@ | |||
| <section class="container" [ngClass]="{'active' : showDetails }"> | |||
| <section class="question-text" (click)="showDetails = !showDetails"> | |||
| <span class="index" [ngClass]="{'active' : selectedAnswer || textAnswer }"> {{ index }} </span> | |||
| <span class="index" [ngClass]="{'active' : isAnswered }"> {{ index }} </span> | |||
| <p> {{ question.heading }} </p> | |||
| <button [ngClass]="{'active' : showDetails }"> <svg-icon [applyClass]="true" class="icon" src="assets/custom-icons/down-arrow.svg"></svg-icon> </button> | |||
| </section> | |||
| @@ -8,8 +8,8 @@ | |||
| <div class="answer-holder" *ngIf="showDetails"> | |||
| <section class="text-input" *ngIf="question.type === 'TEXT'"> | |||
| <label> Answer : </label> | |||
| <textarea [(ngModel)]="textAnswer"></textarea> | |||
| <button class="submit-button" (click)="showDetails = false" [ngClass]="{'inactive' : !textAnswer }"> SUBMIT </button> | |||
| <textarea [(ngModel)]="textAnswer" (input)="isAnswered = true"></textarea> | |||
| <button class="submit-button" (click)="showDetails = false" [ngClass]="{'inactive' : !isAnswered }"> SUBMIT </button> | |||
| </section> | |||
| <section class="single-select" *ngIf="question.type === 'SINGLE_SELECT'"> | |||
| @@ -18,7 +18,7 @@ | |||
| <ol class="option-list"> | |||
| <li *ngFor="let option of question.options; let i = index" | |||
| [ngClass]="{'active' : selectedAnswer === i }" | |||
| (click)="selectedAnswer = i"> | |||
| (click)="selectedAnswer = i; isAnswered = true"> | |||
| <label> {{ i + 1 }}. {{ option.name }} </label> | |||
| <div class="icon-holder"> | |||
| <svg-icon [applyClass]="true" class="icon correct-icon" src="assets/custom-icons/checkmark.svg"></svg-icon> | |||
| @@ -26,7 +26,29 @@ | |||
| </li> | |||
| </ol> | |||
| <button class="submit-button" (click)="showDetails = false" [ngClass]="{'inactive' : selectedAnswer === null }"> SUBMIT </button> | |||
| <button class="submit-button" (click)="showDetails = false" [ngClass]="{'inactive' : !isAnswered }"> SUBMIT </button> | |||
| </section> | |||
| <section class="match-the-following" *ngIf="question.type === 'MATCH_THE_FOLLOWING'"> | |||
| <label> Math the Following </label> | |||
| <div class="match-container"> | |||
| <ul class="match-list left"> | |||
| <li *ngFor="let option of question.leftGroup; let i = index" | |||
| [style.backgroundColor]="option.color"> | |||
| {{ option.name }} | |||
| </li> | |||
| </ul> | |||
| <ul class="match-list right" cdkDropList (cdkDropListDropped)="drop($event)"> | |||
| <li *ngFor="let option of tempRightGroup; let i = index" cdkDrag | |||
| [style.backgroundColor]="option.isMoved? question.leftGroup[i].color : '#cecece80'"> | |||
| {{ option.name }} | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| <button class="submit-button" (click)="showDetails = false" [ngClass]="{'inactive' : !isAnswered }"> SUBMIT </button> | |||
| </section> | |||
| </div> | |||
| @@ -2,6 +2,7 @@ | |||
| background-color: var(--ash-black); | |||
| padding: 15px; | |||
| border-bottom: 1px solid var(--dark-grey); | |||
| transition: background-color 0.3s; | |||
| &.active { | |||
| background-color: white; | |||
| @@ -184,3 +185,34 @@ | |||
| } | |||
| } | |||
| } | |||
| .match-the-following { | |||
| .match-container { | |||
| display: flex; | |||
| width: 100%; | |||
| justify-content: space-between; | |||
| align-items: flex-start; | |||
| } | |||
| .match-list { | |||
| width: 48%; | |||
| list-style: none; | |||
| &.right li { | |||
| background-color: rgba(#cecece, 0.5); | |||
| transition: background-color 0.5s; | |||
| } | |||
| } | |||
| li { | |||
| text-align: center; | |||
| width: 100%; | |||
| margin: 10px auto; | |||
| border-radius: 10px; | |||
| color: var(--dark-grey); | |||
| font-weight: 500; | |||
| font-size: 14px; | |||
| padding: 10px; | |||
| overflow: visible; | |||
| } | |||
| } | |||
| @@ -1,4 +1,5 @@ | |||
| import { Component, OnInit, Input } from '@angular/core'; | |||
| import { CdkDragDrop } from '@angular/cdk/drag-drop'; | |||
| @Component({ | |||
| selector: 'app-question', | |||
| @@ -11,10 +12,39 @@ export class QuestionComponent implements OnInit { | |||
| showDetails: boolean = false; | |||
| selectedAnswer: number = null; | |||
| textAnswer: string = ''; | |||
| isAnswered: boolean = false; | |||
| tempRightGroup = []; | |||
| constructor() { } | |||
| ngOnInit(): void { | |||
| if (this.question.rightGroup) { | |||
| this.tempRightGroup = this.question.rightGroup; | |||
| } | |||
| } | |||
| moveItemInArray(array: Array<any>, previousIndex: number, currentIndex: number) { | |||
| let temp1 = array[previousIndex], | |||
| temp2 = array[currentIndex]; | |||
| array[currentIndex] = temp1; | |||
| array[previousIndex] = temp2; | |||
| array[currentIndex].isMoved = true; | |||
| if (array.filter((item) => item.isMoved).length === array.length - 1) { | |||
| let index = array.findIndex((item) => !item.isMoved); | |||
| array[index].isMoved = true; | |||
| } | |||
| this.isAnswered = true; | |||
| return array; | |||
| } | |||
| drop(event: CdkDragDrop<number[]>) { | |||
| this.tempRightGroup = this.moveItemInArray(this.tempRightGroup, event.previousIndex, event.currentIndex); | |||
| } | |||
| } | |||
| @@ -6,7 +6,7 @@ import { Component, OnInit } from '@angular/core'; | |||
| styleUrls: ['./test.component.scss'] | |||
| }) | |||
| export class TestComponent implements OnInit { | |||
| testStatus: string = 'START'; | |||
| testStatus: string = 'PROGRESS'; | |||
| testData = { | |||
| name: 'CHEMISTRY', | |||
| @@ -52,12 +52,15 @@ export class TestComponent implements OnInit { | |||
| leftGroup: [{ | |||
| id: 1, | |||
| name: 'Dmitri Mendeleev', | |||
| color: '#fcd3c0' | |||
| }, { | |||
| id: 2, | |||
| name: 'Madam curie' | |||
| name: 'Madam curie', | |||
| color: '#f9f7c0' | |||
| }, { | |||
| id: 3, | |||
| name: 'Carl Alexander Neuberg' | |||
| name: 'Carl Alexander Neuberg', | |||
| color: '#c0f9e7' | |||
| }], | |||
| rightGroup: [{ | |||
| id: 1, | |||
| @@ -108,12 +111,15 @@ export class TestComponent implements OnInit { | |||
| leftGroup: [{ | |||
| id: 1, | |||
| name: 'Dmitri Mendeleev', | |||
| color: '#fcd3c0' | |||
| }, { | |||
| id: 2, | |||
| name: 'Madam curie' | |||
| name: 'Madam curie', | |||
| color: '#f9f7c0' | |||
| }, { | |||
| id: 3, | |||
| name: 'Carl Alexander Neuberg' | |||
| name: 'Carl Alexander Neuberg', | |||
| color: '#c0f9e7' | |||
| }], | |||
| rightGroup: [{ | |||
| id: 1, | |||
| @@ -10,7 +10,7 @@ | |||
| "module": "esnext", | |||
| "moduleResolution": "node", | |||
| "importHelpers": true, | |||
| "target": "es2015", | |||
| "target": "es5", | |||
| "lib": [ | |||
| "es2018", | |||
| "dom" | |||