Difference between revisions of "Module:JpInfobox"

From Luanti Wiki
Jump to navigation Jump to search
(FnControlOption changed the content model of the page Module:JpInfobox from "plain text" to "Scribunto")
Tag: content model change
 
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
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, "ja") or getRowHeadersData(type)
 
    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
 

Latest revision as of 17:52, 7 June 2022

Documentation for this module may be created at Module:JpInfobox/doc