وحدة:Wikidata2/tax/ملعب

من ويكيبيديا، الموسوعة الحرة
---- This module implements [[template:تصنيف كائن/تصنيف علمي ويكي بيانات]].

local p = {}

local data = require("Module:Wikidata2/tax/cash")
local ItemsCash = data.Cash
local colors = data.colors
local taxP105 = data.taxP105

function FindInCash(id, prop)
    local Cash = ItemsCash[id]
    if Cash and Cash[prop] then
        mw.log(id .. " : " .. prop .. " : " .. Cash[prop])
        return Cash[prop]
    end
    return nil
end

function foo(iid, formatting, p)
    if not iid or iid == "" then
        return nil
    end
    
    local st = formatStatements({
        property = p or "P171",
        entityId = iid,
        enlabelcate = "t",
        noref = "t",
        firstvalue = "true",
        formatting = formatting
    })
    
    if st and st ~= "" then
        return st
    else
        return nil
    end
end

function GetP171id(id, formatting)
    if not id or id == "" then
        return nil
    end
    
    local P171id = FindInCash(id, "P171")
    
    if not P171id or P171id == "" then
        P171id = formatStatements({
            property = "P171",
            entityId = id,
            rank = "best",
            noref = "t",
            firstvalue = "true",
            formatting = "raw"
        })
    end
    
    return P171id
end

function p.taxcolour(datavalue, datatype, options)
    local ids = {}
    for i = 1, 23 do
        ids[i] = GetP171id(ids[i - 1] or datavalue.value.id, "raw")
    end

    local taxon1 = {}
    for i = 23, 1, -1 do
        taxon1[24 - i] = ids[i] or ""
    end

    local q = {}
    for _, j in ipairs(taxon1) do
        local e = foo(j, "raw", "P105")
        if e and e ~= "" then
            if e == "Q36732" then
                for k, v in pairs(colors) do
                    if j == k then
                        table.insert(q, v)
                    end
                end
            end
        end
    end

    local taxon = table.concat(q, "\n")
    return taxon or ""
end

function taxonrank(iid)
    if not iid or iid == "" then
        return nil
    end
    
    local vvv = nil
    local P105iid = FindInCash(iid, "P105")
    
    if not P105iid or P105iid == "" then
        P105iid = formatStatements({
            property = "P105",
            entityId = iid,
            enlabelcate = "t",
            noref = "t",
            firstvalue = "true",
            formatting = "raw"
        })
    end
    
    if not vvv and P105iid and P105iid ~= "" then
        for k, v in pairs(taxP105) do
            if k == P105iid then
                vvv = v
                break
            end
        end
    end
    
    if not vvv then
        local st = formatStatements({
            property = "P105",
            entityId = iid,
            enlabelcate = "t",
            noref = "t",
            firstvalue = "true",
            formatting = ""
        })
        
        if st and st ~= "" then
            vvv = st
        end
    end
    
    return vvv
end

function dd(id, taxo)
    if id and id ~= "" then
        local norank = " (دون مرتبة)"
        local P31 = foo(id, "", "P31")
        local small = P31 and "<small>" .. P31 .. norank .. "</small>" or nil
        
        local d = taxonrank(id)
        
        if not d or d == "" then
            return nil
        end
        
        if taxo and taxo ~= "" then
            if d and d ~= "" then
                return d .. "\n|" .. taxo
            else
                return taxo
            end
        end
    end
end

function pro1(id, options)
    if not id or id == "" then
        return nil
    end
    
    local st = formatStatements({
        property = "P171",
        entityId = id,
        enlabelcate = "t",
        noref = options and options.noref or "e", -- Use options.noref if available, else default to "e"
        firstvalue = "true"
    })
    
    return st
end


