MediaWiki:Common.js: Difference between revisions

From Tuyin Archives
Tag: Replaced
No edit summary
Line 1: Line 1:
/* Any JavaScript here will be loaded for all users on every page load. */
/* Any JavaScript here will be loaded for all users on every page load. */
// Audio Player System
$(document).ready(function() {
    // Initialize all audio players on page load
    $('.audioplayer').each(function() {
        var container = $(this);
        var filename = container.data('filename');
        var caption = container.data('caption') || 'Audio File';
       
        if (!filename) return;
       
        // Create unique ID for this player
        var playerId = 'player_' + Math.random().toString(36).substr(2, 9);
       
        // Build the player HTML
        var playerHTML =
            '<div style="display: inline-flex; align-items: center; gap: 12px;">' +
                '<div style="border: 1px solid #8B7355; padding: 8px; border-radius: 4px; background-color: #F5F0E8; width: 200px;">' +
                    '<button id="' + playerId + '_btn" onclick="window.toggleAudioPlayer(\'' + playerId + '\', \'' + filename + '\')" style="padding: 4px 8px; margin-right: 8px; font-size: 12px; border: 1px solid #8B7355; background: #D4C4A8; color: #5D4E37;">▶️</button>' +
                    '<div style="display: inline-block; width: 120px; height: 6px; background-color: #D4C4A8; border-radius: 3px; vertical-align: middle;">' +
                        '<div id="' + playerId + '_progress" style="height: 100%; background-color: #8B7355; border-radius: 3px; width: 0%; transition: width 0.1s;"></div>' +
                    '</div>' +
                '</div>' +
                '<span style="color: #8B7355; font-style: italic;">' + caption + '</span>' +
            '</div>';
       
        container.html(playerHTML);
    });
});
// Global function to handle audio playback
window.toggleAudioPlayer = function(playerId, filename) {
    var button = document.getElementById(playerId + '_btn');
    var progress = document.getElementById(playerId + '_progress');
   
    // Create or get existing audio element
    if (!button.audioElement) {
        button.audioElement = new Audio('https://tuyin.online/images/' + filename);
       
        // Set up progress tracking
        button.audioElement.addEventListener('timeupdate', function() {
            if (this.duration) {
                var percentage = (this.currentTime / this.duration) * 100;
                progress.style.width = percentage + '%';
            }
        });
       
        // Handle when audio ends
        button.audioElement.addEventListener('ended', function() {
            button.innerHTML = '▶️';
            progress.style.width = '0%';
        });
    }
   
    var audio = button.audioElement;
   
    if (audio.paused) {
        audio.play().then(function() {
            button.innerHTML = '⏸️';
        }).catch(function(error) {
            alert('Could not play audio: ' + error.message);
        });
    } else {
        audio.pause();
        button.innerHTML = '▶️';
    }
};

Revision as of 20:19, 23 July 2025

/* Any JavaScript here will be loaded for all users on every page load. */
// Audio Player System
$(document).ready(function() {
    // Initialize all audio players on page load
    $('.audioplayer').each(function() {
        var container = $(this);
        var filename = container.data('filename');
        var caption = container.data('caption') || 'Audio File';
        
        if (!filename) return;
        
        // Create unique ID for this player
        var playerId = 'player_' + Math.random().toString(36).substr(2, 9);
        
        // Build the player HTML
        var playerHTML = 
            '<div style="display: inline-flex; align-items: center; gap: 12px;">' +
                '<div style="border: 1px solid #8B7355; padding: 8px; border-radius: 4px; background-color: #F5F0E8; width: 200px;">' +
                    '<button id="' + playerId + '_btn" onclick="window.toggleAudioPlayer(\'' + playerId + '\', \'' + filename + '\')" style="padding: 4px 8px; margin-right: 8px; font-size: 12px; border: 1px solid #8B7355; background: #D4C4A8; color: #5D4E37;">▶️</button>' +
                    '<div style="display: inline-block; width: 120px; height: 6px; background-color: #D4C4A8; border-radius: 3px; vertical-align: middle;">' +
                        '<div id="' + playerId + '_progress" style="height: 100%; background-color: #8B7355; border-radius: 3px; width: 0%; transition: width 0.1s;"></div>' +
                    '</div>' +
                '</div>' +
                '<span style="color: #8B7355; font-style: italic;">' + caption + '</span>' +
            '</div>';
        
        container.html(playerHTML);
    });
});

// Global function to handle audio playback
window.toggleAudioPlayer = function(playerId, filename) {
    var button = document.getElementById(playerId + '_btn');
    var progress = document.getElementById(playerId + '_progress');
    
    // Create or get existing audio element
    if (!button.audioElement) {
        button.audioElement = new Audio('https://tuyin.online/images/' + filename);
        
        // Set up progress tracking
        button.audioElement.addEventListener('timeupdate', function() {
            if (this.duration) {
                var percentage = (this.currentTime / this.duration) * 100;
                progress.style.width = percentage + '%';
            }
        });
        
        // Handle when audio ends
        button.audioElement.addEventListener('ended', function() {
            button.innerHTML = '▶️';
            progress.style.width = '0%';
        });
    }
    
    var audio = button.audioElement;
    
    if (audio.paused) {
        audio.play().then(function() {
            button.innerHTML = '⏸️';
        }).catch(function(error) {
            alert('Could not play audio: ' + error.message);
        });
    } else {
        audio.pause();
        button.innerHTML = '▶️';
    }
};