Module:Navbar: Difference between revisions

Nothing to hide, but nothing to show you either.
Jump to navigation Jump to search
Content added Content deleted
(less misleading error message)
(switch to mw.html and other cleanup from sandbox)
Line 2: Line 2:


local getArgs
local getArgs
local HtmlBuilder = require('Module:HtmlBuilder')

local function trim(s)
return mw.ustring.match(s, "^%s*(.-)%s*$")
end

local function getTitle(pageName)
pageName = trim(pageName);
local page_title, talk_page_title;

if mw.ustring.sub(pageName, 1, 1) == ':' then
page_title = mw.title.new( mw.ustring.sub(pageName, 2));
else
page_title = mw.title.new(pageName, 'Template');
end

if page_title then
talk_page_title = page_title.talkPageTitle;
else
talk_page_title = nil;
end

return page_title, talk_page_title;
end


function p._navbar(args)
function p._navbar(args)
local title, talk_title;
local titleArg = 1
local titleArg = 1
Line 43: Line 18:
local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
title, talk_title = getTitle(titleText);
local title = mw.title.new(mw.text.trim(titleText), 'Template');


if not title then
if not title then
Line 49: Line 24:
end
end


local mainpage = title.fullText;
local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or '';
local talkpage = talk_title and talk_title.fullText or ''
local editurl = title:fullUrl('action=edit');

local viewLink, talkLink, editLink = 'view', 'talk', 'edit'
if args.mini then
viewLink, talkLink, editLink = 'v', 't', 'e'
end


local div = HtmlBuilder.create().tag('div')
local div = mw.html.create():tag('div')
div
div
.addClass('plainlinks')
:addClass('plainlinks')
.addClass('hlist')
:addClass('hlist')
.addClass('navbar')
:addClass('navbar')
.cssText(args.style)
:cssText(args.style)


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


if not (args.mini or args.plain) then
if not (args.mini or args.plain) then
div
div
.tag('span')
:tag('span')
.css('word-spacing', 0)
:css('word-spacing', 0)
.cssText(args.fontstyle)
:cssText(args.fontstyle)
.wikitext(args.text or 'This box:')
:wikitext(args.text or 'This box:')
.wikitext(' ')
:wikitext(' ')
end
end


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


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


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


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


if args.brackets then
if args.brackets then
div
div
.tag('span')
:tag('span')
.css('margin-left', '-0.125em')
:css('margin-left', '-0.125em')
.cssText( args.fontstyle or '')
:cssText(args.fontstyle)
.wikitext(']')
:wikitext(']')
.newline();
:newline();
end
end
if args.collapsible then
if args.collapsible then
div
div
.done()
:done()
.tag('span')
:tag('span')
.css('font-size', '110%')
:css('font-size', '110%')
.cssText(args.fontstyle or '')
:cssText(args.fontstyle)
.wikitext(args[1])
:wikitext(args[1])
end
end


return tostring(div.allDone())
return tostring(div:done())
end
end



Revision as of 21:04, 30 November 2014

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

local p = {}

local getArgs

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)
	if not getArgs then
		getArgs = require('Module:Arguments').getArgs
	end
	return p._navbar(getArgs(frame))
end

return p