local p = {}
local _frame = nil
local _VAR_PREFIX = "switch_translate"
local _TOGGLE_PREFIX = "mw-customtoggle-switch_translate_"
local _COLL_PREFIX = "mw-customcollapsible-switch_translate_"
local function write_index_var(index)
mw.logObject(index)
for i,v in ipairs(index) do
mw.log("#vardefine", _VAR_PREFIX .. "index" .. i, v)
_frame:callParserFunction("#vardefine", _VAR_PREFIX .. "index" .. i, v) -- index變量用於存放每個index對應的譯名名稱
end
mw.log("#vardefine", _VAR_PREFIX .. "len", table.maxn(index))
_frame:callParserFunction("#vardefine", _VAR_PREFIX .. "len", table.maxn(index)) -- len變量用於存放index的數量
end
local function get_index_data(data)
local index = {}
for k,v in pairs(data[1]) do
if k ~= "default" then
table.insert(index, k)
end
end
write_index_var(index)
return index
end
local function write_data_var(index,data)
for i, v in ipairs(data) do
local all_name = "|" .. v["default"]
mw.log("#vardefine", _VAR_PREFIX .. "data" .. v["default"], i)
_frame:callParserFunction("#vardefine", _VAR_PREFIX .. "data" .. v["default"], i)
for ii, vv in ipairs(index) do
local name = v[vv] or v["default"]
all_name = all_name .. "|" .. name
mw.log("#vardefine", _VAR_PREFIX .. "data" .. name, i)
_frame:callParserFunction("#vardefine", _VAR_PREFIX .. "data" .. name, i) -- data變量的["name"]鍵值用於存放對應的index索引
end
mw.log("#vardefine", _VAR_PREFIX .. "data" .. i, all_name)
_frame:callParserFunction("#vardefine", _VAR_PREFIX .. "data" .. i, all_name) -- -- data變量的[index]鍵值用於存放index對應的譯名列表,格式為:"|default|譯名1|譯名2|..."
end
end
local function generate_switch(index)
local output = "<span class=\"switch-translate-switch\">"
output = output .. mw.ustring.format("<span class=\"mw-collapsible mw-collapsed switch-translate-btn-0\" id=\"%s\"><span class=\"%s\">%s</span></span>", _COLL_PREFIX .. 0, _TOGGLE_PREFIX .. 0, "共識譯名")
for i,v in ipairs(index) do
output = output .. mw.ustring.format("<span class=\"mw-collapsible switch-translate-btn-%s\" id=\"%s\"><span class=\"%s\">%s</span></span>", i, _COLL_PREFIX .. i, _TOGGLE_PREFIX .. i, v)
end
output = output .. "</span>"
return output
end
function p.switch(page_name)
local data = mw.text.jsonDecode(mw.title.new(page_name):getContent())
mw.log("獲取的data數據:")
mw.logObject(data)
local index = get_index_data(data)
write_data_var(index,data)
return generate_switch(index)
end
function p.show(name)
local index = _frame:callParserFunction("#var", _VAR_PREFIX .. "data" .. name)
local all_name = _frame:callParserFunction("#var", _VAR_PREFIX .. "data" .. index)
local output = "<span class=\"switch-translate-name\">"
local i = 0
for name in mw.ustring.gmatch(all_name, "|([^|]+)") do
if i == 0 then
output = output .. mw.ustring.format("<span class=\"mw-collapsible\" id=\"%s\">%s</span>", _COLL_PREFIX .. i, name)
else
output = output .. mw.ustring.format("<span class=\"mw-collapsible mw-collapsed\" id=\"%s\">%s</span>", _COLL_PREFIX .. i, name)
end
i = i + 1
end
output = output .. "</span>"
return output
end
function p.main(frame)
_frame = frame
local mode = frame.args[1]
local arg = frame.args[2]
if not mode or not arg then
return "<span class=\"scribunto-error\">模塊缺失必需參數!請前往模板文檔確認用法!</span>"
end
if mode == "switch" then
mw.incrementExpensiveFunctionCount()
return p.switch(arg)
elseif mode == "show" then
return p.show(arg)
end
return "<span class=\"scribunto-error\">模塊參數錯誤!請前往模板文檔確認用法!</span>"
end
return p