پودمان:R avoided double redirect

از ویکی‌پدیا، دانشنامهٔ آزاد
توضیحات پودمان[نمایش] [ویرایش] [تاریخچه] [پاکسازی]

این پودمان الگوی {{تغییرمسیر دوتایی اجتناب‌شده}} را پیاده‌سازی می‌کند. برای مشاهدهٔ مستندات لطفاً به صفحهٔ الگو مراجعه کنید.

local p = {}

local function noredir(page)
	local link = page:fullUrl("redirect=no")
	return "<span class=\"plainlinks\">[" .. link .. " " .. page.fullText .. "]</span>"
end


function p.main(frame)

	local args = require("Module:Arguments").getArgs(frame, {removeBlanks=false})
	
	if args['بدون خطا'] then args.noerror = args['بدون خطا'] end
	if args['دمو'] then args.demo = args['دمو'] end
	if args['هدف آن'] then args.othertarget = args['هدف آن'] end
	if args['هدف این'] then args.thistarget = args['هدف این'] end
	
	-- Demo parameters, for demonstrating behavior with certain redirect 
	-- targets and avoiding categorization (do not use in articles)
	local noError = args.noerror
	local demo = args.demo or noError or args.thistarget or args.othertarget

	local function formatError(err)
		return "<span class=\"error\">خطا در [[پودمان:R avoided double redirect]]: " .. err .. "</span>"
			.. (demo and "" or "[[رده:تغییرمسیرهای دوتایی اجتناب‌شده/خطا]]")
	end

	local thisPage = mw.title.getCurrentTitle()
	local otherPage = mw.title.new(args[1] or "")
	if not otherPage then
		return formatError("صفحهٔ دیگری تعریف نشده است.");
	end
	if mw.title.equals(thisPage, otherPage) then
		return formatError("صفحهٔ کنونی در قالب یک پارامتر وارد شده است.");
	end

	-- Get mw.title objects for redirect targets.
	-- Note that using mw.title's redirectTarget will correctly handle preview mode, unlike Module:Redirect.
	local thisTarget, otherTarget
	if demo and args.thistarget then
		thisTarget = mw.title.new(args.thistarget)
	else
		thisTarget = thisPage.redirectTarget
	end
	if demo and args.othertarget then
		otherTarget = mw.title.new(args.othertarget)
	else
		otherTarget = otherPage.redirectTarget
	end

	-- For double redirects
	local thisDoubleTarget = thisTarget and thisTarget.redirectTarget
	local otherDoubleTarget = otherTarget and otherTarget.redirectTarget

	local function formatOutput(update, info)
		local from, cat

		if otherTarget then
			from = "یک عنوان جایگزین برای '''" .. noredir(otherPage) .. "''' که تغییرمسیر دیگری است به عنوان یکسان"
		else
			from = "یک عنوان جایگزین برای '''[[:" .. otherPage.fullText .. "]]''' که سابقاً تغییرمسیری بود به همان عنوان"
		end
		cat = demo and "" or update and "تغییرمسیرهای دوتایی اجتناب‌شده نیازمند به‌روزرسانی" or "تغییرمسیرهای دوتایی اجتناب‌شده"

		return frame:expandTemplate({
			title = "الگوی تغییرمسیر",
			args = {
				id = 'تغییرمسیر دوتایی اجتناب‌شده',
				from = from,
				info = update and "\n**" .. info or info,
				["all category"] = cat,
				name = "از یک تغییرمسیر دوتایی اجتناب‌شده"
			}
		})
	end

	if noError then
		-- Ignore all possible errors, for sample usage display at the top of [[Template:R avoided double redirect]]
	else
		if not thisTarget then
			return formatError("این صفحه یک تغییرمسیر نیست.", demo)
		end
		if mw.title.equals(thisPage, thisTarget) then
			return formatOutput(true, "<span class=\"error\">این یک تغییرمسیر شکسته است (به خودش تغییرمسیر دارد).</span>")
		end
		if not thisTarget.exists then
			return formatOutput(true, "<span class=\"error\">این یک تغییرمسیر شکسته است (صفحهٔ هدف موجود نیست).</span>")
		end
		if not otherPage.exists then
			return formatOutput(true, "<span class=\"error\">صفحهٔ [[:" .. otherPage.fullText .. "]] موجود نیست.</span>")
		end
		if otherTarget and mw.title.equals(otherPage, otherTarget) then
			return formatOutput(true, "<span class=\"error\">صفحهٔ [[:" .. otherPage.fullText .. "]] یک تغییرمسیر شکسته است (به خودش تغییرمسیر دارد).</span>")
		end
		if otherTarget and not otherTarget.exists then
			return formatOutput(true, "<span class=\"error\">صفحهٔ [[:" .. otherPage.fullText .. "]] یک تغییرمسیر شکسته است (به صفحه‌ای ناموجود تغییرمسیر دارد).</span>")
		end
		if mw.title.equals(thisTarget, otherPage) then
			if not otherTarget then
				return formatOutput(true, "<span class=\"error\">صفحهٔ [[:" .. otherPage.fullText .. "]] تغییرمسیر نیست و این صفحه از پیش به آن هدایت می‌شود.</span> این الگو احتمالاً باید حذف شود.")
			end
			if mw.title.equals(otherTarget, thisPage) then
				return formatOutput(true, "<span class=\"error\">این یک تغییرمسیر چرخشی است.</span> لطفاً هدف این تغییرمسیر و " .. noredir(otherPage) .. " را به مقالهٔ صحیح تغییر دهید.")
			end
			return formatOutput(true, "<span class=\"error\">این صفحه به " .. noredir(otherPage) .. " که خود به [[:" .. otherTarget.fullText .. "]] هدایت می‌شود، تغییرمسیر دارد.</span> لطفاً هدف این تغییرمسیر را به [[:" .. otherTarget.fullText .. "]] تغییر دهید یا این که مشکل را به روش دیگری برطرف کنید.")
		end
		if not otherTarget then
			return formatOutput(true, "<span class=\"error\">صفحهٔ [[:" .. otherPage.fullText .. "]] تغییرمسیر نیست.</span> احتمالاً باید این تغییرمسیر به‌گونه‌ای به‌روز شود که به [[:" .. otherPage.fullText .. "]] هدایت شود و این الگو نیز از آن حذف شود.\n** اگر هدف مذکور برای این تغییرمسیر صحیح نیست، لطفاً این الگو و/یا خود صفحهٔ تغییرمسیر و/یا صفحهٔ دیگر را به تناسب به‌روز یا حذف کنید.")
		end
		if thisDoubleTarget then
			if otherDoubleTarget then
				if mw.title.equals(thisDoubleTarget, otherDoubleTarget) then
					return formatOutput(true, "<span class=\"error\">این صفحه و " .. noredir(otherPage) .. " هر دو تغییرمسیرهای دوتایی هستند.</span> لطفاً هدف هر دو تغییرمسیر را به "
						.. (thisDoubleTarget.isRedirect and "یک مقالهٔ صحیح" or "[[:" .. thisDoubleTarget.fullText .. "]] (یا یک مقالهٔ صحیح دیگر)") .. " تغییر دهید.")
				end
				return formatOutput(true, "<span class=\"error\">این صفحه و " .. noredir(otherPage) .. " هر دو تغییرمسیرهای دوتایی هستند.</span> Please fix them.")
			end
			return formatOutput(true, "<span class=\"error\">این یک تغییرمسیر دوتایی است.</span> لطفاً مشکل آن را برطرف کنید. این کار احتمالاً با تغییر هدف به [[:" .. otherTarget.fullText .. "]] قابل انجام است.")
		end
		if not mw.title.equals(thisTarget, otherTarget) then
			return formatOutput(true, "<span class=\"error\">این صفحه و " .. noredir(otherPage) .. " به مقاله‌های متفاوتی تغییرمسیر دارند.</span> احتمالاً لازم است که هدف این تغییرمسیر را به [[:" .. otherTarget.fullText .. "]] تغییر دهید تا با یکدیگر منطبق شوند.\n** اگر صفحهٔ فوق هدف صحیحی برای این تغییرمسیر نیست، این الگو و/یا خود تغییرمسیر و/یا صفحهٔ دیگر را به تناسب به‌روز یا حذف کنید.")
		end

		if thisTarget.fragment ~= otherTarget.fragment then
			-- Should this case report for update?
			return formatOutput(false, "از آنجا که [[ویکی‌پدیا:تغییرمسیر دوتایی|تغییرمسیرهای دوتایی]] مجاز نیستند،"
				.. " هر دو صفحه اکنون به [[:" .. otherTarget.prefixedText .. "]] (اما با لنگرهای متفاوت) هدایت می‌شوند.\n"
				.. "**در صورتی که " .. noredir(otherPage) .. " برای ایجاد یک مقالهٔ جداگانه گسترش داده شود یا هدف آن تغییر کند،"
				.. " این تغییرمسیر مجدداً به‌عنوان نیازمند به‌روزرسانی رده‌بندی خواهد شد."
			)
		end
	end

	return formatOutput(false, "از آنجا که [[ویکی‌پدیا:تغییرمسیر دوتایی|تغییرمسیرهای دوتایی]] مجاز نیستند،"
		.. " هر دو صفحه اکنون به [[:" .. otherTarget.fullText .. "]] هدایت می‌شوند.\n"
		.. "**در صورتی که " .. noredir(otherPage) .. " برای ایجاد یک مقالهٔ جداگانه گسترش داده شود یا هدف آن تغییر کند،"
		.. " این تغییرمسیر مجدداً به‌عنوان نیازمند به‌روزرسانی رده‌بندی خواهد شد."
	)

end

return p