پرش به محتوا

پودمان:PersonInfobox

از ویکی البرز

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

local p = {}

-------------------------------------------------------
-- ARGUMENTS
-------------------------------------------------------

local function normalize(value)
	if not value then
		return nil
	end
	
	value = mw.text.trim(tostring(value))
	
	if value == "" then
		return nil
	end
	
	value = mw.ustring.gsub(value, "[\u200C\u200D]", "")
	
	return value
end


local function getArgs(frame)
	local args = {}

	local parent = frame:getParent()

	if parent then
		for k, v in pairs(parent.args) do
			args[k] = normalize(v)
		end
	end

	for k, v in pairs(frame.args) do
		args[k] = normalize(v)
	end

	return args
end


local function getArg(args, ...)
	for _, key in ipairs({...}) do
		if args[key] then
			return args[key]
		end
	end

	return nil
end


-------------------------------------------------------
-- HTML HELPERS
-------------------------------------------------------

local function addRow(box, label, value)

	if not value then
		return
	end

	local row = box:tag("tr")

	row
		:tag("th")
		:wikitext(label)

	row
		:tag("td")
		:wikitext(value)

end



local function addHeader(box, title)

	local row = box:tag("tr")

	row
		:tag("th")
		:attr("colspan", "2")
		:css({
			["text-align"] = "center",
			["background"] = "#2C5F9E",
			["color"] = "#FFFFFF"
		})
		:wikitext(title)

end



-------------------------------------------------------
-- IMAGE
-------------------------------------------------------

local function addImage(box, args)

	local image = getArg(
		args,
		"image",
		"تصویر",
		"پرونده"
	)

	if not image then
		return
	end


	local row = box:tag("tr")

	row
		:tag("td")
		:attr("colspan", "2")
		:css({
			["text-align"] = "center"
		})
		:wikitext(
			"[[File:" .. image .. "|250px]]"
		)


	local caption = getArg(
		args,
		"caption",
		"توضیح تصویر",
		"زیرنویس"
	)


	if caption then

		local c = box:tag("tr")

		c
			:tag("td")
			:attr("colspan","2")
			:css({
				["text-align"]="center",
				["font-size"]="90%"
			})
			:wikitext(caption)

	end

end



-------------------------------------------------------
-- MAIN
-------------------------------------------------------

local function render(args)

	local box =
		mw.html.create("table")
		:addClass("infobox")
		:addClass("person-infobox")


	---------------------------------------------------
	-- TITLE
	---------------------------------------------------

	local title = getArg(
		args,
		"name",
		"نام"
	)
	or mw.title.getCurrentTitle().text


	box:tag("tr")
		:tag("th")
		:attr("colspan","2")
		:css({
			["background"]="#2C5F9E",
			["color"]="#FFFFFF",
			["text-align"]="center",
			["font-size"]="120%",
			padding="8px"
		})
		:wikitext(title)



	---------------------------------------------------
	-- IMAGE
	---------------------------------------------------

	addImage(box,args)



	---------------------------------------------------
	-- PERSONAL INFO
	---------------------------------------------------

	addHeader(box,"اطلاعات شخصی")


	addRow(
		box,
		"نام کامل",
		getArg(args,
			"full_name",
			"fullname",
			"نام کامل"
		)
	)


	addRow(
		box,
		"زاده",
		getArg(args,
			"birth_date",
			"زادروز",
			"تاریخ تولد"
		)
	)


	addRow(
		box,
		"زادگاه",
		getArg(args,
			"birth_place",
			"زادگاه",
			"محل تولد"
		)
	)


	addRow(
		box,
		"درگذشته",
		getArg(args,
			"death_date",
			"تاریخ درگذشت"
		)
	)


	addRow(
		box,
		"ملیت",
		getArg(args,
			"nationality",
			"ملیت"
		)
	)



	---------------------------------------------------
	-- SPORT INFO (temporary)
	---------------------------------------------------

	addHeader(box,"اطلاعات ورزشی")


	addRow(
		box,
		"ورزش",
		getArg(args,
			"sport",
			"ورزش"
		)
	)


	addRow(
		box,
		"باشگاه",
		getArg(args,
			"club",
			"باشگاه"
		)
	)


	addRow(
		box,
		"تیم",
		getArg(args,
			"team",
			"تیم"
		)
	)



	return tostring(box)

end



-------------------------------------------------------
-- EXPORT
-------------------------------------------------------

function p.main(frame)

	return render(
		getArgs(frame)
	)

end


return p