Module:Navbar: Difference between revisions

From Path of Exile Wiki
Jump to navigation Jump to search
(Created page with "local p = {} local getArgs local HtmlBuilder = require('Module:HtmlBuilder') local function trim(s) return mw.ustring.match(s, "^%s*(.-)%s*$") end local function htmlError...")
 
No edit summary
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 htmlError(s)
local span = HtmlBuilder.create('span')
span
.addClass('error')
.css('float', 'left')
.css('white-space', 'nowrap')
.wikitext('Error: ' .. s)
return tostring(span)
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 good, title, talk_title;
local titleArg = 1
local titleArg = 1
 
if args.collapsible then
if args.collapsible then
titleArg = 2
titleArg = 2
Line 53: Line 16:
args.style = 'float:left; text-align:left; width:6em;'
args.style = 'float:left; text-align:left; width:6em;'
end
end
 
good, title, talk_title = pcall(getTitle, args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle()));
local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
if not good then
local title = mw.title.new(mw.text.trim(titleText), 'Template');
return htmlError(title);
end


if not title then
if not title then
return htmlError('Page does not exist')
error('Invalid title ' .. titleText)
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 22:06, 21 April 2015

Module documentation[view] [edit] [history] [purge]

Lua logo

This module depends on the following other modules:


This module was adapted from Module:Navbar on Wikipedia.
Adaptation is noted for reference and attribution only. This module may differ from the original in function or in usage. The documentation on Wikipedia may be helpful in understanding this module.

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