function p.tax(datavalue, datatype, options)
    ----------------
    local value = datavalue.value
    P0 = dd(value.id, formatEntityId(value.id, options).value)
    local P1id = GetP171id(value.id, "raw")
    P1 = dd(P1id, pro1(value.id, options))
    local P2id = GetP171id(P1id, "raw")
    P2 = dd(P2id, pro1(P1id, options))
    local P3id = GetP171id(P2id, "raw")
    P3 = dd(P3id, pro1(P2id, options))
    local P4id = GetP171id(P3id, "raw")
    P4 = dd(P4id, pro1(P3id, options))
    local P5id = GetP171id(P4id, "raw")
    P5 = dd(P5id, pro1(P4id, options))
    local P6id = GetP171id(P5id, "raw")
    P6 = dd(P6id, pro1(P5id, options))
    local P7id = GetP171id(P6id, "raw")
    P7 = dd(P7id, pro1(P6id, options))
    local P8id = GetP171id(P7id, "raw")
    P8 = dd(P8id, pro1(P7id, options))
    local P9id = GetP171id(P8id, "raw")
    P9 = dd(P9id, pro1(P8id, options))
    local P10id = GetP171id(P9id, "raw")
    P10 = dd(P10id, pro1(P9id, options))
    local P11id = GetP171id(P10id, "raw")
    P11 = dd(P11id, pro1(P10id, options))
    local P12id = GetP171id(P11id, "raw")
    P12 = dd(P12id, pro1(P11id, options))
    local P13id = GetP171id(P12id, "raw")
    P13 = dd(P13id, pro1(P12id, options))
    local P14id = GetP171id(P13id, "raw")
    P14 = dd(P14id, pro1(P13id, options))
    local P15id = GetP171id(P14id, "raw")
    P15 = dd(P15id, pro1(P14id, options))
    local P16id = GetP171id(P15id, "raw")
    P16 = dd(P16id, pro1(P15id, options))
    local P17id = GetP171id(P16id, "raw")
    P17 = dd(P17id, pro1(P16id, options))
    local P18id = GetP171id(P17id, "raw")
    P18 = dd(P18id, pro1(P17id, options))
    local P19id = GetP171id(P18id, "raw")
    P19 = dd(P19id, pro1(P18id, options))
    local P20id = GetP171id(P19id, "raw")
    P20 = dd(P20id, pro1(P19id, options))
    local P21id = GetP171id(P20id, "raw")
    P21 = dd(P21id, pro1(P20id, options))
    local P22id = GetP171id(P21id, "raw")
    P22 = dd(P22id, pro1(P21id, options))
    local P23id = GetP171id(P22id, "raw")
    P23 = dd(P23id, pro1(P22id, options))
    local P24id = GetP171id(P23id, "raw")
    P24 = dd(P24id, pro1(P23id, options))
    local P25id = GetP171id(P24id, "raw")
    P25 = dd(P25id, pro1(P24id, options))
    local P26id = GetP171id(P25id, "raw")
    P26 = dd(P26id, pro1(P25id, options))
    local P27id = GetP171id(P26id, "raw")
    P27 = dd(P27id, pro1(P26id, options))
    local P28id = GetP171id(P27id, "raw")
    P28 = dd(P28id, pro1(P27id, options))
    local P29id = GetP171id(P28id, "raw")
    P29 = dd(P29id, pro1(P28id, options))
    local P30id = GetP171id(P29id, "raw")
    P30 = dd(P23id, pro1(P29id, options))

    local P31id = GetP171id(P30id, "raw")
    P31 = dd(P31id, pro1(P30id, options))
    local P32id = GetP171id(P31id, "raw")
    P32 = dd(P32id, pro1(P31id, options))
    local P33id = GetP171id(P32id, "raw")
    P33 = dd(P33id, pro1(P32id, options))
    local P34id = GetP171id(P33id, "raw")
    P34 = dd(P34id, pro1(P33id, options))
    local P35id = GetP171id(P34id, "raw")
    P35 = dd(P35id, pro1(P34id, options))
    ----------------
    if not coo or coo == "" then
        coo = p.taxcolour(datavalue, datatype, options)
    end
    ----------------
    to = "[[التصنيف العلمي]]"
    ti = addTrackingCategory(to, options)
    ti = addTrackingCategory(ti, {property = "P105", noicon = "t"})
    title = 'colspan="2" style="text-align: center;background-color:' .. coo .. ';" | ' .. ti

    head = '{| class="infobox biota" style="text-align: right; width: 200px; font-size: 100%%"'
    End = "}"
    local taxon2 = {
        P23 or "",
        P22 or "",
        P21 or "",
        P20 or "",
        P19 or "",
        P18 or "",
        P17 or "",
        P16 or "",
        P15 or "",
        P14 or "",
        P13 or "",
        P12 or "",
        P11 or "",
        P10 or "",
        P9 or "",
        P8 or "",
        P7 or "",
        P6 or "",
        P5 or "",
        P4 or "",
        P3 or "",
        P2 or "",
        P1 or "",
        P0 or ""
    }
    ----------------
    local taxon1 = {
        P35 or "",
        P34 or "",
        P33 or "",
        P32 or "",
        P31 or "",
        P30 or "",
        P29 or "",
        P28 or "",
        P27 or "",
        P26 or "",
        P25 or "",
        P24 or "",
        P23 or "",
        P22 or "",
        P21 or "",
        P20 or "",
        P19 or "",
        P18 or "",
        P17 or "",
        P16 or "",
        P15 or "",
        P14 or "",
        P13 or "",
        P12 or "",
        P11 or "",
        P10 or "",
        P9 or "",
        P8 or "",
        P7 or "",
        P6 or "",
        P5 or "",
        P4 or "",
        P3 or "",
        P2 or "",
        P1 or "",
        P0 or ""
    }
    ----------------
    local q = {}
    --table.insert( q,head	)
    table.insert(q, title)
    for i, j in ipairs(taxon1) do
        ----
        if options.numb and options.numb ~= "" then
            e = i .. "\n|" .. j
        else
            e = j
        end
        ----
        if j and j ~= "" then
            table.insert(q, e)
        end
    end
    ----------------
    --table.insert( q,End	)
    taxonSections = table.concat(q, "\n|-\n|")
    result = string.format([[%s
|-
!%s
|-
|%s
%s]], head, title, taxonSections, End)
    ----------------

    return taxonSections --result
end

return p