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 nilendlocal function isPrioritizedQItem(entityId)    for _, qItem in ipairs(prioritizeP2910) do        if entityId == qItem then            return true        end    end    return falseendlocal 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, borderendfunction 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 outendfunction 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, borderendfunction 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 ''endreturn p