Module:Navbar

The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Documentation for this module may be created at Module:Navbar/doc

local p = {}

function p._navbar(args)
	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; width:6em;'
	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('Invalid title ' .. titleText)
	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 'This box:')
                :wikitext(' ')
    end
 
    if args.brackets then
        div
            :tag('span')
                :css('margin-right', '-0.125em')
                :cssText(args.fontstyle)
                :wikitext('[')
                :newline();
    end

    local ul = div:tag('ul');

    ul
        :tag('li')
            :addClass('nv-view')
            :wikitext('[[' .. title.fullText .. '|')
            :tag('span')
                :attr('title', 'View this template')
                :cssText(args.fontstyle)
                :wikitext(args.mini and 'v' or 'view')
                :done()
            :wikitext(']]')
            :done()
        :tag('li')
            :addClass('nv-talk')
            :wikitext('[[' .. talkpage .. '|')
            :tag('span')
                :attr('title', 'Discuss this template')
                :cssText(args.fontstyle)
                :wikitext(args.mini and 't' or 'talk')
                :done()
            :wikitext(']]');

    if not args.noedit then 
        ul
            :tag('li')
                :addClass('nv-edit')
                :wikitext('[' .. title:fullUrl('action=edit') .. ' ')
                :tag('span')
                    :attr('title', 'Edit this template')
                    :cssText(args.fontstyle)
                    :wikitext(args.mini and 'e' or 'edit')
                    :done()
                :wikitext(']');
    end

    if args.brackets then
        div
            :tag('span')
                :css('margin-left', '-0.125em')
                :cssText(args.fontstyle)
                :wikitext(']')
                :newline();
    end

	if args.collapsible then
		div
			:done()
		:tag('span')
			:css('font-size', '110%')
			:cssText(args.fontstyle)
			:wikitext(args[1])
	end

    return tostring(div:done())
end

function p.navbar(frame)
    local origArgs
    -- If called via #invoke, use the args passed into the invoking template.
    -- Otherwise, for testing purposes, assume args are being passed directly in.
    if frame == mw.getCurrentFrame() then
        origArgs = frame:getParent().args
    else
        origArgs = frame
    end
 
    -- ParserFunctions considers the empty string to be false, so to preserve the previous 
    -- behavior of {{navbar}}, change any empty arguments to nil, so Lua will consider
    -- them false too.
    args = {}
    for k, v in pairs(origArgs) do
        if v ~= '' then
            args[k] = v
        end
    end
 
    return p._navbar(args)
end
 
return p
Cookies help us deliver our services. By using our services, you agree to our use of cookies.

Need wiki hosting?

Do you need a wiki for your Minecraft mod/gaming wiki? We'll host it for free! Contact us.

Other wikis

Indie-game wikis
Powered by Indie Wikis