Toggle menu
66
63
2
559
Fisk's Superheroes Wiki
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:HeroImage: Difference between revisions

From Fisk's Superheroes Wiki
mNo edit summary
mNo edit summary
Line 2: Line 2:


local function isUrl(value)
local function isUrl(value)
    return type(value) == "string" and value:match("^https?://")
return type(value) == "string" and value:match("^https?://")
end
end


local function isHtmlImg(value)
local function isHtmlImg(value)
    return type(value) == "string" and value:match("^<img")
return type(value) == "string" and value:match("^<img")
end
end


local function getFileUrl(value)
local function getFileUrl(value)
    if isUrl(value) then
if isUrl(value) then return value end
        return value
if isHtmlImg(value) then return value end
    end
    if isHtmlImg(value) then
        return value
    end


    return mw.getCurrentFrame():callParserFunction("filepath", value)
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
end


function p.show(frame)
function p.show(frame)
    local src = frame.args[1] or frame.args.src
local src = frame.args[1] or frame.args.src
    if not src then
if not src then return "''No image provided''" end
        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
local url = getFileUrl(src)
        finalWidth = override
local width = tonumber(frame.args.width) or 250
    elseif width and height then
        local isPortrait = height > width


        if isPortrait then
if isHtmlImg(url) then
            finalWidth = 250
return frame:extensionTag("html", url)
        else
end
            finalWidth = 400
        end
    else
        finalWidth = 300
    end


    local img = mw.html.create("img")
local img = mw.html.create("img")
        :attr("src", url)
:attr("src", url)
        :css("width", finalWidth .. "px")
:css("width", width .. "px")
        :css("height", "auto")
:css("height", "auto")
        :css("max-width", finalWidth .. "px")


    return frame:extensionTag("html", tostring(img))
return frame:extensionTag("html", tostring(img))
end
end


return p
return p

Revision as of 06:03, 16 November 2025

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

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)
	local width = tonumber(frame.args.width) or 250

	if isHtmlImg(url) then
		return frame:extensionTag("html", url)
	end

	local img = mw.html.create("img")
		:attr("src", url)
		:css("width", width .. "px")
		:css("height", "auto")

	return frame:extensionTag("html", tostring(img))
end

return p