MediaWiki:Common.js: Difference between revisions
From Tuyin Archives
Replaced content with "→Any JavaScript here will be loaded for all users on every page load.: " 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 = '▶️';
}
};
