help@rskworld.in +91 93305 39277
RSK World
  • Home
  • Development
    • Web Development
    • Mobile Apps
    • Software
    • Games
    • Project
  • Technologies
    • Data Science
    • AI Development
    • Cloud Development
    • Blockchain
    • Cyber Security
    • Dev Tools
    • Testing Tools
  • Blog
  • About
  • Contact

Theme Settings

Color Scheme
Display Options
Font Size
100%
Back to Project
RSK World
sports-analysis
/
assets
/
js
RSK World
sports-analysis
Sports Analysis Dataset - Game Footage + Player Tracking + Event Annotations + OpenCV + Video Analysis
js
  • dashboard.js10.1 KB
  • explorer.js7.8 KB
  • main.js3.7 KB
explorer.js
assets/js/explorer.js
Raw Download
Find: Go to:
/*
RSK World
Founder: Molla Samser
Designer & Tester: Rima Khatun
Email: help@rskworld.in
Phone: +91 93305 39277
Address: Nutanhat, Mongolkote, Purba Burdwan, West Bengal, India, 713147
Website: https://rskworld.in/
*/

let allData = {
    games: [],
    events: [],
    players: []
};

async function loadData() {
    try {
        // Load games metadata
        const gamesResponse = await fetch('data/metadata/games_metadata.json');
        const gamesData = await gamesResponse.json();
        allData.games = gamesData.games;
        
        // Load events
        const eventsPromises = allData.games.map(async (game) => {
            if (game.events_file) {
                try {
                    const response = await fetch(game.events_file);
                    const eventsData = await response.json();
                    return eventsData.events.map(event => ({
                        ...event,
                        game_id: game.game_id,
                        sport: game.sport,
                        date: game.date
                    }));
                } catch (e) {
                    return [];
                }
            }
            return [];
        });
        
        const eventsArrays = await Promise.all(eventsPromises);
        allData.events = eventsArrays.flat();
        
        // Load tracking data for players
        const trackingPromises = allData.games.map(async (game) => {
            if (game.tracking_file) {
                try {
                    const response = await fetch(game.tracking_file);
                    const trackingData = await response.json();
                    return trackingData.players || [];
                } catch (e) {
                    return [];
                }
            }
            return [];
        });
        
        const playersArrays = await Promise.all(trackingPromises);
        allData.players = playersArrays.flat();
        
        updateQuickStats();
    } catch (error) {
        console.error('Error loading data:', error);
    }
}

function applyFilters() {
    const searchTerm = document.getElementById('searchInput').value.toLowerCase();
    const sport = document.getElementById('sportFilter').value;
    const eventType = document.getElementById('eventFilter').value;
    const dateFrom = document.getElementById('dateFrom').value;
    const dateTo = document.getElementById('dateTo').value;
    
    let filteredEvents = [...allData.events];
    
    // Apply filters
    if (searchTerm) {
        filteredEvents = filteredEvents.filter(event => 
            event.player_id?.toLowerCase().includes(searchTerm) ||
            event.description?.toLowerCase().includes(searchTerm) ||
            event.game_id?.toLowerCase().includes(searchTerm)
        );
    }
    
    if (sport) {
        filteredEvents = filteredEvents.filter(event => event.sport === sport);
    }
    
    if (eventType) {
        filteredEvents = filteredEvents.filter(event => event.event_type === eventType);
    }
    
    if (dateFrom) {
        filteredEvents = filteredEvents.filter(event => event.date >= dateFrom);
    }
    
    if (dateTo) {
        filteredEvents = filteredEvents.filter(event => event.date <= dateTo);
    }
    
    displayResults(filteredEvents);
    document.getElementById('resultCount').textContent = filteredEvents.length;
}

function clearFilters() {
    document.getElementById('searchInput').value = '';
    document.getElementById('sportFilter').value = '';
    document.getElementById('eventFilter').value = '';
    document.getElementById('dateFrom').value = '';
    document.getElementById('dateTo').value = '';
    document.getElementById('resultsContainer').innerHTML = '<p class="text-muted text-center">Use filters above to search the dataset</p>';
    document.getElementById('resultCount').textContent = '0';
}

