Jump to content
Toggle menu
  • 8 articles
  • 75 files
  • 7 users
  • 37.8K edits
Neodyland Wiki
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:Navbar: Difference between revisions

From Neodyland Wiki
Let's not assume the error is because of the expensive function limit, it could be something else. Especially for people who import this module into MW 1.21 installations.
m Changed protection level for "Module:Navbar": downgraded protection level per consensus ([Move=Allow only template editors and administrators] (indefinite) [Edit=Allow only template editors and administrators] (indefinite))
 
(15 intermediate revisions by 6 users not shown)
Line 1: Line 1:
local p = {}
local p = {}


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


function trim(s)
function p._navbar(args)
    return mw.ustring.match( s, "^%s*(.-)%s*$" )
local titleArg = 1
end
 
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


function error(s)
local ul = div:tag('ul');
    local span = HtmlBuilder.create('span')


    span
ul
        .addClass('error')
:tag('li')
        .css('float', 'left')
:addClass('nv-view')
        .css('white-space', 'nowrap')
:wikitext('[[' .. title.fullText .. '|')
        .wikitext('Error: ' .. s)
: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(']]');


    return tostring(span)
if not args.noedit then
end
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


function getTitle( pageName )
if args.brackets then
    pageName = trim( pageName );
div
    local page_title, talk_page_title;
:tag('span')
   
:css('margin-left', '-0.125em')
    if mw.ustring.sub(pageName, 1, 1) == ':' then
:cssText(args.fontstyle)
        page_title = mw.title.new( mw.ustring.sub(pageName, 2) );
:wikitext(']')
    else
:newline();
        page_title = mw.title.new( pageName, 'Template' );
end
    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 _navbar( args )
if args.collapsible then
    if not args[1] then
div
        return error('No name provided')
:done()
    end
:tag('span')
:css('font-size', '110%')
    local good, title, talk_title;
:cssText(args.fontstyle)
    good, title, talk_title = pcall( getTitle, args[1] );
:wikitext(args[1])
    if not good then
end
        return error(title);
    end  


    if not title then
return tostring(div:done())
        return error('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( 'div' )
    div
        .addClass( 'noprint' )
        .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
    return tostring(div)
end
end


function p.navbar(frame)
function p.navbar(frame)
    local origArgs
if not getArgs then
    -- If called via #invoke, use the args passed into the invoking template.
getArgs = require('Module:Arguments').getArgs
    -- Otherwise, for testing purposes, assume args are being passed directly in.
end
    if frame == mw.getCurrentFrame() then
return p._navbar(getArgs(frame))
        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 _navbar(args)
end
end
 
return p
return p

Latest revision as of 11:20, 16 July 2019

Module documentation[ create · purge ]
This documentation is transcluded from 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
Cookies help us deliver our services. By using our services, you agree to our use of cookies.