Модуль:Infobox: различия между версиями
Перейти к навигации
Перейти к поиску
Mansur700 (обсуждение | вклад) (Керла агӀо: «local p = {}; function p.renderLine( frame ) local args = frame:getParent().args; if args[ 'коьртамогӀа' ] and args[ 'коьртамогӀа' ] ~= '' then...») |
Mansur700 (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
local p = {}; | local p = {}; | ||
local yesno = require('Module:Yesno') | |||
if args[ ' | local function _renderLine( frame, args, i ) | ||
local style = ( args[ ' | if args[ 'заголовок' .. i ] and args[ 'заголовок' .. i ] == '-' then | ||
local class = ( args[ ' | return '' | ||
elseif args[ 'заголовок' .. i ] and args[ 'заголовок' .. i ] ~= '' then | |||
local style = ( args[ 'стиль_заголовков' ] or '' ) .. ( args[ 'стиль_заголовка' .. i ] or '' ); | |||
local class = ( args[ 'класс' .. i ] or '' ); | |||
return '\n<tr>\n<th colspan="2"' .. class .. ' style=" | return '\n<tr>\n<th colspan="2" class="infobox-header ' .. class .. '" style="' .. style .. '">' .. | ||
args[ ' | args[ 'заголовок' .. i ] .. | ||
'</th>\n</tr>'; | '</th>\n</tr>'; | ||
end | end | ||
local text = args[ ' | local text = args[ 'текст' .. i ] or ''; | ||
if args[ ' | if args[ 'тептарданные' .. i ] and args[ 'тептарданные' .. i ] ~= '' then | ||
text = frame:expandTemplate{ title = 'Wikidata', args = { | text = frame:expandTemplate{ title = 'Wikidata', args = { | ||
args[ ' | args[ 'тептарданные' .. i ], | ||
text, | text, | ||
from = args[ 'from' ] or '' | from = args[ 'from' ] or '' | ||
Строка 25: | Строка 24: | ||
if text ~= '' then | if text ~= '' then | ||
local label = args[ ' | local label = args[ 'метка' .. i ] or ''; | ||
local class = args[ ' | local class = args[ 'класс' .. i ] or ''; | ||
if class | if string.find(class, 'noplainlist') == nil and string.find(class, 'nofirstlevel') == nil then | ||
class = class .. ' plainlist'; | class = class .. ' plainlist'; | ||
end | end | ||
Строка 35: | Строка 34: | ||
end | end | ||
local style = ( args[ ' | local style = ( args[ 'стиль_текстов' ] or '' ) .. ( args[ 'стиль_текста' ] or '' ) .. ( args[ 'стиль_текста' .. i ] or '' ); | ||
if label == '' then | if label == '' then | ||
style = 'text-align:center;' .. style; | style = 'text-align:center;' .. style; | ||
Строка 44: | Строка 43: | ||
if label ~= '' then | if label ~= '' then | ||
local labelClass = args[ ' | local labelClass = args[ 'класс_меток' ] or ''; | ||
if labelClass | if string.find(labelClass, 'noplainlist') == nil and string.find(labelClass, 'nofirstlevel') == nil then | ||
labelClass = labelClass .. ' plainlist'; | labelClass = labelClass .. ' plainlist'; | ||
end | end | ||
Строка 52: | Строка 51: | ||
end | end | ||
local labelStyle = ( args[ ' | local labelStyle = ( args[ 'стиль_меток' ] or '' ) .. ( args[ 'стиль_метки' .. i ] or '' ); | ||
if labelStyle ~= '' then | if labelStyle ~= '' then | ||
labelStyle = ' style="' .. labelStyle .. '"'; | labelStyle = ' style="' .. labelStyle .. '"'; | ||
Строка 65: | Строка 64: | ||
return ''; | return ''; | ||
end | |||
local function maxNumber ( args ) | |||
local maxNumber = 0 | |||
for argName, _ in pairs(args) do | |||
local argNumber = mw.ustring.match(argName, '^[^0-9]+([0-9]+)$') | |||
if argNumber and tonumber(argNumber) > maxNumber then | |||
maxNumber = tonumber(argNumber) | |||
end | |||
end | |||
return maxNumber | |||
end | |||
function p.renderLine( frame ) | |||
local args = frame:getParent().args; | |||
return _renderLine(frame, args, '') | |||
end | |||
function p.renderLines( frame ) | |||
local args = frame:getParent().args; | |||
local res = '' | |||
local header, text = '', '' | |||
local autoHeaders = yesno(args [ 'автозаголовки' ] or 'false', false) | |||
for i = 1, maxNumber(args) do | |||
if args[ 'заголовок' .. i ] and args[ 'заголовок' .. i ] ~= '' then | |||
if text ~= '' or not autoHeaders then | |||
res = res .. header .. text | |||
end | |||
header, text = _renderLine(frame, args, i), '' | |||
else | |||
text = text .. _renderLine(frame, args, i) | |||
end | |||
end | |||
if text ~= '' or not autoHeaders then | |||
res = res .. header .. text | |||
end | |||
return res | |||
end | end | ||
return p; | return p; |
Текущая версия от 10:05, 18 июня 2020
Внимание! Это один из самых используемых модулей. |
Используется для реализации средней части шаблона {{Карточка}} (ранее — посредством {{Карточка/строка}}).
local p = {};
local yesno = require('Module:Yesno')
local function _renderLine( frame, args, i )
if args[ 'заголовок' .. i ] and args[ 'заголовок' .. i ] == '-' then
return ''
elseif args[ 'заголовок' .. i ] and args[ 'заголовок' .. i ] ~= '' then
local style = ( args[ 'стиль_заголовков' ] or '' ) .. ( args[ 'стиль_заголовка' .. i ] or '' );
local class = ( args[ 'класс' .. i ] or '' );
return '\n<tr>\n<th colspan="2" class="infobox-header ' .. class .. '" style="' .. style .. '">' ..
args[ 'заголовок' .. i ] ..
'</th>\n</tr>';
end
local text = args[ 'текст' .. i ] or '';
if args[ 'тептарданные' .. i ] and args[ 'тептарданные' .. i ] ~= '' then
text = frame:expandTemplate{ title = 'Wikidata', args = {
args[ 'тептарданные' .. i ],
text,
from = args[ 'from' ] or ''
} };
end
if text ~= '' then
local label = args[ 'метка' .. i ] or '';
local class = args[ 'класс' .. i ] or '';
if string.find(class, 'noplainlist') == nil and string.find(class, 'nofirstlevel') == nil then
class = class .. ' plainlist';
end
if class ~= '' then
class = ' class="' .. class .. '"';
end
local style = ( args[ 'стиль_текстов' ] or '' ) .. ( args[ 'стиль_текста' ] or '' ) .. ( args[ 'стиль_текста' .. i ] or '' );
if label == '' then
style = 'text-align:center;' .. style;
end
if style ~= '' then
style = ' style="' .. style .. '"';
end
if label ~= '' then
local labelClass = args[ 'класс_меток' ] or '';
if string.find(labelClass, 'noplainlist') == nil and string.find(labelClass, 'nofirstlevel') == nil then
labelClass = labelClass .. ' plainlist';
end
if labelClass ~= '' then
labelClass = ' class="' .. labelClass .. '"';
end
local labelStyle = ( args[ 'стиль_меток' ] or '' ) .. ( args[ 'стиль_метки' .. i ] or '' );
if labelStyle ~= '' then
labelStyle = ' style="' .. labelStyle .. '"';
end
return '\n<tr>\n<th' .. labelClass .. labelStyle .. '>' .. label .. '</th>' ..
'\n<td' .. class .. style .. '>\n' .. text .. '</td>\n</tr>';
end
return '\n<tr>\n<td colspan="2"' .. class .. style .. '>\n' .. text .. '</td>\n</tr>';
end
return '';
end
local function maxNumber ( args )
local maxNumber = 0
for argName, _ in pairs(args) do
local argNumber = mw.ustring.match(argName, '^[^0-9]+([0-9]+)$')
if argNumber and tonumber(argNumber) > maxNumber then
maxNumber = tonumber(argNumber)
end
end
return maxNumber
end
function p.renderLine( frame )
local args = frame:getParent().args;
return _renderLine(frame, args, '')
end
function p.renderLines( frame )
local args = frame:getParent().args;
local res = ''
local header, text = '', ''
local autoHeaders = yesno(args [ 'автозаголовки' ] or 'false', false)
for i = 1, maxNumber(args) do
if args[ 'заголовок' .. i ] and args[ 'заголовок' .. i ] ~= '' then
if text ~= '' or not autoHeaders then
res = res .. header .. text
end
header, text = _renderLine(frame, args, i), ''
else
text = text .. _renderLine(frame, args, i)
end
end
if text ~= '' or not autoHeaders then
res = res .. header .. text
end
return res
end
return p;