Módulo:Website oficial
Aspeto
Este módulo é usado em mais de 15 000 páginas e as alterações em seu conteúdo serão amplamente notadas. Por favor, teste as alterações na subpágina de testes deste módulo, na subpágina de testes de módulos ou na subpágina de testes em seu espaço usuário. Considere discutir mudanças na página de discussão antes de implementá-las. |
Este módulo está classificado como beta, e está pronto para utilização generalizada. Ele ainda é novo e deve ser utilizado com cautela, para garantir que os resultados sejam os esperados. |
Esta módulo monitora a propriedade: Wikidata |
Descrição
Este Módulo implementa a predefinição {{Website oficial}}
. Por favor consulte a predefinição para mais instruções.
Uso
Outra documentação:
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 '<strong class="error">' ..
'Nenhuma URL encontrada. Por favor especifique uma URL aqui ou adicione uma no Wikidata.' ..
'</strong>'
end
local ret = {}
ret[#ret + 1] = string.format(
'<span class="official-website">%s</span>',
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('[[Categoria:%s]]', 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