Editing Module:Navbar

Jump to: navigation, search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

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 1: Line 1:
 
local p = {}
 
local p = {}
local cfg = mw.loadData('Module:Navbar/configuration')
 
  
local function get_title_arg(is_collapsible, template)
+
local getArgs
local title_arg = 1
+
local ul
if is_collapsible then title_arg = 2 end
 
if template then title_arg = 'template' end
 
return title_arg
 
end
 
  
local function choose_links(template, args)
+
function p.addItem (mini, full, link, descrip, args, url)
-- The show table indicates the default displayed items.
 
-- view, talk, edit, hist, move, watch
 
-- TODO: Move to configuration.
 
local show = {true, true, true, false, false, false}
 
if template then
 
show[2] = false
 
show[3] = false
 
local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6,
 
talk = 2, edit = 3, hist = 4, move = 5, watch = 6}
 
-- TODO: Consider removing TableTools dependency.
 
for _, v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do
 
local num = index[v]
 
if num then show[num] = true end
 
end
 
end
 
 
 
local remove_edit_link = args.noedit
 
if remove_edit_link then show[3] = false end
 
 
return show
 
 
end
 
 
 
local function add_link(link_description, ul, is_mini, font_style)
 
 
local l
 
local l
if link_description.url then
+
if url then
 
l = {'[', '', ']'}
 
l = {'[', '', ']'}
 
else
 
else
Line 41: Line 12:
 
end
 
end
 
ul:tag('li')
 
ul:tag('li')
:addClass('nv-' .. link_description.full)
+
:addClass('nv-'..full)
:wikitext(l[1] .. link_description.link .. l[2])
+
:wikitext(l[1] .. link .. l[2])
:tag(is_mini and 'abbr' or 'span')
+
:tag(args.mini and 'abbr' or 'span')
:attr('title', link_description.html_title)
+
:attr('title', descrip..' this template')
:cssText(font_style)
+
:cssText(args.fontstyle)
:wikitext(is_mini and link_description.mini or link_description.full)
+
:wikitext(args.mini and mini or full)
 
:done()
 
:done()
 
:wikitext(l[3])
 
:wikitext(l[3])
:done()
 
 
end
 
end
  
local function make_list(title_text, has_brackets, displayed_links, is_mini, font_style)
+
function p.brackets (position, c, args, div)
+
if args.brackets then
local title = mw.title.new(mw.text.trim(title_text), cfg.title_namespace)
+
div
if not title then
+
:tag('span')
error(cfg.invalid_title .. title_text)
+
:css('margin-'..position, '-0.125em')
 +
:cssText(args.fontstyle)
 +
:wikitext(c)
 
end
 
end
local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''
+
end
 +
 
 +
function p._navbar(args)
 +
local show = {true, true, true, false, false, false}
 +
local titleArg = 1
 
 
-- TODO: Get link_descriptions and show into the configuration module.
+
if args.collapsible then
-- link_descriptions should be easier...
+
titleArg = 2
local link_descriptions = {
+
if not args.plain then args.mini = 1 end
{ ['mini'] = 'v', ['full'] = 'view', ['html_title'] = 'View this template',
+
if args.fontcolor then
['link'] = title.fullText, ['url'] = false },
+
args.fontstyle = 'color:' .. args.fontcolor .. ';'
{ ['mini'] = 't', ['full'] = 'talk', ['html_title'] = 'Discuss this template',
+
end
['link'] = talkpage, ['url'] = false },
+
args.style = 'float:left; text-align:left'
{ ['mini'] = 'e', ['full'] = 'edit', ['html_title'] = 'Edit this template',
 
['link'] = title:fullUrl('action=edit'), ['url'] = true },
 
{ ['mini'] = 'h', ['full'] = 'hist', ['html_title'] = 'History of this template',
 
['link'] = title:fullUrl('action=history'), ['url'] = true },
 
{ ['mini'] = 'm', ['full'] = 'move', ['html_title'] = 'Move this template',
 
['link'] = mw.title.new('Special:Movepage'):fullUrl('target='..title.fullText), ['url'] = true },
 
{ ['mini'] = 'w', ['full'] = 'watch', ['html_title'] = 'Watch this template',
 
['link'] = title:fullUrl('action=watch'), ['url'] = true }
 
}
 
 
 
local ul = mw.html.create('ul')
 
if has_brackets then
 
ul:addClass(cfg.classes.brackets)
 
:cssText(font_style)
 
 
end
 
end
 
 
for i, _ in ipairs(displayed_links) do
+
if args.template then
if displayed_links[i] then add_link(link_descriptions[i], ul, is_mini, font_style) end
+
titleArg = 'template'
 +
show = {true, false, false, false, false, false}
 +
