پودمان: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