Для документации этого модуля может быть создана страница Модуль:TmplDoc/doc
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='Документация отсутствует'><nil></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(" ", 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