模块

事件:修订间差异

来自卡厄思梦境WIKI

律Rhyme留言 | 贡献
无编辑摘要
律Rhyme留言 | 贡献
无编辑摘要
 
(未显示同一用户的3个中间版本)
第3行: 第3行:


function p.main(frame)
function p.main(frame)
     local output = mw.html.create('div')
     local output = {}
    output:addClass('event-container')
      
      
     -- 遍历所有事件
     -- 遍历所有事件
     for eventName, eventInfo in pairs(eventData) do
     for eventName, eventInfo in pairs(eventData) do
         output:node(p.createEventCard(eventName, eventInfo))
         table.insert(output, p.renderEvent(frame, eventName, eventInfo))
     end
     end
      
      
     return tostring(output)
     return table.concat(output, '\n')
end
end


function p.createEventCard(eventName, eventInfo)
function p.renderEvent(frame, eventName, eventInfo)
     local card = mw.html.create('div')
     local html = mw.html.create('div')
         :addClass('event-card')
         :addClass('event-container')
        :css('position', 'relative')
         :attr('data-event-id', eventInfo.id)
         :css('width', '375px')
        :css('height', '270px')
        :css('margin-bottom', '20px')
        :css('display', 'inline-block')
        :css('vertical-align', 'top')
        :css('margin-right', '10px')
      
      
     -- 背景层
     -- 背景层
     card:tag('div')
     html:tag('div'):addClass('event-background')
        :css('position', 'absolute')
        :css('top', '160px')
        :css('left', '5px')
        :css('width', '365px')
        :css('height', '110px')
        :css('background-color', '#343434')
        :css('border-radius', '0px 0px 8px 8px')
      
      
     -- 图片
     -- 图片
     local imageFile = 'cc_' .. eventInfo.id .. '.png'
     local imageLink = eventName
     card:tag('div')
     html:tag('div')
         :css('position', 'absolute')
         :addClass('event-image')
         :css('top', '0px')
         :wikitext(string.format('[[File:cc_%s.png|link=%s]]', eventInfo.id, imageLink))
        :css('left', '0px')
        :wikitext('[[File:' .. imageFile .. '|link=]]')
      
      
     -- 标题背景
     -- 标题背景
     card:tag('div')
     html:tag('div'):addClass('event-title-bg')
        :css('position', 'absolute')
        :css('top', '135px')
        :css('left', '5px')
        :css('width', '365px')
        :css('height', '30px')
        :css('background-color', 'rgba(0,0,0,0.3)')
        :css('border-radius', '0px 0px 8px 8px')
      
      
     -- 标题文字
     -- 标题
     card:tag('div')
     html:tag('div')
         :css('position', 'absolute')
         :addClass('event-title')
        :css('top', '140px')
        :css('left', '5px')
        :css('width', '365px')
        :css('height', '30px')
        :css('color', 'white')
        :css('text-align', 'center')
         :wikitext(eventName)
         :wikitext(eventName)
      
      
     -- 选项按钮
     -- 选项容器
     local startTop = 170
     local optionsContainer = html:tag('div'):addClass('event-options')
   
    -- 渲染选项
     for i, optionText in ipairs(eventInfo.option) do
     for i, optionText in ipairs(eventInfo.option) do
         local optionDiv = card:tag('div')
         -- 选项
        optionsContainer:tag('div')
             :addClass('event-option')
             :addClass('event-option')
             :attr('data-event', eventName)
             :attr('data-option-index', i)
            :attr('data-option', i)
            :css('position', 'absolute')
            :css('top', startTop + (i-1)*35 .. 'px')
            :css('left', '10px')
            :css('width', '355px')
            :css('min-height', '30px')
            :css('color', 'white')
            :css('text-align', 'left')
            :css('padding', '5px 0px 0px 10px')
            :css('background-color', 'rgba(255,255,255,0.3)')
            :css('border-radius', '4px')
            :css('cursor', 'pointer')
             :wikitext(optionText)
             :wikitext(optionText)
          
          
         -- 效果文本(默认隐藏)
         -- 结果显示区域
         local effectDiv = card:tag('div')
         local effectDiv = optionsContainer:tag('div')
             :addClass('event-effect')
             :addClass('event-effect')
             :attr('data-event', eventName)
             :attr('data-effect-index', i)
            :attr('data-option', i)
       
            :css('position', 'absolute')
        -- 处理结果文本
            :css('top', startTop + (i-1)*35 + 35 .. 'px')
        local effectText = eventInfo.effect[i]
             :css('left', '10px')
        if effectText then
             :css('width', '345px')
             if frame then
             :css('display', 'none')
                effectText = frame:preprocess(effectText)
            :css('color', '#FFD700')
             end
            :css('text-align', 'left')
             effectDiv:wikitext(effectText)
            :css('padding', '5px 10px')
        end
            :css('background-color', 'rgba(0,0,0,0.5)')
    end
            :css('border-radius', '4px')
   
            :css('font-size', '0.9em')
    return tostring(html)
            :wikitext('' .. eventInfo.effect[i])
end
 
-- 单独显示某个事件
function p.show(frame)
    local eventName = frame.args[1]
    if not eventName or not eventData[eventName] then
        return '错误:未找到指定的事件'
     end
     end
      
      
     return card
     return p.renderEvent(frame, eventName, eventData[eventName])
end
end


return p
return p

2025年10月18日 (六) 13:38的最新版本

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

local p = {}
local eventData = mw.loadData('模块:事件/data')

function p.main(frame)
    local output = {}
    
    -- 遍历所有事件
    for eventName, eventInfo in pairs(eventData) do
        table.insert(output, p.renderEvent(frame, eventName, eventInfo))
    end
    
    return table.concat(output, '\n')
end

function p.renderEvent(frame, eventName, eventInfo)
    local html = mw.html.create('div')
        :addClass('event-container')
        :attr('data-event-id', eventInfo.id)
    
    -- 背景层
    html:tag('div'):addClass('event-background')
    
    -- 图片
    local imageLink = eventName
    html:tag('div')
        :addClass('event-image')
        :wikitext(string.format('[[File:cc_%s.png|link=%s]]', eventInfo.id, imageLink))
    
    -- 标题背景
    html:tag('div'):addClass('event-title-bg')
    
    -- 标题
    html:tag('div')
        :addClass('event-title')
        :wikitext(eventName)
    
    -- 选项容器
    local optionsContainer = html:tag('div'):addClass('event-options')
    
    -- 渲染选项
    for i, optionText in ipairs(eventInfo.option) do
        -- 选项
        optionsContainer:tag('div')
            :addClass('event-option')
            :attr('data-option-index', i)
            :wikitext(optionText)
        
        -- 结果显示区域
        local effectDiv = optionsContainer:tag('div')
            :addClass('event-effect')
            :attr('data-effect-index', i)
        
        -- 处理结果文本
        local effectText = eventInfo.effect[i]
        if effectText then
            if frame then
                effectText = frame:preprocess(effectText)
            end
            effectDiv:wikitext(effectText)
        end
    end
    
    return tostring(html)
end

-- 单独显示某个事件
function p.show(frame)
    local eventName = frame.args[1]
    if not eventName or not eventData[eventName] then
        return '错误:未找到指定的事件'
    end
    
    return p.renderEvent(frame, eventName, eventData[eventName])
end

return p