Module:CharTree/zh-hant

From Elwiki

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

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

-- 讀取角色列表
local function get_char_list()
    local char_page = mw.title.new("MediaWiki:NavSidebar/zh-hant/Character")
    local char_content = char_page and char_page:getContent() or ""
    
    local char_list = {}
    for line in char_content:gmatch("[^\r\n]+") do
        local char_name = line:match("%[%[(.-)%]%]")
        if char_name then
            table.insert(char_list, char_name)
        end
    end
    return char_list
end

-- Main process
function p.main(frame)
    local args = getArgs(frame);
    local char_outer = mw.html.create('div'):addClass('character-banner-outer'):attr('data-lang', args.lang)
    local char_banner = mw.html.create('div'):addClass('character-banner-wrap border-color tone-2')
    local char_order = get_char_list()
    local lang = ''
    if args.lang then lang = '/' .. args.lang end

    local function split_lang(str)
        return str
    end

    local function str_localized(str)
        return false
    end

    local base_arg = args[1] or 'Elsword'
    local base_name = base_arg

    local select_banner = mw.html.create('div'):addClass('character-banner-select tone-8 border-color')
    for _, v in ipairs(char_order) do
        local display_name = v;
        local actual_name = v;
        if str_localized(v) then actual_name = split_lang(v)[1]; display_name = split_lang(v)[2] 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]]')
        select_banner:node(base_icon)
    end

    local styles = frame:preprocess('{{#css:MediaWiki:Character-Banner.css}}')
    local header = frame:expandTemplate{
        title = 'CharHeader',
        args = {
            'Elsword',
            'Elsword' .. lang,
            'tone-8',
            force_title = char_order[1]
        }
    }
    
    char_outer:wikitext(header):node(char_banner:node(select_banner))
    return styles .. tostring(char_outer)
end

return p