模块:SongPlayer
来自Rizline中文维基
更多操作
此模块的文档可以在模块:SongPlayer/doc创建
local p = {}
function p.player(frame)
local args = frame:getParent().args
local title = args.title
local artist = args.artist
local imageName = args.image
local c1 = args.color1 or '#94E1FF'
local c2 = args.color2 or '#A3E5FF'
local c3 = args.color3 or '#B2E9FE'
local c4 = args.color4 or '#D5F3FE'
if not title or title == '' or not imageName or imageName == '' then
return ''
end
-- 处理文件名
local sanitizedTitle = title:gsub(' ', '_'):gsub('[\\/:*?"<>|]', '-')
local encodedTitle = mw.uri.encode(sanitizedTitle, 'PATH')
local imagePath = frame:preprocess('{{filepath:' .. imageName .. '}}')
local songUrl = 'https://pan.rizwiki.cn/d/song/' .. encodedTitle .. '.mp3'
-- 构建 HTML
local html = mw.html.create('div')
:attr('id', 'riz-player')
:addClass('riz-player-mini')
:css({
['--rp-c1'] = c1,
['--rp-c2'] = c2,
['--rp-c3'] = c3,
['--rp-c4'] = c4,
['display'] = 'none' -- JS加载前隐藏
})
-- 封面区域
local cover = html:tag('div'):addClass('rp-cover')
cover:tag('img'):attr('src', imagePath)
-- 播放/暂停 遮罩图标
cover:tag('div'):addClass('rp-btn-toggle'):wikitext('<div class="rp-icon-play"></div><div class="rp-icon-pause"></div>')
-- 信息与控制区域
local info = html:tag('div'):addClass('rp-info')
-- 标题和作者
info:tag('div'):addClass('rp-title'):wikitext(title)
info:tag('div'):addClass('rp-artist'):wikitext(artist or 'Unknown')
-- 进度条容器
local progressWrap = info:tag('div'):addClass('rp-progress-wrap')
local progressBar = progressWrap:tag('div'):addClass('rp-progress-bar')
progressBar:tag('div'):addClass('rp-progress-current') -- 当前进度条
progressBar:tag('div'):addClass('rp-progress-handle') -- 拖动滑块
-- 时间显示
info:tag('div'):addClass('rp-time'):wikitext('<span class="rp-cur">00:00</span> / <span class="rp-dur">00:00</span>')
-- 隐藏的 audio 标签
html:tag('audio'):attr('id', 'riz-audio'):attr('src', songUrl):attr('preload', 'metadata')
return tostring(html)
end
return p