Dokumentation für das Modul Wikidata[Ansicht] [Bearbeiten] [Versionsgeschichte] [Aktualisieren]
Hinweise
local i18n = {     ["errors"] = {         ["property-param-not-provided"] = "Property parameter not provided.",         ["entity-not-found"] = "Entity not found.",         ["unknown-claim-type"] = "Unknown claim type.",         ["unknown-snak-type"] = "Unknown snak type.",         ["unknown-datavalue-type"] = "Unknown datavalue type.",         ["unknown-entity-type"] = "Unknown entity type.",         ["unknown-value-module"] = "You must set both value-module and value-function parameters.",         ["value-module-not-found"] = "The module pointed by value-module not found.",         ["value-function-not-found"] = "The function pointed by value-function not found."     },     ["somevalue"] = "''unknown value''",     ["novalue"] = "''no value''" }  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 '<span class="error">' .. i18n.errors[key] .. '</span>' end   function formatStatements( options )     if not options.property 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[string.upper(options.property)]) then         return '' --TODO error?     end      --Format statement and concat them cleanly     local formattedStatements = {}     for i, statement in pairs( entity.claims[string.upper(options.property)] ) 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 datavalue.type == 'wikibase-entityid' then         return formatEntityId( getEntityIdFromValue( datavalue.value ), options )     elseif datavalue.type == 'string' then         return datavalue.value --TODO ids + media     elseif datavalue.type == 'quantity' then         return tonumber(datavalue.value.amount)     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 then         if label then             return '[[' .. link .. '|' .. label .. ']]'         else             return '[[' .. link .. ']]'         end     else         return label --TODO what if no links and label + fallback language?     end end  local p = {}  function p.formatStatements( frame )     local args = frame.args      --If a value if already set, use it     if args.value and args.value ~= '' then         return args.value     end     return formatStatements( frame.args ) end  function p.formatStatementsIntern ( args ) 	return formatStatements( args ) end  function p.getID ()    entity = mw.wikibase.getEntityObject()    if ( entity ~= nil ) then       return entity.id    else       return ''    end end  return p