Módulo:InfoboxImage: mudanças entre as edições
Importando predefinição/módulo da Wikipédia em português para manter layout |
Importando predefinição/módulo da Wikipédia em português para manter layout |
||
| Linha 1: | Linha 1: | ||
-- | -- Inputs: | ||
-- image | -- image - Can either be a bare filename (with or without the File:/Image: prefix) or a fully formatted image link | ||
-- page | -- page - page to display for multipage images (DjVu) | ||
-- size | -- size - size to display the image | ||
-- maxsize | -- maxsize - maximum size for image | ||
-- sizedefault | -- sizedefault - default size to display the image if size param is blank | ||
-- alt - | -- alt - alt text for image | ||
-- title | -- title - title text for image | ||
-- border | -- border - set to yes if border | ||
-- center | -- center - set to yes, if the image has to be centered | ||
-- upright - | -- upright - upright image param | ||
-- suppressplaceholder | -- suppressplaceholder - if yes then checks to see if image is a placeholder and suppresses it | ||
-- link | -- link - page to visit when clicking on image | ||
-- class | -- class - HTML classes to add to the image | ||
-- | -- Outputs: | ||
-- | -- Formatted image. | ||
-- | -- More details available at the "Module:InfoboxImage/doc" page | ||
local i = {} | local i = {} | ||
local defaultThumbnailSize = | -- 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 | |||
-- | -- Mapeamento de traduções em português para inglês | ||
local mapaParametros = { | |||
imagem = "image", | |||
["página"] = "page", | |||
tamanho = "size", | |||
["tamanhomáx"] = "maxsize", | |||
["tamanhopadrão"] = "sizedefault", | |||
["ligação"] = "link", | |||
["título"] = "title", | |||
borda = "border", | |||
tempominiatura = "thumbtime", | |||
centro = "center", | |||
classe = "class", | |||
suprimirsubstituto = "suppressplaceholder" | |||
} | |||
-- | -- Função auxiliar interceptadora | ||
local | local function normalizarArgumentos(argsOriginal) | ||
local args = {} | |||
-- | -- Copia primeiro os parâmetros em inglês | ||
for k, v in pairs(argsOriginal) do | |||
args[k] = v | |||
for | end | ||
-- Traduz e insere os parâmetros em português se a chave em inglês estiver vazia | |||
for pt, en in pairs(mapaParametros) do | |||
if (args[en] == nil or args[en] == "") and argsOriginal[pt] then | |||
args[en] = argsOriginal[pt] | |||
end | |||
end | |||
-- Normaliza valores booleanos traduzidos | |||
if args.suppressplaceholder == "não" or args.suppressplaceholder == "nao" then | |||
args.suppressplaceholder = "no" | |||
end | end | ||
return args | |||
end | end | ||
-- | -- If page is not a user page, return tracking category. Else return empty. | ||
local function trackingCat( | local function trackingCat(cat) | ||
local ns = mw.title.getCurrentTitle().nsText:lower() | 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 "" | |||
local categories = mw.loadData(' | |||
return categories[ | |||
end | 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 mw.ustring.lower(mw.ustring.sub( | -- 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 | break | ||
end | end | ||
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] | |||
local | |||
return | |||
end | end | ||
| Linha 77: | Linha 108: | ||
end | end | ||
-- | -- Main entry point | ||
function i. | function i.InfoboxImage(frame) | ||
local | -- Intercepta e traduz os argumentos no ponto de entrada | ||
local args = normalizarArgumentos(frame.args) | |||
local image = args["image"]; | |||
if isempty(image) then | |||
return ""; | |||
end | |||
if image == " " then | |||
return image; | |||
end | |||
if args["suppressplaceholder"] ~= "no" then | if args["suppressplaceholder"] ~= "no" then | ||
if i.IsPlaceholder(image) == true then return "" end | if i.IsPlaceholder(image) == true then | ||
return ""; | |||
end | |||
end | end | ||
if string.find(image, "^%[*https?:") then | if string.find(image, "^%[*https?:") then | ||
-- Error category. | |||
return trackingCat("url_image_links") | return trackingCat("url_image_links") | ||
end | end | ||
if mw.ustring.sub(image,1,2) == "[[" then | if mw.ustring.sub(image,1,2) == "[[" then | ||
local cat = "" | -- 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 = trackingCat("thumbnail_images") | cat = trackingCat("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,8) == mw.ustring.char(127).."'\"`UNIQ" then | elseif mw.ustring.sub(image,1,8) == mw.ustring.char(127).."'\"`UNIQ" then | ||
return image | -- Found strip marker at begining, so pass don't process at all | ||
return image; | |||
else | else | ||
local result = "" | local result = ""; | ||
local page = args["page"] | local page = args["page"]; | ||
local upright = args["upright"] or "" | local upright = args["upright"] or "" | ||
local size = args["size"] | local size = args["size"]; | ||
local maxsize = args["maxsize"] | local maxsize = args["maxsize"]; | ||
local sizedefault = args["sizedefault"] | local sizedefault = args["sizedefault"]; | ||
local alt = args["alt"] | local alt = args["alt"]; | ||
local link = args["link"] | local link = args["link"]; | ||
local title = args["title"] | local title = args["title"]; | ||
local border = args["border"] | local border = args["border"]; | ||
local thumbtime = args["thumbtime"] or "" | local thumbtime = args["thumbtime"] or ""; | ||
local center = args["center"] | local center = args["center"]; | ||
local class = args["class"] | local class = args["class"]; | ||
image = | -- 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 not isempty(maxsize) then | ||
-- if no sizedefault nor upright, then set to maxsize | |||
if isempty(sizedefault) and isempty(upright) then | if isempty(sizedefault) and isempty(upright) then | ||
sizedefault = maxsize | sizedefault = maxsize | ||
end | end | ||
local maxsizenumber = tonumber(mw.ustring.match(maxsize,"%d*")) or 0 | -- check to see if size bigger than maxsize | ||
local maxsizenumber = tonumber(mw.ustring.match(maxsize,"%d*")) or 0; | |||
if not isempty(size) then | 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 | ||
end | end | ||
-- check to see if upright bigger than maxsize (at default preferred size) | |||
if not isempty(upright) then | if not isempty(upright) then | ||
local uprightnumber = tonumber(upright) or (upright == "yes" and 0.75) or 0 | local uprightnumber = tonumber(upright) or (upright == "yes" and 0.75) or 0 | ||
| Linha 138: | Linha 192: | ||
end | end | ||
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 | end | ||
result = "[[Ficheiro:" .. image; | |||
if not isempty(page) then | |||
result = result .. "|page=" .. page; | |||
result = "[[Ficheiro:" .. image | end | ||
if not isempty(page) then result = result .. "|page=" .. page | |||
if not isempty(size) then | if not isempty(size) then | ||
result = result .. "|" .. size | result = result .. "|" .. size; | ||
elseif not isempty(sizedefault) and | elseif not isempty(sizedefault) and isempty(upright) then | ||
result = result .. "|" .. sizedefault | result = result .. "|" .. sizedefault; | ||
else | else | ||
result = result .. "|frameless" | result = result .. "|frameless"; | ||
end | |||
if center == "yes" then | |||
result = result .. "|center" | |||
end | end | ||
if not isempty(alt) then | 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 | 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 | |||
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 alt == "centro" or alt == "direita" or alt == "esquerda" or mw.ustring.match(alt or "", '^[0-9]*px$', 1) ~= nil then | |||
alt = nil; | |||
end | end | ||
if not isempty(title) then | if not isempty(title) then | ||
if mw.ustring.match( | -- 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 | ||
end | end | ||
result = result .. "]]" | if not isempty(title) then | ||
result = result .. "|" .. title; | |||
end | |||
result = result .. "]]"; | |||
return result | return result; | ||
end | end | ||
end | end | ||
return i | return i; | ||
Edição atual tal como às 05h40min de 6 de setembro de 2026
-- 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
-- Mapeamento de traduções em português para inglês local mapaParametros = {
imagem = "image", ["página"] = "page", tamanho = "size", ["tamanhomáx"] = "maxsize", ["tamanhopadrão"] = "sizedefault", ["ligação"] = "link", ["título"] = "title", borda = "border", tempominiatura = "thumbtime", centro = "center", classe = "class", suprimirsubstituto = "suppressplaceholder"
}
-- Função auxiliar interceptadora local function normalizarArgumentos(argsOriginal)
local args = {}
-- Copia primeiro os parâmetros em inglês
for k, v in pairs(argsOriginal) do
args[k] = v
end
-- Traduz e insere os parâmetros em português se a chave em inglês estiver vazia
for pt, en in pairs(mapaParametros) do
if (args[en] == nil or args[en] == "") and argsOriginal[pt] then
args[en] = argsOriginal[pt]
end
end
-- Normaliza valores booleanos traduzidos
if args.suppressplaceholder == "não" or args.suppressplaceholder == "nao" then
args.suppressplaceholder = "no"
end
return args
end
-- 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)
-- Intercepta e traduz os argumentos no ponto de entrada
local args = normalizarArgumentos(frame.args)
local image = args["image"];
if isempty(image) then
return "";
end
if image == " " then
return image;
end
if 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 = args["page"];
local upright = args["upright"] or ""
local size = args["size"];
local maxsize = args["maxsize"];
local sizedefault = args["sizedefault"];
local alt = args["alt"];
local link = args["link"];
local title = args["title"];
local border = args["border"];
local thumbtime = args["thumbtime"] or "";
local center = args["center"];
local class = 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 = "[[Ficheiro:" .. 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 alt == "centro" or alt == "direita" or alt == "esquerda" 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;