mic_none

Module:Sandbox/Jc86035/3 Source: en.wikipedia.org/wiki/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