Open main menu

Changes

Module:Navbar

1,997 bytes added, 00:35, 8 December 2020
some refactoring + templatestyles
local p = {}
local cfg = mw.loadData('Module:Navbar/configuration')
local getArgsfunction get_title_arg(is_collapsible, template) local ultitle_arg = 1 if is_collapsible then title_arg = 2 end if template then title_arg = 'template' end return title_argend
local function pchoose_links(template, args) -- The show table indicates the default displayed items.addItem (mini -- 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, fullhist = 4, linkmove = 5, descripwatch = 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, urlfont_style)
local l
if link_description.url then
l = {'[', '', ']'}
else
end
ul:tag('li')
:addClass('nv-'.. link_description.full) :wikitext(l[1] .. link_description. link .. l[2]) :tag(args.mini is_mini and 'abbr' or 'span') :attr('title', descriplink_description..' this template'html_title) :cssText(args.fontstylefont_style) :wikitext(argsis_mini and link_description.mini and mini or link_description.full)
:done()
:wikitext(l[3])
:done()
end
local function p.brackets make_list(positiontitle_text, has_brackets, displayed_links, cis_mini, argsfont_style) local title = mw.title.new(mw.text.trim(title_text), divcfg.title_namespace) if argsnot title then error(cfg.invalid_title .. title_text) 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.brackets thenfullText, ['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 }, div{ ['mini'] = 'h', ['full'] = 'hist', ['html_title'] = 'History of this template', ['link'] = title:tagfullUrl('spanaction=history'), ['url'] = true }, { ['mini'] = 'm', ['full'] = 'move', ['html_title'] = 'Move this template', ['link'] = mw.title.new('Special:Movepage'):cssfullUrl('margin-target='..positiontitle.fullText), ['url'] = true }, { ['mini'] = 'w', ['full'] = 'watch', ['html_title'] = 'Watch this template', ['link'] = title:fullUrl('action=watch'), ['url'-0] = true } }  local ul = mw.html.125emcreate('ul') if has_brackets then ul:cssTextaddClass(argscfg.classes.fontstylebrackets) :wikitextcssText(cfont_style) 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 show = {true, true, true, false, false, false}
local titleArg = 1
if args-- TODO: We probably don't need both fontstyle and fontcolor...collapsible then titleArg local font_style = 2 if not args.plain then args.mini fontstyle local font_color = 1 end if args.fontcolor then local is_collapsible = args.fontstyle collapsible local is_mini = 'color:' .. args.fontcolor .. ';'mini end local is_plain = args.style = 'float:left; text-align:left' endplain
local collapsible_class = nil if args.template is_collapsible then titleArg collapsible_class = 'template'cfg.classes.collapsible show if not is_plain then is_mini = {true, false, false, false, false, false}1 end local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6, talk = 2, edit = 3, hist = 4, move = 5, watch if font_color then font_style = 6} for k,v in ipairs(require (font_style or '') .. 'Module; color:TableTools').compressSparseArray(args)) do local num = index[v] if num then show[num] = true end. font_color .. ';'
end
end
if args.noedit then show[3] = false end local titleText navbar_style = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle()) local title = mw.title.new(mw.text.trim(titleText), 'Template') if not title then error('Invalid title ' .. titleText) end local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or '' style
local div = mw.html.create():tag('div')
div
:addClass('cfg.classes.navbar) :addClass(cfg.classes.plainlinks') :addClass('hlist'cfg.classes.horizontal_list) :addClass('navbar'collapsible_class)-- we made the determination earlier :cssText(args.stylenavbar_style)
if args.mini is_mini then div:addClass('cfg.classes.mini') end
if not local box_text = (args.mini text or argscfg.box_text) ..plain' ' -- the concatenated space guarantees the box text is separated if not (is_mini or is_plain) then
div
:tag('span')
:cssaddClass('word-spacing', 0cfg.classes.box_text) :cssText(args.fontstyle) :wikitext(args.text or 'This box:'font_style) :wikitext(' 'box_text)
end
plocal template = args.bracketstemplate local displayed_links = choose_links('right', '[ 'template, args, div) local has_brackets = args.brackets ul local title_arg = div:tagget_title_arg('ul'is_collapsible, template) if showlocal title_text = args[1title_arg] then p.addItemor ('v:', 'view', title.fullText, 'View', args. mw.getCurrentFrame():getParent() end if show[2] then p.addItem:getTitle('t', 'talk', talkpage, 'Discuss', args) end) if show[3] then p.addItemlocal list = make_list('e'title_text, 'edit'has_brackets, title:fullUrl('action=edit'), 'Edit'displayed_links, argsis_mini, truefont_style) end if show[4] then p.addItem('h', 'hist', titlediv:fullUrlnode('action=history'list), 'History of', args, true) end  if show[5] is_collapsible then local move title_text_class if is_mini then title_text_class = mwcfg.titleclasses.new ('Special:Movepage')collapsible_title_mini p.addItem('m', 'move', move:fullUrl('targetelse title_text_class ='cfg.classes.title.fullText), 'Move', args, true) endcollapsible_title_full if show[6] then p.addItem('w', 'watch', title:fullUrl('action=watch'), 'Watch', args, true) end p.brackets('left', ' ]', args, div) if args.collapsible then div :done() :tag('div') :cssaddClass('font-size', '114%') :css('margin', args.mini and '0 4em' or '0 7em'title_text_class) :cssText(args.fontstylefont_style)
:wikitext(args[1])
end
return mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = cfg.templatestyles } } .. tostring(div:done())
end
function p.navbar(frame)
if not getArgs then getArgs = return p._navbar(require('Module:Arguments').getArgs end return p._navbar(getArgs(frame))
end
return p
Anonymous user