Module:Songtable:修订间差异

添加1,164字节 、​ 2024年3月12日 (星期二)
Eternal难度名称
(修复 曲包分类不会读取参数的问题)
(Eternal难度名称)
(未显示3个用户的13个中间版本)
第40行: 第40行:
end
end


function bydMark(byd, name, inNs)
function diffMark(diffText, byd, name, inNs, nsByd)
    local diff, mark = mw.html.create('div'), mw.html.create('div')
    local diff, mark = mw.html.create('div'), mw.html.create('div')
    diff:wikitext('[Beyond]')
    diff:wikitext(diffText)
    mark:wikitext('仅移动版')
    mark:wikitext('仅移动版')
    if byd and inNs
    if byd and inNs and not(nsByd)
      then
      then
      return tostring(tostring(diff)..tostring(mark))
      return tostring(tostring(diff)..tostring(mark))
第177行: 第177行:


function merge(list)
function merge(list)
    local merge
    local span = {}
   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
    local lastUniqueIndex = nil
      if list[4] == list[3] then merge[3] = merge[3] + merge[4] merge[4] = 0 end
   local currentIndex = 1
 
   while currentIndex<=#list do
      if lastUniqueIndex and list[lastUniqueIndex] == list[currentIndex] then
       span[lastUniqueIndex] = span[lastUniqueIndex] + 1
       span[currentIndex] = 0
     else
       lastUniqueIndex = currentIndex
       span[currentIndex] = 1
     end
     currentIndex = currentIndex + 1
    end
    end


    if list[3] == list[2] then merge[2] = merge[2] + merge[3] merge[3] = 0 end
    local merge = {}
 
   if list[2] == list[1] then merge[1] = merge[1] + merge[2] merge[2] = 0 end


    for i = 1, o do
    for i = 1, #list do
      if merge[i] == 0 then
      if span[i] == 0 then
        merge[i] = 'display:none'
        merge[i] = 'display:none'
      else
      else
        merge[i] = 'grid-column-start: span '..merge[i] .. ';'
        merge[i] = 'grid-column-start: span '..span[i] .. ';'
      end
      end
    end
    end
第217行: 第222行:
    -- 获取数据查找函数
    -- 获取数据查找函数
    local data, dataNs
    local data, dataNs
    if args["id"]
    if args["id"] and args["id"] ~= ""
    then
    then
      data, dataNs = getData.singleSongInformation(args['id'], "id", "mobile"), getData.singleSongInformation(args['id'], "id", "ns")
      data, dataNs = getData.singleSongInformation(args['id'], "id", "mobile"), getData.singleSongInformation(args['id'], "id", "ns")
第234行: 第239行:
      inNs = true
      inNs = true
    end
    end
 
  
    -- 判断byd谱面是否存在 ;先假定NS不会有beyond等级
    -- 判断byd谱面是否存在。
    local byd
    local byd, nsByd
    if args['Beyond等级'] or data('bydRating') then byd = true else byd = false end
    if args['Beyond等级'] or data('bydRating') then byd = true else byd = false end
   if args['Beyond等级NS'] or dataNs('bydRating') then nsByd = true else nsByd = false end
   -- 判断etr谱面是否存在;先假定NS不会有eternal等级。
   local etr
   if args['Eternal等级'] or data('etrRating') then etr = true else etr = false end


    -- 处理谱师参数,未填写的等级谱师向前级复制(向下兼容)
    -- 处理谱师参数,未填写的等级谱师向前级复制(向下兼容)
    local getChartDesigner = {
    local getChartDesigner = {
     [1] =
      {'PastNote编写', 'note编写', 'pstChartDesigner'},
      {'mobile', 'PastNote编写', 'note编写', 'pstChartDesigner'},
      {'PresentNote编写', 'note编写', 'prsChartDesigner'},
     [2] =
      {'FutureNote编写', 'note编写', 'ftrChartDesigner'},
      {'mobile', 'PresentNote编写', 'note编写', 'prsChartDesigner'},
     {'BeyondNote 编写', 'note编写', 'bydChartDesigner'}
     [3] =
    }
      {'mobile', 'FutureNote 编写', 'note编写', 'ftrChartDesigner'},
   -- 假定 etr 与 byd 不会同时出现
    [4] = 
   if etr then
     {'mobile', 'BeyondNote 编写', 'note编写', 'bydChartDesigner'}}
     getChartDesigner[4]={'EternalNote 编写', 'note编写', 'etrChartDesigner'}
   end


    local chartDesigner = {}
    local chartDesigner = {}
    for i, k in ipairs(getChartDesigner)
    for i, k in ipairs(getChartDesigner)
      do
      do
        if args[k[2]]
        if args[k[1]] then
          then
          chartDesigner[i] = args[k[1]]
       elseif args[k[2]] then
          chartDesigner[i] = args[k[2]]
          chartDesigner[i] = args[k[2]]
        else
        else
          if args[k[3]]
          chartDesigner[i] = choice(link({'谱师', tostring(data(k[3]))}), data(k[3]), '', true)
           then
           chartDesigner[i] = args[k[3]]
         else
           chartDesigner[i] = choice(link({'谱师', tostring(data(k[4]))}), data(k[4]), '', true)
         end
        end
        end
    end
    end
