PlayerTV / static /js /script.js
SushantGautam's picture
Upload folder using huggingface_hub
ce50131 verified
document.addEventListener('DOMContentLoaded', function() {
document.getElementById('videoForm').addEventListener('submit', function(e) {
e.preventDefault();
var m3u8Url = document.getElementById('m3u8Input').value;
// Send a POST request to the server to process the video
fetch('/process_video', {
method: 'POST',
body: JSON.stringify({ m3u8Url: m3u8Url }),
headers: {
'Content-Type': 'application/json'
}
})
.then(response => response.json())
.then(data => {
if (data.mp4Path) {
var videoPlayer = document.getElementById('videoPlayer');
videoPlayer.src = data.mp4Path;
// Set the video to muted before playing
videoPlayer.muted = true;
videoPlayer.load();
videoPlayer.play();
} else {
console.error('Failed to process video');
}
})
.catch(error => console.error('Error:', error));
});
// Pop up functionality
var configModal = document.getElementById("configAdvModal");
var configBtn = document.getElementById("configAdvMode");
var configSpan = document.getElementsByClassName("config-modal-close")[0];
// Toggle modal display based on checkbox state
configBtn.addEventListener('change', function() {
if (this.checked) {
configModal.style.display = "block";
} else {
configModal.style.display = "none";
}
});
// When clicking on the modal close button, uncheck the checkbox and hide the modal
configSpan.onclick = function() {
configModal.style.display = "none";
configBtn.checked = false;
};
// When clicking outside the modal, uncheck the checkbox and hide the modal
window.onclick = function(event) {
if (event.target == configModal) {
configModal.style.display = "none";
configBtn.checked = false;
}
};
// Toggle functionality for Input Section
var accordionToggleVideo = document.getElementById('accordionToggleVideo');
var videoSection = document.getElementById('videoSection');
if (accordionToggleVideo && videoSection) {
accordionToggleVideo.addEventListener('click', function() {
videoSection.classList.toggle('hidden');
var icon = this.querySelector('i');
// Toggle between fa-angle-down and fa-angle-up
if (icon.classList.contains('fa-angle-down')) {
icon.classList.remove('fa-angle-down');
icon.classList.add('fa-angle-up');
} else {
icon.classList.remove('fa-angle-up');
icon.classList.add('fa-angle-down');
}
});
} else {
console.error('Accordion elements for video not found');
}
// Toggle functionality for Output Section 3
var accordionToggleVideo2 = document.getElementById('accordionToggleVideo2');
var filteredResults = document.getElementById('filteredResults');
if (accordionToggleVideo2 && filteredResults) {
accordionToggleVideo2.addEventListener('click', function() {
filteredResults.classList.toggle('hidden');
var icon = this.querySelector('i');
// Toggle between fa-angle-down and fa-angle-up
if (icon.classList.contains('fa-angle-down')) {
icon.classList.remove('fa-angle-down');
icon.classList.add('fa-angle-up');
} else {
icon.classList.remove('fa-angle-up');
icon.classList.add('fa-angle-down');
}
});
} else {
console.error('Accordion elements for filtered results not found');
}
// Toggle functionality for Configuration Section 2
var accordionToggleVideo3 = document.getElementById('accordionToggleVideo3');
var configurationSection = document.getElementById('configurationSection');
if (accordionToggleVideo3 && configurationSection) {
accordionToggleVideo3.addEventListener('click', function() {
configurationSection.classList.toggle('hidden');
var icon = this.querySelector('i');
// Toggle between fa-angle-down and fa-angle-up
if (icon.classList.contains('fa-angle-down')) {
icon.classList.remove('fa-angle-down');
icon.classList.add('fa-angle-up');
} else {
icon.classList.remove('fa-angle-up');
icon.classList.add('fa-angle-down');
}
});
} else {
console.error('Accordion elements for filtered results not found');
}
});
// Assuming the base path for team images
const basePathForTeamImages = '/static/teams_jersy/';
// Function to update team images based on the selected team
function updateTeamImages(selectedTeam) {
const imageUrl = basePathForTeamImages + selectedTeam + '.jpg'; // Assuming the images are in JPG format
const imageUrl2 = basePathForTeamImages + selectedTeam + '1.jpg';
console.log(imageUrl);
// Set the image URLs
document.getElementById('leftTeamImage').src = imageUrl;
document.getElementById('leftTeamImage2').src = imageUrl2;
}
// Assuming the base path for team images
const basePathForPlayerImages = '/static/players_image/';
// Function to update player images based on the selected player
function updatePlayerImages(selectedPlayer) {
const plyaerImageUrl = basePathForPlayerImages + selectedPlayer + '.png';
console.log(plyaerImageUrl);
// Set the image URLs
document.getElementById('rightTeamImage').src = plyaerImageUrl;
}
document.addEventListener('DOMContentLoaded', function() {
const teamDropdown = document.getElementById('teamDropdown');
const playerDropdown = document.getElementById('playerDropdown');
let jsonData = null;
// Event listener for file input change
document.getElementById('fileInput').addEventListener('change', function(e) {
document.getElementById('JersyContainer').style.display = 'block';
const file = e.target.files[0];
if (!file) return;
const reader = new FileReader();
reader.onload = function(fileEvent) {
try {
jsonData = JSON.parse(fileEvent.target.result);
populateTeamDropdown(jsonData); // Populate team dropdown
// Initially populate player dropdown with first team's players or empty
if (teamDropdown.options.length > 0) {
populatePlayerDropdown(jsonData, teamDropdown.options[0].value);
}
// check if jsonData.metadata.video_url exists
if (jsonData.metadata.video_url) {
document.getElementById('m3u8Input').value = jsonData.metadata.video_url;
document.getElementById('videoForm').querySelector('button').click();
}
} catch (error) {
console.error('Error parsing JSON:', error);
alert('Invalid JSON file.');
}
};
reader.readAsText(file);
// Update team images when the team dropdown is populated
if (teamDropdown.options.length > 0) {
updateTeamImages(teamDropdown.options[0].value);
}
});
// Event listener for team dropdown change
teamDropdown.addEventListener('change', function(e) {
const selectedTeam = e.target.value;
populatePlayerDropdown(jsonData, selectedTeam);
// Update team images when the team selection changes
updateTeamImages(selectedTeam);
});
// Event listener for player dropdown change
playerDropdown.addEventListener('change', function(e) {
const selectedPlayer = e.target.value;
// Update team images when the team selection changes
updatePlayerImages(selectedPlayer);
});
// Event listener for filter button click
document.getElementById('filterButton').addEventListener('click', function() {
const fileInput = document.getElementById('fileInput');
const file = fileInput.files[0];
if (!file) {
alert('Please select a file.');
return;
}
const team = teamDropdown.value;
const playerId = playerDropdown.value;
const formData = new FormData();
formData.append('file', file);
formData.append('team', team);
formData.append('playerId', playerId);
// Show the overlay as soon as the processing starts
var element = document.getElementById('filteredResults');
element.classList.remove('hidden');
element.scrollIntoView({ behavior: 'smooth', block: 'start' });
document.getElementById('overlay_result').style.display = 'flex';
fetch('/upload_and_filter', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
if (data.videoPath) {
var videoSource = document.getElementById('videoSource');
// Append timestamp to the video URL to prevent caching
var timestamp = new Date().getTime();
videoSource.src = data.videoPath + "?t=" + timestamp;
var videoPlayerResult = document.getElementById('videoPlayer_result');
videoPlayerResult.load(); // Load the new video source
videoPlayerResult.onloadeddata = function() {
document.getElementById('overlay_result').style.display = 'none';
videoPlayerResult.play().catch(error => {
console.error('Error occurred while trying to play the video:', error);
});
};
} else {
console.error('Video path not received');
}
})
.catch(error => console.error('Error:', error));
});
});
// Function to populate the player dropdown with kit numbers based on the selected team
function populatePlayerDropdown(jsonData, selectedTeam) {
const kitNumbers = new Set();
// Iterate through the 'frame' object in the JSON and filter by team
Object.values(jsonData.frame).forEach(frameData => {
Object.values(frameData).forEach(trackData => {
if (trackData.hasOwnProperty('kit_number') && trackData['team_id'] === selectedTeam) {
kitNumbers.add(trackData['kit_number'].toString().trim());
}
});
});
const playerDropdown = document.getElementById('playerDropdown');
playerDropdown.innerHTML = '';
kitNumbers.forEach(number => {
const option = new Option(number, number);
playerDropdown.appendChild(option);
});
}
// Function to populate the team dropdown with team IDs
function populateTeamDropdown(jsonData) {
const teamIds = new Set();
// Iterate through the 'frame' object in the JSON
Object.values(jsonData.frame).forEach(frameData => {
// Iterate through each track_id in the frame
Object.values(frameData).forEach(trackData => {
if (trackData.hasOwnProperty('team_id')) {
teamIds.add(trackData['team_id'].toString().trim());
}
});
});
const teamDropdown = document.getElementById('teamDropdown');
teamDropdown.innerHTML = '';
teamIds.forEach(teamId => {
const option = new Option(teamId, teamId);
teamDropdown.appendChild(option);
});
}
// document.getElementById('videoForm').addEventListener('submit', function(e) {
// e.preventDefault();
// var m3u8Url = document.getElementById('m3u8Input').value;
// document.getElementById('overlay').style.display = 'flex'; // Show the overlay
// fetch('/process_video', {
// method: 'POST',
// body: JSON.stringify({ m3u8Url: m3u8Url }),
// headers: {
// 'Content-Type': 'application/json'
// }
// })
// .then(response => response.json())
// .then(data => {
// document.getElementById('overlay').style.display = 'none'; // Hide the overlay
// if (data.mp4Path) {
// var videoPlayer = document.getElementById('videoPlayer');
// videoPlayer.src = data.mp4Path;
// videoPlayer.load();
// videoPlayer.play();
// } else {
// console.error('Failed to process video');
// }
// })
// .catch(error => {
// console.error('Error:', error);
// document.getElementById('overlay').style.display = 'none'; // Hide the overlay even if there is an error
// });
// });
// Dark Mode
document.getElementById('darkModeToggle').addEventListener('change', function() {
document.body.classList.toggle('dark-mode', this.checked);
});