Jump to content

Module:PrevalenceData/sandbox: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
use bestStatements; check for novalue/somevalue; tidy
Line 2: Line 2:


p.main = function ( frame )
p.main = function ( frame )
local entity = mw.wikibase.getEntity( frame.args.qId or nil )
local qid = frame.args.qId
if entity then
if qid == "" then qid = nil end
local prevalenceClaims = entity.claims and entity.claims.P1193
local prevalenceClaims = mw.wikibase.getBestStatements(qid, "P1193")
local pRange = ''
-- TODO: Get best claim, not always just the first one.
-- Run through all prevalence claims - the table prevalenceClaims always exists but may be empty
-- Probably use getBestStatements.
if prevalenceClaims then
for i, prevalenceClaim in ipairs( prevalenceClaims ) do
local prevalenceValue = prevalenceClaim.mainsnak.datavalue and prevalenceClaim.mainsnak.datavalue.value
local pRange = ''
if prevalenceValue then
-- Run through all prevalence claims
if string.len( pRange ) > 0 then
for i, prevalenceClaim in pairs( prevalenceClaims ) do
-- Split multiple claims
local prevalenceValue = prevalenceClaim.mainsnak.datavalue.value
-- Maybe line break instead?
if prevalenceValue then
if string.len( pRange ) > 0 then
pRange = pRange .. ', '
end
-- Split multiple claims
if prevalenceValue.lowerBound and prevalenceValue.upperBound then
-- Maybe line break instead?
local lowerBound = prevalenceValue.lowerBound * 100
pRange = pRange .. ', '
local upperBound = prevalenceValue.upperBound * 100
end
pRange = pRange .. lowerBound
if prevalenceValue.lowerBound and prevalenceValue.upperBound then
local lowerBound = prevalenceValue.lowerBound * 100
if lowerBound ~= upperBound then
pRange = pRange .. '—' .. upperBound
local upperBound = prevalenceValue.upperBound * 100
end
pRange = pRange .. lowerBound
else
if lowerBound ~= upperBound then
local amount = prevalenceValue.amount * 100
pRange = pRange .. '—' .. upperBound
pRange = pRange .. amount
end
pRange = pRange .. '%'
if prevalenceClaim.qualifiers then
-- Qualifiers for prevalence are currently unstandardized.
-- Keep guessing until the right one is found.
local quals = prevalenceClaim.qualifiers.P276 or -- location
prevalenceClaim.qualifiers.P1001 or -- applies to jurisdiction
prevalenceClaim.qualifiers.P17 -- country
if quals then
pRange = pRange .. ' ('
for k, qual in pairs(quals) do
if k > 1 then
pRange = pRange .. ', '
end
end
local qualId = qual.datavalue.value[ 'numeric-id' ]
else
local amount = prevalenceValue.amount * 100
local link = mw.wikibase.sitelink( 'Q' .. qualId )
pRange = pRange .. amount
local label = ({
-- Certain geographic locales might need a
end
-- manual-ish override for labels.
pRange = pRange .. '%'
[ 132453 ] = 'developed world'
})[ qualId ] or mw.wikibase.label( 'Q' .. qualId )
if prevalenceClaim.qualifiers then
if link then
-- Qualifiers for prevalence are currently unstandardized.
-- Keep guessing until the right one is found.
label = '[[' .. link .. '|' .. label .. ']]'
local quals = prevalenceClaim.qualifiers.P276 or -- location
prevalenceClaim.qualifiers.P1001 or -- applies to jurisdiction
prevalenceClaim.qualifiers.P17 -- country
if quals then
pRange = pRange .. ' ('
for k, qual in pairs(quals) do
if k > 1 then
pRange = pRange .. ', '
end
local qualId = qual.datavalue.value[ 'numeric-id' ]
local link = mw.wikibase.sitelink( 'Q' .. qualId )
local label = ({
-- Certain geographic locales might need a
-- manual-ish override for labels.
[ 132453 ] = 'developed world'
})[ qualId ] or mw.wikibase.label( 'Q' .. qualId )
if link then
label = '[[' .. link .. '|' .. label .. ']]'
end
pRange = pRange .. label
end
pRange = pRange .. ')'
end
end
pRange = pRange .. label
end
end
pRange = pRange .. ')'
end
end
--[[
-- Todo: References
if prevalenceClaim.references then
end
]]--
end
end
return pRange
end
end
--[[ Todo: References
if prevalenceClaim.references then
end
--]]
end
end
return ''
return pRange
end
end



Revision as of 18:28, 24 May 2020

local p = {}

p.main = function ( frame )
	local qid = frame.args.qId
	if qid == "" then qid = nil end
	local prevalenceClaims = mw.wikibase.getBestStatements(qid, "P1193")
	local pRange = ''
	-- Run through all prevalence claims - the table prevalenceClaims always exists but may be empty
	for i, prevalenceClaim in ipairs( prevalenceClaims ) do
		local prevalenceValue = prevalenceClaim.mainsnak.datavalue and prevalenceClaim.mainsnak.datavalue.value
		if prevalenceValue then
			if string.len( pRange ) > 0 then
				-- Split multiple claims
				-- Maybe line break instead?
				pRange = pRange .. ', '
			end
			if prevalenceValue.lowerBound and prevalenceValue.upperBound then
				local lowerBound = prevalenceValue.lowerBound * 100
				local upperBound = prevalenceValue.upperBound * 100
				pRange = pRange .. lowerBound
				if lowerBound ~= upperBound then
					pRange = pRange .. '—' .. upperBound
				end
			else
				local amount = prevalenceValue.amount * 100
				pRange = pRange .. amount
			end
			pRange = pRange .. '%'
			if prevalenceClaim.qualifiers then
				-- Qualifiers for prevalence are currently unstandardized.
				-- Keep guessing until the right one is found.
				local quals = prevalenceClaim.qualifiers.P276 or -- location
					prevalenceClaim.qualifiers.P1001 or          -- applies to jurisdiction
					prevalenceClaim.qualifiers.P17               -- country
				if quals then
					pRange = pRange .. ' ('
					for k, qual in pairs(quals) do
						if k > 1 then
							pRange = pRange .. ', '
						end
						local qualId = qual.datavalue.value[ 'numeric-id' ]
						local link = mw.wikibase.sitelink( 'Q' .. qualId )
						local label = ({
							-- Certain geographic locales might need a
							-- manual-ish override for labels. 
							[ 132453 ] = 'developed world'
						})[ qualId ] or mw.wikibase.label( 'Q' .. qualId )
						if link then
							label = '[[' .. link .. '|' .. label .. ']]'
						end
						pRange = pRange .. label
					end
					pRange = pRange .. ')'
				end
			end
		end
		--[[ Todo: References
		if prevalenceClaim.references then
		end
		--]]
	end
	return pRange
end

return p