Модуль:Documentation: различия между версиями
Перейти к навигации
Перейти к поиску
м (1 версия: en:Module:Citation/CS1/Suggestions) |
|||
Строка 1: | Строка 1: | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
local p = {} | local p = {} | ||
− | + | local yesno = require('Module:Yesno') | |
− | local | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | local medal = 'медаль' | |
− | + | local order = 'орден' | |
− | + | local insignia = 'знак отличия' | |
− | + | local badge = 'почётный знак' | |
+ | local badge2 = 'почетный знак' | ||
+ | local title = 'звание' --почётное | ||
+ | local rank = 'звание' --воинское | ||
+ | local prize = 'премия' | ||
+ | local commemorative = 'памятный знак' | ||
+ | local awardTypes = {medal, order, insignia, badge, badge2, title, prize, commemorative} | ||
+ | local exampleTitle = '== Пример использования ==\n' | ||
+ | local namePlaceholder = 'Имя и фамилия' | ||
+ | local textPrefix = 'Шаблон предназначен для обозначения людей' | ||
+ | local orDivisons = ' или подразделений' | ||
+ | local typesTitle = '== Таблица вариантов ==\n' | ||
+ | local _type = 'тип' | ||
+ | local note = 'примечание' | ||
− | + | local function expand(frame, tname, targs) | |
− | return | + | return frame:expandTemplate({title = tname, args = targs}) |
end | end | ||
− | + | local parameters = { | |
+ | ['имя'] = {['ученый'] = 'Имя', ['учёный'] = 'Имя', ['политик'] = 'Имя', ['театральный деятель'] = 'Имя', default = 'имя'}, | ||
+ | ['награды'] = {['ученый'] = 'Награды и премии', ['учёный'] = 'Награды и премии', ['персона'] = 'награды и премии', ['спортсмен'] = 'медали', ['политик'] = 'Награды', ['театральный деятель'] = 'Награды', default = 'награды' }, | ||
+ | ['звание'] = {default = 'звание'} | ||
+ | } | ||
− | local function | + | local function get_param_name(tname, pname) |
− | if | + | if not parameters[pname] then |
− | + | return pname | |
− | |||
− | return | ||
end | end | ||
+ | return parameters[pname][mw.ustring.lower(tname)] or parameters[pname].default or pname | ||
end | end | ||
− | + | local function instead_of_link(link) | |
− | + | return ' Размещается вместо ссылки [[' .. link .. ']]' | |
− | local function | ||
− | |||
− | |||
end | end | ||
− | + | local function in_param(frame, tname, pname) | |
− | + | return ' в частности, в графе ' .. expand(frame, 'para', {[1]=pname}) .. ' шаблона ' .. expand(frame, 'tl', {[1]=tname}) .. '.\n\n' | |
− | local function | ||
− | return | ||
end | end | ||
− | + | function repeat_whitespace(n) | |
− | + | local r = '' | |
− | + | for i = 1, n do | |
− | local | + | r = r .. ' ' |
− | |||
− | |||
− | |||
end | end | ||
− | + | return r | |
− | + | end | |
− | |||
− | return | ||
− | end | ||
− | + | local function render_example(frame, pageName, tname, paramName, paramTarget, example) | |
− | + | local templateResult = expand(frame, tname, {[paramTarget] = example, [paramName] = namePlaceholder}) | |
− | -- | + | local nameLen = mw.ustring.len(paramName) |
− | + | local targetLen = mw.ustring.len(paramTarget) | |
− | + | local maxLen = math.max(nameLen, targetLen) | |
+ | local pre = '<pre>\n{{' .. tname .. '\n|' .. paramName .. repeat_whitespace(3 + maxLen - nameLen) .. '= ' .. namePlaceholder .. '\n|' .. paramTarget .. repeat_whitespace(3 + maxLen - targetLen) .. '= {{' .. pageName .. '}}\n}}</pre>' | ||
+ | return templateResult .. '\n\n' .. pre | ||
+ | end | ||
− | local function | + | local function template_res_and_pre(frame, pageName, tname, paramName, paramTarget) |
− | return | + | return render_example(frame, pageName, tname, paramName, paramTarget, expand(frame, pageName)) |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | local function cat_link(cat) | |
− | + | return '[[:К:' .. cat .. '|' .. cat .. ']]' | |
− | |||
− | |||
− | |||
− | |||
− | function | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | local function format_categories(categories) | |
− | + | local cats = {} | |
− | + | for s in mw.ustring.gmatch(categories, '[^/]+') do | |
− | + | table.insert(cats, cat_link(s)) | |
− | function | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | local | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | if #cats == 0 then | |
− | + | return '' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | local ret = 'Шаблон автоматически добавляет статью в категори' | |
− | + | if #cats > 1 then | |
− | + | ret = ret ..'и' | |
− | + | else | |
− | + | ret = ret .. 'ю' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
+ | ret = ret .. ' ' .. mw.text.listToText(cats) .. '.' | ||
+ | return ret | ||
+ | end | ||
− | + | local function starts_with(st, prefix) | |
− | + | return mw.ustring.sub(st, 1, mw.ustring.len(prefix)) == prefix | |
− | + | end | |
− | + | local function quotate_default(st, quotes) | |
− | + | if (quotes == nil or yesno(quotes)) and not starts_with(st, '«') then | |
− | + | return '«' .. st .. '»' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
+ | return st | ||
+ | end | ||
− | + | local function get_param_num(args, prefix) | |
− | + | local num = 0 | |
− | + | while args[prefix .. tostring(num+1)] ~= nil do | |
− | + | num = num + 1 | |
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | return num | |
− | + | end | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | local function types_table(frame, pageName, args) | |
− | + | local t = mw.html.create('table'):addClass('wide center') | |
− | + | local headers = t:tag('tr') | |
− | + | headers:tag('th'):wikitext('Код шаблона<br />(для копирования)') | |
− | + | headers:tag('th'):wikitext('Шаблоном отображается') | |
− | + | headers:tag('th'):wikitext('Примечание к отображаемому шаблоном') | |
− | + | local varCount = get_param_num(args, _type) | |
− | function | + | local defaultStr = t:tag('tr') |
− | + | defaultStr:tag('td'):addClass('nowrap'):wikitext('{{' .. pageName .. '}}') | |
− | + | defaultStr:tag('td'):wikitext(expand(frame, pageName, {})) | |
− | + | defaultStr:tag('td'):wikitext(args[note .. '0']) | |
− | + | for i = 1, varCount do | |
− | + | local varStr = t:tag('tr') | |
− | + | local istr = tostring(i) | |
− | + | local var = args[_type .. istr] | |
− | + | varStr:tag('td'):addClass('nowrap'):wikitext('{{' .. pageName .. '|тип=' .. var .. '}}') | |
− | + | varStr:tag('td'):wikitext(expand(frame, pageName, {[_type]=var})) | |
− | + | varStr:tag('td'):wikitext(args[note .. istr]) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | return typesTitle .. tostring(t) .. '\n' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | function | + | local function guess_type(pageName) |
− | + | for _, awardType in ipairs(awardTypes) do | |
− | + | if starts_with(mw.ustring.lower(pageName), awardType) then | |
− | + | return awardType | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | return | ||
− | |||
− | |||
end | end | ||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
return nil | return nil | ||
end | end | ||
− | + | local function trim_parentheses(str) | |
− | + | for s in mw.ustring.gmatch(str, '[^%(]+') do | |
− | + | return s:match('^%s*(.-)%s*$') | |
− | |||
− | |||
− | |||
− | function | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
+ | return str | ||
end | end | ||
− | function | + | local function trim_type_and_parentheses(pageName) |
− | + | local autoType = guess_type(pageName) | |
− | + | if autoType ~= nil then | |
− | + | local typeLen = mw.ustring.len(autoType) | |
− | + | pageName = mw.ustring.sub(pageName, typeLen + 2, mw.ustring.len(pageName)) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | local | ||
− | |||
− | |||
− | |||
− | |||
end | end | ||
+ | return trim_parentheses(pageName) | ||
+ | end | ||
− | + | local function get_award_type_text(awardType) | |
− | + | if awardType == order then | |
− | + | return ', награждённых орденом' | |
− | + | elseif awardType == medal then | |
− | + | return ', награждённых медалью' | |
− | + | elseif awardType == insignia then | |
− | + | return ', награждённых знаком отличия' | |
− | + | elseif awardType == badge or awardType == badge2 then | |
− | + | return ', награждённых почётным знаком' | |
− | + | elseif awardType == title then | |
− | + | return ', удостоенных звания' | |
− | + | elseif awardType == prize then | |
− | + | return ' — лауреатов премии' | |
− | + | elseif awardType == commemorative then | |
− | + | return ', награждённых памятным знаком' | |
− | |||
− | |||
− | |||
end | end | ||
− | + | return '' | |
− | |||
− | |||
end | end | ||
− | function p. | + | function p.print_types_table(frame) |
− | + | local mt = mw.html.create('table'):addClass('wikitable') | |
− | + | local headers = mt:tag('tr'):css('text-align', 'center') | |
− | - | + | headers:tag('th'):wikitext('Значение параметра') |
− | + | headers:tag('th'):wikitext('Отображаемый текст') | |
− | + | for _, awardType in ipairs(awardTypes) do | |
− | + | local row = mt:tag('tr') | |
− | + | row:tag('td'):wikitext(expand(frame, 'para', {'тип', awardType})) | |
− | + | row:tag('td'):wikitext('…' .. get_award_type_text(awardType)) | |
− | |||
− | |||
end | end | ||
− | + | return tostring(mt) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | function | + | local function _award_base(frame, args, pageName, tname, paramAward) |
− | + | local res = textPrefix | |
− | + | if yesno(args['подразделения']) then | |
− | + | res = res .. orDivisons | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | local | ||
− | |||
− | |||
− | |||
− | |||
− | if | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | local awardType = args['тип'] or guess_type(pageName) or medal | |
− | + | res = res .. get_award_type_text(awardType) | |
− | if | + | if not yesno(args['без названия']) then |
− | + | local quotes = args['кавычки'] | |
− | + | local titleString = args[1] or args['название'] or trim_type_and_parentheses(pageName) | |
− | + | res = res .. ' ' .. quotate_default(titleString, quotes) | |
end | end | ||
− | + | res = res .. '.' | |
− | + | local link = args[2] or args['ссылка'] or pageName | |
− | + | res = res .. instead_of_link(link) .. ';' | |
+ | local paramAward = get_param_name(tname, 'награды') | ||
+ | res = res .. in_param(frame, tname, paramAward) | ||
− | + | local categories = args['категория'] or args['категории'] | |
− | + | if categories then | |
− | + | res = res .. format_categories(categories) .. '\n' | |
− | local | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | if | ||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | |||
− | |||
− | + | local filename = args['файл'] | |
− | + | if filename then | |
− | + | res = res .. '\nВ качестве изображения используется файл [[:Файл:' .. filename .. '|' .. filename .. ']] [[Файл:' .. filename .. '|x17px|link=|alt=]]\n' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | if get_param_num(args, _type) > 0 then | |
− | + | res = res .. types_table(frame, pageName, args) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | res = res .. exampleTitle | |
− | + | return res | |
− | + | end | |
− | |||
− | |||
− | |||
− | + | function p.award(frame) | |
− | + | if not getArgs then | |
− | + | getArgs = require('Module:Arguments').getArgs | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | local args = getArgs(frame) | |
− | + | local pageName = mw.title.getCurrentTitle().text | |
− | + | local tname = args['шаблон'] or 'Военный деятель' | |
+ | local paramAward = get_param_name(tname, 'награды') | ||
+ | local res = _award_base(frame, args, pageName, tname, paramAward) | ||
+ | local paramName = get_param_name(tname, 'имя') | ||
+ | res = res .. template_res_and_pre(frame, pageName, tname, paramName, paramAward) | ||
+ | res = res .. '<br clear="all" />' | ||
+ | return res | ||
end | end | ||
− | function p. | + | function p.award_demo(frame) |
− | + | if not getArgs then | |
− | + | getArgs = require('Module:Arguments').getArgs | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | local | + | local args = getArgs(frame) |
− | + | local pageName = mw.title.getCurrentTitle().text | |
− | + | local tname = args['шаблон'] or 'Военный деятель' | |
− | + | local paramAward = get_param_name(tname, 'награды') | |
− | + | local res = _award_base(frame, args, pageName, tname, paramAward) | |
− | + | local paramName = get_param_name(tname, 'имя') | |
− | + | local demo = args['демо'] or args['demo'] | |
− | + | res = res .. render_example(frame, pageName, tname, paramName, paramAward, demo) | |
− | + | res = res .. '<br clear="all" />' | |
− | + | return res | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | return | ||
end | end | ||
− | + | function p.rank(frame) | |
− | function p. | + | if not getArgs then |
− | + | getArgs = require('Module:Arguments').getArgs | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | local args = getArgs(frame) | |
− | local | + | local pageName = mw.title.getCurrentTitle().text |
− | + | local rankNameDefault = mw.text.trim(mw.ustring.sub(pageName, (mw.ustring.find(pageName, ',', 1, true) or 0) +1)) | |
− | + | local tname = args['шаблон'] or 'Военный деятель' | |
− | + | local res = textPrefix | |
− | + | local special = yesno(args['специальное']) | |
− | + | res = res .. ', носящих ' | |
− | + | if special then | |
− | + | res = 'специальное ' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | local rankType = args['тип'] or 'звание' | |
− | + | res = res .. rankType .. ' ' | |
− | + | local rankName = args[1] or args['звание'] or rankNameDefault | |
− | + | local quotes = args['кавычки'] | |
− | + | res = res .. quotate_default(rankName, quotes) .. '.' | |
− | + | local link = args[2] or args['ссылка'] or mw.ustring.lower(rankNameDefault) | |
− | + | res = res .. instead_of_link(link) .. ';' | |
− | + | local paramRank = get_param_name(tname, 'звание') | |
− | + | res = res .. in_param(frame, tname, paramRank) | |
− | + | ||
− | + | local categories = args['категория'] or args['категории'] | |
− | + | if categories then | |
− | + | res = res .. format_categories(categories) .. '\n' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | if | ||
− | |||
− | |||
− | |||
end | end | ||
− | |||
− | |||
− | + | if get_param_num(args, _type) > 0 then | |
− | + | res = res .. types_table(frame, pageName, args) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | |||
− | |||
− | |||
− | + | res = res .. exampleTitle | |
− | + | local paramName = get_param_name(tname, 'имя') | |
− | + | res = res .. template_res_and_pre(frame, pageName, tname, paramName, paramRank) | |
− | + | res = res .. '<br clear="all" />' | |
− | + | return res | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | local | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | return | ||
end | end | ||
− | function | + | local function templates_set() |
− | + | local set = {['военный деятель'] = true} | |
− | + | for p, tl in pairs(parameters) do | |
− | + | for t, _ in pairs(tl) do | |
− | + | if t ~= 'default' then | |
− | + | set[t] = true | |
− | + | end | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
end | end | ||
− | return | + | return set |
end | end | ||
− | + | function p.supported_templates(frame) | |
− | + | local res = '' | |
− | + | local set = templates_set() | |
− | + | for tl, _ in pairs(set) do | |
− | function p. | + | res = res .. '* ' .. expand(frame, 'tl', {tl}) .. '\n' |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | return res | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | return | ||
end | end | ||
return p | return p |
Версия от 23:00, 2 мая 2022
Для документации этого модуля может быть создана страница Модуль:Documentation/doc
local p = {}
local yesno = require('Module:Yesno')
local medal = 'медаль'
local order = 'орден'
local insignia = 'знак отличия'
local badge = 'почётный знак'
local badge2 = 'почетный знак'
local title = 'звание' --почётное
local rank = 'звание' --воинское
local prize = 'премия'
local commemorative = 'памятный знак'
local awardTypes = {medal, order, insignia, badge, badge2, title, prize, commemorative}
local exampleTitle = '== Пример использования ==\n'
local namePlaceholder = 'Имя и фамилия'
local textPrefix = 'Шаблон предназначен для обозначения людей'
local orDivisons = ' или подразделений'
local typesTitle = '== Таблица вариантов ==\n'
local _type = 'тип'
local note = 'примечание'
local function expand(frame, tname, targs)
return frame:expandTemplate({title = tname, args = targs})
end
local parameters = {
['имя'] = {['ученый'] = 'Имя', ['учёный'] = 'Имя', ['политик'] = 'Имя', ['театральный деятель'] = 'Имя', default = 'имя'},
['награды'] = {['ученый'] = 'Награды и премии', ['учёный'] = 'Награды и премии', ['персона'] = 'награды и премии', ['спортсмен'] = 'медали', ['политик'] = 'Награды', ['театральный деятель'] = 'Награды', default = 'награды' },
['звание'] = {default = 'звание'}
}
local function get_param_name(tname, pname)
if not parameters[pname] then
return pname
end
return parameters[pname][mw.ustring.lower(tname)] or parameters[pname].default or pname
end
local function instead_of_link(link)
return ' Размещается вместо ссылки [[' .. link .. ']]'
end
local function in_param(frame, tname, pname)
return ' в частности, в графе ' .. expand(frame, 'para', {[1]=pname}) .. ' шаблона ' .. expand(frame, 'tl', {[1]=tname}) .. '.\n\n'
end
function repeat_whitespace(n)
local r = ''
for i = 1, n do
r = r .. ' '
end
return r
end
local function render_example(frame, pageName, tname, paramName, paramTarget, example)
local templateResult = expand(frame, tname, {[paramTarget] = example, [paramName] = namePlaceholder})
local nameLen = mw.ustring.len(paramName)
local targetLen = mw.ustring.len(paramTarget)
local maxLen = math.max(nameLen, targetLen)
local pre = '<pre>\n{{' .. tname .. '\n|' .. paramName .. repeat_whitespace(3 + maxLen - nameLen) .. '= ' .. namePlaceholder .. '\n|' .. paramTarget .. repeat_whitespace(3 + maxLen - targetLen) .. '= {{' .. pageName .. '}}\n}}</pre>'
return templateResult .. '\n\n' .. pre
end
local function template_res_and_pre(frame, pageName, tname, paramName, paramTarget)
return render_example(frame, pageName, tname, paramName, paramTarget, expand(frame, pageName))
end
local function cat_link(cat)
return '[[:К:' .. cat .. '|' .. cat .. ']]'
end
local function format_categories(categories)
local cats = {}
for s in mw.ustring.gmatch(categories, '[^/]+') do
table.insert(cats, cat_link(s))
end
if #cats == 0 then
return ''
end
local ret = 'Шаблон автоматически добавляет статью в категори'
if #cats > 1 then
ret = ret ..'и'
else
ret = ret .. 'ю'
end
ret = ret .. ' ' .. mw.text.listToText(cats) .. '.'
return ret
end
local function starts_with(st, prefix)
return mw.ustring.sub(st, 1, mw.ustring.len(prefix)) == prefix
end
local function quotate_default(st, quotes)
if (quotes == nil or yesno(quotes)) and not starts_with(st, '«') then
return '«' .. st .. '»'
end
return st
end
local function get_param_num(args, prefix)
local num = 0
while args[prefix .. tostring(num+1)] ~= nil do
num = num + 1
end
return num
end
local function types_table(frame, pageName, args)
local t = mw.html.create('table'):addClass('wide center')
local headers = t:tag('tr')
headers:tag('th'):wikitext('Код шаблона<br />(для копирования)')
headers:tag('th'):wikitext('Шаблоном отображается')
headers:tag('th'):wikitext('Примечание к отображаемому шаблоном')
local varCount = get_param_num(args, _type)
local defaultStr = t:tag('tr')
defaultStr:tag('td'):addClass('nowrap'):wikitext('{{' .. pageName .. '}}')
defaultStr:tag('td'):wikitext(expand(frame, pageName, {}))
defaultStr:tag('td'):wikitext(args[note .. '0'])
for i = 1, varCount do
local varStr = t:tag('tr')
local istr = tostring(i)
local var = args[_type .. istr]
varStr:tag('td'):addClass('nowrap'):wikitext('{{' .. pageName .. '|тип=' .. var .. '}}')
varStr:tag('td'):wikitext(expand(frame, pageName, {[_type]=var}))
varStr:tag('td'):wikitext(args[note .. istr])
end
return typesTitle .. tostring(t) .. '\n'
end
local function guess_type(pageName)
for _, awardType in ipairs(awardTypes) do
if starts_with(mw.ustring.lower(pageName), awardType) then
return awardType
end
end
return nil
end
local function trim_parentheses(str)
for s in mw.ustring.gmatch(str, '[^%(]+') do
return s:match('^%s*(.-)%s*$')
end
return str
end
local function trim_type_and_parentheses(pageName)
local autoType = guess_type(pageName)
if autoType ~= nil then
local typeLen = mw.ustring.len(autoType)
pageName = mw.ustring.sub(pageName, typeLen + 2, mw.ustring.len(pageName))
end
return trim_parentheses(pageName)
end
local function get_award_type_text(awardType)
if awardType == order then
return ', награждённых орденом'
elseif awardType == medal then
return ', награждённых медалью'
elseif awardType == insignia then
return ', награждённых знаком отличия'
elseif awardType == badge or awardType == badge2 then
return ', награждённых почётным знаком'
elseif awardType == title then
return ', удостоенных звания'
elseif awardType == prize then
return ' — лауреатов премии'
elseif awardType == commemorative then
return ', награждённых памятным знаком'
end
return ''
end
function p.print_types_table(frame)
local mt = mw.html.create('table'):addClass('wikitable')
local headers = mt:tag('tr'):css('text-align', 'center')
headers:tag('th'):wikitext('Значение параметра')
headers:tag('th'):wikitext('Отображаемый текст')
for _, awardType in ipairs(awardTypes) do
local row = mt:tag('tr')
row:tag('td'):wikitext(expand(frame, 'para', {'тип', awardType}))
row:tag('td'):wikitext('…' .. get_award_type_text(awardType))
end
return tostring(mt)
end
local function _award_base(frame, args, pageName, tname, paramAward)
local res = textPrefix
if yesno(args['подразделения']) then
res = res .. orDivisons
end
local awardType = args['тип'] or guess_type(pageName) or medal
res = res .. get_award_type_text(awardType)
if not yesno(args['без названия']) then
local quotes = args['кавычки']
local titleString = args[1] or args['название'] or trim_type_and_parentheses(pageName)
res = res .. ' ' .. quotate_default(titleString, quotes)
end
res = res .. '.'
local link = args[2] or args['ссылка'] or pageName
res = res .. instead_of_link(link) .. ';'
local paramAward = get_param_name(tname, 'награды')
res = res .. in_param(frame, tname, paramAward)
local categories = args['категория'] or args['категории']
if categories then
res = res .. format_categories(categories) .. '\n'
end
local filename = args['файл']
if filename then
res = res .. '\nВ качестве изображения используется файл [[:Файл:' .. filename .. '|' .. filename .. ']] [[Файл:' .. filename .. '|x17px|link=|alt=]]\n'
end
if get_param_num(args, _type) > 0 then
res = res .. types_table(frame, pageName, args)
end
res = res .. exampleTitle
return res
end
function p.award(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
local args = getArgs(frame)
local pageName = mw.title.getCurrentTitle().text
local tname = args['шаблон'] or 'Военный деятель'
local paramAward = get_param_name(tname, 'награды')
local res = _award_base(frame, args, pageName, tname, paramAward)
local paramName = get_param_name(tname, 'имя')
res = res .. template_res_and_pre(frame, pageName, tname, paramName, paramAward)
res = res .. '<br clear="all" />'
return res
end
function p.award_demo(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
local args = getArgs(frame)
local pageName = mw.title.getCurrentTitle().text
local tname = args['шаблон'] or 'Военный деятель'
local paramAward = get_param_name(tname, 'награды')
local res = _award_base(frame, args, pageName, tname, paramAward)
local paramName = get_param_name(tname, 'имя')
local demo = args['демо'] or args['demo']
res = res .. render_example(frame, pageName, tname, paramName, paramAward, demo)
res = res .. '<br clear="all" />'
return res
end
function p.rank(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
local args = getArgs(frame)
local pageName = mw.title.getCurrentTitle().text
local rankNameDefault = mw.text.trim(mw.ustring.sub(pageName, (mw.ustring.find(pageName, ',', 1, true) or 0) +1))
local tname = args['шаблон'] or 'Военный деятель'
local res = textPrefix
local special = yesno(args['специальное'])
res = res .. ', носящих '
if special then
res = 'специальное '
end
local rankType = args['тип'] or 'звание'
res = res .. rankType .. ' '
local rankName = args[1] or args['звание'] or rankNameDefault
local quotes = args['кавычки']
res = res .. quotate_default(rankName, quotes) .. '.'
local link = args[2] or args['ссылка'] or mw.ustring.lower(rankNameDefault)
res = res .. instead_of_link(link) .. ';'
local paramRank = get_param_name(tname, 'звание')
res = res .. in_param(frame, tname, paramRank)
local categories = args['категория'] or args['категории']
if categories then
res = res .. format_categories(categories) .. '\n'
end
if get_param_num(args, _type) > 0 then
res = res .. types_table(frame, pageName, args)
end
res = res .. exampleTitle
local paramName = get_param_name(tname, 'имя')
res = res .. template_res_and_pre(frame, pageName, tname, paramName, paramRank)
res = res .. '<br clear="all" />'
return res
end
local function templates_set()
local set = {['военный деятель'] = true}
for p, tl in pairs(parameters) do
for t, _ in pairs(tl) do
if t ~= 'default' then
set[t] = true
end
end
end
return set
end
function p.supported_templates(frame)
local res = ''
local set = templates_set()
for tl, _ in pairs(set) do
res = res .. '* ' .. expand(frame, 'tl', {tl}) .. '\n'
end
return res
end
return p