function displayResults(events) {
    const container = document.getElementById('resultsContainer');
    
    if (events.length === 0) {
        container.innerHTML = '<p class="text-muted text-center">No results found</p>';
        return;
    }
    
    container.innerHTML = events.map(event => `
        <div class="result-item">
            <div class="d-flex justify-content-between align-items-start mb-2">
                <div>
                    <span class="badge bg-primary result-badge">${event.sport}</span>
                    <span class="badge bg-${getEventColor(event.event_type)} result-badge">${event.event_type}</span>
                    <span class="badge bg-secondary result-badge">${event.game_id}</span>
                </div>
                <small class="text-muted">${event.date || ''}</small>
            </div>
            <h6 class="mb-2">${event.description || 'Event'}</h6>
            <div class="text-muted small">
                ${event.player_id ? `Player: ${event.player_id} | ` : ''}
                ${event.timestamp ? `Time: ${formatTime(event.timestamp)} | ` : ''}
                ${event.video_timestamp ? `Video: ${event.video_timestamp}` : ''}
            </div>
        </div>
    `).join('');
}

function getEventColor(eventType) {
    const colors = {
        'goal': 'success',
        'foul': 'danger',
        'penalty': 'warning',
        'substitution': 'info',
        'timeout': 'secondary'
    };
    return colors[eventType] || 'secondary';
}

function formatTime(seconds) {
    const mins = Math.floor(seconds / 60);
    const secs = Math.floor(seconds % 60);
    return `${mins}:${secs.toString().padStart(2, '0')}`;
}

function updateQuickStats() {
    const container = document.getElementById('quickStats');
    
    const stats = {
        'Total Games': allData.games.length,
        'Total Events': allData.events.length,
        'Total Players': new Set(allData.players.map(p => p.player_id)).size,
        'Sports': new Set(allData.games.map(g => g.sport)).size
    };
    
    container.innerHTML = Object.entries(stats).map(([label, value]) => `
        <div class="quick-stat-item">
            <div class="stat-label">${label}</div>
            <div class="stat-value">${value}</div>
        </div>
    `).join('');
}

function exportResults(format) {
    const searchTerm = document.getElementById('searchInput').value.toLowerCase();
    const sport = document.getElementById('sportFilter').value;
    const eventType = document.getElementById('eventFilter').value;
    
    let filteredEvents = [...allData.events];
    
    if (searchTerm || sport || eventType) {
        applyFilters();
        // Re-filter for export
        if (searchTerm) {
            filteredEvents = filteredEvents.filter(event => 
                event.player_id?.toLowerCase().includes(searchTerm) ||
                event.description?.toLowerCase().includes(searchTerm)
            );
        }
        if (sport) filteredEvents = filteredEvents.filter(e => e.sport === sport);
        if (eventType) filteredEvents = filteredEvents.filter(e => e.event_type === eventType);
    }
    
    if (format === 'json') {
        const json = JSON.stringify(filteredEvents, null, 2);
        downloadFile(json, 'search-results.json', 'application/json');
    }
}

function downloadFile(content, filename, mimeType) {
    const blob = new Blob([content], { type: mimeType });
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = filename;
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
    URL.revokeObjectURL(url);
}

// Add event listeners
document.addEventListener('DOMContentLoaded', () => {
    loadData();
    
    document.getElementById('searchInput').addEventListener('keypress', (e) => {
        if (e.key === 'Enter') applyFilters();
    });
});

227 lines•7.8 KB
javascript

About RSK World

Founded by Molla Samser, with Designer & Tester Rima Khatun, RSK World is your one-stop destination for free programming resources, source code, and development tools.

Founder: Molla Samser
Designer & Tester: Rima Khatun

Development

  • Game Development
  • Web Development
  • Mobile Development
  • AI Development
  • Development Tools

Legal

  • Terms & Conditions
  • Privacy Policy
  • Disclaimer

Contact Info

Nutanhat, Mongolkote
Purba Burdwan, West Bengal
India, 713147

+91 93305 39277

hello@rskworld.in
support@rskworld.in

© 2026 RSK World. All rights reserved.

Content used for educational purposes only. View Disclaimer