Module:Navbar: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
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 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) | function p._navbar(args) | ||
local good, title, talk_title; | |||
local titleArg = 1 | local titleArg = 1 | ||
if args.collapsible then | if args.collapsible then | ||
titleArg = 2 | titleArg = 2 | ||
Line 16: | Line 53: | ||
args.style = 'float:left; text-align:left; width:6em;' | args.style = 'float:left; text-align:left; width:6em;' | ||
end | 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 | if not title then | ||
return htmlError('Page does not exist') | |||
end | end | ||
local | 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 = | local div = HtmlBuilder.create().tag('div') | ||
div | div | ||
.addClass('plainlinks') | |||
.addClass('hlist') | |||
.addClass('navbar') | |||
.cssText(args.style) | |||
if args.mini then div | 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') | |||
.css('word-spacing', 0) | |||
.cssText(args.fontstyle) | |||
.wikitext(args.text or 'This box:') | |||
.wikitext(' ') | |||
end | end | ||
if args.brackets then | if args.brackets then | ||
div | div | ||
.tag('span') | |||
.css('margin-right', '-0.125em') | |||
.cssText(args.fontstyle) | |||
.wikitext('[') | |||
.newline(); | |||
end | end | ||
local ul = div | local ul = div.tag('ul'); | ||
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 | if not args.noedit then | ||
ul | ul | ||
.tag('li') | |||
.addClass('nv-edit') | |||
.wikitext('[' .. editurl .. ' ') | |||
.tag('span') | |||
.attr('title', 'Edit this template') | |||
.cssText(args.fontstyle or '') | |||
.wikitext(editLink) | |||
.done() | |||
.wikitext(']'); | |||
end | end | ||
if args.brackets then | if args.brackets then | ||
div | div | ||
.tag('span') | |||
.css('margin-left', '-0.125em') | |||
.cssText( args.fontstyle or '') | |||
.wikitext(']') | |||
.newline(); | |||
end | end | ||
if args.collapsible then | if args.collapsible then | ||
div | div | ||
.done() | |||
.tag('span') | |||
.css('font-size', '110%') | |||
.cssText(args.fontstyle or '') | |||
.wikitext(args[1]) | |||
end | end | ||
return tostring(div | return tostring(div.allDone()) | ||
end | end | ||
Revision as of 22:08, 21 April 2015

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.
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.
The above documentation is transcluded from Module:Navbar/doc.
Editors can experiment in this module's sandbox and testcases pages.
Subpages of this module.
Editors can experiment in this module's sandbox and testcases pages.
Subpages of this module.
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