Модуль:Категории качественных
Материал из Occultica
Для документации этого модуля может быть создана страница Модуль:Категории качественных/doc
local 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