fixed db implementacia
This commit is contained in:
parent
99b6bb8ecf
commit
d6d78a3fb8
@ -45,9 +45,9 @@
|
||||
|
||||
|
||||
<!-- Pripojenie skriptov -->
|
||||
<script type="module" src="videoplayer.js"></script>
|
||||
<script src="kontrola_api.js"></script>
|
||||
<script src="speech_recognition.js"></script>
|
||||
<script src="videoplayer.js"></script>
|
||||
|
||||
</body>
|
||||
</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.
@ -1,3 +1,8 @@
|
||||
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)
|
||||
|
||||
const inputText = document.getElementById('inputText');
|
||||
const videoPlayer = document.getElementById('translationVideo');
|
||||
const translateWordsBtn = document.getElementById('translateWordsBtn');
|
||||
@ -5,13 +10,12 @@ const translateLettersBtn = document.getElementById('translateLettersBtn');
|
||||
const prevBtn = document.getElementById('prevBtn');
|
||||
const nextBtn = document.getElementById('nextBtn');
|
||||
const translateBtn = document.getElementById('translateBtn');
|
||||
const statusText = document.getElementById('statusText');
|
||||
|
||||
let videoSequence = [];
|
||||
let currentIndex = 0;
|
||||
let autoPlayEnabled = true;
|
||||
|
||||
let currentTranslationMode = 'words';
|
||||
|
||||
let currentTranslationMode = 'words';
|
||||
|
||||
async function videoExists(src) {
|
||||
return new Promise(resolve => {
|
||||
@ -22,20 +26,53 @@ async function videoExists(src) {
|
||||
});
|
||||
}
|
||||
|
||||
async function fetchVideoUrl(word) {
|
||||
const { data, error } = await supabase
|
||||
.from('Videa')
|
||||
.select('video_url')
|
||||
.eq('label', word)
|
||||
.maybeSingle();
|
||||
|
||||
if (error) {
|
||||
console.error('Error fetching video:', error);
|
||||
return null;
|
||||
}
|
||||
|
||||
return data.video_url;
|
||||
}
|
||||
|
||||
async function loadVideoSequenceByWords() {
|
||||
const words = inputText.value.trim().split(' ');
|
||||
const words = inputText.value.trim().split(' ');
|
||||
videoSequence = [];
|
||||
|
||||
for (const word of words) {
|
||||
const videoSrc = `video/${word.toLowerCase()}.mp4`;
|
||||
if (await videoExists(videoSrc)) {
|
||||
videoSequence.push(videoSrc);
|
||||
const videoUrl = await fetchVideoUrl(word.toLowerCase());
|
||||
if (videoUrl) {
|
||||
videoSequence.push(videoUrl);
|
||||
}
|
||||
}
|
||||
currentIndex = 0;
|
||||
}
|
||||
|
||||
async function fetchLetterVideoUrl(letter) {
|
||||
const { data, error } = await supabase
|
||||
.from('Videa')
|
||||
.select('video_url')
|
||||
.eq('label', letter)
|
||||
.maybeSingle();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
async function loadVideoSequenceByLetters() {
|
||||
const characters = inputText.value.trim().split('');
|
||||
@ -43,16 +80,15 @@ async function loadVideoSequenceByLetters() {
|
||||
|
||||
for (const char of characters) {
|
||||
if (/[a-zA-Z]/.test(char)) {
|
||||
const videoSrc = `video/pismena/${char.toLowerCase()}.mp4`;
|
||||
if (await videoExists(videoSrc)) {
|
||||
videoSequence.push(videoSrc);
|
||||
const videoUrl = await fetchLetterVideoUrl(char.toLowerCase());
|
||||
if (videoUrl) {
|
||||
videoSequence.push(videoUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
currentIndex = 0;
|
||||
}
|
||||
|
||||
|
||||
function playVideoAtIndex(index) {
|
||||
if (index < 0 || index >= videoSequence.length) return;
|
||||
|
||||
@ -60,9 +96,8 @@ function playVideoAtIndex(index) {
|
||||
videoPlayer.play();
|
||||
currentIndex = index;
|
||||
|
||||
|
||||
const currentChar = videoSequence[index].split('/').pop().split('.')[0];
|
||||
document.getElementById('currentLetter').innerText = currentChar.toUpperCase();
|
||||
const currentLabel = videoSequence[index].split('/').pop().split('.')[0];
|
||||
document.getElementById('currentLetter').innerText = currentLabel.toUpperCase();
|
||||
|
||||
if (autoPlayEnabled) {
|
||||
videoPlayer.onended = () => {
|
||||
@ -78,11 +113,9 @@ function playVideoAtIndex(index) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
translateBtn.addEventListener('click', async () => {
|
||||
autoPlayEnabled = true;
|
||||
|
||||
|
||||
if (currentTranslationMode === 'words') {
|
||||
await loadVideoSequenceByWords();
|
||||
} else if (currentTranslationMode === 'letters') {
|
||||
@ -91,24 +124,23 @@ translateBtn.addEventListener('click', async () => {
|
||||
|
||||
if (videoSequence.length > 0) {
|
||||
playVideoAtIndex(currentIndex);
|
||||
} else {
|
||||
statusText.innerText = 'No videos found for the entered text.';
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
translateWordsBtn.addEventListener('click', () => {
|
||||
currentTranslationMode = 'words';
|
||||
translateWordsBtn.classList.add('active');
|
||||
currentTranslationMode = 'words';
|
||||
translateWordsBtn.classList.add('active');
|
||||
translateLettersBtn.classList.remove('active');
|
||||
});
|
||||
|
||||
|
||||
translateLettersBtn.addEventListener('click', () => {
|
||||
currentTranslationMode = 'letters';
|
||||
currentTranslationMode = 'letters';
|
||||
translateLettersBtn.classList.add('active');
|
||||
translateWordsBtn.classList.remove('active');
|
||||
});
|
||||
|
||||
|
||||
prevBtn.addEventListener('click', () => {
|
||||
if (currentIndex > 0) {
|
||||
autoPlayEnabled = false;
|
||||
@ -123,4 +155,4 @@ nextBtn.addEventListener('click', () => {
|
||||
currentIndex++;
|
||||
playVideoAtIndex(currentIndex);
|
||||
}
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue
Block a user