用户:卡介菌/common.js:修订间差异
来自Rizline中文维基
更多操作
< 用户:卡介菌
卡介菌(留言 | 贡献) (创建页面,内容为“→=== BMV (Bilibili Music Video) Widget Start ===: (function($) { // ------------------- 初始化单个BMV实例的函数 ------------------- function initializeBMV($container) { if ($container.data('bmv-initialized')) return; $container.data('bmv-initialized', true); console.log('BMV from Common.js: Initializing widget for song:', $container.data('song-name')); var songName = $container.data('song-name'); v…”) |
小 |
||
| 第1行: | 第1行: | ||
(function($) { | (function($) { | ||
function initializeBMV($container) { | function initializeBMV($container) { | ||
if ($container.data('bmv-initialized')) return; | if ($container.data('bmv-initialized')) return; | ||
| 第71行: | 第68行: | ||
} | } | ||
mw.hook('wikipage.content').add(function($content) { | mw.hook('wikipage.content').add(function($content) { | ||
$content.find('.js-bmv-widget:not([data-bmv-initialized])').each(function() { | $content.find('.js-bmv-widget:not([data-bmv-initialized])').each(function() { | ||
| 第79行: | 第75行: | ||
}(jQuery)); | }(jQuery)); | ||
2025年7月11日 (五) 11:02的版本
(function($) {
function initializeBMV($container) {
if ($container.data('bmv-initialized')) return;
$container.data('bmv-initialized', true);
console.log('BMV from Common.js: Initializing widget for song:', $container.data('song-name'));
var songName = $container.data('song-name');
var rawDifficulties = $container.data('difficulties');
var $difficultyDiv = $container.find('.bmv-difficulty');
var $ratioDiv = $container.find('.bmv-ratio');
var $outputSpan = $container.find('.bmv-output');
var difficultyColors = {"EZ": "#57E4C4", "HD": "#FDBA61", "IN": "#FE8661", "AT": "#4C364B"};
function parseDifficulties(input) {
if (!input) return null;
try {
return String(input).split(',').map(function(item) {
var match = item.trim().match(/^([A-Za-z]+)(\d+)$/);
if (!match) throw new Error('Invalid format');
return (match[1].toUpperCase() + ' ' + match[2]);
});
} catch (e) {
console.error("BMV Error: parsing difficulties:", input, e);
return null;
}
}
var difficultyStates = parseDifficulties(rawDifficulties);
if (!songName || !difficultyStates || !difficultyStates.length) {
$container.find('table').replaceWith('<div style="color:red; padding:10px; text-align:center;">BMV Error: Missing or invalid songName/difficulties.</div>');
return;
}
$difficultyDiv.data({states: difficultyStates, current: 0});
$ratioDiv.data({states: ["16:9", "4:3"], current: 0});
function updateOutput() {
var difficulty = $difficultyDiv.data('states')[$difficultyDiv.data('current')].split(' ')[0];
var ratio = $ratioDiv.data('states')[$ratioDiv.data('current')].replace(':', '-');
var encodedSongName = encodeURIComponent(songName);
var videoUrl = 'https://pan.rizwiki.cn/d/' + ratio + '_' + encodedSongName + '_' + difficulty + '.mp4';
var videoHTML = '<video class="html5media-video" src="' + videoUrl + '" controls preload="metadata" loading="lazy" style="height:100%; object-fit:contain;"></video>';
$outputSpan.html(videoHTML);
}
$difficultyDiv.on('click', function() {
var $this = $(this), states = $this.data('states'), current = $this.data('current');
var next = (current + 1) % states.length;
$this.text(states[next]).data('current', next);
var difficultyType = states[next].split(' ')[0];
$this.parent().css('background-color', difficultyColors[difficultyType] || '#FFFFFF');
updateOutput();
});
$ratioDiv.parent().on('click', function() {
var states = $ratioDiv.data('states'), current = $ratioDiv.data('current');
var next = (current + 1) % states.length;
$ratioDiv.text(states[next]).data('current', next);
updateOutput();
});
var firstDiff = difficultyStates[0], diffType = firstDiff.split(' ')[0];
$difficultyDiv.text(firstDiff);
$difficultyDiv.parent().css('background-color', difficultyColors[diffType]);
updateOutput();
}
mw.hook('wikipage.content').add(function($content) {
$content.find('.js-bmv-widget:not([data-bmv-initialized])').each(function() {
initializeBMV($(this));
});
});
}(jQuery));