Module:InfoboxImage: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
m (1 revision imported) |
m (1 revision imported) |
||
| (One intermediate revision by one other user not shown) | |||
| Line 17: | Line 17: | ||
-- More details available at the "Module:InfoboxImage/doc" page |
-- More details available at the "Module:InfoboxImage/doc" page |
||
| − | local i = {} |
+ | local i = {} |
| + | -- List of placeholder images and tracking categories stored in [[Module:InfoboxImage/data]] |
||
| − | local placeholder_image = { |
||
| + | -- Other constants: |
||
| − | "Blue - Replace this image female.svg", |
||
| + | -- the system-wide default thumbnail size (in px) |
||
| − | "Blue - Replace this image male.svg", |
||
| + | local defaultThumbnailSize = 250 |
||
| − | "Flag of None (square).svg", |
||
| − | "Flag of None.svg", |
||
| − | "Flag of.svg", |
||
| − | "Green - Replace this image female.svg", |
||
| − | "Green - Replace this image male.svg", |
||
| − | "Image is needed female.svg", |
||
| − | "Image is needed male.svg", |
||
| − | "Location map of None.svg", |
||
| − | "Male no free image yet.png", |
||
| − | "Missing flag.png", |
||
| − | "No flag.svg", |
||
| − | "No free portrait.svg", |
||
| − | "No portrait (female).svg", |
||
| − | "No portrait (male).svg", |
||
| − | "Red - Replace this image female.svg", |
||
| − | "Red - Replace this image male.svg", |
||
| − | "Replace this image female.svg", |
||
| − | "Replace this image male (blue).svg", |
||
| − | "Replace this image male.svg", |
||
| − | "Silver - Replace this image female.svg", |
||
| − | "Silver - Replace this image male.svg", |
||
| − | "Replace this image.svg", |
||
| − | "Cricket no pic.png", |
||
| − | "CarersLogo.gif", |
||
| − | "Diagram Needed.svg", |
||
| − | "Example.jpg", |
||
| − | "Image placeholder.png", |
||
| − | "No male portrait.svg", |
||
| − | "Nocover-upload.png", |
||
| − | "NoDVDcover copy.png", |
||
| − | "Noribbon.svg", |
||
| − | "No portrait-BFD-test.svg", |
||
| − | "Placeholder barnstar ribbon.png", |
||
| − | "Project Trains no image.png", |
||
| − | "Image-request.png", |
||
| − | "Sin bandera.svg", |
||
| − | "Sin escudo.svg", |
||
| − | "Replace this image - temple.png", |
||
| − | "Replace this image butterfly.png", |
||
| − | "Replace this image.svg", |
||
| − | "Replace this image1.svg", |
||
| − | "Resolution angle.png", |
||
| − | "Image-No portrait-text-BFD-test.svg", |
||
| − | "Insert image here.svg", |
||
| − | "No image available.png", |
||
| − | "NO IMAGE YET square.png", |
||
| − | "NO IMAGE YET.png", |
||
| − | "No Photo Available.svg", |
||
| − | "No Screenshot.svg", |
||
| − | "No-image-available.jpg", |
||
| − | "Null.png", |
||
| − | "PictureNeeded.gif", |
||
| − | "Place holder.jpg", |
||
| − | "Unbenannt.JPG", |
||
| − | "UploadACopyrightFreeImage.svg", |
||
| − | "UploadAnImage.gif", |
||
| − | "UploadAnImage.svg", |
||
| − | "UploadAnImageShort.svg", |
||
| − | "CarersLogo.gif", |
||
| − | "Diagram Needed.svg", |
||
| − | "No male portrait.svg", |
||
| − | "NoDVDcover copy.png", |
||
| − | "Placeholder barnstar ribbon.png", |
||
| − | "Project Trains no image.png", |
||
| − | "Image-request.png", |
||
| − | "Noimage.gif", |
||
| − | } |
||
| + | -- If page is not a user page, return tracking category. Else return empty. |
||
| − | local categories = { |
||
| + | local function trackingCat(cat) |
||
| − | 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() |
local ns = mw.title.getCurrentTitle().nsText:lower() |
||
| + | local categories = mw.loadData('Module:InfoboxImage/data').categories |
||
| − | return not (ns == 'user' or ns == 'user talk') |
||
| + | return (ns ~= 'user' and ns ~= 'user talk' and categories[cat]) or "" |
||
end |
end |
||
| + | -- Determine whether image is a placeholder |
||
function i.IsPlaceholder(image) |
function i.IsPlaceholder(image) |
||
-- change underscores to spaces |
-- change underscores to spaces |
||
| Line 128: | Line 60: | ||
image = mw.ustring.upper(mw.ustring.sub(image,1,1)) .. mw.ustring.sub(image,2); |
image = mw.ustring.upper(mw.ustring.sub(image,1,1)) .. mw.ustring.sub(image,2); |
||
| + | local placeholder_image = mw.loadData('Module:InfoboxImage/data').placeholder_image |
||
| − | for i,j in pairs(placeholder_image) do |
||
| − | + | return placeholder_image[image] |
|
| + | end |
||
| − | return true |
||
| + | |||
| − | end |
||
| + | local function isempty(x) |
||
| − | end |
||
| − | return |
+ | return (not x) or x == "" |
end |
end |
||
| + | -- Main entry point |
||
function i.InfoboxImage(frame) |
function i.InfoboxImage(frame) |
||
local image = frame.args["image"]; |
local image = frame.args["image"]; |
||
| − | if image |
+ | if isempty(image) then |
return ""; |
return ""; |
||
end |
end |
||
| Line 153: | Line 86: | ||
if string.find(image, "^%[*https?:") then |
if string.find(image, "^%[*https?:") then |
||
-- Error category. |
-- Error category. |
||
| − | return |
+ | return trackingCat("url_image_links") |
end |
end |
||
| Line 160: | Line 93: | ||
local cat = ""; |
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 |
if mw.title.getCurrentTitle().namespace == 0 and (mw.ustring.find(image, "|%s*thumb%s*[|%]]") or mw.ustring.find(image, "|%s*thumbnail%s*[|%]]")) then |
||
| − | cat = |
+ | cat = trackingCat("thumbnail_images") |
end |
end |
||
return image .. cat; |
return image .. cat; |
||
| Line 173: | Line 106: | ||
local result = ""; |
local result = ""; |
||
local page = frame.args["page"]; |
local page = frame.args["page"]; |
||
| + | local upright = frame.args["upright"] or "" |
||
local size = frame.args["size"]; |
local size = frame.args["size"]; |
||
local maxsize = frame.args["maxsize"]; |
local maxsize = frame.args["maxsize"]; |
||
| Line 180: | Line 114: | ||
local title = frame.args["title"]; |
local title = frame.args["title"]; |
||
local border = frame.args["border"]; |
local border = frame.args["border"]; |
||
| − | local upright = frame.args["upright"] or ""; |
||
local thumbtime = frame.args["thumbtime"] or ""; |
local thumbtime = frame.args["thumbtime"] or ""; |
||
local center = frame.args["center"]; |
local center = frame.args["center"]; |
||
| Line 196: | Line 129: | ||
end |
end |
||
| − | if |
+ | if not isempty(maxsize) then |
| − | -- if no sizedefault then set to maxsize |
+ | -- if no sizedefault nor upright, then set to maxsize |
| − | if sizedefault |
+ | if isempty(sizedefault) and isempty(upright) then |
sizedefault = maxsize |
sizedefault = maxsize |
||
end |
end |
||
-- check to see if size bigger than maxsize |
-- check to see if size bigger than maxsize |
||
| − | + | local maxsizenumber = tonumber(mw.ustring.match(maxsize,"%d*")) or 0; |
|
| + | if not isempty(size) then |
||
local sizenumber = tonumber(mw.ustring.match(size,"%d*")) or 0; |
local sizenumber = tonumber(mw.ustring.match(size,"%d*")) or 0; |
||
| − | + | if sizenumber > maxsizenumber and maxsizenumber > 0 then |
|
| − | if sizenumber>maxsizenumber and maxsizenumber>0 then |
||
size = maxsize; |
size = maxsize; |
||
| + | end |
||
| + | end |
||
| + | -- check to see if upright bigger than maxsize (at default preferred size) |
||
| + | if not isempty(upright) then |
||
| + | local uprightnumber = tonumber(upright) or (upright == "yes" and 0.75) or 0 |
||
| + | if uprightnumber*defaultThumbnailSize > maxsizenumber and maxsizenumber > 0 then |
||
| + | upright = tostring(maxsizenumber/defaultThumbnailSize) |
||
end |
end |
||
end |
end |
||
| Line 220: | Line 160: | ||
result = "[[File:" .. image; |
result = "[[File:" .. image; |
||
| − | if |
+ | if not isempty(page) then |
result = result .. "|page=" .. page; |
result = result .. "|page=" .. page; |
||
end |
end |
||
| − | if |
+ | if not isempty(size) then |
result = result .. "|" .. size; |
result = result .. "|" .. size; |
||
| − | elseif sizedefault |
+ | elseif not isempty(sizedefault) and isempty(upright) then |
result = result .. "|" .. sizedefault; |
result = result .. "|" .. sizedefault; |
||
else |
else |
||
| Line 233: | Line 173: | ||
result = result .. "|center" |
result = result .. "|center" |
||
end |
end |
||
| − | if |
+ | if not isempty(alt) then |
result = result .. "|alt=" .. alt; |
result = result .. "|alt=" .. alt; |
||
end |
end |
||
| − | if |
+ | if not isempty(link) then |
result = result .. "|link=" .. link; |
result = result .. "|link=" .. link; |
||
end |
end |
||
| Line 250: | Line 190: | ||
result = result .. "|thumbtime=" .. thumbtime; |
result = result .. "|thumbtime=" .. thumbtime; |
||
end |
end |
||
| − | if |
+ | if not isempty(class) then |
result = result .. "|class=" .. class; |
result = result .. "|class=" .. class; |
||
end |
end |
||
| Line 257: | Line 197: | ||
alt = nil; |
alt = nil; |
||
end |
end |
||
| − | if |
+ | if not isempty(title) then |
-- does title param contain any templatestyles? If yes then set to blank. |
-- does title param contain any templatestyles? If yes then set to blank. |
||
if mw.ustring.match(frame:preprocess(title), 'UNIQ%-%-templatestyles', 1) ~= nil then |
if mw.ustring.match(frame:preprocess(title), 'UNIQ%-%-templatestyles', 1) ~= nil then |
||
| Line 263: | Line 203: | ||
end |
end |
||
end |
end |
||
| − | if |
+ | if not isempty(title) then |
result = result .. "|" .. title; |
result = result .. "|" .. title; |
||
end |
end |
||
Latest revision as of 20:59, 4 November 2025
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
-- 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 = {}
-- List of placeholder images and tracking categories stored in [[Module:InfoboxImage/data]]
-- Other constants:
-- the system-wide default thumbnail size (in px)
local defaultThumbnailSize = 250
-- If page is not a user page, return tracking category. Else return empty.
local function trackingCat(cat)
local ns = mw.title.getCurrentTitle().nsText:lower()
local categories = mw.loadData('Module:InfoboxImage/data').categories
return (ns ~= 'user' and ns ~= 'user talk' and categories[cat]) or ""
end
-- Determine whether image is a placeholder
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);
local placeholder_image = mw.loadData('Module:InfoboxImage/data').placeholder_image
return placeholder_image[image]
end
local function isempty(x)
return (not x) or x == ""
end
-- Main entry point
function i.InfoboxImage(frame)
local image = frame.args["image"];
if isempty(image) 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 string.find(image, "^%[*https?:") then
-- Error category.
return trackingCat("url_image_links")
end
if mw.ustring.sub(image,1,2) == "[[" then
-- search for thumbnail images and add to tracking cat if found
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 = trackingCat("thumbnail_images")
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
-- Found strip marker at begining, so pass don't process at all
return image;
else
local result = "";
local page = frame.args["page"];
local upright = frame.args["upright"] or ""
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 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 not isempty(maxsize) then
-- if no sizedefault nor upright, then set to maxsize
if isempty(sizedefault) and isempty(upright) then
sizedefault = maxsize
end
-- check to see if size bigger than maxsize
local maxsizenumber = tonumber(mw.ustring.match(maxsize,"%d*")) or 0;
if not isempty(size) then
local sizenumber = tonumber(mw.ustring.match(size,"%d*")) or 0;
if sizenumber > maxsizenumber and maxsizenumber > 0 then
size = maxsize;
end
end
-- check to see if upright bigger than maxsize (at default preferred size)
if not isempty(upright) then
local uprightnumber = tonumber(upright) or (upright == "yes" and 0.75) or 0
if uprightnumber*defaultThumbnailSize > maxsizenumber and maxsizenumber > 0 then
upright = tostring(maxsizenumber/defaultThumbnailSize)
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 not isempty(page) then
result = result .. "|page=" .. page;
end
if not isempty(size) then
result = result .. "|" .. size;
elseif not isempty(sizedefault) and isempty(upright) then
result = result .. "|" .. sizedefault;
else
result = result .. "|frameless";
end
if center == "yes" then
result = result .. "|center"
end
if not isempty(alt) then
result = result .. "|alt=" .. alt;
end
if not isempty(link) 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 not isempty(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 not isempty(title) 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 not isempty(title) then
result = result .. "|" .. title;
end
result = result .. "]]";
return result;
end
end
return i;