Buscamos un coordinador del proyecto.
Actualmente, esta versión lingüística necesita un punto de contacto principal. Si tiene interés en ayudar a gestionar este proyecto, por favor contáctenos.

Módulo:Ficha Wikidata


--[[
   *****************************************************************
   * Nombre: Módulo:Ficha Wikidata
   * Descripción: Este módulo genera una ficha solo con los valores
   *               de todas las propiedades de Wikidata
   * Estado: En creación
   *****************************************************************
]]
local p = {}
local ficha = require('Módulo:Ficha')
local Wikidata = require( 'Módulo:Ficha/Wikidata')
local elemento = mw.wikibase.getEntityObject() --Tabla con todos los datos de Wikidata
local es = mw.language.new('es') -- Configuración de idioma español
local marco
local cd = true 
local pais, web, mapa, unidad = '';

--[[
  ====================================================================
    Eliminar propiedades irrelevantes
  ====================================================================
  ]]
function filtrarPropiedades(propComprobar)
 
--   == Popiedades que no aparecerán en ninguna ficha ==
 
    local propIrrelevantes = {'P107','P646','P373','P214','P227','P244','P213','P1025', 'P268','P345','P269','P948','P402','P910','P968','P998','P982','P349', 'P865', 'P434', 'P906', 'P865', 'P935', 'P691','P1036','P1273','P1566', 'P1465', 'P1792','P1464','P2498','P2581','P1296','P6665'} 
 
--  == Comprobamos coincidencia ==
 
    for k,v in pairs(propIrrelevantes) do -- Se comprueba si coincide propiedad con propComprobar
       if propComprobar == v then return false end -- Si hay coincidencia devuelve false
    end
    return true -- Si no hay coincidencia devuelve true
end
--[[
  ====================================================================
    Seleccionamos configuración
  ====================================================================
  ]]
function configuracion(tablaValor,propiedades)
  --[[ 
  local formato = include('Módulo:Ficha Wikidata/Formatos')
  if formato.getTablaParametros(tablaValor, propiedades) ~= nil then
      return formato.getTablaParametros(tablaValor,propiedades)
  end
  ]]
  local tablaParametros = {}
  local valorID = tablaValor[1]['mainsnak']['datavalue']['value']['numeric-id']
  local valor = mw.wikibase.label('q'.. valorID)
    if valor == 'ser humano' then
        tablaParametros['tipocabecera'] = 'humano fn'         
        tablaParametros['clase'] = 'biography vcard'
        tablaParametros['colorfondo'] = '#8DB1C3'
        tablaParametros['colortexto'] = '#fff'
 
