Mô đun:Uses TemplateStyles

Từ Từ điển tri thức Hội Thánh của Đức Chúa Trời
Bước tới điều hướng Bước tới tìm kiếm

Có thể viết tài liệu về mô đun này tại Mô đun:Uses TemplateStyles/tài liệu.

-- Mô đun này thực hiện bản mẫu {{Uses TemplateStyles}}.
local yesno = require('Mô đun:Yesno')
local mList = require('Mô đun:List')
local mTableTools = require('Mô đun:TableTools')
local mMessageBox = require('Mô đun:Message box')

local p = {}

function p.main(frame)
	local origArgs = frame:getParent().args
	local args = {}
	for k, v in pairs(origArgs) do
		v = v:match('^%s*(.-)%s*$')
		if v ~= '' then
			args[k] = v
		end
	end
	return p._main(args)
end

function p._main(args)
	local tStyles = mTableTools.compressSparseArray(args)
	local box = p.renderBox(tStyles)
	local trackingCategories = p.renderTrackingCategories(args, tStyles)
	return box .. trackingCategories
end

function p.renderBox(tStyles)
	local boxArgs = {}
	if #tStyles < 1 then
		boxArgs.text = '<strong class="error">Lỗi: không có TemplateStyles được chỉ định</strong>'
	else
		local tStylesLinks = {}
		for i, ts in ipairs(tStyles) do
			local sandboxLink = nil
			local tsTitle = mw.title.new(ts)
			if tsTitle then
				local tsSandboxTitle = mw.title.new(string.format('%s:%s/sandbox/%s', tsTitle.nsText, tsTitle.baseText, tsTitle.subpageText))
				if not tsSandboxTitle or not tsSandboxTitle.exists then
					tsSandboxTitle = mw.title.new(ts .. "/sandbox")
				end
				if tsSandboxTitle and tsSandboxTitle.exists then
					sandboxLink = string.format(' ([[:%s|sandbox]])', tsSandboxTitle.prefixedText)
				end
			end
			tStylesLinks[i] = string.format('[[:%s]]%s', ts, sandboxLink or '')
		end
		local tStylesList = mList.makeList('bulleted', tStylesLinks)
		boxArgs.text = 
			(mw.title.getCurrentTitle():inNamespaces(828,829) and 'Mô đun' or 'Bản mẫu') ..
			' này sử dụng [[:en:Wikipedia:TemplateStyles|TemplateStyles]]:\n' .. tStylesList
	end
	boxArgs.type = 'notice'
	boxArgs.small = true
	boxArgs.image = '[[Tập tin:Farm-Fresh css add.svg|32px|alt=Biểu tượng CSS]]'
	return mMessageBox.main('mbox', boxArgs)
end

function p.renderTrackingCategories(args, tStyles, titleObj)
	if yesno(args.nocat) then
		return ''
	end
	
	local cats = {}
	
	-- Error category
	if #tStyles < 1 then
		cats[#cats + 1] = 'Sử dụng bản mẫu TemplateStyles có lỗi'
	end
	
	-- TemplateStyles category
	titleObj = titleObj or mw.title.getCurrentTitle()
	local subpageBlacklist = {
		doc = true,
		sandbox = true,
		sandbox2 = true,
		testcases = true
	}
	if titleObj.namespace == 10 
		and not subpageBlacklist[titleObj.subpageText]
	then
		local category = args.category
		if not category then
			category = category or 'Bản mẫu sử dụng TemplateStyles'
		end
		cats[#cats + 1] = category
		local currentProt = titleObj.protectionLevels["edit"] and titleObj.protectionLevels["edit"][1] or nil
		for i, ts in ipairs(tStyles) do
			local tsTitleObj = mw.title.new(ts)
			local tsProt = tsTitleObj.protectionLevels["edit"] and tsTitleObj.protectionLevels["edit"][1] or nil
			if tsProt ~= currentProt then
				cats[#cats + 1] = "Bản mẫu sử dụng TemplateStyles có một mức độ bảo vệ khác nhau"
				break
			end
		end
	end
	
	for i, cat in ipairs(cats) do
		cats[i] = string.format('[[Thể loại:%s]]', cat)
	end
	return table.concat(cats)
end

return p