پرش به محتوا

پودمان:WorkInfoBox

از ویکی البرز
نسخهٔ تاریخ ‏۱۳ ژوئیهٔ ۲۰۲۶، ساعت ۲۱:۱۸ توسط Modir (بحث | مشارکت‌ها) (صفحه‌ای تازه حاوی «local p = {} local getArgs = require('Module:Arguments').getArgs local html = mw.html local Fields = require('Module:WorkInfoBox/Data/Fields') local Layouts = require('Module:WorkInfoBox/Data/Layouts') local Labels = require('Module:WorkInfoBox/Data/Labels') local Aliases = require('Module:WorkInfoBox/Data/Aliases') ---------------------------------------------------------- -- Helpers ------------------------------------------------...» ایجاد کرد)
(تفاوت) → نسخهٔ قدیمی‌تر | نمایش نسخهٔ فعلی (تفاوت) | نسخهٔ جدیدتر ← (تفاوت)

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

local p = {}

local getArgs = require('Module:Arguments').getArgs
local html = mw.html

local Fields = require('Module:WorkInfoBox/Data/Fields')
local Layouts = require('Module:WorkInfoBox/Data/Layouts')
local Labels = require('Module:WorkInfoBox/Data/Labels')
local Aliases = require('Module:WorkInfoBox/Data/Aliases')

----------------------------------------------------------
-- Helpers
----------------------------------------------------------

local function norm(value)
	if not value then
		return nil
	end

	value = tostring(value)
	value = mw.text.trim(value)

	if value == '' then
		return nil
	end

	return value
end

local function firstArg(args, field)

	local value = norm(args[field])

	if value then
		return value
	end

	local alias = Aliases[field]

	if alias then
		for _, name in ipairs(alias) do
			value = norm(args[name])
			if value then
				return value
			end
		end
	end

	return nil
end

----------------------------------------------------------
-- Rendering
----------------------------------------------------------

local function addRow(tbl, label, value)

	if not value then
		return
	end

	local row = tbl:tag('tr')

	row:tag('th')
		:addClass('infobox-label')
		:wikitext(label)

	row:tag('td')
		:addClass('infobox-data')
		:wikitext(value)

end

local function render(frame)

	local args = getArgs(frame)

	local kind = firstArg(args, 'type') or 'default'

	local layout = Layouts[kind] or Layouts.default

	local root = html.create('table')
		:addClass('infobox')

	------------------------------------------------------
	-- Temporary
	-- (Header, image and sections will be added later)
	------------------------------------------------------

	for _, section in ipairs(layout) do

		for _, field in ipairs(section.fields) do

			local value = firstArg(args, field)

			if value then

				local info = Fields[field]

				if info then
					addRow(root, info.label, value)
				end

			end

		end

	end

	return tostring(root)

end

----------------------------------------------------------

function p.main(frame)
	return render(frame)
end

return p