Editing Module:Navbar

Jump to: navigation, search

Warning: You are not logged in.

Your IP address will be recorded in this page's edit history.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
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
 
+
local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
+
good, title, talk_title = pcall(getTitle, args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle()));
local title = mw.title.new(mw.text.trim(titleText), 'Template');
+
if not good then
 +
return htmlError(title);
 +
end
  
 
if not title then
 
if not title then
error('Invalid title ' .. titleText)
+
return htmlError('Page does not exist')
 
end
 
end
  
local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or '';
+
local mainpage = title.fullText;
 +
local talkpage = talk_title and talk_title.fullText or ''
 +
local editurl = title:fullUrl('action=edit');
  
local div = mw.html.create():tag('div')
+
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
 
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('[[' .. title.fullText .. '|')
+
.wikitext('[[' .. mainpage .. '|')
:tag('span')
+
.tag('span')
:attr('title', 'View this template')
+
.attr('title', 'View this template')
:cssText(args.fontstyle)
+
.cssText(args.fontstyle or '')
:wikitext(args.mini and 'v' or 'view')
+
.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)
+
.cssText(args.fontstyle or '')
:wikitext(args.mini and 't' or 'talk')
+
.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('[' .. title:fullUrl('action=edit') .. ' ')
+
.wikitext('[' .. editurl .. ' ')
:tag('span')
+
.tag('span')
:attr('title', 'Edit this template')
+
.attr('title', 'Edit this template')
:cssText(args.fontstyle)
+
.cssText(args.fontstyle or '')
:wikitext(args.mini and 'e' or 'edit')
+
.wikitext(editLink)
: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)
+
.cssText( args.fontstyle or '')
: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)
+
.cssText(args.fontstyle or '')
:wikitext(args[1])
+
.wikitext(args[1])
 
end
 
end
  
return tostring(div:done())
+
return tostring(div.allDone())
 
end
 
end
  
 

Please note that all contributions to The Crowdsourced Resource-Based Economy Knowledgebase are considered to be released under the Creative Commons Zero (Public Domain) (see RBEMWiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

Cancel | Editing help (opens in new window)
Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox
Share