Mô đun: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})

	-- 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\">Lỗi trong [[Mô đun:R avoided double redirect]]: " .. err .. "</span>"
			.. (demo and "" or "[[Thể loại:Lỗi tránh đổi hướng kép]]")
	end

	local thisPage = mw.title.getCurrentTitle()
	local otherPage = mw.title.new(args[1] or "")
	if not otherPage then
		return formatError("Không có trang khác nào được chỉ định.");
	end
	if mw.title.equals(thisPage, otherPage) then
		return formatError("Trang hiện tại đã được truyền vào làm tham số.");
	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 = "một tiêu đề thay thế hoặc chủ đề có liên quan của '''" .. noredir(otherPage) .. "''', một trang đổi hướng khác tới cùng tiêu đề"
		else
			from = "một tiêu đề thay thế hoặc chủ đề có liên quan của '''[[:" .. otherPage.fullText .. "]]''', một trang đổi hướng cũ tới cùng tiêu đề"
		end
		cat = demo and "" or update and "Đổi hướng kép được tránh sắp được cập nhật" or "Đổi hướng kép được tránh"

		return frame:expandTemplate({
			title = "Redirect template",
			args = {
				id = 'R avoided double redirect',
				from = from,
				info = update and "\n**" .. info or info,
				["all category"] = cat,
				name = "Từ một đổi hướng kép được tránh"
			}
		})
	end

	if not noError then
		if not thisTarget then
			return formatError("Trang này không phải là trang đổi hướng hoạt động được – có thể đã bị tắt đi bởi RfD.", demo)
		elseif mw.title.equals(thisPage, thisTarget) then
			return formatOutput(true, "<span class=\"error\">Đây là trang đổi hướng hỏng (nó đổi hướng đến chính nó).</span>")
		elseif not thisTarget.exists then
			return formatOutput(true, "<span class=\"error\">Đây là trang đổi hướng hỏng (trang đích của nó không tồn tại).</span>")
		elseif not otherPage.exists then
			return formatOutput(true, "<span class=\"error\">[[:" .. otherPage.fullText .. "]] không tồn tại.</span>")
		elseif otherTarget and mw.title.equals(otherPage, otherTarget) then
			return formatOutput(true, "<span class=\"error\">[[:" .. otherPage.fullText .. "]] là trang đổi hướng hỏng (nó đổi hướng đến chính nó).</span>")
		elseif otherTarget and not otherTarget.exists then
			return formatOutput(true, "<span class=\"error\">[[:" .. otherPage.fullText .. "]] là trang đổi hướng hỏng (nó đổi hướng đến một trang không tồn tại).</span>")
		elseif mw.title.equals(thisTarget, otherPage) then
			if not otherTarget then
				return formatOutput(true, "<span class=\"error\">[[:" .. otherPage.fullText .. "]] không phải là trang đổi hướng, và bản mẫu đã trỏ vào chính nó rồi.</span> Bản mẫu này khả năng cao nên bị gỡ bỏ.")
			elseif mw.title.equals(otherTarget, thisPage) then
				return formatOutput(true, "<span class=\"error\">Đây là trang đổi hướng vòng tròn.</span> Vui lòng thay đổi trang đích của cả trang đổi hướng này và " .. noredir(otherPage) .. " tới đúng bài viết.")
			end
			return formatOutput(true, "<span class=\"error\">Trang này đổi hướng đến " .. noredir(otherPage) .. ", nó đổi hướng đến [[:" .. otherTarget.fullText .. "]].</span> Vui lòng thay thế trang đích của trang đổi hướng này đến [[:" .. otherTarget.fullText .. "]] hoặc nếu không hãy giải quyết vấn đề này.")
		elseif not otherTarget then
			return formatOutput(true, "<span class=\"error\">[[:" .. otherPage.fullText .. "]] không phải là trang đổi hướng.</span> Nhiều khả năng trang đổi hướng này nên được cập nhật để trỏ tới [[:" .. otherPage.fullText .. "]] nay nó không còn là trang đổi hướng, và bản mẫu này được gỡ bỏ.\n** Nếu nó không phải trang đích chính xác cho trang đổi hướng này, hãy cập nhật hoặc loại bỏ bản mẫu này và/hoặc bản thân trang đổi hướng và/hoặc các trang khác sao cho thích hợp.")
		elseif thisDoubleTarget then
			if otherDoubleTarget then
				if mw.title.equals(thisDoubleTarget, otherDoubleTarget) then
					return formatOutput(true, "<span class=\"error\">Cả trang này lẫn " .. noredir(otherPage) .. " đều là trang đổi hướng kép.</span> Vui lòng thay đổi trang đích của cả hai trang đổi hướng thành "
						.. (thisDoubleTarget.isRedirect and "bài viết chính xác." or "[[:" .. thisDoubleTarget.fullText .. "]] (hoặc một bài viết chính xác khác)."))
				end
				return formatOutput(true, "<span class=\"error\">Cả trang này lẫn " .. noredir(otherPage) .. " đều là trang đổi hướng kép.</span> Hãy sửa chúng.")
			end
			return formatOutput(true, "<span class=\"error\">Đây là trang đổi hướng kép.</span> Hãy sửa nó, có thể bằng cách đổi nó thành [[:" .. otherTarget.fullText .. "]].")
		elseif not mw.title.equals(thisTarget, otherTarget) then
			return formatOutput(true, "<span class=\"error\">Trang này và " .. noredir(otherPage) .. " đổi hướng đến các bài viết khác nhau.</span> Nhiều khả năng bạn nên thay đổi trang đích của trang đổi hướng này thành [[:" .. otherTarget.fullText .. "]] sao cho khớp.\n** Nếu nó không phải trang đích chính xác cho trang đổi hướng này, hãy cập nhật hoặc loại bỏ bản mẫu này và/hoặc bản thân trang đổi hướng và/hoặc các trang khác sao cho thích hợp.")
		elseif thisTarget.fragment ~= otherTarget.fragment then
			-- Should this case report for update?
			return formatOutput(false, "Do không cho phép việc [[Wikipedia:Đổi hướng kép|đổi hướng kép]],"
				.. " cả hai trang hiện được trỏ tới [[:" .. otherTarget.prefixedText .. "]] (nhưng với các anchor khác nhau).\n"
				.. "**Nếu " .. noredir(otherPage) .. " được chỉ định lại trang đích hoặc được mở rộng thành một bài viết, bản mẫu, hoặc trang dự án khác riêng biệt, "
				.. " trang đổi hướng này sẽ được xếp lại thể loại để cập nhật."
			)
		end
	end

	return formatOutput(false, "Do không cho phép việc [[Wikipedia:Đổi hướng kép|đổi hướng kép]],"
		.. " cả hai trang hiện được trỏ tới [[:" .. otherTarget.fullText .. "]].\n"
		.. "**Nếu " .. noredir(otherPage) .. " được chỉ định lại trang đích hoặc được mở rộng thành một bài viết, bản mẫu, hoặc trang dự án khác riêng biệt, "
		.. " trang đổi hướng này sẽ được xếp lại thể loại để cập nhật."
	)
