Module:CharTree/zh-hant: Difference between revisions
From Elwiki
No edit summary |
No edit summary |
||
Line 6: | Line 6: | ||
-- Main process | -- Main process | ||
function p.main(frame) | function p.main(frame) | ||
local args = getArgs(frame) | local args = getArgs(frame); | ||
local char_outer = mw.html.create('div'):addClass('character-banner-outer'):attr('data-lang', args.lang) | 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_banner = mw.html.create('div'):addClass('character-banner-wrap border-color tone-2') | ||
local char_list = get_char_list(frame, args.lang) | local char_list = get_char_list(frame, args.lang) | ||
local lang = ''; | |||
if args.lang then lang = '/' .. args.lang end | |||
local is_localized = lang and lang ~= '' | local is_localized = lang and lang ~= '' | ||
local char_order = char_list[1] | local char_order = char_list[1] | ||
local not_exist = char_list[3] | local not_exist = char_list[3] | ||
local char_list = char_list[2] | local char_list = char_list[2] | ||
function split_lang(str) | function split_lang(str) | ||
local | if is_localized then | ||
-- 按 "語言|顯示名稱" 分割,例如 "Elsword/zh-hant|艾索德" | |||
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} | return {str, str} | ||
end | end | ||
end | end | ||
function str_localized(str) | function str_localized(str) | ||
return string.find(str, (lang or '') .. '|') | |||
return string.find(str, lang | |||
end | end | ||
Line 55: | Line 41: | ||
local char_tree = mw.html.create('div'):addClass('char-banner-tree') | local char_tree = mw.html.create('div'):addClass('char-banner-tree') | ||
local out = '' | local out = '' | ||
local char, file_name, link, nopath, nopathnojob, entry, image_arg, icon_str | local char, file_name, link, nopath, nopathnojob, entry, image_arg, icon_str; | ||
for char_iter=1, #char_order, 1 do | |||
for char_iter = 1, #char_order, 1 do | |||
local base, jobs = char_order[char_iter], {{}, {}, {}} | local base, jobs = char_order[char_iter], {{}, {}, {}} | ||
local base_name = split_lang(base)[1] or base | local base_name = split_lang(base)[1] or base | ||
local tree = mw.html.create('div'):addClass('char-banner-tree'):attr('data-base', base_name:gsub('/', '')):attr('data-display-base', split_lang(base)[2] or base) | local tree = mw.html.create('div'):addClass('char-banner-tree'):attr('data-base', base_name:gsub('/', '')):attr('data-display-base', split_lang(base)[2] or base) | ||
for path_iter = 1, 4, 1 do | for path_iter=1, 4, 1 do | ||
local path = char_list[base][path_iter] | local path = char_list[base][path_iter] | ||
for job_iter = 1, 3, 1 do | for job_iter=1, 3, 1 do | ||
local job = path[job_iter] | local job = path[job_iter] | ||
local out_table = jobs[job_iter] | local out_table = jobs[job_iter] | ||
Line 78: | Line 63: | ||
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 base_job_name = name_split[1] -- 基本名稱,例如 "Elsword" | |||
local display_job_name = name_split[2] -- 顯示名稱,例如 "艾索德" | |||
-- | -- 設置圖標名稱和鏈接名稱 | ||
local icon_link_char_name = base_job_name:gsub(':', '') -- 移除可能的冒號 | |||
local normal_link_char_name = base_job_name .. lang -- 鏈接名稱包含語言標識 | |||
-- 生成圖標鏈接 | |||
local icon_str = 'Icon - ' | local icon_str = 'Icon - ' | ||
local link = '|link=' .. normal_link_char_name | local link = '|link=' .. normal_link_char_name | ||
Line 107: | Line 83: | ||
end | end | ||
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 icon_with_link = '[[File:' .. icon_str .. | |||
local img = tree:tag('div'):addClass('char-banner-tree-image'):attr('data-class-name', | |||
if unreleased then | if unreleased then | ||
Line 138: | Line 109: | ||
local select_banner = mw.html.create('div'):addClass('character-banner-select tone-8 border-color') | local select_banner = mw.html.create('div'):addClass('character-banner-select tone-8 border-color') | ||
for k, v in ipairs(char_order) do | for k, v in ipairs(char_order) do | ||
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 | ||
local | local name_split = split_lang(v) | ||
actual_name = | actual_name = name_split[1]; | ||
display_name = | display_name = name_split[2] | ||
end | end | ||
if actual_name == 'Lu/Ciel' then | 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 - ' .. 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 |