Compare commits

..

No commits in common. "bf7fe2654422e3a992edfe2fe436a2eb799b6a58" and "4aa5daaf7742d120f166de37193dd4b39a055a23" have entirely different histories.

49 changed files with 18 additions and 71 deletions

View File

@ -45,12 +45,9 @@
<!-- Pripojenie skriptov --> <!-- Pripojenie skriptov -->
<script type="module" src="videoplayer.js"></script>
<script src="kontrola_api.js"></script> <script src="kontrola_api.js"></script>
<script src="speech_recognition.js"></script> <script src="speech_recognition.js"></script>
<script src="videoplayer.js"></script> <script src="videoplayer.js"></script>
</body> </body>
</html> </html>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,9 +1,3 @@
import { createClient } from 'https://cdn.jsdelivr.net/npm/@supabase/supabase-js/+esm';
const supabaseUrl = 'https://manesldshonpegglmyan.supabase.co'
const supabaseKey = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im1hbmVzbGRzaG9ucGVnZ2xteWFuIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTczMDcxNzQ2NCwiZXhwIjoyMDQ2MjkzNDY0fQ.saaJeTtwYZCS3YKJYmQsAOSAEFzUVUJnoJSD8-lgLHo'
const supabase = createClient(supabaseUrl, supabaseKey)
// Select DOM elements
const inputText = document.getElementById('inputText'); const inputText = document.getElementById('inputText');
const videoPlayer = document.getElementById('translationVideo'); const videoPlayer = document.getElementById('translationVideo');
const translateWordsBtn = document.getElementById('translateWordsBtn'); const translateWordsBtn = document.getElementById('translateWordsBtn');
@ -11,15 +5,15 @@ const translateLettersBtn = document.getElementById('translateLettersBtn');
const prevBtn = document.getElementById('prevBtn'); const prevBtn = document.getElementById('prevBtn');
const nextBtn = document.getElementById('nextBtn'); const nextBtn = document.getElementById('nextBtn');
const translateBtn = document.getElementById('translateBtn'); // Prelož button const translateBtn = document.getElementById('translateBtn'); // Prelož button
const statusText = document.getElementById('statusText');
// Translation state variables
let videoSequence = []; let videoSequence = [];
let currentIndex = 0; let currentIndex = 0;
let autoPlayEnabled = true; let autoPlayEnabled = true;
// Variable to track the current translation method
let currentTranslationMode = 'words'; // Default mode let currentTranslationMode = 'words'; // Default mode
// Function to check if video exists (for local testing) // Function to check if video exists
async function videoExists(src) { async function videoExists(src) {
return new Promise(resolve => { return new Promise(resolve => {
const video = document.createElement('video'); const video = document.createElement('video');
@ -29,72 +23,30 @@ async function videoExists(src) {
}); });
} }
// Function to fetch video URL from Supabase by label (for word translation) // Function to load video sequence by words
async function fetchVideoUrl(word) {
const { data, error } = await supabase
.from('Videa')
.select('video_url')
.eq('label', word)
.maybeSingle(); // Use maybeSingle() instead of single()
if (error) {
console.error('Error fetching video:', error);
return null;
}
if (!data) {
console.warn(`No video found for word: ${word}`);
return null;
}
return data.video_url;
}
// Function to load video sequence by words using Supabase
async function loadVideoSequenceByWords() { async function loadVideoSequenceByWords() {
const words = inputText.value.trim().split(' '); const words = inputText.value.trim().split(' ');
videoSequence = []; videoSequence = [];
for (const word of words) { for (const word of words) {
const videoUrl = await fetchVideoUrl(word.toLowerCase()); const videoSrc = `video/${word.toLowerCase()}.mp4`;
if (videoUrl) { if (await videoExists(videoSrc)) {
videoSequence.push(videoUrl); videoSequence.push(videoSrc);
} }
} }
currentIndex = 0; currentIndex = 0;
} }
async function fetchLetterVideoUrl(letter) { // Function to load video sequence by letters
const { data, error } = await supabase
.from('Videa')
.select('video_url')
.eq('label', letter)
.maybeSingle(); // Use maybeSingle() for letters
if (error) {
console.error('Error fetching video for letter:', letter, error);
return null;
}
if (!data) {
console.warn(`No video found for letter: ${letter}`);
return null;
}
return data.video_url;
}
// Function to load video sequence by letters using Supabase
async function loadVideoSequenceByLetters() { async function loadVideoSequenceByLetters() {
const characters = inputText.value.trim().split(''); const characters = inputText.value.trim().split('');
videoSequence = []; videoSequence = [];
for (const char of characters) { for (const char of characters) {
if (/[a-zA-Z]/.test(char)) { if (/[a-zA-Z]/.test(char)) {
const videoUrl = await fetchLetterVideoUrl(char.toLowerCase()); const videoSrc = `video/pismena/${char.toLowerCase()}.mp4`;
if (videoUrl) { if (await videoExists(videoSrc)) {
videoSequence.push(videoUrl); videoSequence.push(videoSrc);
} }
} }
} }
@ -109,9 +61,9 @@ function playVideoAtIndex(index) {
videoPlayer.play(); videoPlayer.play();
currentIndex = index; currentIndex = index;
// Update the title with the current word or letter // Update the title with the current letter or word
const currentLabel = videoSequence[index].split('/').pop().split('.')[0]; const currentChar = videoSequence[index].split('/').pop().split('.')[0];
document.getElementById('currentLetter').innerText = currentLabel.toUpperCase(); document.getElementById('currentLetter').innerText = currentChar.toUpperCase();
if (autoPlayEnabled) { if (autoPlayEnabled) {
videoPlayer.onended = () => { videoPlayer.onended = () => {
@ -131,7 +83,7 @@ function playVideoAtIndex(index) {
translateBtn.addEventListener('click', async () => { translateBtn.addEventListener('click', async () => {
autoPlayEnabled = true; autoPlayEnabled = true;
// Load the video sequence based on the current translation mode // Based on current mode, load the correct video sequence
if (currentTranslationMode === 'words') { if (currentTranslationMode === 'words') {
await loadVideoSequenceByWords(); await loadVideoSequenceByWords();
} else if (currentTranslationMode === 'letters') { } else if (currentTranslationMode === 'letters') {
@ -140,22 +92,20 @@ translateBtn.addEventListener('click', async () => {
if (videoSequence.length > 0) { if (videoSequence.length > 0) {
playVideoAtIndex(currentIndex); playVideoAtIndex(currentIndex);
} else {
statusText.innerText = 'No videos found for the entered text.';
} }
}); });
// Event listener for "Preložiť po slovách" button // Event listener for "Preložiť po slovách" button
translateWordsBtn.addEventListener('click', () => { translateWordsBtn.addEventListener('click', () => {
currentTranslationMode = 'words'; // Set to words mode currentTranslationMode = 'words'; // Set to words mode
translateWordsBtn.classList.add('active'); translateWordsBtn.classList.add('active'); // Optionally add active class
translateLettersBtn.classList.remove('active'); translateLettersBtn.classList.remove('active');
}); });
// Event listener for "Preložiť po písmenách" button // Event listener for "Preložiť po písmenách" button
translateLettersBtn.addEventListener('click', () => { translateLettersBtn.addEventListener('click', () => {
currentTranslationMode = 'letters'; // Set to letters mode currentTranslationMode = 'letters'; // Set to letters mode
translateLettersBtn.classList.add('active'); translateLettersBtn.classList.add('active'); // Optionally add active class
translateWordsBtn.classList.remove('active'); translateWordsBtn.classList.remove('active');
}); });