לדלג לתוכן

יחידה:ארגז חול/עלי

מתוך ויקיפדיה, האנציקלופדיה החופשית

ניתן ליצור תיעוד על היחידה הזאת בדף יחידה:ארגז חול/עלי/תיעוד

--------------------------------------------------------------------------------
-- This module implements {{משתמש:עלי/תבנית:הדגמה}}
--------------------------------------------------------------------------------
require('Module:No globals')

-- Box class
local Box = {}

function Box.new(frame, args)
	args = args or {}
	
	local borderColor = args.borderColor or '#A2A9B1'
	local backgroundColor = args.backgroundColor or '#FBFBFB'
	local separatorColor = args.separatorColor or args.borderColor or '#1E90FF'
	local iconSize = args.iconSize or '45px'
	local iconLink = args.iconLink or ''

	local root = mw.html.create('div')
	root
		:addClass('box__container')
		:css('display', 'grid')
		:css('grid-auto-flow', 'column')
		:css('grid-template-rows', 'auto auto')
		:css('grid-auto-columns', 'auto 7.5em')
		:css('background-color', backgroundColor)
		:css('border', '0.063em ' .. borderColor .. ' solid')
		:css('border-radius', '1em 1em 1em 0')
		:css('border-right', '0.625em ' .. borderColor .. ' solid')

	local boxHeader = root:tag('div')
	boxHeader
		:addClass('box__header')
		:css('display', 'flex')
		:css('align-items', 'center')

	if args.icon then
		local boxIcon = boxHeader:tag('div')
		boxIcon
			:addClass('box__icon')
			:css('padding', '0.063em')
			:css('padding-left', '0.313em')
			:wikitext('[[קובץ:' .. args.icon .. '|' .. iconSize .. '|קישור=' .. iconLink .. ']]')
	end

	local boxTitle = boxHeader:tag('div')
	boxTitle
		:addClass('box__title')
		:css('flex', '1')
		:css('padding', '0.625em')
		:css('padding-left', '0.313em')
		:wikitext(args.title)

	if args.description then
		boxHeader
			:css('border-bottom', '0.063em ' .. separatorColor .. ' solid')
		local boxFooter = root:tag('div')
		boxFooter
			:addClass('box__footer')
			:css('font-size', '90%')
			:css('padding', '0 0.625em')
			:wikitext(args.description)
	end
	
	if args.buttons then
		local boxSpacer = root:tag('div')
		boxSpacer
			:addClass('box__spacer')
		
		local boxCorner = root:tag('div')
		boxCorner
			:addClass('box__corner')
			:css('display', 'flex')
			:css('align-items', 'flex-end')
			:css('justify-content', 'center')
			:css('border-color', borderColor)
			:css('border-width', '0.063em 0.188em 0 0')
			:css('border-style', 'solid')
			:css('border-top-right-radius', '1.875em 1.875em')
			:css('border-bottom-right-radius', '0.063em 0.063em')
			:css('text-align', 'center')
			:css('font-size', '90%')
			:css('padding', '0.125em 0.625em')
			:css('white-space', 'no-wrap')
	
		local boxButtons = boxCorner:tag('div')
		boxButtons
			:addClass('box__buttons')
			:wikitext(args.buttons)
	end
	
	return tostring(root)
end

-- Exports
local p = {}

function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame)
    -- translate arguments
	local translatedArgs = {};
	for k,v in pairs(args) do
		if mw.ustring.match(k, '[א-ת]') ~=nil then
			-- title basic details
			local enKey = mw.ustring.gsub( k, 'כותרת', 'title' )
			enKey = mw.ustring.gsub( enKey, 'הסבר', 'description' )
			enKey = mw.ustring.gsub( enKey, 'קישור תמונה', 'iconLink' )
			enKey = mw.ustring.gsub( enKey, 'גודל', 'iconSize' )
			enKey = mw.ustring.gsub( enKey, 'תמונה', 'icon' )
			enKey = mw.ustring.gsub( enKey, 'צבע מפריד', 'separatorColor' )
			enKey = mw.ustring.gsub( enKey, 'צבע רקע', 'backgroundColor' )
			enKey = mw.ustring.gsub( enKey, 'צבע', 'borderColor' )
			enKey = mw.ustring.gsub( enKey, 'כפתורים', 'buttons' )
			enKey = mw.ustring.gsub( enKey, 'מחלקה', 'class' )
			
			translatedArgs[enKey] = v
		else
			translatedArgs[k] = v
		end
	end

	return Box.new(frame, translatedArgs)
end

return p