Forskjell mellom versjoner av «Modul:Wikidata»

Fra Judo-database
Hopp til navigering Hopp til søk
m (Importerte én revisjon)
 
(Ingen forskjell)

Nåværende revisjon fra 5. apr. 2015 kl. 22:44

local i18n = {

   ["errors"] = {
       ["property-param-not-provided"] = "Parámetro de la propiedad no proporcionado.",
       ["entity-not-found"] = "Entrada no encontrada.",
       ["unknown-claim-type"] = "Tipo de notificación desconocida.",
       ["unknown-snak-type"] = "Tipo de snak desconocido.",
       ["unknown-datavalue-type"] = "Tipo datavalue desconocido.",
       ["unknown-entity-type"] = "Tipo de entrada desconocido.",
       ["unknown-value-module"] = "Debe ajustar ambos parámetros de valor y el valor del módulo de funciones.",
       ["value-module-not-found"] = "No se ha encontrado el módulo apuntado por value-module.",
       ["value-function-not-found"] = "No se ha encontrado la función apuntada por value-function."
   },
   ["somevalue"] = "valor desconocido",
   ["novalue"] = "sin valor"

}

function getEntityFromId( id )

   if id then
       return mw.wikibase.getEntityObject( id )
   end
   return mw.wikibase.getEntityObject()

end

function getEntityIdFromValue( value )

   local prefix = 
   if value['entity-type'] == 'item' then
       prefix = 'Q'
   elseif value['entity-type'] == 'property' then
       prefix = 'P'
   else
       return formatError( 'unknown-entity-type' )
   end
   return prefix .. value['numeric-id']

end

function formatError( key )

   return '' .. i18n.errors[key] .. ''

end


function formatStatements( options )

   if options.property == 'precisión' or options.property == 'breddegrad' or options.property == 'lengdegrad'  then
       propiedad = 'P625'
   else 
       propiedad = options.property
   end
   if not propiedad then
       return formatError( 'property-param-not-provided' )
   end

   --Get entity
   local entity = getEntityFromId( options.entityId )
   if not entity then
       return  --formatError( 'entity-not-found' )
   end

   if (entity.claims == nil) or (not entity.claims[propiedad]) then
       return  --TODO error?
   end

   --Declaración de formato y concatenado limpio

   local propiedad = {}
   if options.property == 'breddegrad' or options.property == 'lengdegrad' or options.property == 'precisión' then
       propiedad = 'P625'
   else 
       propiedad = options.property
   end 
   local cadena = entity.claims[propiedad]
   local s = {} -- Esto es para que el índice 0 pase a ser 1. Necesario para que todo quede en el mismo orden que en ítem
   for k, v in pairs(cadena) do
       s[k+1] = v
   end 
   local formattedStatements = {}
   for i, statement in pairs(s) do
       table.insert( formattedStatements, formatStatement( statement, options ) )
   end
   return mw.text.listToText( formattedStatements, options.separator, options.conjunction )

end

function formatStatement( statement, options )

   if not statement.type or statement.type ~= 'statement' then
       return formatError( 'unknown-claim-type' )
   end

   return formatSnak( statement.mainsnak, options )
   --TODO reference and qualifiers

end

function formatSnak( snak, options )

   if snak.snaktype == 'somevalue' then
       return i18n['somevalue']
   elseif snak.snaktype == 'novalue' then
       return i18n['novalue']
   elseif snak.snaktype == 'value' then
       return formatDatavalue( snak.datavalue, options )
   else
       return formatError( 'unknown-snak-type' )
   end

end

function formatDatavalue( datavalue, options )

   --Use the customize handler if provided
   if options['value-module'] or options['value-function'] then
       if not options['value-module'] or not options['value-function'] then
           return formatError( 'unknown-value-module' )
       end
       local formatter = require ('Module:' .. options['value-module'])
       if formatter == nil then
           return formatError( 'value-module-not-found' )
       end
       local fun = formatter[options['value-function']]
       if fun == nil then
           return formatError( 'value-function-not-found' )
       end
       return fun( datavalue.value, options )
   end
   --Default formatters
   if options.property == 'breddegrad' then --Para las coordenadas
       return datavalue.value['breddegrad']
   elseif options.property == 'lengdegrad' then
       return datavalue.value['lengdegrad']
    elseif options.property == 'precisión' then
       return datavalue.value['precision']

   elseif datavalue.type == 'wikibase-entityid' then
       return formatEntityId( getEntityIdFromValue( datavalue.value ), options )
   elseif datavalue.type == 'string' then
       return datavalue.value --TODO ids + media
   elseif  datavalue.value['breddegrad']  and datavalue.value['lengdegrad'] then 
       return  marco:preprocess('Mal:Coord')
   else
       return formatError( 'unknown-datavalue-type' )
   end

end

function formatEntityId( entityId, options )

   local label = mw.wikibase.label( entityId )

   local link = mw.wikibase.sitelink( entityId )
   if link and  options['link'] ~=  'no' then
       if label then
           return '' .. label .. ''
       else
           return '' .. link .. ''
       end
   elseif label then
       return label --TODO what if no links and label + fallback language?
   else
       return 
   end

end

local p = {}

function p.formatStatements( frame )

   marco = frame
   local args = frame.args
   local valorwikidata = formatStatements( frame.args )
   if args.prioridad == 'sí' and valorwikidata  ~=  then
       return formatStatements( frame.args )
   elseif args.value and args.value ~=  then
        return args.value
   else
       return formatStatements( frame.args )
 end  

end

-- Returns the page title of a linked page in another Wikimedia site as a string -- If no wikidata page exists, or if no link exists to the given project, -- the function returns nil function p.sitelink(frame)

-- First argument is the site code ('enwiki', 'commonswiki', ...) local siteId = frame.args[1]

-- Get Wikibase item connected to the current page local entity = mw.wikibase.getEntityObject() if not entity then return nil -- no wikidata page for current item end

-- Get title the item is linked with in the given site return entity:getSitelink(siteId) end

-- Returns Commons category, if any function p.commonscat(frame)

templateArgs = {}

-- if a category name is specified explicitly, we use that value if frame.args[1] and frame.args[1] ~= then templateArgs[1] = frame.args[1] if frame.args[2] and frame.args[2] ~= then templateArgs[2] = frame.args[2] end

-- otherwise, we fetch the category name from Wikidata else

-- Get Wikibase item connected to the current page local entity = mw.wikibase.getEntityObject() if not entity then return end -- no wikidata page for current item

-- Get formatted value local value = entity:formatPropertyValues( 'P373' )['value'] if value == then -- property not set -- Commons categories may also be stored as sitelinks value = p.sitelink({args = {'commonswiki'}}) if value and mw.ustring.sub(value, 0, 9) == 'Category:' then value = mw.ustring.sub(value, 10) -- remove namespace else value = -- not a category, probably a gallery page end end if value == then -- neither property nor sitelink available return end

templateArgs[1] = value

end

-- Return formatted value using a template if frame.args['template'] then return frame:expandTemplate{ title = frame.args['template'], args = templateArgs } end

-- or just return plain category name return templateArgs[1]

end

return p