Дополнительные действия
Этому шаблону не хватает документации. Вы можете помочь проекту, сделав описание шаблона: что он делает, как его использовать, какие параметры он принимает. Это поможет другим использовать его. Для оформления можете воспользоваться {{doc}} или {{doc-inline}}. Не забывайте помещать описание внутрь <noinclude></noinclude>. P.S. Также не забываем про категорию. |
local Infobox = {}
-------------------------------------
-- Библиотеки и глобальные функции --
-------------------------------------
-- обозначает высокочастотный
local HF = require('Module:HF')
-- Анализирует параметры вызова и шаблона, удаляет пробелы и удаляет пробелы.
local getArgs = require('Module:Arguments').getArgs
-- Создает списки
local L = require('Module:List')
-- Языковые функции
local language = mw.language.new('ru')
-- Шаблон Константы
local stripLinkToTarget = '^%[*([^%[|]*)|?'
-- Заголовок любой страницы, вызывающей функцию
local pageTitle = mw.title.getCurrentTitle().text
-----------------------------------------------------------
-- Локальные функции (используются только в этом модуле) --
-----------------------------------------------------------
-- Pfvtyztn {{IsUnnamed}}
local function nameCheck ( target )
local nq = mw.smw.ask{ HF.Link(target:match(stripLinkToTarget)), '?Обслуживание' }
if type(nq) == 'table'
and (nq[1]['Обслуживание'] == 'Название'
or (
type(nq[1]['Обслуживание']) == 'table'
and table.concat(nq[1]['Обслуживание']):match('Название')
)
)
then
return true
else
return nil
end
end
---------------------------------------------------------
-- Открытые функции (вызываются из шаблона или статьи) --
---------------------------------------------------------
function Infobox.titleTools(frame)
local args = getArgs(frame)
local out = {}
if mw.title.getCurrentTitle().isContentPage == true then
table.insert( out, HF.Category('Предметы по алфавиту') )
if args['безымянный'] == 'Да' then
mw.smw.set{ ['Обслуживание'] = 'Название' }
table.insert( out, ("''%s''"):format( pageTitle:match("%s*[^(]*") ) )
else
table.insert( out, pageTitle:match("%s*[^(]*") )
end
mw.smw.set { ['Название'] = pageTitle:gsub(''',"'") }
return table.concat( out ) .. ( args['ref'] or '' )
elseif mw.title.getCurrentTitle().namespace == 10
and not pageTitle:match('/testcases') then
return nil
else
return args['english'] or pageTitle:match("[^(]*")
end
end
-- Связанные предметы
function Infobox.toolsRelated(frame)
local args = getArgs(frame)
local out = {}
local tools = args['связанные предметы'] and mw.text.split( args['связанные предметы'], ',%s*' )
if type(tools) == 'table' then
for _,tool in ipairs( tools ) do
table.insert( out, HF.Link( tool, tool:match('%s*[^(]*')))
end
return table.concat(out, ', ')
end
end
-- Пользователи
function Infobox.toolsUsers(frame)
local args = getArgs(frame)
local out = {}
local types = {
['нет'] = true, ['аниме'] = true, ['манга'] = true,
['роман'] = true, ['игра'] = true, ['фильм'] = true, ['фильм канон'] = true
}
local users = args['пользователи'] and mw.text.split( args['пользователи'], ',%s*' )
if type(users) == 'table' then
for _,user in ipairs( users ) do
if type(user) == 'string' and #user > 1 then
local base = nameCheck ( user )
and ("''%s''"):format( HF.Link (
user:match('[^~]*'),
user:match('[^~]*'):match('%s*[^(]*')
) )
or HF.Link (
user:match('[^~]*'),
user:match('[^~]*'):match('%s*[^(]*')
)
local extra = user:match('~(.*)')
local type = (extra and types[extra:lower()]) and language:ucfirst(extra)
mw.smw.set { ['Пользователи техники'] = user:match('[^~]*') .. ';' .. (type or 'null')}
if extra ~= nil and types[extra:lower()] and extra ~= 'null' then
if extra:lower() == 'фильм канон' then
table.insert( out, base .. ' <sup> (Только в фильме)</sup>' )
else
table.insert( out, base .. (' <sup>(Только в %s)</sup>'):format( language:ucfirst(extra) ) )
end
else
table.insert( out, base )
end
end
end
return L.makeList( 'bulleted' , out )
end
end
-------------------------------------------------------------------
-- Экспортируемые функции (используются в этом и других модулях) --
-------------------------------------------------------------------
-- Нет.
-------------------------------------------------
-- Вывод (отправьте его обратно как угодно) --
-------------------------------------------------
return Infobox