Diff: Module:InfoboxImage
Comparing revision #1 (2022-03-13 19:18:18) with revision #2 (2023-02-02 05:29:43).
| Old | New |
|---|---|
-- Inputs: |
-- Inputs: |
-- image - Can either be a bare filename (with or without the File:/Image: prefix) or a fully formatted image link |
-- 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) |
-- page - page to display for multipage images (DjVu) |
-- size - size to display the image |
-- size - size to display the image |
-- maxsize - maximum size for image |
-- maxsize - maximum size for image |
-- sizedefault - default size to display the image if size param is blank |
-- sizedefault - default size to display the image if size param is blank |
-- alt - alt text for image |
-- alt - alt text for image |
-- title - title text for image |
-- title - title text for image |
-- border - set to yes if border |
-- border - set to yes if border |
-- center - set to yes, if the image has to be centered |
-- center - set to yes, if the image has to be centered |
-- upright - upright image param |
-- upright - upright image param |
-- suppressplaceholder - if yes then checks to see if image is a placeholder and suppresses it |
-- suppressplaceholder - if yes then checks to see if image is a placeholder and suppresses it |
-- link - page to visit when clicking on image |
-- link - page to visit when clicking on image |
-- class - HTML classes to add to the image |
-- class - HTML classes to add to the image |
-- Outputs: |
-- Outputs: |
-- Formatted image. |
-- Formatted image. |
-- More details available at the "Module:InfoboxImage/doc" page |
-- More details available at the "Module:InfoboxImage/doc" page |
local i = {}; |
local i = {}; |
local placeholder_image = { |
local placeholder_image = { |
"Blue - Replace this image female.svg", |
"Blue - Replace this image female.svg", |
"Blue - Replace this image male.svg", |
"Blue - Replace this image male.svg", |
"Female no free image yet.png", |
"Female no free image yet.png", |
"Flag of None (square).svg", |
"Flag of None (square).svg", |
"Flag of None.svg", |
"Flag of None.svg", |
"Flag of.svg", |
"Flag of.svg", |
"Green - Replace this image female.svg", |
"Green - Replace this image female.svg", |
"Green - Replace this image male.svg", |
"Green - Replace this image male.svg", |
"Image is needed female.svg", |
"Image is needed female.svg", |
"Image is needed male.svg", |
"Image is needed male.svg", |
"Location map of None.svg", |
"Location map of None.svg", |
"Male no free image yet.png", |
"Male no free image yet.png", |
"Missing flag.png", |
"Missing flag.png", |
"No flag.svg", |
"No flag.svg", |
"No free portrait.svg", |
"No free portrait.svg", |
"No portrait (female).svg", |
"No portrait (female).svg", |
"No portrait (male).svg", |
"No portrait (male).svg", |
"Red - Replace this image female.svg", |
"Red - Replace this image female.svg", |
"Red - Replace this image male.svg", |
"Red - Replace this image male.svg", |
"Replace this image female (blue).svg", |
"Replace this image female (blue).svg", |
"Replace this image female.svg", |
"Replace this image female.svg", |
"Replace this image male (blue).svg", |
"Replace this image male (blue).svg", |
"Replace this image male.svg", |
"Replace this image male.svg", |
"Silver - Replace this image female.svg", |
"Silver - Replace this image female.svg", |
"Silver - Replace this image male.svg", |
"Silver - Replace this image male.svg", |
"Replace this image.svg", |
"Replace this image.svg", |
"Cricket no pic.png", |
"Cricket no pic.png", |
"CarersLogo.gif", |
"CarersLogo.gif", |
"Diagram Needed.svg", |
"Diagram Needed.svg", |
"Example.jpg", |
"Example.jpg", |
"Image placeholder.png", |
"Image placeholder.png", |
"No male portrait.svg", |
"No male portrait.svg", |
"Nocover-upload.png", |
"Nocover-upload.png", |
"NoDVDcover copy.png", |
"NoDVDcover copy.png", |
"Noribbon.svg", |
"Noribbon.svg", |
"No portrait-BFD-test.svg", |
"No portrait-BFD-test.svg", |
"Placeholder barnstar ribbon.png", |
"Placeholder barnstar ribbon.png", |
"Project Trains no image.png", |
"Project Trains no image.png", |
"Image-request.png", |
"Image-request.png", |
"Sin bandera.svg", |
"Sin bandera.svg", |
"Sin escudo.svg", |
"Sin escudo.svg", |
"Replace this image - temple.png", |
"Replace this image - temple.png", |
"Replace this image butterfly.png", |
"Replace this image butterfly.png", |
"Replace this image.svg", |
"Replace this image.svg", |
"Replace this image1.svg", |
"Replace this image1.svg", |
"Resolution angle.png", |
"Resolution angle.png", |
"Image-No portrait-text-BFD-test.svg", |
"Image-No portrait-text-BFD-test.svg", |
"Insert image here.svg", |
"Insert image here.svg", |
"No image available.png", |
"No image available.png", |
"NO IMAGE YET square.png", |
"NO IMAGE YET square.png", |
"NO IMAGE YET.png", |
"NO IMAGE YET.png", |
"No Photo Available.svg", |
"No Photo Available.svg", |
"No Screenshot.svg", |
"No Screenshot.svg", |
"No-image-available.jpg", |
"No-image-available.jpg", |
"Null.png", |
"Null.png", |
"PictureNeeded.gif", |
"PictureNeeded.gif", |
"Place holder.jpg", |
"Place holder.jpg", |
"Unbenannt.JPG", |
"Unbenannt.JPG", |
"UploadACopyrightFreeImage.svg", |
"UploadACopyrightFreeImage.svg", |
"UploadAnImage.gif", |
"UploadAnImage.gif", |
"UploadAnImage.svg", |
"UploadAnImage.svg", |
"UploadAnImageShort.svg", |
"UploadAnImageShort.svg", |
"CarersLogo.gif", |
"CarersLogo.gif", |
"Diagram Needed.svg", |
"Diagram Needed.svg", |
"No male portrait.svg", |
"No male portrait.svg", |
"NoDVDcover copy.png", |
"NoDVDcover copy.png", |
"Placeholder barnstar ribbon.png", |
"Placeholder barnstar ribbon.png", |
"Project Trains no image.png", |
"Project Trains no image.png", |
"Image-request.png", |
"Image-request.png", |
"Noimage.gif", |
"Noimage.gif", |
} |
} |
function i.IsPlaceholder(image) |
function i.IsPlaceholder(image) |
-- change underscores to spaces |
-- change underscores to spaces |
image = mw.ustring.gsub(image, "_", " "); |
image = mw.ustring.gsub(image, "_", " "); |
assert(image ~= nil, 'mw.ustring.gsub(image, "_", " ") must not return nil') |
assert(image ~= nil, 'mw.ustring.gsub(image, "_", " ") must not return nil') |
-- if image starts with [[ then remove that and anything after | |
-- if image starts with [[ then remove that and anything after | |
if mw.ustring.sub(image,1,2) == "[[" then |
if mw.ustring.sub(image,1,2) == "[[" then |
image = mw.ustring.sub(image,3); |
image = mw.ustring.sub(image,3); |
image = mw.ustring.gsub(image, "([^|]*)|.*", "%1"); |
image = mw.ustring.gsub(image, "([^|]*)|.*", "%1"); |
assert(image ~= nil, 'mw.ustring.gsub(image, "([^|]*)|.*", "%1") must not return nil') |
assert(image ~= nil, 'mw.ustring.gsub(image, "([^|]*)|.*", "%1") must not return nil') |
end |
end |
-- Trim spaces |
-- Trim spaces |
image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1'); |
image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1'); |
assert(image ~= nil, "mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1') must not return nil") |
assert(image ~= nil, "mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1') must not return nil") |
-- remove prefix if exists |
-- remove prefix if exists |
local allNames = mw.site.namespaces[6].aliases |
local allNames = mw.site.namespaces[6].aliases |
allNames[#allNames + 1] = mw.site.namespaces[6].name |
allNames[#allNames + 1] = mw.site.namespaces[6].name |
allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName |
allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName |
for i, name in ipairs(allNames) do |
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 |
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); |
image = mw.ustring.sub(image, mw.ustring.len(name) + 2); |
break |
break |
end |
end |
end |
end |
-- Trim spaces |
-- Trim spaces |
image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1'); |
image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1'); |
-- capitalise first letter |
-- capitalise first letter |
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); |
for i,j in pairs(placeholder_image) do |
for i,j in pairs(placeholder_image) do |
if image == j then |
if image == j then |
return true |
return true |
end |
end |
end |
end |
return false |
return false |
end |
end |
function i.InfoboxImage(frame) |
function i.InfoboxImage(frame) |
local image = frame.args["image"]; |
local image = frame.args["image"]; |
if image == "" or image == nil then |
if image == "" or image == nil then |
return ""; |
return ""; |
end |
end |
if image == " " then |
if image == " " then |
return image; |
return image; |
end |
end |
if frame.args["suppressplaceholder"] ~= "no" then |
if frame.args["suppressplaceholder"] ~= "no" then |
if i.IsPlaceholder(image) == true then |
if i.IsPlaceholder(image) == true then |
return ""; |
return ""; |
end |
end |
end |
end |
if mw.ustring.lower(mw.ustring.sub(image,1,5)) == "http:" then |
if mw.ustring.lower(mw.ustring.sub(image,1,5)) == "http:" then |
return ""; |
return ""; |
end |
end |
if mw.ustring.lower(mw.ustring.sub(image,1,6)) == "[http:" then |
if mw.ustring.lower(mw.ustring.sub(image,1,6)) == "[http:" then |
return ""; |
return ""; |
end |
end |
if mw.ustring.lower(mw.ustring.sub(image,1,7)) == "[[http:" then |
if mw.ustring.lower(mw.ustring.sub(image,1,7)) == "[[http:" then |
return ""; |
return ""; |
end |
end |
if mw.ustring.lower(mw.ustring.sub(image,1,6)) == "https:" then |
if mw.ustring.lower(mw.ustring.sub(image,1,6)) == "https:" then |
return ""; |
return ""; |
end |
end |
if mw.ustring.lower(mw.ustring.sub(image,1,7)) == "[https:" then |
if mw.ustring.lower(mw.ustring.sub(image,1,7)) == "[https:" then |
return ""; |
return ""; |
end |
end |
if mw.ustring.lower(mw.ustring.sub(image,1,8)) == "[[https:" then |
if mw.ustring.lower(mw.ustring.sub(image,1,8)) == "[[https:" then |
return ""; |
return ""; |
end |
end |
if mw.ustring.sub(image,1,2) == "[[" then |
if mw.ustring.sub(image,1,2) == "[[" then |
-- search for thumbnail images and add to tracking cat if found |
-- search for thumbnail images and add to tracking cat if found |
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 = "[[Category:Pages using infoboxes with thumbnail images]]"; |
cat = "[[Category:Pages using infoboxes with thumbnail images]]"; |
end |
end |
return image .. cat; |
return image .. cat; |
elseif mw.ustring.sub(image,1,2) == "{{" and mw.ustring.sub(image,1,3) ~= "{{{" then |
elseif mw.ustring.sub(image,1,2) == "{{" and mw.ustring.sub(image,1,3) ~= "{{{" then |
return image; |
return image; |
elseif mw.ustring.sub(image,1,1) == "<" then |
elseif mw.ustring.sub(image,1,1) == "<" then |
return image; |
return image; |
elseif mw.ustring.sub(image,1,5) == mw.ustring.char(127).."UNIQ" then |
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 |
-- Found strip marker at begining, so pass don't process at all |
return image; |
return image; |
elseif mw.ustring.sub(image,4,9) == "`UNIQ-" then |
elseif mw.ustring.sub(image,4,9) == "`UNIQ-" then |
-- Found strip marker at begining, so pass don't process at all |
-- Found strip marker at begining, so pass don't process at all |
return image; |
return image; |
else |
else |
local result = ""; |
local result = ""; |
local page = frame.args["page"]; |
local page = frame.args["page"]; |
local size = frame.args["size"]; |
local size = frame.args["size"]; |
local maxsize = frame.args["maxsize"]; |
local maxsize = frame.args["maxsize"]; |
local sizedefault = frame.args["sizedefault"]; |
local sizedefault = frame.args["sizedefault"]; |
local alt = frame.args["alt"]; |
local alt = frame.args["alt"]; |
local link = frame.args["link"]; |
local link = frame.args["link"]; |
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 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"]; |
local class = frame.args["class"]; |
local class = frame.args["class"]; |
-- remove prefix if exists |
-- remove prefix if exists |
local allNames = mw.site.namespaces[6].aliases |
local allNames = mw.site.namespaces[6].aliases |
allNames[#allNames + 1] = mw.site.namespaces[6].name |
allNames[#allNames + 1] = mw.site.namespaces[6].name |
allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName |
allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName |
for i, name in ipairs(allNames) do |
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 |
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); |
image = mw.ustring.sub(image, mw.ustring.len(name) + 2); |
break |
break |
end |
end |
end |
end |
if maxsize ~= "" and maxsize ~= nil then |
if maxsize ~= "" and maxsize ~= nil then |
-- if no sizedefault then set to maxsize |
-- if no sizedefault then set to maxsize |
if sizedefault == "" or sizedefault == nil then |
if sizedefault == "" or sizedefault == nil then |
sizedefault = maxsize |
sizedefault = maxsize |
end |
end |
-- check to see if size bigger than maxsize |
-- check to see if size bigger than maxsize |
if size ~= "" and size ~= nil then |
if size ~= "" and size ~= nil then |
local sizenumber = tonumber(mw.ustring.match(size,"%d*")) or 0; |
local sizenumber = tonumber(mw.ustring.match(size,"%d*")) or 0; |
local maxsizenumber = tonumber(mw.ustring.match(maxsize,"%d*")) or 0; |
local maxsizenumber = tonumber(mw.ustring.match(maxsize,"%d*")) or 0; |
if sizenumber>maxsizenumber and maxsizenumber>0 then |
if sizenumber>maxsizenumber and maxsizenumber>0 then |
size = maxsize; |
size = maxsize; |
end |
end |
end |
end |
end |
end |
-- add px to size if just a number |
-- add px to size if just a number |
if (tonumber(size) or 0) > 0 then |
if (tonumber(size) or 0) > 0 then |
size = size .. "px"; |
size = size .. "px"; |
end |
end |
-- add px to sizedefault if just a number |
-- add px to sizedefault if just a number |
if (tonumber(sizedefault) or 0) > 0 then |
if (tonumber(sizedefault) or 0) > 0 then |
sizedefault = sizedefault .. "px"; |
sizedefault = sizedefault .. "px"; |
end |
end |
result = "[[File:" .. image; |
result = "[[File:" .. image; |
if page ~= "" and page ~= nil then |
if page ~= "" and page ~= nil then |
result = result .. "|page=" .. page; |
result = result .. "|page=" .. page; |
end |
end |
if size ~= "" and size ~= nil then |
if size ~= "" and size ~= nil then |
result = result .. "|" .. size; |
result = result .. "|" .. size; |
elseif sizedefault ~= "" and sizedefault ~= nil then |
elseif sizedefault ~= "" and sizedefault ~= nil then |
result = result .. "|" .. sizedefault; |
result = result .. "|" .. sizedefault; |
else |
else |
result = result .. "|frameless"; |
result = result .. "|frameless"; |
end |
end |
if center == "yes" then |
if center == "yes" then |
result = result .. "|center" |
result = result .. "|center" |
end |
end |
if alt ~= "" and alt ~= nil then |
if alt ~= "" and alt ~= nil then |
result = result .. "|alt=" .. alt; |
result = result .. "|alt=" .. alt; |
end |
end |
if link ~= "" and link ~= nil then |
if link ~= "" and link ~= nil then |
result = result .. "|link=" .. link; |
result = result .. "|link=" .. link; |
end |
end |
if border == "yes" then |
if border == "yes" then |
result = result .. "|border"; |
result = result .. "|border"; |
end |
end |
if upright == "yes" then |
if upright == "yes" then |
result = result .. "|upright"; |
result = result .. "|upright"; |
elseif upright ~= "" then |
elseif upright ~= "" then |
result = result .. "|upright=" .. upright; |
result = result .. "|upright=" .. upright; |
end |
end |
if thumbtime ~= "" then |
if thumbtime ~= "" then |
result = result .. "|thumbtime=" .. thumbtime; |
result = result .. "|thumbtime=" .. thumbtime; |
end |
end |
if class ~= nil and class ~= "" then |
if class ~= nil and class ~= "" then |
result = result .. "|class=" .. class; |
result = result .. "|class=" .. class; |
end |
end |
-- if alt value is a keyword then do not use as a description |
-- 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 |
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; |
alt = nil; |
end |
end |
if title ~= "" and title ~= nil then |
if title ~= "" and title ~= nil 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 |
title = nil; |
title = nil; |
end |
end |
end |
end |
if title ~= "" and title ~= nil then |
if title ~= "" and title ~= nil then |
result = result .. "|" .. title; |
result = result .. "|" .. title; |
end |
end |
result = result .. "]]"; |
result = result .. "]]"; |
return result; |
return result; |
end |
end |
end |
end |
return i; |
return i; |