Module:CharTree/zh-hant: Difference between revisions

From Elwiki
No edit summary
No edit summary
Line 3: Line 3:
local p = {}
local p = {}
local get_char_list = require('Module:CharList').main
local get_char_list = require('Module:CharList').main
-- 提取 base 名稱,用於圖片名稱(去掉語系碼)
local function get_icon_base_name(fullname)
    return fullname:match('^([^/]+)') or fullname
end


-- Main process
-- Main process
Line 18: Line 23:


     function split_lang(str)
     function split_lang(str)
         if is_localized then
         local lang_l = is_localized and lang or ''
            -- 按 "語言|顯示名稱" 分割,例如 "Elsword/zh-hant|艾索德"
        return is_localized and split(str, lang_l .. '|') or str
            local parts = mw.text.split(str, lang .. '|')
            if #parts == 2 then
                -- 進一步分割基本名稱和語言標識,例如 "Elsword/zh-hant" -> {"Elsword", "zh-hant"}
                local base_parts = mw.text.split(parts[1], '/')
                return {base_parts[1], parts[2]}  -- 返回 {基本名稱, 顯示名稱}
            else
                return {str, str}
            end
        else
            return {str, str}
        end
     end
     end


Line 59: Line 53:
                 end
                 end
             end
             end
           
         end
         end
 
       
         for job_iter, job_name in ipairs(jobs) do
         for job_iter, job_name in ipairs(jobs) do
             for path_iter, path_name in ipairs(job_name) do
             for path_iter, path_name in ipairs(job_name) do
                 -- Foreign languages
                 -- Foreign languages
                 local name_split = split_lang(path_name)
                 local icon_link_char_name = path_name;
                local base_job_name = name_split[1]       -- 基本名稱,例如 "Elsword"
                local normal_link_char_name = path_name;
                local display_job_name = name_split[2]   -- 顯示名稱,例如 "艾索德"
                if str_localized(path_name) then
 
                    local name_split = split_lang(path_name)
                 -- 設置圖標名稱和鏈接名稱
                    icon_link_char_name = get_icon_base_name(name_split[1]):gsub(':', '')
                 local icon_link_char_name = base_job_name:gsub(':', '') -- 移除可能的冒號
                    path_name = name_split[2]
                local normal_link_char_name = base_job_name .. lang      -- 鏈接名稱包含語言標識
                    normal_link_char_name = name_split[1] .. lang
 
                 end
                -- 生成圖標鏈接
                 icon_link_char_name = icon_link_char_name:gsub(':', '')
                 local icon_str = 'Icon - '
                 local icon_str = 'Icon - '
                 local link = '|link=' .. normal_link_char_name
                 local link = '|link=' .. normal_link_char_name
Line 84: Line 79:


                 local icon_with_link = '[[File:' .. icon_str .. icon_link_char_name .. '.png' .. link .. ']]'
                 local icon_with_link = '[[File:' .. icon_str .. icon_link_char_name .. '.png' .. link .. ']]'
                 local img = tree:tag('div'):addClass('char-banner-tree-image'):attr('data-class-name', display_job_name):wikitext(icon_with_link)
                 local img = tree:tag('div'):addClass('char-banner-tree-image'):attr('data-class-name', path_name):wikitext(icon_with_link)


                 if unreleased then
                 if unreleased then
Line 111: Line 106:
         local display_name = v;
         local display_name = v;
         local actual_name = v;
         local actual_name = v;
         if str_localized(v) then
         if str_localized(v) then actual_name = split_lang(v)[1]; display_name = split_lang(v)[2] end
            local name_split = split_lang(v)
            actual_name = name_split[1];
            display_name = name_split[2]
        end
         if actual_name == 'Lu/Ciel' then actual_name = 'LuCiel (Lu)' end
         if actual_name == 'Lu/Ciel' then actual_name = 'LuCiel (Lu)' end
         local base_icon = mw.html.create('div'):attr('data-base', actual_name):attr('data-display-base', display_name or actual_name):wikitext('[[File: Icon - ' .. actual_name .. '.png]]')
         local base_icon = mw.html.create('div'):attr('data-base', actual_name):attr('data-display-base', display_name or actual_name):wikitext('[[File: Icon - ' .. get_icon_base_name(actual_name) .. '.png]]')
         select_banner:node(base_icon)
         select_banner:node(base_icon)
     end
     end


     char_outer:wikitext(header):node(char_banner:node(select_banner))
     char_outer:wikitext(header):node(char_banner:node(select_banner))
   
    return styles .. tostring(char_outer)


    return styles .. tostring(char_outer)
end
end


return p
return p