Module:SkillNav/zh-hant: Difference between revisions

From Elwiki
No edit summary
No edit summary
 
(11 intermediate revisions by the same user not shown)
Line 5: Line 5:
function p.main(frame)
function p.main(frame)
     local args = getArgs(frame)
     local args = getArgs(frame)
    function inArgs(name)
        if (inArray(name, args)) then
            return true
        end
    end
     local isForceNav = args.forcenav ~= nil
     local isForceNav = args.forcenav ~= nil


    -- 準備技能類別
     local skill_types
     local skill_types
     if not isForceNav then
     if (not isForceNav) then
         skill_types = {{
         skill_types = {
             name = args.l_hyper,
             { name = args.l_hyper, abbr = 'HA' },
            abbr = 'HA'
             { name = args.l_secret, abbr = 'SeA' },
        }, {
             { name = args.l_special, abbr = 'SA' },
             name = args.l_secret,
             { name = args.l_active, abbr = 'A' },
            abbr = 'SeA'
             { 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_special,
             { name = args.l_buff, abbr = 'B' },
            abbr = 'SA'
             { name = args.l_passive, abbr = 'P' },
        }, {
             { name = args.l_demon, abbr = 'MD' },
             name = args.l_active,
             { name = '[[File:ForceIcon.png|16px]] ' .. args.l_demon, abbr = 'MDF', mod = true, link_suffix = '/Mod' },
            abbr = 'A'
            { name = args.l_master, abbr = 'MS' },
        }, {
            { name = args.l_couple, abbr = 'Wed' },
             name = args.l_mod,
            { name = args.l_row1, abbr = 'row1' },
            abbr = 'FC',
            { name = args.l_row2, abbr = 'row2' },
            mod = true,
             { name = args.l_row3, abbr = 'row3' },
            link_suffix = '/Mod'
             { name = args.l_row4, abbr = 'row4' }
        }, {
         }
             name = args.l_mod2,
    else
            abbr = 'FC2',
        skill_types = {
            mod = true,
            { name = args.l_force_active, abbr = 'FA3', type = 'third' },
            force_class = 'base'
            { name = args.l_force_passive, abbr = 'FP3', type = 'third' },
        }, {
             { name = args.l_force_active, abbr = 'FAM', type = 'master' },
             name = args.l_buff,
             { name = args.l_force_passive, abbr = 'FPM', type = 'master' }
            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
     end


    -- 設定角色名稱
     if (args.name == nil) then args.name = args.Name end
     if args.name == nil then
 
        args.name = args.Name
    local char_name = args.name
    if (isForceNav and args.parent_name ~= nil) then char_name = args.parent_name end
 
    local char_name_sanitized = ''
    for w in char_name:gmatch("%w+") do char_name_sanitized = char_name_sanitized .. w end
    if (isForceNav and args.parent_name ~= nil) then
        char_name_sanitized = 'ForceSkills-' .. char_name_sanitized
     end
     end


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


    -- 設定標題
     local header = skill_nav:tag('div'):addClass('skill-nav-header')
     local header = skill_nav:tag('div'):addClass('skill-nav-header')
     local colors = args.color or frame:expandTemplate{
     local colors = args.color or frame:expandTemplate{ title = 'ColorSel', args = { 'Character', args.char } }
        title = 'ColorSel',
        args = {'Character', args.char}
    }
     colors = colors:gsub('#', '#')
     colors = colors:gsub('#', '#')
     header:css('background-color', colors)
     header:css('background-color', colors)
    if (args.is_guild ~= nil) then
        header:css({ ['justify-content'] = 'center', ['background-color'] = colors })
    end


     -- 設定標題文字
     local lang_suffix = args.lang and '/' .. args.lang or ''
     if args.l_name == nil then
     local is_localized = args.lang ~= nil
         args.l_name = args.name
 
    if (not isForceNav and not args.is_guild) then
         header:wikitext(frame:expandTemplate{
            title = 'Face',
            args = {
                args.char, args.pic,
                link = args.name,
                lang = lang_suffix,
                scale = '0.85'
            }
        })
     end
     end
    if (args.l_name == nil) then args.l_name = args.name end
     local headerText = header:tag('span'):addClass('skill-nav-title')
     local headerText = header:tag('span'):addClass('skill-nav-title')
     if not isForceNav then
     if (not isForceNav) then
         headerText:wikitext('[[' .. args.name .. '|' .. args.l_name .. ']] - ' .. args.l_skills)
         headerText:wikitext('[[' .. args.name .. lang_suffix .. '|' .. args.l_name .. ']] - ' .. args.l_skills)
     else
     else
         headerText:wikitext(args.name)
         headerText:wikitext(args.name)
     end
     end


    -- 技能欄位內容
     local skill_nav_wrap = skill_nav:tag('div'):addClass('skill-nav-inner-wrap border-color')
     local skill_nav_wrap = skill_nav:tag('div'):addClass('skill-nav-inner-wrap border-color')
    if (args.type ~= nil) then skill_nav_wrap:addClass(args.type) end
    if ((args.type and string.find(args.type, 'mw%-collapsible')) or args.collapsible ~= nil) then
        skill_nav_wrap:attr('id', 'mw-customcollapsible-' .. char_name_sanitized)
        header:tag('div'):addClass('mw-customtoggle-' .. char_name_sanitized)
    end
    if (args.collapsible ~= nil) then skill_nav_wrap:addClass('mw-collapsible') end
    if (args.collapsed ~= nil) then skill_nav_wrap:addClass('mw-collapsed') end


    -- 產生技能導航內容
     for _, v2 in ipairs(skill_types) do
     for _, v2 in pairs(skill_types) do
        local name = v2.name
         local abbr = v2.abbr
         local abbr = v2.abbr
         local mod = v2.mod
         if (inArgs(abbr)) then
        local link_suffix = v2.link_suffix or ''
            local name = v2.name
            local type = v2.type
            local mod = v2.mod
            local link_suffix = v2.link_suffix or ''
            local force_class = v2.force_class
 
            local skills = split(args[abbr], ';')
            if abbr == 'Wed' then
                skills = {
                    'RelationSkill1.png', 'Extreme Heavenly Love' .. lang_suffix .. '|' .. args.l_couple_skill_name,
                    'RelationSkill2.png', 'Extreme Heavenly Bond' .. lang_suffix .. '|' .. args.l_soulmate_skill_name
                }
            end
 
            if abbr == 'MS' then
                local mc_skill_name = skills[5]
                local l_mc_skill_name = args.l_mc_skill_name or skills[5]
                mc_skill_name = mc_skill_name:gsub('ä', 'a')
                local mc_skill_name_head = '<br/>- ' .. l_mc_skill_name
                skills[7] = skills[4]
                skills[5] = skills[3]
                skills[3] = skills[2]
                skills[8] = mc_skill_name .. '/Stage 4' .. lang_suffix .. '|' .. args.l_stage .. ' 4'
                skills[6] = mc_skill_name .. '/Stage 3' .. lang_suffix .. '|' .. args.l_stage .. ' 3'
                skills[4] = mc_skill_name .. '/Stage 2' .. lang_suffix .. '|' .. args.l_stage .. ' 2'
                skills[2] = mc_skill_name .. '/Stage 1' .. lang_suffix .. '|' .. args.l_stage .. ' 1'
                name = name .. mc_skill_name_head
            end


        if args[abbr] then
            if abbr == 'FA3' or abbr == 'FAM' then
            local skills = split(args[abbr], ';') -- 技能列表
                local extra_head = skill_nav_wrap:tag('div'):addClass('skill-nav-sub-head skill-nav-extra-head border-color tone-7 color-normal-force-link')
             local i = 1
                if type == 'third' then
                    extra_head:wikitext('[[3rd Jobs' .. lang_suffix .. '|' .. args.l_third_job .. ']]')
                elseif type == 'master' then
                    extra_head:wikitext('[[Master Class' .. lang_suffix .. '|' .. args.l_master_class .. ']]')
                end
             end


             skill_nav_wrap:tag('div'):addClass('skill-nav-sub-head border-color tone-4'):wikitext(name)
             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')
             local content = skill_nav_wrap:tag('div'):addClass('skill-nav-skill-content border-color tone-6')


             for _, skill_data in pairs(skills) do
             local l_display_names = args['l_' .. abbr] and split(args['l_' .. abbr], ";") or nil
                 if skill_data then
            local i = 1
                    local skill_parts = split(skill_data, ',')
            while i <= #skills do
                     local skill_icon = trim(skill_parts[1]) -- 圖片檔案
                local icon = skills[i]
                     local skill_link = trim(skill_parts[2]) -- 跳轉連結
                local skill_name = skills[i + 1]
                     local skill_display_name = trim(skill_parts[3]) -- 顯示名稱
                local display_name
 
                 if icon == nil or skill_name == nil then break end
 
                if abbr == 'Wed' or abbr == 'MS' then
                    display_name = skill_name
                else
                     display_name = skills[i + 2] or skill_name
                     if is_localized and l_display_names ~= nil then
                        display_name = l_display_names[math.ceil(i / 3)]
                     end
                    display_name = display_name:gsub("%s%([%w%s%/]+%)", "")
                end


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


                     local skill_icon_div = skill_entry:tag('div'):addClass('skill-nav-image')
                if mod then
                     if mod then
                     skill_entry:wikitext('[[' .. skill_name .. link_suffix .. lang_suffix .. '|' .. display_name .. ']]')
                        skill_icon_div:wikitext(frame:expandTemplate{
                     skill_icon:wikitext(frame:expandTemplate{
                            title = 'Force',
                        title = 'Force',
                            args = {
                        args = { trim(icon), link = skill_name, language = args.lang, size = '3', class = force_class }
                                skill_icon,
                    })
                                link = skill_link,
                else
                                size = '3'
                    if abbr == 'MS' or abbr == 'Wed' then
                            }
                         skill_entry:wikitext('[[' .. display_name .. ']]')
                         })
                     else
                     else
                         skill_icon_div:wikitext('[[File:' .. skill_icon .. '|30px|link=' .. skill_link .. ']]')
                         skill_entry:wikitext('[[' .. skill_name .. lang_suffix .. '|' .. display_name .. ']]')
                     end
                     end
                    skill_icon:wikitext('[[File:' .. trim(icon) .. '|30px|link=' .. skill_name .. lang_suffix .. ']]')
                 end
                 end
                 i = i + 1
 
                 i = (abbr == 'Wed' or abbr == 'MS') and (i + 2) or (i + 3)
             end
             end
         end
         end
     end
     end


     return tostring(skill_nav)
    local force_nav = ''
    if (args.FS == 'true') then
        force_nav = frame:expandTemplate{
            title = 'ForceSkillNav' .. lang_suffix,
            args = {
                type = 'mw-collapsible mw-collapsed',
                char = colors,
                Color = args.color,
                parent_name = args.name
            }
        }
    end
 
     return tostring(skill_nav) .. force_nav
end
end


return p
return p

Latest revision as of 20:34, 23 April 2025

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)

    function inArgs(name)
        if (inArray(name, args)) then
            return true
        end
    end

    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' },
            { name = args.l_row1, abbr = 'row1' },
            { name = args.l_row2, abbr = 'row2' },
            { name = args.l_row3, abbr = 'row3' },
            { name = args.l_row4, abbr = 'row4' }
        }
    else
        skill_types = {
            { name = args.l_force_active, abbr = 'FA3', type = 'third' },
            { name = args.l_force_passive, abbr = 'FP3', type = 'third' },
            { name = args.l_force_active, abbr = 'FAM', type = 'master' },
            { name = args.l_force_passive, abbr = 'FPM', type = 'master' }
        }
    end

    if (args.name == nil) then args.name = args.Name end

    local char_name = args.name
    if (isForceNav and args.parent_name ~= nil) then char_name = args.parent_name end

    local char_name_sanitized = ''
    for w in char_name:gmatch("%w+") do char_name_sanitized = char_name_sanitized .. w end
    if (isForceNav and args.parent_name ~= nil) then
        char_name_sanitized = 'ForceSkills-' .. char_name_sanitized
    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('&#35;', '#')

    header:css('background-color', colors)
    if (args.is_guild ~= nil) then
        header:css({ ['justify-content'] = 'center', ['background-color'] = colors })
    end

    local lang_suffix = args.lang and '/' .. args.lang or ''
    local is_localized = args.lang ~= nil

    if (not isForceNav and not args.is_guild) then
        header:wikitext(frame:expandTemplate{
            title = 'Face',
            args = {
                args.char, args.pic,
                link = args.name,
                lang = lang_suffix,
                scale = '0.85'
            }
        })
    end

    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 .. lang_suffix .. '|' .. 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')
    if (args.type ~= nil) then skill_nav_wrap:addClass(args.type) end
    if ((args.type and string.find(args.type, 'mw%-collapsible')) or args.collapsible ~= nil) then
        skill_nav_wrap:attr('id', 'mw-customcollapsible-' .. char_name_sanitized)
        header:tag('div'):addClass('mw-customtoggle-' .. char_name_sanitized)
    end
    if (args.collapsible ~= nil) then skill_nav_wrap:addClass('mw-collapsible') end
    if (args.collapsed ~= nil) then skill_nav_wrap:addClass('mw-collapsed') end

    for _, v2 in ipairs(skill_types) do
        local abbr = v2.abbr
        if (inArgs(abbr)) then
            local name = v2.name
            local type = v2.type
            local mod = v2.mod
            local link_suffix = v2.link_suffix or ''
            local force_class = v2.force_class

            local skills = split(args[abbr], ';')
            if abbr == 'Wed' then
                skills = {
                    'RelationSkill1.png', 'Extreme Heavenly Love' .. lang_suffix .. '|' .. args.l_couple_skill_name,
                    'RelationSkill2.png', 'Extreme Heavenly Bond' .. lang_suffix .. '|' .. args.l_soulmate_skill_name
                }
            end

            if abbr == 'MS' then
                local mc_skill_name = skills[5]
                local l_mc_skill_name = args.l_mc_skill_name or skills[5]
                mc_skill_name = mc_skill_name:gsub('ä', 'a')
                local mc_skill_name_head = '<br/>- ' .. l_mc_skill_name
                skills[7] = skills[4]
                skills[5] = skills[3]
                skills[3] = skills[2]
                skills[8] = mc_skill_name .. '/Stage 4' .. lang_suffix .. '|' .. args.l_stage .. ' 4'
                skills[6] = mc_skill_name .. '/Stage 3' .. lang_suffix .. '|' .. args.l_stage .. ' 3'
                skills[4] = mc_skill_name .. '/Stage 2' .. lang_suffix .. '|' .. args.l_stage .. ' 2'
                skills[2] = mc_skill_name .. '/Stage 1' .. lang_suffix .. '|' .. args.l_stage .. ' 1'
                name = name .. mc_skill_name_head
            end

            if abbr == 'FA3' or abbr == 'FAM' then
                local extra_head = skill_nav_wrap:tag('div'):addClass('skill-nav-sub-head skill-nav-extra-head border-color tone-7 color-normal-force-link')
                if type == 'third' then
                    extra_head:wikitext('[[3rd Jobs' .. lang_suffix .. '|' .. args.l_third_job .. ']]')
                elseif type == 'master' then
                    extra_head:wikitext('[[Master Class' .. lang_suffix .. '|' .. args.l_master_class .. ']]')
                end
            end

            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')

            local l_display_names = args['l_' .. abbr] and split(args['l_' .. abbr], ";") or nil
            local i = 1
            while i <= #skills do
                local icon = skills[i]
                local skill_name = skills[i + 1]
                local display_name

                if icon == nil or skill_name == nil then break end

                if abbr == 'Wed' or abbr == 'MS' then
                    display_name = skill_name
                else
                    display_name = skills[i + 2] or skill_name
                    if is_localized and l_display_names ~= nil then
                        display_name = l_display_names[math.ceil(i / 3)]
                    end
                    display_name = display_name:gsub("%s%([%w%s%/]+%)", "")
                end

                local skill_entry = content:tag('div'):addClass('skill-nav-skill tone-7-hover color-normal-force-link tone-8-active')
                local skill_icon = skill_entry:tag('div'):addClass('skill-nav-image')

                if mod then
                    skill_entry:wikitext('[[' .. skill_name .. link_suffix .. lang_suffix .. '|' .. display_name .. ']]')
                    skill_icon:wikitext(frame:expandTemplate{
                        title = 'Force',
                        args = { trim(icon), link = skill_name, language = args.lang, size = '3', class = force_class }
                    })
                else
                    if abbr == 'MS' or abbr == 'Wed' then
                        skill_entry:wikitext('[[' .. display_name .. ']]')
                    else
                        skill_entry:wikitext('[[' .. skill_name .. lang_suffix .. '|' .. display_name .. ']]')
                    end
                    skill_icon:wikitext('[[File:' .. trim(icon) .. '|30px|link=' .. skill_name .. lang_suffix .. ']]')
                end

                i = (abbr == 'Wed' or abbr == 'MS') and (i + 2) or (i + 3)
            end
        end
    end

    local force_nav = ''
    if (args.FS == 'true') then
        force_nav = frame:expandTemplate{
            title = 'ForceSkillNav' .. lang_suffix,
            args = {
                type = 'mw-collapsible mw-collapsed',
                char = colors,
                Color = args.color,
                parent_name = args.name
            }
        }
    end

    return tostring(skill_nav) .. force_nav
end

return p