Modul:Navbar: Unterschied zwischen den Versionen

(If the documentation is accurate, this will use the namespace part of pageName first and fallback to Template if one isn't present, which is what we want.)
K (10 Versionen von wikivoyage:Modul:Navbar importiert)
 
(48 dazwischenliegende Versionen von 23 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
local p = {}
local p = {}


local HtmlBuilder = require('Module:HtmlBuilder')
local getArgs
local ul


function trim(s)
function p.addItem (mini, full, link, descrip, args, url)
    return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1"))
local l
if url then
l = {'[', '', ']'}
else
l = {'[[', '|', ']]'}
end
ul:tag('li')
:addClass('nv-'..full)
:wikitext(l[1] .. link .. l[2])
:tag(args.mini and 'abbr' or 'span')
:attr('title', descrip..' this template')
:cssText(args.fontstyle)
:wikitext(args.mini and mini or full)
:done()
:wikitext(l[3])
end
end


function _navbar( args )
function p.brackets (position, c, args, div)
    if not args[1] then
if args.brackets then
        local span = HtmlBuilder.create('span')
div
:tag('span')
        span
:css('margin-'..position, '-0.125em')
            .addClass('error')
:cssText(args.fontstyle)
            .css('float', 'left')
:wikitext(c)
            .css('white-space', 'nowrap')
end
            .wikitext('Error: No name provided')
end
 
        return span
function p._navbar(args)
    end
local show = {true, true, true, false, false, false}
local titleArg = 1
    local title;
    local pageName = trim(args[1])
if args.collapsible then
    if mw.ustring.sub(pageName, 1, 1) == ':' then
titleArg = 2
        title = mw.title.new( mw.ustring.sub(pageName, 2) );
if not args.plain then args.mini = 1 end
    else
if args.fontcolor then
        title = mw.title.new( pageName, 'Template' );
args.fontstyle = 'color:' .. args.fontcolor .. ';'
    end     
end
args.style = 'float:left; text-align:left'
    local mainpage = title.fullText;
end
    local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''
    local editurl = title:fullUrl( 'action=edit' );
if args.template then
titleArg = 'template'
    local viewLink, talkLink, editLink = 'view', 'talk', 'edit'
show = {true, false, false, false, false, false}
    if args.mini then
local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6, talk = 2, edit = 3, hist = 4, move = 5, watch = 6}
        viewLink, talkLink, editLink = 'v', 't', 'e'
for k,v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do
    end
local num = index[v]
if num then show[num] = true end
    local div = HtmlBuilder.create( 'div' )
end
    div
end
        .addClass( 'noprint' )
        .addClass( 'plainlinks' )
if args.noedit then show[3] = false end
        .addClass( 'hlist' )
        .addClass( 'navbar')
local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
        .cssText( args.style )
local title = mw.title.new(mw.text.trim(titleText), 'Template')
if not title then
    if args.mini then div.addClass('mini') end
error('Invalid title ' .. titleText)
end
    if not (args.mini or args.plain) then
local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''
        div
            .tag( 'span' )
local div = mw.html.create():tag('div')
                .css( 'word-spacing', 0 )
div
                .cssText( args.fontstyle )
:addClass('plainlinks')
                .wikitext( args.text or 'This box:' )
:addClass('hlist')
                .wikitext( ' ' )
:addClass('navbar')
    end
:cssText(args.style)
 
    if args.brackets then
if args.mini then div:addClass('mini') end
        div
 
            .tag('span')
if not (args.mini or args.plain) then
                .css('margin-right', '-0.125em')
div
                .cssText( args.fontstyle )
:tag('span')
                .wikitext( '[' )
:css('word-spacing', 0)
                .newline();
:cssText(args.fontstyle)
    end
:wikitext(args.text or 'This box:')
:wikitext(' ')
    local ul = div.tag('ul');
end
    ul
p.brackets('right', '[ ', args, div)
        .tag( 'li' )
            .addClass( 'nv-view' )
ul = div:tag('ul')
            .wikitext( '[[' .. mainpage .. '|' )
if show[1] then p.addItem('v', 'view', title.fullText, 'View', args) end
            .tag( 'span ' )
if show[2] then p.addItem('t', 'talk', talkpage, 'Discuss', args) end
                .attr( 'title', 'View this template' )
if show[3] then p.addItem('e', 'edit', title:fullUrl('action=edit'), 'Edit', args, true) end
                .cssText( args.fontstyle or '' )
if show[4] then p.addItem('h', 'hist', title:fullUrl('action=history'), 'History of', args, true) end
                .wikitext( viewLink )
if show[5] then
                .done()
local move = mw.title.new ('Special:Movepage')
            .wikitext( ']]' )
p.addItem('m', 'move', move:fullUrl('target='..title.fullText), 'Move', args, true) end
            .done()
if show[6] then p.addItem('w', 'watch', title:fullUrl('action=watch'), 'Watch', args, true) end
        .tag( 'li' )
            .addClass( 'nv-talk' )
p.brackets('left', ' ]', args, div)
            .wikitext( '[[' .. talkpage .. '|' )
            .tag( 'span ' )
if args.collapsible then
                .attr( 'title', 'Discuss this template' )
div
                .cssText( args.fontstyle or '' )
:done()
                .wikitext( talkLink )
:tag('div')
                .done()
:css('font-size', '114%')
            .wikitext( ']]' );
:css('margin', args.mini and '0 4em' or '0 7em')
:cssText(args.fontstyle)
    if not args.noedit then
:wikitext(args[1])
        ul
end
            .tag( 'li' )
 
                .addClass( 'nv-edit' )
return tostring(div:done())
                .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
    return tostring(div)
end
end


function p.navbar(frame)
function p.navbar(frame)
    local origArgs
if not getArgs then
    -- If called via #invoke, use the args passed into the invoking template.
getArgs = require('Module:Arguments').getArgs
    -- Otherwise, for testing purposes, assume args are being passed directly in.
end
    if frame == mw.getCurrentFrame() then
return p._navbar(getArgs(frame))
        origArgs = frame:getParent().args
    else
        origArgs = frame
    end
    -- ParserFunctions considers the empty string to be false, so to preserve the previous
    -- behavior of {{navbar}}, change any empty arguments to nil, so Lua will consider
    -- them false too.
    args = {}
    for k, v in pairs(origArgs) do
        if v ~= '' then
            args[k] = v
        end
    end
    return _navbar(args)
end
end
 
return p
return p

Aktuelle Version vom 27. Januar 2023, 05:54 Uhr

Die Dokumentation für dieses Modul kann unter Modul:Navbar/doc erstellt werden

local p = {}

local getArgs
local ul

function p.addItem (mini, full, link, descrip, args, url)
	local l
	if url then
		l = {'[', '', ']'}
	else
		l = {'[[', '|', ']]'}
	end
	ul:tag('li')
		:addClass('nv-'..full)
		:wikitext(l[1] .. link .. l[2])
		:tag(args.mini and 'abbr' or 'span')
			:attr('title', descrip..' this template')
			:cssText(args.fontstyle)
			:wikitext(args.mini and mini or full)
			:done()
		:wikitext(l[3])
end

function p.brackets (position, c, args, div)
	if args.brackets then
		div
			:tag('span')
				:css('margin-'..position, '-0.125em')
				:cssText(args.fontstyle)
				:wikitext(c)
	end
end

function p._navbar(args)
	local show = {true, true, true, false, false, false}
	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'
	end
	
	if args.template then
		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
	
	if args.noedit then show[3] = false end
	
	local titleText = 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 ''
	
	local div = mw.html.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
	
	p.brackets('right', '[ ', args, div)
	
	ul = div:tag('ul')
	if show[1] then p.addItem('v', 'view', title.fullText, 'View', args) end
	if show[2] then p.addItem('t', 'talk', talkpage, 'Discuss', args) end
	if show[3] then p.addItem('e', 'edit', title:fullUrl('action=edit'), 'Edit', args, true) end
	if show[4] then p.addItem('h', 'hist', title:fullUrl('action=history'), 'History of', args, true) end
	if show[5] then
		local move = mw.title.new ('Special:Movepage')
		p.addItem('m', 'move', move:fullUrl('target='..title.fullText), 'Move', args, true) end
	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')
			:css('font-size', '114%')
			:css('margin', args.mini and '0 4em' or '0 7em')
			:cssText(args.fontstyle)
			:wikitext(args[1])
	end

	return tostring(div:done())
end

function p.navbar(frame)
	if not getArgs then
		getArgs = require('Module:Arguments').getArgs
	end
	return p._navbar(getArgs(frame))
end

return p