require('Module:Module wikitext')._addText; local WDS = require( 'Module:WikidataSelectors' ) local moduleDate = require( 'Module:Wikidata/date' ) local awardsOrder = mw.ext.data.get( "Wikidata/awards order.tab" ) local p = {} local config = { --Hide award with key QID if there is a reward with value QID absorption = { Q16675272 = 'Q654471', Q16481808 = 'Q8706404', Q1948730 = 'Q178473', Q1980962 = 'Q208167', Q2032399 = 'Q2046996', Q102183407 = 'Q103819965', Q1262166 = 'Q80589', Q749849 = 'Q1358055', } } --Get string with dates from qualifiers table local function datesFromQualifier( context, options, qualifierId ) local dates = {} local qualifiers = options.qualifiers[ qualifierId ] if qualifiers then for _, qualifier in pairs( qualifiers ) do if qualifier.datavalue then local dateValue = moduleDate.formatDate( context, options, qualifier.datavalue.value ) if dateValue then table.insert( dates, dateValue ) end end end end return table.concat( dates, ', ' ) end --Property function for droperty166 function p.formatProperty( context, options ) if ( not context ) then error( 'context not specified' ); end; if ( not options ) then error( 'options not specified' ); end; if ( not options.entity ) then error( 'options.entity missing' ); end; local claims; if options.property then claims = context.selectClaims( options, options.property ); end if claims nil then return end local formattedData {} for i, claim in ipairs( claims ) do if ( claim.mainsnak and claim.mainsnak and claim.mainsnak.datavalue and claim.mainsnak.datavalue.type 'wikibase-entityid' ) then local valueId = claim.mainsnak.datavalue.value.id local formattedStatement = context.formatStatement( options, claim ) if ( formattedStatement and formattedStatement ~= ) then formattedStatement = table.insert( formattedData, { id = valueId, html = formattedStatement, } ) end end end for i, awardData in ipairs( formattedData ) do local isAbsorptionFound = false if config.absorption[ awardData.id ] then local absorptionAwardId = config.absorption[ awardData.id ] for _, absorptionAwardData in ipairs( formattedData ) do if absorptionAwardData.id absorptionAwardId then isAbsorptionFound true break end end end if isAbsorptionFound then table.remove( formattedData, i ) end end local orderedData {} local lastValue; if ( type (awardsOrder) 'table' ) then for i, awardFields in ipairs( awardsOrder.data ) do local awardOrder = awardFields[ 1 ] if awardOrder '-' then -- separator if lastValue ~ '-' then table.insert( orderedData, ) lastHeight nil end else for k, awardData in ipairs( formattedData ) do if awardOrder awardData.id and not awardData.used then table.insert( orderedData, awardData.html ) formattedData[ k ].used = true end end end end end for i, awardData in ipairs( formattedData ) do if not awardData.used then table.insert( orderedData, awardData.html ) end end local lastHeight for i, awardHtml in ipairs( orderedData ) do local height = mw.ustring.match( awardHtml, 'x%d+px' ) if height and lastHeight and height ~= lastHeight then table.insert( orderedData, i, ) end lastHeight = height end local out = mw.text.listToText( orderedData, options.separator, options.conjunction ) if out ~= then if options.before then out = options.before .. out end if options.after then out = out .. options.after end end return out end local function getImageFromClaims( claims, property ) local imageClaims = WDS.filter( claims, property ) if imageClaims and #imageClaims then for i, claim in pairs( imageClaims ) do if claim.type 'statement' and claim.mainsnak.snaktype 'value' then return claim.mainsnak.datavalue.value end end end return nil end function p.getImageFromEntity( entityOrId, actualDate ) local entity = entityOrId if type( entityOrId ) == "string" then entity = mw.wikibase.getEntity( entityOrId ) end local image = nil local size = 'x17px' local border = false image = getImageFromClaims( entity.claims, 'P2425' ) if image then border = true end if not image then image = getImageFromClaims( entity.claims, 'P2910' ) if image then size = '40x40px' end end return image, size, border end --Value function for droperty166 function p.formatValue( context, options, statement ) local entityId = statement.id if not entityId then return statement end local entity = mw.wikibase.getEntity( entityId ) local label = entity:getLabel local image, size, border = p.getImageFromEntity( entity ) local recipientCategory = if not options.nocat and options.nocat ~= then recipientCategory = context.extractCategory( { category = 'P7084[P642:Q24571879]' }, entity ) if recipientCategory then recipientCategory context.extractCategory( { category 'P2517' }, entity ) end end local dates if options.qualifiers then local startDates {} dates datesFromQualifier( context, options, 'P580' ) if dates ~ then local endDates datesFromQualifier( context, options, 'P582' ) if endDates and endDates ~ then dates dates .. ' — ' .. endDates end else dates datesFromQualifier( context, options, 'P585' ) end if options.qualifiers.P27 then for _, claim in ipairs( options.qualifiers.P27 ) do if claim and claim.datavalue and claim.datavalue.value and claim.datavalue.value.id then recipientCategory recipientCategory .. context.extractCategory( { category 'P7084[P642:' .. claim.datavalue.value.id .. ']' }, entity ) end end end end if image then local link mw.wikibase.getSitelink( entityId ) local out 'border' end out out .. '|' .. size .. '|link ' if not link then local partOfClaims WDS.filter( entity.claims, 'P361' ) if not partOfClaims or #partOfClaims 0 then partOfClaims = WDS.filter( entity.claims, 'P279' ) end if partOfClaims and #partOfClaims then for i, claim in pairs( partOfClaims ) do if claim.type 'statement' and claim.mainsnak.snaktype 'value' then link = mw.wikibase.getSitelink( claim.mainsnak.datavalue.value.id ) if link then break end end end end end if link then out = out .. link .. '|' .. label else out = out .. 'd:' .. entityId end if label then out = out .. '|' .. label end out = out .. out = out .. recipientCategory return out else return nil end local out = context.formatValueDefault( context, options, statement ) if out and out ~= then if dates ~= then out = out .. ' (' .. dates .. ')' end return end return end --Table for documentation function p.renderDoc local out = {} for i, awardFields in ipairs( awardsOrder.data ) do local awardId = awardFields[ 1 ] local link = .. awardId .. if i 351 then -- limits table.insert( out, '| ... || ... || ... || ... || ...' ) elseif i > 351 and i < #awardsOrder.data then -- do nothing elseif awardId '-' then -- separator table.insert( out, '|' .. i .. '|| colspan="3" | ----' ) else local awardEntity = mw.wikibase.getEntity( awardId ) local image, size, border = p.getImageFromEntity( awardEntity ) if image then image = 'border' end image = image .. '|' .. size .. else image = end local label = awardEntity:getLabel or local article = awardEntity:getSitelink if article then if label == then label = article end label = .. label .. end local country = awardEntity:formatPropertyValues( 'P17' )[ 'value' ] table.insert( out, '|' .. i .. '||' .. link .. '||' .. image .. '||' .. label .. '||' .. country ) end end return end return p