模块

模块:事件

来自卡厄思梦境WIKI

律Rhyme留言 | 贡献2025年10月18日 (六) 12:22的版本

此模块的文档可以在模块:事件/doc创建

local p = {}
local eventData = require("Module:事件/data")

function p.main(frame)
    local html = mw.html.create()
    
    for eventName, eventInfo in pairs(eventData) do
        html:node(p.createEventCard(eventName, eventInfo))
    end
    
    return tostring(html)
end

function p.createEventCard(eventName, eventInfo)
    local card = mw.html.create('div')
    card:addClass('event-card')
    
    -- 容器
    local container = mw.html.create('div')
    container:addClass('event-container')
    
    -- 图片
    local imageDiv = mw.html.create('div')
    imageDiv:addClass('event-image')
    imageDiv:node(string.format('[[File:cc_%s.png|link=]]', eventInfo.id))
    container:node(imageDiv)
    
    -- 标题背景
    local titleBg = mw.html.create('div')
    titleBg:addClass('event-title-bg')
    container:node(titleBg)
    
    -- 标题
    local titleDiv = mw.html.create('div')
    titleDiv:addClass('event-title')
    titleDiv:wikitext(eventName)
    container:node(titleDiv)
    
    -- 选项容器
    local optionsDiv = mw.html.create('div')
    optionsDiv:addClass('event-options')
    
    for i, option in ipairs(eventInfo.option) do
        local optionDiv = mw.html.create('div')
        optionDiv:addClass('event-option')
        optionDiv:attr('data-option-index', i)
        optionDiv:attr('data-event-id', eventInfo.id)
        optionDiv:wikitext(option)
        optionsDiv:node(optionDiv)
    end
    
    container:node(optionsDiv)
    
    -- 效果显示区域
    local effectDiv = mw.html.create('div')
    effectDiv:addClass('event-effect')
    effectDiv:attr('id', 'effect-' .. eventInfo.id)
    container:node(effectDiv)
    
    -- 隐藏的效果数据
    local dataDiv = mw.html.create('div')
    dataDiv:addClass('event-data')
    dataDiv:attr('style', 'display:none;')
    
    for i, effect in ipairs(eventInfo.effect) do
        local effectData = mw.html.create('div')
        effectData:addClass('effect-data')
        effectData:attr('data-index', i)
        effectData:wikitext(effect)
        dataDiv:node(effectData)
    end
    
    container:node(dataDiv)
    
    card:node(container)
    return card
end

return p