Modul:Wikidata/Medals
Bu modulun sənədləşdirmə səhifəsi Modul:Wikidata/Medals/doc səhifəsində yaradıla bilər
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 = {
-- Bura həm medalı, həm də fəxri adı olan Vikiverilənlər elementləri
-- İkisi də əlavə edildikdə həmin mükafatın iki dəfə göstərilməsinin qarşısını alır
absorption = {
Q16675272 = 'Q654471', -- "Qızıl ulduz" medalı = RF Qəhrəmanı
Q16481808 = 'Q8706404', -- "RF Əmək Qəhrəmanı" medalı = RF Əmək Qəhrəmanı
Q1948730 = 'Q178473', -- "Qızıl Ulduz" medalı (SSRİ) = Sovet İttifaqı Qəhrəmanı
Q1980962 = 'Q208167', -- "Oraq və Çəkic" medalı = Sosialist Əməyi Qəhrəmanı
Q2032399 = 'Q2046996', -- "Qızıl ulduz" medalı = Azərbaycanın Milli Qəhrəmanı
Q102183407 = 'Q103819965', -- "Vətən Müharibəsi Qəhrəmanı" medalı = Vətən Müharibəsi Qəhrəmanı
Q1262166 = 'Q80589', -- "Xalq Qəhrəmanı" ordeni = Yuqoslaviyanın Xalq Qəhrəmanı
Q749849 = 'Q1358055', -- "Qızıl ulduz" ordeni = Ukrayna Qəhrəmanı
Q4335914 = 'Q1358055', -- "Dövlət" ordeni = Ukrayna Qəhrəmanı
Q4287121 = 'Q4137462', -- "Altın ay" medalı = Türkmənistan Qəhrəmanı
}
}
-- Həm piktoqramı (P2910), həm də lenti (P2425) olan mükafatlarda piktoqramı əsas götürülənlər:
local prioritizeP2910 = {
"Q2046996", -- Azərbaycanın Milli Qəhrəmanı
"Q1358055", -- Ukrayna Qəhrəmanı
"Q28975206", -- 3-cü dərəcəli "Şaxtaçı şöhrəti" döş nişanı
"Q28975205", -- 2-ci dərəcəli "Şaxtaçı şöhrəti" döş nişanı
"Q28975203", -- 1-ci dərəcəli "Şaxtaçı şöhrəti" döş nişanı
}
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
local function isPrioritizedQItem(entityId)
for _, qItem in ipairs(prioritizeP2910) do
if entityId == qItem then
return true
end
end
return false
end
local function getPrioritizedImage(entity)
local claims = entity.claims
local image, size, border = nil, 'x15px', false
local entityId = entity.id
if isPrioritizedQItem(entityId) then
image = getImageFromClaims(claims, 'P2910')
if image then
size = 'x37px'
else
image = getImageFromClaims(claims, 'P2425')
if image then
border = true
end
end
else
image = getImageFromClaims(claims, 'P2425')
if image then
border = true
else
image = getImageFromClaims(claims, 'P2910')
if image then
size = 'x37px'
end
end
end
return image, size, border
end
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.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 = '<span class="wikidata-claim" data-wikidata-property-id="' .. string.upper(options.property) .. '" data-wikidata-claim-id="' .. claim.id .. '">' .. formattedStatement .. '</span>'
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
if lastValue ~= '-' then
table.insert(orderedData, '<br>')
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, '<br>')
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
function p.getImageFromEntity(entityOrId, actualDate)
local entity = type(entityOrId) == "string" and mw.wikibase.getEntity(entityOrId) or entityOrId
local image, size, border = getPrioritizedImage(entity)
return image, size, border
end
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[P4224:Q24571879]' }, entity)
if recipientCategory == '' then
recipientCategory = context.extractCategory({ category = 'P2517' }, entity)
end
end
if options.qualifiers then
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[P27:' .. claim.datavalue.value.id .. ']' }, entity)
end
end
end
end
if image then
local link = mw.wikibase.getSitelink(entityId)
local out = '[[Fayl:' .. image
if border == true then
out = 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
return '<span style="display:inline-block; text-align:left">' .. out .. recipientCategory .. '</span>'
end
return ''
end
return p