Модуль:SP7Tags
Для документации этого модуля может быть создана страница Модуль:SP7Tags/doc
local p = {}
-- split "ПБЗ, давление; расход" -> {"ПБЗ","давление","расход"}
local function split_tags(s)
if not s or s == "" then return {} end
-- унифицируем разделители: ; и переносы -> ,
s = mw.ustring.gsub(s, "[;\n\r]+", ",")
local out = {}
for part in mw.ustring.gmatch(s, "([^,]+)") do
part = mw.text.trim(part)
if part ~= "" then
table.insert(out, part)
end
end
return out
end
-- Сохраняет теги (вызывает шаблон ТегСП7 для каждого тега)
function p.store(frame)
local args = frame.args
local num = mw.text.trim(args.num or "")
local tags = args.tags or ""
if num == "" then
return ""
end
local list = split_tags(tags)
if #list == 0 then
return ""
end
local chunks = {}
for _, tag in ipairs(list) do
tag = mw.text.trim(tag)
table.insert(chunks, string.format("{{ТегСП7|num=%s|tag=%s}}",
mw.text.nowiki(num),
mw.text.nowiki(tag)
))
end
-- Выполнить сгенерированные вызовы шаблонов
-- ВАЖНО: соединяем пробелом, чтобы не было абзацев
return frame:preprocess(table.concat(chunks, " "))
end
-- Возвращает список тегов как ссылки вида ?tag=...
function p.links(frame)
local num = mw.text.trim(frame.args.num or "")
local base = frame.args.base or mw.title.getCurrentTitle().prefixedText
if num == "" then return "" end
local cargo = mw.ext.cargo
local rows = cargo.query('sp7_letter_tags', 'tag', {
where = 'num="' .. num .. '"',
orderBy = 'tag'
})
local seen, out = {}, {}
for _, r in ipairs(rows) do
local tag = mw.text.trim(r.tag or "")
if tag ~= "" and not seen[tag] then
seen[tag] = true
local url = base .. "?tag=" .. mw.uri.encode(tag)
table.insert(out, string.format("[[%s|%s]]", url, tag))
end
end
return table.concat(out, ", ")
end
return p