Дружба – это Чудо Вики
Дружба – это Чудо Вики
Нет описания правки
м (фикс)
Строка 65: Строка 65:
 
['font-size'] = fontSize
 
['font-size'] = fontSize
 
})
 
})
:wikitext( '[[Файл:'..image..'|'..blockSize..'|link='..pageName..
+
:wikitext( '[[Файл:'..image..'|120px|link='..pageName..
 
']]<br />[['..pageName..'|'..characterName..']]' )
 
']]<br />[['..pageName..'|'..characterName..']]' )
 
if css then
 
if css then

Версия от 21:32, 20 июля 2021

Для документации этого модуля может быть создана страница Модуль:Статья Персонажи/doc

local articleCharacters = {}

function articleCharacters.articleCreate( frame )
    --подготовка
    local args = frame.args
    local library = require( 'Модуль:Библиотека' )
    local parser = library.parser.create({
        baseSettingName = 'standart',
        actions = {
            sequences = 'replace',
            separators = 'replace',
            textHandler = 'replace'
        },
        patterns = {
            seq2 = ' '
        },
        separators = {
            [1] = { ',', '' }
        },
        sequences = {
            ['!'] = '|',
            ['s:[%S]*'] = '',
            ['f:[%S]*'] = '',
            ['c:[%S]*'] = '',
            ['i:[%S]*'] = '',
            ['n'] = ''
        },
        textHandler = function( text, sequences, data )
            local pageAndCharacter = library.string.split( text, '|' )
            local pageName, characterName = pageAndCharacter[1], pageAndCharacter[2]
            if not characterName then
                characterName = pageName
            end
            local image
            if sequences['i:[%S]*'] then
                image = sequences['i:[%S]*']
            else
                image = characterName..' СП.png'
            end
            local blockSize = ''
            if sequences['s:[%S]*'] then
                blockSize = mw.ustring.sub( sequences['s:[%S]*'], 3 )
            else
                blockSize = data.blockSize
            end
            local fontSize = ''
            if sequences['f:[%S]*'] then
                fontSize = mw.ustring.sub( sequences['f:[%S]*'], 3 )
            else
                fontSize = data.fontSize
            end
            local css
            if sequences['c:[%S]*'] then
                css = mw.ustring.sub( sequences['c:[%S]*'], 3 )
            end
            local br = ''
            if sequences['n'] then
                br = '<br />'
            end
            local characterBox = mw.html.create( 'div' )
            characterBox
                :addClass( 'articleCharacters_characterBox' )
                :css({
                    ['width'] = blockSize,
                    ['font-size'] = fontSize
                })
                :wikitext( '[[Файл:'..image..'|120px|link='..pageName..
                    ']]<br />[['..pageName..'|'..characterName..']]' )
            if css then
                characterBox:cssText( css )
            end
            return br..tostring( characterBox )
        end
    })
    local container = mw.html.create( 'div' )
    container:addClass( 'articleCharacters' )
    --функции
    function headerCreate( name, level, anchor )
        local header = mw.html.create( 'div' )
        header:addClass( 'articleCharacters_header'..level )
            :attr( 'id', anchor )
            :wikitext( name )
        return header
    end
    function sectionsCreate( prefix, idPrefix, keyPart, baseParams, rC )
        if not rC then
            rC = 1
        end
        local params = {}
        local key = prefix..'раздел '..keyPart
        if args[key..' ширина боксов'] then
            params.blockSize = args[key..' ширина боксов']
        else
            params.blockSize= baseParams.blockSize
        end
        if args[key..' размер шрифта'] then
            params.fontSize = args[key..' размер шрифта']
        else
            params.fontSize = baseParams.fontSize
        end
        local header = headerCreate( args[key..' название'], rC + 1, idPrefix..'_'..args[key..' ид'] )
        container:node( header )
        if args[key] and args[key] ~= '' then
            local characters = parser:parse( args[key], params )
            container:wikitext( characters )
        end
        local hC = 1
        while args[key..'.'..hC..' название'] do
            sectionsCreate( prefix, idPrefix, keyPart..'.'..hC, params, rC + 1 )
            hC = hC + 1
        end
    end
    --программа
    local mainCharactersHeader = headerCreate( 'Главные персонажи', 1, 'mainCharacters' )
    container:node( mainCharactersHeader )
    container:wikitext('<div style="position:relative; margin:auto; width:500px"><div style="opacity: 0.6">[[Файл:ShineBG.png|500px|link=]]</div><div style="position:absolute; top:245px; left:154px; width:150px">[[Файл:MLP_The_Movie_Twilight_Sparkle_official_artwork.png|200px|link=Сумеречная Искорка]]</div><div style="position:absolute; top:80px; left:120px; width:150px">[[Файл:MLP_The_Movie_Rainbow_Dash_official_artwork.png|250px|link=Радуга Дэш]]</div><div style="position:absolute; top: 220px; left:-21px; width:150px">[[Файл:MLP_The_Movie_Rarity_official_artwork.png|170px|link=Рарити]]</div><div style="position:absolute; top:210px; left: 379px; width:150px">[[Файл:MLP_The_Movie_Applejack_official_artwork_2.png|150px|link=Эпплджек]]</div><div style="position:absolute; top:410px; left:300px; width:150px">[[Файл:MLP_The_Movie_Fluttershy_official_artwork.png|150px|link=Флаттершай]]</div><div style="position:absolute; top:410px; left:68px; width:150px">[[Файл:MLP_The_Movie_Pinkie_Pie_official_artwork.png|150px|link=Пинки Пай]]</div><div style="position:absolute; top: 580px; left: 175px; width:150px">[[Файл:MLP_The_Movie_Spike_official_artwork_2.png|100px|link=Спайк]]</div></div>')
    local supportingCharactersHeader = headerCreate( 'Второстепенные персонажи', 1, 'supportingCharacters' )
    container:node( supportingCharactersHeader )
    local sCC = 1
    local supportingCharactersParams = {
        blockSize = args['второстепенные персонажи ширина боксов'],
        fontSize = args['второстепенные персонажи размер шрифта']
    }
    while args['второстепенные персонажи раздел '..sCC..' название'] do
        sectionsCreate( 'второстепенные персонажи ', 'supportingCharacters',  sCC, supportingCharactersParams )
        sCC = sCC + 1
    end
  --фоновые персонажи
    local bcHeader = headerCreate('Фоновые персонажи', 1, 'backgroundCharacters')
    container:node(bcHeader)
  --создание подразделов
    local bCC = 1
    local backgroundCharactersParams = {
        blockSize = args['фоновые персонажи ширина боксов'],
        fontSize = args['фоновые персонажи размер шрифта']
    }
    while args['фоновые персонажи раздел '..bCC..' название'] do
        sectionsCreate( 'фоновые персонажи ', 'backgroundCharacters', bCC, backgroundCharactersParams )
        bCC = bCC + 1
    end
    return container
end

return articleCharacters