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 --   class - HTML classes to add to the image -- Outputs: --   Formatted image. -- More details available at the "Module:InfoboxImage/doc" page

local i = {};

local placeholder_image = {

}

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)) == "[[http:" then       return "";    end    if mw.ustring.lower(mw.ustring.sub(image,1,6)) == "https:" then        return "";    end    if mw.ustring.lower(mw.ustring.sub(image,1,7)) == "[https:" then        return "";    end    if mw.ustring.lower(mw.ustring.sub(image,1,8)) == "[[https:" then        return "";    end

if mw.ustring.sub(image,1,2) == "%s*thumb%s*[|%") or mw.ustring.find(image, "|%s*thumbnail%s*[|%]]")) then cat = ""; end return image .. cat; 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"]; local class = frame.args["class"]; -- 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 class ~= nil and class ~= "" then            result = result .. "|class=" .. class;        end        -- if alt value is a keyword then do not use as a description        if alt == "thumbnail" or alt == "thumb" or alt == "frameless" or alt == "left" or alt == "center" or alt == "right" or alt == "upright" or alt == "border" or mw.ustring.match(alt or "", '^[0-9]*px$', 1) ~= nil then            alt = nil;        end        if title ~= "" and title ~= nil then            -- does title param contain any templatestyles? If yes then set to blank.            if mw.ustring.match(frame:preprocess(title), 'UNIQ%-%-templatestyles', 1) ~= nil then                title = nil;            end        end        if title ~= "" and title ~= nil then            result = result .. "|" .. title;        end        result = result .. "]]"; return result; end end

return i;