Module:PropertyLink

There are no reviewed versions of this page, so it may not have been checked for adherence to standards.

This module can be used for advance linking, according to Wikidata. It includes the following functions:

  • property - get a link according to wikidata claim
    • Parameters: property (e.g p123)
    • Example: in Lion {{#invoke:PropertyLink|property|p70}} - will give Carnivora. It is better to use this function and not [[{{#property:p70}}]] as the property gives the label in Wikidata, while this function will use the correct sitelink.
  • label: gives the label in wikidata (no [[link]])
    • Parameters: property (e.g p123)
  • imageLink: Get a related file to be used in the article
    • Parameters:
      • 1 param (optional) - Property to get commons link. If not specified it uses d:Property:p18 (a generic property for image in wikidata)
      • width - default 220px

function getProperty( propertyName, options )
    local entity = mw.wikibase.getEntityObject()
    if not entity or not entity.claims then return end--the entity doesnt exist or have no claims
    local property = entity.claims[propertyName]
    if not property then return end--no such property for this item
    local result = {}
    for i, statement in pairs( property ) do
        local propValue = statement.mainsnak and statement.mainsnak.datavalue
        if propValue then --property exists
            if propValue['type'] == 'wikibase-entityid' then
                local linkTarget = mw.wikibase.sitelink( "Q" .. propValue.value['numeric-id'] )
                local linkTitle = mw.wikibase.label( "Q" ..propValue.value['numeric-id'] )
                table.insert( result,  ( linkTarget and linkTitle and mw.ustring.format( "[[%s|%s]]", linkTarget, linkTitle )
                    or linkTitle ) )
            elseif propValue and propValue['type'] == 'string' then 
                table.insert( result, propValue.value )
            end
        end
    end
    return mw.text.listToText(result, options.separator, options.conjunction )
end
 
function property( options )
    return getProperty(string.lower(options.args[1]), options)
end
 
function getLabel( propertyName )
    local entity = mw.wikibase.getEntityObject()
    if not entity or not entity.claims then return end--the entity doesnt exist or have no claims
    local property = entity.claims[propertyName]
    if not property then return end--no such property for this item
 
    property = property[0]
    local propValue = property.mainsnak.datavalue
    if not propValue then return '' end --property doesnt exist
 
    if propValue['type']=='wikibase-entityid' then
        return mw.wikibase.label( "Q" ..propValue.value['numeric-id'] )
    elseif propValue['type'] == 'string' then
        return propValue.value
    end
end
 
-- Return the label for property, or the label of the linked entiy of that property
function label( frame )
    return getLabel( string.lower(frame.args[1] ))
end
 
function getImageLink( propName, width)
    local entity = mw.wikibase.getEntityObject()
    if not entity or not entity.claims then return end --the entity doesnt exist or have no claims
    local property = entity.claims[propName or "p18"]
    if property then
        local width = width or "220"
        return mw.ustring.format( '[[File:%s|%spx]]', property[0].mainsnak.datavalue.value, width )
    end
end
 
--use this function to get associated image to be used in the article
function imageLink( frame )
    return getImageLink( string.lower(frame.args[1]), frame.args["width"])
end
 
return {
    imageLink = imageLink,
    Image = imageLink,
    File = imageLink,
    label = label,
    Label = label,
    property = property,
    Property = property,
    getProperty = getProperty,
    getImageLink = getImageLink,
    getLabel = getLabel
}