LLWiki正在建设中,欢迎加入我们

模块:Radio-list

来自LLWiki
Bhsd讨论 | 贡献2020年10月10日 (六) 07:26的版本
跳转到导航 跳转到搜索
Template-info.png 模块文档
这个文档嵌入模块:Radio-list/doc

用于{{广播节目表}}。

local getArgs = require('Module:Arguments').getArgs
local p = {}

function date(str)
    local skip = 1
    if str:sub(1, 1) == 's' then
        skip = 0
        str = mw.ustring.gsub(str, "^%D+", "")
    end
    return {skip, mw.ustring.gsub(str, "([年月])0?(%d+)", "%1<span class=\"countdown-num\">%2</span>")}
end

function cell(str)
    local property, value = mw.ustring.match(str, "([^|]*)|(.*)")
    return {property, value or str}
end

function span(str)
    return mw.ustring.match(str, "rowspan%s*=%s*[\"\']?(%d+)") or 1
end

function p.main(frame)
    local args = getArgs(frame, {removeBlanks = false})
    local result = "{|class=\"wikitable radio-list"..(args.comment and " radio-with-comment" or "").."\"\n!#!!配信日期"
    local ncols = 2 + (args.comment and 1 or 0)
    local ncvcols = 2
    local cvcols = args.cvcols and mw.text.split(args.cvcols, "、") or {}
    for k,v in ipairs(cvcols) do
        ncols = ncols + 1
        ncvcols = ncvcols + 1
        result = result.."!!"..v
    end
    result = result.."!!视频资料"..(args.comment and "!!備註" or "")
    local id = args.start or 1
    local rowspan = {}
    for k,v in ipairs(args) do
        local i = k % ncols
        if i == 1 then
            local date = date(v)
            result = result.."\n|-\n|"..(date[1] == 1 and id or "<div style=\"text-align:center\">–</div>").."||"..date[2]
            id = id + date[1]
        elseif (i > 1 and i < ncvcols) then
            rowspan[i] = rowspan[i] or 0
            if rowspan[i] > 0 then
                rowspan[i] = rowspan[i] - 1
            else
                local td = cell(v)
                if td[1] then
                    rowspan[i] = span(td[1]) - 1
                end
                if td[1] or td[2] == "" then
                    result = result.."||"..(td[1] or "")..
                        (td[2] == "" and "class=\"table-none\"| " or ("|"..
                        frame:expandTemplate{title = "memberlink/cv", args = mw.text.split(v, "、")}))
                else
                    result = result.."||"..frame:expandTemplate{title = "memberlink/cv", args = mw.text.split(v, "、")}
                end
            end
        elseif i == ncvcols then
            local video = string.match(v, "[%l%u%d]+")
            result = result.."||"..(video and "[https://www.bilibili.com/video/"..video.." "..v.."]" or "–")
        elseif i == 0 then
            rowspan[i] = rowspan[i] or 0
            if rowspan[i] > 0 then
                rowspan[i] = rowspan[i] - 1
            else
                local td = cell(v)
                if td[1] then
                    rowspan[i] = span(td[1]) - 1
                end
                result = result.."||"..(td[1] and td[1].."|" or "")..td[2]
            end
        end
    end
    return result.."\n|}"
end

return p