Module:HeroImage
From Fisk's Superheroes Wiki
More actions
Documentation for this module may be created at Module:HeroImage/doc
local p = {}
local function isUrl(value)
return type(value) == "string" and value:match("^https?://")
end
local function isHtmlImg(value)
return type(value) == "string" and value:match("^<img")
end
local function getFileUrl(value)
if isUrl(value) then
return value
end
if isHtmlImg(value) then
return value
end
return mw.getCurrentFrame():callParserFunction("filepath", value)
end
local function getDimensions(url)
local title = mw.ext.imageinfo.getImageInfo{ url = url }
if not title or not title.width or not title.height then
return nil, nil
end
return tonumber(title.width), tonumber(title.height)
end
function p.show(frame)
local src = frame.args[1] or frame.args.src
if not src then
return "''No image provided''"
end
local url = getFileUrl(src)
if isHtmlImg(url) then
return frame:extensionTag("html", url)
end
local override = tonumber(frame.args.width)
local width, height = getDimensions(url)
local finalWidth
if override then
finalWidth = override
elseif width and height then
local isPortrait = height > width
if isPortrait then
finalWidth = 250
else
finalWidth = 400
end
else
finalWidth = 300
end
local img = mw.html.create("img")
:attr("src", url)
:css("width", finalWidth .. "px")
:css("height", "auto")
:css("max-width", finalWidth .. "px")
return frame:extensionTag("html", tostring(img))
end
return p