Module:InfoboxImage: Difference between revisions
From Test Wiki
Content deleted Content added
Created page with "-- Inputs: -- image - Can either be a bare filename (with or without the File:/Image: prefix) or a fully formatted image link -- size - size to display the image -- m..." |
m 1 revision imported |
||
| (2 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
-- 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) |
|||
-- 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 |
|||
-- 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 |
-- 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: |
-- Outputs: |
||
-- Formatted image. |
-- Formatted image. |
||
| Line 15: | Line 22: | ||
"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", |
|||
"Flag of None (square).svg", |
"Flag of None (square).svg", |
||
"Flag of None.svg", |
"Flag of None.svg", |
||
| Line 32: | Line 38: | ||
"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.svg", |
"Replace this image female.svg", |
||
"Replace this image male (blue).svg", |
"Replace this image male (blue).svg", |
||
| Line 38: | Line 43: | ||
"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", |
|||
"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", |
|||
} |
} |
||
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.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') |
|||
-- 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') |
|||
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") |
|||
-- remove file: or image: prefix if exists |
|||
-- remove prefix if exists |
|||
if mw.ustring.lower(mw.ustring.sub(image,1,5)) == "file:" then |
|||
local allNames = mw.site.namespaces[6].aliases |
|||
allNames[#allNames + 1] = mw.site.namespaces[6].name |
|||
end |
|||
allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName |
|||
if mw.ustring.lower(mw.ustring.sub(image,1,6)) == "image:" then |
|||
for i, name in ipairs(allNames) do |
|||
image = mw.ustring.sub(image,7); |
|||
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 |
end |
||
-- Trim spaces |
-- Trim spaces |
||
| Line 79: | Line 145: | ||
return image; |
return image; |
||
end |
end |
||
if frame.args["suppressplaceholder"] |
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 |
if string.find(image, "^%[*https?:") then |
||
-- Error category. |
|||
return ""; |
|||
return trackable() and categories.url_image_links or "" |
|||
end |
|||
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) == "[[" 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 = ""; |
|||
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 = trackable() and categories.thumbnail_images or "" |
|||
return image .. "[[Category:Pages using infoboxes with thumbnail images]]"; |
|||
else |
|||
return image; |
|||
end |
end |
||
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, |
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 |
-- 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 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 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 center = frame.args["center"]; |
|||
local class = frame.args["class"]; |
|||
-- remove |
-- remove prefix if exists |
||
local allNames = mw.site.namespaces[6].aliases |
|||
if mw.ustring.lower(mw.ustring.sub(image,1,5)) == "file:" then |
|||
allNames[#allNames + 1] = mw.site.namespaces[6].name |
|||
allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName |
|||
end |
|||
for i, name in ipairs(allNames) do |
|||
if mw.ustring.lower(mw.ustring.sub(image,1,6)) == "image:" 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); |
|||
break |
|||
end |
|||
end |
end |
||
| Line 142: | Line 204: | ||
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*")); |
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; |
||
| Line 151: | Line 213: | ||
if (tonumber(size) or 0) > 0 then |
if (tonumber(size) or 0) > 0 then |
||
size = size .. "px"; |
size = size .. "px"; |
||
end |
|||
-- add px to sizedefault if just a number |
|||
if (tonumber(sizedefault) or 0) > 0 then |
|||
sizedefault = sizedefault .. "px"; |
|||
end |
end |
||
result = "[[File:" .. image; |
result = "[[File:" .. image; |
||
if page ~= "" and page ~= nil then |
|||
result = result .. "|page=" .. page; |
|||
end |
|||
if size ~= "" and size ~= nil then |
if size ~= "" and size ~= nil then |
||
result = result .. "|" .. size; |
result = result .. "|" .. size; |
||
| Line 160: | Line 229: | ||
else |
else |
||
result = result .. "|frameless"; |
result = result .. "|frameless"; |
||
end |
|||
if center == "yes" then |
|||
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 |
|||
if link ~= "" and link ~= nil then |
|||
result = result .. "|link=" .. link; |
|||
end |
end |
||
if border == "yes" then |
if border == "yes" then |
||
result = result .. "|border"; |
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 |
end |
||
result = result .. "]]"; |
result = result .. "]]"; |
||