Module:PropertyLink

From Android Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Documentation for this module may be created at Module:PropertyLink/doc

Script error: Lua error: Internal error: The interpreter exited with status 127.

function getLinkLabel(propValue, frame)
	if propValue['type'] == 'wikibase-entityid' then
		local isWikipedia = false
        local linkTarget = mw.wikibase.sitelink( "Q" .. propValue.value['numeric-id'] )
        if not linkTarget then
        	local targetEntity = mw.wikibase.getEntity( "Q" .. propValue.value['numeric-id'] )
        	if targetEntity and targetEntity['sitelinks'] then
        		if targetEntity['sitelinks']['dewiki'] then
        			linkTarget = string.gsub('de:' .. targetEntity['sitelinks']['dewiki']['title'], ' ', '_')
        			isWikipedia = true
        		elseif targetEntity['sitelinks']['enwiki'] then
        			linkTarget = string.gsub(targetEntity['sitelinks']['enwiki']['title'], ' ', '_')
        			isWikipedia = true
    			end
			end
		end
        local linkTitle = mw.wikibase.label( "Q" ..propValue.value['numeric-id'] )
        
        if isWikipedia then
        	template = "{{WikipediaLink|%s|%s}}"
        end
        if linkTarget and linkTitle then
        	if isWikipedia then
        		return frame:expandTemplate{ title = 'WikipediaLink', args = { linkTarget, linkTitle } }
        	end
        	return mw.ustring.format( "[[%s|%s]]", linkTarget, linkTitle )
        else
            return linkTitle
        end
    elseif propValue and propValue['type'] == 'string' then
    	return propValue.value
    end
end

function getProperty(propertyName, frame)
    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[1]
    local propValue = property.mainsnak and property.mainsnak.datavalue
    if not propValue then return end --property doesnt exist

	return getLinkLabel(propValue, frame)
end
 
function property( frame )
    return getProperty(string.upper(frame.args[1], frame), frame)
end

function getLabel( propertyName )
    local entity = mw.wikibase.getEntity()
    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

function getLinkLabels( frame )
	propertyName = frame.args[1]
    local entity = mw.wikibase.getEntityObject()
    if not entity or not entity.claims then return end--the entity doesnt exist or have no claims
    local properties = entity.claims[propertyName]
    if not properties then return end--no such property for this item
 
    local retVal = ''
    for propIndex in pairs(properties) do
    	local property = properties[propIndex]
		local propValue = property.mainsnak.datavalue
		if not propValue then return '' end --property doesnt exist

		local value = getLinkLabel(propValue, frame)
		if retVal == '' then
			retVal = value
		else
			retVal = retVal .. ', ' .. value
		end
	end
	
	return retVal
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.getEntity()
    if not entity or not entity.claims then return end --the entity doesnt exist or have no claims
    local property = entity.claims[propName or "P4"]
    if property then
        local width = width or "220"
        return mw.ustring.format( '[[File:%s|%spx]]', property[1].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.upper(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,
    getLinkLabels = getLinkLabels,
}