Модуль:HF/Infobox/Tools

Материал из Викимультии — энциклопедии мультипликации
Перейти к навигации Перейти к поиску


Документация
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