ФЭНДОМ


local modules = {
    --[[
    priority = string, -- Приоритет модуля. Чем меньше число, тем раньше применяется модуль (больше приоритет).
    typesElements = table, -- Массив типов элементов, разрешенных для модуля.
    requiredModules = table(?), -- Массив, содержащий названия модулей, требуемых для работы этого. Требуемые модули должны иметь более высокий приоритет.
    incompatibleModules = table(?), -- Массив, содержащий названия модулей, несовместимых с этим модулем.
    dependences = table(?), -- Массив, содержащий названия модулей, от настроек которых зависит данный модуль.
    applyModyle = function( string, table(?) ), -- Функция, модифицирующая элемент. Принимает текст элемента и таблицу настроек модуля, в зависимости от его типа. Должна возвращать строку и таблицу аттрибутов.
    checkSettings = function(?)( settings ...(?) ) -- Функция, проверяющая настройки модуля. Принимает таблицу настроек и иные аргументы, в зависимости от типа модуля. Возвращает true в случае успеха проверки, либо false и, возможно, текст ошибки, в случае неудачи.
    ]]--
    collapsible = {
        priority = 5000,
        typesElements = {
            'section'
        },
        applyModyle = function( text, settings )
            local attrs = {}
            local writeAttr = function( attrName, setName )
                if not attrName then
                    attrName = setName
                end
                attrs[ 'data-'..attrName ] = settings[ setName ]
            end
            attrs[ 'data-collapsible' ] = 'collapsible'
            writeAttr( 'collapsed' )
            writeAttr( 'open-current', 'openCurrent' )
            writeAttr( 'control-elem', 'controlElement' )
            writeAttr( 'expand-text', 'expandText' )
            writeAttr( 'collapse-text', 'collapseText' )
            writeAttr( 'expand-tooltip', 'expandTooltip' )
            writeAttr( 'collapse-tooltip', 'collapseTooltip' )
            return text, { attrs = attrs }
        end,
        checkSettings = function ( level, settings )
            function check( name, misc, allows )
                local arg = settings[ name ]
                if not arg then
                    return '"'..name..'" должен быть определён'
                end
                if allows then
                    for i, val in ipairs( allows ) do
                        if val == arg then
                            return
                        end
                    end
                    return '"'..name..'" должен быть'..self._library.string.join( allows, 'or' )
                end
            end
            local result = check( 'collapsed', { 'true', 'false' } )
            result = check( 'openCurrent', {'open', 'close'} )
            result = check( 'controlElement', {'header', 'button'} )
            result = check( 'expandText' )
            result = check( 'collapseText' )
            result = check( 'expandTooltip' )
            result = check( 'collapseTooltip' )
            if result then
                return false, result
            end
            return true
        end
    },
    menu = {
        priority = 6000,
        typesElements = {
            'section'
        },
        dependences = {
            'collapsible'
        },
        applyModyle = function( text, settings )
            local content = settings.content
            local separator = settings.separator
            local wrapper = mw.html.create( 'div' )
            wrapper:addClass( 'navbox_menu' )
            if settings._dependences and settings._dependences.collapsible.controlElement == 'header' then
                wrapper:addClass( 'navbox_noClickableArea' )
            end
            if not content then
                if not self._modulesData.menu.nsName then
                    local nsName = mw.getCurrentFrame():getParent():getTitle()
                    self._modulesData.menu.name = self._library.string.split(nsName, ':', false, function( str, pos )
                        if pos[ 4 ] == 0 then
                            return true
                        end
                    end)[ 2 ]
                    self._modulesData.menu.nsName = nsName
                    self._modulesData.menu.site = mw.site.server
                end
                local nsName = self._modulesData.menu.nsName
                local name = self._modulesData.menu.name
                local site = self._modulesData.menu.site
                content = {
                    [1] = '<span title="Просмотр шаблона">[['..nsName..'|П]]</span>',
                    [2] = '<span title="Обсуждение шаблона">[[Template talk:'..name..'|О]]</span>',
                    [3] = '<span class="plainlinks" title="Редактирование шаблона">['..site..'/wiki/'..nsName..'?action=edit Р]</span>'
                }
                if not separator then
                    separator = '·'
                end
            end
            if type( content ) == 'string' then
                wrapper:wikitext( content )
            else
                wrapper:wikitext( self._library.string.join( content, separator ) )
            end
            return text..tostring( wrapper )
        end,
        checkSettings = function ( level, settings )
            if settings.content and type( settings.content ) == 'table'and not settings.separator then
                return false, '"serparator" должен быть определён'
            end
            return true
        end
    }
}
 
return modules
Материалы сообщества доступны в соответствии с условиями лицензии CC-BY-SA , если не указано иное.