پودمان: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