Ir para o conteúdo

Módulo:Website oficial

De Wiki TokuDrive
Revisão de 05h51min de 6 de setembro de 2026 por Tavoraadmin (discussão | contribs) (Importando predefinição/módulo da Wikipédia em português para manter layout)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)

local makeUrl = require('Módulo:URL')._url

local p = {}

-- Wrapper para pcall que retorna nil em caso de falha. local function quickPcall(func) local success, result = pcall(func) if success then return result end end

-- Obtém a classificação para uma tabela de propriedade do Wikidata. Retorna 1, 0 ou -1, na -- ordem de classificação. local function getRank(prop) local rank = prop.rank if rank == 'preferred' then return 1 elseif rank == 'normal' then return 0 elseif rank == 'deprecated' then return -1 else -- Sem classificação ou indefinida classificação é dada como "normal". return 0 end end

-- Verifica se uma propriedade wikidata é qualificado como sendo em português. local function isPortuguese(prop) local ret = quickPcall(function () for i, lang in ipairs(prop.qualifiers.P407) do if lang.datavalue.value['numeric-id'] == 5146 then return true end end return false end) return ret == true end

-- Obtém a URL do website oficial da Wikidata. local fetchWikidataUrl fetchWikidataUrl = function() -- Obtem objetos para todos os websites oficiais no Wikidata. local websites = quickPcall(function () return mw.wikibase.getEntityObject().claims.P856 end)

-- Clonar os objetos no caso de outro código precisar deles em sua ordem original. websites = websites and mw.clone(websites) or {}

-- Adicionar o ídice da tabela para os objetos em caso dele ser necessário no gênero. for i, website in ipairs(websites) do website._index = i end

-- Classificar os sites, primeiro por posto mais alto, e depois por sites em -- língua inglesa, seguida pela posição original do site na -- lista de propriedades. Quando estiver pronto, obter a URL do objeto -- mais alto-classificadas. table.sort(websites, function(ws1, ws2) local r1 = getRank(ws1) local r2 = getRank(ws2) if r1 ~= r2 then return r1 > r2 end local e1 = isPortuguese(ws1) local e2 = isPortuguese(ws2) if e1 ~= e2 then return e1 end return ws1._index < ws2._index end) local url = quickPcall(function () return websites[1].mainsnak.datavalue.value end)

-- Armazenar em cache o resultado até que nós só fazer o trabalho pesado, uma vez por #invoke. fetchWikidataUrl = function () return url end

return url end

-- Renderizar o link de URL, mais outra saída visível. local function renderUrl(options) if not options.url then return '' .. 'Nenhuma URL encontrada. Por favor especifique uma URL aqui ou adicione uma no Wikidata.' .. '' end local ret = {} ret[#ret + 1] = string.format( '%s', makeUrl(options.url, options.display) ) if options.format == 'flash' then ret[#ret + 1] = mw.getCurrentFrame():expandTemplate{ title = 'Nota do link', args = {note = 'Requer Adobe Flash Player'} } end if options.mobile then ret[#ret + 1] = '(' .. makeUrl(options.mobile, 'Versão móvel') .. ')' end return table.concat(ret, ' ') end

-- Renderizar a categoria de acompanhamento. local function renderTrackingCategory(url) if mw.title.getCurrentTitle().namespace ~= 0 then return end local category if not url then category = '!Website oficial com URL em falta' elseif fetchWikidataUrl() then if url and url ~= fetchWikidataUrl() then category = '!Website oficial diferente no Wikidata e na Wikipedia' end else category = '!Website oficial que não está no Wikidata' end return category and string.format(, category) or end

function p._main(args) local url = args[1] or args.URL or fetchWikidataUrl() local lang = mw.getCurrentFrame():callParserFunction( "int", "lang" ) local linkText = { ['pt'] = 'Sítio oficial', ['pt-br'] = 'Página oficial', ['en'] = 'Official website' } local formattedUrl = renderUrl{ url = url, display = args[2] or args.name or linkText[lang] or linkText['pt'], mobile = args.mobile, format = args.format } return formattedUrl .. renderTrackingCategory(url) end

function p.main(frame) local args = require('Módulo:Arguments').getArgs(frame, { wrappers = 'Predefinição:Website oficial' }) return p._main(args) end

return p