第268行: 第274行:
    -- 依据byd是否存在处理单元格合并参数。
    -- 依据byd是否存在处理单元格合并参数。
    local span
    local span
    if byd then
    if byd or etr then
      span = merge({chartDesigner[1], chartDesigner[2], chartDesigner[3], chartDesigner[4]})
      span = merge({chartDesigner[1], chartDesigner[2], chartDesigner[3], chartDesigner[4]})
    else
    else
第278行: 第284行:
    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 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 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 pstRating = args['Past等级'] or data('pstRating')
   local prsRating = args['Present等级'] or data('prsRating')
   local ftrRating = args['Future等级'] or data('ftrRating')
   local bydRating = args['Beyond等级'] or data('bydRating')
   local etrRating = args['Eternal等级'] or data('etrRating')
   local additionalDiffMark
   if byd then
     additionalDiffMark = diffMark('[Beyond]', byd, args['曲名'], inNs, nsByd)
   elseif etr then
     additionalDiffMark = diffMark('[Eternal]', etr, args['曲名'], inNs, false)
   end
   local additionalDiffMarkClass='byd-label'


    -- 生成Grid表格的信息表;在后文中依据格式进行生成。
    -- 生成Grid表格的信息表;在后文中依据格式进行生成。
   --
 
    local infoList = {
    local infoList = {
     [1] =
      { title(args['曲名'] or data('title') or dataNs('title'), args['第二曲名'], data('id') or dataNs('id') or #args > 1), { id = 'title'}},
      { 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'}},
      { 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'}},
      { imageB or choice('[[文件:Songs '..tostring(data('id')) .. '.jpg|点此上传图片]]', data('id'), '[[文件:Songs '..tostring(dataNs('id')) .. '.jpg|点此上传图片]]', dataNs('id')), { id = 'right-image'}},
     [4] =
      { '曲目信息', {class = 'header'} },
      { '曲目信息', {class = 'header'} },
     [5] =
      { '曲师', { class = 'label'}},
      { '曲师', { class = 'label'}},
     [6] =
      { args['编曲'] or choice(link({'曲师', tostring(data('artist'))}) or link({'曲师', tostring(dataNs('artist'))}), data('artist') or dataNs('artist'), '', true), { class = 'data'}},
      { args['编曲'] or choice(link({'曲师', tostring(data('artist'))}) or link({'曲师', tostring(dataNs('artist'))}), data('artist') or dataNs('artist'), '', true), { class = 'data'}},
     [7] =
      { '曲包', { class = 'label'}},
      { '曲包', { class = 'label'}},
     [8] =
      { args['曲包'] or choice('[['..tostring(choice(getData.packName(data('set')), data('set'), getData.packName(dataNs('set')), dataNs('set')))..']]',data('set') or dataNs('set'),'',true), { class = 'data'}},
      { args['曲包'] or choice('[['..tostring(choice(getData.packName(data('set')), data('set'), getData.packName(dataNs('set')), dataNs('set')))..']]',data('set') or dataNs('set'),'',true), { class = 'data'}},
     [9] =
      { '时长', { class = 'label'}},
      { '时长', { class = 'label'}},
     [10] =
      { args['时长'] or '空', { class = 'data'}},
      { args['时长'] or '空', { class = 'data'}},
     [11] =
      { 'BPM', { class = 'label'}},
      { 'BPM', { class = 'label'}},
     [12] =
      { args['BPM'] or data('bpm') or dataNs('bpm'), { class = 'data'}},
      { args['BPM'] or data('bpm') or dataNs('bpm'), { class = 'data'}},
     [13] =
      { '谱面信息', { class = 'header'}},
      { '谱面信息', { class = 'header'}},
     [14] =
      { '难度', { class = 'label'}},
      { '难度', { class = 'label'}},
     [15] =
      { '[Past]', { class = 'pst-label'}},
      { '[Past]', { class = 'pst-label'}},
     [16] =
      { '[Present]', { class = 'prs-label'}},
      { '[Present]', { class = 'prs-label'}},
     [17] =
      { '[Future]', { class = 'ftr-label'}},
      { '[Future]', { class = 'ftr-label'}},
     [18] =
      { additionalDiffMark, { class = additionalDiffMarkClass}},
      { bydMark(byd, args['曲名'], inNs), { class = 'byd-label'}},
     [19] =
      { '等级', { class = 'label'}},
      { '等级', { class = 'label'}},
     [20] =
      { pstRating, { class = 'pst-data'}},
      { args['Past等级'] or data('pstRating'), { class = 'pst-data'}},
      { prsRating, { class = 'prs-data'}},
     [21] =
      { ftrRating, { class = 'ftr-data'}},
      { args['Present等级'] or data('prsRating'), { class = 'prs-data'}},
      { bydRating or etrRating, { class = 'byd-data'}},
     [22] =
      { args['Future等级'] or data('ftrRating'), { class = 'ftr-data'}},
     [23] =
      { args['Beyond等级'] or data('bydRating'), { class = 'byd-data'}},
     [24] =
      { 'note数量', { class = 'label'}},
      { 'note数量', { class = 'label'}},
     [25] =
      { args['PastNote'] or '空', { class = 'pst-data'}},
      { args['PastNote'] or '空', { class = 'pst-data'}},
     [26] =
      { args['PresentNote'] or '空', { class = 'prs-data'}},
      { args['PresentNote'] or '空', { class = 'prs-data'}},
     [27] =
      { args['FutureNote'] or '空', {class = 'ftr-data'}},
      { args['FutureNote'] or '空', {class = 'ftr-data'}},
      [28] =
      { args['BeyondNote'] or args['EternalNote'] or '空', { class = 'byd-data'}},
     { args['BeyondNote'] or '空', { class = 'byd-data'}},
     [29] =
      { '谱面设计', { class = 'label'}},
      { '谱面设计', { class = 'label'}},
     [30] =
      { chartDesigner[1] or '空', { class = 'pst-data'}, span[1]},
      { chartDesigner[1] or '空', { class = 'pst-data'}, span[1]},
     [31] =
      { chartDesigner[2] or '空', { class = 'prs-data'}, span[2]},
      { chartDesigner[2] or '空', { class = 'prs-data'}, span[2]},
     [32] =
      { chartDesigner[3] or '空', { class = 'ftr-data'}, span[3]},
      { chartDesigner[3] or '空', { class = 'ftr-data'}, span[3]},
     [33] =
      { chartDesigner[4] or '空', { class = 'byd-data'}, span[4]},
      { chartDesigner[4] or '空', { class = 'byd-data'}, span[4]},
     [34] =
      { '谱面信息(Joy-Con)', { class = 'header ns', id = 'ns-play-header'}},
      { '谱面信息(Joy-Con)', { class = 'header ns', id = 'ns-play-header'}},
     [35] =
      { '难度', { class = 'label ns'}},
      { '难度', { class = 'label ns'}},
     [36] =
      { '[Past]', { class = 'pst-label ns'}},
      { '[Past]', { class = 'pst-label ns'}},
     [37] =
      { '[Present]', { class = 'prs-label ns'}},
      { '[Present]', { class = 'prs-label ns'}},
     [38] =
      { '[Future]', { class = 'ftr-label ns'}},
      { '[Future]', { class = 'ftr-label ns'}},
     [39] =
      { additionalDiffMark, { class = additionalDiffMarkClass..' ns'}},
      { bydMark(byd, args['曲名'], inNs), { class = 'byd-label ns'}},
     [40] =
      { 'note数量', { class = 'label ns'}},
      { 'note数量', { class = 'label ns'}},
     [41] =
      { args['PastNoteNS'] or args['PastNote'], { class = 'pst-data ns'}},
      { args['PastNoteNS'] or args['PastNote'], { class = 'pst-data ns'}},
     [42] =
      { args['PresentNoteNS'] or args['PresentNote'], { class = 'prs-data ns'}},
      { args['PresentNoteNS'] or args['PresentNote'], { class = 'prs-data ns'}},
     [43] =
      { args['FutureNoteNS'] or args['FutureNote'], { class = 'ftr-data ns'}},
      { args['FutureNoteNS'] or args['FutureNote'], { class = 'ftr-data ns'}},
     [44] =
      { args['BeyondNoteNS'] or '空', { class = 'byd-data ns'}},
      { args['BeyondNoteNS'] or '空', { class = 'byd-data ns'}},
     [45] =
      { '背景', { class = 'label'}},
      { '背景', { class = 'label'}},
     [46] =
      { bgCov(args['背景']) or bgCov(data('bg')) or bgCov(dataNs('bg')), { class = 'data' , id = 'bg-normal' }},
      { bgCov(args['背景']) or bgCov(data('bg')) or bgCov(dataNs('bg')), { class = 'data' , id = 'bg-normal' }},
     [47] =
      { bgCov(args['Future背景']) , { class = 'data' , id = 'bg-ftr' }},
      { bgCov(args['Future背景']) , { class = 'data' , id = 'bg-ftr' }},
     [48] =
      { '更新时间', { id = 'update-data-label', class = 'label'}},
      { '更新时间', { 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'}},
      { 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 dateCov(args['Eternal更新版本'], args['Eternal 更新时间'], labelText('移动版'), 'arg') or '空', { id = 'mobile-date-byd', class = 'data'}},
      { 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'}},
      { 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'}}
      { '空', { id = 'ns-date-byd', class = 'data ns'}}
    }
    }
第392行: 第360行:
    --样式控制
    --样式控制
    box:addClass("arcaeabox")
    box:addClass("arcaeabox")
    if byd then box:addClass("byd") end
   -- 假定 etr 与 byd 不会同时出现,etr 暂时复用 byd 的逻辑
    if byd or etr then box:addClass("byd") end
    if dataNs('side') == 1 or args['侧'] == '1'
    if dataNs('side') == 1 or args['侧'] == '1'
    then
    then
第406行: 第375行:
      end
      end
    end
    end
    if args['Beyond更新版本'] and args['Beyond更新时间'] then box:addClass('mobile-byd-date') end
   -- 假定 etr 与 byd 不会同时出现,etr 暂时复用 byd 的逻辑
    if args['曲名'] == 'Tempestissimo' then box:addClass('ns-byd-date') box:addClass('ns-date-span') end
    if (args['Beyond更新版本'] and args['Beyond更新时间']) or (args['Eternal更新版本'] and args['Eternal更新时间'])  then box:addClass('mobile-byd-date') end
    if nsByd 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 not(args['更新版本'] or args['更新时间'] or data('id')) then box:addClass('no-mobile') end
    if args['Future背景'] then box:addClass('bg-ftr') end
    if args['Future背景'] then box:addClass('bg-ftr') end
第426行: 第396行:
    end
    end


    if dataNs('pstChange') or dataNs('prsChange') or dataNs('ftrChange') then category = category..'[[分类:多模式谱面有差异的曲目]]' end
    if dataNs('pstChange') or dataNs('prsChange') or dataNs('ftrChange') or dataNs('bydChange') then category = category..'[[分类:多模式谱面有差异的曲目]]' end


    if not(data('id') or dataNs('id') or #args > 1) then category = category..'[[分类:未登陆的曲目]]' end
    if not(data('id') or dataNs('id') or #args > 1) then category = category..'[[分类:未登陆的曲目]]' end
第432行: 第402行:
    if (data('id') or dataNs('id')) and not(args['unset'])
    if (data('id') or dataNs('id')) and not(args['unset'])
      then
      then
      category = category..'[[分类:'..tostring(infoList[8]) .. '曲包曲目]]'
      
  
     -- 如果没有更新packlist,不自动进行分类。
     if choice(getData.packName(data('set')), data('set'), getData.packName(dataNs('set')), dataNs('set'))
       then
       category = category..'[[分类:'..tostring(choice(getData.packName(data('set')), data('set'), getData.packName(dataNs('set')), dataNs('set'))) .. '曲包曲目]]'
     end
 
      if data('side') == 1 or dataNs('side') == 1 or args['侧'] == '1'
      if data('side') == 1 or dataNs('side') == 1 or args['侧'] == '1'
        then
        then
第444行: 第419行:
      end
      end


     category = category..'[[分类:PST'..infoList[20][1] .. '级曲目]]'
if pstRating then
     category = category..'[[分类:PRS'..infoList[21][1] .. '级曲目]]'
     category = category..'[[分类:PST'..pstRating .. '级曲目]]'
     category = category..'[[分类:FTR'..infoList[22][1] .. '级曲目]]'
end
      if byd then category = category..'[[分类:BYD'..infoList[23][1] .. '级曲目]]' end
   if prsRating then
     category = category..'[[分类:PRS'..prsRating .. '级曲目]]'
   end
   if ftrRating then
     category = category..'[[分类:FTR'..ftrRating .. '级曲目]]'
     end
      if byd and bydRating then category = category..'[[分类:BYD'..bydRating .. '级曲目]]' end
     if etr and etrRating then category = category..'[[ 分类:ETR'..etrRating .. '级曲目]]' end


      category = category..'[[分类:采用'..(args['背景'] or data('bg') or dataNs('bg')) .. '背景的曲目]]'
      category = category..'[[分类:采用'..(args['背景'] or data('bg') or dataNs('bg')) .. '背景的曲目]]'
第468行: 第450行:
      then
      then
      noticeText = noticeText..'<li>在Songlist中无法检查到此曲目。请尝试更新[[模板:Songlist]],检查页面名或填写正确的<code>曲名</code>参数。</li>'
      noticeText = noticeText..'<li>在Songlist中无法检查到此曲目。请尝试更新[[模板:Songlist]],检查页面名或填写正确的<code>曲名</code>参数。</li>'
   end
   if not(choice(getData.packName(data('set')), data('set'), getData.packName(dataNs('set')), dataNs('set')))
     then
     noticeText = noticeText..'<li>未更新Packlist。曲目信息模板无法进行曲包分类。</li>'
    end
    end


第495行: 第482行:
      noticeText = noticeText..'<li>此模板的NS版更新版本是未完整状态。请添加<code>更新版本NS</code>与<code>更新时间NS</code>参数。</li>'
      noticeText = noticeText..'<li>此模板的NS版更新版本是未完整状态。请添加<code>更新版本NS</code>与<code>更新时间NS</code>参数。</li>'
    end
    end
   -- noticeText = noticeText..'<li>调试信息:'..mw.dumpObject(nil)..'</li>'


    local notice
    local notice
1,269

个编辑