Difference between revisions of "Module:Infobox"
Jump to navigation
Jump to search
m |
(FnControlOption changed the content model of the page Module:Infobox from "plain text" to "Scribunto") Tag: content model change |
||
(10 intermediate revisions by 4 users not shown) | |||
Line 4: | Line 4: | ||
local getLanguageCode = require("Module:Languages").getLanguageCode | local getLanguageCode = require("Module:Languages").getLanguageCode | ||
local animateImages = require("Module:Animated")._images | local animateImages = require("Module:Animated")._images | ||
− | local | + | local makeInvokeFunc = require("Module:Arguments").makeInvokeFunc |
local dataPrefix = "Module:Infobox/" | local dataPrefix = "Module:Infobox/" | ||
− | + | -- Get data (IDs and names) for infobox row headers. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | -- Get data (IDs and names) for infobox headers. | ||
-- | -- | ||
-- @param type Infobox type (e.g. block) | -- @param type Infobox type (e.g. block) | ||
-- @param langCode Language code, defaults to current language | -- @param langCode Language code, defaults to current language | ||
− | local function | + | -- @param frame Current frame object |
+ | local function getRowHeadersData(type, langCode, frame) | ||
langCode = langCode or getLanguageCode() | langCode = langCode or getLanguageCode() | ||
− | + | frame = frame or mw.getCurrentFrame() | |
− | + | local title = dataPrefix .. langCode | |
+ | if frame:preprocess("{{#ifexist:" .. title .. "|true}}") ~= "" then | ||
+ | local data = mw.loadData(title) | ||
+ | return data and data[type] or nil | ||
+ | end | ||
+ | return nil | ||
end | end | ||
Line 52: | Line 28: | ||
-- @param type Infobox type (e.g. block) | -- @param type Infobox type (e.g. block) | ||
local function infobox(args, type) | local function infobox(args, type) | ||
− | local | + | local rowHeadersData = getRowHeadersData(type) or getRowHeadersData(type, "en") |
local name = args.name | local name = args.name | ||
local width = args.width or "200px" | local width = args.width or "200px" | ||
Line 106: | Line 82: | ||
:wikitext(description) | :wikitext(description) | ||
− | for _, | + | for _, rowHeaderData in ipairs(rowHeadersData) do |
− | infobox | + | local rowData = args[rowHeaderData.id] |
− | + | if rowData and rowData ~= "" then | |
− | + | infobox | |
− | + | :addRow() | |
− | + | :addData() | |
− | + | :wikitext("'''" .. rowHeaderData.name .. "'''") | |
− | + | :done() | |
+ | :addData() | ||
+ | :wikitext(rowData) | ||
+ | end | ||
end | end | ||
Line 137: | Line 116: | ||
args.imagesize = args.imagesize or "150px" | args.imagesize = args.imagesize or "150px" | ||
return tostring(infobox(args, "mob")) | return tostring(infobox(args, "mob")) | ||
+ | end | ||
+ | |||
+ | function p._object(args) | ||
+ | args.imagesize = args.imagesize or "150px" | ||
+ | return tostring(infobox(args, "object")) | ||
end | end | ||
Line 148: | Line 132: | ||
return tostring(infobox(args, "mod")) | return tostring(infobox(args, "mod")) | ||
end | end | ||
+ | |||
+ | function p._server(args) | ||
+ | args.imagesize = args.imagesize or "150px" | ||
+ | return tostring(infobox(args, "server")) | ||
+ | end | ||
+ | |||
+ | p.block = makeInvokeFunc(p._block, {inherited = true}) | ||
+ | p.item = makeInvokeFunc(p._item, {inherited = true}) | ||
+ | p.foodItem = makeInvokeFunc(p._foodItem, {inherited = true}) | ||
+ | p.mob = makeInvokeFunc(p._mob, {inherited = true}) | ||
+ | p.object = makeInvokeFunc(p._object, {inherited = true}) | ||
+ | p.game = makeInvokeFunc(p._game, {inherited = true}) | ||
+ | p.mod = makeInvokeFunc(p._mod, {inherited = true}) | ||
+ | p.server = makeInvokeFunc(p._server, {inherited = true}) | ||
return p | return p |
Latest revision as of 17:39, 7 June 2022
Documentation for this module may be created at Module:Infobox/doc
local p = {} local TableBuilder = require("Module:TableBuilder") local getLanguageCode = require("Module:Languages").getLanguageCode local animateImages = require("Module:Animated")._images local makeInvokeFunc = require("Module:Arguments").makeInvokeFunc local dataPrefix = "Module:Infobox/" -- Get data (IDs and names) for infobox row headers. -- -- @param type Infobox type (e.g. block) -- @param langCode Language code, defaults to current language -- @param frame Current frame object local function getRowHeadersData(type, langCode, frame) langCode = langCode or getLanguageCode() frame = frame or mw.getCurrentFrame() local title = dataPrefix .. langCode if frame:preprocess("{{#ifexist:" .. title .. "|true}}") ~= "" then local data = mw.loadData(title) return data and data[type] or nil end return nil end -- Create an infobox. -- -- @param args Infobox arguments -- @param type Infobox type (e.g. block) local function infobox(args, type) local rowHeadersData = getRowHeadersData(type) or getRowHeadersData(type, "en") local name = args.name local width = args.width or "200px" local description = args.description local image = args.image or "Blank.png" local imagesize = args.imagesize local imageText if string.match(image, ",") then imageText = animateImages({image, imagesize}) else if imagesize then imageText = "[[File:" .. image .. "|" .. imagesize .. "]]" else imageText = "[[File:" .. image .. "]]" end end local infobox = TableBuilder.create() infobox :addClass("wikitable") :css("float", "right") :css("text-align", "left") :css("margin", "0 0 0.5em 1em") :css("padding", "5px") :css("font-size", "90%") :css("position", "relative") :css("clear", "right") :css("overflow", "auto") :css("z-index", "1") :attr("width", width) :addRow() :addHeader() :attr("colspan", 2) :css("font-size", "110%") :css("text-align", "center") :wikitext(name) :done() :done() :addRow() :addHeader() :attr("colspan", 2) :tag("div") :addClass("center") :wikitext(imageText) :done() :done() :done() :addRow() :addHeader() :attr("colspan", 2) :attr("align", "center") :wikitext(description) for _, rowHeaderData in ipairs(rowHeadersData) do local rowData = args[rowHeaderData.id] if rowData and rowData ~= "" then infobox :addRow() :addData() :wikitext("'''" .. rowHeaderData.name .. "'''") :done() :addData() :wikitext(rowData) end end return infobox end function p._block(args) args.imagesize = args.imagesize or "150px" return tostring(infobox(args, "block")) end function p._item(args) args.imagesize = args.imagesize or "160px" return tostring(infobox(args, "item")) end function p._foodItem(args) args.imagesize = args.imagesize or "160px" return tostring(infobox(args, "foodItem")) end function p._mob(args) args.imagesize = args.imagesize or "150px" return tostring(infobox(args, "mob")) end function p._object(args) args.imagesize = args.imagesize or "150px" return tostring(infobox(args, "object")) end function p._game(args) args.imagesize = args.imagesize or "150px" return tostring(infobox(args, "game")) end function p._mod(args) args.imagesize = args.imagesize or "150px" return tostring(infobox(args, "mod")) end function p._server(args) args.imagesize = args.imagesize or "150px" return tostring(infobox(args, "server")) end p.block = makeInvokeFunc(p._block, {inherited = true}) p.item = makeInvokeFunc(p._item, {inherited = true}) p.foodItem = makeInvokeFunc(p._foodItem, {inherited = true}) p.mob = makeInvokeFunc(p._mob, {inherited = true}) p.object = makeInvokeFunc(p._object, {inherited = true}) p.game = makeInvokeFunc(p._game, {inherited = true}) p.mod = makeInvokeFunc(p._mod, {inherited = true}) p.server = makeInvokeFunc(p._server, {inherited = true}) return p