Mô đun:Section link

-- Mô đun này thực hiện {{section link}}.

local checkType = require('libraryUtil').checkType

local p = {}

local function makeSectionLink(page, section, display)
	display = display or section
	page = page or ''
	return string.format('[[%s#%s|%s]]', page, section, display)
end

local function normalizeTitle(title)
	title = mw.ustring.gsub(mw.ustring.gsub(title,"'",""),'"','')
	return mw.title.new(mw.ustring.gsub(title,"%b<>","")).prefixedText
end

function p._main(page, sections, options, title)
	-- Validate input.
	checkType('_main', 1, page, 'string', true)
	checkType('_main', 3, options, 'table', true)
	if sections == nil then
		sections = {}
	elseif type(sections) == 'string' then
		sections = {sections}
	elseif type(sections) ~= 'table' then
		error(string.format(
			"loại lỗi trong đối số #2 đến '_main' " ..
			"(chuỗi, bảng hoặc không mong đợi, lấy được %s)",
			type(sections)
		), 2)
	end
	options = options or {}
	title = title or mw.title.getCurrentTitle()

	-- Deal with blank page names elegantly
	if page and not page:find('%S') then
		page = nil
		options.nopage = true
	end

	-- Make the link(s).
	local isShowingPage = not options.nopage
	if #sections <= 1 then
		local linkPage = page or ''
		local section = sections[1] or 'Ghi chú'
		local display = '§&nbsp;' .. section
		if isShowingPage then
			page = page or title.prefixedText
			if options.display and options.display ~= '' then
				if normalizeTitle(options.display) == normalizeTitle(page) then
					display = options.display .. ' ' .. display
				else
					error(string.format(
						'Hiển thị tiêu đề "%s" đã bị bỏ qua kể từ khi nó ' ..
						"không tương đương với tiêu đề thực tế của trang",
						options.display
					), 0)
				end
			else
				display = page .. ' ' .. display
			end
		end
		return makeSectionLink(linkPage, section, display)
	else
		-- Multiple sections. First, make a list of the links to display.
		local ret = {}
		for i, section in ipairs(sections) do
			ret[i] = makeSectionLink(page, section)
		end

		-- Assemble the list of links into a string with mw.text.listToText.
		-- We use the default separator for mw.text.listToText, but a custom
		-- conjunction. There is also a special case conjunction if we only
		-- have two links.
		local conjunction
		if #sections == 2 then
			conjunction = '&#8203; và '
		else
			conjunction = ', và '
		end
		ret = mw.text.listToText(ret, nil, conjunction)

		-- Add the intro text.
		local intro = '§§&nbsp;'
		if isShowingPage then
			intro = (page or title.prefixedText) .. ' ' .. intro
		end
		ret = intro .. ret

		return ret
	end
end

function p.main(frame)
	local args = require('Mô đun:Arguments').getArgs(frame, {
		wrappers = 'Bản mẫu:Section link',
		valueFunc = function (key, value)
			value = value:match('^%s*(.-)%s*$') -- Trim whitespace
			-- Allow blank first parameters, as the wikitext template does this.
			if value ~= '' or key == 1 then
				return value
			end
		end
	})

	-- Sort the arguments.
	local page
	local sections, options = {}, {}
	for k, v in pairs(args) do
		if k == 1 then
			-- Doing this in the loop because of a bug in [[Mô đun:Arguments]]
			-- when using pairs with deleted arguments.
			page = mw.text.decode(v, decodeNamedEntities)
		elseif type(k) == 'number' then
			sections[k] = v
		else
			options[k] = v
		end
	end
	
	-- Extract section from page, if present
	if page then
		local p, s = page:match('^(.-)#(.*)$')
		if p then page, sections[1] = p, s end
	end

	-- Compress the sections array.
	local function compressArray(t)
		local nums, ret = {}, {}
		for num in pairs(t) do
			nums[#nums + 1] = num
		end
		table.sort(nums)
		for i, num in ipairs(nums) do
			ret[i] = t[num]
		end
		return ret
	end
	sections = compressArray(sections)

	return p._main(page, sections, options)
end

return p
Chúng tôi bán
Bài viết liên quan
Câu truyện đằng sau đôi tất ướt và điệu nhảy của Ayaka
Câu truyện đằng sau đôi tất ướt và điệu nhảy của Ayaka
Story Quest của Ayaka có một khởi đầu rất chậm, đa số là những cuộc hội thoại giữa Ayaka và các NPC trong thành Inazuma
Công chúa Bạch Chi và sáu chú lùn - Genshin Impact
Công chúa Bạch Chi và sáu chú lùn - Genshin Impact
Một cuốn sách rất quan trọng về Pháp sư vực sâu và những người còn sống sót từ thảm kịch 500 năm trước tại Khaenri'ah
Một vài yếu tố thần thoại qua hình tượng loài quỷ trong Kimetsu no Yaiba
Một vài yếu tố thần thoại qua hình tượng loài quỷ trong Kimetsu no Yaiba
Kimetsu no Yaiba (hay còn được biết tới với tên Việt hóa Thanh gươm diệt quỷ) là một bộ manga Nhật Bản do tác giả Gotoge Koyoharu sáng tác và minh hoạ
Giới thiệu Anime: Saiki Kusuo no Psi-nan
Giới thiệu Anime: Saiki Kusuo no Psi-nan
Khác với một học sinh cao trung bình thường, Saiki Kusuo có nhiều siêu năng lực khác nhau bao gồm thần giao cách cảm và cách không di vật