From c19c6f075916a6d1cc902be0fd323a5b636fc0f5 Mon Sep 17 00:00:00 2001 From: Merav-M Date: Thu, 15 May 2025 15:59:29 +0300 Subject: [PATCH 1/7] New databse of words fo flash cards and login with google --- MegaPathLogo.jpg | Bin 0 -> 50659 bytes games.html | 30 +++----- index.html | 57 +++++++++----- login.html | 60 +++++++++++++++ play-game.html | 63 +++++++++------- style.css | 13 +++- updated_words_data.js | 172 ++++++++++++++++++++++++++++++++++++++---- 7 files changed, 311 insertions(+), 84 deletions(-) create mode 100644 MegaPathLogo.jpg create mode 100644 login.html diff --git a/MegaPathLogo.jpg b/MegaPathLogo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d743a71f818c650d44fd491467ac879885cacd8 GIT binary patch literal 50659 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 - - - Select a Game - + + + Select Game +
-

Select a Game:

-
    -
  • -
  • -
+

Select a Game

+ +
- diff --git a/index.html b/index.html index 8354ca4..2a89e41 100644 --- a/index.html +++ b/index.html @@ -1,27 +1,48 @@ - - - Registration - + + + Language & Grade +
-

Registration

-
- - - - - - - -
-
+

Select Language and Grade

+
+

Language

+ + + +
+
+

Grade

+ + + +
- - - + diff --git a/login.html b/login.html new file mode 100644 index 0000000..5b0c7e4 --- /dev/null +++ b/login.html @@ -0,0 +1,60 @@ + + + + + + Login - Duoli Flashcards + + + + + +
+

Bem-vindo ao Duoli Flashcards

+
+
+ + + +

ou

+ +
+ + + + diff --git a/play-game.html b/play-game.html index 9f905c5..1322d0d 100644 --- a/play-game.html +++ b/play-game.html @@ -1,49 +1,54 @@ - - + + Play Game - +

