Módulo:Wikidata/Formatos
De WIAragón
La documentación para este módulo puede ser creada en Módulo:Wikidata/Formatos/doc
local p = {} local es = mw.language.new('es') function p.formatImage( value, options ) local str = '[[Image:' .. value .. '|thumb' 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('Plantilla:Geodatos '.. label ).exists then str2 = frame:preprocess('{{bandera2|' .. label ..'|nombre ='.. 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('{{coord|' .. cadenacoor[tostring('latitude')] ..'|'.. cadenacoor[tostring('longitude')] .. '|format=dms}}') end -- Funciones para entidades de Wikidata function p.formatoPremio(valor) local enlace, etiqueta, idEntidad = p.obtenerDatos(valor) -- Eliminar de la etiqueta la categoría del premio if etiqueta then etiqueta = etiqueta:match('^(.*)%s+a%s.*$') or -- Ejemplo: Premio Nébula a la mejor novela corta --> Premio Nébula etiqueta:match('^(.*)%s+al%s.*$') or -- Ejemplo: Premio Hugo al mejor relato --> Premio Hugo etiqueta:match('^(.*) en la categoría') or -- Ejemplo: Premio Prometheus en la 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('{{gentilicio|'.. 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 devuelve algo de la forma Lugar, entidad territorial administrativa, país local lugarEnlazado, entidadTerritorialAdministrativaEnlazada, paisEnlazado -- Validar que está informado el id del lugar. if not valor or not valor['numeric-id'] then return end -- Obtener primero la entidad territorial administrativa y el país de los calificativos si es posible -- No se obtiene primero el lugar, que sería lo más lógico, porque se obtendrá de forma diferente según -- estén o no informados los calificativos 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 -- Si el lugar no tiene el calificativo de país obtenerlo de la propiedad país de la -- entidad de Wikidata del lugar. -- De momento no se obtiene la entidad administrativa (tiene unas 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 -- La ciudad de El Vaticano tiene en Wikidata como país a sí misma 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 calificativos 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:Tablas').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 periodo 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, 'hasta ' .. 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 -- Funciones internas -- Las siguientes funciones hacen prácticamente lo mismo que la función -- formatoIdEntidad del módulo Wikidata. -- p.obtenerDatos obtiene los datos de la entidad y p.enlazar los 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áginas con propiedades de Wikidata con etiqueta en otro idioma]]' 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 -- Opciones de las etiquetas if opciones.etiqueta and opciones.etiqueta ~= 'null' then -- Por averiguar dónde se usa. etiqueta = opciones.etiqueta end -- Convertir el primer carácter a mayúscula en su caso if etiqueta and opciones['mayúscula'] == 'sí' then etiqueta = es:ucfirst(etiqueta) end -- Opciones del enlace if opciones['enlace'] == 'no' then -- No p.enlazar enlace = nil elseif opciones['debeExistir'] == 'sí' then -- No devolver nada si no está informado el artículo de Wikipedia if not enlace then return end elseif opciones['enlace'] == 'sí' then if not enlace and etiqueta and not require('Módulo:Páginas').existe(etiqueta) then -- Tomar como enlace la etiqueta si no existe el correspondiente artículo enlace = etiqueta etiqueta = nil end end end -- Según esté informada la etiqueta o el enlace local resultado if etiqueta and enlace and etiqueta ~= enlace then --Ambos si no son iguales resultado = '[[' .. enlace .. '|' .. etiqueta .. ']]' elseif enlace then -- Solo el enlace o ambps y son iguales resultado = '[[' .. enlace .. ']]' elseif etiqueta then -- Solo la etiqueta resultado = etiqueta elseif idEntidad then -- Solo la entidad -- Obtener la etiqueta y el enlace de Wikidata de la Wikipedia inglesa. local entidad=mw.wikibase.getEntityObject(idEntidad) --if true then return require('Módulo:Tablas').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 .. '|sin etiquetar]]' .. '[[Categoría:Wikipedia:Páginas con propiedades de Wikidata sin etiqueta]]' end end -- Añadir 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:Bandera') 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:Ficha') 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 return p