پودمان:Side box: تفاوت میان نسخه‌ها

از ویکی حقوق
پرش به ناوبری پرش به جستجو
جز (۱ نسخه واردشده)
جز (۱ نسخه واردشده)
 
(یک نسخهٔ میانی ویرایش شده توسط یک کاربر دیگر نشان داده نشد)
خط ۱: خط ۱:
-- This module implements {{side box}}.
local yesno = require('Module:Yesno')
local yesno = require('Module:Yesno')
local p = {}
local p = {}


function p.main(frame)
local function makeData(args)
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 = {}
local data = {}


خط ۳۰: خط ۱۰:
table.insert(data.classes, 'metadata')
table.insert(data.classes, 'metadata')
end
end
if args.position and (args.position:lower() == 'right' or args.position == 'راست') then
if args.position and (args.position:lower() == 'right' or args.position == 'راست') then
table.insert(data.classes, 'mbox-small-right')
table.insert(data.classes, 'side-box-right')
else
else
table.insert(data.classes, 'mbox-small')
table.insert(data.classes, 'side-box-left')
end
if args.collapsible then
table.insert(data.classes, 'mw-collapsible')
if args.collapsible == "collapsed" then
table.insert(data.classes, 'mw-collapsed')
end
data.collapsible = true
end
end
table.insert(data.classes, args.class)
table.insert(data.classes, args.class)
خط ۴۰: خط ۲۹:
if args.image and args.image ~= 'none' then
if args.image and args.image ~= 'none' then
data.image = args.image
data.image = args.image
end
-- we have to check to see if a downstream use has plainlist like
-- Template:Sister_project. also it's the default. wikitext is :(
if args.textclass == 'plainlist' or not args.textclass then
data.textclass = 'plainlist'
data.plainlist_templatestyles = 'فهرست ساده/styles.css'
else
data.textclass = args.textclass
end
end


-- Copy over data that doesn't need adjusting
-- Copy over data that does not need adjusting
local argsToCopy = {
local argsToCopy = {
-- aria qualities
'role',
'labelledby',
-- Styles
-- Styles
'style',
'style',
'textstyle',
'textstyle',
'templatestyles',


-- Above row
-- Above row
خط ۶۶: خط ۶۹:
end
end


function p.renderSidebox(data)
local function renderSidebox(data)
-- Renders the sidebox HTML.
-- Renders the sidebox HTML.


-- Table root
-- Table root
local root = mw.html.create('table')
local root = mw.html.create('div')
root:attr('role', data.role)
:attr('aria-labelledby', data.labelledby)
:addClass('side-box')
for i, class in ipairs(data.classes or {}) do
for i, class in ipairs(data.classes or {}) do
root:addClass(class)
root:addClass(class)
end
end
root:css{border = '1px solid #a2a9b1', ['background-color'] = '#f8f9fa'}
if data.style then
if data.style then
root:cssText(data.style)
root:cssText(data.style)
end
local frame = mw.getCurrentFrame()
if data.plainlist_templatestyles then
root:wikitext(frame:extensionTag{
name = 'templatestyles', args = { src = data.plainlist_templatestyles }
})
end
end


-- The "above" row
-- The "above" row
if data.above then
if data.above then
local aboveCell = root:newline():tag('tr'):tag('td')
local above = root:newline():tag('div')
aboveCell
above:addClass('side-box-abovebelow')
:attr('colspan', data.imageleft and 3 or 2)
:newline()
:addClass('mbox-text')
:wikitext(data.above)
if data.textstyle then
if data.textstyle then
aboveCell:cssText(data.textstyle)
above:cssText(data.textstyle)
end
end
if data.abovestyle then
if data.abovestyle then
aboveCell:cssText(data.abovestyle)
above:cssText(data.abovestyle)
end
end
aboveCell
:newline()
:wikitext(data.above)
end
end


-- The body row
-- The body row
local bodyRow = root:newline():tag('tr'):newline()
local body = root:newline():tag('div')
body:addClass('side-box-flex')
:addClass(data.collapsible and 'mw-collapsible-content')
:newline()
if data.image then
if data.image then
bodyRow:tag('td')
body:tag('div')
:addClass('mbox-image')
:addClass('side-box-image')
:wikitext(data.image)
:wikitext(data.image)
else
bodyRow:tag('td'):css('width', '1px')
end
end
local textCell = bodyRow:newline():tag('td')
local text = body:newline():tag('div')
textCell:addClass('mbox-text plainlist')
text:addClass('side-box-text')
:addClass(data.textclass)
if data.textstyle then
if data.textstyle then
textCell:cssText(data.textstyle)
text:cssText(data.textstyle)
end
end
textCell:wikitext(data.text)
text:wikitext(data.text)
if data.imageleft then
if data.imageright then
bodyRow:newline():tag('td')
body:newline():tag('div')
:addClass('mbox-imageleft')
:addClass('side-box-imageright')
:wikitext(data.imageleft)
:wikitext(data.imageright)
end
end


-- The below row
-- The below row
if data.below then
if data.below then
local belowCell = root:newline():tag('tr'):tag('td')
local below = root:newline():tag('div')
belowCell
below
:attr('colspan', data.imageleft and 3 or 2)
:addClass('side-box-abovebelow')
:addClass('mbox-text')
:wikitext(data.below)
if data.textstyle then
if data.textstyle then
belowCell:cssText(data.textstyle)
below:cssText(data.textstyle)
end
end
belowCell:wikitext(data.below)
end
end


return tostring(root)
root:newline()
local templatestyles = ''
if data.templatestyles then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = data.templatestyles }
}
end
return frame:extensionTag{
name = 'templatestyles', args = { src = 'Module:Side box/styles.css' }
} .. templatestyles .. tostring(root)
end
 
