Difference between revisions of "Module:Navbar/sandbox"

From blackwiki
Jump to navigation Jump to search
test>DePiep
(cleanup code (no code changes): formatting: 21x whitespace (using Advisor.js))
test>DePiep
(Wikipedia:Lua style guide: no whitespace following "(" and preceding ")" (at least a consistency))
Line 5: Line 5:
  
 
local function trim(s)
 
local function trim(s)
     return mw.ustring.match( s, "^%s*(.-)%s*$" )
+
     return mw.ustring.match(s, "^%s*(.-)%s*$")
 
end
 
end
  
Line 20: Line 20:
 
end
 
end
  
local function getTitle( pageName )
+
local function getTitle(pageName)
     pageName = trim( pageName );
+
     pageName = trim(pageName);
 
     local page_title, talk_page_title;
 
     local page_title, talk_page_title;
  
 
     if mw.ustring.sub(pageName, 1, 1) == ':' then
 
     if mw.ustring.sub(pageName, 1, 1) == ':' then
         page_title = mw.title.new( mw.ustring.sub(pageName, 2) );
+
         page_title = mw.title.new( mw.ustring.sub(pageName, 2));
 
     else
 
     else
         page_title = mw.title.new( pageName, 'Template' );
+
         page_title = mw.title.new(pageName, 'Template');
 
     end
 
     end
  
Line 39: Line 39:
 
end
 
end
  
function p._navbar( args )
+
function p._navbar(args)
 
     local good, title, talk_title;
 
     local good, title, talk_title;
     good, title, talk_title = pcall( getTitle, args[1] or (':' .. mw.getCurrentFrame():getParent():getTitle()));
+
     good, title, talk_title = pcall(getTitle, args[1] or (':' .. mw.getCurrentFrame():getParent():getTitle()));
 
     if not good then
 
     if not good then
 
         return htmlError(title);
 
         return htmlError(title);
Line 52: Line 52:
 
     local mainpage = title.fullText;
 
     local mainpage = title.fullText;
 
     local talkpage = talk_title and talk_title.fullText or ''
 
     local talkpage = talk_title and talk_title.fullText or ''
     local editurl = title:fullUrl( 'action=edit' );
+
     local editurl = title:fullUrl('action=edit');
  
 
     local viewLink, talkLink, editLink = 'view', 'talk', 'edit'
 
     local viewLink, talkLink, editLink = 'view', 'talk', 'edit'
Line 59: Line 59:
 
     end
 
     end
  
     local div = HtmlBuilder.create( 'div' )
+
     local div = HtmlBuilder.create('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
Line 70: Line 70:
 
     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
  
Line 81: Line 81:
 
             .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
Line 89: Line 89:
  
 
     ul
 
     ul
         .tag( 'li' )
+
         .tag('li')
             .addClass( 'nv-view' )
+
             .addClass('nv-view')
             .wikitext( '[[' .. mainpage .. '|' )
+
             .wikitext('[[' .. mainpage .. '|')
             .tag( 'span ' )
+
             .tag('span ')
                 .attr( 'title', 'View this template' )
+
                 .attr('title', 'View this template')
                 .cssText( args.fontstyle or '' )
+
                 .cssText(args.fontstyle or '')
                 .wikitext( viewLink )
+
                 .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 or '' )
+
                 .cssText(args.fontstyle or '')
                 .wikitext( talkLink )
+
                 .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( '[' .. editurl .. ' ' )
+
                 .wikitext('[' .. editurl .. ' ')
                 .tag( 'span ' )
+
                 .tag('span ')
                     .attr( 'title', 'Edit this template' )
+
                     .attr('title', 'Edit this template')
                     .cssText( args.fontstyle or '' )
+
                     .cssText(args.fontstyle or '')
                     .wikitext( editLink )
+
                     .wikitext(editLink)
 
                     .done()
 
                     .done()
                 .wikitext( ']' );
+
                 .wikitext(']');
 
     end
 
     end
  
Line 126: Line 126:
 
             .tag('span')
 
             .tag('span')
 
                 .css('margin-left', '-0.125em')
 
                 .css('margin-left', '-0.125em')
                 .cssText( args.fontstyle or '' )
+
                 .cssText( args.fontstyle or '')
                 .wikitext( ']' )
+
                 .wikitext(']')
 
                 .newline();
 
                 .newline();
 
     end
 
     end

Revision as of 17:31, 23 May 2014

Documentation for this module may be created at Module:Navbar/sandbox/doc

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;
    good, title, talk_title = pcall(getTitle, args[1] 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('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

    return tostring(div)
end

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

return p