Дополнительные действия
Этому шаблону не хватает документации. Вы можете помочь проекту, сделав описание шаблона: что он делает, как его использовать, какие параметры он принимает. Это поможет другим использовать его. Для оформления можете воспользоваться {{doc}} или {{doc-inline}}. Не забывайте помещать описание внутрь <noinclude></noinclude>. P.S. Также не забываем про категорию. |
-- HF обозначает высокочастотный.
-- Этот модуль дополняет встроенный HF
local HF = mw.InfoboxBuilderHF
----------------------------
-- Библиотеки функций --
----------------------------
-----------------------
-- Библиотеки данных --
-----------------------
-----------------------------------------------------------
-- Локальные функции (используются только в этом модуле) --
-----------------------------------------------------------
----------------------------------------------------------
-- Открытые функции (вызываются из шаблона или статьи) --
----------------------------------------------------------
-- удаляет часть ссылки вики-текста в вызове File: оставляя только имя файла.
function HF.stripFileWrapper(frame)
local args = getArgs(frame)
return HF._stripFileWrapper(args[1])
end
---------------------------------------------------------------
-- Внутренние функции (используются в этом и других модулях) --
---------------------------------------------------------------
-- удаляет пробелы в передней и задней части строки
function HF.trim(s)
if type(s) == 'string' then
return (s:gsub("^%s*(.-)%s*$", '%1'))
else
return false
end
end
-- Создаёт внешнюю ссылку.
function HF.ExternalLink( target, label, plain )
local output = string.format('[%s %s]', target, label)
if plain == true then
output = string.format('<span class="plainlinks">%s</span>', output)
end
return output
end
-- Это создает ссылку на категорию, а также помещает её в эту категорию.
-- `sortkey` и `label` опциональны
-- Если нет заданного ярлыка, он поместит его только в категорию,
-- для чего предназначен HF.Category.
function HF.CategoryLink( category, sortkey, label )
if not HF.isempty( label ) then
return HF.LinkToCategory( category, label ) ..
HF.Category( category, sortkey )
else
return HF.Category( category, sortkey )
end
end
-- Добавляет категорию
-- `sortkey` опционально
function HF.Category( category, sortkey )
if sortkey == nil then sortkey = '' else sortkey = '|' .. sortkey end
return string.format('%s'..'Категория:%s%s]]', '[[', category, sortkey)
end
-- Добавляет ссылку в категорию
function HF.LinkToCategory( category, label )
return string.format('%s'..'Категория:%s|%s]]', '[[:', category,
label or 'Категория:' .. category )
end
-- Добавляет внутреннюю ссылку
-- `label` опционально
function HF.Link( link, text )
if not HF.isempty( text ) then
return string.format('%s'..'%s|%s]]', '[[', link, text)
else
return string.format('%s'..'%s]]', '[[', link)
end
end
-- удаляет часть ссылки вики-текста вызова File: оставляя только имя файла.
function HF._stripFileWrapper (s)
if type(s) == 'string' then
return (s
:gsub("%[*(.*)", '%1') -- ведущие скобки
:gsub("([%a]*)|+.*", '%1') -- аргументы
:gsub("([%a]*)%]*", '%1') -- закрывающие скобки
)
else
return false
end
end
-- Уникальные элементы таблицы
function HF.unique( raw_table )
local hash = {}
local unique_results = {}
for _,v in ipairs( raw_table ) do
if (not hash[v] and v ~= '') then
table.insert( unique_results, mw.text.trim(v) )
hash[v] = true
end
end
return unique_results
end
-- Декалибрует заголовки страниц (см. {{#explode:{{PAGENAME}}|(}} )
function HF.dequalify ( pagetitle )
if type(pagetitle) == 'string' then
return pagetitle:match("[^(]*")
elseif type(pagetitle) == 'table' then
return pagetitle[1]:match("[^(]*")
else
return nil
end
end
-- Класс, предназначенный для использования в качестве набора для быстрой проверки того, принадлежит ли элемент списку или набору
local Set = {} -- таблицы, представляющей класс, которая будет удваиваться как метатабельная для экземпляров.
Set.__index = Set -- неудачные поиски таблиц на экземплярах должны возвращаться к таблице классов, чтобы получить методы
function Set:new(init, o)
local obj = o or {}
setmetatable(obj, self)
obj.value = init
obj.prop_set = {}
for _, val in pairs(init) do
obj.prop_set[val] = true
end
return obj
end
function Set:is_in(key)
return self.prop_set[key] ~= nil
end
HF.Set = Set
-------------------------------------------------
-- Вывод (отправьте его обратно как угодно) --
-------------------------------------------------
return HF