function p._main(args)
local data = makeData(args)
return renderSidebox(data)
end
 
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
end


return p
return p

نسخهٔ کنونی تا ‏۲۷ نوامبر ۲۰۲۴، ساعت ۲۱:۴۵

توضیحات این پودمان می‌تواند در پودمان:Side box/توضیحات قرار گیرد.

local yesno = require('Module:Yesno')
local p = {}

local function 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, 'side-box-right')
	else
		table.insert(data.classes, 'side-box-left')
	end
	
	if args.collapsible then
		table.insert(data.classes, 'mw-collapsible')
		if args.collapsible == "collapsed" then
			table.insert(data.classes, 'mw-collapsed')
		end
		data.collapsible = true
	end

	table.insert(data.classes, args.class)
	
	-- Image
	if args.image and args.image ~= 'none' then
		data.image = args.image
	end
	
	-- we have to check to see if a downstream use has plainlist like
	-- Template:Sister_project. also it's the default. wikitext is :(
	if args.textclass == 'plainlist' or not args.textclass then
		data.textclass = 'plainlist'
		data.plainlist_templatestyles = 'فهرست ساده/styles.css'
	else
		data.textclass = args.textclass
	end

	-- Copy over data that does not need adjusting
	local argsToCopy = {
		-- aria qualities
		'role',
		'labelledby',

		-- Styles
		'style',
		'textstyle',
		'templatestyles',

		-- 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

local function renderSidebox(data)
	-- Renders the sidebox HTML.

	-- Table root
	local root = mw.html.create('div')
	root:attr('role', data.role)
		:attr('aria-labelledby', data.labelledby)
		:addClass('side-box')
	for i, class in ipairs(data.classes or {}) do
		root:addClass(class)
	end
	if data.style then
		root:cssText(data.style)
	end
	
	local frame = mw.getCurrentFrame()
	if data.plainlist_templatestyles then
		root:wikitext(frame:extensionTag{
			name = 'templatestyles', args = { src = data.plainlist_templatestyles }
		})
	end

	-- The "above" row
	if data.above then
		local above = root:newline():tag('div')
		above:addClass('side-box-abovebelow')
			:newline()
			:wikitext(data.above)
		if data.textstyle then
			above:cssText(data.textstyle)
		end
		if data.abovestyle then
			above:cssText(data.abovestyle)
		end
	end

	-- The body row
	local body = root:newline():tag('div')
		body:addClass('side-box-flex')
			:addClass(data.collapsible and 'mw-collapsible-content')
			:newline()
	if data.image then
		body:tag('div')
			:addClass('side-box-image')
			:wikitext(data.image)
	end
	local text = body:newline():tag('div')
	text:addClass('side-box-text')
		:addClass(data.textclass)
	if data.textstyle then
		text:cssText(data.textstyle)
	end
	text:wikitext(data.text)
	if data.imageright then
		body:newline():tag('div')
			:addClass('side-box-imageright')
			:wikitext(data.imageright)
	end

	-- The below row
	if data.below then
		local below = root:newline():tag('div')
		below
			:addClass('side-box-abovebelow')
			:wikitext(data.below)
		if data.textstyle then
			below:cssText(data.textstyle)
		end
	end

	root:newline()
	local templatestyles = ''
	if data.templatestyles then
		templatestyles = frame:extensionTag{
			name = 'templatestyles', args = { src = data.templatestyles }
		}
	end
	return frame:extensionTag{
		name = 'templatestyles', args = { src = 'Module:Side box/styles.css' }
	} .. templatestyles .. tostring(root)
end

function p._main(args)
	local data = makeData(args)
	return renderSidebox(data)
end

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

return p