Module:Sandbox/Jc86035/3

require('strict')

local infobox = require('Module:Infobox').infobox

local p = {}

local function getProperty(entity, property, value)

if entity and entity.claims then

local claims = entity.claims[property]

if claims and claims[1] then

if value == 'string' then

return claims[1].mainsnak.datavalue.value, claims[1].qualifiers

end

return claims[1].mainsnak.datavalue.value.id, claims[1].qualifiers

end

end

end

local function getQualifier(qualifiers, property, value)

local claims = qualifiers[property]

if claims and claims[1] then

if value == 'string' then

return claims[1].datavalue.value

end

return claims[1].datavalue.value.id

end

end

function p.test(frame)

local args = frame.args

local entity = mw.wikibase.getEntity(args.qid)

local data = {

title = 'Title',

aboveclass = 'summary',

label3 = 'Language', data3 = args.language,

label10 = 'Artist', data10 = args.artist,

label20 = 'ISWC', data20 = (args.ISWC or args.iswc or getProperty(entity, 'P1827', 'string')),

label21 = 'ISRC', data21 = (args.ISRC or args.isrc),

}

local recording

if not data.data10 or not data.data21 then

local artist, qualifiers = getProperty(entity, 'P175')

if artist then data.data10 = data.data10 or mw.wikibase.getLabel(artist) end

local subject_of = getQualifier(qualifiers, 'P805')

if subject_of then

recording = mw.wikibase.getEntity(subject_of)

local isrc = getProperty(recording, 'P1243', 'string')

data.data21 = data.data21 or isrc

end

end

return infobox(data)

end

return p