local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6, talk = 2, edit = 3, hist = 4, move = 5, watch = 6}
 +
for k,v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do
 +
local num = index[v]
 +
if num then show[num] = true end
 +
end
 
end
 
end
return ul:done()
 
 
 
end
+
if args.noedit then show[3] = false end
 
 
function p._navbar(args)
 
 
 
-- TODO: We probably don't need both fontstyle and fontcolor...
+
local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
local font_style = args.fontstyle
+
local title = mw.title.new(mw.text.trim(titleText), 'Template')
local font_color = args.fontcolor
+
if not title then
local is_collapsible = args.collapsible
+
error('Invalid title ' .. titleText)
local is_mini = args.mini
 
local is_plain = args.plain
 
 
local collapsible_class = nil
 
if is_collapsible then
 
collapsible_class = cfg.classes.collapsible
 
if not is_plain then is_mini = 1 end
 
if font_color then
 
font_style = (font_style or '') .. '; color: ' .. font_color .. ';'
 
end
 
 
end
 
end
 +
local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''
 
 
local navbar_style = args.style
 
 
local div = mw.html.create():tag('div')
 
local div = mw.html.create():tag('div')
 
div
 
div
:addClass(cfg.classes.navbar)
+
:addClass('plainlinks')
:addClass(cfg.classes.plainlinks)
+
:addClass('hlist')
:addClass(cfg.classes.horizontal_list)
+
:addClass('navbar')
:addClass(collapsible_class) -- we made the determination earlier
+
:cssText(args.style)
:cssText(navbar_style)
 
  
if is_mini then div:addClass(cfg.classes.mini) end
+
if args.mini then div:addClass('mini') end
  
local box_text = (args.text or cfg.box_text) .. ' '
+
if not (args.mini or args.plain) then
-- the concatenated space guarantees the box text is separated
 
if not (is_mini or is_plain) then
 
 
div
 
div
 
:tag('span')
 
:tag('span')
:addClass(cfg.classes.box_text)
+
:css('word-spacing', 0)
:cssText(font_style)
+
:cssText(args.fontstyle)
:wikitext(box_text)
+
:wikitext(args.text or 'This box:')
 +
:wikitext(' ')
 
end
 
end
 
 
local template = args.template
+
p.brackets('right', '[ ', args, div)
local displayed_links = choose_links(template, args)
+
local has_brackets = args.brackets
+
ul = div:tag('ul')
local title_arg = get_title_arg(is_collapsible, template)
+
if show[1] then p.addItem('v', 'view', title.fullText, 'View', args) end
local title_text = args[title_arg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
+
if show[2] then p.addItem('t', 'talk', talkpage, 'Discuss', args) end
local list = make_list(title_text, has_brackets, displayed_links, is_mini, font_style)
+
if show[3] then p.addItem('e', 'edit', title:fullUrl('action=edit'), 'Edit', args, true) end
div:node(list)
+
if show[4] then p.addItem('h', 'hist', title:fullUrl('action=history'), 'History of', args, true) end
 
+
if show[5] then
if is_collapsible then
+
local move = mw.title.new ('Special:Movepage')
local title_text_class
+
p.addItem('m', 'move', move:fullUrl('target='..title.fullText), 'Move', args, true) end
if is_mini then
+
if show[6] then p.addItem('w', 'watch', title:fullUrl('action=watch'), 'Watch', args, true) end
title_text_class = cfg.classes.collapsible_title_mini
+
else
+
p.brackets('left', ' ]', args, div)
title_text_class = cfg.classes.collapsible_title_full
+
end
+
if args.collapsible then
div:done()
+
div
:tag('div')
+
:done()
:addClass(title_text_class)
+
:tag('div')
:cssText(font_style)
+
:css('font-size', '114%')
 +
:css('margin', args.mini and '0 4em' or '0 7em')
 +
:cssText(args.fontstyle)
 
:wikitext(args[1])
 
:wikitext(args[1])
 
end
 
end
+
 
return mw.getCurrentFrame():extensionTag{
+
return tostring(div:done())
name = 'templatestyles', args = { src = cfg.templatestyles }
 
} .. tostring(div:done())
 
 
end
 
end
  
 
function p.navbar(frame)
 
function p.navbar(frame)
return p._navbar(require('Module:Arguments').getArgs(frame))
+
if not getArgs then
 +
getArgs = require('Module:Arguments').getArgs
 +
end
 +
return p._navbar(getArgs(frame))
 
end
 
end
  
 
return p
 
return p

Please note that all contributions to All About Ayrshire may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, 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 (see All About Ayrshire:Copyrights for details). Do not submit copyrighted work without permission!

Cancel Editing help (opens in new window)