|
|
Line 1: |
Line 1: |
− | 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
| |