ФЭНДОМ


local library = require( 'Модуль:Библиотека' )
 
local check = function( name, set, allows )
    local arg = set[ 1 ][ name ]
    --на наличие
    if not arg then
        if set[ 2 ] then
            return
        else
            error( set[ 3 ]..': "'..name..'" должен быть определён' )
        end
    end
    --на тип
    if type(arg) ~= 'string' then
        error( set[ 3 ]..': "'..name..'" должен быть строкой' )
    end
    --на значение
    if allows then
        for i, val in ipairs( allows ) do
            if val == arg then
                return
            end
        end
        error( set[ 3 ]..': "'..name..'" должен быть'..library.string.join( allows, 'or' ) )
    end
end
 
local modules = {}
--сворачивание
modules.collapsible = {}
modules.collapsible.standartSettings = {
    collapsible = 'true',
    collapsed = 'true',
    openCurrent = 'close',
    controlElement = 'header',
    expandText = 'Показать',
    collapseText = 'Скрыть',
    expandTooltip = 'Нажмите чтобы развернуть секцию',
    collapseTooltip = 'Нажмите чтобы свернуть секцию'
}
modules.collapsible.run = function( allSettings, default )
    --проверка групп настроек
    if (default and type(default) ~= 'table' and default ~= true) or (not allSettings or type(allSettings) ~= 'table')
    or (not allSettings.collapsible or type(allSettings.collapsible) ~= 'table') then
        error( 'неподходящие аргументы для "collapsibleModule"' )
    end
    --уточнение default
    if default == true then
        default = modules.collapsible.standartSettings
    end
    --проверка отдельных настроек 
    local tfA = { 'true', 'false' }
    local set = { allSettings.collapsible, true, 'collapsibleModule' }
    check( 'collapsible', set, tfA)
    check( 'collapsed', set, tfA )
    check( 'openCurrent', set, {'open', 'close'} )
    check( 'controlElement', set, {'header', 'button'} )
    check( 'expandText', set )
    check( 'collapseText', set )
    check( 'expandTooltip', set )
    check( 'collapseTooltip', set )
    if default then
        local dSet = { default, false, 'collapsibleModule' }
        check( 'collapsible', dSet, tfA )
        check( 'collapsed', dSet, tfA )
        check( 'openCurrent', dSet, {'open', 'close'} )
        check( 'controlElement', dSet, {'header', 'button'} )
        check( 'expandText', dSet )
        check( 'collapseText', dSet )
        check( 'expandTooltip', dSet )
        check( 'collapseTooltip', dSet )
    end
    --запись настроек
    local attrs = {}
    local writeSetting = function( setName, attrName )
        local settings = allSettings.collapsible
        if not attrName then
            attrName = setName
        end
        if settings[ setName ] then
            attrs[ 'data-'..attrName ] = settings[ setName ]
        elseif default then
            attrs[ 'data-'..attrName ] = default[ setName ]
        end
    end
    writeSetting( 'collapsible' )
    writeSetting( 'collapsed' )
    writeSetting( 'openCurrent', 'open-current' )
    writeSetting( 'controlElement', 'control-elem' )
    writeSetting( 'expandText', 'expand-text' )
    writeSetting( 'collapseText', 'collapse-text' )
    writeSetting( 'expandTooltip', 'expand-tooltip' )
    writeSetting( 'collapseTooltip', 'collapse-tooltip' )
    allSettings.attrs = library.table.mergeTables( allSettings.attrs, attrs )
end
--меню
modules.menu = {}
modules.menu.standartSettings = {
    status = 'false',
    text = 'standart',
    separator = '·'
}
modules.menu.run = function( allSettings, default, sectionData )
    --проверка групп настроек
    if not default or (type(default) ~= 'table' and default ~= true) 
    or (not allSettings or type(allSettings) ~= 'table') or (not allSettings.menu or type(allSettings.menu) ~= 'table')
    or (not sectionData or type(sectionData) ~= 'table') then
        error( 'неподходящие аргументы для "menuModule"' )
    end
    --проверка отдельных настроек 
    check( 'status', { default, false, 'collapsibleModule' }, { 'true', 'false', 'allRoot', 'allRoot' } )
    --
    local defSetting = function( argName, tVal, fVal, aS )
        if not aS then
            aS = allSettings.menu
        end
        if tVal and fVal then
            if (default[ argName ] == tVal and aS[ argName ] ~= fVal) or aS[ argName ] == tVal then
                return true
            end
        else
            if aS[ argName ] then
                return aS[ argName ]
            else
                return default[ argName ]
            end
        end
    end
    --проверка на наличие меню
    local content = defSetting( 'text' )
    if not content then
        return sectionData.headerText
    end
    --проверка подходит ли секция
    local menuStatus = defSetting( 'status' )
    if menuStatus == 'false' or (menuStatus == 'allRoot' and not sectionData.root)
    or (menuStatus == 'firstRoot' and  (not sectionData.root or sectionData.number ~= 1)) then
        return sectionData.headerText
    end
    --определение названия шаблона
    local nsName = mw.getCurrentFrame():getParent():getTitle()
    local name = library.string.split(nsName, ':', false, function( str, pos )
        if pos[ 4 ] == 0 then
            return true
        end
    end)[ 2 ]
    --предустановленные меню
    local standartMenus = {
        standart = {
            [ 1 ] = '<span title="Просмотр шаблона">[['..nsName..'|П]]</span>',
            [ 2 ] = '<span title="Обсуждение шаблона">[[Template talk:'..name..'|О]]</span>',
            [ 3 ] = '<span class="plainlinks" title="Редактирование шаблона">[http://ru.siegenax.wikia.com/wiki/'..nsName..'?action=edit Р]</span>',
            separator = '·'
        }
    }
    --обертка для меню
    local wrapper = mw.html.create( 'div' )
    wrapper:addClass( 'navbox_menu' )
    --метка для сворачивающего скрипта
    if allSettings.collapsible then
        local collapsible = defSetting( 'collapsible', 'true', 'false', allSettings.collapsible )
        local controlElement = defSetting( 'controlElement', 'header', 'button', allSettings.collapsible )
        if collapsible and controlElement then
            wrapper:addClass( 'navbox_noClickableArea' )
        end
    end
    --если меню в виде строки
    if type( content ) == 'string' and not standartMenus[ content ] then
        wrapper:wikitext( content )
        return sectionData.headerText..tostring( wrapper )
    end
    --если меню в виде таблицы либо из стандартного списка
    local menuTable
    if type( content ) == 'table' then
        menuTable = content
    else
        menuTable = standartMenus[ content ]
    end
    --определение сепаратора
    local separator = defSetting( 'separator' )
    if not separator then
        separator = menuTable.separator
    end
    --
    wrapper:wikitext( library.string.join( menuTable, separator ) )
    return sectionData.headerText..tostring( wrapper )
end
 
return modules

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.

Также на ФЭНДОМЕ

Случайная вики