Skip to content

Commit

Permalink
✨ Aded reverse functionality (kanas to romaji)
Browse files Browse the repository at this point in the history
  • Loading branch information
codecruz committed Feb 2, 2025
1 parent e017ff8 commit f5e88f8
Show file tree
Hide file tree
Showing 5 changed files with 146 additions and 86 deletions.
7 changes: 4 additions & 3 deletions hiragana/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +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
<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 oscuro" class="h-5 w-6">
<img src="../img/alphabet.png" alt="Modo normal" class="h-5 w-6">
➡️
<img src="../img/letter-a.png" alt="Modo oscuro" 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();
23 changes: 8 additions & 15 deletions katakana/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<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>

Expand All @@ -30,44 +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
<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 oscuro" class="h-5 w-6">
<img src="../img/alphabet.png" alt="Modo normal" class="h-5 w-6">
➡️
<img src="../img/letter-a.png" alt="Modo oscuro" 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
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 f5e88f8

Please sign in to comment.