- local module = { }
- local inner_args = { ["wrapper"] = true, ["class"] = true, ["m-style"] = true, ["font-size"] = true, ["text-align"] = true, ["width"] = true, ["max-width"] = true, ["float"] = true, ["bg-color"] = true, ["m-bcolor"] = true, ["m-color"] = true,
- ["notitle"] = true, ["title-main"] = true, ["top-style"] = true, ["top-bcolor"] = true, ["标题背景色"] = true, ["標題背景色"] = true, ["top-color"] = true, ["标题文字色"] = true, ["標題文字色"] = true, ["Title"] = true,
- ["标题"] = true, ["標題"] = true, ["tabs"] = true, ["image-style"] = true, ["image"] = true, ["size"] = true, ["图片大小"] = true, ["圖片大小"] = true, ["caption"] = true, ["图片说明"] = true, ["圖片說明"] = true, ["图片信息"] = true,
- ["圖片信息"] = true, ["image-lostmessage"] = true, ["l-style"] = true, ["l-width"] = true, ["l-bcolor"] = true, ["左栏背景色"] = true, ["左欄背景色"] = true, ["l-color"] = true, ["左栏文字色"] = true, ["左欄文字色"] = true,
- ["r-style"] = true, ["t-style"] = true, ["t-bcolor"] = true, ["底栏背景色"] = true, ["底欄背景色"] = true, ["t-color"] = true, ["底栏文字色"] = true, ["底欄文字色"] = true, ["i-style"] = true }
-
- function module.Modern(frame)
- local frame_self = frame
- local parent = frame:getParent()
- local title = parent:getTitle()
- local _chk_arg_self = function(...)
- local ret = nil
- for _, arg_name in ipairs{...} do
- ret = frame_self.args[arg_name]
- if ret then
- ret = mw.text.trim(ret)
- if ret ~= "" then return ret end
- end
- end
- return nil
- end
- local _chk_arg, _chk_arg_caller = _chk_arg_self, _chk_arg_self
- if parent and ((title == "Template:InfoboxModern") or (frame.args["wrapper"]=="1" and mw.title.new(title).namespace == 10)) then
- frame = parent
- _chk_arg_caller = function(...)
- local ret = nil
- for _, arg_name in ipairs{...} do
- ret = parent.args[arg_name]
- if ret then
- ret = mw.text.trim(ret)
- if ret ~= "" then return ret end
- end
- end
- return nil
- end
- _chk_arg = function(...)
- return _chk_arg_caller(...) or _chk_arg_self(...)
- end
- end
-
- local html = mw.html.create()
-
- local box = html:tag("table")
- :addClass("infobox"):addClass(_chk_arg("class") or "")
- :attr("align", "right")
- local style_main = _chk_arg("m-style")
- if style_main then
- box:cssText(style_main)
- else
- box:css("font-size", _chk_arg("font-size") or "90%")
- :css("text-align", _chk_arg("text-align") or "center")
- :css("width", _chk_arg("width") or "280px")
- :css("max-width", _chk_arg("max-width") or "100%")
- :css("float", _chk_arg("float") or "right")
- :css("background-color", _chk_arg("bg-color", "m-bcolor") or "#FFF")
- :css("color", _chk_arg("m-color") or "#000")
- end
- if not _chk_arg("notitle") then
- local title_main = _chk_arg_caller("title-main")
- if title_main then
- box:wikitext(title_main)
- else
- local td_title = box:tag("tr"):addClass("infobox-title"):tag("td"):css("padding", "0"):attr("colspan", "2")
- local style_top = _chk_arg("top-style")
- if style_top then
- td_title:cssText(style_top)
- else
- td_title:css("background-color", _chk_arg("top-bcolor", "标题背景色", "標題背景色") or"#26ca9b")
- :css("color", _chk_arg("m-color", "top-color", "标题文字色", "標題文字色") or"#FFF")
- :css("font-size", "100%")
- :css("padding", "1em")
- end
- td_title:wikitext(_chk_arg("Title", "title", "标题", "標題") or mw.title.getCurrentTitle().fullText)
- end
- end
- local arg_tabs = _chk_arg_caller("tabs")
- local arg_image = _chk_arg_caller("image")
- local arg_image_lostmessage = _chk_arg("image-lostmessage")
- if arg_tabs or arg_image or arg_image_lostmessage then
- local td_top = box:tag("tr"):tag("td"):attr("colspan", "2")
- if arg_tabs then
- td_top:wikitext(arg_tabs)
- else
- local style_image = _chk_arg("image-style")
- if style_image then
- td_top:cssText(style_image)
- end
- if arg_image then
- local size = _chk_arg("size", "图片大小", "圖片大小")
- if (not size) or (tonumber(mw.ustring.sub(size, 1, -3)) < 280) then
- size = "280px"
- end
- td_top:wikitext("[[Image:" .. arg_image .. "|" .. size .. "|class=infobox-image]]")
- local arg_caption = _chk_arg("caption", "图片说明", "圖片說明", "图片信息", "圖片信息")
- if arg_caption then
- td_top:tag("br"):done()
- :wikitext(arg_caption)
- end
- else
- td_top:wikitext(arg_image_lostmessage)
- end
- end
- end
- local num_names, item_type, num_insert = 1, 0, nil
- local arg_queue, arg_names = { }, { }
- for _, value in ipairs(frame_self.args) do
- local arg_trim = mw.text.trim(value)
- if num_insert == nil and arg_trim == "<customs>" then
- num_insert = #arg_queue
- else
- local arg_split = mw.text.split(arg_trim, ",", true)
- if mw.ustring.sub(arg_split[1], 1, 1) == "-" then
- arg_split[1] = mw.ustring.sub(arg_split[1], 2)
- item_type = 1
- else
- item_type = 0
- end
- arg_names[arg_split[1]] = arg_split[1]
- table.insert(arg_queue, { ["name"] = arg_split[1], ["type"] = item_type } )
- for index = 2, #arg_split do
- local alias = arg_split[index]
- arg_names[alias] = arg_split[1]
- table.insert(arg_queue, { ["name"] = alias, ["alias"] = num_names } )
- end
- num_names = num_names + #arg_split
- end
- end
- local arg_exclude = frame_self.args["exclude"]
- if arg_exclude then arg_exclude = mw.text.trim(arg_exclude) end
- if arg_exclude and arg_exclude ~= "" then
- local arg_split = mw.text.split(arg_exclude, ";", true)
- for _, value in ipairs(arg_split) do
- inner_args[value] = true
- end
- end
- -- Todo: CustomArgs by {{{order}}}
- local arg_order = frame_self.args["order"]
- if arg_order then arg_order = mw.text.trim(arg_order) end
- if arg_order and arg_order ~= "" then
- local arg_split = mw.text.split(arg_order, ";", true)
- for _, value in ipairs(arg_split) do
- if not (inner_args[value] or arg_names[value] or value == "") then
- if num_insert ~= nil then
- table.insert(arg_queue, num_insert, { ["name"] = value } )
- else
- table.insert(arg_queue, { ["name"] = value } )
- end
- arg_names[value] = value
- end
- end
- end
- local args_input = { }
- for key, value in pairs(frame.args) do
- value = mw.text.trim(value)
- if (not (tonumber(key) or inner_args[key])) and (value ~= "") then
- args_input[key] = value
- end
- end
- for key, value in pairs(args_input) do
- if not arg_names[key] then
- if num_insert ~= nil then
- table.insert(arg_queue, num_insert, { ["name"] = value } )
- else
- table.insert(arg_queue, { ["name"] = value } )
- end
- end
- end
- local style_left = _chk_arg("l-style")
- local width_left = _chk_arg("l-width")
- local bcolor_left = _chk_arg("l-bcolor", "左栏背景色", "左欄背景色")
- local color_left = _chk_arg("l-color", "左栏文字色", "左欄文字色")
- local style_right = _chk_arg("r-style")
- local style_rebar = _chk_arg("t-style")
- local bcolor_rebar = _chk_arg("t-bcolor", "底栏背景色", "底欄背景色")
- local color_rebar = _chk_arg("t-color", "底栏文字色", "底欄文字色")
- local style_text = _chk_arg("i-style")
- local InsertItem = function(key, value)
- local tr_item = box:tag("tr")
- local td_item = tr_item:tag("td")
- if style_left then
- td_item:cssText(style_left)
- else
- td_item:css("width", width_left or "80px")
- :css("background-color", bcolor_left or "#E0FFFF")
- :css("color", color_left or "#000")
- end
- td_item:wikitext(key)
- td_item = tr_item:tag("td")
- if style_right then
- td_item:cssText(style_right)
- end
- td_item:wikitext(value)
- end
- local InsertRebar = function(value)
- local td_item = box:tag("tr"):tag("td"):attr("colspan", "2")
- if style_rebar then
- td_item:cssText(style_rebar)
- else
- td_item:css("background-color", bcolor_rebar or "#62BCA9")
- :css("color", color_rebar or "#FFF")
- end
- td_item:wikitext(value)
- end
- local InsertText = function(value)
- local td_item = box:tag("tr"):tag("td"):attr("colspan", "2")
- if style_text then
- td_item:cssText(style_text)
- else
- td_item:css("text-align", "left")
- end
- td_item:wikitext(value)
- end
- -- mw.logObject(arg_queue)
- local temp_name, temp_type = nil, nil
- for _, arg_item in ipairs(arg_queue) do
- if args_input[arg_item.name] then
- if arg_item.alias then
- temp_name = arg_queue[arg_item.alias].name
- temp_type = arg_queue[arg_item.alias].type
- else
- temp_name = arg_item.name
- temp_type = arg_item.type
- end
- if temp_name then
- if temp_type == 1 then
- InsertRebar(temp_name)
- InsertText(args_input[arg_item.name])
- else
- InsertItem(temp_name, args_input[arg_item.name])
- end
- if arg_item.alias then
- arg_queue[arg_item.alias].name = nil
- end
- end
- args_input[arg_item.name] = nil
- arg_item.name = nil
- end
- end
-
- return html
- end
-
- return module