Mô đun Lua này được sử dụng ở rất nhiều trang, vì thế những thay đổi đến nó sẽ hiện ra rõ ràng. Vui lòng thử nghiệm các thay đổi ở trang con /sandbox, /testcases của mô đun, hoặc ở chỗ thử mô đun. Cân nhắc thảo luận các thay đổi tại trang thảo luận trước khi áp dụng sửa đổi. |
This module implements {{R avoided double redirect}}. Please see the template page for documentation.
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