Mô đun:Navbar

Đây là một phiên bản cũ của trang này, do Tuanminh01 (thảo luận | đóng góp) sửa đổi vào lúc 12:47, ngày 12 tháng 2 năm 2020 (Đã thay đổi mức khóa của “Mô đun:Navbar” ([Sửa đổi=Chỉ cho phép các thành viên được xác nhận mở rộng và bảo quản viên] (vô thời hạn) [Di chuyển=Cấm mọi thành viên (trừ bảo quản viên)] (vô thời hạn))). Địa chỉ URL hiện tại là một liên kết vĩnh viễn đến phiên bản này của trang, có thể khác biệt rất nhiều so với phiên bản hiện hành.

Tài liệu mô đun[xem] [sửa] [lịch sử] [làm mới]

Đây là Lua thực hiện của {{Thanh điều hướng}}. Nó được sử dụng trong Mô đun:Navbox.

local p = {}

local getArgs
local ul

function p.addItem (mini, full, link, descrip, args, url)
	local l
	if url then
		l = {'[', '', ']'}
	else
		l = {'[[', '|', ']]'}
	end
	ul:tag('li')
		:addClass('nv-'..full)
		:wikitext(l[1] .. link .. l[2])
		:tag(args.mini and 'abbr' or 'span')
			:attr('title', descrip..' bản mẫu này')
			:cssText(args.fontstyle)
			:wikitext(args.mini and mini or full)
			:done()
		:wikitext(l[3])
end

function p.brackets (position, c, args, div)
	if args.brackets then
		div
			:tag('span')
				:css('margin-'..position, '-0.125em')
				:cssText(args.fontstyle)
				:wikitext(c)
	end
end

function p._navbar(args)
	local show = {true, true, true, false, false, false}
	local titleArg = 1
	
	if args.collapsible then
		titleArg = 2
		if not args.plain then args.mini = 1 end
		if args.fontcolor then
			args.fontstyle = 'color:' .. args.fontcolor .. ';'
		end
		args.style = 'float:left; text-align:left'
	end
	
	if args.template then
		titleArg = 'template'
		show = {true, false, false, false, false, false}
		local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6, talk = 2, edit = 3, hist = 4, move = 5, watch = 6}
		for k,v in ipairs(require ('Mô đun:TableTools').compressSparseArray(args)) do
			local num = index[v]
			if num then show[num] = true end
		end
	end
	
	if args.noedit then show[3] = false end
	
	local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
	local title = mw.title.new(mw.text.trim(titleText), 'Template')
	if not title then
		error('Tiêu đề ' .. titleText .. ' không hợp lệ')
	end
	local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''
	
	local div = mw.html.create():tag('div')
	div
		:addClass('plainlinks')
		:addClass('hlist')
		:addClass('navbar')
		:cssText(args.style)

	if args.mini then div:addClass('mini') end

	if not (args.mini or args.plain) then
		div
			:tag('span')
				:css('word-spacing', 0)
				:cssText(args.fontstyle)
				:wikitext(args.text or 'Hộp này:')
				:wikitext(' ')
	end
	
	p.brackets('right', '[ ', args, div)
	
	ul = div:tag('ul')
	if show[1] then p.addItem('x', 'xem', title.fullText, 'Xem', args) end
	if show[2] then p.addItem('t', 'thảo_luận', talkpage, 'Thảo luận', args) end
	if show[3] then p.addItem('s', 'sửa', title:fullUrl('action=edit'), 'Sửa', args, true) end
	if show[4] then p.addItem('l', 'sử', title:fullUrl('action=history'), 'Lịch sử của', args, true) end
	if show[5] then
		local move = mw.title.new ('Đặc_biệt:Di_chuyển')
		p.addItem('d', 'di_chuyển', move:fullUrl('target='..title.fullText), 'Di chuyển', args, true) end
	if show[6] then p.addItem('td', 'theo_dõi', title:fullUrl('action=watch'), 'Theo dõi', args, true) end
	
	p.brackets('left', ' ]', args, div)
	
	if args.collapsible then
		div
			:done()
		:tag('div')
			:css('font-size', '114%')
			:css('margin', args.mini and '0 4em' or '0 7em')
			:cssText(args.fontstyle)
			:wikitext(args[1])
	end

	return tostring(div:done())
end

function p.navbar(frame)
	if not getArgs then
		getArgs = require('Mô đun:Arguments').getArgs
	end
	return p._navbar(getArgs(frame))
end

return p