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
+
 
if is_collapsible then title_arg = 2 end
+
function p._navbar(args)
if template then title_arg = 'template' end
+
local titleArg = 1
return title_arg
 
end
 
  
local function choose_links(template, args)
+
if args.collapsible then
-- The show table indicates the default displayed items.
+
titleArg = 2
-- view, talk, edit, hist, move, watch
+
if not args.plain then
-- TODO: Move to configuration.
+
args.mini = 1
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
 +
if args.fontcolor then
 +
args.fontstyle = 'color:' .. args.fontcolor .. ';'
 +
end
 +
args.style = 'float:left; text-align:left; width:6em;'
 
end
 
end
  
local remove_edit_link = args.noedit
+
local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
if remove_edit_link then show[3] = false end
+
local title = mw.title.new(mw.text.trim(titleText), 'Template');
 
return show
 
 
end
 
  
local function add_link(link_description, ul, is_mini, font_style)
+
if not title then
local l
+
error('Invalid title ' .. titleText)
if link_description.url then
 
l = {'[', '', ']'}
 
else
 
l = {'[[', '|', ']]'}
 
 
end
 
end
ul:tag('li')
 
:addClass('nv-' .. link_description.full)
 
:wikitext(l[1] .. link_description.link .. l[2])
 
:tag(is_mini and 'abbr' or 'span')
 
:attr('title', link_description.html_title)
 
:cssText(font_style)
 
:wikitext(is_mini and link_description.mini or link_description.full)
 
:done()
 
:wikitext(l[3])
 
:done()
 
end
 
  
local function make_list(title_text, has_brackets, displayed_links, is_mini, font_style)
+
local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or '';
+
 
local title = mw.title.new(mw.text.trim(title_text), cfg.title_namespace)
+
local div = mw.html.create():tag('div')
if not title then
+
div
error(cfg.invalid_title .. title_text)
+
: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
 
end
local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''
 
 
-- TODO: Get link_descriptions and show into the configuration module.
 
-- link_descriptions should be easier...
 
local link_descriptions = {
 
{ ['mini'] = 'v', ['full'] = 'view', ['html_title'] = 'View this template',
 
['link'] = title.fullText, ['url'] = false },
 
{ ['mini'] = 't', ['full'] = 'talk', ['html_title'] = 'Discuss this template',
 
['link'] = talkpage, ['url'] = false },
 
{ ['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 args.brackets then
if has_brackets then
+
div
ul:addClass(cfg.classes.brackets)
+
:tag('span')
:cssText(font_style)
+
:css('margin-right', '-0.125em')
 +
:cssText(args.fontstyle)
 +
:wikitext('[')
 +
:newline();
 
end
 
end
 
for i, _ in ipairs(displayed_links) do
 
if displayed_links[i] then add_link(link_descriptions[i], ul, is_mini, font_style) end
 
end
 
return ul:done()
 
 
end
 
  
function p._navbar(args)
+
local ul = div:tag('ul');
+
 
-- TODO: We probably don't need both fontstyle and fontcolor...
+
ul
local font_style = args.fontstyle
+
:tag('li')
local font_color = args.fontcolor
+
:addClass('nv-view')
local is_collapsible = args.collapsible
+
:wikitext('[[' .. title.fullText .. '|')
local is_mini = args.mini
+
:tag(args.mini and 'abbr' or 'span')
local is_plain = args.plain
+
:attr('title', 'View this template')
+
:cssText(args.fontstyle)
local collapsible_class = nil
+
:wikitext(args.mini and 'v' or 'view')
if is_collapsible then
+
:done()
collapsible_class = cfg.classes.collapsible
+
:wikitext(']]')
if not is_plain then is_mini = 1 end
+
:done()
if font_color then
+
:tag('li')
font_style = (font_style or '') .. '; color: ' .. font_color .. ';'
+
:addClass('nv-talk')
end
+
:wikitext('[[' .. talkpage .. '|')
 +
:tag(args.mini and 'abbr' or 'span')
 +
:attr('title', 'Discuss this template')
 +
:cssText(args.fontstyle)
 +
:wikitext(args.mini and 't' or 'talk')
 +
:done()
 +
:wikitext(']]');
 +
 
 +
if not args.noedit then
 +
ul
 +
:tag('li')
 +
:addClass('nv-edit')
 +
:wikitext('[' .. title:fullUrl('action=edit') .. ' ')
 +
:tag(args.mini and 'abbr' or 'span')
 +
:attr('title', 'Edit this template')
 +
:cssText(args.fontstyle)
 +
:wikitext(args.mini and 'e' or 'edit')
 +
:done()
 +
:wikitext(']');
 
end
 
end
 
local navbar_style = args.style
 
local div = mw.html.create():tag('div')
 
div
 
:addClass(cfg.classes.navbar)
 
:addClass(cfg.classes.plainlinks)
 
:addClass(cfg.classes.horizontal_list)
 
:addClass(collapsible_class) -- we made the determination earlier
 
:cssText(navbar_style)
 
 
if is_mini then div:addClass(cfg.classes.mini) end
 
  
local box_text = (args.text or cfg.box_text) .. ' '
+
if args.brackets 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('margin-left', '-0.125em')
:cssText(font_style)
+
:cssText(args.fontstyle)
:wikitext(box_text)
+
:wikitext(']')
 +
:newline();
 
end
 
end
 
local template = args.template
 
local displayed_links = choose_links(template, args)
 
local has_brackets = args.brackets
 
local title_arg = get_title_arg(is_collapsible, template)
 
local title_text = args[title_arg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
 
local list = make_list(title_text, has_brackets, displayed_links, is_mini, font_style)
 
div:node(list)
 
  
if is_collapsible then
+
if args.collapsible then
local title_text_class
+
div
if is_mini then
+
:done()
title_text_class = cfg.classes.collapsible_title_mini
+
:tag('span')
else
+
:css('font-size', '110%')
title_text_class = cfg.classes.collapsible_title_full
+
:cssText(args.fontstyle)
end
 
div:done()
 
:tag('div')
 
:addClass(title_text_class)
 
:cssText(font_style)
 
 
: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)