打开主菜单
首页
随机
登录
设置
关于Arcaea中文维基
免责声明
搜索
查看“Module:Songtable Last”的源代码
←
Module:Songtable Last
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
--本文档复制自Module:Songtable 著作权属于原作者 --为Last的两个BYD曲绘格式问题编制 local getArgs = require('Module:Arguments').getArgs local link = require('Module:Link')._link local getData = require("Module:data") local p = {} function timeCov(t) return os.date("(%Y/%m/%d)", t) end function dateCov(v, d, t, type) if not(v and d) then return nil end local box, a, b, c = mw.html.create('div'), mw.html.create('div'), mw.html.create('div'), mw.html.create('div') box:addClass("date-box") a:wikitext(t) if type == "arg" then b:wikitext(v..'<br>' .. '('..tostring(d) .. ')') else b:wikitext('v'..v..'<br>'..tostring(timeCov(d))) end box:wikitext(tostring(a)) :wikitext(tostring(b)) :wikitext(tostring(c)) return tostring(box) end function bgCov(bg) if bg == nil then return nil else return '[[:分类:采用'..bg..'背景的曲目|'..bg..']]' end end function choice(a, aKey, b, bKey) if aKey then return a end if bKey then return b end return nil end function bydMark(byd, name) local diff, mark = mw.html.create('div'), mw.html.create('div') diff:wikitext('[Beyond]') mark:wikitext('仅移动版') if byd and name ~= 'Tempestissimo' and name ~= 'Quon' and name ~= 'lastendconductor' then return tostring(tostring(diff)..tostring(mark)) else return tostring(diff) end end function labelText(text, class) local span = mw.html.create('span') span:addClass('label-text') span:wikitext(text) return tostring(span) end function getImage(id, all, pst, prs, ftr, byd, second, normalJacketArgs, bydJacketArgs, normalJacketData, bydJacketData, bydyes, mold, imageConfig) --谢邀,这写的什么东西我自己都看不懂了 ———Star0 if not(id or all) then return nil end local container, tab = mw.html.create('div'), mw.html.create('div') local tab1, tab2, tab3, part1, part2, part3, jacket1, jacket2 container:addClass('container') tab:attr('id', 'tab-'..mold) tab:addClass('img-tab') local normalJacket, bydJacket if normalJacketArgs then if bydJacketArgs then normalJacket, bydJacket = normalJacketArgs, bydJacketArgs else normalJacket, bydJacket = normalJacketArgs, normalJacketArgs end else if normalJacketData == "" or normalJacketData == nil then normalJacket, bydJacket = '未知', '未知' else normalJacket, bydJacket = link({'画师', tostring(normalJacketData)}), link({'画师', tostring(bydJacketData)}) end end if pst and prs and ftr then tab1, tab2, tab3, part1, part2, part3 = mw.html.create('div'), mw.html.create('div'), mw.html.create('div'), mw.html.create('div'), mw.html.create('div'), mw.html.create('div') tab1:wikitext('Past') tab2:wikitext('Present') tab3:wikitext('Future') tab1:addClass('img-tab-part pst') tab2:addClass('img-tab-part prs') tab3:addClass('img-tab-part ftr') tab:wikitext(tostring(tab1)) tab:wikitext(tostring(tab2)) tab:wikitext(tostring(tab3)) container:wikitext(tostring(tab)) part1:wikitext('[[文件:'..pst..'|256px|none]]'..labelText('画师')..normalJacket) part2:wikitext('[[文件:'..prs..'|256px|none]]'..labelText('画师')..normalJacket) part3:wikitext('[[文件:'..ftr..'|256px|none]]'..labelText('画师')..normalJacket) part1:addClass('tab-text-'..mold) part2:addClass('tab-text-'..mold) part3:addClass('active tab-text-'..mold) container:wikitext(tostring(part1)) container:wikitext(tostring(part2)) container:wikitext(tostring(part3)) return tostring(container) end if byd and imageConfig~='nobyd' then tab1, tab2, part1, part2 = mw.html.create('div'), mw.html.create('div'), mw.html.create('div'), mw.html.create('div') tab1:wikitext('Normal') tab2:wikitext('Beyond') tab1:addClass('img-tab-part normal') tab2:addClass('img-tab-part byd') tab:wikitext(tostring(tab1)) tab:wikitext(tostring(tab2)) container:wikitext(tostring(tab)) part1:wikitext('[[文件:'..all..'|512px|none]]'..labelText('画师')..normalJacket) part2:wikitext('[[文件:'..byd..'|512px|none]]'..labelText('画师')..tostring(bydJacket)) part1:addClass('active tab-text-'..mold) part2:addClass('tab-text-'..mold) container:wikitext(tostring(part1)) container:wikitext(tostring(part2)) return tostring(container) end if second then tab1, tab2, part1, part2 = mw.html.create('div'), mw.html.create('div'), mw.html.create('div'), mw.html.create('div') tab1:wikitext('第一曲绘') tab2:wikitext('第二曲绘') tab1:addClass('img-tab-part normal') tab2:addClass('img-tab-part normal') tab:wikitext(tostring(tab1)) tab:wikitext(tostring(tab2)) container:wikitext(tostring(tab)) part1:wikitext('[[文件:'..all..'|512px|none]]'..labelText('画师')..normalJacket) part2:wikitext('[[文件:'..second..'|512px|none]]'..labelText('画师')..normalJacket) part1:addClass('active tab-text-'..mold) part2:addClass('tab-text-'..mold) container:wikitext(tostring(part1)) container:wikitext(tostring(part2)) return tostring(container) end if id and bydyes and imageConfig~='nobyd' then tab1, tab2, part1, part2 = mw.html.create('div'), mw.html.create('div'), mw.html.create('div'), mw.html.create('div') tab1:wikitext('Normal') tab2:wikitext('Beyond') tab1:addClass('img-tab-part normal') tab2:addClass('img-tab-part byd') tab:wikitext(tostring(tab1)) tab:wikitext(tostring(tab2)) container:wikitext(tostring(tab)) part1:wikitext('[[文件:Songs '..id..'.jpg|512px|none]]'..labelText('画师')..normalJacket) part2:wikitext('[[文件:Songs '..id..' byd.jpg|512px|none]]'..labelText('画师')..tostring(bydJacket)) part1:addClass('active tab-text-'..mold) part2:addClass('tab-text-'..mold) container:wikitext(tostring(part1)) container:wikitext(tostring(part2)) return tostring(container) end if id then return '<div>[[文件:Songs '..id..'.jpg|512px|none]]'..labelText('画师')..normalJacket..'</div>' end return '<div>[[文件:'..all..'|512px|none]]'..labelText('画师')..normalJacket..'</div>' end function merge(list) local merge if list[4] then merge = {1, 1, 1, 1} else merge = {1, 1, 1} end local o if list[4] then o = 4 else o = 3 end if list[4] then if list[4] == list[3] then merge[3] = merge[3] + merge[4] merge[4] = 0 end end if list[3] == list[2] then merge[2] = merge[2] + merge[3] merge[3] = 0 end if list[2] == list[1] then merge[1] = merge[1] + merge[2] merge[2] = 0 end for i = 1, o do if merge[i] == 0 then merge[i] = 'display:none' else merge[i] = 'grid-column-start: span '..merge[i] .. ';' end end return merge end function title(name,nameSecond,online) local result=name if nameSecond then result = result .. "<br>" .. nameSecond end if not(online) then result = result .. "<br>" .. '此曲目暂未上线' end return result end function p.main(frame) local args = getArgs(frame) return p._main(args) end function p._main(args) local data, dataNs = getData.getMobile(args['曲名'], args['id']), getData.getNS(args['曲名'], args['id']) local byd if args['Beyond等级'] or data('bydRating') then byd = true else byd = false end local getChartDesigner = { [1] = {'mobile', 'PastNote编写', 'note编写', 'pstChartDesigner'}, [2] = {'mobile', 'PresentNote编写', 'note编写', 'prsChartDesigner'}, [3] = {'mobile', 'FutureNote编写', 'note编写', 'ftrChartDesigner'}, [4] = {'mobile', 'BeyondNote编写', 'note编写', 'bydChartDesigner'}} local chartDesigner = {} for i, k in ipairs(getChartDesigner) do if args[k[2]] then chartDesigner[i] = args[k[2]] else if args[k[3]] then chartDesigner[i] = args[k[3]] else chartDesigner[i] = choice(link({'谱师', tostring(data(k[4]))}), data(k[4]), '', true) end end end local span if byd then span = merge({chartDesigner[1], chartDesigner[2], chartDesigner[3], chartDesigner[4]}) else span = merge({chartDesigner[1], chartDesigner[2], chartDesigner[3]}) end -- if args['曲名'] == 'Tempestissimo' then spanNs = {'grid-column-start: span 1', 'grid-column-start: span 1', 'grid-column-start: span 1', 'grid-column-start: span 1'} end local imageA = getImage(data('id'), args['图片'], args['Past曲绘'], args['Present曲绘'], args['Future曲绘'], args['Beyond曲绘'], args['第二曲绘图片'], args['画师'], args['Beyond画师'], data('ftrJacketDesigner'), data('bydJacketDesigner'), byd, 'a', args['图片显示控制']) local imageB = getImage(data('id'), args['图片'], args['Past曲绘'], args['Present曲绘'], args['Future曲绘'], args['Beyond曲绘'], args['第二曲绘图片'], args['画师'], args['Beyond画师'], data('ftrJacketDesigner'), data('bydJacketDesigner'), byd, 'b', args['图片显示控制']) local infoList = { [1] = { title(args['曲名'] or data('title') or dataNs('title'), args['第二曲名'], data('id') or dataNs('id') or #args > 1), {id = 'title'}}, [2] = { imageA or choice('[[文件:Songs '..tostring(data('id')) .. '.jpg|点此上传图片]]', data('id'), '[[文件:Songs '..tostring(dataNs('id')) .. '.jpg|点此上传图片]]', dataNs('id')), {id = 'top-image'}}, [3] = { imageB or choice('[[文件:Songs '..tostring(data('id')) .. '.jpg|点此上传图片]]', data('id'), '[[文件:Songs '..tostring(dataNs('id')) .. '.jpg|点此上传图片]]', dataNs('id')), {id = 'right-image'}}, [4] = { '曲目信息', {class = 'header'}}, [5] = { '曲师', {class = 'label'}}, [6] = { args['编曲'] or choice(link({'曲师', tostring(data('artist'))}) or link({'曲师', tostring(dataNs('artist'))}), data('artist') or dataNs('artist'), '', true), {class = 'data'}}, [7] = { '曲包', {class = 'label'}}, [8] = { args['曲包'] or choice('[['..tostring(choice(getData.pack({data('set')}), data('set'), getData.pack({dataNs('set')}), dataNs('set')))..']]',data('set') or dataNs('set'),'',true), {class = 'data'}}, [9] = { '时长', {class = 'label'}}, [10] = { args['时长'] or '空', {class = 'data'}}, [11] = { 'BPM', {class = 'label'}}, [12] = { args['BPM'] or data('bpm') or dataNs('bpm'), {class = 'data'}}, [13] = { '谱面信息', {class = 'header'}}, [14] = { '难度', {class = 'label'}}, [15] = { '[Past]', {class = 'pst-label'}}, [16] = { '[Present]', {class = 'prs-label'}}, [17] = { '[Future]', {class = 'ftr-label'}}, [18] = { bydMark(byd, args['曲名']), {class = 'byd-label'}}, [19] = { '等级', {class = 'label'}}, [20] = { args['Past等级'] or data('pstRating'), {class = 'pst-data'}}, [21] = { args['Present等级'] or data('prsRating'), {class = 'prs-data'}}, [22] = { args['Future等级'] or data('ftrRating'), {class = 'ftr-data'}}, [23] = { args['Beyond等级'] or data('bydRating'), {class = 'byd-data'}}, [24] = { 'note数量', {class = 'label'}}, [25] = { args['PastNote'] or '空', {class = 'pst-data'}}, [26] = { args['PresentNote'] or '空', {class = 'prs-data'}}, [27] = { args['FutureNote'] or '空', {class = 'ftr-data'}}, [28] = { args['BeyondNote'] or '空', {class = 'byd-data'}}, [29] = { '谱面设计', {class = 'label'}}, [30] = { chartDesigner[1] or '空', {class = 'pst-data'}, span[1]}, [31] = { chartDesigner[2] or '空', {class = 'prs-data'}, span[2]}, [32] = { chartDesigner[3] or '空', {class = 'ftr-data'}, span[3]}, [33] = { chartDesigner[4] or '空', {class = 'byd-data'}, span[4]}, [34] = { '谱面信息(Joy-Con)', {class = 'header ns', id = 'ns-play-header'}}, [35] = { '难度', {class = 'label ns'}}, [36] = { '[Past]', {class = 'pst-label ns'}}, [37] = { '[Present]', {class = 'prs-label ns'}}, [38] = { '[Future]', {class = 'ftr-label ns'}}, [39] = { bydMark(byd, args['曲名']), {class = 'byd-label ns'}}, [40] = { 'note数量', {class = 'label ns'}}, [41] = { args['PastNoteNS'] or args['PastNote'], {class = 'pst-data ns'}}, [42] = { args['PresentNoteNS'] or args['PresentNote'], {class = 'prs-data ns'}}, [43] = { args['FutureNoteNS'] or args['FutureNote'], {class = 'ftr-data ns'}}, [44] = { args['BeyondNoteNS'] or '空', {class = 'byd-data ns'}}, [45] = { '背景', {class = 'label'}}, [46] = { bgCov(args['背景']) or bgCov(data('bg')) or bgCov(dataNs('bg')), {class = 'data' , id = 'bg-normal' }}, [47] = { bgCov(args['Future背景']) , {class = 'data' , id = 'bg-ftr' }}, [48] = { '更新时间', {id = 'update-data-label', class = 'label'}}, [49] = { dateCov(args['更新版本'], args['更新时间'], labelText('移动版'), 'arg') or dateCov(data('version'), tonumber(data('date')), labelText('移动版'), 'data'), {id = 'mobile-date-normal', class = 'data'}}, [50] = { dateCov(args['Beyond更新版本'], args['Beyond更新时间'], labelText('移动版'), 'arg') or '空', {id = 'mobile-date-byd', class = 'data'}}, [51] = { dateCov(args['更新版本NS'], args['更新时间NS'], labelText('NS版'), 'arg') or dateCov(dataNs('version'), tonumber(dataNs('date')), labelText('NS版'), 'data'), {id = 'ns-date-normal', class = 'data ns'}}, [52] = { '空', {id = 'ns-date-byd', class = 'data ns'}}} local box = mw.html.create('div') --样式控制 box:addClass("arcaeabox") if byd then box:addClass("byd") end if dataNs('side') == 1 or args['侧'] == '1' then box:addClass("conflict") else if dataNs('side') == 2 or args['侧'] == '2' then box:addClass("colorless") else box:addClass("light") end end if args['更新版本NS'] or dataNs('id') then box:addClass("ns-box") if not(dataNs('pstChange') or dataNs('prsChange') or dataNs('ftrChange')) --(or byd) -- bdy单独分栏禁用 then box:addClass("ns-same") end end if args['Beyond更新版本'] and args['Beyond更新时间'] then box:addClass('mobile-byd-date') end if args['曲名'] == 'Tempestissimo' then box:addClass('ns-byd-date') box:addClass('ns-date-span') end if not(args['更新版本'] or args['更新时间'] or data('id')) then box:addClass('no-mobile') end if args['Future背景'] then box:addClass('bg-ftr') end --分类添加 local category = '' if args['更新版本NS'] or dataNs('id') then if args['更新版本'] or args['更新时间'] or data('id') then category = category..'[[分类:双平台曲目]]' else category = category..'[[分类:NS版曲目]]' end else category = category..'[[分类:移动版曲目]]' end if dataNs('pstChange') or dataNs('prsChange') or dataNs('ftrChange') then category = category..'[[分类:多模式谱面有差异的曲目]]' end if not(data('id') or dataNs('id') or #args > 1) then category = category..'[[分类:未登陆的曲目]]' end if (data('id') or dataNs('id')) and not(args['unset']) then category = category..'[[分类:'..tostring(choice(getData.pack({data('set')}), data('set'), getData.pack({dataNs('set')}), dataNs('set'))) .. '曲包曲目]]' if data('side') == 1 or dataNs('side') == 1 or args['侧'] == '1' then category = category..'[[分类:纷争侧曲目]]' elseif data('side') == 0 or dataNs('side') == 0 or args['侧'] == '0' then category = category..'[[分类:光芒侧曲目]]' else category = category..'[[分类:消色侧曲目]]' end category = category..'[[分类:PST'..infoList[20][1] .. '级曲目]]' category = category..'[[分类:PRS'..infoList[21][1] .. '级曲目]]' category = category..'[[分类:FTR'..infoList[22][1] .. '级曲目]]' if byd then category = category..'[[分类:BYD'..infoList[23][1] .. '级曲目]]' end category = category..'[[分类:采用'..(args['背景'] or data('bg') or dataNs('bg')) .. '背景的曲目]]' if args['曲目版本'] then category = category..'[[分类:'..args['曲目版本']:gusb('v', 'V') .. '添加的曲目]]' end if args['曲目版本NS'] then category = category..'[[分类:NS '..args['曲目版本NS']:gusb('v', 'V') .. '添加的曲目]]' end end --表格生成 local boxList = {} for _, v in ipairs(infoList) do box:tag('div'):attr(v[2]):cssText(v[3]):wikitext(v[1]):done() end -- 提示信息 local noticeText = '' if not(data('id') or dataNs('id')) then noticeText = noticeText..'<li>在Songlist中无法检查到此曲目。请尝试更新[[模板:Songlist]],检查页面名或填写正确的<code>曲名</code>参数。</li>' end local noticeTextNote = '' if not(args['PastNote']) then noticeTextNote = noticeTextNote..'<code>PastNote</code>' end if not(args['PresentNote']) then noticeTextNote = noticeTextNote..'<code>PresentNote</code>' end if not(args['FutureNote']) then noticeTextNote = noticeTextNote..'<code>FutureNote</code>' end if noticeTextNote ~= '' then noticeText = noticeText..'<li>此模板缺少'..noticeTextNote..'参数,此参数无法自动读取。</li>' end if not(args['时长']) then noticeText = noticeText..'<li>此模板缺少<code>时长</code>参数,此参数无法自动读取。</li>' end if not(args['更新版本']) and data('id') then noticeText = noticeText..'<li>此模板的移动版更新版本是未完整状态。请添加<code>更新版本</code>与<code>更新时间</code>参数。</li>' end if not(args['更新版本NS']) and dataNs('id') then noticeText = noticeText..'<li>此模板的NS版更新版本是未完整状态。请添加<code>更新版本NS</code>与<code>更新时间NS</code>参数。</li>' end local notice if noticeText ~= '' then notice = mw.getCurrentFrame():expandTemplate {title = 'Collapse', args = { ['标题'] = '曲目信息模板提示信息', ['状态'] = '折叠', ['标题文字方向'] = 'center', ['标题颜色'] = '#dddddd', ['内容颜色'] = '#eeeeee', ['内容样式'] = 'width:800px', ['style'] = 'display:table;width:200px', ['class'] = 'nomobile', ['内容'] = noticeText}} category = category..'[[分类:缺少参数的曲目信息模板]]' end if args['nocat'] then category = '' end return tostring(box)..choice(notice, notice, '', true)..category end return p
本页使用的模板:
Module:Songtable Last/doc
(
查看源代码
)
返回
Module:Songtable Last
。