Module:CharTree/zh-hant: Difference between revisions
From Elwiki
No edit summary |
No edit summary |
||
Line 2: | Line 2: | ||
local getArgs = require('Module:Arguments').getArgs | local getArgs = require('Module:Arguments').getArgs | ||
local p = {} | local p = {} | ||
-- | -- 從 MediaWiki:NavSidebar/zh-hant/Character 載入角色列表 | ||
local function load_char_list(lang) | |||
local title = mw.title.new('MediaWiki:NavSidebar/zh-hant/Character') | |||
local content = title:getContent() | |||
if not content then | |||
error("無法讀取 MediaWiki:NavSidebar/zh-hant/Character 的內容") | |||
end | |||
local char_list_func = loadstring(content) | |||
if not char_list_func then | |||
error("MediaWiki:NavSidebar/zh-hant/Character 內容無效") | |||
end | |||
local char_list = char_list_func() | |||
return char_list | |||
end | |||
-- 主處理函數 | |||
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 = | local char_list = load_char_list(args.lang) -- 替換為從頁面讀取數據 | ||
local lang = '' | local lang = '' | ||
if args.lang then lang = '/' .. args.lang end | if args.lang then lang = '/' .. args.lang end | ||
local is_localized = lang and lang ~= '' | local is_localized = lang and lang ~= '' | ||
Line 30: | Line 44: | ||
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], {{}, {}, {}} | ||
Line 48: | Line 62: | ||
end | end | ||
end | end | ||
end | end | ||
Line 54: | Line 67: | ||
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 icon_link_char_name = path_name | local icon_link_char_name = path_name | ||
local normal_link_char_name = path_name | local normal_link_char_name = path_name | ||
if str_localized(path_name) then | if str_localized(path_name) then | ||
local name_split = split_lang(path_name) | local name_split = split_lang(path_name) | ||
Line 99: | Line 112: | ||
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 actual_name = split_lang(v)[1]; display_name = split_lang(v)[2] end | 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 | if actual_name == 'Lu/Ciel' then actual_name = 'LuCiel (Lu)' end | ||
Line 110: | Line 123: | ||
return styles .. tostring(char_outer) | return styles .. tostring(char_outer) | ||
end | end | ||
return p | return p |