پودمان:Side box
این پودمان، دستورات {{side box}} را اجرا میکند.
استفاده از نشانهگذاری
راهنما:نشانهگذاری ویکی برای توضیحات الگو، صفحه {{side box}} را ببینید. در این پودمان نمیتوان مستقیما از نشانهگذاری ویکی استفاده کرد. باید نشانهگذاری ویکی را در الگو استفاده کرد.
استفاده از پودمانهای لوآ
برای استفاده از پودمانهای لوآ، نخست باید پودمان را بارگیری کرد.
local mSideBox = require('Module:Side box')
سپس با استفاده از تابع _main میتوان یک جعبه کناری ساخت.
mSideBox._main(args)
متغیر args باید یک جدول دارای استدلال برای تایید پودمان باشد. برای دیگر استدلالها که میتوان آنها را مشخص کرد و تاثیر آنها بر پودمان، توضیحات {{side box}} را ببینید.
-- This module implements {{side box}}.
local yesno = require('Module:Yesno')
local p = {}
function p.main(frame)
local origArgs = frame:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = v:match('%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
function p._main(args)
local data = p.makeData(args)
return p.renderSidebox(data)
end
function p.makeData(args)
local data = {}
-- Main table classes
data.classes = {}
if yesno(args.metadata) ~= false then
table.insert(data.classes, 'metadata')
end
if args.position and (args.position:lower() == 'right' or args.position == 'راست') then
table.insert(data.classes, 'mbox-small-right')
else
table.insert(data.classes, 'mbox-small')
end
table.insert(data.classes, args.class)
-- Image
if args.image and args.image ~= 'none' then
data.image = args.image
end
-- Copy over data that does not need adjusting
local argsToCopy = {
-- Classes
'textclass',
-- Styles
'style',
'textstyle',
-- Above row
'above',
'abovestyle',
-- Body row
'text',
'imageleft',
-- Below row
'below',
}
for i, key in ipairs(argsToCopy) do
data[key] = args[key]
end
return data
end
function p.renderSidebox(data)
-- Renders the sidebox HTML.
-- Table root
local root = mw.html.create('table')
root:attr('role', 'presentation')
for i, class in ipairs(data.classes or {}) do
root:addClass(class)
end
root:css{border = '1px solid #aaa', ['background-color'] = '#f9f9f9', color = '#000'}
if data.style then
root:cssText(data.style)
end
-- The "above" row
if data.above then
local aboveCell = root:newline():tag('tr'):tag('td')
aboveCell
:attr('colspan', data.imageleft and 3 or 2)
:addClass('mbox-text')
if data.textstyle then
aboveCell:cssText(data.textstyle)
end
if data.abovestyle then
aboveCell:cssText(data.abovestyle)
end
aboveCell
:newline()
:wikitext(data.above)
end
-- The body row
local bodyRow = root:newline():tag('tr'):newline()
if data.image then
bodyRow:tag('td')
:addClass('mbox-image')
:wikitext(data.image)
else
bodyRow:tag('td'):css('width', '1px')
end
local textCell = bodyRow:newline():tag('td')
textCell:addClass('mbox-text')
textCell:addClass(data.textclass or 'plainlist')
if data.textstyle then
textCell:cssText(data.textstyle)
end
textCell:wikitext(data.text)
if data.imageleft then
bodyRow:newline():tag('td')
:addClass('mbox-imageleft')
:wikitext(data.imageleft)
end
-- The below row
if data.below then
local belowCell = root:newline():tag('tr'):tag('td')
belowCell
:attr('colspan', data.imageleft and 3 or 2)
:addClass('mbox-text')
if data.textstyle then
belowCell:cssText(data.textstyle)
end
belowCell:wikitext(data.below)
end
root:newline()
return tostring(root)
end
return p