Módulo:Wikidata/Formatos
Aparencia
[ máis información | ver o historial | | | ver as instrucións ]
Obxectivo
[editar a fonte]Submódulo de Módulo:Wikidata
[ máis información | ver o historial | | | ver as instrucións ]
Esta documentación está transcluída desde Módulo:Wikidata/Formatos/uso. Os editores poden probar cambios no mesmo en Módulo:Wikidata/Formatos/probas.
Por favor, engade as categorías na subpáxina de documentación e os interwikis no Wikidata. Ver as subpáxinas deste módulo.
Por favor, engade as categorías na subpáxina de documentación e os interwikis no Wikidata. Ver as subpáxinas deste módulo.
local p = {}
local es = mw.language.new('gl')
-- Funcións para a Galipedia
-- Función para formatar unha imaxe sen caixa
function p.formatoImaxe( value, options )
local str = '[[Ficheiro:' .. value .. '|250px'
if options.legend then
str = str .. '|' .. options.legend
end
return str .. ']]'
end
-- Funcións copiadas de es.wiki
function p.formatImage( value, options )
local str = '[[Ficheiro:' .. value .. '|miniatura'
if options.legend then
str = str .. '|' .. options.legend
end
return str .. ']]'
end
function p.formatBandera(value, options, frame)
local coincidenciafor
if frame == nil then
frame = marco
end
local label = mw.wikibase.label( 'q' .. value['numeric-id'] )
if not label then
return
end
local link = mw.wikibase.sitelink('q' .. value['numeric-id'] )
local nombre
local tipo = mw.ustring.gsub(label,'(%D+)%sde%s%D+','%1')
if options.cortar and options.cortar ~= '' then
coincidencia = mw.ustring.find( es:lc(options.cortar), es:lc(tipo), plain )
end
if coincidencia then
nombre = mw.ustring.gsub(label,'%D+%sde%s(%D+)','%1')
else
nombre = label
end
local str2
if mw.title.new('Modelo:Country data '.. label ).exists then
str2 = frame:preprocess('{{bandeira|' .. label ..'|name='.. nombre .. '}}')
elseif link and label then
str2 = '[[' .. link .. '|' .. nombre .. ']]'
elseif label then
str2 = nombre
else
str2 = ''
end
return str2
end
function p.formatCoor(value)
local cadenacoor = value
return marco:preprocess('{{Coordenadas|' .. cadenacoor[tostring('latitude')] ..'|'.. cadenacoor[tostring('longitude')] .. '|format=dms}}')
end
-- Funcións para entidades de Wikidata
function p.formatoPremio(valor)
local enlace, etiqueta, idEntidad = p.obtenerDatos(valor)
-- Eliminar da etiqueta a categoría do premio
if etiqueta then
etiqueta = etiqueta:match('^(.*)%s+á%s.*$') or -- Exemplo: Premio Nébula á mellor novela curta --> Premio Nébula
etiqueta:match('^(.*)%s+ó%s.*$') or -- Exemplo: Premio Hugo ó mellor relato --> Premio Hugo
etiqueta:match('^(.*) na categoría') or -- Exemplo: Premio Prometheus na categoría Hall of Fame --> Premio Prometheus
etiqueta
end
return p.enlazar(enlace, etiqueta, idEntidad)
end
function p.formatoGentilicio(valor, opciones, frame)
local enlacePais, etiquetaPais, idEntidadPais = p.obtenerDatos(valor)
local gentilicio
if etiquetaPais then
gentilicio = frame:preprocess('{{xentilicio|'.. etiquetaPais .. '|fs}}')
if not gentilicio or gentilicio == '' then
gentilicio = etiquetaPais
end
end
return p.enlazar(enlacePais, gentilicio, idEntidadPais, opciones)
end
function p.formatoLugar(valor, opciones, frame, calificativos)
-- Función que devolve algo da forma Lugar, entidade territorial administrativa, país
local lugarEnlazado, entidadTerritorialAdministrativaEnlazada, paisEnlazado
-- Validar que está informado o id do lugar.
if not valor or not valor['numeric-id'] then
return
end
-- Obter primeiro a entidade territorial administrativa e o país dos cualificativos se é posible
-- Non se obtén primeiro o lugar, que sería o máis lóxico, porque obterase de forma diferente segundo
-- estean ou non informados os cualificativos
if calificativos then
if calificativos['P131'] and calificativos['P131'][1] and
calificativos['P131'][1].datavalue and calificativos['P131'][1].datavalue.value then
entidadTerritorialAdministrativaEnlazada = p.enlazar(p.obtenerDatos(calificativos['P131'][1].datavalue.value))
end
if calificativos['P17'] and calificativos['P17'][1] and
calificativos['P17'][1].datavalue and calificativos['P17'][1].datavalue.value then
paisEnlazado = p.enlazar(p.obtenerDatos(calificativos['P17'][1].datavalue.value))
end
end
if paisEnlazado then
lugarEnlazado = p.enlazar(p.obtenerDatos(valor))
else
-- Se o lugar non ten o cualificativo de país obtelo da propiedade país da
-- entidade de Wikidata do lugar.
-- De momento non se obtén a entidade administrativa (ten barbaridades...)
local idLugar, enlaceLugar, etiquetaLugar
local entidad
idLugar = 'Q' .. valor['numeric-id']
entidad = mw.wikibase.getEntityObject(idLugar)
if not entidad then
return
end
if entidad.sitelinks and entidad.sitelinks.eswiki then
enlaceLugar = entidad.sitelinks.eswiki.title
end
if entidad.labels and entidad.labels.es then
etiquetaLugar = entidad.labels.es.value
end
lugarEnlazado = p.enlazar(enlaceLugar, etiquetaLugar, idLugar, opciones)
if entidad.claims and entidad.claims.P17 and entidad.claims.P17[1] and
entidad.claims.P17[1].mainsnak and entidad.claims.P17[1].mainsnak.datavalue then
paisEnlazado = p.enlazar(p.obtenerDatos(entidad.claims.P17[1].mainsnak.datavalue.value))
end
end
if lugarEnlazado == paisEnlazado then -- A Cidade do Vaticano ten en Wikidata como país a si mesma
paisEnlazado = nil
end
return require('Módulo:Formato texto').separadosPorComa({lugarEnlazado, entidadTerritorialAdministrativaEnlazada, paisEnlazado})
end
function p.formatoUnidad(valor, opciones)
cantidad = mw.ustring.gsub(valor.value['amount'], '+','')
unidad = mw.wikibase.label(mw.ustring.gsub(valor.value['unit'], '^.-/(Q%d+)$', '%1'))
if unidad and tonumber(cantidad) > 1 then
textoUnidad = unidad..'s'
end
if not unidad or (opciones['formatoUnidad'] and opciones['formatoUnidad'] == 'número') then
return tonumber(cantidad)
elseif unidad and opciones['formatoUnidad'] and opciones['formatoUnidad'] == 'minutos' and unidad == 'segundo' then
return math.floor(tonumber(cantidad)/60) .. ':' .. (tonumber(cantidad)%60) .. ' ' .. 'minutos'
else
return cantidad .. ((textoUnidad and ' ' .. textoUnidad) or '')
end
end
-- Formatos de cualificativos
function p.formatoPeriodo(valor, opciones)
local anyoInicio, anyoFin
local fechaInicio, fechaFin
local opcionesFecha= {['formatoTexto']='mayúscula', ['formatoFecha'] = 'año', ['enlace']='no'}
local fechasInicio = valor['P580']
local fechasFin = valor['P582']
local iFechaInicio = 1
local iFechaFin = 1
if not fechasInicio and not fechasFin then
return
end
local periodos = {}
if fechasInicio and fechasInicio[1] then
--if true then return require('Módulo:Táboas').tostring(fechasInicio[1]) end
anyoInicio = require('Módulo:Wikidata').formatoDato(fechasInicio[1],opcionesFecha , {})
fechaInicio= anyoInicio -- de momento
end
if fechasFin and fechasFin[1] then
anyoFin = require('Módulo:Wikidata').formatoDato(fechasFin[1], opcionesFecha, {})
fechaFin = anyoFin -- de momento
end
while fechaInicio or fechaFin do -- Por cada período
if fechaInicio and fechaFin and tonumber(fechaInicio) and tonumber(fechaFin) and (tonumber(fechaInicio) <= tonumber(fechaFin)) then
if anyoInicio == anyoFin then
table.insert(periodos, anyoInicio)
else
table.insert(periodos, anyoInicio .. '–' .. anyoFin)
end
iFechaInicio = iFechaInicio + 1
iFechaFin = iFechaFin + 1
if fechasInicio[iFechaInicio] then
anyoInicio = require('Módulo:Wikidata').formatoDato(fechasInicio[iFechaInicio],opcionesFecha , {})
fechaInicio= anyoInicio -- de momento
else
anyoInicio = nil
fechaInicio= nil
end
if fechasFin[iFechaFin] then
anyoFin = require('Módulo:Wikidata').formatoDato(fechasFin[iFechaFin],opcionesFecha , {})
fechaFin= anyoFin -- de momento
else
anyoFin = nil
fechaFin= nil
end
elseif anyoInicio then
table.insert(periodos, 'desde ' .. anyoInicio)
iFechaInicio = iFechaInicio + 1
if fechasInicio[iFechaInicio] then
anyoInicio = require('Módulo:Wikidata').formatoDato(fechasInicio[iFechaInicio],opcionesFecha , {})
fechaInicio= anyoInicio -- de momento
else
anyoInicio = nil
fechaInicio= nil
end
elseif anyoFin then
table.insert(periodos, 'ata ' .. anyoFin)
iFechaFin = iFechaFin + 1
if fechasFin[iFechaFin] then
anyoFin = require('Módulo:Wikidata').formatoDato(fechasFin[iFechaFin],opcionesFecha , {})
fechaFin= anyoFin -- de momento
else
anyoFin = nil
fechaFin= nil
end
end
end
return table.concat(periodos, ', ')
end
-- Funcións internas
-- As seguintes funcións fan practicamente o mesmo que a función
-- formatoIdEntidad do módulo Wikidata.
-- p.obtenerDatos obtén os datos da entidade e p.enlazar os formatea.
function p.obtenerDatos(valor)
if valor and valor['numeric-id'] then
local idEntidad = 'q' .. valor['numeric-id']
local etiqueta = mw.wikibase.label( idEntidad )
local enlace = mw.wikibase.sitelink( idEntidad )
return enlace, etiqueta, idEntidad
end
end
function p.enlazarEnOtroIdioma(enlace, etiqueta, idioma)
local categoria = '[[Categoría:Wikipedia:Páxinas con propiedades de Wikidata con etiqueta noutra lingua]]'
if enlace and etiqueta then
return etiqueta .. ' <small>([[:en:' .. enlace .. '|en]])</small>' .. categoria
elseif etiqueta then
return etiqueta .. ' <small>(en)</small>' .. categoria
elseif enlace then
return enlace .. ' <small>([[:en:' .. enlace .. '|en]])</small>' .. categoria
end
end
function p.enlazar(enlace, etiqueta, idEntidad, opciones)
if opciones then
-- Opcións das etiquetas
if opciones.etiqueta and opciones.etiqueta ~= 'null' then -- Por averiguar onde se usa.
etiqueta = opciones.etiqueta
end
-- Converter o primeiro carácter a maiúscula no seu caso
if etiqueta and opciones['mayúscula'] == 'sí' then
etiqueta = es:ucfirst(etiqueta)
end
-- Opcións da ligazón
if opciones['enlace'] == 'no' then
-- No p.enlazar
enlace = nil
elseif opciones['debeExistir'] == 'sí' then
-- Non devolver nada se non está informado o artigo de Wikipedia
if not enlace then
return
end
elseif opciones['enlace'] == 'sí' then
if not enlace and etiqueta and not require('Módulo:Páxinas').existe(etiqueta) then
-- Tomar como ligazón a etiqueta se non existe o correspondente artigo
enlace = etiqueta
etiqueta = nil
end
end
end
-- Segundo estea informada a etiqueta ou a ligazón
local resultado
if etiqueta and enlace and etiqueta ~= enlace then --Ambos se non son iguais
resultado = '[[' .. enlace .. '|' .. etiqueta .. ']]'
elseif enlace then -- Só a ligazón ou ambos e son iguais
resultado = '[[' .. enlace .. ']]'
elseif etiqueta then -- Só a etiqueta
resultado = etiqueta
elseif idEntidad then -- Só a entidade
-- Obter a etiqueta a ligazón de Wikidata da Wikipedia inglesa.
local entidad=mw.wikibase.getEntityObject(idEntidad)
--if true then return require('Módulo:Táboas').tostring(entidad) end
if entidad then
if entidad.labels and
entidad.labels.en then
etiqueta = entidad.labels.en.value
end
if entidad.sitelinks and entidad.sitelinks.enwiki then
enlace = entidad.sitelinks.enwiki.title
end
if etiqueta or enlace then
resultado = p.enlazarEnOtroIdioma(enlace, etiqueta, 'en')
end
end
if not resultado then
return '[[:d:'.. idEntidad .. '|sen etiquetar]]' ..
'[[Categoría:Wikipedia:Páxinas con propiedades de Wikidata sen etiqueta]]'
end
end
-- Engadir cursivas
if opciones and opciones.cursivas == 'sí' then
resultado = "''" .. resultado .. "''"
end
return resultado
end
function p.formatId( value, options )
local wikidata = require('Módulo:Wikidata')
local id = 'Q'.. value['numeric-id']
local opciones = {separador = '<br>',propiedad = options.propiedadValor, uno = 'sí', entityId = id, formatoTexto = 'mayúscula'}
return wikidata.getPropiedad(opciones)
end
function p.formatBandera2( value, options )
local bandera = require('Módulo:Bandeira')
local id = 'Q'.. value['numeric-id']
local label = mw.wikibase.label( 'Q' .. value['numeric-id'] ) or ''
local tipo = mw.ustring.gsub(label,'(%D+)%sde%s%D+','%1')
if options.cortar and options.cortar ~= '' then
coincidencia = mw.ustring.find( es:lc(options.cortar), es:lc(tipo), plain )
end
if coincidencia then
nombre = mw.ustring.gsub(label,'%D+%sde%s(%D+)','%1')
elseif label and label ~= '' then
nombre = label
end
return bandera.banderaLua(id, '20px', '', nombre)
end
function p.formatFicha( value, options )
local ficha = require('Módulo:Infobox')
local opciones = {propiedadValor='P31'}
local etiqueta = p.formatId( value, opciones)
options.cortar = etiqueta
local parametros = {
child = 'si',
estiloetiqueta1 = 'border:0;font-weight:100;padding:0px 7px',
estilodatos1 = 'border:0;font-weight:100;padding:0px 7px 0px 2px',
etiqueta1='• '.. es:ucfirst(etiqueta),
datos1 = p.formatBandera2(value, options)}
return ficha.infobox(parametros)
end
function p.formatoId ( value, options )
return value['numeric-id'] and 'Q' .. value['numeric-id']
end
--Función achegada polo usuario Juan Mayordomo de es.wiki para devolver os nomes de profesions en feminino
function p.traballoFemenino_wikidata(valor, opciones, frame, calificativos)
local elementoTabla = require('Módulo:Táboas').elemento
local function getPropiedadEnGalego(idEntidad, idPropiedad)
local entidad = mw.wikibase.getEntityObject(idEntidad)
if not entidad then
return
end
local declaracion = elementoTabla(entidad,'claims', idPropiedad)
if not declaracion then
return
end
local valor
for k,v in pairs(declaracion) do
valor = elementoTabla(v,'mainsnak', 'datavalue', 'value')
if valor.language == 'gl' then
return valor.text
end
end
end
local enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion = p.obtenerDatos(valor)
etiquetaOcupacionCorregida = getPropiedadEnGalego(idEntidadOcupacion, 'P2521') or etiquetaOcupacion
return p.enlazar(enlaceOcupacion, etiquetaOcupacionCorregida, idEntidadOcupacion, opciones)
end
return p