Ir al contenido

Módulo:Zona de pruebas/Miguillen/Wikidata/Declaración

De Wikipedia, la enciclopedia libre
Este módulo no tiene página de documentación[crear]
local p = {}
local es = mw.language.new('es') -- Configuración de idioma español
local elemento = mw.wikibase.getEntityObject() --Tabla con todos los datos de Wikidata

--[[
  ====================================================================
    Para valor de Wikidata: Itera los valores que tiene una propiedad
  ====================================================================
]]
 
function p.iterar(tabla,salto,clave, enlazar)
    local tablaOrdenada = {}
    local declaracion = {}
 
-- == Propiedades que solo deben devolver un valor == 
 
     local propUnValor = {'P41','P18','P94','P242','P6','P1082','P163','P237','P625'}
      for k,v in pairs(propUnValor) do -- Se comprueba si coincide propiedad  
          if clave == v then 
             return valorDato(tabla[1], enlazar) -- Si coincide devuelve el primer índice de la tabla 
           end 
      end -- Si no coincide continua el proceso
 
-- == Iteramos los valores de la tabla creando una cadena de texto con ellos ==
    if tabla ~= nil then
 
        for k,v in pairs(tabla) do
            table.insert(declaracion,valorDato(v,enlazar)) 
        end
        if salto and salto ~= 'línea' then
 
            return table.concat(declaracion,'<br>') -- Se concatenan los valores de la tabla con un salto de línea entre ellos
        elseif salto == 'línea' then
            return mw.text.listToText(declaracion) -- Se concatena los valores de la tabla con coma de separador y de conjunción para el último valor
        else 
            return table.concat(declaracion) -- Se concatenan los valores de la tabla sin separador
        end 
    else
        return'<span class="error">No tiene ninguna propiedad en Wikidata</span>'
    end
end
 
--[[
  ====================================================================
    Para valor de Wikidata: Seleciona el formato del valor 
                            en función del tipo de dato
  ====================================================================
]]
 
function p.valorDato(declaracion, enlazar)
    local tipoValor = {}
    local valorDato = {}
    local valor = {}
    local correcto = {}
 
    -- == Comprobamos que tiene valor asignado ==
    if declaracion['mainsnak']['snaktype'] == 'somevalue' then
        return 'Valor desconocido'
    elseif declaracion['mainsnak']['snaktype'] == 'novalue' then
        return 'Sin valor'
    elseif declaracion['mainsnak']['snaktype'] == 'value' then 
    	correcto = true
    else
        return 'Valor desconocido'     
    end
    -- ==  ==
    if not correcto then return end
 
    tipoValor = declaracion['mainsnak']['datavalue']['type']
    valorDato = declaracion['mainsnak']['datavalue']['value']
 
    if tipoValor == 'wikibase-entityid' then -- Cuando devuelve un identificador
         valor = formatoEnlace(valorDato['numeric-id'], enlazar)
    elseif tipoValor == 'string' then -- Cuando devuelve una cadena de texto
         valor = valorDato
    elseif tipoValor == 'quantity' then -- Cuando devuelve un valor numérico
         valor = es:formatNum(tonumber(valorDato['amount']))
    elseif tipoValor == 'time' then -- Cuando devuelve una fecha
         --valor = formatoFecha(valorDato)
         valor = require('Módulo:Wikidata/Fecha').FormateaFechaHora(valorDato,{['enlace'] = 'sí'})
    elseif tipoValor == 'globecoordinate' then -- Cuando devuelve coordenas 
    	local globo = require('Módulo:Wikidata/Globos')[valorDato.globe]
        if globo ~= 'earth' then
            return  marco:preprocess('{{coord|' .. valorDato['latitude'] .. '|' .. 
                   valorDato['longitude'] .. '|globe:' .. globo .. '|display=inline,title|formato=dms}}')
        else
        	return  marco:preprocess('{{coord|' .. valorDato['latitude'] .. '|' .. 
                   valorDato['longitude'] .. '|type:city|display=inline,title|formato=dms}}')
        end	
 
    else -- Mensaje de error
         valor = '<span class="error"> Valor de dato desconocido</span>'  
    end
    return valor
end
 
--[[
  ====================================================================
    Para valor de Wikidata: Genera el wikinlace 
  ====================================================================
]]
 
function p.formatoEnlace(idEntidad, enlazar)
    local etiqueta = mw.wikibase.label( 'q' .. idEntidad )
    local enlace = mw.wikibase.sitelink( 'q' .. idEntidad )
 
-- == Casos en los que existe enlace y no se da el valor no al parámetro enlace ==
    if enlazar == false then 
        return require( 'Módulo:Wikidata/Formatos').formatBandera({['numeric-id'] = idEntidad },{''},marco) 
    end
    if enlace  then -- Si existe el enlace
        enlace = es:ucfirst( enlace )
        if etiqueta then -- Si en Wikidata está definida una etiqueta para el idioma español
            etiqueta = es:ucfirst( etiqueta )
            return '[[' .. enlace .. '|' .. etiqueta .. ']]' -- Devuelve la etiqueta como título del enlace
        else
            return '[[' .. enlace .. ']]' -- Devuelve solo el enlace
        end
 
-- == Casos en los que no existe enlace o se omita ==
 
    elseif etiqueta then -- Si en Wikidata está definida una etiqueta para el idioma español
        etiqueta = es:ucfirst( etiqueta )
        return etiqueta  -- Devuelve solo la etiqueta
    end
end
return p