Modul:SimpleTaxobox
Megjelenés
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