Module:SkillNav/zh-hant

From Elwiki

Documentation for this module may be created at Module:SkillNav/zh-hant/doc

require('Module:CommonFunctions')
local getArgs = require('Module:Arguments').getArgs
local p = {}

function p.main(frame)
    local args = getArgs(frame)
    local isForceNav = args.forcenav ~= nil

    -- 準備技能類別
    local skill_types
    if not isForceNav then
        skill_types = {{
            name = args.l_hyper,
            abbr = 'HA'
        }, {
            name = args.l_secret,
            abbr = 'SeA'
        }, {
            name = args.l_special,
            abbr = 'SA'
        }, {
            name = args.l_active,
            abbr = 'A'
        }, {
            name = args.l_mod,
            abbr = 'FC',
            mod = true,
            link_suffix = '/Mod'
        }, {
            name = args.l_mod2,
            abbr = 'FC2',
            mod = true,
            force_class = 'base'
        }, {
            name = args.l_buff,
            abbr = 'B'
        }, {
            name = args.l_passive,
            abbr = 'P'
        }, {
            name = args.l_demon,
            abbr = 'MD'
        }, {
            name = '[[File:ForceIcon.png|16px]] ' .. args.l_demon,
            abbr = 'MDF',
            mod = true,
            link_suffix = '/Mod'
        }, {
            name = args.l_master,
            abbr = 'MS'
        }, {
            name = args.l_couple,
            abbr = 'Wed'
        }}
    end

    -- 設定角色名稱
    if args.name == nil then
        args.name = args.Name
    end

    local skill_nav = mw.html.create('div'):addClass('skill-nav')
    if isForceNav then
        skill_nav:addClass('force-nav')
    end

    -- 設定標題
    local header = skill_nav:tag('div'):addClass('skill-nav-header')
    local colors = args.color or frame:expandTemplate{
        title = 'ColorSel',
        args = {'Character', args.char}
    }
    colors = colors:gsub('#', '#')
    header:css('background-color', colors)

    -- 設定標題文字
    if args.l_name == nil then
        args.l_name = args.name
    end
    local headerText = header:tag('span'):addClass('skill-nav-title')
    if not isForceNav then
        headerText:wikitext('[[' .. args.name .. '|' .. args.l_name .. ']] - ' .. args.l_skills)
    else
        headerText:wikitext(args.name)
    end

    -- 技能欄位內容
    local skill_nav_wrap = skill_nav:tag('div'):addClass('skill-nav-inner-wrap border-color')

    -- 產生技能導航內容
    for _, v2 in pairs(skill_types) do
        local name = v2.name
        local abbr = v2.abbr
        local mod = v2.mod
        local link_suffix = v2.link_suffix or ''

        if args[abbr] then
            local skills = split(args[abbr], ';') -- 技能列表
            local i = 1

            skill_nav_wrap:tag('div'):addClass('skill-nav-sub-head border-color tone-4'):wikitext(name)
            local content = skill_nav_wrap:tag('div'):addClass('skill-nav-skill-content border-color tone-6')

            for _, skill_data in pairs(skills) do
                if skill_data then
                    local skill_parts = split(skill_data, ',')
                    local skill_icon = trim(skill_parts[1]) -- 圖片檔案
                    local skill_link = trim(skill_parts[2]) -- 跳轉連結
                    local skill_display_name = trim(skill_parts[3]) -- 顯示名稱

                    local skill_entry = content:tag('div')
                        :addClass('skill-nav-skill tone-7-hover color-normal-force-link tone-8-active')
                    skill_entry:wikitext('[[' .. skill_link .. '|' .. skill_display_name .. ']]')

                    local skill_icon_div = skill_entry:tag('div'):addClass('skill-nav-image')
                    if mod then
                        skill_icon_div:wikitext(frame:expandTemplate{
                            title = 'Force',
                            args = {
                                skill_icon,
                                link = skill_link,
                                size = '3'
                            }
                        })
                    else
                        skill_icon_div:wikitext('[[File:' .. skill_icon .. '|30px|link=' .. skill_link .. ']]')
                    end
                end
                i = i + 1
            end
        end
    end

    return tostring(skill_nav)
end

return p