مسابقه دانش‌دخت
اسلامیکال از تاریخ ۱۵ دی تا ۲۰ بهمن، میزبان یک همایه با موضوع زنان است. شما می‌توانید در مسابقه مقاله‌نویسی دانش‌دخت، شرکت کنید و با نگارش مقاله، از جوایز آن بهره‌مند باشید. اگر به موضوعات مربوط با زنان علاقه‌مندید، این فرصت را از دست ندهید. فهرستی از مقالات پیشنهادی جهت ایجاد یا ویرایش در اینجا وجود دارد.

پودمان:Category see also

از اسلامیکال
نسخهٔ تاریخ ‏۲۰ ژانویهٔ ۲۰۲۳، ساعت ۰۵:۲۴ توسط Aboammar (بحث | مشارکت‌ها) (ساخت الگو)
(تفاوت) → نسخهٔ قدیمی‌تر | نمایش نسخهٔ فعلی (تفاوت) | نسخهٔ جدیدتر ← (تفاوت)
پرش به ناوبری پرش به جستجو

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

-- This module implements {{Category see also}}

local mHatnote = require('Module:Hatnote')

local p = {}

local function makeWikitextError(msg)
	return string.format(
		'<strong class="error">خطا: %s ([[الگو:رده وابسته]])</strong>',
		msg
	)
end

-- Gets the length of the sequence seq. Usually this should be done with the #
-- operator, but we need to work with tables that get their values through an
-- __index metamethod.
local function getSequenceLength(seq)
	local length = 0
	for i in ipairs(seq) do
		length = i
	end
	return length
end

-- Given a table of options, returns a function that formats categories for
-- those options.
--
-- Options:
-- project - a project code such as "fr" (for the French Wikipedia)
-- showPrefix - a boolean value for whether to show the "Category:" prefix
--              (and the project prefix if specified)
--
-- This is implemented as a function generator rather than a simple function
-- so that we can just process the options once, instead of every time we
-- generate a category.
local function newCategoryLinker(options)
	local formatString
	if options.project then
		if options.showPrefix then
			formatString = '[[:' .. options.project .. ':رده:%s]]'
		else
			formatString = '[[:' .. options.project .. ':رده:%s|%s]]'
		end
	else
		if options.showPrefix then
			formatString = '[[:رده:%s]]'
		else
			formatString = '[[:رده:%s|%s]]'
		end
	end
	return function (category)
		local title = mw.title.new(category)
		local pageName, display
		if not title then
			-- category is not a valid title, usually because of invalid
			-- characters like < or [. Raise an error and suppress the stack
			-- level information so that we can catch it and format the error
			-- message as wikitext.
			error(string.format(
				"نام رده «%s» نامعتبر است",
				category
			), 0)
		elseif title.namespace == 14 then -- Category namespace
			pageName = title.text
			display = title.text
		else
			pageName = title.prefixedText
			display = category
		end
		-- We can get away with using two arguments even when
		-- options.showDisplay is false, as string.format ignores extra
		-- arguments as long as there is an argument for each flag in the
		-- format string.
		return formatString:format(pageName, display)
	end
end

function p._main(args)
	local nLinks = getSequenceLength(args)

	if nLinks < 1 then
		return makeWikitextError('دست کم یک پارامتر مورد نیاز است')
	end

	local makeCategoryLink = newCategoryLinker{
		project = args.project,
		showPrefix = nLinks == 1,
	}

	local links = {}
	for i, cat in ipairs(args) do
		local success, categoryLink = pcall(makeCategoryLink, cat)
		if success then
			links[i] = categoryLink
		else
			-- If there was an error, then categoryLink is the error message.
			return makeWikitextError(categoryLink)
		end
	end

	local formatString
	if nLinks == 1 then
		formatString = '%s: %s'
	else
		formatString = '%s: رده‌های %s'
	end

	-- Don't output a comma before the "and" if we have only two links.
	local conjunction
	if nLinks == 2 then
		conjunction = ' و '
	else
		conjunction = ' و '
	end

	local hatnoteText = formatString:format(
		args.LABEL or 'همچنین نگاه کنید به',
		mw.text.listToText(links, '، ', conjunction)
	)
	return mHatnote._hatnote(hatnoteText, {selfref = true})
end

function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame, {
		wrappers = 'الگو:رده وابسته',
	})
	return p._main(args)
end

return p