<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>https://wiki.tokusatsus.com/index.php?action=history&amp;feed=atom&amp;title=M%C3%B3dulo%3AInfoboxImage</id>
	<title>Módulo:InfoboxImage - Histórico de revisão</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.tokusatsus.com/index.php?action=history&amp;feed=atom&amp;title=M%C3%B3dulo%3AInfoboxImage"/>
	<link rel="alternate" type="text/html" href="https://wiki.tokusatsus.com/index.php?title=M%C3%B3dulo:InfoboxImage&amp;action=history"/>
	<updated>2026-07-05T09:29:02Z</updated>
	<subtitle>Histórico de revisões para esta página neste wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.tokusatsus.com/index.php?title=M%C3%B3dulo:InfoboxImage&amp;diff=2477&amp;oldid=prev</id>
		<title>Tavoraadmin: Importando predefinição/módulo da Wikipédia em português para manter layout</title>
		<link rel="alternate" type="text/html" href="https://wiki.tokusatsus.com/index.php?title=M%C3%B3dulo:InfoboxImage&amp;diff=2477&amp;oldid=prev"/>
		<updated>2026-07-05T04:55:07Z</updated>

		<summary type="html">&lt;p&gt;Importando predefinição/módulo da Wikipédia em português para manter layout&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Entradas (Inputs):&lt;br /&gt;