elseif valor == 'ciudad' or valor == 'localidad' or valor == 'villa' or valor == 'pueblo' or valor == 'municipio' or valor == 'comuna' or valor == 'barrio' or valor == 'concejo' or valor == 'capital' then
        local coor  = {}
        local pais
        tablaParametros['tipocabecera'] = 'mapa fn org' 
        tablaParametros['clase'] = 'geography vcar'
        tablaParametros['colorfondo'] = 'transparet'
        --tablaParametros['estilosubtitulo1']  = 'line-height: 2.4em; padding:3px; font-size:100%; font-weight:bold; background-color:#cddeff'
        --tablaParametros['estiloetiqueta'] = 'line-height: 1.4em; padding:1px 7px'
       -- tablaParametros['estilodatos'] = 'line-height: 1.4em; padding:1px 7px 1px 1px'
        tablaParametros['estiloetiqueta'] = 'padding:2px 7px;'
        tablaParametros['estilodatos'] = 'padding:2px 7px 1px 1px'
       
        for k, v in pairs(propiedades) do
           mw.log('propiedades esp '.. v.propiedad)
           if v.propiedad == 'P625' then -- Coordenadas
           	        tablaParametros['estiloetiqueta1'] = 'font-size:100;padding:0px 7px'
                    tablaParametros['etiqueta1'] = '[[Coordenadas geográficas|Coordenadas]]'
                    tablaParametros['estilodatos1'] = 'white-space:nowrap;padding:0px 1px 1px 1px'
                    tablaParametros['datos1'] = Wikidata.getDeclaracion(v.valor, v.propiedad, nil, nil, nil, nil)  
                    coor['latitud'] = Wikidata.getDeclaracion(v.valor, 'latitud', nil, nil, nil, nil) 
                    coor['longitud'] = Wikidata.getDeclaracion(v.valor, 'longitud', nil, nil, nil, nil) 
                    table.remove (propiedades, k)
                    cd = false
           elseif v.propiedad == 'P12' and pais then
              tablaParametros['etiqueta2'] = tostring('[[Entidad subnacional|Unidad]]')
              unidad = Wikidata.getDeclaracion(v.valor, v.propiedad, nil, nil, nil, nil) 
              tablaParametros['datos2'] = unidad
              tablaParametros['subtitulo1'] =	unidad .. ' de ' .. pais
           elseif v.propiedad == 'P37' then
              tablaParametros['estiloetiqueta3'] = 'border:0;font-weight:100; padding:0px 7px'
              tablaParametros['estilodatos3'] = 'border:0;font-weight:100;padding:0px 1px 0px 1px'
              tablaParametros['etiqueta3'] = tostring('• [[Anexo:Países|País]]')
              tablaParametros['datos3'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '<br>', 'Wikidata/Formatos', 'formatBandera2', nil, nil)
              mapa = Wikidata.getDeclaracion(v.valor, v.propiedad, nil, nil, nil, nil,'no')
              pais = Wikidata.getDeclaracion(v.valor, v.propiedad, nil, nil, nil, nil)
          elseif v.propiedad == 'P131' then
              tablaParametros['estiloetiqueta4'] = 'border:0;font-weight:100; padding:0px 7px'
              tablaParametros['estilodatos4'] = 'border:0;font-weight:100;padding:0px 1px 1px 1px'
              cd = false
              tablaParametros['etiqueta4'] = ''
              --local entidad = Wikidata.getDeclaracion(v,k , '<br>&bull;&nbsp; ','Wikidata/Formatos' ,'formatId' , nil, nil, nil,'P12')
              --local entidadComparar = Wikidata.getDeclaracion(v.valor, v.propiedad,'', 'Wikidata/Formatos','formatId' , 'no', nil, nil,'P12')
              mw.log(entidadComparar)
             -- if entidad and entidad ~= '' then
               --   tablaParametros['etiqueta4'] = '&bull;&nbsp;' .. entidad
             -- else
              --    tablaParametros['etiqueta4'] = '&bull;&nbsp;Entidades superiores'
             -- end
              --tablaParametros['datos4'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '<br>', 'Wikidata/Formatos', 'formatBandera2', nil,nil, entidadComparar) 
              tablaParametros['datos4'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '<br>', 'Wikidata/Formatos', 'formatFicha')
          end
          local nombre = Wikidata.getEtiqueta()
          if mapa and nombre and coor  then
          	  tablaParametros['estiloimagen'] = 'padding:0.8em 0.7em 0em 0.7em; text-align:center'
              tablaParametros['imagenflotante'] = 'si' 
              tablaParametros['imagen'] = require('Módulo:Ficha Wikidata/Mapa').mapaLoc(mapa, nombre, coor, marco)
              tablaParametros['estilopie'] = 'font-size:smaller; font-weight:bold'
              tablaParametros['pie'] ='Ubicación de ' .. nombre.. ' en ' .. mapa
          end    
    end
    elseif valor == 'provincia' or valor =='estado' or valor =='región' or valor =='comunidad autónoma'or valor == 'departamento' or valor =='comarca' or valor =='merindad' or valor =='partido judicial' then
        tablaParametros['colorfondo'] = 'transparet'
        tablaParametros['tipocabecera'] = 'mapa fn org' 
        tablaParametros['clase'] = 'geography vcar'
    elseif valor == 'pais' or valor == 'estado soberano' then
        tablaParametros['tipocabecera'] = 'mapa fn org' 
        tablaParametros['clase'] = 'geography vcar'
 
    elseif valor == 'monte' or valor == 'montaña' or valor == 'volcán'then
        tablaParametros['tipocabecera'] = 'mapa fn org'
        tablaParametros['colorfondotitulo'] = '#e7dcc3'
        --tablaParametros['colortexto'] = '#fff'
        tablaParametros['estiloetiqueta'] = 'background-color:#e7dcc3;'
    elseif valor == 'rio' or valor == 'océano' or valor == 'canal' or valor == 'Pólder' or valor == 'isla artificial' or valor == 'isla fluvial' or valor == 'mar'  or valor =='lago' or valor == 'fiordo' or valor == 'golfo' or valor == 'estrecho' then
        tablaParametros['tipocabecera'] = 'mapa fn org'
        tablaParametros['colorfondotitulo'] = '#7793E0'
        tablaParametros['colortexto'] = '#fff'
        tablaParametros['estiloetiqueta'] = 'background:#ddf'
        --tablaParametros['clase'] = 'geography vcar'
    elseif valor == 'revista' then
    	tablaParametros['tipocabecera'] = 'revista'
        tablaParametros['colorfondotitulo'] = '#D2691E'
        tablaParametros['colortexto'] = '#fff'
        tablaParametros['estiloetiqueta'] = 'background-color:#D2691E; color:#fff;'
    elseif valor == 'libro' then
    	tablaParametros['tipocabecera'] = libro
    	tablaParametros['colorfondotitulo'] = '#ddf'
        tablaParametros['estiloetiqueta'] = 'padding:1px 8px'
    elseif valor == 'Arboreto' or valor == 'parque' then
    	tablaParametros['tipocabecera'] = libro
    	tablaParametros['colorfondotitulo'] = '#d0f0c0'
    elseif valor == 'museo' or valor == 'museo de artes' then	
        tablaParametros['tipocabecera']  = 'conflicto'
        tablaParametros['estilotitulo']  = 'color:white'
        tablaParametros['colorfondotitulo'] = '#996633'	
        tablaParametros['colortexto'] = '#fff'
    else
        tablaParametros['colorfondotitulo'] = '#ddf'
        tablaParametros['estiloetiqueta'] = 'padding:1px 8px'
    end
    return tablaParametros
