Module:InfoboxImage

-- Inputs: --   image - Can either be a bare filename (with or without the File:/Image: prefix) or a fully formatted image link --   page - page to display for multipage images (DjVu) --   size - size to display the image --   maxsize - maximum size for image --   sizedefault - default size to display the image if size param is blank --   alt - alt text for image --   title - title text for image --   border - set to yes if border --   center - set to yes, if the image has to be centered --   upright - upright image param --   suppressplaceholder - if yes then checks to see if image is a placeholder and suppresses it --    link - page to visit when clicking on image -- Outputs: --   Formatted image. -- More details available at the "Module:InfoboxImage/doc" page local i = {}; local placeholder_image = { "None.svg", "None (Dorne).svg", "32x32 none.png", "No image.jpg", } function i.IsPlaceholder(image) -- change underscores to spaces image = mw.ustring.gsub(image, "_", " "); assert(image ~= nil, 'mw.ustring.gsub(image, "_", " ") must not return nil') -- if image starts with [[ then remove that and anything after |   if mw.ustring.sub(image,1,2) == "[[" then        image = mw.ustring.sub(image,3);        image = mw.ustring.gsub(image, "([^|]*)|.*", "%1");        assert(image ~= nil, 'mw.ustring.gsub(image, "([^|]*)|.*", "%1") must not return nil')    end    -- Trim spaces    image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1');    assert(image ~= nil, "mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1') must not return nil")    -- remove prefix if exists    local allNames = mw.site.namespaces[6].aliases    allNames[#allNames + 1] = mw.site.namespaces[6].name    allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName    for i, name in ipairs(allNames) do        if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. ":") then            image = mw.ustring.sub(image, mw.ustring.len(name) + 2);            break        end    end    -- Trim spaces    image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1');    -- capitalise first letter    image = mw.ustring.upper(mw.ustring.sub(image,1,1)) .. mw.ustring.sub(image,2);    for i,j in pairs(placeholder_image) do        if image == j then            return true        end    end    return false end function i.InfoboxImage(frame)    local image = frame.args["image"];    if image == "" or image == nil then        return "";    end    if image == " " then        return image;    end    if frame.args["suppressplaceholder"] ~= "no" then        if i.IsPlaceholder(image) == true then            return "";        end    end    if mw.ustring.lower(mw.ustring.sub(image,1,5)) == "http:" then        return "";    end    if mw.ustring.lower(mw.ustring.sub(image,1,6)) == "[http:" then        return "";    end    if mw.ustring.lower(mw.ustring.sub(image,1,7)) == "%s*thumb%s*[|%") or mw.ustring.find(image, "|%s*thumbnail%s*[|%]]")) then            return image .. "";        elseif mw.title.getCurrentTitle.namespace == 0 then            return image .. "";        else            return image;        end    elseif mw.ustring.sub(image,1,2) == "{{" and mw.ustring.sub(image,1,3) ~= "{{{" then        return image;    elseif mw.ustring.sub(image,1,1) == "<" then        return image;    elseif mw.ustring.sub(image,1,5) == mw.ustring.char(127).."UNIQ" then        -- Found strip marker at begining, so pass don't process at all        return image;    elseif mw.ustring.sub(image,4,9) == "`UNIQ-" then        -- Found strip marker at begining, so pass don't process at all        return image;    else        local result = "";        local page = frame.args["page"];        local size = frame.args["size"];        local maxsize = frame.args["maxsize"];        local sizedefault = frame.args["sizedefault"];        local alt = frame.args["alt"];        local link = frame.args["link"];        local title = frame.args["title"];        local border = frame.args["border"];        local upright = frame.args["upright"] or "";        local thumbtime = frame.args["thumbtime"] or "";        local center= frame.args["center"];        -- remove prefix if exists        local allNames = mw.site.namespaces[6].aliases        allNames[#allNames + 1] = mw.site.namespaces[6].name        allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName        for i, name in ipairs(allNames) do            if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. ":") then                image = mw.ustring.sub(image, mw.ustring.len(name) + 2);                break            end        end        if maxsize ~= "" and maxsize ~= nil then            -- if no sizedefault then set to maxsize            if sizedefault == "" or sizedefault == nil then                sizedefault = maxsize            end            -- check to see if size bigger than maxsize            if size ~= "" and size ~= nil then                local sizenumber = tonumber(mw.ustring.match(size,"%d*")) or 0;                local maxsizenumber = tonumber(mw.ustring.match(maxsize,"%d*")) or 0;                if sizenumber>maxsizenumber and maxsizenumber>0 then                    size = maxsize;                end            end        end        -- add px to size if just a number        if (tonumber(size) or 0) > 0 then            size = size .. "px";        end        -- add px to sizedefault if just a number        if (tonumber(sizedefault) or 0) > 0 then            sizedefault = sizedefault .. "px";        end        result = "[[File:" .. image;        if page ~= "" and page ~= nil then            result = result .. "|page=" .. page;        end        if size ~= "" and size ~= nil then            result = result .. "|" .. size;        elseif sizedefault ~= "" and sizedefault ~= nil then            result = result .. "|" .. sizedefault;        else            result = result .. "|frameless";        end        if center == "yes" then            result = result .. "|center"        end        if alt ~= "" and alt ~= nil then            result = result .. "|alt=" .. alt;        end        if link ~= "" and link ~= nil then            result = result .. "|link=" .. link;        end        if border == "yes" then            result = result .. "|border";        end        if upright == "yes" then            result = result .. "|upright";        elseif upright ~= "" then            result = result .. "|upright=" .. upright;        end        if thumbtime ~= "" then            result = result .. "|thumbtime=" .. thumbtime;        end        if title ~= "" and title ~= nil then            result = result .. "|" .. title;        elseif alt ~= "" and alt ~= nil then            result = result .. "|" .. alt;        end        result = result .. "]]";        return result;    end end return i;