Module:Navbar: Difference between revisions

    From Nonbinary Wiki
    m>Jackmcbarn
    (less misleading error message)
    m>Jackmcbarn
    (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