Modul:Taxonomy/classification
Naviqasiyaya keç
Axtarışa keç
Bu modulun sənədləşdirmə səhifəsi Modul:Taxonomy/classification/doc səhifəsində yaradıla bilər
local p = {}
local Taxonomy_latin = require("Module:Taxonomy/latin")
local Rangs = { --ranqların təsnifatı
Osn = "/Domen/Realm/Aləm/Tip/Şöbə/Sinif/Dəstə/Sıra/Fəsilə/Cins/Növ/İxnocins/İxnonöv/", --əsas
Prom = "/Subrealm/Yarımaləm/Tipüstü/Şöbəüstü/Yarımtip/Yarımşöbə/İnfratip/Sinifüstü/Yarımsinif/İnfrasinif/Şöbəüstü/Sıraüstü/Yarımşöbə/Yarımsıra/İnfradəstə/Fəsiləüstü/Yarımfəsilə/Tribaüstü/Triba/Yarımtriba/Bölmə/Yarımbölmə/Yarımcins/Seksiyaüstü/Seksiya/Yarımseksiya/Sıra/Yarımsıra/Növlər kompleksi/Yarımnöv/Varietet/Müxtəliflik/Yarımmüxtəliflik/Forma/Yarımforma/Domenüstü/", --aralıq
Bez = "/Qrup/Klad/Ranqsız/",
Ich = "/İxnocins/İxnonöv/", --ixnotaksonlar
Err = "'''???'''", --əgər ranq doldurulmayıbsa
Spec = "/Növ/Yarımnöv/Varietet/Müxtəliflik/Yarımmüxtəliflik/Forma/Yarımforma/İxnonöv/Ştamm/Biovar/Bionöv/Serovar/Serotip/İzolyat/" --növ və daha aşağı
}
local RangColors = {Osn = "inherit", Prom = "#007878", Dop = "DarkRed", Bez = "#6F6F00", Ich = "DarkViolet", Err = "Red"}
local regnum
local function RangClass(rang) -- bütün ikinci dərəcəli ranqların bağlanması üçün mw-collapsible-content sinfi
return (string.find(Rangs.Osn, "/" .. rang .. "/", 1, true) or (rang == Rangs.Err)) and "" or " mw-collapsible-content"
end
local function RangColor(rang) -- bu funksiya ranqın rəngini geri qaytarır (Rang/color şablonunun eynisidir)
local srang = "/" .. rang .. "/"
return (string.find(Rangs.Ich, srang, 1, true) and RangColors.Ich)
or (string.find(Rangs.Osn, srang, 1, true) and RangColors.Osn)
or (string.find(Rangs.Prom, srang, 1, true) and RangColors.Prom)
or (string.find(Rangs.Bez, srang, 1, true) and RangColors.Bez)
or ((rang == Rangs.Err) and RangColors.Err)
or RangColors.Dop
end
local function NameString(args, last) -- taksonun adını formatlaşdırır
local latlink = string.gsub(args.latin, " *|.*", "", 1)
local latname = string.gsub(args.latin, ".*| *", "", 1)
latname = Taxonomy_latin.latin { args = {latname, rang = args.rang, regnum = regnum}}
local name = (args.name ~= "") and args.name or latname
if last then
return "'''" .. name .. "'''"
elseif (args.monoaut == "") then
return "[[" .. latlink .. "|" .. name .. "]]"
else
local aut = (args.monoaut == "1") and "" or " " .. Taxonomy_latin.author {args = {args.monoaut}}
if args.name == "" then
return "'''" .. name .. "'''" .. aut
else
return "'''" .. name .. "'''" .. " (" .. latname .. aut .. ")"
end
end
end
local function TaxString(args, last) -- növün "Ranq: Takson" təsnifat sətrini formatlaşdırır (TaxString şablonunun eynisidir)
args.rang = mw.ustring.gsub(args.rang, ".", mw.ustring.upper, 1) -- hər ehtimala qarşı birinci hərfi böyük yazılmalıdır
local rang = (args.rang ~= "") and args.rang or Rangs.Err
return "<div class='ts-Taxonomy-rang-row" .. ((last or args.vis == "1") and "" or RangClass(rang)) .. "'>" ..
"<div class='ts-Taxonomy-rang-label' style='color:" .. RangColor(rang) .. "'>" .. rang .. ":</div>" ..
"<div class='ts-Taxonomy-rang-name'>" ..
((args.ext ~= "") and "† " or "") ..
NameString(args, last) ..
(args.ref or "") ..
"</div>" ..
"</div>"
end
local function NoTaxTempl(taxon)
return '[[Şablon:Takson#Taksonomik naviqasiya sistemi|taksonomik şablon]] yoxdur' ..
mw.getCurrentFrame():expandTemplate({title = 'RedTaxLink', args = {taxon}})
end
local function ErrorText(text)
return '<div class="ts-Taxonomy-error">XƏTA: ' .. text .. '</div>\n' ..
((mw.title.getCurrentTitle().namespace == 0) and "[[Kateqoriya:Vikipediya:Taksoşablonsuz biologiya məqalələri]]" or "")
end
local function FormatOutput(text, ok)
local collapse = ok and string.find(text, "mw-collapsible", 1, true)
return '<div ' .. (collapse and 'data-expandtext="daha ətraflı" data-collapsetext="qısa" class="mw-collapsible mw-collapsed" ' or '') .. 'style="font-size:95%; background-color: transparent; border:0;">' .. text .. '</div>'
end
local function getTaxPar(frame, taxon, parName)
return mw.text.trim(frame:expandTemplate({title = taxon, args = {parName}}))
end
function p.TaxRecursion(frame)
local i = 0
local args = {}
local res = ""
local taxon = frame.args["latin"] or ""
regnum = frame.args["regnum"]
regnum = (regnum == "Orqanizmlər") and "" or regnum
local regnumRang = ((regnum == "Bakteriyalar") or (regnum == "Arxeyalar") or (regnum == "Viruslar")) and "Domen" or "Aləm"
if (taxon == "") then
return ErrorText("'''<big>latin</big>''' parametri doldurulmayıb.")
end
local ok, parent
local lastTemplate = mw.title.new("Şablon:" .. taxon)
if lastTemplate and lastTemplate.exists then
ok, parent = pcall(getTaxPar, frame, taxon, "parent")
end
if ok then -- {{{latin}}} şablonu var, oradan götürürük
args = { latin = getTaxPar(frame, taxon, "latin"),
rang = getTaxPar(frame, taxon, "rang"),
ext = getTaxPar(frame, taxon, "ext"),
name = getTaxPar(frame, taxon, "name"),
}
else -- {{{latin}}} şablonu yoxdur, parametrlərdən götürürük
parent = frame.args["parent"] or ""
args = { latin = frame.args["latin"],
rang = frame.args["rang"] or "",
ext = frame.args["Вымер"] or "",
name = frame.args["name"] or "",
}
if (parent == "") then
if ((args.rang == "") or string.find(Rangs.Spec, "/" .. args.rang .. "/", 1, true)) then
res = ErrorText("'''<big>parent</big>''' və '''<big>rang</big>''' parametrlərini doldurmaq lazımdır.")
else
res = ErrorText(NoTaxTempl(taxon) .. ". '''<big>parent</big>''' və '''<big>rang</big>''' parametrlərini doldurun.")
end
return FormatOutput(res .. TaxString(args, "last"), false)
end
end
res = TaxString(args, "last")
local taxlist = {}
while (parent ~= "Null") and (i < 100) do
i = i + 1
taxon = parent
taxlist[taxon] = true
ok, parent = pcall(getTaxPar, frame, taxon, "parent")
if not ok then -- error: no template
res = ErrorText(NoTaxTempl(taxon) .. ", taksonun sistematikasını təsvir etməlidir ''[[" .. taxon .. "]]''.") .. res
return FormatOutput(res, false)
end
if taxlist[parent] then -- error: loop
res = ErrorText("düyün aşkar edilmişdir — [[Şablon:Takson#Taksonomik naviqasiya sistemi|taksonomik şablon]] {{[[Şablon:" .. taxon .. "|" .. taxon .. "]]}} ona tabe olan taksona istinad edir.") .. res
return FormatOutput(res, false)
end
args = { latin = getTaxPar(frame, taxon, "latin"),
rang = getTaxPar(frame, taxon, "rang"),
ext = getTaxPar(frame, taxon, "ext"),
name = getTaxPar(frame, taxon, "name"),
monoaut = getTaxPar(frame, taxon, "monoaut"),
ref = getTaxPar(frame, taxon, "ref"),
vis = getTaxPar(frame, taxon, "vis")
}
args.ref = (args.ref ~= "") and frame:extensionTag {name = "ref", content = args.ref}
if (args.rang == regnumRang) and (args.name ~= regnum) then
res = res .. "[[Kateqoriya:Vikipediya:Kartoçkasında yanlış aləm göstərilən biologiya məqalələri]]"
end
res = TaxString(args) .. res
end
return FormatOutput(res, ok)
end
return p