Модуль:Taxonomy/classification: различия между версиями
Перейти к навигации
Перейти к поиску
[отпатрулированная версия] | [отпатрулированная версия] |
Содержимое удалено Содержимое добавлено
Нет описания правки |
VladXe (обсуждение | вклад) наддомен в промежуточные ранги |
||
Строка 4: | Строка 4: | ||
local Rangs = { |
local Rangs = { |
||
Osn = "/Домен/Реалм/Царство/Тип/Отдел/Класс/Отряд/Порядок/Семейство/Род/Вид/Ихнород/Ихновид/", |
Osn = "/Домен/Реалм/Царство/Тип/Отдел/Класс/Отряд/Порядок/Семейство/Род/Вид/Ихнород/Ихновид/", |
||
Prom = "/Субреалм/Подцарство/Надтип/Надотдел/Подтип/Подотдел/Инфратип/Надкласс/Подкласс/Инфракласс/Надотряд/Надпорядок/Подотряд/Подпорядок/Инфраотряд/Надсемейство/Подсемейство/Надтриба/Триба/Подтриба/Раздел/Подраздел/Подрод/Надсекция/Секция/Подсекция/Ряд/Подряд/Комплекс видов/Подвид/Вариетет/Разновидность/Подразновидность/Форма/Подформа/", |
Prom = "/Наддомен/Субреалм/Подцарство/Надтип/Надотдел/Подтип/Подотдел/Инфратип/Надкласс/Подкласс/Инфракласс/Надотряд/Надпорядок/Подотряд/Подпорядок/Инфраотряд/Надсемейство/Подсемейство/Надтриба/Триба/Подтриба/Раздел/Подраздел/Подрод/Надсекция/Секция/Подсекция/Ряд/Подряд/Комплекс видов/Подвид/Вариетет/Разновидность/Подразновидность/Форма/Подформа/", |
||
Bez = "/Группа/Клада/Без ранга/", |
Bez = "/Группа/Клада/Без ранга/", |
||
Ich = "/Ихнород/Ихновид/", |
Ich = "/Ихнород/Ихновид/", |
Версия от 16:46, 6 января 2020
Вспомогательный модуль для шаблона {{Таксон}}. Создаёт секцию карточки «Научная классификация».
См. также
local p = {}
local Taxonomy_latin = require("Module:Taxonomy/latin")
local Rangs = {
Osn = "/Домен/Реалм/Царство/Тип/Отдел/Класс/Отряд/Порядок/Семейство/Род/Вид/Ихнород/Ихновид/",
Prom = "/Наддомен/Субреалм/Подцарство/Надтип/Надотдел/Подтип/Подотдел/Инфратип/Надкласс/Подкласс/Инфракласс/Надотряд/Надпорядок/Подотряд/Подпорядок/Инфраотряд/Надсемейство/Подсемейство/Надтриба/Триба/Подтриба/Раздел/Подраздел/Подрод/Надсекция/Секция/Подсекция/Ряд/Подряд/Комплекс видов/Подвид/Вариетет/Разновидность/Подразновидность/Форма/Подформа/",
Bez = "/Группа/Клада/Без ранга/",
Ich = "/Ихнород/Ихновид/",
Err = "'''???'''"
}
local RangColors = {Osn = "inherit", Prom = "#007878", Dop = "DarkRed", Bez = "#6F6F00", Ich = "DarkViolet", Err = "Red"}
local function RangClass(rang)
return string.find(Rangs.Osn, "/" .. rang .. "/", 1, true) and "" or "class=NavContent"
end
local function RangString(rang) -- эта функция раскрашивает ранги
rang = (rang ~= "") and rang or Rangs.Err
local srang = "/" .. rang .. "/"
local color = (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
return '<span style="color:' .. color .. ';">' .. rang .. '</span>'
end
local function NameString(args)
local latlink = string.gsub(args.latin, "|.*", "")
local latname = "''" .. string.gsub(latlink, " %(.*", "") .. "''"
local name = (args.name ~= "") and args.name or latname
if (args.monoaut == "") then
return "[[" .. latlink .. "|" .. name .. "]]"
else
local aut = ((args.monoaut == "1") and "")
or ((args.name == "") and " " .. Taxonomy_latin.author {args = {args.monoaut}})
or " (" .. latname .. " " .. Taxonomy_latin.author {args = {args.monoaut}} .. ")"
return "'''" .. name .. "'''" .. aut
end
end
local function TaxString(args, last)
args.rang = mw.ustring.gsub(args.rang, ".", mw.ustring.upper, 1) -- на всякий случай
return "<div " ..
(last and "" or RangClass(args.rang)) ..
"><table width=100% cellpadding=0 cellspacing=0><tr><td width=40% align=right valign=top>" ..
RangString(args.rang) ..
": </td><td width=60% align=left>" ..
((args.ext ~= "") and "† " or "") ..
NameString { name = args.name,
latin = args.latin,
monoaut = args.monoaut
} ..
(args.ref or "") ..
"</td></tr></table></div>"
end
local function ErrorText(s)
return '<div style="background-color:Gainsboro;font-size:85%;color:Dimgray">ОШИБКА: ' .. s .. '</div>\n' ..
((mw.title.getCurrentTitle().namespace == 0) and "[[Категория:Википедия:Биологические статьи без таксошаблона]]" or "")
end
function p.TaxRecursion(frame)
local i = 0
local args = {}
local res = ""
local taxon = frame.args["latin"]
if not taxon or (taxon == "") then
return ErrorText("не заполнен параметр '''<big>latin</big>'''.")
end
local ok, parent = pcall(frame.expandTemplate, frame, {title = taxon, args = {"parent"}})
if ok then -- есть шаблон {{{latin}}}, берём оттуда
args = { latin = frame:expandTemplate {title = taxon, args = {"latin"}},
rang = frame:expandTemplate {title = taxon, args = {"rang"}},
ext = frame:expandTemplate {title = taxon, args = {"ext"}},
name = frame:expandTemplate {title = taxon, args = {"name"}},
monoaut = "1"
}
else -- нет шаблона {{{latin}}}, берём из параметров
parent = frame.args["parent"] or ""
args = { latin = frame.args["latin"],
rang = frame.args["rang"] or "",
ext = frame.args["Вымер"] or "",
name = frame.args["name"] or "",
monoaut = "1"
}
if (parent == "") then
return ErrorText("нет [[Шаблон:Таксон#Система таксономической навигации|таксономического шаблона]] {{[[Шаблон:" .. taxon .. "|" .. taxon .. "]]}}. Заполните параметры '''<big>parent</big>''' и '''<big>rang</big>'''.")
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(frame.expandTemplate, frame, {title = taxon, args = {"parent"}})
if not ok then -- error: no template
res = ErrorText("нет [[Шаблон:Таксон#Система таксономической навигации|таксономического шаблона]] {{[[Шаблон:" .. taxon .. "|" .. taxon .. "]]}}, который должен описывать систематическое положение таксона ''[[" .. taxon .. "]]''.") .. res
break
end
if taxlist[parent] then -- error: loop
res = ErrorText("обнаружена петля — [[Шаблон:Таксон#Система таксономической навигации|таксономический шаблон]] {{[[Шаблон:" .. taxon .. "|" .. taxon .. "]]}} ссылается на свой подчинённый таксон.") .. res
ok = false
break
end
args = { latin = frame:expandTemplate {title = taxon, args = {"latin"}},
rang = frame:expandTemplate {title = taxon, args = {"rang"}},
ext = frame:expandTemplate {title = taxon, args = {"ext"}},
name = frame:expandTemplate {title = taxon, args = {"name"}},
monoaut = frame:expandTemplate {title = taxon, args = {"monoaut"}},
ref = frame:expandTemplate {title = taxon, args = {"ref"}},
}
args.ref = (args.ref ~= "") and frame:extensionTag {name = "ref", content = args.ref}
res = TaxString(args) .. res
end
return '<div class="NavFrame' ..
(ok and ' collapsed' or '') ..
'" style="background-color: transparent; border:0;">' ..
(ok and string.find(res, "NavContent", 1, true) and '<div class="NavHead nomobile" style="background-color: transparent; border:0;"><small style="display:block; margin-bottom:-15px;">промежуточные ранги</small></div>' or "") ..
res ..
"</div>"
end
return p