end

return p
Chúng tôi bán
Bài viết liên quan
Brooklyn 99 - nét mới trong thể loại sitcom
Brooklyn 99 - nét mới trong thể loại sitcom
B99 đúng là có tình yêu, nói về tình bạn nhưng đều ở mức vừa đủ để khiến một series về cảnh sát không bị khô khan nhàm chán
Favonius Lance - Weapon Guide Genshin Impact
Favonius Lance - Weapon Guide Genshin Impact
A spear of honor amongst the Knights of Favonius. It is used in a ceremonial role at parades and reviews, but it is also a keen and mortal foe of monsters.
Fury (2019): Chiến tranh và người lính thủy đánh bộ qua lăng kính điện ảnh
Fury (2019): Chiến tranh và người lính thủy đánh bộ qua lăng kính điện ảnh
Fury (2014) sẽ đem lại cho bạn cái nhìn chân thực, những mặt tối và hậu quả nặng nề đằng sau các cuộc chiến tranh mà nhân loại phải hứng chịu.
Lòng lợn – món ăn dân dã liệu có còn được dân yêu?
Lòng lợn – món ăn dân dã liệu có còn được dân yêu?
Từ châu Âu đến châu Á, mỗi quốc gia lại có cách biến tấu riêng với nội tạng động vật, tạo nên một bản sắc ẩm thực đặc trưng