diff --git a/apollo-frontend/src/app/dashboard-cards/dashboard-cards.component.html b/apollo-frontend/src/app/dashboard-cards/dashboard-cards.component.html index fe4f69a..31c27a5 100644 --- a/apollo-frontend/src/app/dashboard-cards/dashboard-cards.component.html +++ b/apollo-frontend/src/app/dashboard-cards/dashboard-cards.component.html @@ -4,5 +4,6 @@
+
Вие нямате карти
\ No newline at end of file diff --git a/apollo-frontend/src/app/dashboard-cards/dashboard-cards.component.ts b/apollo-frontend/src/app/dashboard-cards/dashboard-cards.component.ts index c297bd5..4bfd1ff 100644 --- a/apollo-frontend/src/app/dashboard-cards/dashboard-cards.component.ts +++ b/apollo-frontend/src/app/dashboard-cards/dashboard-cards.component.ts @@ -10,14 +10,13 @@ import { UserdataService } from '../userdata.service'; export class DashboardCardsComponent implements OnInit { constructor( - private db: DbService, + private userdata: UserdataService, ) { } ngOnInit(): void { } getCards(): Card[] { - return this.db.getAllCards().map(v => v.el); + return this.userdata.getOwnedCards(); } - } diff --git a/apollo-frontend/src/app/db.service.ts b/apollo-frontend/src/app/db.service.ts index 71164c5..14a3a64 100644 --- a/apollo-frontend/src/app/db.service.ts +++ b/apollo-frontend/src/app/db.service.ts @@ -1,4 +1,7 @@ import { Injectable } from '@angular/core'; +import { mock_card_types } from './mock.card_types'; +import { mock_minigames } from './mock.minigames'; +import { mock_questions } from './mock.questions'; export interface Minigame { name: string; @@ -35,411 +38,20 @@ export interface Saved { providedIn: 'root' }) export class DbService { - private mock_minigames: Saved[] = [ - { - id: '0', - el: { - name: 'Рециклиране', - url: '/minigames/conveyor-belt', - comingSoon: true, - } - }, - { - id: '0', - el: { - name: 'BioTrivia', - url: '/minigames/biotrivia', - } - } - ]; - private mock_card_types: Saved[] = [ - { - id: '0', - el: { - name: 'Пингвин', - types: ['normal'], - imageUrl: '/assets/images/cards/pingvin.jpg', - info: [ - { - content: 'Тъй като нямат естествен враг на сушата, пингвините не показват страх, а любопитство когато към тях се приближи човек.', - heading: 'Интересно' - } - ] - } - }, - { - id: '1', - el: { - name: 'Пингвин', - types: ['normal'], - imageUrl: '/assets/images/cards/pingvin2.jpg', - info: [ - { - content: 'Пингвините мътят яйцата си на смени. Когато мъжкият отиде да яде, той не може да намери пътя обратно към гнездото и започва да крещи шумно. Женските разпознават гласовете на партньорите си сред хиляди други и крещят в отговор, така че те да знаят къде да се върнат.', - heading: 'Интересно' - } - ] - } - }, - { - id: '2', - el: { - name: 'Делфин', - types: ['normal'], - imageUrl: '/assets/images/cards/delfin.jpg', - info: [ - { - content: 'Делфините общуват по между си с помощта на звуци, като всеки звук може да изразява различно настроение.', - heading: 'Интересно' - } - ] - } - }, - { - id: '3', - el: { - name: 'Делфин', - types: ['normal'], - imageUrl: '/assets/images/cards/delfin2.jpg', - info: [ - { - content: 'Делфините никога не заспиват напълно. Докато си почиват, едната половина на мозъка им продължава да бъде активна. Ето защо дори и по време на сън едното им око остава отворено.', - heading: 'Интересно' - } - ] - }, - }, - { - id: '4', - el: { - name: 'Син кит', - types: ['normal'], - imageUrl: '/assets/images/cards/sinkit.jpg', - info: [ - { - content: 'Освен най-едрото, синият кит е и най-шумното животно – звукът, който издава е от порядъка на 188 децибела и може да бъде чут на разстояние до 800 км. За сравнение, звукът на пътнически самолет е „едва” 120 децибела.', - heading: 'Интересно' - } - ] - } - }, - { - id: '5', - el: { - name: 'Син кит', - types: ['normal'], - imageUrl: '/assets/images/cards/sinkit2.jpg', - info: [ - { - content: 'Езикът на кита тежи около 4,7 тона', - heading: 'Интересно' - } - ] - } - }, - { - id: '6', - el: { - name: 'Пор', - types: ['endangered'], - imageUrl: '/assets/images/cards/por.jpg', - info: [ - { - heading: 'Морфология на "пор"', - content: 'Думата "пор" произлиза от латински и означава "крадец".', - }, - { - heading: 'Застрашен вид', - content: 'Загубата на местообитания и бракониерството, са причина днес те или техните следи да се наблюдават изключително рядко.', - }, - ], - }, - }, - { - id: '7', - el: { - name: 'Кафява мечка', - types: ['endangered'], - imageUrl: '/assets/images/cards/kafqva-mechka.jpg', - info: [ - { - heading: 'Сладки сънища', - content: 'Учените вярват, че мечките могат да сънуват.', - }, - { - heading: 'Fast as f', - content: 'Макар да изглеждат тромави,мечките могат да тичат с до 60 км/ч.', - }, - { - heading: 'Застрашен вид', - content: 'За съжаление хората им нанасят непоправими щети, като разкъсват с пътища и огради ареала им, унищожават горите и ги избиват.', - }, - ], - }, - }, - { - id: '8', - el: { - name: 'Балканска дива коза', - types: ['endangered'], - imageUrl: '/assets/images/cards/koza.jpg', - info: [ - { - heading: 'Властелина на пръстените', - content: 'Знаехте ли, че всяка година се прибавя по още един пръстен върху рогата на дивата коза, като така може да се определи възрастта на даденото животно.', - }, - { - heading: 'И ся почваме да бегами', - content: 'На света няма друго животно, което да притежава по-голяма ловкост и бързина на придвижване по хлъзгави и стръмни терени.', - }, - ], - }, - }, - { - id: '9', - el: { - name: 'Прилеп', - types: ['endangered'], - imageUrl: '/assets/images/cards/prilep.jpg', - info: [ - { - heading: 'Напаст пещерна', - content: 'най-голямата колония от прилепи в света наброява над 20 милиона броя от тези летящи създания.', - }, - { - heading: 'Ехо .... (ехо)', - content: 'Прилепите използват ехолокация, за да се заобиколят в тъмното.', - }, - { - heading: 'Защитен вид', - content: 'Според българското законодателство, прилепите са защитени видове.', - }, - ], - }, - }, - { - id: '10', - el: { - name: 'Лалугер', - types: ['endangered'], - imageUrl: '/assets/images/cards/laluger.jpg', - info: [ - { - heading: 'Втори братовчед на ленивеца', - content: 'Когато е студено, той заспива зимен сън и се събужда едва през пролетта.', - }, - { - heading: 'Мали ша са напикая', - content: 'Когато е изплашен, той застава на задните си лапи.', - }, - { - heading: 'Защитен вид', - content: 'Интензивно селско стопанство и използване на пестициди причиняват бързото изчезване на този вид.', - }, - ], - }, - }, - { - id: '11', - el: { - name: 'Етруската земеровка', - types: ['endangered'], - imageUrl: '/assets/images/cards/zemerovka.jpg', - info: [ - { - heading: 'Размер', - content: 'Един от най-дребните бозайници на планетата с размери едва 3,6 до 5,2 см и тегло от 1,25 до 2,34 грама!', - }, - { - heading: 'Лакомници', - content: 'Етруската земеровка трява да яде непрекъснато за да може да живее.', - }, - ], - }, - }, - { - id: '12', - el: { - name: 'Тюленът монах', - types: ['endangered'], - imageUrl: '/assets/images/cards/tuleni.jpg', - info: [ - { - heading: 'Техния живот', - content: 'Те се крият в подводни пещери, където си почиват и раждат своите малки.', - }, - ], - }, - }, - { - id: '13', - el: { - name: 'Видра', - types: ['endangered'], - imageUrl: '/assets/images/cards/vidra.jpg', - info: [ - { - heading: 'Мали колко сладко', - content: 'Морските видри се държат за ръце докато спят, за да не бъдат разделени от теченията докато се носят по водната повърхност.', - }, - { - heading: 'NO MERCY', - content: 'В момент на опасност видрите показват бебетата си на хищниците, за да предизвикат съчувствие и по този начин да избегнат атаката.', - }, - ], - }, - }, - { - id: '14', - el: { - name: 'Ловен сокол', - types: ['endangered'], - imageUrl: '/assets/images/cards/sokol.jpg', - info: [ - { - heading: 'Ловни навици', - content: 'Те не ловуват близо до гнездата си, а се опитват да летят доколкото е възможно.', - }, - { - heading: 'Застрашен вид', - content: 'Има опасност от изчезване. Основната причина, поради която населението на ловния сокол намалява, е човешката дейност.', - }, - ], - }, - }, - ]; - private mock_questions: Saved[] = [ - { - id: '0', - el: { - category: 'animals', - photoUrlsAbove: [ '/assets/images/questions/slon.jpg' ], - question: 'Защо бройката на слоновете в Африка намалява?', - answer: { - choises: [ - 'Убиван е от други животни', - 'Липса на храна', - 'Убивани са от бракониери', - 'Замърсяване на въздуха' - ], - correctChoise: 'Убивани са от бракониери', - } - } - }, - { - id: '1', - el: { - category: 'animals', - photoUrlsAbove: [ '/assets/images/questions/carski orel.jpg' ], - question: 'Каква е главната причина за намаляването на бройките Царски орли?', - answer: { - choises: [ - 'Бракониери', - 'Замърсяване', - 'Отсичане на горите', - 'Електрически стълбове' - ], - correctChoise: 'Електрически стълбове', - } - } - }, - { - id: '2', - el: { - category: 'animals', - photoUrlsAbove: [ '/assets/images/questions/carski orel.jpg' ], - question: 'Каква е главната причина за намаляването на бройките Царски орли?', - answer: { - choises: [ - 'Бракониери', - 'Замърсяване', - 'Отсичане на горите', - 'Електрически стълбове' - ], - correctChoise: 'Електрически стълбове', - } - } - }, - { - id: '3', - el: { - category: 'animals', - photoUrlsAbove: [ '/assets/images/questions/zlatna zhaba.png' ], - question: 'Каква е причината за изчезването на Златната жаба?', - answer: { - choises: [ - 'Глобално затопляне', - 'Замърсяване на реките', - 'Отсичане на горите', - 'Недостиг на храна' - ], - correctChoise: 'Глобално затопляне', - } - } - }, - { - id: '4', - el: { - category: 'animals', - photoUrlsAbove: [ '/assets/images/questions/shtigga.png' ], - question: 'Каква е причината за намаляването на бройките на Черният щъркел?', - answer: { - choises: [ - 'Замърсяването на блатата и езерата', - 'Недостиг на храна', - 'Глобално затопляне', - 'Естествени врагове', - ], - correctChoise: 'Замърсяването на блатата и езерата', - } - } - }, - { - id: '5', - el: { - category: 'animals', - photoUrlsAbove: [ '/assets/images/questions/tulen.jpg' ], - question: 'Вярно или грешно. От 1996г. тюлените в Черно море намаляват, като днес те са почти изчезнали у нас.', - answer: { - choises: [ - 'Вярно', - 'Грешно', - ], - correctChoise: 'Грешно', - } - } - }, - { - id: '6', - el: { - category: 'animals', - photoUrlsAbove: [ '/assets/images/questions/ris.jpg' ], - question: 'Каква е причината за намаляването на бройките рисове в България?', - answer: { - choises: [ - 'Глобално затопляне', - 'Незаконно избиване за козината им', - 'Разрушаването на местообитанията им', - 'Убиван е от естествени врагове', - ], - correctChoise: 'Незаконно избиване за козината им', - } - } - }, - ]; - private mock_question_categories: string[] = [ 'animals' ]; + private mock_minigames: Saved[] = mock_minigames; + private mock_card_types: Saved[] = mock_card_types; + private mock_questions: Saved[] = mock_questions; private getRandomEls(array: T[], n: number): T[] { - const result: T[] = new Array(n); - let len = array.length; - const taken = new Array(len); - if (n > len) - throw new RangeError("getRandom: more elements taken than available"); - while (n--) { - const x = Math.floor(Math.random() * len); - result[n] = array[x in taken ? taken[x] : x]; - taken[x] = --len in taken ? taken[len] : len; + const result: T[] = []; + + for (let i = 0; i < n; i++) { + const index = Math.floor(Math.random() * array.length); + result.push(array.splice(index, 1)[0]); } + + array.push(...result); + return result; } @@ -462,15 +74,21 @@ export class DbService { if (index < 0) return null; else return this.mock_card_types[index].el; } + getRandomCardId(endangeredBias: number): string { + const normal = this.getAllCards().filter(v => !v.el.types.includes('endangered')); + const endangered = this.getAllCards().filter(v => v.el.types.includes('endangered')); - getRandomQuestions(n: number, category: string): Question[] { + if (Math.random() < endangeredBias) { + return this.getRandomEls(endangered, 1)[0].id; + } + else { + return this.getRandomEls(normal, 1)[0].id; + } + } + + getRandomQuestions(n: number): Question[] { return this.getRandomEls(this.mock_questions - .filter(v => v.el.category === category) .map(v => v.el), n); } - getRandomCategory(): string { - return this.getRandomEls(this.mock_question_categories, 1)[0]; - } - constructor() { } } diff --git a/apollo-frontend/src/app/minigame-biotrivia/minigame-biotrivia.component.html b/apollo-frontend/src/app/minigame-biotrivia/minigame-biotrivia.component.html index 3ce4af5..9499567 100644 --- a/apollo-frontend/src/app/minigame-biotrivia/minigame-biotrivia.component.html +++ b/apollo-frontend/src/app/minigame-biotrivia/minigame-biotrivia.component.html @@ -12,31 +12,37 @@
-
{{currQuestion.question}}
+
+
{{currQuestion.question}}
-
Нужен е отговор, за да продължите
- +
Нужен е отговор, за да продължите
+ - {{choise}} - - + {{choise}} + + +
-
-

Завършихте викторината

- Верни отговори: - -
-
Грешни отговори:
-
-
- {{answer.index}}. {{answer.question.question}}
-
Вашият отговор: {{answer.answer}}
-
Правилен отговор: {{answer.question.answer.correctChoise}}
+
+

Завършихте викторината

+ Верни отговори: + +
+
Грешни отговори:
+
+
+ {{answer.index}}. {{answer.question.question}}
+
Вашият отговор: {{answer.answer}}
+
Правилен отговор: {{answer.question.answer.correctChoise}}
+
-
- - +
+

You've won this card:

+ +
+ +
\ No newline at end of file diff --git a/apollo-frontend/src/app/minigame-biotrivia/minigame-biotrivia.component.scss b/apollo-frontend/src/app/minigame-biotrivia/minigame-biotrivia.component.scss index 1ad0b10..d16ead2 100644 --- a/apollo-frontend/src/app/minigame-biotrivia/minigame-biotrivia.component.scss +++ b/apollo-frontend/src/app/minigame-biotrivia/minigame-biotrivia.component.scss @@ -41,15 +41,20 @@ margin: .25em; } } + .question { + padding: 0; + .container2 { + padding: 2em; + padding-top: 0; + } + } .progress { - position: absolute; - top: 0; - left: 0; + width: 100%; } .wrongAnswers { - max-height: 50vh; + max-height: 25vh; overflow-y: auto; } diff --git a/apollo-frontend/src/app/minigame-biotrivia/minigame-biotrivia.component.ts b/apollo-frontend/src/app/minigame-biotrivia/minigame-biotrivia.component.ts index 50f7346..5e34115 100644 --- a/apollo-frontend/src/app/minigame-biotrivia/minigame-biotrivia.component.ts +++ b/apollo-frontend/src/app/minigame-biotrivia/minigame-biotrivia.component.ts @@ -1,7 +1,7 @@ import { Component, ElementRef, NgZone, OnInit, ViewChild, ViewChildren } from '@angular/core'; import { IgxRadioComponent, IgxRadioGroupDirective } from 'igniteui-angular'; import { Observable, Subject } from 'rxjs'; -import { Answer, DbService, Question } from '../db.service'; +import { Answer, Card, DbService, Question, Saved } from '../db.service'; import { UserdataService } from '../userdata.service'; @@ -26,6 +26,8 @@ export class MinigameBiotriviaComponent implements OnInit { currQuestion: Question; currAnswers: string[]; + wonCard: Card = null; + answers: Array<{ question: Question, answer: string }> = []; selectedAnswer = ''; @@ -41,6 +43,36 @@ export class MinigameBiotriviaComponent implements OnInit { ngOnInit(): void { } + endGame(): void { + this.stage = 'ongoing-ended'; + + const successRate = (this.guessedQuestions) / this.questions.length; + + if (successRate > 0.5) { + const owned = this.userdata.getOwnedCardIds(); + + let newCard = null; + + do { + newCard = this.db.getRandomCardId(successRate - .5); + } while (owned.includes(newCard)); + + this.userdata.addCard(newCard); + this.wonCard = this.db.getCard(newCard); + } + + setTimeout(() => { + this.endingElementRef.first.nativeElement.style.opacity = 0; + this.animateElements( + this.ongoingElementRef.first.nativeElement, + this.endingElementRef.first.nativeElement + // tslint:disable-next-line: deprecation + ).subscribe(() => { + this.stage = 'ended'; + }); + }, 10); + } + submitAnswer(): void { if (!this.isAnswered()) { this.displayError = true; @@ -56,18 +88,7 @@ export class MinigameBiotriviaComponent implements OnInit { }); if (this.currQuestionN >= this.questions.length) { - this.stage = 'ongoing-ended'; - - setTimeout(() => { - this.endingElementRef.first.nativeElement.style.opacity = 0; - this.animateElements( - this.ongoingElementRef.first.nativeElement, - this.endingElementRef.first.nativeElement - // tslint:disable-next-line: deprecation - ).subscribe(() => { - this.stage = 'ended'; - }); - }, 10); + this.endGame(); return; } @@ -128,7 +149,7 @@ export class MinigameBiotriviaComponent implements OnInit { startingEl.style.position = 'absolute'; this.stage = 'starting-ongoing'; - this.questions = this.db.getRandomQuestions(5, this.db.getRandomCategory()); + this.questions = this.db.getRandomQuestions(1); this.loadNextQuestion(); setTimeout(() => { @@ -176,7 +197,7 @@ export class MinigameBiotriviaComponent implements OnInit { this.stage = 'ongoing-ended'; - this.questions = this.db.getRandomQuestions(5, this.db.getRandomCategory()); + this.questions = this.db.getRandomQuestions(1); this.displayError = false; @@ -186,6 +207,8 @@ export class MinigameBiotriviaComponent implements OnInit { this.selectedAnswer = ''; + this.wonCard = null; + this.loadNextQuestion(); setTimeout(() => { diff --git a/apollo-frontend/src/app/mock.card_types.ts b/apollo-frontend/src/app/mock.card_types.ts new file mode 100644 index 0000000..7d6aecb --- /dev/null +++ b/apollo-frontend/src/app/mock.card_types.ts @@ -0,0 +1,556 @@ +import { Card, Saved } from "./db.service"; + +export const mock_card_types: Saved[] = [ + { + id: '0', + el: { + name: 'Пингвин', + types: ['normal'], + imageUrl: '/assets/images/cards/pingvin.jpg', + info: [ + { + content: 'Тъй като нямат естествен враг на сушата, пингвините не показват страх, а любопитство когато към тях се приближи човек.', + heading: 'Интересно' + } + ] + } + }, + { + id: '1', + el: { + name: 'Пингвин', + types: ['normal'], + imageUrl: '/assets/images/cards/pingvin2.jpg', + info: [ + { + content: 'Пингвините мътят яйцата си на смени. Когато мъжкият отиде да яде, той не може да намери пътя обратно към гнездото и започва да крещи шумно. Женските разпознават гласовете на партньорите си сред хиляди други и крещят в отговор, така че те да знаят къде да се върнат.', + heading: 'Интересно' + } + ] + } + }, + { + id: '2', + el: { + name: 'Делфин', + types: ['normal'], + imageUrl: '/assets/images/cards/delfin.jpg', + info: [ + { + content: 'Делфините общуват по между си с помощта на звуци, като всеки звук може да изразява различно настроение.', + heading: 'Интересно' + } + ] + } + }, + { + id: '3', + el: { + name: 'Делфин', + types: ['normal'], + imageUrl: '/assets/images/cards/delfin2.jpg', + info: [ + { + content: 'Делфините никога не заспиват напълно. Докато си почиват, едната половина на мозъка им продължава да бъде активна. Ето защо дори и по време на сън едното им око остава отворено.', + heading: 'Интересно' + } + ] + }, + }, + { + id: '4', + el: { + name: 'Син кит', + types: ['normal'], + imageUrl: '/assets/images/cards/sinkit.jpg', + info: [ + { + content: 'Освен най-едрото, синият кит е и най-шумното животно – звукът, който издава е от порядъка на 188 децибела и може да бъде чут на разстояние до 800 км. За сравнение, звукът на пътнически самолет е „едва” 120 децибела.', + heading: 'Интересно' + } + ] + } + }, + { + id: '5', + el: { + name: 'Син кит', + types: ['normal'], + imageUrl: '/assets/images/cards/sinkit2.jpg', + info: [ + { + content: 'Езикът на кита тежи около 4,7 тона', + heading: 'Интересно' + } + ] + } + }, + { + id: '6', + el: { + name: 'Пор', + types: ['endangered'], + imageUrl: '/assets/images/cards/por.jpg', + info: [ + { + heading: 'Морфология на "пор"', + content: 'Думата "пор" произлиза от латински и означава "крадец".', + }, + { + heading: 'Застрашен вид', + content: 'Загубата на местообитания и бракониерството, са причина днес те или техните следи да се наблюдават изключително рядко.', + }, + ], + }, + }, + { + id: '7', + el: { + name: 'Кафява мечка', + types: ['endangered'], + imageUrl: '/assets/images/cards/kafqva-mechka.jpg', + info: [ + { + heading: 'Сладки сънища', + content: 'Учените вярват, че мечките могат да сънуват.', + }, + { + heading: 'Fast as f', + content: 'Макар да изглеждат тромави,мечките могат да тичат с до 60 км/ч.', + }, + { + heading: 'Застрашен вид', + content: 'За съжаление хората им нанасят непоправими щети, като разкъсват с пътища и огради ареала им, унищожават горите и ги избиват.', + }, + ], + }, + }, + { + id: '8', + el: { + name: 'Балканска дива коза', + types: ['endangered'], + imageUrl: '/assets/images/cards/koza.jpg', + info: [ + { + heading: 'Властелина на пръстените', + content: 'Знаехте ли, че всяка година се прибавя по още един пръстен върху рогата на дивата коза, като така може да се определи възрастта на даденото животно.', + }, + { + heading: 'И ся почваме да бегами', + content: 'На света няма друго животно, което да притежава по-голяма ловкост и бързина на придвижване по хлъзгави и стръмни терени.', + }, + ], + }, + }, + { + id: '9', + el: { + name: 'Прилеп', + types: ['endangered'], + imageUrl: '/assets/images/cards/prilep.jpg', + info: [ + { + heading: 'Напаст пещерна', + content: 'най-голямата колония от прилепи в света наброява над 20 милиона броя от тези летящи създания.', + }, + { + heading: 'Ехо .... (ехо)', + content: 'Прилепите използват ехолокация, за да се заобиколят в тъмното.', + }, + { + heading: 'Защитен вид', + content: 'Според българското законодателство, прилепите са защитени видове.', + }, + ], + }, + }, + { + id: '10', + el: { + name: 'Лалугер', + types: ['endangered'], + imageUrl: '/assets/images/cards/laluger.jpg', + info: [ + { + heading: 'Втори братовчед на ленивеца', + content: 'Когато е студено, той заспива зимен сън и се събужда едва през пролетта.', + }, + { + heading: 'Мали ша са напикая', + content: 'Когато е изплашен, той застава на задните си лапи.', + }, + { + heading: 'Защитен вид', + content: 'Интензивно селско стопанство и използване на пестициди причиняват бързото изчезване на този вид.', + }, + ], + }, + }, + { + id: '11', + el: { + name: 'Етруската земеровка', + types: ['endangered'], + imageUrl: '/assets/images/cards/zemerovka.jpg', + info: [ + { + heading: 'Размер', + content: 'Един от най-дребните бозайници на планетата с размери едва 3,6 до 5,2 см и тегло от 1,25 до 2,34 грама!', + }, + { + heading: 'Лакомници', + content: 'Етруската земеровка трява да яде непрекъснато за да може да живее.', + }, + ], + }, + }, + { + id: '12', + el: { + name: 'Тюленът монах', + types: ['endangered'], + imageUrl: '/assets/images/cards/tuleni.jpg', + info: [ + { + heading: 'Техния живот', + content: 'Те се крият в подводни пещери, където си почиват и раждат своите малки.', + }, + ], + }, + }, + { + id: '13', + el: { + name: 'Видра', + types: ['endangered'], + imageUrl: '/assets/images/cards/vidra.jpg', + info: [ + { + heading: 'Мали колко сладко', + content: 'Морските видри се държат за ръце докато спят, за да не бъдат разделени от теченията докато се носят по водната повърхност.', + }, + { + heading: 'NO MERCY', + content: 'В момент на опасност видрите показват бебетата си на хищниците, за да предизвикат съчувствие и по този начин да избегнат атаката.', + }, + ], + }, + }, + { + id: '14', + el: { + name: 'Ловен сокол', + types: ['endangered'], + imageUrl: '/assets/images/cards/sokol.jpg', + info: [ + { + heading: 'Ловни навици', + content: 'Те не ловуват близо до гнездата си, а се опитват да летят доколкото е възможно.', + }, + { + heading: 'Застрашен вид', + content: 'Има опасност от изчезване. Основната причина, поради която населението на ловния сокол намалява, е човешката дейност.', + }, + ], + }, + }, + { + id: "15", + el: { + name: "Иглика", + imageUrl: "/assets/images/cards/image_1.jpg", + types: [ + "normal" + ], + info: [ + { + heading: "Интересно", + content: "Доказано е, че в разгара на зимата депресиите силно подтискат хората, намаляват обичайната им жизненост и работоспособност, а при психически по-неустойчивите се развиват болестни симптоми. И без евтина реклама – доказано е също, че едно малко, но изумително красиво растение – разцъфнала иглика, прави понякога повече за настроението в мрачните студени дни, отколкото скъпоструващи медикаменти и психотерапии. Дори и без депресия, саксийката с иглика ще ви донесе истинска радост." + } + ] + } + }, + { + id: "16", + el: { + name: "Карамфил", + imageUrl: "/assets/images/cards/image_2.jpg", + types: [ + "normal" + ], + info: [ + { + heading: "Интересно", + content: "Карамфилът е известен като подправка с изтънчен вкус от незапомнени времена. Карамфилът е родом от Молукас, известен като Островите на подправките в Индия. Той е консумиран в Азия от преди повече от 2000 години. Благодарение на сладкия си и ароматен вкус, китайските царедворци са използвали карамфила, за да освежават дъха си, когато е трябвало да се обръщат към императора." + } + ] + } + }, + { + id: "17", + el: { + name: "Лале", + imageUrl: "/assets/images/cards/image_3.jpg", + types: [ + "normal" + ], + info: [ + { + heading: "Интересно", + content: "В общия случай се приема, че лалетата символизират любовта и пристигането на пролетта. Червените лалета са израз на истинска любов, докато с белите можете да поискате прошка, лилавите пък са знак за царственост. Интересното е, че многоцветният букет се смята за комплимент към очите на получателя." + } + ] + } + }, + { + id: "18", + el: { + name: "Нарцис", + imageUrl: "/assets/images/cards/image_4.jpg", + types: [ + "normal" + ], + info: [ + { + heading: "Интересно", + content: "На всички ни е известен терминът от психологията \"нарцисизъм\" - с него се определят самовлюбените и горди хора." + } + ] + } + }, + { + id: "19", + el: { + name: "Божур", + imageUrl: "/assets/images/cards/image_5.jpg", + types: [ + "normal" + ], + info: [ + { + heading: "Интересно", + content: "Ароматното растение е символ на успех и просперитет, привлича богатството и помага в професионалното израстване." + } + ] + } + }, + { + id: "20", + el: { + name: "Маслодайна роза", + imageUrl: "/assets/images/cards/image_6.jpg", + types: [ + "endangered" + ], + info: [ + { + heading: "Интересно", + content: "Розовото масло преди всичко е благоуханно удоволствие за сетивата. Наричано „течно злато“, заради уникалните му свойства и високата цена, розовото масло е природен еликсир с неизброими ползи. " + } + ] + } + }, + { + id: "21", + el: { + name: "Жасмин", + imageUrl: "/assets/images/cards/image_7.jpg", + types: [ + "normal" + ], + info: [ + { + heading: "Интересно", + content: "Жасминовите цветя са важни в хиндуистки церемонии и са споменати в религиозни текстове. И мъжете и жените в Индия отдавна използват жасминовото масло като афродизиак, като тоник във фризьорството и козметиката, както и не на последно място в парфюмерията." + } + ] + } + }, + { + id: "22", + el: { + name: "Еделвайс", + imageUrl: "/assets/images/cards/image_8.jpg", + types: [ + "endangered" + ], + info: [ + { + heading: "Интересно", + content: " Пчелите го обичат заради медоносните цветове, макар че го намират рядко. Поради безразборното бране има опасност еделвайсът да изчезне от нашите планини, затова късането му е забранено със закон и растението е включено в \"Червената книга на България\". Цветовете на еделвайса се използват в медицината за приготвяне на лекарства против болести на белите дробове, сърцето и др. B Стара Планина специално за опазването му е създаден резерват \"Козя стена\"." + } + ] + } + }, + { + id: "23", + el: { + name: "Бегония", + imageUrl: "/assets/images/cards/image_9.jpg", + types: [ + "normal" + ], + info: [ + { + heading: "Интересно", + content: "Според вярванията бегонията е голям помощник на здравето.Тя не само възстановява здравето на възрастните хора, а и предпазва това на по-младите.Бегонията е знак за удължаване на живота на човека, който я е получил като подарък." + } + ] + } + }, + { + id: "24", + el: { + name: "Орхидея", + imageUrl: "/assets/images/cards/image_10.jpg", + types: [ + "endangered" + ], + info: [ + { + heading: "Интересно", + content: "Феята на цветята. Символичен заряд носят и различните цветове: бели орхидеи за невинност, чистота и елегантност; розови - за женственост, благодат и радост; жълти – за приятелство и ново начало; пурпурни – за възхищение и в знак на уважение към близък човек." + } + ] + } + }, + { + id: '25', + el: { + name: 'Гепард', + imageUrl: '/assets/images/cards/gepard.jpg', + types: [ 'normal' ], + info: [ + { + heading: 'Тишината е злато', + content: 'Интересното е, че гепардът не може да реве. Всъщност те мъркат.' + }, + { + heading: 'Бърз като вятъра', + content: 'Нормалната скорост на преследване за гепард е 80кмч.' + }, + ], + }, + }, + { + id: '26', + el: { + name: 'Лъв', + imageUrl: '/assets/images/cards/luv.jpg', + types: [ 'normal' ], + info: [ + { + heading: 'Гръмогласни', + content: 'Ревът на възрастен лъв може да се чуе на разстояние от 8 километра.' + }, + ], + }, + }, + { + id: '27', + el: { + name: 'Тигър', + imageUrl: '/assets/images/cards/tigar.jpg', + types: [ 'endangered' ], + info: [ + { + heading: 'Интересно', + content: 'Няма два тигъра с еднакви ивици.' + }, + { + heading: 'Скок на височина', + content: 'Тигрите могат да прескачат разстояния на дължина над 6м и да скачат на 5м височина вертикално.' + }, + ], + }, + }, + { + id: '28', + el: { + name: 'Панда', + imageUrl: '/assets/images/cards/panda.jpg', + types: [ 'endangered' ], + info: [ + { + heading: 'Лакомници', + content: 'Пандите могат да надебелеят с 28 килограма на ден, хранейки се само с бамбукови клони.' + }, + { + heading: 'Застрашени', + content: 'За съжаление тези красиви мечки са застрашени и се смята, че само около 1000 остават в дивата природа.' + }, + ], + }, + }, + { + id: "29", + el: { + name: "Блатно кокиче", + types: ['endangered'], + imageUrl: "/assets/images/cards/image_11.jpg", + info: [ + { + heading: "Интересно", + content: "Най-лечебната билка, която е успяла да спаси не един и два детски живота, всъщност е билката блатно кокиче.Лечебните свойства на растението са доказани през годините. От него се прави и лекарството „Нивалин”.", + }, + ], + }, + }, + { + id: "30", + el: { + name: "Родопско лале", + types: ['endangered'], + imageUrl: "/assets/images/cards/image_12.jpg", + info: [ + { + heading: "Интересно", + content: "Цветовете на родопското лале се разтварят само когато слънцето залее със светлина и топлина местата, където то расте. Покрият ли тежки облаци небето и от тях рукне дъжд, цветовете бързо се затварят и по този начин се предпазват от прекомерно изстудяване и от наранявания от силен дъжд и вятър. Това явление се наблюдава и всяка вечер, щом падне нощният мрак. ", + }, + ], + }, + }, + { + id: "31", + el: { + name: "Алпийско сграбиче", + types: ['endangered'], + imageUrl: "/assets/images/cards/image_13.jpg", + info: [ + { + heading: "Интересно", + content: "В Червена книга на Народна Република България - том 1, видът е категоризиран като \"рядък\". В същият източник като заплахи за вида са посочени: \"деградацията на хабитата, в който той се среща, причинена от залесяване, туризъм и процесите на естествено разширяване на гората\".", + }, + ], + }, + }, + { + id: "32", + el: { + name: "Жълт планински крем", + types: ['endangered'], + imageUrl: "/assets/images/cards/image_14.jpg", + info: [ + { + heading: "Интересно", + content: "Планинският крем е защитен вид и е включен в Червената книга на България, Не опитвайте да го късате, тъй като стъблото е много жилаво и се изтръгва до самата луковица, което го обрича на загиване.", + }, + ], + }, + }, + { + id: "33", + el: { + name: "Дива циклама", + types: ['endangered'], + imageUrl: "/assets/images/cards/image_15.jpg", + info: [ + { + heading: "Интересно", + content: "Защитен вид и рядко се среща. Лекува бронхит, упорита кашлица и възпалено гърло.", + }, + ], + }, + }, +]; diff --git a/apollo-frontend/src/app/mock.questions.ts b/apollo-frontend/src/app/mock.questions.ts new file mode 100644 index 0000000..e4bafae --- /dev/null +++ b/apollo-frontend/src/app/mock.questions.ts @@ -0,0 +1,288 @@ +import { Question, Saved } from "./db.service"; + +export const mock_questions: Saved[] = [ + { + id: '0', + el: { + category: 'animals', + photoUrlsAbove: [ '/assets/images/questions/slon.jpg' ], + question: 'Защо бройката на слоновете в Африка намалява?', + answer: { + choises: [ + 'Убиван е от други животни', + 'Липса на храна', + 'Убивани са от бракониери', + 'Замърсяване на въздуха' + ], + correctChoise: 'Убивани са от бракониери', + } + } + }, + { + id: '1', + el: { + category: 'animals', + photoUrlsAbove: [ '/assets/images/questions/carski orel.jpg' ], + question: 'Каква е главната причина за намаляването на бройките Царски орли?', + answer: { + choises: [ + 'Бракониери', + 'Замърсяване', + 'Отсичане на горите', + 'Електрически стълбове' + ], + correctChoise: 'Електрически стълбове', + } + } + }, + { + id: '2', + el: { + category: 'animals', + photoUrlsAbove: [ '/assets/images/questions/carski orel.jpg' ], + question: 'Каква е главната причина за намаляването на бройките Царски орли?', + answer: { + choises: [ + 'Бракониери', + 'Замърсяване', + 'Отсичане на горите', + 'Електрически стълбове' + ], + correctChoise: 'Електрически стълбове', + } + } + }, + { + id: '3', + el: { + category: 'animals', + photoUrlsAbove: [ '/assets/images/questions/zlatna zhaba.png' ], + question: 'Каква е причината за изчезването на Златната жаба?', + answer: { + choises: [ + 'Глобално затопляне', + 'Замърсяване на реките', + 'Отсичане на горите', + 'Недостиг на храна' + ], + correctChoise: 'Глобално затопляне', + } + } + }, + { + id: '4', + el: { + category: 'animals', + photoUrlsAbove: [ '/assets/images/questions/shtigga.png' ], + question: 'Каква е причината за намаляването на бройките на Черният щъркел?', + answer: { + choises: [ + 'Замърсяването на блатата и езерата', + 'Недостиг на храна', + 'Глобално затопляне', + 'Естествени врагове', + ], + correctChoise: 'Замърсяването на блатата и езерата', + } + } + }, + { + id: '5', + el: { + category: 'animals', + photoUrlsAbove: [ '/assets/images/questions/tulen.jpg' ], + question: 'Вярно или грешно. От 1996г. тюлените в Черно море намаляват, като днес те са почти изчезнали у нас.', + answer: { + choises: [ + 'Вярно', + 'Грешно', + ], + correctChoise: 'Грешно', + } + } + }, + { + id: '6', + el: { + category: 'animals', + photoUrlsAbove: [ '/assets/images/questions/ris.jpg' ], + question: 'Каква е причината за намаляването на бройките рисове в България?', + answer: { + choises: [ + 'Глобално затопляне', + 'Незаконно избиване за козината им', + 'Разрушаването на местообитанията им', + 'Убиван е от естествени врагове', + ], + correctChoise: 'Незаконно избиване за козината им', + } + } + }, + { + id: '7', + el: { + category: 'animals', + photoUrlsAbove: [ '/assets/images/questions/nosorog.png' ], + question: 'Вярно или грешно. Африканският черен носорог е изчезнал заради Глобалното затопляне.', + answer: { + choises: [ + 'Вярно', + 'Грешно', + ], + correctChoise: 'Грешно', + } + } + }, + { + id: '8', + el: { + category: 'animals', + photoUrlsAbove: [ '/assets/images/questions/kozirog.png' ], + question: 'Вярно или невярно. През 2009г. е клониран Пиринейският козирог,който е изчезнал през 2000г.', + answer: { + choises: [ + 'Вярно', + 'Грешно', + ], + correctChoise: 'Вярно', + } + } + }, + { + id: '9', + el: { + category: 'animals', + photoUrlsAbove: [ '/assets/images/questions/kozirog.png' ], + question: 'Вярно или невярно. През 2009г. е клониран Пиринейският козирог,който е изчезнал през 2000г.', + answer: { + choises: [ + 'Вярно', + 'Грешно', + ], + correctChoise: 'Вярно', + } + } + }, + { + id: '10', + el: { + category: 'animals', + photoUrlsAbove: [ '/assets/images/questions/ara.jpg' ], + question: 'Посочете невярното твърдение. Спиксовия ара е изчезнал поради:', + answer: { + choises: [ + 'Унищожаването на местообитанията им', + 'Незаконният лов', + 'Незаконната търговия', + 'Глобално затопляне', + ], + correctChoise: 'Глобално затопляне', + } + } + }, + { + id: '11', + el: { + category: 'recycling', + photoUrlsAbove: [ '/assets/images/questions/teniski.png' ], + question: 'Колко литра вода отнема да се направи една тениска?', + answer: { + choises: [ + '26л.', + '260л.', + '1000л.', + '2600л.', + ], + correctChoise: '2600л.', + } + } + }, + { + id: '12', + el: { + category: 'recycling', + photoUrlsAbove: [ '/assets/images/questions/dunki.png' ], + question: 'Колко горе долу литра вода отнема да се направят един чифт дънки?', + answer: { + choises: [ + '1000л.', + '200л.', + '5000л.', + '7000л.', + ], + correctChoise: '7000л.', + } + } + }, + { + id: '13', + el: { + category: 'recycling', + photoUrlsAbove: [ '/assets/images/questions/bonishte.png' ], + question: 'Колко процента от нещата, заровени в сметищета,могат да бъдат рециклирани.', + answer: { + choises: [ + '20', + '30', + '50', + '80', + '90', + '0', + ], + correctChoise: '80', + } + } + }, + { + id: '14', + el: { + category: 'recycling', + photoUrlsAbove: [ '/assets/images/questions/kapeshto kranche.png' ], + question: 'Колко литра вода губи едно капещо кранче за ден?', + answer: { + choises: [ + '1', + '5', + '10', + '50', + '100', + '120', + ], + correctChoise: '120', + } + } + }, + { + id: '15', + el: { + category: 'recycling', + photoUrlsAbove: [ '/assets/images/questions/roklq.png' ], + question: 'За около колко години се разгражда една рокля от полиестер?', + answer: { + choises: [ + '50', + '100', + '200', + '150', + 'Над 200', + ], + correctChoise: '200', + } + } + }, + { + id: '16', + el: { + category: 'recycling', + photoUrlsAbove: [ '/assets/images/questions/roklq.png' ], + question: 'Вярно или грешно. Миенето на чинии ръчно хаби почти толкова вода, колкото със съдомиялна машина.', + answer: { + choises: [ + 'Вярно', + 'Грешно', + ], + correctChoise: 'Грешно', + } + } + }, +]; diff --git a/apollo-frontend/src/app/userdata.service.ts b/apollo-frontend/src/app/userdata.service.ts index d0a82c7..b5d67da 100644 --- a/apollo-frontend/src/app/userdata.service.ts +++ b/apollo-frontend/src/app/userdata.service.ts @@ -49,7 +49,7 @@ export class UserdataService { const cardsRaw = localStorage.cards; if (cardsRaw) return JSON.parse(cardsRaw); else { - localStorage.cards = []; + localStorage.cards = JSON.stringify([]); return []; } } @@ -69,7 +69,7 @@ export class UserdataService { if (saved.includes(id)) throw new Error("Can't add a card that already exists!"); saved = [...saved, id]; - localStorage.cards = saved; + localStorage.cards = JSON.stringify(saved); } constructor( diff --git a/apollo-frontend/src/assets/images/cards/gepard.jpg b/apollo-frontend/src/assets/images/cards/gepard.jpg new file mode 100644 index 0000000..f4eeeb1 Binary files /dev/null and b/apollo-frontend/src/assets/images/cards/gepard.jpg differ diff --git a/apollo-frontend/src/assets/images/cards/image_11.jpg b/apollo-frontend/src/assets/images/cards/image_11.jpg new file mode 100644 index 0000000..5897afd Binary files /dev/null and b/apollo-frontend/src/assets/images/cards/image_11.jpg differ diff --git a/apollo-frontend/src/assets/images/cards/image_12.jpg b/apollo-frontend/src/assets/images/cards/image_12.jpg new file mode 100644 index 0000000..eb64a6e Binary files /dev/null and b/apollo-frontend/src/assets/images/cards/image_12.jpg differ diff --git a/apollo-frontend/src/assets/images/cards/image_13.jpg b/apollo-frontend/src/assets/images/cards/image_13.jpg new file mode 100644 index 0000000..bd2e3d5 Binary files /dev/null and b/apollo-frontend/src/assets/images/cards/image_13.jpg differ diff --git a/apollo-frontend/src/assets/images/cards/image_14.jpg b/apollo-frontend/src/assets/images/cards/image_14.jpg new file mode 100644 index 0000000..90abb3a Binary files /dev/null and b/apollo-frontend/src/assets/images/cards/image_14.jpg differ diff --git a/apollo-frontend/src/assets/images/cards/image_15.jpg b/apollo-frontend/src/assets/images/cards/image_15.jpg new file mode 100644 index 0000000..42c6e8d Binary files /dev/null and b/apollo-frontend/src/assets/images/cards/image_15.jpg differ diff --git a/apollo-frontend/src/assets/images/cards/luv.jpg b/apollo-frontend/src/assets/images/cards/luv.jpg new file mode 100644 index 0000000..9a77d40 Binary files /dev/null and b/apollo-frontend/src/assets/images/cards/luv.jpg differ diff --git a/apollo-frontend/src/assets/images/cards/nosorog.png b/apollo-frontend/src/assets/images/cards/nosorog.png new file mode 100644 index 0000000..113437a Binary files /dev/null and b/apollo-frontend/src/assets/images/cards/nosorog.png differ diff --git a/apollo-frontend/src/assets/images/cards/panda.jpg b/apollo-frontend/src/assets/images/cards/panda.jpg new file mode 100644 index 0000000..2fe4744 Binary files /dev/null and b/apollo-frontend/src/assets/images/cards/panda.jpg differ diff --git a/apollo-frontend/src/assets/images/cards/tigar.jpg b/apollo-frontend/src/assets/images/cards/tigar.jpg new file mode 100644 index 0000000..b443dec Binary files /dev/null and b/apollo-frontend/src/assets/images/cards/tigar.jpg differ diff --git a/apollo-frontend/src/assets/images/questions/ara.jpg b/apollo-frontend/src/assets/images/questions/ara.jpg new file mode 100644 index 0000000..4d446bd Binary files /dev/null and b/apollo-frontend/src/assets/images/questions/ara.jpg differ diff --git a/apollo-frontend/src/assets/images/questions/bonishte.png b/apollo-frontend/src/assets/images/questions/bonishte.png new file mode 100644 index 0000000..56a236a Binary files /dev/null and b/apollo-frontend/src/assets/images/questions/bonishte.png differ diff --git a/apollo-frontend/src/assets/images/questions/dunki.png b/apollo-frontend/src/assets/images/questions/dunki.png new file mode 100644 index 0000000..dc03f3a Binary files /dev/null and b/apollo-frontend/src/assets/images/questions/dunki.png differ diff --git a/apollo-frontend/src/assets/images/questions/kapeshto kranche.png b/apollo-frontend/src/assets/images/questions/kapeshto kranche.png new file mode 100644 index 0000000..f5cc755 Binary files /dev/null and b/apollo-frontend/src/assets/images/questions/kapeshto kranche.png differ diff --git a/apollo-frontend/src/assets/images/questions/kozirog.jpg b/apollo-frontend/src/assets/images/questions/kozirog.jpg new file mode 100644 index 0000000..368e9b8 Binary files /dev/null and b/apollo-frontend/src/assets/images/questions/kozirog.jpg differ diff --git a/apollo-frontend/src/assets/images/questions/roklq.png b/apollo-frontend/src/assets/images/questions/roklq.png new file mode 100644 index 0000000..3bc07aa Binary files /dev/null and b/apollo-frontend/src/assets/images/questions/roklq.png differ diff --git a/apollo-frontend/src/assets/images/questions/shtigga b/apollo-frontend/src/assets/images/questions/shtigga.jpg similarity index 100% rename from apollo-frontend/src/assets/images/questions/shtigga rename to apollo-frontend/src/assets/images/questions/shtigga.jpg diff --git a/apollo-frontend/src/assets/images/questions/teniski.png b/apollo-frontend/src/assets/images/questions/teniski.png new file mode 100644 index 0000000..bcde450 Binary files /dev/null and b/apollo-frontend/src/assets/images/questions/teniski.png differ