<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.cultopedia.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfoboxImage</id>
	<title>Module:InfoboxImage - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.cultopedia.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfoboxImage"/>
	<link rel="alternate" type="text/html" href="https://www.cultopedia.org/index.php?title=Module:InfoboxImage&amp;action=history"/>
	<updated>2026-04-05T18:40:55Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.5</generator>
	<entry>
		<id>https://www.cultopedia.org/index.php?title=Module:InfoboxImage&amp;diff=243&amp;oldid=prev</id>
		<title>imported&gt;WOSlinker: make changes from sandbox requested by User:Hike395 on talk page</title>
		<link rel="alternate" type="text/html" href="https://www.cultopedia.org/index.php?title=Module:InfoboxImage&amp;diff=243&amp;oldid=prev"/>
		<updated>2025-10-18T09:45:47Z</updated>

		<summary type="html">&lt;p&gt;make changes from sandbox requested by &lt;a href=&quot;/index.php?title=User:Hike395&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:Hike395 (page does not exist)&quot;&gt;User:Hike395&lt;/a&gt; on talk page&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Inputs:&lt;br /&gt;
--    image - Can either be a bare filename (with or without the File:/Image: prefix) or a fully formatted image link&lt;br /&gt;
--    page - page to display for multipage images (DjVu)&lt;br /&gt;
--    size - size to display the image&lt;br /&gt;
--    maxsize - maximum size for image&lt;br /&gt;
--    sizedefault - default size to display the image if size param is blank&lt;br /&gt;
--    alt - alt text for image&lt;br /&gt;
--    title - title text for image&lt;br /&gt;
--    border - set to yes if border&lt;br /&gt;
--    center - set to yes, if the image has to be centered&lt;br /&gt;
--    upright - upright image param&lt;br /&gt;
--    suppressplaceholder - if yes then checks to see if image is a placeholder and suppresses it&lt;br /&gt;
--    link - page to visit when clicking on image&lt;br /&gt;
--    class - HTML classes to add to the image&lt;br /&gt;
-- Outputs:&lt;br /&gt;
--    Formatted image.&lt;br /&gt;
-- More details available at the &amp;quot;Module:InfoboxImage/doc&amp;quot; page&lt;br /&gt;
&lt;br /&gt;
local i = {}&lt;br /&gt;
&lt;br /&gt;
-- List of placeholder images and tracking categories stored in [[Module:InfoboxImage/data]]&lt;br /&gt;
-- Other constants:&lt;br /&gt;
--   the system-wide default thumbnail size (in px)&lt;br /&gt;
local defaultThumbnailSize = 250&lt;br /&gt;
&lt;br /&gt;
-- If page is not a user page, return tracking category. Else return empty.&lt;br /&gt;
local function trackingCat(cat)&lt;br /&gt;
	local ns = mw.title.getCurrentTitle().nsText:lower()&lt;br /&gt;
    local categories = mw.loadData(&amp;#039;Module:InfoboxImage/data&amp;#039;).categories&lt;br /&gt;
	return (ns ~= &amp;#039;user&amp;#039; and ns ~= &amp;#039;user talk&amp;#039; and categories[cat]) or &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Determine whether image is a placeholder&lt;br /&gt;
function i.IsPlaceholder(image)&lt;br /&gt;
    -- change underscores to spaces&lt;br /&gt;
    image = mw.ustring.gsub(image, &amp;quot;_&amp;quot;, &amp;quot; &amp;quot;);&lt;br /&gt;
    assert(image ~= nil, &amp;#039;mw.ustring.gsub(image, &amp;quot;_&amp;quot;, &amp;quot; &amp;quot;) must not return nil&amp;#039;)&lt;br /&gt;
    -- if image starts with [[ then remove that and anything after |&lt;br /&gt;
    if mw.ustring.sub(image,1,2) == &amp;quot;[[&amp;quot; then&lt;br /&gt;
        image = mw.ustring.sub(image,3);&lt;br /&gt;
        image = mw.ustring.gsub(image, &amp;quot;([^|]*)|.*&amp;quot;, &amp;quot;%1&amp;quot;);&lt;br /&gt;
        assert(image ~= nil, &amp;#039;mw.ustring.gsub(image, &amp;quot;([^|]*)|.*&amp;quot;, &amp;quot;%1&amp;quot;) must not return nil&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    -- Trim spaces&lt;br /&gt;
    image = mw.ustring.gsub(image, &amp;#039;^[ ]*(.-)[ ]*$&amp;#039;, &amp;#039;%1&amp;#039;);&lt;br /&gt;
    assert(image ~= nil, &amp;quot;mw.ustring.gsub(image, &amp;#039;^[ ]*(.-)[ ]*$&amp;#039;, &amp;#039;%1&amp;#039;) must not return nil&amp;quot;)&lt;br /&gt;
    -- remove prefix if exists&lt;br /&gt;
    local allNames = mw.site.namespaces[6].aliases&lt;br /&gt;
    allNames[#allNames + 1] = mw.site.namespaces[6].name&lt;br /&gt;
    allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName&lt;br /&gt;
    for i, name in ipairs(allNames) do&lt;br /&gt;
        if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. &amp;quot;:&amp;quot;) then&lt;br /&gt;
            image = mw.ustring.sub(image, mw.ustring.len(name) + 2);&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    -- Trim spaces&lt;br /&gt;
    image = mw.ustring.gsub(image, &amp;#039;^[ ]*(.-)[ ]*$&amp;#039;, &amp;#039;%1&amp;#039;);&lt;br /&gt;
    -- capitalise first letter&lt;br /&gt;
    image = mw.ustring.upper(mw.ustring.sub(image,1,1)) .. mw.ustring.sub(image,2);&lt;br /&gt;
&lt;br /&gt;
    local placeholder_image = mw.loadData(&amp;#039;Module:InfoboxImage/data&amp;#039;).placeholder_image&lt;br /&gt;
    return placeholder_image[image]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isempty(x)&lt;br /&gt;
    return (not x) or x == &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Main entry point&lt;br /&gt;
function i.InfoboxImage(frame)&lt;br /&gt;
    local image = frame.args[&amp;quot;image&amp;quot;];&lt;br /&gt;
    &lt;br /&gt;
    if isempty(image) then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if image == &amp;quot;&amp;amp;nbsp;&amp;quot; then&lt;br /&gt;
        return image;&lt;br /&gt;
    end&lt;br /&gt;
    if frame.args[&amp;quot;suppressplaceholder&amp;quot;] ~= &amp;quot;no&amp;quot; then&lt;br /&gt;
        if i.IsPlaceholder(image) == true then&lt;br /&gt;
            return &amp;quot;&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if string.find(image, &amp;quot;^%[*https?:&amp;quot;) then&lt;br /&gt;
		-- Error category.&lt;br /&gt;
		return trackingCat(&amp;quot;url_image_links&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    if mw.ustring.sub(image,1,2) == &amp;quot;[[&amp;quot; then&lt;br /&gt;
        -- search for thumbnail images and add to tracking cat if found&lt;br /&gt;
        local cat = &amp;quot;&amp;quot;;&lt;br /&gt;
        if mw.title.getCurrentTitle().namespace == 0 and (mw.ustring.find(image, &amp;quot;|%s*thumb%s*[|%]]&amp;quot;) or mw.ustring.find(image, &amp;quot;|%s*thumbnail%s*[|%]]&amp;quot;)) then&lt;br /&gt;
            cat = trackingCat(&amp;quot;thumbnail_images&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        return image .. cat;&lt;br /&gt;
    elseif mw.ustring.sub(image,1,2) == &amp;quot;{{&amp;quot; and mw.ustring.sub(image,1,3) ~= &amp;quot;{{{&amp;quot; then&lt;br /&gt;
        return image;&lt;br /&gt;
    elseif mw.ustring.sub(image,1,1) == &amp;quot;&amp;lt;&amp;quot; then&lt;br /&gt;
        return image;&lt;br /&gt;
    elseif mw.ustring.sub(image,1,8) == mw.ustring.char(127)..&amp;quot;&amp;#039;\&amp;quot;`UNIQ&amp;quot; then&lt;br /&gt;
        -- Found strip marker at begining, so pass don&amp;#039;t process at all&lt;br /&gt;
        return image;&lt;br /&gt;
    else&lt;br /&gt;
        local result = &amp;quot;&amp;quot;;&lt;br /&gt;
        local page = frame.args[&amp;quot;page&amp;quot;];&lt;br /&gt;
        local upright = frame.args[&amp;quot;upright&amp;quot;] or &amp;quot;&amp;quot;&lt;br /&gt;
        local size = frame.args[&amp;quot;size&amp;quot;];&lt;br /&gt;
        local maxsize = frame.args[&amp;quot;maxsize&amp;quot;];&lt;br /&gt;
        local sizedefault = frame.args[&amp;quot;sizedefault&amp;quot;];&lt;br /&gt;
        local alt = frame.args[&amp;quot;alt&amp;quot;];&lt;br /&gt;
        local link = frame.args[&amp;quot;link&amp;quot;];&lt;br /&gt;
        local title = frame.args[&amp;quot;title&amp;quot;];&lt;br /&gt;
        local border = frame.args[&amp;quot;border&amp;quot;];&lt;br /&gt;
        local thumbtime = frame.args[&amp;quot;thumbtime&amp;quot;] or &amp;quot;&amp;quot;;&lt;br /&gt;
        local center = frame.args[&amp;quot;center&amp;quot;];&lt;br /&gt;
        local class = frame.args[&amp;quot;class&amp;quot;];&lt;br /&gt;
        &lt;br /&gt;
        -- remove prefix if exists&lt;br /&gt;
        local allNames = mw.site.namespaces[6].aliases&lt;br /&gt;
        allNames[#allNames + 1] = mw.site.namespaces[6].name&lt;br /&gt;
        allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName&lt;br /&gt;
        for i, name in ipairs(allNames) do&lt;br /&gt;
            if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. &amp;quot;:&amp;quot;) then&lt;br /&gt;
                image = mw.ustring.sub(image, mw.ustring.len(name) + 2);&lt;br /&gt;
                break&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        if not isempty(maxsize) then&lt;br /&gt;
            -- if no sizedefault nor upright, then set to maxsize&lt;br /&gt;
            if isempty(sizedefault) and isempty(upright) then&lt;br /&gt;
                sizedefault = maxsize&lt;br /&gt;
            end&lt;br /&gt;
            -- check to see if size bigger than maxsize&lt;br /&gt;
            local maxsizenumber = tonumber(mw.ustring.match(maxsize,&amp;quot;%d*&amp;quot;)) or 0;&lt;br /&gt;
            if not isempty(size) then&lt;br /&gt;
                local sizenumber = tonumber(mw.ustring.match(size,&amp;quot;%d*&amp;quot;)) or 0;&lt;br /&gt;
                if sizenumber &amp;gt; maxsizenumber and maxsizenumber &amp;gt; 0 then&lt;br /&gt;
                    size = maxsize;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            -- check to see if upright bigger than maxsize (at default preferred size)&lt;br /&gt;
            if not isempty(upright) then&lt;br /&gt;
                local uprightnumber = tonumber(upright) or (upright == &amp;quot;yes&amp;quot; and 0.75) or 0&lt;br /&gt;
                if uprightnumber*defaultThumbnailSize &amp;gt; maxsizenumber and maxsizenumber &amp;gt; 0 then&lt;br /&gt;
                    upright = tostring(maxsizenumber/defaultThumbnailSize)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        -- add px to size if just a number&lt;br /&gt;
        if (tonumber(size) or 0) &amp;gt; 0 then&lt;br /&gt;
            size = size .. &amp;quot;px&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        -- add px to sizedefault if just a number&lt;br /&gt;
        if (tonumber(sizedefault) or 0) &amp;gt; 0 then&lt;br /&gt;
            sizedefault = sizedefault .. &amp;quot;px&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. image;&lt;br /&gt;
        if not isempty(page) then&lt;br /&gt;
            result = result .. &amp;quot;|page=&amp;quot; .. page;&lt;br /&gt;
        end&lt;br /&gt;
        if not isempty(size) then&lt;br /&gt;
            result = result .. &amp;quot;|&amp;quot; .. size;&lt;br /&gt;
        elseif not isempty(sizedefault) and isempty(upright) then&lt;br /&gt;
            result = result .. &amp;quot;|&amp;quot; .. sizedefault;&lt;br /&gt;
        else&lt;br /&gt;
            result = result .. &amp;quot;|frameless&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        if center == &amp;quot;yes&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|center&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if not isempty(alt) then&lt;br /&gt;
            result = result .. &amp;quot;|alt=&amp;quot; .. alt;&lt;br /&gt;
        end&lt;br /&gt;
        if not isempty(link) then&lt;br /&gt;
            result = result .. &amp;quot;|link=&amp;quot; .. link;&lt;br /&gt;
        end&lt;br /&gt;
        if border == &amp;quot;yes&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|border&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        if upright == &amp;quot;yes&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|upright&amp;quot;;&lt;br /&gt;
        elseif upright ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|upright=&amp;quot; .. upright;&lt;br /&gt;
        end&lt;br /&gt;
        if thumbtime ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|thumbtime=&amp;quot; .. thumbtime;&lt;br /&gt;
        end&lt;br /&gt;
        if not isempty(class) then&lt;br /&gt;
            result = result .. &amp;quot;|class=&amp;quot; .. class;&lt;br /&gt;
        end&lt;br /&gt;
        -- if alt value is a keyword then do not use as a description&lt;br /&gt;
        if alt == &amp;quot;thumbnail&amp;quot; or alt == &amp;quot;thumb&amp;quot; or alt == &amp;quot;frameless&amp;quot; or alt == &amp;quot;left&amp;quot; or alt == &amp;quot;center&amp;quot; or alt == &amp;quot;right&amp;quot; or alt == &amp;quot;upright&amp;quot; or alt == &amp;quot;border&amp;quot; or mw.ustring.match(alt or &amp;quot;&amp;quot;, &amp;#039;^[0-9]*px$&amp;#039;, 1) ~= nil then&lt;br /&gt;
            alt = nil;&lt;br /&gt;
        end&lt;br /&gt;
        if not isempty(title) then&lt;br /&gt;
            -- does title param contain any templatestyles? If yes then set to blank.&lt;br /&gt;
            if mw.ustring.match(frame:preprocess(title), &amp;#039;UNIQ%-%-templatestyles&amp;#039;, 1) ~= nil then&lt;br /&gt;
                title = nil;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if not isempty(title) then&lt;br /&gt;
            result = result .. &amp;quot;|&amp;quot; .. title;&lt;br /&gt;
        end&lt;br /&gt;
        result = result .. &amp;quot;]]&amp;quot;;&lt;br /&gt;
        &lt;br /&gt;
        return result;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return i;&lt;/div&gt;</summary>
		<author><name>imported&gt;WOSlinker</name></author>
	</entry>
</feed>