Mô đun:Shortcut

-- Mô đun này thực hiện {{Viết tắt}}.

-- Set constants
local CONFIG_MODULE = 'Mô đun:Shortcut/config'

-- Load required modules
local checkType = require('libraryUtil').checkType
local yesno = require('Mô đun:Yesno')

local p = {}

local function message(msg, ...)
	return mw.message.newRawMessage(msg, ...):plain()
end

local function makeCategoryLink(cat)
	return string.format('[[%s:%s]]', mw.site.namespaces[14].name, cat)
end

function p._main(shortcuts, options, frame, cfg)
	checkType('_main', 1, shortcuts, 'table')
	checkType('_main', 2, options, 'table', true)
	options = options or {}
	frame = frame or mw.getCurrentFrame()
	cfg = cfg or mw.loadData(CONFIG_MODULE)
	local templateMode = options.template and yesno(options.template)
	local redirectMode = options.redirect and yesno(options.redirect)
	local isCategorized = not options.category or yesno(options.category) ~= false

	-- Validate shortcuts
	for i, shortcut in ipairs(shortcuts) do
		if type(shortcut) ~= 'string' or #shortcut < 1 then
			error(message(cfg['invalid-shortcut-error'], i), 2)
		end
	end

	-- Make the list items. These are the shortcuts plus any extra lines such
	-- as options.msg.
	local listItems = {}
	for i, shortcut in ipairs(shortcuts) do
		local templatePath, prefix
		if templateMode then
			-- Namespace detection
			local titleObj = mw.title.new(shortcut, 10)
			if titleObj.namespace == 10 then
				templatePath = titleObj.fullText
			else
				templatePath = shortcut
			end
			prefix = options['pre' .. i] or options.pre or ''
		end
		if options.target and yesno(options.target) then
			listItems[i] = templateMode
				and string.format("&#123;&#123;%s[[%s|%s]]&#125;&#125;", prefix, templatePath, shortcut)
				or string.format("[[%s]]", shortcut)
		else
			listItems[i] = frame:expandTemplate{
				title = 'No redirect',
				args = templateMode and {templatePath, shortcut} or {shortcut, shortcut}
			}
			if templateMode then
				listItems[i] = string.format("&#123;&#123;%s%s&#125;&#125;", prefix, listItems[i])
			end
		end
	end
	table.insert(listItems, options.msg)

	-- Return an error if we have nothing to display
	if #listItems < 1 then
		local msg = cfg['no-content-error']
		msg = string.format('<strong class="error">%s</strong>', msg)
		if isCategorized and cfg['no-content-error-category'] then
			msg = msg .. makeCategoryLink(cfg['no-content-error-category'])
		end
		return msg
	end

	local root = mw.html.create()
	root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = 'Mô đun:Shortcut/styles.css'} })
	-- Anchors
	local anchorDiv = root
		:tag('div')
			:addClass('module-shortcutanchordiv')
	for i, shortcut in ipairs(shortcuts) do
		local anchor = mw.uri.anchorEncode(shortcut)
		anchorDiv:tag('span'):attr('id', anchor)
	end

	-- Shortcut heading
	local shortcutHeading
	do
		local nShortcuts = #shortcuts
		if nShortcuts > 0 then
			local headingMsg = options['shortcut-heading'] or
				redirectMode and cfg['redirect-heading'] or
				cfg['shortcut-heading']
			shortcutHeading = message(headingMsg, nShortcuts)
			shortcutHeading = frame:preprocess(shortcutHeading)
		end
	end

	-- Shortcut box
	local shortcutList = root
		:tag('div')
			:addClass('module-shortcutboxplain noprint')
			:attr('role', 'note')
	if options.float and options.float:lower() == 'left' then
		shortcutList:addClass('module-shortcutboxleft')
	end
	if options.clear and options.clear ~= '' then
		shortcutList:css('clear', options.clear)
	end
	if shortcutHeading then
		shortcutList
			:tag('div')
				:addClass('module-shortcutlist')
				:wikitext(shortcutHeading)
	end
	
	local ubl = require('Mô đun:List').unbulleted(listItems)
	shortcutList:wikitext(ubl)
	return tostring(root)
end

function p.main(frame)
	local args = require('Mô đun:Arguments').getArgs(frame)

	-- Separate shortcuts from options
	local shortcuts, options = {}, {}
	for k, v in pairs(args) do
		if type(k) == 'number' then
			shortcuts[k] = v
		else
			options[k] = v
		end
	end

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

	return p._main(shortcuts, options, frame)
end

return p
Chúng tôi bán
Bài viết liên quan
Tổng hợp các
Tổng hợp các "chợ" ứng dụng bản quyền miễn phí tốt nhất dành cho iPhone
với các "chợ" ứng dụng dưới đây bạn hoàn toàn có thể tải về hoàn toàn miễn phí, thậm chí còn cung cấp rất nhiều game/app đã được chỉnh sửa (thêm, xóa chức năng) và tiện ích không có trên App Store
Review Red Dead Redemption 2 : Gã Cao Bồi Hết Thời Và Hành Trình Đi Tìm Bản Ngã
Review Red Dead Redemption 2 : Gã Cao Bồi Hết Thời Và Hành Trình Đi Tìm Bản Ngã
Red Dead Redemption 2 là một tựa game phiêu lưu hành động năm 2018 do Rockstar Games phát triển và phát hành
Thai nhi phát triển như thế nào và các bà mẹ cần chú ý gì
Thai nhi phát triển như thế nào và các bà mẹ cần chú ý gì
Sau khi mang thai, các bà mẹ tương lai đều chú ý đến sự phát triển của bào thai trong bụng
Giới thiệu về Captain John - One Piece
Giới thiệu về Captain John - One Piece
Đây là một trong các hải tặc nổi tiếng từng là thành viên trong Băng hải tặc Rocks của Rocks D. Xebec từ 38 năm về trước và có tham gia Sự kiện God Valley