Mô đun:Redirect hatnote

--[[
-- This module produces a "redirect" hatnote. It looks like this:
-- '"X" redirects here. For other uses, see Y.'
-- It implements the {{redirect}} template.
--]]

local mHatnote = require('Mô đun:Hatnote')
local mHatList = require('Mô đun:Hatnote list')
local mArguments --lazily initialize
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local checkTypeMulti = libraryUtil.checkTypeMulti

local p = {}

local function getTitle(...)
	local success, titleObj = pcall(mw.title.new, ...)
	if success then
		return titleObj
	else
		return nil
	end
end

function p.redirect(frame)
	mArguments = require('Mô đun:Arguments')
	local args = mArguments.getArgs(frame, {parentOnly=true})
	--Get number of redirects
	local numRedirects = tonumber(frame.args[1]) or 1
	-- Create the options table.
	local options = {}
	options.selfref = args.selfref
	return p._redirect(args, numRedirects, options)
end

function p._redirect(args, numRedirects, options, currentTitle, redirectTitle, targetTitle)
	-- Validate the input. Don't bother checking currentTitle, redirectTitle or
	-- targetTitle, as they are only used in testing.
	checkType('_redirect', 1, args, 'table')
	checkType('_redirect', 2, numRedirects, 'number', true)
	numRedirects = numRedirects or 1
	checkType('_redirect', 3, options, 'table', true)
	options = options or {}
	currentTitle = currentTitle or mw.title.getCurrentTitle()
	-- Get the table of redirects
	local redirect = {}
	for i = 1, numRedirects do
		-- Return an error if a redirect parameter is missing.
		if not args[i] then
			return mHatnote.makeWikitextError(
				'tham số đổi hướng bị thiếu',
				'Bản mẫu:Đổi hướng#Các lỗi',
				args.category
			)
		end
		redirect[i] = args[i]
	end
	-- Generate the text.
	local formattedRedirect = {}
	for k,v in pairs(redirect) do
		formattedRedirect[k] = '"' .. v .. '"'
	end
	local text = {
		mHatList.andList(formattedRedirect) .. ' ' .. (#redirect == 1 and 'đổi hướng' or 'đổi hướng') .. ' tới đây.',
		mHatList._forSee(args, #redirect + 1, {title = redirect[1]})
	}
	text = table.concat(text, ' ')
	-- Functionality for adding categories	
	local categoryTable = {}
	function addCategory(cat)
		if cat and cat ~= '' then
			-- Add by index to avoid duplicates
			categoryTable[string.format('[[Thể loại:%s]]', cat)] = true
		end
	end
	--Generate tracking categories
	local mhOptions = {}
	for k,v in pairs(redirect) do
		-- We don't need a tracking category if the template invocation has been
		-- copied directly from the docs, or if we aren't in main- or category-space.
		if not v:find('^REDIRECT%d*$') and v ~= 'TERM' -- 
			and currentTitle.namespace == 0 or currentTitle.namespace == 14
		then
			redirectTitle = redirectTitle or getTitle(v)
			if not redirectTitle or not redirectTitle.exists then
				addCategory('Thiếu trang đổi hướng')
			elseif not redirectTitle.isRedirect then
				addCategory('Bài viết có hatnote đổi hướng cần kiểm tra lại')
			else
				local mRedirect = require('Mô đun:Redirect')
				local target = mRedirect.getTarget(redirectTitle)
				targetTitle = targetTitle or target and getTitle(target)
				if targetTitle and targetTitle ~= currentTitle then
					addCategory('Bài viết có hatnote đổi hướng cần kiểm tra lại')
				end
			end
		end

		-- Generate the options to pass to [[Mô đun:Hatnote]].
		if currentTitle.namespace == 0 and not mhOptions.selfref
			and redirectTitle and redirectTitle.namespace ~= 0
		then
			-- We are on a mainspace page, and the hatnote starts with something
			-- like "Wikipedia:Foo redirects here", so automatically label it as
			-- a self-reference.
			mhOptions.selfref = true
		else
			mhOptions.selfref = options.selfref
		end
	end
	--concatenate all the categories
	local category = ''
	for k,v in pairs(categoryTable) do
		category = category .. k
	end

	return mHatnote._hatnote(text, mhOptions) .. category
end
 
return p
Chúng tôi bán
Bài viết liên quan
Vì sao phải đổi căn cước công dân thành căn cước?
Vì sao phải đổi căn cước công dân thành căn cước?
Luật Căn cước sẽ có hiệu lực thi hành từ 1.7, thay thế luật Căn cước công dân. Từ thời điểm này, thẻ căn cước công dân (CCCD) cũng chính thức có tên gọi mới là thẻ căn cước (CC)
[Giả thuyết] Paimon là ai?
[Giả thuyết] Paimon là ai?
Trước tiên là về tên của cô ấy, tên các vị thần trong lục địa Teyvat điều được đặt theo tên các con quỷ trong Ars Goetia
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
Eustass Kid có tiền thưởng 3 tỷ Berries và toàn bộ thủy thủ đoàn đã bị tiêu diệt hoàn toàn
Eustass Kid có tiền thưởng 3 tỷ Berries và toàn bộ thủy thủ đoàn đã bị tiêu diệt hoàn toàn
Kid phá hủy toàn bộ tàu của hạm đội hải tặc Tóc Đỏ và đánh bại tất cả các thuyền trưởng của hạm đội đó