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
Pricing Strategy: Học cách định giá sản phẩm có 1-0-2 của Wine List
Pricing Strategy: Học cách định giá sản phẩm có 1-0-2 của Wine List
Hôm nay mình đọc được 2 case study thú vị về định giá sản phẩm. Cả hai đều dựa trên hiệu ứng mỏ neo (Price Anchoring Effect).
Đấng tối cao Yamaiko - Trái tim ấm áp trong hình hài gai góc
Đấng tối cao Yamaiko - Trái tim ấm áp trong hình hài gai góc
1 trong 3 thành viên là nữ của Guild Ainz Ooal Gown. Bên cạnh Ulbert hay Touch, thì cô còn là 1 những thành viên đầu tiên của Clan Nine Own Goal
Giới thiệu nhân vật Mei - Jigokuraku
Giới thiệu nhân vật Mei - Jigokuraku
Mei là một Tensen trước đây liên kết với Lord Tensen nhưng đã trốn thoát sau khi không đồng ý với phương pháp mở khóa sự bất tử của Rien
Giới thiệu các nhân vật trong Postknight 2
Giới thiệu các nhân vật trong Postknight 2
Trong Postknight 2 chúng ta sẽ gặp lại những người bạn cũ, và thêm những người bạn mới