--    image / imagem - Pode ser o nome puro do arquivo (com ou sem o prefixo Ficheiro:/File:) ou um link de imagem totalmente formatado.&lt;br /&gt;
--    page / página - Página a ser exibida para imagens multipáginas (ex: arquivos DjVu).&lt;br /&gt;
--    size / tamanho - Tamanho (largura) em que a imagem será exibida.&lt;br /&gt;
--    maxsize / tamanhomáx - Tamanho máximo limite para a exibição da imagem.&lt;br /&gt;
--    sizedefault / tamanhopadrão - Tamanho padrão a ser exibido caso o parâmetro de tamanho esteja em branco.&lt;br /&gt;
--    alt - Texto alternativo (alt text) para acessibilidade da imagem.&lt;br /&gt;
--    title / título - Texto de título/legenda interna para a imagem.&lt;br /&gt;
--    border / borda - Define como &amp;quot;yes&amp;quot; (ou &amp;quot;sim&amp;quot;) para adicionar uma borda ao redor da imagem.&lt;br /&gt;
--    center / centro - Define como &amp;quot;yes&amp;quot; (ou &amp;quot;sim&amp;quot;) se a imagem precisar ser centralizada.&lt;br /&gt;
--    upright - Parâmetro multiplicador de tamanho relativo (upright).&lt;br /&gt;
--    suppressplaceholder / suprimirsubstituto - Se definido como &amp;quot;yes&amp;quot; (ou &amp;quot;sim&amp;quot;), verifica se a imagem é um substituto padrão (placeholder) e a oculta.&lt;br /&gt;
--    link / ligação - Página da wiki para onde o usuário será direcionado ao clicar na imagem.&lt;br /&gt;
--    class / classe - Classes HTML personalizadas a serem adicionadas à tag da imagem.&lt;br /&gt;
-- Saídas (Outputs):&lt;br /&gt;
--    Imagem devidamente formatada em código MediaWiki.&lt;br /&gt;
-- Mais detalhes disponíveis na página de documentação &amp;quot;Módulo:InfoboxImage/doc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
local i = {}&lt;br /&gt;
&lt;br /&gt;
local defaultThumbnailSize = 220 &lt;br /&gt;
&lt;br /&gt;
-- Carrega o módulo utilitário para tratamento de valores booleanos (sim/não, yes/no)&lt;br /&gt;
local yesno = require(&amp;#039;Módulo:Yesno&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- Otimização: Cache dos nomes válidos para o Namespace de Arquivos/Ficheiros uma única vez&lt;br /&gt;
local fileNamespaces = {}&lt;br /&gt;
do&lt;br /&gt;
    local ns6 = mw.site.namespaces[6]&lt;br /&gt;
    -- Insere o nome local (Ficheiro), o canônico (File) e todos os aliases existentes&lt;br /&gt;
    table.insert(fileNamespaces, mw.ustring.lower(ns6.name))&lt;br /&gt;
    table.insert(fileNamespaces, mw.ustring.lower(ns6.canonicalName))&lt;br /&gt;
    for _, alias in ipairs(ns6.aliases) do&lt;br /&gt;
        table.insert(fileNamespaces, mw.ustring.lower(alias))&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Função de categorização que consome o submódulo aplicando Lazy Loading (carregamento apenas quando necessário)&lt;br /&gt;
local function trackingCat(catKey)&lt;br /&gt;
    local ns = mw.title.getCurrentTitle().nsText:lower()&lt;br /&gt;
    if ns == &amp;#039;user&amp;#039; or ns == &amp;#039;user talk&amp;#039; then return &amp;quot;&amp;quot; end&lt;br /&gt;
    &lt;br /&gt;
    local categories = mw.loadData(&amp;#039;Módulo:InfoboxImage/data&amp;#039;).categories&lt;br /&gt;
    return categories[catKey] or &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Remove os prefixos de namespace (ex: &amp;quot;Ficheiro:&amp;quot;, &amp;quot;File:&amp;quot;) do início de uma string&lt;br /&gt;
local function stripNamespace(imageName)&lt;br /&gt;
    imageName = mw.ustring.gsub(imageName, &amp;#039;^[ ]*(.-)[ ]*$&amp;#039;, &amp;#039;%1&amp;#039;) -- Trim original&lt;br /&gt;
    for _, name in ipairs(fileNamespaces) do&lt;br /&gt;
        local prefixLen = mw.ustring.len(name) + 1&lt;br /&gt;
        if mw.ustring.lower(mw.ustring.sub(imageName, 1, prefixLen)) == name .. &amp;quot;:&amp;quot; then&lt;br /&gt;
            imageName = mw.ustring.sub(imageName, prefixLen + 1)&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return mw.ustring.gsub(imageName, &amp;#039;^[ ]*(.-)[ ]*$&amp;#039;, &amp;#039;%1&amp;#039;) -- Trim pós-remoção&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function i.IsPlaceholder(image)&lt;br /&gt;
    image = mw.ustring.gsub(image, &amp;quot;_&amp;quot;, &amp;quot; &amp;quot;)&lt;br /&gt;
    if mw.ustring.sub(image,1,2) == &amp;quot;[[&amp;quot; then&lt;br /&gt;
        image = mw.ustring.sub(image,3)&lt;br /&gt;
        image = mw.ustring.gsub(image, &amp;quot;([^|]*)|.*&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    image = stripNamespace(image)&lt;br /&gt;
    image = mw.ustring.upper(mw.ustring.sub(image,1,1)) .. mw.ustring.sub(image,2)&lt;br /&gt;
&lt;br /&gt;
    -- Carregamento tardio (Lazy Load) para otimização do parsing de tabelas de dados&lt;br /&gt;
    local placeholder_images = mw.loadData(&amp;#039;Módulo:InfoboxImage/data&amp;#039;).placeholder_image&lt;br /&gt;
    return placeholder_images[image] or false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isempty(x)&lt;br /&gt;
    return (not x) or x == &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Esta função interna processa estritamente os argumentos normalizados&lt;br /&gt;
function i._InfoboxImage(args)&lt;br /&gt;
    local image = args[&amp;quot;image&amp;quot;]&lt;br /&gt;
    &lt;br /&gt;
    if isempty(image) then return &amp;quot;&amp;quot; end&lt;br /&gt;
    if image == &amp;quot;&amp;amp;nbsp;&amp;quot; then return image end&lt;br /&gt;
    &lt;br /&gt;
    if args[&amp;quot;suppressplaceholder&amp;quot;] ~= &amp;quot;no&amp;quot; then&lt;br /&gt;
        if i.IsPlaceholder(image) == true then return &amp;quot;&amp;quot; end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if string.find(image, &amp;quot;^%[*https?:&amp;quot;) then&lt;br /&gt;
        return trackingCat(&amp;quot;url_image_links&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if mw.ustring.sub(image,1,2) == &amp;quot;[[&amp;quot; then&lt;br /&gt;
        local cat = &amp;quot;&amp;quot;&lt;br /&gt;
        if mw.title.getCurrentTitle().namespace == 0 and (mw.ustring.find(image, &amp;quot;|%s*thumb%s*[|%]]&amp;quot;) or mw.ustring.find(image, &amp;quot;|%s*thumbnail%s*[|%]]&amp;quot;)) then&lt;br /&gt;
            cat = trackingCat(&amp;quot;thumbnail_images&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        return image .. cat&lt;br /&gt;
    elseif mw.ustring.sub(image,1,2) == &amp;quot;{{&amp;quot; and mw.ustring.sub(image,1,3) ~= &amp;quot;{{{&amp;quot; then&lt;br /&gt;
        return image&lt;br /&gt;
    elseif mw.ustring.sub(image,1,1) == &amp;quot;&amp;lt;&amp;quot; then&lt;br /&gt;
        return image&lt;br /&gt;
    elseif mw.ustring.sub(image,1,8) == mw.ustring.char(127)..&amp;quot;&amp;#039;\&amp;quot;`UNIQ&amp;quot; then&lt;br /&gt;
        return image&lt;br /&gt;
    else&lt;br /&gt;
        local result = &amp;quot;&amp;quot;&lt;br /&gt;
        local page = args[&amp;quot;page&amp;quot;]&lt;br /&gt;
        local upright = args[&amp;quot;upright&amp;quot;] or &amp;quot;&amp;quot;&lt;br /&gt;
        local size = args[&amp;quot;size&amp;quot;]&lt;br /&gt;
        local maxsize = args[&amp;quot;maxsize&amp;quot;]&lt;br /&gt;
        local sizedefault = args[&amp;quot;sizedefault&amp;quot;]&lt;br /&gt;
        local alt = args[&amp;quot;alt&amp;quot;]&lt;br /&gt;
        local link = args[&amp;quot;link&amp;quot;]&lt;br /&gt;
        local title = args[&amp;quot;title&amp;quot;]&lt;br /&gt;
        local border = args[&amp;quot;border&amp;quot;]&lt;br /&gt;
        local thumbtime = args[&amp;quot;thumbtime&amp;quot;] or &amp;quot;&amp;quot;&lt;br /&gt;
        local center = args[&amp;quot;center&amp;quot;]&lt;br /&gt;
        local class = args[&amp;quot;class&amp;quot;]&lt;br /&gt;
        &lt;br /&gt;
        image = stripNamespace(image)&lt;br /&gt;
        &lt;br /&gt;
        if not isempty(maxsize) then&lt;br /&gt;
            if isempty(sizedefault) and isempty(upright) then&lt;br /&gt;
                sizedefault = maxsize&lt;br /&gt;
            end&lt;br /&gt;
            local maxsizenumber = tonumber(mw.ustring.match(maxsize,&amp;quot;%d*&amp;quot;)) or 0&lt;br /&gt;
            if not isempty(size) then&lt;br /&gt;
                local sizenumber = tonumber(mw.ustring.match(size,&amp;quot;%d*&amp;quot;)) or 0&lt;br /&gt;
                if sizenumber &amp;gt; maxsizenumber and maxsizenumber &amp;gt; 0 then&lt;br /&gt;
                    size = maxsize&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if not isempty(upright) then&lt;br /&gt;
                local uprightnumber = tonumber(upright) or (upright == &amp;quot;yes&amp;quot; and 0.75) or 0&lt;br /&gt;
                if uprightnumber*defaultThumbnailSize &amp;gt; maxsizenumber and maxsizenumber &amp;gt; 0 then&lt;br /&gt;
                    upright = tostring(maxsizenumber/defaultThumbnailSize)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        if (tonumber(size) or 0) &amp;gt; 0 then size = size .. &amp;quot;px&amp;quot; end&lt;br /&gt;
        if (tonumber(sizedefault) or 0) &amp;gt; 0 then sizedefault = sizedefault .. &amp;quot;px&amp;quot; end&lt;br /&gt;
        &lt;br /&gt;
        result = &amp;quot;[[Ficheiro:&amp;quot; .. image&lt;br /&gt;
        if not isempty(page) then result = result .. &amp;quot;|page=&amp;quot; .. page end&lt;br /&gt;
        &lt;br /&gt;
        if not isempty(size) then&lt;br /&gt;
            result = result .. &amp;quot;|&amp;quot; .. size&lt;br /&gt;
        elseif not isempty(sizedefault) and isempty(upright) then&lt;br /&gt;
            result = result .. &amp;quot;|&amp;quot; .. sizedefault&lt;br /&gt;
        else&lt;br /&gt;
            result = result .. &amp;quot;|frameless&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        if center == &amp;quot;yes&amp;quot; then result = result .. &amp;quot;|center&amp;quot; end&lt;br /&gt;
        &lt;br /&gt;
        -- Validação Segura de Alt (Garante a checagem de palavras reservadas ANTES de embutir na string final)&lt;br /&gt;
        if not isempty(alt) then&lt;br /&gt;
            if alt ~= &amp;quot;thumbnail&amp;quot; and alt ~= &amp;quot;thumb&amp;quot; and alt ~= &amp;quot;frameless&amp;quot; and alt ~= &amp;quot;left&amp;quot; and alt ~= &amp;quot;center&amp;quot; and alt ~= &amp;quot;right&amp;quot; and alt ~= &amp;quot;upright&amp;quot; and alt ~= &amp;quot;border&amp;quot; and mw.ustring.match(alt, &amp;#039;^[0-9]*px$&amp;#039;, 1) == nil then&lt;br /&gt;
                result = result .. &amp;quot;|alt=&amp;quot; .. alt&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        if not isempty(link) then result = result .. &amp;quot;|link=&amp;quot; .. link end&lt;br /&gt;
        if border == &amp;quot;yes&amp;quot; then result = result .. &amp;quot;|border&amp;quot; end&lt;br /&gt;
        &lt;br /&gt;
        if upright == &amp;quot;yes&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|upright&amp;quot;&lt;br /&gt;
        elseif upright ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|upright=&amp;quot; .. upright&lt;br /&gt;
        end&lt;br /&gt;
        if thumbtime ~= &amp;quot;&amp;quot; then result = result .. &amp;quot;|thumbtime=&amp;quot; .. thumbtime end&lt;br /&gt;
        if not isempty(class) then result = result .. &amp;quot;|class=&amp;quot; .. class end&lt;br /&gt;
        &lt;br /&gt;
        if not isempty(title) then&lt;br /&gt;
            if mw.ustring.match(mw.getCurrentFrame():preprocess(title), &amp;#039;UNIQ%-%-templatestyles&amp;#039;, 1) == nil then&lt;br /&gt;
                result = result .. &amp;quot;|&amp;quot; .. title&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        result = result .. &amp;quot;]]&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        return result&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Porta de entrada oficial chamada pela Predefinição&lt;br /&gt;
function i.InfoboxImage(frame)&lt;br /&gt;
    local origArgs = frame.args&lt;br /&gt;
    local normalizedArgs = {}&lt;br /&gt;
    &lt;br /&gt;
    -- Mapeamento/Tradução dos parâmetros para o motor interno&lt;br /&gt;
    normalizedArgs[&amp;quot;image&amp;quot;] = origArgs[&amp;quot;image&amp;quot;] or origArgs[&amp;quot;imagem&amp;quot;]&lt;br /&gt;
    normalizedArgs[&amp;quot;page&amp;quot;] = origArgs[&amp;quot;page&amp;quot;] or origArgs[&amp;quot;página&amp;quot;]&lt;br /&gt;
    normalizedArgs[&amp;quot;size&amp;quot;] = origArgs[&amp;quot;size&amp;quot;] or origArgs[&amp;quot;tamanho&amp;quot;]&lt;br /&gt;
    normalizedArgs[&amp;quot;maxsize&amp;quot;] = origArgs[&amp;quot;maxsize&amp;quot;] or origArgs[&amp;quot;tamanhomáx&amp;quot;]&lt;br /&gt;
    normalizedArgs[&amp;quot;sizedefault&amp;quot;] = origArgs[&amp;quot;sizedefault&amp;quot;] or origArgs[&amp;quot;tamanhopadrão&amp;quot;]&lt;br /&gt;
    normalizedArgs[&amp;quot;alt&amp;quot;] = origArgs[&amp;quot;alt&amp;quot;]&lt;br /&gt;
    normalizedArgs[&amp;quot;link&amp;quot;] = origArgs[&amp;quot;link&amp;quot;] or origArgs[&amp;quot;ligação&amp;quot;]&lt;br /&gt;
    normalizedArgs[&amp;quot;title&amp;quot;] = origArgs[&amp;quot;title&amp;quot;] or origArgs[&amp;quot;título&amp;quot;]&lt;br /&gt;
    normalizedArgs[&amp;quot;thumbtime&amp;quot;] = origArgs[&amp;quot;thumbtime&amp;quot;] or origArgs[&amp;quot;tempominiatura&amp;quot;]&lt;br /&gt;
    normalizedArgs[&amp;quot;class&amp;quot;] = origArgs[&amp;quot;class&amp;quot;] or origArgs[&amp;quot;classe&amp;quot;]&lt;br /&gt;
    &lt;br /&gt;
    -- Normalização robusta com Módulo:Yesno para flags booleanas&lt;br /&gt;
    local suppress = origArgs[&amp;quot;suppressplaceholder&amp;quot;] or origArgs[&amp;quot;suprimirsubstituto&amp;quot;]&lt;br /&gt;
    if yesno(suppress, true) then&lt;br /&gt;
        normalizedArgs[&amp;quot;suppressplaceholder&amp;quot;] = &amp;quot;yes&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        normalizedArgs[&amp;quot;suppressplaceholder&amp;quot;] = &amp;quot;no&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if yesno(origArgs[&amp;quot;border&amp;quot;] or origArgs[&amp;quot;borda&amp;quot;]) then &lt;br /&gt;
        normalizedArgs[&amp;quot;border&amp;quot;] = &amp;quot;yes&amp;quot; &lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Aceita &amp;#039;sim&amp;#039;, &amp;#039;yes&amp;#039;, &amp;#039;centro&amp;#039; ou &amp;#039;center&amp;#039;&lt;br /&gt;
    local centerArg = origArgs[&amp;quot;center&amp;quot;] or origArgs[&amp;quot;centro&amp;quot;]&lt;br /&gt;
    if yesno(centerArg) or centerArg == &amp;quot;centro&amp;quot; or centerArg == &amp;quot;center&amp;quot; then &lt;br /&gt;
        normalizedArgs[&amp;quot;center&amp;quot;] = &amp;quot;yes&amp;quot; &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Normalização do upright (Trata se o usuário passar &amp;#039;sim&amp;#039;, mapeando para o padrão &amp;#039;yes&amp;#039;)&lt;br /&gt;
    local uprightArg = origArgs[&amp;quot;upright&amp;quot;]&lt;br /&gt;
    if yesno(uprightArg) then&lt;br /&gt;
        normalizedArgs[&amp;quot;upright&amp;quot;] = &amp;quot;yes&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        normalizedArgs[&amp;quot;upright&amp;quot;] = uprightArg or &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return i._InfoboxImage(normalizedArgs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return i&lt;/div&gt;</summary>
		<author><name>Tavoraadmin</name></author>
	</entry>
</feed>