Ugrás a tartalomhoz

Modul:SimpleTaxobox

Innen: MKOE wiki
A lap korábbi változatát látod, amilyen Dr. Gyúró Zoltán (vitalap | szerkesztései) 2025. november 23., 12:51-kor történt szerkesztése után volt.

A modult a Modul:SimpleTaxobox/doc lapon tudod dokumentálni

-- Modul:SimpleTaxobox
local p = {}

-- A rangok megjelenítendő nevei.
-- Ez a tábla kezeli a rangok magyar nevét a megjelenítéshez.
local RANK_NAMES = {
    ['Domén'] = 'Domén',
    ['Ország'] = 'Ország',
    ['Törzs'] = 'Törzs',
    ['Osztály'] = 'Osztály',
    ['Alosztály'] = 'Alosztály',
    ['Klád'] = 'Klád',
    ['Rend'] = 'Rend',
    ['Család'] = 'Család',
    ['Nemzetség'] = 'Nemzetség',
    ['Alnemzetség'] = 'Alnemzetség',
    ['Szekció'] = 'Szekció',
    ['Faj'] = 'Faj',
    -- További rangok ide
}

-- [[Modul:TaxonData]] betöltése és biztonságos elérése.
local function getData(frame)
    local success, data = pcall(require, 'Modul:TaxonData')
    if not success then
        return nil, "Hiba: A Modul:TaxonData nem tölthető be: " .. data
    end
    -- Feltételezzük, hogy a Modul:TaxonData visszaad egy 'p' táblát, amiben van egy 'getData' függvény.
    if type(data.getData) ~= 'function' then
        return nil, "Hiba: A Modul:TaxonData nem tartalmazza a 'getData' függvényt."
    end
    return data, nil
end

-- Meghatározza a teljes taxonómiai hierarchiát a megadott taxontól a gyökérig.
-- Visszaad egy táblát: { {id=ID, rank=RANK}, ... } a gyökértől a kiinduló taxonig.
local function determineHierarchy(startTaxonID, data)
    local hierarchy = {}
    local currentID = startTaxonID
    local path = {}
    
    -- Végigmegyünk a szülőkön, amíg el nem érjük a gyökért (parent=nil).
    while currentID do
        local taxonData = data.getData(currentID)
        if not taxonData then
            -- Ha hiányzik az adat, akkor a hierarchia megszakad.
            table.insert(path, 1, { id = currentID, rank = "HIÁNYZÓ ADAT" })
            break 
        end
        
        table.insert(path, 1, { id = currentID, rank = taxonData.rank })
        currentID = taxonData.parent 
    end
    
    return path
end

-- A fő függvény, ami a taxoboxot építi.
function p.buildTaxobox(frame)
    local args = frame.args
    local startTaxonID = args.taxon
    
    if not startTaxonID or startTaxonID == '' then
        return '<div style="color:red;">Hiba: Hiányzik a <code>|taxon=</code> paraméter.</div>'
    end

    local data, errorMsg = getData(frame)
    if errorMsg then
        return '<div style="color:red;">' .. errorMsg .. '</div>'
    end
    
    local hierarchy = determineHierarchy(startTaxonID, data)
    local taxoboxLines = {}
    
    -- [[Taxobox fejléc]]
    table.insert(taxoboxLines, '{| class="biota" style="text-align:left; width:200px;"')
    
    -- Taxonómiai cím
    table.insert(taxoboxLines, '|-')
    table.insert(taxoboxLines, '| colspan="2" style="text-align:center; font-size:1.25em; padding:0.1em; line-height:1.2em;" | ' .. startTaxonID)
    
    -- Hierarchia soronkénti megjelenítése
    for i, taxonInfo in ipairs(hierarchy) do
        local taxonID = taxonInfo.id
        local rank = taxonInfo.rank
        local isTerminalTaxon = (i == #hierarchy) -- Az utolsó elem a bemeneti taxon
        local displayName = taxonID
        
        -- 1. Rang neve: A rang magyar nevét vesszük alapul a RANK_NAMES táblából
        local rankName = RANK_NAMES[rank] or rank -- Ha nincs benne, az eredeti rangot használjuk

        -- 2. Display Name (Taxon Név) formázása
        -- Fajok és Nemzetségek esetén dőlt betű
        if rank == 'Faj' or rank == 'Nemzetség' or rank == 'Alnemzetség' or rank == 'Szekció' then
            displayName = "''" .. displayName .. "''"
        end

        -- A bemeneti taxon (Speciesbox-nál a Faj) neve vastag betűvel jelenik meg
        if isTerminalTaxon then
            displayName = "'''" .. displayName .. "'''"
            rankName = '' -- A legalsó taxon neve előtt nem kell a rang megnevezése
        end
        
        -- Csatolás (linkelés)
        -- A taxont a megfelelő (azonos nevű) cikkre linkeljük.
        if not isTerminalTaxon then
            displayName = '[[' .. taxonID .. '|' .. displayName .. ']]'
        end

        -- 3. Taxobox sor generálása
        local taxoLine = '|- style="vertical-align:top;"\n'
        
        if rankName ~= '' then
            taxoLine = taxoLine .. '| ' .. rankName .. ':\n'
            taxoLine = taxoLine .. '| ' .. displayName 
        else
            -- Ha a rangnév üres (a terminális taxonnál), akkor a taxon neve két oszlopban jelenik meg.
            taxoLine = taxoLine .. '| colspan="2" style="text-align:center;" | ' .. displayName
        end
        
        table.insert(taxoboxLines, taxoLine)
    end
    
    -- [[Taxobox lábléc]]
    table.insert(taxoboxLines, '|}')
    
    return table.concat(taxoboxLines, '\n')
end

return p