end

function ordenarPropiedades(propiedades) 
	local propiedadesOrdenadas = {}
	local num=1
    for k,v in pairs(propiedades) do
	     if  string.find(k,'P%d+') and v ~= '' then -- Comprobamos que son propiedades
	     	--local num = tostring(k):match('^P([1-9]%d*)$')
	     	--[[if k == 'P12' then 
	     		propiedadesOrdenadas[1] = {propiedad = k, valor = v }
	     	elseif k == 'P37' then 
	     	    propiedadesOrdenadas[2] = {propiedad = k, valor = v }	
	     	else
	     	   num  = mw.ustring.gsub(k,'P','')
	     	   mw.log(num)
	     	   num = tonumber(num)
	     	   propiedadesOrdenadas[num] = {propiedad = k, valor = v }
	     	end]]
	     	propiedadesOrdenadas[num]  = {propiedad = k, valor = v }
	     	num = num+1
     	end
    end
    table.sort(propiedadesOrdenadas,function(a1,a2) return a1.propiedad < a2.propiedad end)
    return propiedadesOrdenadas
end
local function getPropiedadNums(num)
    return  tonumber(mw.ustring.gsub(num,'P',''))
end
--[[
  ====================================================================
    Pasamos las datos de Wikidata a una tabla
  ====================================================================
]]
 
