Модуль:Категории качественных
Шаблон предназначен для категоризации Хороших и Избранных статей по тематике. Таблицы соответствий ключей находятся на подстраницах: ФункцииdemoФормирует таблицу с ключами и соответствующими им значениям. Полезно для документаций шаблонов. catsФормирует список категорий по ключам. При указании параметра todolocal p = {}
local getArgs = require('Module:Arguments').getArgs
local NS_CAT = mw.site.namespaces[14].name
local untyped = ': не распределённые по тематике'
local wrong = ' с неверным указанием тематики'
local alphabet = 'по алфавиту'
local no_wikidata = 'без отметки статуса в Викиданных'
local function concat_category_name(prefix, target)
local res = NS_CAT .. ':' .. prefix
if target then
if mw.ustring.len(target) > 0 then
return res .. ' ' .. target
else
return res .. wrong
end
else
return res .. untyped
end
end
local function get_submodule(args)
local submodule_name = args['тип']
if submodule_name == nil then
error('Укажите тип (см. доступные [[Special:PrefixIndex/Module:Категории качественных/|здесь]])')
end
return require('Модуль:Категории качественных/' .. submodule_name)
end
function p.demo(frame)
local args = getArgs(frame)
local tt = require('Module:TableTools')
local submodule = get_submodule(args)
local t = mw.html.create('table'):addClass('standard')
local tr = t:tag('tr')
tr:tag('th'):wikitext('Название параметра')
tr:tag('th'):wikitext('Соответствующая категория')
local prefix = submodule.prefix
function make_row(desc, cat)
tr = t:tag('tr')
tr:tag('td'):wikitext(desc)
tr:tag('td'):wikitext('[[:' .. concat_category_name(prefix, cat) ..']]')
end
for k, v in tt.sortedPairs(submodule.types) do
make_row(k, v)
end
make_row('Неверный параметр', '')
make_row('Без параметров')
return tostring(t)
end
local append = table.insert
local function join(x)
return mw.text.listToText(x, '\n', '\n')
end
function p.cats(frame)
local args = getArgs(frame)
local yesno = require('Module:Yesno')
local submodule = get_submodule(args)
local function cat(v)
local target = v and (submodule.types[mw.getContentLanguage():ucfirst(v)] or '')
local catname = concat_category_name(submodule.prefix, target)
if target == '' then
-- неправильное значение в качестве ключа сортировки для облегчения разбора
local ret = '[[' .. catname .. '|' .. v .. ']]'
if frame:preprocess('{{REVISIONID}}') == '' then
return ret .. '<div class="hatnote" style="color:red"><strong>Предупреждение:</strong> Шаблон использует неизвестный параметр <code>' .. v .. '</code>. Список корректных параметров указан в [[' .. submodule.wrapper .. '|документации]] (это сообщение видно только при предпросмотре страницы).</div>'
else
return ret
end
else
return '[[' .. catname .. ']]'
end
end
local function cat_simple(v)
return '[[' .. concat_category_name(submodule.prefix, v) .. ']]'
end
local ret = {}
append(ret, cat_simple(alphabet))
append(ret, cat(args[1]))
if args[2] then
append(ret, cat(args[2]))
if args[3] then
append(ret, cat(args[3]))
end
end
if args['demo'] or args['демо'] then --для документации
return frame:extensionTag('pre', join(ret))
else
local checkBadge = require('Module:Wikidata/littleutils').checkBadgeImpl
if not checkBadge(submodule.badge) then
append(ret, cat_simple(no_wikidata))
end
return join(ret)
end
end
return p
|