模块:L
来自东方Project线下活动维基
可在模块:L/doc创建此模块的帮助文档
local L = {} local getArgs = require('Module:Arguments').getArgs local isInArray = require('Module:Utils').isInArray local isInDict = require('Module:Utils').isInDict local yesno = require('Module:Yesno') local linksTable = { ['bv'] = 'https://www.bilibili.com/video/BV', ['av'] = 'https://www.bilibili.com/video/av', ['sm'] = 'https://nicovideo.jp/watch/sm', ['nm'] = 'https://nicovideo.jp/watch/nm', ['ac'] = 'https:///www.acfun.cn/v/ac', ['au'] = 'https://www.bilibili.com/audio/au', ['cv'] = 'https://www.bilibili.com/read/cv', ['rl'] = 'https://www.bilibili.com/read/readlist/rl', ['ml'] = 'https://www.bilibili.com/medialist/play/ml', ['ep'] = 'https://www.bilibili.com/bangumi/play/ep', ['ss'] = 'https://www.bilibili.com/bangumi/play/ss', ['im'] = 'https://seiga.nicovideo.jp/seiga/im', ['pid'] = 'https://www.pixiv.net/artworks/', ['uid'] = 'https://space.bilibili.com/' } local function parseParam(paramTable) local res = {} local spliter = #res == 0 and '?' or '&' for k, v in pairs(paramTable) do -- mw.log(k, v) if #v > 0 then table.insert(res, spliter .. mw.text.nowiki(k .. '=' .. v)) end end return table.concat(res, '') end function L.genLink(id, params) local prefix = linksTable[id:sub(1, 3):lower()] and id:sub(1, 3):lower() or id:sub(1, 2):lower() local digit = id:sub(#prefix + 1) if not linksTable[prefix] then return id end local link = linksTable[prefix] .. digit return link end function L.generate(frame) --[=[ 生成特定号码对应链接的模块 @param 第一个参数,默认的视频号,会被archive参数覆盖 @param 第二个参数,默认的显示文本,为空时被第一个参数或archive参数覆盖 @param _status 状态 @param p 分p号 @param t 时间号 @param archive 搬运地址或者视频号 @param origin 原地址或者视频号,没什么用,准备deprecate @param option 样式的设置 @return html --]=] local args = getArgs(frame) local id = args[1] local archive = args["archive"] or args["转载"] or args["补档"] local text = args[2] or id local _status = args["status"] local option = args["option"] -- TODO 拆分错误处理函数或者模块 local part = args["p"] or "" -- 为 1 的时候忽略该值 local _time = args["t"] or "" local paramTable = {["p"] = part, ["t"] = _time} local params = parseParam(paramTable) local link = L.genLink(id, params) local category = option ~= "nocategory" and "[[分类:有失效链接的页面]]" or "" local partText = (#part > 0 and "<sup>第" .. part .. "P</sup>") or '' local titleText = "" if archive then titleText = "原视频号为 " .. args[1] elseif args['origin'] then titleText = "此视频搬运自 " .. args['origin'] else titleText = _status and "此作品目前处于" .. _status .. "状态。" or id end -- TODO 使用mediawiki自带模块处理html local res local _output = (yesno(args['pl']) and '' or '%s[') .. link .. (yesno(args['pl']) and '' or ' %s]%s') local statusTable = { normal = _output:format('', "<span title='" .. titleText .. "'>" .. text .. partText .. "</span>", '') } -- TODO 完全使用模板字符串定义statusTable if _status then statusTable = { normal = statusTable.normal, invalidLink = _output:format(category .. "<span class='plainlinks'>", "<span title='" .. titleText .. "' style='color:grey'><s>" .. text .. partText .. "</s></span>", "</span>"), invalidPart = _output:format(category, "<span title='" .. titleText .. "'>" .. text .. "<span style='color:grey'>" .. partText .. "</span>", ''), reproduceProhibited = statusTable.normal .. "<span style='color:red'><small>(禁止转载)</small></span>" } if _status:isInArray({"失效", "删除", "削除", "非公开"}) then res = statusTable.invalidLink elseif #part > 0 and _status:isInArray({"分p失效", "分p删除", "分p削除"}) then res = statusTable.invalidPart elseif _status == "禁止转载" then res = statusTable.reproduceProhibited else res = statusTable.normal end else res = statusTable.normal end -- TODO 使用栈处理各个标签组件 if archive then res = res .. '<div class="repost-circle">['..L.genLink(archive)..' 转]</div>' end return res end return L