- + diff --git a/style.css b/style.css index 8b13789..6a550f5 100644 --- a/style.css +++ b/style.css @@ -1 +1,12 @@ - +.container { + max-width: 600px; + margin: auto; + text-align: center; + padding: 2em; +} +button { + padding: 10px 20px; + margin: 10px; + font-size: 16px; + cursor: pointer; +} \ No newline at end of file diff --git a/updated_words_data.js b/updated_words_data.js index 376f8df..c0f1318 100644 --- a/updated_words_data.js +++ b/updated_words_data.js @@ -1,20 +1,160 @@ const gradesData = { - "10": [ // Grade 10 - { word: "אטום", translation: { hebrew: "אטום", english: "atom", russian: "атом", portuguese: "átomo" } }, - { word: "מולקולה", translation: { hebrew: "מולקולה", english: "molecule", russian: "молекула", portuguese: "molécula" } }, - { word: "אנרגיה", translation: { hebrew: "אנרגיה", english: "energy", russian: "энергия", portuguese: "energia" } }, - { word: "תא", translation: { hebrew: "תא", english: "cell", russian: "клетка", portuguese: "célula" } }, + "10": [ + { word: "אטום", translation: { portuguese: "átomo", english: "atom", russian: "атом" } }, + { word: "מולקולה", translation: { portuguese: "molécula", english: "molecule", russian: "молекула" } }, + { word: "תרכובת", translation: { portuguese: "composto", english: "compound", russian: "соединение" } }, + { word: "חלבון", translation: { portuguese: "proteína", english: "protein", russian: "белок" } }, + { word: "פחמימה", translation: { portuguese: "carboidrato", english: "carbohydrate", russian: "углевод" } }, + { word: "שומן", translation: { portuguese: "gordura", english: "fat", russian: "жир" } }, + { word: "נוקלאוטיד", translation: { portuguese: "nucleotídeo", english: "nucleotide", russian: "нуклеотид" } }, + { word: "דנ״א", translation: { portuguese: "DNA", english: "DNA", russian: "ДНК" } }, + { word: "רנ״א", translation: { portuguese: "RNA", english: "RNA", russian: "РНК" } }, + { word: "קרום התא", translation: { portuguese: "membrana celular", english: "cell membrane", russian: "клеточная мембрана" } }, + { word: "דיפוזיה", translation: { portuguese: "difusão", english: "diffusion", russian: "диффузия" } }, + { word: "אוסמוזה", translation: { portuguese: "osmose", english: "osmosis", russian: "осмос" } }, + { word: "הומאוסטזיס", translation: { portuguese: "homeostase", english: "homeostasis", russian: "гомеостаз" } }, + { word: "תא", translation: { portuguese: "célula", english: "cell", russian: "клетка" } }, + { word: "תא אאוקריוטי", translation: { portuguese: "célula eucariótica", english: "eukaryotic cell", russian: "эукариотическая клетка" } }, + { word: "תא פרוקריוטי", translation: { portuguese: "célula procariótica", english: "prokaryotic cell", russian: "прокариотическая клетка" } }, + { word: "מיטוכונדריה", translation: { portuguese: "mitocôndria", english: "mitochondria", russian: "митохондрия" } }, + { word: "ריבוזום", translation: { portuguese: "ribossomo", english: "ribosome", russian: "рибосома" } }, + { word: "כלורופלסט", translation: { portuguese: "cloroplasto", english: "chloroplast", russian: "хлоропласт" } }, + { word: "דופן תא", translation: { portuguese: "parede celular", english: "cell wall", russian: "клеточная стенка" } }, + { word: "גרעין התא", translation: { portuguese: "núcleo celular", english: "cell nucleus", russian: "клеточное ядро" } }, + { word: "מערכת הובלה", translation: { portuguese: "sistema de transporte", english: "transport system", russian: "транспортная система" } }, + { word: "אנזים", translation: { portuguese: "enzima", english: "enzyme", russian: "фермент" } }, + { word: "קטליזה", translation: { portuguese: "catálise", english: "catalysis", russian: "катализ" } }, + { word: "פוטוסינתזה", translation: { portuguese: "fotossíntese", english: "photosynthesis", russian: "фотосинтез" } }, + { word: "נשימה תאית", translation: { portuguese: "respiração celular", english: "cellular respiration", russian: "клеточное дыхание" } }, + { word: "אברונים", translation: { portuguese: "organelas", english: "organelles", russian: "органеллы" } }, + { word: "חלוקת תאים", translation: { portuguese: "divisão celular", english: "cell division", russian: "деление клеток" } }, + { word: "מיטוזה", translation: { portuguese: "mitose", english: "mitosis", russian: "митоз" } }, + { word: "מיוזה", translation: { portuguese: "meiose", english: "meiosis", russian: "мейоз" } }, + { word: "כרומוזום", translation: { portuguese: "cromossomo", english: "chromosome", russian: "хромосома" } }, + { word: "כרומטידה", translation: { portuguese: "cromátide", english: "chromatid", russian: "хроматида" } }, + { word: "גן", translation: { portuguese: "gene", english: "gene", russian: "ген" } }, + { word: "אלל", translation: { portuguese: "alelo", english: "allele", russian: "аллель" } }, + { word: "תכונה תורשתית", translation: { portuguese: "característica hereditária", english: "hereditary trait", russian: "наследуемый признак" } }, + { word: "רבייה", translation: { portuguese: "reprodução", english: "reproduction", russian: "размножение" } }, + { word: "אורגניזם", translation: { portuguese: "organismo", english: "organism", russian: "организм" } }, + { word: "רב-תאיים", translation: { portuguese: "multicelulares", english: "multicellular", russian: "многоклеточные" } }, + { word: "חד-תאיים", translation: { portuguese: "unicelulares", english: "unicellular", russian: "одноклеточные" } }, + { word: "התאמה לסביבה", translation: { portuguese: "adaptação ao ambiente", english: "adaptation to the environment", russian: "адаптация к среде" } }, ], - "11": [ // Grade 11 - { word: "חומר", translation: { hebrew: "חומר", english: "matter", russian: "вещество", portuguese: "matéria" } }, - { word: "ממברנה", translation: { hebrew: "ממברנה", english: "membrane", russian: "мембрана", portuguese: "membrana" } }, - { word: "חלבון", translation: { hebrew: "חלבון", english: "protein", russian: "белок", portuguese: "proteína" } }, - { word: "פחמימה", translation: { hebrew: "פחמימה", english: "carbohydrate", russian: "углевод", portuguese: "carboidrato" } }, + "11": [ + { word: "דנ״א דו-גדילי", translation: { portuguese: "DNA de fita dupla", english: "double-stranded DNA", russian: "двуцепочечная ДНК" } }, + { word: "קודון", translation: { portuguese: "códon", english: "codon", russian: "кодон" } }, + { word: "אנטיקודון", translation: { portuguese: "anticódon", english: "anticodon", russian: "антикодон" } }, + { word: "שחבור", translation: { portuguese: "splicing", english: "splicing", russian: "сплайсинг" } }, + { word: "אינטרון", translation: { portuguese: "íntron", english: "intron", russian: "интрон" } }, + { word: "אקסון", translation: { portuguese: "éxon", english: "exon", russian: "экзон" } }, + { word: "פולימראז", translation: { portuguese: "polimerase", english: "polymerase", russian: "полимераза" } }, + { word: "RNA פולימראז", translation: { portuguese: "RNA polimerase", english: "RNA polymerase", russian: "РНК-полимераза" } }, + { word: "דנ״א פולימראז", translation: { portuguese: "DNA polimerase", english: "DNA polymerase", russian: "ДНК-полимераза" } }, + { word: "פרימאז", translation: { portuguese: "primase", english: "primase", russian: "примаза" } }, + { word: "הליקאז", translation: { portuguese: "helicase", english: "helicase", russian: "хеликаза" } }, + { word: "ליגאז", translation: { portuguese: "ligase", english: "ligase", russian: "лигаза" } }, + { word: "שכפול חצי שמרני", translation: { portuguese: "replicação semiconservativa", english: "semiconservative replication", russian: "полуконсервативная репликация" } }, + { word: "טלומר", translation: { portuguese: "telômero", english: "telomere", russian: "теломер" } }, + { word: "טלומראז", translation: { portuguese: "telomerase", english: "telomerase", russian: "теломераза" } }, + { word: "מוטציות שקטות", translation: { portuguese: "mutações silenciosas", english: "silent mutations", russian: "молчащие мутации" } }, + { word: "מוטציות שינוי מסגרת קריאה", translation: { portuguese: "mutações de mudança de quadro", english: "frameshift mutations", russian: "мутации сдвига рамки считывания" } }, + { word: "מוטציות חסר", translation: { portuguese: "deleção", english: "deletion", russian: "делеция" } }, + { word: "מוטציות תוספת", translation: { portuguese: "inserção", english: "insertion", russian: "инсерция" } }, + { word: "מוטציות החלפה", translation: { portuguese: "substituição", english: "substitution", russian: "замена" } }, + { word: "קריוטיפ", translation: { portuguese: "cariograma", english: "karyotype", russian: "кариотип" } }, + { word: "טרנספוזון", translation: { portuguese: "transposão", english: "transposon", russian: "транспозон" } }, + { word: "השפעה פליאוטרופית", translation: { portuguese: "efeito pleiotrópico", english: "pleiotropic effect", russian: "плейотропный эффект" } }, + { word: "חדירות גן", translation: { portuguese: "penetrância", english: "penetrance", russian: "проникаемость" } }, + { word: "שונות גנטית", translation: { portuguese: "variação genética", english: "genetic variation", russian: "генетическая вариация" } }, + { word: "שיבוט", translation: { portuguese: "clonagem", english: "cloning", russian: "клонирование" } }, + { word: "שחזור", translation: { portuguese: "engenharia de DNA", english: "DNA engineering", russian: "инженерия ДНК" } }, + { word: "ריצוף דנ״א", translation: { portuguese: "sequenciamento de DNA", english: "DNA sequencing", russian: "секвенирование ДНК" } }, + { word: "אלקטרופורזה בג'ל", translation: { portuguese: "eletroforese em gel", english: "gel electrophoresis", russian: "гелевая электрофорез" } }, + { word: "אנזימי הגבלה", translation: { portuguese: "enzimas de restrição", english: "restriction enzymes", russian: "рестриктазы" } }, + { word: "פלסמיד", translation: { portuguese: "plasmídeo", english: "plasmid", russian: "плазмида" } }, + { word: "טרנספורמציה", translation: { portuguese: "transformação", english: "transformation", russian: "трансформация" } }, + { word: "פרומוטר", translation: { portuguese: "promotor", english: "promoter", russian: "промотор" } }, + { word: "רגולטור", translation: { portuguese: "regulador", english: "regulator", russian: "регулятор" } }, + { word: "אופרון", translation: { portuguese: "operon", english: "operon", russian: "оперон" } }, + { word: "אופרון הלקטוז", translation: { portuguese: "operon da lactose", english: "lactose operon", russian: "оперон лактозы" } }, + { word: "דגם זיקת התאמה", translation: { portuguese: "modelo chave-fechadura", english: "lock-and-key model", russian: "модель замок-ключ" } }, + { word: "בקרה גנטית", translation: { portuguese: "regulação genética", english: "genetic regulation", russian: "генетическая регуляция" } }, + { word: "בקרת שעתוק", translation: { portuguese: "controle da transcrição", english: "transcriptional control", russian: "контроль транскрипции" } }, + { word: "בקרת תרגום", translation: { portuguese: "controle da tradução", english: "translational control", russian: "контроль трансляции" } }, + { word: "בקרת ביטוי גנים", translation: { portuguese: "controle da expressão gênica", english: "gene expression control", russian: "регуляция экспрессии генов" } }, + { word: "גורמי שעתוק", translation: { portuguese: "fatores de transcrição", english: "transcription factors", russian: "факторы транскрипции" } }, + { word: "אפיגנטיקה", translation: { portuguese: "epigenética", english: "epigenetics", russian: "эпигенетика" } }, + { word: "מתילציה של דנ״א", translation: { portuguese: "metilação do DNA", english: "DNA methylation", russian: "метилирование ДНК" } }, + { word: "אצטילציה של היסטונים", translation: { portuguese: "acetilação de histonas", english: "histone acetylation", russian: "ацетилирование гистонов" } }, + { word: "דה-מתילציה", translation: { portuguese: "desmetilação", english: "demethylation", russian: "деметилирование" } }, + { word: "גנום", translation: { portuguese: "genoma", english: "genome", russian: "геном" } }, + { word: "פרויקט גנום האנושי", translation: { portuguese: "Projeto Genoma Humano", english: "Human Genome Project", russian: "Проект «Геном человека»" } }, + { word: "רצפים חוזרניים", translation: { portuguese: "sequências repetitivas", english: "repetitive sequences", russian: "повторяющиеся последовательности" } }, + { word: "רצפים רגולטוריים", translation: { portuguese: "sequências reguladoras", english: "regulatory sequences", russian: "регуляторные последовательности" } }, + { word: "הנדסה גנטית", translation: { portuguese: "engenharia genética", english: "genetic engineering", russian: "генетическая инженерия" } }, + { word: "אורגניזם מהונדס גנטית", translation: { portuguese: "OGM", english: "genetically modified organism", russian: "генетически модифицированный организм" } }, + { word: "שיבוט מולקולרי", translation: { portuguese: "clonagem molecular", english: "molecular cloning", russian: "молекулярное клонирование" } }, + { word: "ביוטכנולוגיה חקלאית", translation: { portuguese: "biotecnologia agrícola", english: "agricultural biotechnology", russian: "агробиотехнология" } }, + { word: "ביוטכנולוגיה רפואית", translation: { portuguese: "biotecnologia médica", english: "medical biotechnology", russian: "медицинская биотехнология" } }, + { word: "תרפיה גנטית", translation: { portuguese: "terapia genética", english: "gene therapy", russian: "генная терапия" } }, ], - "12": [ // Grade 12 - { word: "גֵן", translation: { hebrew: "גֵן", english: "gene", russian: "ген", portuguese: "gene" } }, - { word: "דנ״א", translation: { hebrew: "דנ״א", english: "DNA", russian: "ДНК", portuguese: "DNA" } }, - { word: "אנזים", translation: { hebrew: "אנזים", english: "enzyme", russian: "фермент", portuguese: "enzima" } }, - { word: "כרומוזום", translation: { hebrew: "כרומוזום", english: "chromosome", russian: "хромосома", portuguese: "cromossomo" } }, + "12": [ + { word: "דנ״א דו-גדילי", translation: { portuguese: "DNA de fita dupla", english: "double-stranded DNA", russian: "двуцепочечная ДНК" } }, + { word: "קודון", translation: { portuguese: "códon", english: "codon", russian: "кодон" } }, + { word: "אנטיקודון", translation: { portuguese: "anticódon", english: "anticodon", russian: "антикодон" } }, + { word: "שחבור", translation: { portuguese: "splicing", english: "splicing", russian: "сплайсинг" } }, + { word: "אינטרון", translation: { portuguese: "íntron", english: "intron", russian: "интрон" } }, + { word: "אקסון", translation: { portuguese: "éxon", english: "exon", russian: "экзон" } }, + { word: "פולימראז", translation: { portuguese: "polimerase", english: "polymerase", russian: "полимераза" } }, + { word: "RNA פולימראז", translation: { portuguese: "RNA polimerase", english: "RNA polymerase", russian: "РНК-полимераза" } }, + { word: "דנ״א פולימראז", translation: { portuguese: "DNA polimerase", english: "DNA polymerase", russian: "ДНК-полимераза" } }, + { word: "פרימאז", translation: { portuguese: "primase", english: "primase", russian: "примаза" } }, + { word: "הליקאז", translation: { portuguese: "helicase", english: "helicase", russian: "хеликаза" } }, + { word: "ליגאז", translation: { portuguese: "ligase", english: "ligase", russian: "лигаза" } }, + { word: "שכפול חצי שמרני", translation: { portuguese: "replicação semiconservativa", english: "semiconservative replication", russian: "полуконсервативная репликация" } }, + { word: "טלומר", translation: { portuguese: "telômero", english: "telomere", russian: "теломер" } }, + { word: "טלומראז", translation: { portuguese: "telomerase", english: "telomerase", russian: "теломераза" } }, + { word: "מוטציות שקטות", translation: { portuguese: "mutações silenciosas", english: "silent mutations", russian: "молчащие мутации" } }, + { word: "מוטציות שינוי מסגרת קריאה", translation: { portuguese: "mutações de mudança de quadro", english: "frameshift mutations", russian: "мутации сдвига рамки считывания" } }, + { word: "מוטציות חסר", translation: { portuguese: "deleção", english: "deletion", russian: "делеция" } }, + { word: "מוטציות תוספת", translation: { portuguese: "inserção", english: "insertion", russian: "инсерция" } }, + { word: "מוטציות החלפה", translation: { portuguese: "substituição", english: "substitution", russian: "замена" } }, + { word: "קריוטיפ", translation: { portuguese: "cariograma", english: "karyotype", russian: "кариотип" } }, + { word: "טרנספוזון", translation: { portuguese: "transposão", english: "transposon", russian: "транспозон" } }, + { word: "השפעה פליאוטרופית", translation: { portuguese: "efeito pleiotrópico", english: "pleiotropic effect", russian: "плейотропный эффект" } }, + { word: "חדירות גן", translation: { portuguese: "penetrância", english: "penetrance", russian: "проникаемость" } }, + { word: "שונות גנטית", translation: { portuguese: "variação genética", english: "genetic variation", russian: "генетическая вариация" } }, + { word: "שיבוט", translation: { portuguese: "clonagem", english: "cloning", russian: "клонирование" } }, + { word: "שחזור", translation: { portuguese: "engenharia de DNA", english: "DNA engineering", russian: "инженерия ДНК" } }, + { word: "ריצוף דנ״א", translation: { portuguese: "sequenciamento de DNA", english: "DNA sequencing", russian: "секвенирование ДНК" } }, + { word: "אלקטרופורזה בג'ל", translation: { portuguese: "eletroforese em gel", english: "gel electrophoresis", russian: "гелевая электрофорез" } }, + { word: "אנזימי הגבלה", translation: { portuguese: "enzimas de restrição", english: "restriction enzymes", russian: "рестриктазы" } }, + { word: "פלסמיד", translation: { portuguese: "plasmídeo", english: "plasmid", russian: "плазмида" } }, + { word: "טרנספורמציה", translation: { portuguese: "transformação", english: "transformation", russian: "трансформация" } }, + { word: "פרומוטר", translation: { portuguese: "promotor", english: "promoter", russian: "промотор" } }, + { word: "רגולטור", translation: { portuguese: "regulador", english: "regulator", russian: "регулятор" } }, + { word: "אופרון", translation: { portuguese: "operon", english: "operon", russian: "оперон" } }, + { word: "אופרון הלקטוז", translation: { portuguese: "operon da lactose", english: "lactose operon", russian: "оперон лактозы" } }, + { word: "דגם זיקת התאמה", translation: { portuguese: "modelo chave-fechadura", english: "lock-and-key model", russian: "модель замок-ключ" } }, + { word: "בקרה גנטית", translation: { portuguese: "regulação genética", english: "genetic regulation", russian: "генетическая регуляция" } }, + { word: "בקרת שעתוק", translation: { portuguese: "controle da transcrição", english: "transcriptional control", russian: "контроль транскрипции" } }, + { word: "בקרת תרגום", translation: { portuguese: "controle da tradução", english: "translational control", russian: "контроль трансляции" } }, + { word: "בקרת ביטוי גנים", translation: { portuguese: "controle da expressão gênica", english: "gene expression control", russian: "регуляция экспрессии генов" } }, + { word: "גורמי שעתוק", translation: { portuguese: "fatores de transcrição", english: "transcription factors", russian: "факторы транскрипции" } }, + { word: "אפיגנטיקה", translation: { portuguese: "epigenética", english: "epigenetics", russian: "эпигенетика" } }, + { word: "מתילציה של דנ״א", translation: { portuguese: "metilação do DNA", english: "DNA methylation", russian: "метилирование ДНК" } }, + { word: "אצטילציה של היסטונים", translation: { portuguese: "acetilação de histonas", english: "histone acetylation", russian: "ацетилирование гистонов" } }, + { word: "דה-מתילציה", translation: { portuguese: "desmetilação", english: "demethylation", russian: "деметилирование" } }, + { word: "גנום", translation: { portuguese: "genoma", english: "genome", russian: "геном" } }, + { word: "פרויקט גנום האנושי", translation: { portuguese: "Projeto Genoma Humano", english: "Human Genome Project", russian: "Проект «Геном человека»" } }, + { word: "רצפים חוזרניים", translation: { portuguese: "sequências repetitivas", english: "repetitive sequences", russian: "повторяющиеся последовательности" } }, + { word: "רצפים רגולטוריים", translation: { portuguese: "sequências reguladoras", english: "regulatory sequences", russian: "регуляторные последовательности" } }, + { word: "הנדסה גנטית", translation: { portuguese: "engenharia genética", english: "genetic engineering", russian: "генетическая инженерия" } }, + { word: "אורגניזם מהונדס גנטית", translation: { portuguese: "OGM", english: "genetically modified organism", russian: "генетически модифицированный организм" } }, + { word: "שיבוט מולקולרי", translation: { portuguese: "clonagem molecular", english: "molecular cloning", russian: "молекулярное клонирование" } }, + { word: "ביוטכנולוגיה חקלאית", translation: { portuguese: "biotecnologia agrícola", english: "agricultural biotechnology", russian: "агробиотехнология" } }, + { word: "ביוטכנולוגיה רפואית", translation: { portuguese: "biotecnologia médica", english: "medical biotechnology", russian: "медицинская биотехнология" } }, + { word: "תרפיה גנטית", translation: { portuguese: "terapia genética", english: "gene therapy", russian: "генная терапия" } }, ], -}; +}; \ No newline at end of file From d8f9233e6a8f035071fb2035f9bc7499934f92fa Mon Sep 17 00:00:00 2001 From: Merav-M Date: Thu, 15 May 2025 16:48:52 +0300 Subject: [PATCH 2/7] Connect to firebase --- auth-handler.js | 34 ++++++++++++++++++++++++++++++++++ firebase-init.js | 19 +++++++++++++++++++ login.html | 47 +++-------------------------------------------- 3 files changed, 56 insertions(+), 44 deletions(-) create mode 100644 auth-handler.js create mode 100644 firebase-init.js diff --git a/auth-handler.js b/auth-handler.js new file mode 100644 index 0000000..1d42342 --- /dev/null +++ b/auth-handler.js @@ -0,0 +1,34 @@ +import { auth, provider, db } from "./firebase-init.js"; +import { signInWithPopup } from "https://www.gstatic.com/firebasejs/11.7.3/firebase-auth.js"; +import { doc, setDoc } from "https://www.gstatic.com/firebasejs/11.7.3/firebase-firestore.js"; + +document.getElementById("google-login").addEventListener("click", async () => { + try { + const result = await signInWithPopup(auth, provider); + const user = result.user; + + const userData = { + name: user.displayName, + email: user.email, + picture: user.photoURL + }; + + localStorage.setItem("user", JSON.stringify(userData)); + + await setDoc(doc(db, "users", user.uid), { + name: user.displayName, + email: user.email, + joinedAt: new Date() + }); + + window.location.href = "index.html"; + } catch (err) { + console.error("Erro no login:", err.message); + alert("Erro ao fazer login com Google."); + } +}); + +export function continueAsGuest() { + localStorage.setItem("user", JSON.stringify({ guest: true })); + window.location.href = "index.html"; +} diff --git a/firebase-init.js b/firebase-init.js new file mode 100644 index 0000000..bf84cd4 --- /dev/null +++ b/firebase-init.js @@ -0,0 +1,19 @@ +import { initializeApp } from "https://www.gstatic.com/firebasejs/11.7.3/firebase-app.js"; +import { getAuth, GoogleAuthProvider } from "https://www.gstatic.com/firebasejs/11.7.3/firebase-auth.js"; +import { getFirestore } from "https://www.gstatic.com/firebasejs/11.7.3/firebase-firestore.js"; + +const firebaseConfig = { + apiKey: "AIzaSyAay9ozqNbMSyaoVCKVlgh66UmBjoRUGBY", + authDomain: "megapath-2d9f2.firebaseapp.com", + projectId: "megapath-2d9f2", + storageBucket: "megapath-2d9f2.appspot.com", + messagingSenderId: "639975739542", + appId: "1:639975739542:web:5ed291036401d2ce5532b7" +}; + +const app = initializeApp(firebaseConfig); +const auth = getAuth(app); +const provider = new GoogleAuthProvider(); +const db = getFirestore(app); + +export { app, auth, provider, db }; diff --git a/login.html b/login.html index 5b0c7e4..ed5a647 100644 --- a/login.html +++ b/login.html @@ -5,56 +5,15 @@ Login - Duoli Flashcards - -
-

Bem-vindo ao Duoli Flashcards

-
-
- - - +

Welcome To MegaPath

+

ou

- + From bf6a70791fe3919db94259e84fcf097573d011d1 Mon Sep 17 00:00:00 2001 From: Merav-M Date: Thu, 15 May 2025 17:07:28 +0300 Subject: [PATCH 3/7] Add text boxt to player and score presentation --- play-game.html | 96 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 74 insertions(+), 22 deletions(-) diff --git a/play-game.html b/play-game.html index 1322d0d..4e5fb6d 100644 --- a/play-game.html +++ b/play-game.html @@ -23,30 +23,82 @@

if (!words) { gameContainer.innerHTML = "

No words for this grade.

"; } else if (game === "flashcard") { - gameTitle.textContent = "Flashcards"; - let currentIndex = 0; - function showCard() { - if (currentIndex >= words.length) { - gameContainer.innerHTML = "

You've finished!

"; - return; - } - const word = words[currentIndex]; - gameContainer.innerHTML = ` -

${word.word}

- - - - `; - document.getElementById("show").addEventListener("click", () => { - document.getElementById("translation").style.display = "block"; - }); - document.getElementById("next").addEventListener("click", () => { - currentIndex++; - showCard(); - }); + gameTitle.textContent = "Flashcards"; + let currentIndex = 0; + let score = 0; + let wrongWords = []; + + function showCard() { + if (currentIndex >= words.length) { + gameContainer.innerHTML = ` +

You Finished The Game!

+

Your Pontuation: ${score} de ${words.length}

+

Your missed words:

+
    ${wrongWords.map(w => `
  • ${w}
  • `).join('')}
+ `; + return; + } + + const word = words[currentIndex]; + gameContainer.innerHTML = ` +

${word.word}

+ + +

+ + + + `; + + const input = document.getElementById("answer-input"); + const feedback = document.getElementById("feedback"); + const correctAnswer = document.getElementById("correct-answer"); + + document.getElementById("check-answer").addEventListener("click", () => { + const userAnswer = input.value.trim().toLowerCase(); + const correct = word.translation[lang].toLowerCase(); + + if (userAnswer === correct) { + feedback.textContent = "✅ Correct!"; + score++; + } else { + feedback.textContent = "❌ Wrong."; + wrongWords.push(`${word.word} → ${word.translation[lang]}`); } + correctAnswer.style.display = "block"; + }); + + document.getElementById("next").addEventListener("click", () => { + currentIndex++; showCard(); - } else { + }); + + document.getElementById("finish").addEventListener("click", () => { + showFinalResult(); + }); + + // Permitir tecla Enter para verificar resposta + input.addEventListener("keypress", (e) => { + if (e.key === "Enter") { + document.getElementById("check-answer").click(); + } + }); + + input.focus(); + } + + function showFinalResult() { + gameContainer.innerHTML = ` +

Game Over

+

Your score: ${score} out of ${words.length}

+

Incorrect words:

+
    ${wrongWords.map(w => `
  • ${w}
  • `).join('')}
+ + `; +} + + showCard(); +} else { gameTitle.textContent = "Coming Soon"; gameContainer.innerHTML = "

Word-to-picture not available yet.

"; } From 4ab7bcf26ee1468923d76a3974b98623443b3c79 Mon Sep 17 00:00:00 2001 From: Merav-M Date: Thu, 15 May 2025 17:22:42 +0300 Subject: [PATCH 4/7] Add comments in russian and english to the code --- auth-handler.js | 34 +++++++++- firebase-init.js | 25 ++++++++ games.html | 18 ++++++ index.html | 25 ++++++++ login.html | 15 +++++ play-game.html | 163 ++++++++++++++++++++++++++++------------------- script.js | 32 ++++++++-- style.css | 13 ++++ 8 files changed, 251 insertions(+), 74 deletions(-) diff --git a/auth-handler.js b/auth-handler.js index 1d42342..9e435a2 100644 --- a/auth-handler.js +++ b/auth-handler.js @@ -1,34 +1,64 @@ +/* + * Authentication Handler Module + * Модуль обработки аутентификации + * + * This module handles Google authentication and guest access functionality + * Этот модуль обрабатывает аутентификацию через Google и функционал гостевого доступа + */ + +// Import Firebase modules and configuration +// Импорт модулей и конфигурации Firebase import { auth, provider, db } from "./firebase-init.js"; import { signInWithPopup } from "https://www.gstatic.com/firebasejs/11.7.3/firebase-auth.js"; import { doc, setDoc } from "https://www.gstatic.com/firebasejs/11.7.3/firebase-firestore.js"; +// Handle Google login button click +// Обработка клика по кнопке входа через Google document.getElementById("google-login").addEventListener("click", async () => { try { + // Attempt to sign in with Google popup + // Попытка входа через всплывающее окно Google const result = await signInWithPopup(auth, provider); const user = result.user; + // Create user data object for local storage + // Создание объекта данных пользователя для локального хранилища const userData = { name: user.displayName, email: user.email, picture: user.photoURL }; + // Save user data to local storage + // Сохранение данных пользователя в локальное хранилище localStorage.setItem("user", JSON.stringify(userData)); + // Save user data to Firestore database + // Сохранение данных пользователя в базу данных Firestore await setDoc(doc(db, "users", user.uid), { name: user.displayName, email: user.email, joinedAt: new Date() }); + // Redirect to home page after successful login + // Перенаправление на главную страницу после успешного входа window.location.href = "index.html"; } catch (err) { - console.error("Erro no login:", err.message); - alert("Erro ao fazer login com Google."); + // Handle login errors + // Обработка ошибок входа + console.error("Error in the login:", err.message); + alert("Error in login with Google."); } }); +// Function to handle guest access +// Функция для обработки гостевого доступа export function continueAsGuest() { + // Save guest status to local storage + // Сохранение статуса гостя в локальное хранилище localStorage.setItem("user", JSON.stringify({ guest: true })); + // Redirect to home page + // Перенаправление на главную страницу window.location.href = "index.html"; } diff --git a/firebase-init.js b/firebase-init.js index bf84cd4..75f50c6 100644 --- a/firebase-init.js +++ b/firebase-init.js @@ -1,7 +1,19 @@ +/* + * Firebase Initialization Module + * Модуль инициализации Firebase + * + * This module initializes Firebase services including authentication and Firestore database + * Этот модуль инициализирует сервисы Firebase, включая аутентификацию и базу данных Firestore + */ + +// Import required Firebase modules +// Импорт необходимых модулей Firebase import { initializeApp } from "https://www.gstatic.com/firebasejs/11.7.3/firebase-app.js"; import { getAuth, GoogleAuthProvider } from "https://www.gstatic.com/firebasejs/11.7.3/firebase-auth.js"; import { getFirestore } from "https://www.gstatic.com/firebasejs/11.7.3/firebase-firestore.js"; +// Firebase configuration object with project credentials +// Объект конфигурации Firebase с учетными данными проекта const firebaseConfig = { apiKey: "AIzaSyAay9ozqNbMSyaoVCKVlgh66UmBjoRUGBY", authDomain: "megapath-2d9f2.firebaseapp.com", @@ -11,9 +23,22 @@ const firebaseConfig = { appId: "1:639975739542:web:5ed291036401d2ce5532b7" }; +// Initialize Firebase application +// Инициализация приложения Firebase const app = initializeApp(firebaseConfig); + +// Initialize Firebase Authentication and get a reference to the service +// Инициализация аутентификации Firebase и получение ссылки на сервис const auth = getAuth(app); + +// Create Google authentication provider instance +// Создание экземпляра провайдера аутентификации Google const provider = new GoogleAuthProvider(); + +// Initialize Firestore database and get a reference to the service +// Инициализация базы данных Firestore и получение ссылки на сервис const db = getFirestore(app); +// Export initialized Firebase services for use in other modules +// Экспорт инициализированных сервисов Firebase для использования в других модулях export { app, auth, provider, db }; diff --git a/games.html b/games.html index 7315488..28fde8b 100644 --- a/games.html +++ b/games.html @@ -1,24 +1,42 @@ + Select Game +

Select a Game

+
diff --git a/play-game.html b/play-game.html index 4e5fb6d..8dd9e0c 100644 --- a/play-game.html +++ b/play-game.html @@ -1,3 +1,10 @@ + @@ -11,8 +18,12 @@

+