Mô đun:Labelled list hatnote

--------------------------------------------------------------------------------
--                               Labelled list                                --
--                                                                            --
-- This module does the core work of creating a hatnote composed of a list    --
-- prefixed by a colon-terminated label, i.e. "LABEL: [andList of pages]",    --
-- for {{see also}} and similar templates.                                    --
--------------------------------------------------------------------------------

local mHatnote = require('Mô đun:Hatnote')
local mHatlist = require('Mô đun:Hatnote list')
local mArguments --initialize lazily
local p = {}

-- Defaults global to this module
local defaults = {
	label = 'Xem thêm', --Final fallback for label argument
	labelForm = '%s: %s',
	prefixes = {'label', 'label ', 'nhãn', 'nhãn ', 'l'},
	template = 'Mô đun:Labelled list hatnote'
}

-- Helper function that pre-combines display parameters into page arguments.
-- Also compresses sparse arrays, as a desirable side-effect.
function p.preprocessDisplays (args, prefixes)
	-- Prefixes specify which parameters, in order, to check for display options
	-- They each have numbers auto-appended, e.g. 'label1', 'label 1', & 'l1'
	prefixes = prefixes or defaults.prefixes
	local pages = {}
	for k, v in pairs(args) do
		if type(k) == 'number' then
			local display
			for i = 1, #prefixes do
				display = args[prefixes[i] .. k]
				if display then break end
			end
			local page = display and
				string.format('%s|%s', string.gsub(v, '|.*$', ''), display) or v
			pages[#pages + 1] = page
		end
	end
	return pages
end

-- Produces a labelled pages-list hatnote.
-- The main frame (template definition) takes 1 or 2 arguments, for a singular
-- and (optionally) plural label respectively:
-- * {{#gọi:Labelled list hatnote|labelledList|Singular label|Plural label}}
-- The resulting template takes pagename & label parameters normally.
function p.labelledList (frame)
	mArguments = require('Mô đun:Arguments')
	local labels = {frame.args[1] or defaults.label}
	labels[2] = frame.args[2] or labels[1]
	local template = frame:getParent():getTitle()
	local args = mArguments.getArgs(frame, {parentOnly = true})
	local pages = p.preprocessDisplays(args)
	local options = {
		extraclasses = frame.args.extraclasses,
		category = args.category,
		selfref = frame.args.selfref or args.selfref,
		template = template
	}
	return p._labelledList(pages, labels, options)
end

function p._labelledList (pages, labels, options)
	labels = labels or {}
	if #pages == 0 then
		return mHatnote.makeWikitextError(
			'không có tên trang được chỉ định',
			(options.template or defaults.template) .. '#Các lỗi',
			options.category
		)
	end
	label = (#pages == 1 and labels[1] or labels[2]) or defaults.label
	local text = string.format(
		options.labelForm or defaults.labelForm,
		label,
		mHatlist.andList(pages, true)
	)
	local hnOptions = {
		extraclasses = options.extraclasses,
		selfref = options.selfref
	}
	return mHatnote._hatnote(text, hnOptions)
end

return p
Chúng tôi bán
Bài viết liên quan
Lời Thì Thầm Của Trái Tim - Khúc ca dịu êm của tuổi trẻ
Lời Thì Thầm Của Trái Tim - Khúc ca dịu êm của tuổi trẻ
Trong những ngày ngoài kia là trận chiến căng thẳng, trong lòng là những trận chiến của lắng lo ngột ngạt
Review phim “No Time to Die”- bom tấn không thể bỏ lỡ
Review phim “No Time to Die”- bom tấn không thể bỏ lỡ
Sự trở lại của James Bond một lần nữa xứng đáng vị thế đứng đầu về phim hành động cũng như thần thái và phong độ của nam tài tử Daniel Craig là bất tử
Naginata - Vũ khí của Lôi thần Baal
Naginata - Vũ khí của Lôi thần Baal
Trấn của Baal không phải là một thanh Katana, biểu tượng của Samurai Nhật Bản. Mà là một vũ khí cán dài
Download Anime Nekopara TV Vietsub
Download Anime Nekopara TV Vietsub
Cuộc sống thường ngày của những cô hầu gái mèo siêu cute