Модуль:Image array
Зовнішній вигляд
Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]
Цей модуль позначений як К:реліз, готовий до загального вжитку (55). Він досягнув стадії готовності й вважається, що вільний від помилок і може використовуватись всюди, де знадобиться. Його можна вживати на допоміжних сторінках та інших сторінках Вікіпедії як можливість для навчання новачків. Аби зменшити навантаження на сервери та некоректний показ сторінок, його можна вдосконалювати в рамцях чернеткового тестування[en], а не з застосуванням спроб і помилок. |
Цей модуль використовується у шаблоні Image array для виводу масиву зображень.
Використання
[ред. код]{{#invoke:Image array|array}}
Документація вище включена з Модуль:Image array/документація. (ред. | історія) Дописувачі можуть експериментувати на підсторінках пісочниці (ред. | різн.) та тести (створити) цього модуля. Будь ласка, додавайте категорії до підсторінки /документація. Підсторінки цієї сторінки. |
-- implements [[template:image array]]
local p = {}
local function isnotempty(s)
return s and s:match( '^%s*(.-)%s*$' ) ~= ''
end
local function renderArrayCell( img, c, a, l, tc, t, w, h)
local alt, link, text, border = '', '', t, ''
if( isnotempty(a) ) then alt = 'alt=' .. a end
if( isnotempty(l) ) then link = 'link=' .. l end
if( isnotempty(tc) and not isnotempty(t)) then text = c end
local cell = mw.html.create('')
if( img ) then
cell:tag('div')
:css('vertical-align', 'middle')
:css('width', w .. 'px')
:css('height', h .. 'px')
:css('margin-left', 'auto')
:css('margin-right', 'auto')
:wikitext(mw.ustring.format('[[Файл:%s|%dx%dpx|%s|%s|%s]]', img, w, h, alt, link, text))
cell:tag('div')
:css('vertical-align', 'middle')
:css('padding', '1px')
:wikitext(c)
end
return tostring(cell)
end
local function imagearray( frame )
local args = frame:getParent().args
local width = tonumber(args['width'] or '60')
local height = tonumber(args['height'] or '70')
local perrow = tonumber(args['perrow'] or '4')
local bw = tonumber(args['border-width'] or '0')
local fs = args['font-size'] or '88%'
local text = args['text'] or ''
local border = ( bw > 0 ) and tostring(bw) .. 'px #aaa solid' or nil
-- find all the nonempty image numbers
local imagenums = {}
local imagecount = 0
for k, v in pairs( args ) do
local i = tonumber(tostring(k):match( '^%s*image([%d]+)%s*$' ) or '0')
if( i > 0 and isnotempty(v) ) then
table.insert( imagenums, i )
imagecount = imagecount + 1
end
end
-- sort the image numbers
table.sort(imagenums)
-- compute the number of rows
local rowcount = math.ceil(imagecount / perrow)
-- start table
root = mw.html.create('table')
root
:css('border-collapse','collapse')
:css('text-align','center')
:css('font-size', fs)
:css('line-height','1.25em')
:css('margin','auto')
:css('width', tostring(width*perrow) .. 'px')
-- loop over the images
for j = 1, rowcount do
local row = root:tag('tr')
row:css('vertical-align', 'top')
for k = 1, perrow do
i = imagenums[(j-1)*perrow + k] or 0
row:tag('td')
:css('width', width .. 'px')
:css('text-align','center')
:css(border and 'border' or '', border or '')
:wikitext(renderArrayCell(
args['image' .. i], args['caption' .. i] or '', args['alt' .. i] or '',
args['link' .. i] or '', args['text'] or '', args['text' .. i] or '',
width, height))
end
end
-- end table
return tostring(root)
end
function p.array( frame )
return imagearray( frame )
end
return p