Skip to content

Commit

Permalink
Merge pull request #3 from codecruz/ft/reverseCharacters
Browse files Browse the repository at this point in the history
Ft/reverse characters
  • Loading branch information
codecruz authored Feb 2, 2025
2 parents 878a106 + f5e88f8 commit a94f6d4
Show file tree
Hide file tree
Showing 12 changed files with 3,385 additions and 313 deletions.
3 changes: 2 additions & 1 deletion hiragana/hiragana-chart.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
<body class="bg-gray-100 font-sans">
<header class="bg-red-500 shadow-lg">
<div class="flex justify-center pt-8">
<a href="https://codecruz.github.io/hirakata/"><img class="h-20" alt="Logo Hirakata" src="../hirakata-nobg.png"></a>
<a href="https://codecruz.github.io/hirakata/"><img class="h-20" alt="Logo Hirakata"
src="../hirakata-nobg.png"></a>
</div>

<div class="text-center pb-6">
Expand Down
10 changes: 9 additions & 1 deletion hiragana/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
<body class="bg-gray-100 text-gray-800">
<header class="bg-red-500 shadow-lg">
<div class="flex justify-center pt-8">
<a href="https://codecruz.github.io/hirakata/"><img class="h-20" alt="Logo Hirakata" src="../hirakata-nobg.png"></a>
<a href="https://codecruz.github.io/hirakata/"><img class="h-20" alt="Logo Hirakata"
src="../hirakata-nobg.png"></a>
</div>

<div class="text-center pb-6">
Expand All @@ -29,8 +30,15 @@
class="text-white hover:text-gray-200 transition-colors text-lg font-semibold border-b-2 border-transparent hover:border-white">
Katakana
</a>
<a id="toggle-mode"
class="hover:cursor-pointer flex items-center gap-2 text-white hover:text-gray-200 transition-colors text-lg font-semibold border-b-2 border-transparent hover:border-white">
<img src="../img/alphabet.png" alt="Modo normal" class="h-5 w-6">
➡️
<img src="../img/letter-a.png" alt="Modo reverse" class="h-5 w-6">
</a>
</div>
</nav>

</header>


Expand Down
103 changes: 68 additions & 35 deletions hiragana/script.js
Original file line number Diff line number Diff line change
@@ -1,47 +1,80 @@
let hiraganaData = [];
let currentCharacter = null;

// Elementos del DOM
const characterElement = document.getElementById('character');
const answerInput = document.getElementById('answer');
const checkButton = document.getElementById('check');
const resultElement = document.getElementById('result');

fetch('../data/hiragana.json')
.then(response => response.json())
.then(data => {
let isReverseMode = false;
let hiraganaData = [];
let currentCharacter = null;
let currentRomanization = null;

async function loadHiraganaData() {
try {
const response = await fetch('../data/hiragana.json');
const data = await response.json();
hiraganaData = data.hiragana;
showRandomCharacter();
})
.catch(error => console.error('Error cargando el JSON:', error));
loadNewCharacter();
} catch (error) {
console.error('Error cargando el JSON:', error);
}
}

