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
Nhìn lại cú bắt tay vĩ đại giữa Apple và NVIDIA
Nhìn lại cú bắt tay vĩ đại giữa Apple và NVIDIA
Trong một ngày đầu năm 2000, hai gã khổng lồ công nghệ, Apple và NVIDIA, bước chân vào một cuộc hôn nhân đầy tham vọng và hứa hẹn
Giới thiệu Kiseijuu - bộ anime/manga kinh dị hay nhức nách
Giới thiệu Kiseijuu - bộ anime/manga kinh dị hay nhức nách
Được xem là một trong những siêu phẩm kinh dị khoa học viễn tưởng và giành được vô số giải thưởng của thế giới M-A, Parasyte chủ yếu nhắm tới độc giả là nam giới trẻ và trưởng thành
That Time I Got Reincarnated as a Slime: Trinity in Tempest
That Time I Got Reincarnated as a Slime: Trinity in Tempest
Trinity in Tempest mang đến cho độc giả những pha hành động đầy kịch tính, những môi trường phong phú và đa dạng, cùng với những tình huống hài hước và lôi cuốn
Người anh trai quốc dân Choso - Chú thuật hồi
Người anh trai quốc dân Choso - Chú thuật hồi
Choso của chú thuật hồi chiến: không theo phe chính diện, không theo phe phản diện, chỉ theo phe em trai