function leerEtiquetas()   
    local propiedades = {}
    local annadirFila = {} 
    local nuevasFilas = {}
    local etiquetaFicha ={}
    local num = 8
    if Wikidata.getDeclaraciones() ~= '' then
        propiedades = Wikidata.getDeclaraciones()
        if propiedades == nil then return nil end 
        propiedades = ordenarPropiedades(propiedades) 
        for k,v in pairs(propiedades) do
         mw.log('clave '.. v.propiedad )
            --if  string.find(k,'P%d+') then -- Comprobamos que son propiedades
                if v.propiedad == 'P35' then -- Imagen
                    annadirFila['imagensuperior'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '', nil, nil, nil) 
                elseif v.propiedad == 'P12' then -- instancia de
                    nuevasFilas  = configuracion(v.valor,propiedades)
                elseif v.propiedad == 'P154' then -- Imagen Logo
                    annadirFila['imagenderecha'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '', nil, nil, nil)    
                 elseif v.propiedad == 'P041' then -- Imagen de la bandera
                    annadirFila['imagenizquierda'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '', nil, nil, nil) 
                    annadirFila['estilopieizquierdo'] = 'font-size:smaller; font-weight:bold'
                    annadirFila['pieizquierdo'] = 'Bandera'
                elseif v.propiedad == 'P94' then -- Imagen del Escudo
                    annadirFila['imagenderecha'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '', nil, nil, nil)   
                    annadirFila['estilopiederecho'] = 'font-size:smaller; font-weight:bold'
                    annadirFila['piederecho'] =  'Escudo'
                elseif v.propiedad == 'P368' then -- prueba commons archivo multimedia
                    annadirFila['imagen'] =  Wikidata.getDeclaracion(v.valor, v.propiedad, '', nil, nil, nil)    
                elseif v.propiedad == 'P163' then -- Artículo de la bandera
                    annadirFila['pieizquierdo'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '', nil, nil, nil) 
                elseif v.propiedad == 'P237' then -- Artículo del escudo
                    annadirFila['piederecho'] =  Wikidata.getDeclaracion(v.valor, v.propiedad, '', nil, nil, nil) 
                elseif v.propiedad == 'P242' then -- mapa de localización
                    annadirFila['imagen']= '[[Archivo:'.. Wikidata.getDeclaracion(v.valor, v.propiedad, '|245px]]<br>[[Archivo:', nil, nil, nil)..'|245px]]'
                elseif v.propiedad == 'P856' then -- mapa de localización
                    web = Wikidata.getDeclaracion(v.valor, v.propiedad,nil, nil, nil, nil)    
                elseif v.propiedad == 'P37' then -- 
                    annadirFila['etiqueta2'] = '[[País]]'
                    pais = Wikidata.getDeclaracion(v.valor, v.propiedad, nil, nil,nil, nil)
                    annadirFila['datos2'] =  Wikidata.getDeclaracion(v.valor, v.propiedad, '<br>', 'Wikidata/Formatos', 'formatBandera2', nil)
                elseif v.propiedad == 'P131' then  
                    annadirFila['etiqueta3'] = '[[d:Property:' .. k .. '|Situado en unidad administrativa]]'
                    annadirFila['datos3'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '<br>', 'Wikidata/Formatos', 'formatBandera2', nil)     
                elseif v.propiedad == 'P625' and cd then -- Coordenadas
                    annadirFila['etiqueta4'] = '[[Coordenadas geográficas|Coordenadas]]'
                    annadirFila['datos4'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '<br>', nil, nil, nil) 
                elseif v.propiedad == 'P06' then -- Jefe de gobierno
                	local cadenaEtiqueta, cadenaDatos
                        local mandatario = Wikidata.getDeclaracion(v.valor, v.propiedad,'<br>')
                	local cargo = Wikidata.getDeclaracion(v.valor, v.propiedad,'', 'Wikidata/Formatos','formatId' , nil, nil, nil,'P039')
                	local partido = Wikidata.getDeclaracion(v.valor, v.propiedad,'', 'Wikidata/Formatos','formatId' ,nil, nil, nil,'P102')
                	local mandato = ''
                	if cargo and cargo ~= '' and  mandato and mandato ~= '' then
                		cadenaEtiqueta = cargo .. '&nbsp;(' .. mandato .. ')'
                	elseif 	cargo and cargo ~= '' then
                		cadenaEtiqueta = cargo
                    else 
                           cadenaEtiqueta = '[[d:Property:P6|Jefe de gobierno]]'
                	end
                	
                    if partido and partido ~= '' then
                           cadenaDatos = mandatario .. '&nbsp;(' .. partido .. ')'
                    else
                           cadenaDatos = mandatario
                    end	
                	annadirFila['etiqueta6'] = cadenaEtiqueta
                        annadirFila['datos6'] = cadenaDatos 
                elseif v.propiedad == 'P1082' then -- Población
                	local censo = Wikidata.getDeclaracion(v.valor, v.propiedad, nil, nil, nil,'P585')
                	annadirFila['estiloetiqueta8'] = 'border:0;font-weight:100'
                    annadirFila['estilodatos8'] = 'border:0;font-weight:100'
                	if censo and censo ~= '' then
                         annadirFila['etiqueta7'] = '[[Población]]&nbsp;('.. censo ..')'
                    else
                	     annadirFila['etiqueta7'] = '[[Población]]' 
                	end
                	annadirFila['datos7'] = '&nbsp;'  
                	annadirFila['etiqueta8'] =  '&bull;&nbsp;Total'
                    annadirFila['datos8'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '<br>', nil, nil, nil) .. ' hab.'    
                
                elseif filtrarPropiedades(v.propiedad) then    	
                        num = num + 1
                        if mw.wikibase.label(v.propiedad) ~= nil and mw.wikibase.label(v.propiedad) ~= '' then
                        	etiquetaFicha = es:ucfirst( mw.wikibase.label(v.propiedad))
                        else
                        	etiquetaFicha = k 
                        end	
                        annadirFila['etiqueta' .. num] = '[[d:Property:' .. v.propiedad .. '|'.. etiquetaFicha .. ']]'
                        annadirFila['datos' .. num] = Wikidata.getDeclaracion(v.valor, v.propiedad, '<br>', nil, nil, nil)                                 
                end
 
            end   
        end
 
        annadirFila['titulo'] = Wikidata.getEtiqueta()
        annadirFila['estilotitulo'] = 'padding:0'  
        annadirFila['estilosubtitulo1'] = 'font-size:100%; font-weight:bold; background-color:#cddeff'
 
        annadirFila['estilodatos'] = 'padding:1px 8px 1px 1px'
        annadirFila['tamañoimagenizquierda'] = '100x78px'
        annadirFila['tamañoimagenderecha'] = '88x88px'
        annadirFila['tamañoimagensuperior'] = '245px'
        annadirFila['tamañoimagen'] = '245px'
        annadirFila['tamañoimagen1'] = '245px' 
        annadirFila['tamañoimageninferior'] = '245px'
        if web ~= '' and web ~= nil then
            annadirFila['datos' .. num+1]  = '['.. web .. ' Sitio web oficial]'
        end
        for k,v in pairs(nuevasFilas) do
                    annadirFila[k] = v -- Cargamos las filas según la configuración en la tabla
                end
        return  annadirFila
   --else 
       -- return nil
  -- end
end
 
--[[
  ====================================================================
    Función principal
  ====================================================================
]]
 
function _principal()
 
    local parametros = leerEtiquetas()
    if parametros ~= nil then
      return ficha.infobox(parametros)
    else
      return '<span class="error">Página sin enlace a Wikidata</span>'         
    end
end
 
function p.principal(frame)
    marco = frame
    Wikidata:setFrame(marco)
    return _principal()
end

return p