Vejatz lo contengut

Mòdul:WikidataBox

Un article de Wikipèdia, l'enciclopèdia liura.

La documentacion d'utilizacion d'aquel modul se pòt crear a Mòdul:WikidataBox/ús

local i18n = {
    ["errors"] = {
        ["property-param-not-provided"] = "Parámetro de la propiedad no proporcionado.",
        ["entity-not-found"] = "Pas d'entrada.",
        ["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"] = "''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( entity, proprietat, options, tipe )
    local cadena = entity.claims[string.lower(proprietat)]
    if (cadena == nil) or (not cadena) then
        return '' --TODO error?
    end
    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, tipe ) )
    end
    return mw.text.listToText( formattedStatements, options.separator, options.conjunction )
end
 
function formatStatement( statement, options, tipe )
    if not statement.type or statement.type ~= 'statement' then
        return formatError( 'unknown-claim-type' )
    end
 
    return formatSnak( statement.mainsnak, options, tipe )
    --TODO reference and qualifiers
end
 
function formatSnak( snak, options, tipe )
    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, tipe )
    else
        return formatError( 'unknown-snak-type' )
    end
end
 
function formatDatavalue( datavalue, options, tipe )
    --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 == 'latitud' then --Para las coordenadas
        return datavalue.value['latitude']
    elseif options.property == 'longitud' then
        return datavalue.value['longitude']
     elseif options.property == 'precisión' then
        return datavalue.value['precision']
 
    elseif datavalue.type == 'wikibase-entityid' then
        return formatEntityId( getEntityIdFromValue( datavalue.value ), options, tipe )
    elseif datavalue.type == 'string' then
        return datavalue.value --TODO ids + media
    elseif  datavalue.value['latitude']  and datavalue.value['longitude'] then 
        return  marco:preprocess('{{coord|' .. datavalue.value['latitude'] .. '|' .. 
                   datavalue.value['longitude'] .. '|type:' .. options.tipo .. '|display=' .. 
                   options.display ..'|format=' .. options.formato..'}}')
    else
        return formatError( 'unknown-datavalue-type' )
    end
end
 
function formatEntityId( entityId, options, tipe )
    local label = mw.wikibase.label( entityId )
    local link = mw.wikibase.sitelink( entityId )

    if link and  tipe == '' then
        if label then
            return ' [[' .. link .. '|' .. label .. ']]'
        else
            return ' [[' .. link .. ']]'
        end
    end
    if link and  tipe == 'ligam' then
        if label then
            return ' [[' .. link .. '|' .. label .. ']]'
        else
            return ' [[' .. link .. ']]'
        end
    end
    if link and  tipe == 'model' then
        if label then
            return  marco:preprocess('{{coord:' .. label .. '}}')
        else
            return   marco:preprocess('{{coord:' .. link  .. '}}')
        end
    end
    if link and   tipe == 'imatge' then
        if label then
            return  ' [[Imatge:' .. link .. '|' .. label .. ']]'
        else
            return  ' [[Imatge:' .. link ..  ']]'
        end
    end
    if link and  tipe == 'categoria' then
        if label then
            return  ' [[Categoria:' .. label ..  ']]'
        end
    end

    if link and  tipe == 'non' then
        if label then
            return label
        else
            return entityId
        end
    else
        if label then
            return ' [[' .. label .. ']] [[d:' .. entityId .. '|(WikiData)]]'
        else
            return ' [[d:' .. entityId .. '|' .. entityId .. ']]'
        end
    end
end

local p = {}
 
function p.formatStatements( frame )
    --Get entity
    local entity = mw.wikibase.getEntityObject()
    if not entity then
        return formatError( 'entity-not-found' )
    end
    a = formatStatements( entity, 'P856', frame.args, 'ligam' )
    b = formatStatements( entity, 'P910', frame.args, 'categoria' )
    c = formatStatements( entity, 'P373', frame.args, 'categoria' )
    d = formatStatements( entity, 'P31', frame.args, 'ligam' )
    pais = formatStatements( entity, 'P17', frame.args, 'ligam' )

    tot= a  ..', ' .. b ..', ' .. c ..', ' .. d ..', ' .. pais
    return tot
--    tab[1]= formatStatements( 'p1', 'link' )
--    tab[2]= formatStatements( 'p2', 'link' )
--    tab[3]= formatStatements( 'p3', 'link' )
end
return p