local getArgs = require('Module:Arguments').getArgs
local p = {}
-- 角色名稱與縮寫的對應表
local charaAbbrList = {
['花海咲季'] = 'hski',
['月村手毬'] = 'ttmr',
['藤田言音'] = 'fktn',
['有村麻央'] = 'amao',
['葛城莉莉婭'] = 'kllj',
['倉本千奈'] = 'kcna',
['紫雲清夏'] = 'ssmk',
['篠澤廣'] = 'shro',
['姬崎莉波'] = 'hrnm',
['花海佑芽'] = 'hume',
['秦谷美鈴'] = 'hmsz',
['十王星南'] = 'jsna',
['根緒亞紗裡'] = 'nasr'
}
-- 通過當前頁面匹配對應角色縮寫
local function getCharaAbbr(args, frame)
local pageTitle = frame:preprocess('{{FULLPAGENAME}}')
return charaAbbrList[pageTitle] or args['角色縮寫'] or 'fktn' -- 默認值
end
-- 檢查是否需要特殊處理卡圖
local function needsSpecialImage(cardName)
return mw.ustring.find(cardName or '', " '") ~= nil
end
-- 解析卡片信息
local function parseCardInfo(cardInfo)
if not cardInfo then return {'', '', ''} end
local parts = mw.text.split(cardInfo, ',')
for i, v in ipairs(parts) do
parts[i] = mw.text.trim(v) -- 去除前後空格
end
-- 確保總是返回3個值
return {
parts[1] or '',
parts[2] or '',
parts[3] or ''
}
end
function p.main(frame)
local args = getArgs(frame)
return p._main(args, frame)
end
function p._main(args, frame)
-- 定義共通樣式
local labelColor = args['LabelColor'] or '#F39800'
local sharedStyle = {
['data-label-color'] = labelColor,
['data-label-border-color'] = 'transparent',
['data-text-border-color'] = 'transparent',
['data-label-background-color'] = 'transparent',
['data-text-background-color'] = 'transparent',
['data-text-padding'] = '1px',
['data-label-color-side-reverse'] = 'yes'
}
-- 獲取角色縮寫
local charaAbbr = getCharaAbbr(args, frame)
-- 開始構建外層容器
local container = mw.html.create('div')
container
:addClass('Tabs bg_image auto_width')
:attr('style', 'background-size: 1500px;')
:attr('data-auto-width', 'yes')
-- 添加共通樣式屬性
for k, v in pairs(sharedStyle) do
container:attr(k, v)
end
-- 添加主標籤容器
local mainTab = container:tag('div'):addClass('Tab')
-- 循環處理3種卡片稀有度
for rarityToggle = 1, 3 do
local rarity, rarityIcon
if rarityToggle == 1 then
rarity = 'R'
rarityIcon = 'r'
elseif rarityToggle == 2 then
rarity = 'SR'
rarityIcon = 'sr'
else
rarity = 'SSR'
rarityIcon = 'ssr'
end
-- 檢查該稀有度是否存在卡片
local cardCount = tonumber(args[rarity .. '卡片數量'])
if cardCount > 0 then
-- 添加稀有度標籤
mainTab
:tag('div')
:addClass('TabLabelText')
:attr('style', 'margin-right: 3px')
:wikitext('[[File:imas_gakuen_icon_rarity_' .. rarityIcon .. '.png|35px|alt=' .. rarity .. '|link=]]')
:done()
-- 添加卡片內容區域
local contentDiv = mainTab:tag('div'):addClass('TabContentText')
local innerTabs = contentDiv:tag('div'):addClass('Tabs')
-- 添加共通樣式屬性
for k, v in pairs(sharedStyle) do
innerTabs:attr(k, v)
end
-- 循環處理該稀有度的每張卡片
for cardIndex = 1, cardCount do
-- 解析卡片信息
local cardInfoParts = parseCardInfo(args[rarity .. '卡片信息' .. cardIndex])
local cardId = cardInfoParts[1]
local cardPlan = cardInfoParts[2]
local cardEffect = cardInfoParts[3]
-- 處理計劃類型圖標
local planIcon
if cardPlan == '理性' or cardPlan == 'logic' then
planIcon = 'logic'
elseif cardPlan == '感性' or cardPlan == 'sense' then
planIcon = 'sense'
elseif cardPlan == '非凡' or cardPlan == 'extraordinary' then
planIcon = 'extraordinary'
else
planIcon = 'logic' -- 默認
end
-- 處理效果類型圖標
local effectIcon
if cardEffect == '1' or cardEffect == '好調' then
effectIcon = '1'
elseif cardEffect == '2' or cardEffect == '好印象' then
effectIcon = '2'
elseif cardEffect == '3' or cardEffect == '幹勁' then
effectIcon = '3'
elseif cardEffect == '4' or cardEffect == '集中' then
effectIcon = '4'
elseif cardEffect == '5' or cardEffect == '全力' then
effectIcon = '5'
elseif cardEffect == '6' or cardEffect == '堅決' then
effectIcon = '6'
else
effectIcon = '1' -- 默認
end
-- 獲取卡名
local cardName = args[rarity .. '卡名' .. cardIndex] or ''
local specialImage = needsSpecialImage(cardName)
-- 添加卡片標籤
local cardTab = innerTabs:tag('div'):addClass('Tab')
cardTab
:tag('div')
:addClass('TabLabelText')
:attr('style', 'font-weight: bold; margin-right: 3px')
:wikitext('[[File:imas_gakuen_icon_plan_' .. planIcon .. '.png|18px|link=]]' ..
'[[File:imas_gakuen_icon_effect_' .. effectIcon .. '.png|22px|link=]]' ..
cardName)
:done()
-- 添加卡片內容
local cardContent = cardTab:tag('div'):addClass('TabContentText')
-- 桌面端視圖:懸停切換
local desktopView = cardContent:tag('div'):addClass('nomobile hover-change')
desktopView
:tag('div')
:addClass('hover-change-before')
:wikitext('[[File:imas_gakuen_cidol-' .. charaAbbr .. '-' .. rarityToggle .. '-' .. cardId .. '_0-full.png|300px|alt=' .. cardName .. '|link=]]')
:done()
-- 根據是否需要特殊處理決定是否顯示不同的圖片
local afterDiv = desktopView:tag('div'):addClass('hover-change-after')
if specialImage then
-- 滿足特殊條件時使用覺醒前圖片
afterDiv:wikitext('[[File:imas_gakuen_cidol-' .. charaAbbr .. '-' .. rarityToggle .. '-' .. cardId .. '_0-full.png|300px|alt=' .. cardName .. '|link=]]')
else
-- 正常情況使用覺醒後圖片
afterDiv:wikitext('[[File:imas_gakuen_cidol-' .. charaAbbr .. '-' .. rarityToggle .. '-' .. cardId .. '_1-full.png|300px|alt=' .. cardName .. '|link=]]')
end
-- 移動端視圖:標籤頁切換
local mobileView = cardContent:tag('div'):addClass('mobileonly Tabs')
for k, v in pairs(sharedStyle) do
mobileView:attr(k, v)
end
local mobileTab = mobileView:tag('div'):addClass('Tab')
mobileTab
:tag('div')
:addClass('TabLabelText')
:wikitext('覺醒前')
:done()
:tag('div')
:addClass('TabContentText')
:wikitext('[[File:imas_gakuen_cidol-' .. charaAbbr .. '-' .. rarityToggle .. '-' .. cardId .. '_0-full.png|center|300px|alt=' .. cardName .. '|link=]]')
:done()
:tag('div')
:addClass('TabLabelText')
:wikitext('覺醒後')
:done()
local afterContent = mobileTab:tag('div'):addClass('TabContentText')
if specialImage then
-- 滿足特殊條件時使用覺醒前圖片
afterContent:wikitext('[[File:imas_gakuen_cidol-' .. charaAbbr .. '-' .. rarityToggle .. '-' .. cardId .. '_0-full.png|center|300px|alt=' .. cardName .. '|link=]]')
else
-- 正常情況使用覺醒後圖片
afterContent:wikitext('[[File:imas_gakuen_cidol-' .. charaAbbr .. '-' .. rarityToggle .. '-' .. cardId .. '_1-full.png|center|300px|alt=' .. cardName .. '|link=]]')
end
end
end
end
return tostring(container)
end
return p