„Modul:SimpleTaxobox” változatai közötti eltérés
Megjelenés
Nincs szerkesztési összefoglaló Címke: Visszaállítva |
Nincs szerkesztési összefoglaló Címke: Visszaállítva |
||
| 1. sor: | 1. sor: | ||
-- Modul:SimpleTaxobox | -- Modul:SimpleTaxobox | ||
local p = {} | local p = {} | ||
-- | -- A rangok megjelenítendő nevei. | ||
local | -- 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 | local function getData(frame) | ||
local | local success, data = pcall(require, 'Modul:TaxonData') | ||
return | 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 | end | ||
-- A fő függvény, ami a taxoboxot építi. | |||
function p.buildTaxobox(frame) | function p.buildTaxobox(frame) | ||
local args = frame | local args = frame.args | ||
local | 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 | |||
if | local data, errorMsg = getData(frame) | ||
return " | if errorMsg then | ||
return '<div style="color:red;">' .. errorMsg .. '</div>' | |||
end | end | ||
-- 1. | local hierarchy = determineHierarchy(startTaxonID, data) | ||
local taxoboxLines = {} | |||
local | |||
-- [[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 | 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 | end | ||
table.insert(taxoboxLines, taxoLine) | |||
end | end | ||
-- [[Taxobox lábléc]] | |||
table.insert(taxoboxLines, '|}') | |||
return | return table.concat(taxoboxLines, '\n') | ||
end | end | ||
return p | return p | ||
A lap 2025. november 23., 12:51-kori változata
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