ФЭНДОМ


local p = {}
p.colors = {
    brackets_f = '#4e4e4e',
    brackets_b = '#ffffa9',
 
    param_f = '#056472',
    param_b = nil,
 
    vline_f = '#4e4e4e',
    vline_b = '#ffffa9',
 
    doc_f = '#d86411',
    doc_b = nil,
 
    line_even_color = nil,
    line_odd_color = '#d1e0ff',
 
    border = '1px solid #444'
}
p.cfg = {
    noArg = "<acronym style='border: none;' title='Документация отсутствует'>&lt;nil&gt;</acronym>"
}
 
local function trim(t) return string.gsub(t, "^%s*(.-)%s*$", "%1"):sub(1, -1) end
 
local function getLine(text, i)
    line = mw.html.create('div'):css({padding = '0 10px', ['white-space'] = 'nowrap'})
    if i % 2 == 0 and p.colors.line_even_color ~= nil then 
        line:css('background', p.colors.line_even_color)
    elseif i % 2 == 1 and p.colors.line_odd_color ~= nil then 
        line:css('background', p.colors.line_odd_color) 
    end
    line:addClass('hl'):wikitext(text)
    return tostring(line)
end
 
local function getBrackets()
    l = mw.html.create('span'):wikitext(mw.text.nowiki('{{'))
    r = mw.html.create('span'):wikitext(mw.text.nowiki('}}'))
    if p.colors.brackets_b ~= nil then 
        l:css('background', p.colors.brackets_b) 
        r:css('background', p.colors.brackets_b) 
    end
    if p.colors.brackets_f ~= nil then 
        l:css('color', p.colors.brackets_f)
        r:css('color', p.colors.brackets_f) 
    end
    r:addClass('b')
    l:addClass('b')
    return tostring(l), tostring(r)
end
 
local function getVLine()
    l = mw.html.create('span'):addClass('vl'):wikitext('|')
    if p.colors.vline_f ~= nil then l:css('color', p.colors.vline_f) end
    if p.colors.vline_b ~= nil then l:css('background', p.colors.vline_b) end
    return tostring(l)
end
 
local function getDoc(text)
    if text == nil or trim(text) == '' then
        text = p.cfg.noArg
    end
    doc = mw.html.create('span'):addClass('doc'):wikitext(text)
    if p.colors.doc_b ~= nil then doc:css('background', p.colors.doc_b) end
    if p.colors.doc_f ~= nil then doc:css('color', p.colors.doc_f) end
    return tostring(doc)
end
 
local function getKeyArgHtml(key, doc) 
    key = mw.html.create('span'):addClass('key'):wikitext(mw.text.nowiki(key))
    if p.colors.param_b ~= nil then key:css('background', p.colors.param_b) end
    if p.colors.param_f ~= nil then key:css('color', p.colors.param_f) end
    doc = getDoc(doc)
    return tostring(key), doc
end
 
 
function p.pair(frame)
    local name = frame.args['name']
    local doc = frame.args['doc']
 
    name, doc = getKeyArgHtml(name, doc)
    return name .. " = " .. doc
end
 
function p.main(frame)
    local tmplName = frame.args[1] or p.cfg.noArg
    local args, kwargs = {}, {}
    for k, v in pairs(frame.args) do
        if type(k) == "number" then
            table.insert(args, v)
        else
            kwargs[k] = v
        end
    end
    table.remove(args, 1)
    local html = ""
    local vline = getVLine()
 
    for k, doc in ipairs(args) do
        doc = doc or p.cfg.noDoc
        table.insert(lines, vline .. getDoc(doc))
    end
 
    local kwLen = 0
    local kwNew = {}
    local lines = {}
 
    for k, doc in pairs(kwargs) do
        doc = doc or p.cfg.noDoc
        length = #k
        if kwLen < length then kwLen = length end
 
        k, doc = getKeyArgHtml(k, doc)
        table.insert(kwNew, {k, length, doc})
    end
 
    for k, v in ipairs(kwNew) do
        table.insert(lines, vline .. v[1] .. string.rep("&nbsp;", kwLen-v[2]) .. " = " .. v[3])
    end
 
    lb, rb = getBrackets()
    table.insert(lines, 1, lb .. mw.text.nowiki(tmplName))
    table.insert(lines, rb)
    for k, v in ipairs(lines) do
        lines[k] = getLine(lines[k], k)
    end
 
    w = mw.html.create('div'):wikitext(table.concat(lines, ''))
    w:css({['font-family'] = 'monospace', ['overflow-y'] = 'auto'}):addClass('tmpl-doc')
    if p.colors.border ~= nil then w:css('border', p.colors.border) end
    return tostring(w)
end
 
return p

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


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

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