Module:Navbar: Difference between revisions

From Path of Exile Wiki
Jump to navigation Jump to search
No edit summary
(Undo revision 118950 by Vinifera7 (talk))
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 16: Line 53:
args.style = 'float:left; text-align:left; width:6em;'
args.style = 'float:left; text-align:left; width:6em;'
end
end
 
local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
good, title, talk_title = pcall(getTitle, args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle()));
local title = mw.title.new(mw.text.trim(titleText), 'Template');
if not good then
return htmlError(title);
end


if not title then
if not title then
error('Invalid title ' .. titleText)
return htmlError('Page does not exist')
end
end


local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or '';
local mainpage = title.fullText;
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 = mw.html.create():tag('div')
local div = HtmlBuilder.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('[[' .. title.fullText .. '|')
.wikitext('[[' .. mainpage .. '|')
:tag('span')
.tag('span')
:attr('title', 'View this template')
.attr('title', 'View this template')
:cssText(args.fontstyle)
.cssText(args.fontstyle or '')
:wikitext(args.mini and 'v' or 'view')
.wikitext(viewLink)
: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)
.cssText(args.fontstyle or '')
:wikitext(args.mini and 't' or 'talk')
.wikitext(talkLink)
: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('[' .. title:fullUrl('action=edit') .. ' ')
.wikitext('[' .. editurl .. ' ')
:tag('span')
.tag('span')
:attr('title', 'Edit this template')
.attr('title', 'Edit this template')
:cssText(args.fontstyle)
.cssText(args.fontstyle or '')
:wikitext(args.mini and 'e' or 'edit')
.wikitext(editLink)
: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)
.cssText( args.fontstyle or '')
: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)
.cssText(args.fontstyle or '')
:wikitext(args[1])
.wikitext(args[1])
end
end


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



Revision as of 22:08, 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
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)
	local good, title, talk_title;
	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
	
	good, title, talk_title = pcall(getTitle, args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle()));
	if not good then
		return htmlError(title);
	end

	if not title then
		return htmlError('Page does not exist')
	end

	local mainpage = title.fullText;
	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')
	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('[[' .. mainpage .. '|')
			.tag('span')
				.attr('title', 'View this template')
				.cssText(args.fontstyle or '')
				.wikitext(viewLink)
				.done()
			.wikitext(']]')
			.done()
		.tag('li')
			.addClass('nv-talk')
			.wikitext('[[' .. talkpage .. '|')
			.tag('span')
				.attr('title', 'Discuss this template')
				.cssText(args.fontstyle or '')
				.wikitext(talkLink)
				.done()
			.wikitext(']]');

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

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

	return tostring(div.allDone())
end

function p.navbar(frame)
	if not getArgs then
		getArgs = require('Module:Arguments').getArgs
	end
	return p._navbar(getArgs(frame))
end

return p