function showRandomCharacter() {
function getRandomCharacter() {
const randomIndex = Math.floor(Math.random() * hiraganaData.length);
currentCharacter = hiraganaData[randomIndex];
characterElement.textContent = currentCharacter.character;
return hiraganaData[randomIndex];
}

function updateUI() {
const characterElement = document.getElementById("character");
const answerInput = document.getElementById("answer");
const toggleButton = document.getElementById("toggle-mode");

if (isReverseMode) {
// Modo Reverse: Mostrar la romanización y pedir el carácter
characterElement.textContent = currentRomanization;
answerInput.placeholder = "Escribe el carácter en japonés";
} else {
// Modo Normal: Mostrar el carácter y pedir la romanización
characterElement.textContent = currentCharacter;
answerInput.placeholder = "Escribe la romanización";
}
}

function checkAnswer() {
const userAnswer = answerInput.value.trim().toLowerCase();
const correctAnswer = currentCharacter.romanization;
const userAnswer = document.getElementById("answer").value.trim();
const resultElement = document.getElementById("result");

if (userAnswer === correctAnswer) {
resultElement.textContent = '¡Correcto! 🎉';
resultElement.style.color = 'green';
showRandomCharacter(); // Mostrar un nuevo carácter aleatorio
if (isReverseMode) {
// Modo Reverse: Comparar con el carácter en japonés
if (userAnswer === currentCharacter) {
resultElement.textContent = "¡Correcto!";
resultElement.style.color = "green";
} else {
resultElement.textContent = `Incorrecto. La respuesta correcta es: ${currentCharacter}`;
resultElement.style.color = "red";
}
} else {
resultElement.textContent = `Incorrecto. La respuesta correcta es "${correctAnswer}". ❌`;
resultElement.style.color = 'red';
// Modo Normal: Comparar con la romanización
if (userAnswer === currentRomanization) {
resultElement.textContent = "¡Correcto!";
resultElement.style.color = "green";
} else {
resultElement.textContent = `Incorrecto. La respuesta correcta es: ${currentRomanization}`;
resultElement.style.color = "red";
}
}

// Limpiar el campo de entrada
answerInput.value = '';
document.getElementById("answer").value = "";
loadNewCharacter();
}

// Eventos
checkButton.addEventListener('click', checkAnswer);
answerInput.addEventListener('keypress', (e) => {
if (e.key === 'Enter') {
checkAnswer();
}
});
function loadNewCharacter() {
const randomChar = getRandomCharacter();
currentCharacter = randomChar.character;
currentRomanization = randomChar.romanization;
updateUI();
}

document.getElementById("toggle-mode").addEventListener("click", () => {
isReverseMode = !isReverseMode;
updateUI();
});

document.getElementById("check").addEventListener("click", checkAnswer);

loadHiraganaData();
Binary file added img/alphabet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/letter-a.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
26 changes: 13 additions & 13 deletions katakana/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>katakana</title>
<title>Katakana</title>
<link rel="stylesheet" href="../styles.css">
</head>

<body class="bg-gray-100 text-gray-800">
<header class="bg-red-500 shadow-lg">
<div class="flex justify-center pt-8">
<a href="https://codecruz.github.io/hirakata/"><img class="h-20" alt="Logo Hirakata" src="../hirakata-nobg.png"></a>
<a href="https://codecruz.github.io/hirakata/"><img class="h-20" alt="Logo Hirakata"
src="../hirakata-nobg.png"></a>
</div>

<div class="text-center pb-6">
Expand All @@ -29,38 +30,37 @@
class="text-white hover:text-gray-200 transition-colors text-lg font-semibold border-b-2 border-transparent hover:border-white">
Katakana
</a>
<a id="toggle-mode"
class="hover:cursor-pointer flex items-center gap-2 text-white hover:text-gray-200 transition-colors text-lg font-semibold border-b-2 border-transparent hover:border-white">
<img src="../img/alphabet.png" alt="Modo normal" class="h-5 w-6">
➡️
<img src="../img/letter-a.png" alt="Modo reverse" class="h-5 w-6">
</a>
</div>
</nav>
</header>


<div class="flex items-center justify-center min-h-screen">
<div class="bg-white p-8 rounded-lg shadow-lg text-center w-96 relative">

<h1 class="text-3xl font-bold mb-6 text-red-500">Practica Katakana</h1>


<span><a href="katakana-chart.html" target="_blank" class="help-icon"
aria-label="Ver tabla completa de katakana">

</a></span>

<span>
<a href="katakana-chart.html" target="_blank" class="help-icon"
aria-label="Ver tabla completa de katakana"></a>
</span>

<div class="flex items-center justify-center mb-6">
<p id="character" class="text-8xl text-gray-800">?</p>
</div>


<input type="text" id="answer"
class="w-full p-3 border border-gray-300 rounded-lg mb-4 focus:outline-none focus:ring-2 focus:ring-red-500"
placeholder="Escribe la romanización" />


<button id="check" class="w-full bg-red-500 text-white p-3 rounded-lg hover:bg-red-600 transition-colors">
Verificar
</button>


<p id="result" class="mt-4 text-lg text-gray-700"></p>
</div>
</div>
Expand Down
3 changes: 2 additions & 1 deletion katakana/katakana-chart.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
<body class="bg-gray-100 font-sans">
<header class="bg-red-500 shadow-lg">
<div class="flex justify-center pt-8">
<a href="https://codecruz.github.io/hirakata/"><img class="h-20" alt="Logo Hirakata" src="../hirakata-nobg.png"></a>
<a href="https://codecruz.github.io/hirakata/"><img class="h-20" alt="Logo Hirakata"
src="../hirakata-nobg.png"></a>
</div>

<div class="text-center pb-6">
Expand Down
97 changes: 65 additions & 32 deletions katakana/script.js
Original file line number Diff line number Diff line change
@@ -1,47 +1,80 @@
let isReverseMode = false;
let katakanaData = [];
let currentCharacter = null;
let currentRomanization = null;

// Elementos del DOM
const characterElement = document.getElementById('character');
const answerInput = document.getElementById('answer');
const checkButton = document.getElementById('check');
const resultElement = document.getElementById('result');

fetch('../data/katakana.json')
.then(response => response.json())
.then(data => {
async function loadKatakanaData() {
try {
const response = await fetch('../data/katakana.json');
const data = await response.json();
katakanaData = data.katakana;
showRandomCharacter();
})
.catch(error => console.error('Error cargando el JSON:', error));
loadNewCharacter();
} catch (error) {
console.error('Error cargando el JSON:', error);
}
}

function showRandomCharacter() {
function getRandomCharacter() {
const randomIndex = Math.floor(Math.random() * katakanaData.length);
currentCharacter = katakanaData[randomIndex];
characterElement.textContent = currentCharacter.character;
return katakanaData[randomIndex];
}

function updateUI() {
const characterElement = document.getElementById("character");
const answerInput = document.getElementById("answer");
const toggleButton = document.getElementById("toggle-mode");

if (isReverseMode) {
// Modo Reverse: Mostrar la romanización y pedir el carácter
characterElement.textContent = currentRomanization;
answerInput.placeholder = "Escribe el carácter en japonés";
} else {
// Modo Normal: Mostrar el carácter y pedir la romanización
characterElement.textContent = currentCharacter;
answerInput.placeholder = "Escribe la romanización";
}
}

function checkAnswer() {
const userAnswer = answerInput.value.trim().toLowerCase();
const correctAnswer = currentCharacter.romanization;
const userAnswer = document.getElementById("answer").value.trim();
const resultElement = document.getElementById("result");

if (userAnswer === correctAnswer) {
resultElement.textContent = '¡Correcto! 🎉';
resultElement.style.color = 'green';
showRandomCharacter(); // Mostrar un nuevo carácter aleatorio
if (isReverseMode) {
// Modo Reverse: Comparar con el carácter en japonés
if (userAnswer === currentCharacter) {
resultElement.textContent = "¡Correcto!";
resultElement.style.color = "green";
} else {
resultElement.textContent = `Incorrecto. La respuesta correcta es: ${currentCharacter}`;
resultElement.style.color = "red";
}
} else {
resultElement.textContent = `Incorrecto. La respuesta correcta es "${correctAnswer}". ❌`;
resultElement.style.color = 'red';
// Modo Normal: Comparar con la romanización
if (userAnswer === currentRomanization) {
resultElement.textContent = "¡Correcto!";
resultElement.style.color = "green";
} else {
resultElement.textContent = `Incorrecto. La respuesta correcta es: ${currentRomanization}`;
resultElement.style.color = "red";
}
}

// Limpiar el campo de entrada
answerInput.value = '';
document.getElementById("answer").value = "";
loadNewCharacter();
}

// Eventos
checkButton.addEventListener('click', checkAnswer);
answerInput.addEventListener('keypress', (e) => {
if (e.key === 'Enter') {
checkAnswer();
}
});
function loadNewCharacter() {
const randomChar = getRandomCharacter();
currentCharacter = randomChar.character;
currentRomanization = randomChar.romanization;
updateUI();
}

document.getElementById("toggle-mode").addEventListener("click", () => {
isReverseMode = !isReverseMode;
updateUI();
});

document.getElementById("check").addEventListener("click", checkAnswer);

loadKatakanaData();
Loading

0 comments on commit a94f6d4

Please sign in to comment.