Module:InfoboxImage
Documentation for this module may be created at Module:InfoboxImage/doc
-- 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
-- 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 categories = {
url_image_links = "[[Category:Pages using infoboxes with URL in image parameter]]",
thumbnail_images = "[[Category:Pages using infoboxes with thumbnail images]]",
}
local function trackable()
local ns = mw.title.getCurrentTitle().nsText:lower()
return not (ns == 'user' or ns == 'user talk')
end
function i.InfoboxImage(frame)
local image = frame.args["image"];
-- If no image is provided, return an empty string (no image will be shown)
if image == "" or image == nil then
return "";
end
if image == " " then
return image;
end
-- If the image has a URL, it should be handled here (error category or similar).
if string.find(image, "^%[*https?:") then
return trackable() and categories.url_image_links or ""
end
if mw.ustring.sub(image, 1, 2) == "[[" then
-- If it's a thumbnail image, handle it and add it to tracking category if needed
local cat = "";
if mw.title.getCurrentTitle().namespace == 0 and (mw.ustring.find(image, "|%s*thumb%s*[|%]]") or mw.ustring.find(image, "|%s*thumbnail%s*[|%]]")) then
cat = trackable() and categories.thumbnail_images or ""
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, 8) == mw.ustring.char(127) .. "'\"`UNIQ" then
-- Strip marker found, don't process further
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"];
-- Clean up image name by removing any namespace prefix
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 sizedefault == "" or sizedefault == nil then
sizedefault = maxsize
end
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 it's just a number
if (tonumber(size) or 0) > 0 then
size = size .. "px";
end
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
-- Return the formatted image
result = result .. "]]";
return result;
end
end
return i;