Module:Navbar: Difference between revisions

From Path of Exile Wiki
Jump to navigation Jump to search
>TheFrz
m (the latest version from the Wikipedia)
No edit summary
 
(One intermediate revision by one other user not shown)
Line 2: Line 2:


local getArgs
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..' this template')
: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)
function p._navbar(args)
local show = {true, true, true, false, false, false}
local titleArg = 1
local titleArg = 1
 
if args.collapsible then
if args.collapsible then
titleArg = 2
titleArg = 2
if not args.plain then
if not args.plain then args.mini = 1 end
args.mini = 1
end
if args.fontcolor then
if args.fontcolor then
args.fontstyle = 'color:' .. args.fontcolor .. ';'
args.fontstyle = 'color:' .. args.fontcolor .. ';'
end
end
args.style = 'float:left; text-align:left; width:6em;'
args.style = 'float:left; text-align:left'
end
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 ('Module: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 titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
local title = mw.title.new(mw.text.trim(titleText), 'Template');
local title = mw.title.new(mw.text.trim(titleText), 'Template')
 
if not title then
if not title then
error('Invalid title ' .. titleText)
error('Invalid title ' .. titleText)
end
end
 
local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''
local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or '';
 
local div = mw.html.create():tag('div')
local div = mw.html.create():tag('div')
div
div
Line 43: Line 81:
:wikitext(' ')
:wikitext(' ')
end
end
 
if args.brackets then
p.brackets('right', '[ ', args, div)
div
:tag('span')
ul = div:tag('ul')
:css('margin-right', '-0.125em')
if show[1] then p.addItem('v', 'view', title.fullText, 'View', args) end
:cssText(args.fontstyle)
if show[2] then p.addItem('t', 'talk', talkpage, 'Discuss', args) end
:wikitext('[')
if show[3] then p.addItem('e', 'edit', title:fullUrl('action=edit'), 'Edit', args, true) end
:newline();
if show[4] then p.addItem('h', 'hist', title:fullUrl('action=history'), 'History of', args, true) end
end
if show[5] then
 
local move = mw.title.new ('Special:Movepage')
local ul = div:tag('ul');
p.addItem('m', 'move', move:fullUrl('target='..title.fullText), 'Move', args, true) end
 
if show[6] then p.addItem('w', 'watch', title:fullUrl('action=watch'), 'Watch', args, true) end
ul
:tag('li')
p.brackets('left', ' ]', args, div)
:addClass('nv-view')
:wikitext('[[' .. title.fullText .. '|')
:tag(args.mini and 'abbr' or '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(args.mini and 'abbr' or '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(args.mini and 'abbr' or '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
if args.collapsible then
div
div
:done()
:done()
:tag('span')
:tag('div')
:css('font-size', '110%')
:css('font-size', '114%')
:css('margin', args.mini and '0 4em' or '0 7em')
:cssText(args.fontstyle)
:cssText(args.fontstyle)
:wikitext(args[1])
:wikitext(args[1])

Latest revision as of 10:38, 3 July 2023

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 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..' this template')
			: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 ('Module: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('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
	
	p.brackets('right', '[ ', args, div)
	
	ul = div:tag('ul')
	if show[1] then p.addItem('v', 'view', title.fullText, 'View', args) end
	if show[2] then p.addItem('t', 'talk', talkpage, 'Discuss', args) end
	if show[3] then p.addItem('e', 'edit', title:fullUrl('action=edit'), 'Edit', args, true) end
	if show[4] then p.addItem('h', 'hist', title:fullUrl('action=history'), 'History of', args, true) end
	if show[5] then
		local move = mw.title.new ('Special:Movepage')
		p.addItem('m', 'move', move:fullUrl('target='..title.fullText), 'Move', args, true) end
	if show[6] then p.addItem('w', 'watch', title:fullUrl('action=watch'), 'Watch', 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('Module:Arguments').getArgs
	end
	return p._navbar(getArgs(frame))
end

return p