Hopp til innhold

Modul:Navbar

Fra Wikipedia, den frie encyklopedi
Moduldokumentasjon

localp={}
localcfg=mw.loadData('Module:Navbar/configuration')

localfunctionget_title_arg(is_collapsible,template)
localtitle_arg=1
ifis_collapsiblethentitle_arg=2end
iftemplatethentitle_arg='template'end
returntitle_arg
end

localfunctionchoose_links(template,args)
-- The show table indicates the default displayed items.
-- view, talk, edit, hist, move, watch
-- TODO: Move to configuration.
localshow={true,true,true,false,false,false}
iftemplatethen
show[2]=false
show[3]=false
localindex={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_,vinipairs(require('Module:TableTools').compressSparseArray(args))do
localnum=index[v]
ifnumthenshow[num]=trueend
end
end

localremove_edit_link=args.noedit
ifremove_edit_linkthenshow[3]=falseend

returnshow

end

localfunctionadd_link(link_description,ul,is_mini,font_style)
locall
iflink_description.urlthen
l={'[','',']'}
else
l={'[[','|',']]'}
end
ul:tag('li')
:addClass('nv-'..link_description.full)
:wikitext(l[1]..link_description.link..l[2])
:tag(is_miniand'abbr'or'span')
:attr('title',link_description.html_title)
:cssText(font_style)
:wikitext(is_miniandlink_description.miniorlink_description.full)
:done()
:wikitext(l[3])
:done()
end

localfunctionmake_list(title_text,has_brackets,displayed_links,is_mini,font_style)

localtitle=mw.title.new(mw.text.trim(title_text),cfg.title_namespace)
ifnottitlethen
error(cfg.invalid_title..title_text)
end
localtalkpage=title.talkPageTitleandtitle.talkPageTitle.fullTextor''

-- TODO: Get link_descriptions and show into the configuration module.
-- link_descriptions should be easier...
locallink_descriptions={
{['mini']='v',['full']='vis',['html_title']='Vis denne malen',
['link']=title.fullText,['url']=false},
{['mini']='d',['full']='diskuter',['html_title']='Diskuter denne malen',
['link']=talkpage,['url']=false},
{['mini']='r',['full']='rediger',['html_title']='Rediger denne malen',
['link']=title:fullUrl('action=edit'),['url']=true},
{['mini']='h',['full']='historikk',['html_title']='Revisjonshistorikk for denne malen',
['link']=title:fullUrl('action=history'),['url']=true},
{['mini']='f',['full']='flytt',['html_title']='Flytt denne malen',
['link']=mw.title.new('Special:Movepage'):fullUrl('target='..title.fullText),['url']=true},
{['mini']='O',['full']='Overvåkning',['html_title']='Overvåk denne malen',
['link']=title:fullUrl('action=watch'),['url']=true}
}

localul=mw.html.create('ul')
ifhas_bracketsthen
ul:addClass(cfg.classes.brackets)
:cssText(font_style)
end

fori,_inipairs(displayed_links)do
ifdisplayed_links[i]thenadd_link(link_descriptions[i],ul,is_mini,font_style)end
end
returnul:done()

end

functionp._navbar(args)

-- TODO: We probably don't need both fontstyle and fontcolor...
localfont_style=args.fontstyle
localfont_color=args.fontcolor
localis_collapsible=args.collapsible
localis_mini=args.mini
localis_plain=args.plain

localcollapsible_class=nil
ifis_collapsiblethen
collapsible_class=cfg.classes.collapsible
ifnotis_plainthenis_mini=1end
iffont_colorthen
font_style=(font_styleor'')..'; color: '..font_color..';'
end
end

localnavbar_style=args.style
localdiv=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)

ifis_minithendiv:addClass(cfg.classes.mini)end

localbox_text=(args.textorcfg.box_text)..' '
-- the concatenated space guarantees the box text is separated
ifnot(is_minioris_plain)then
div
:tag('span')
:addClass(cfg.classes.box_text)
:cssText(font_style)
:wikitext(box_text)
end

localtemplate=args.template
localdisplayed_links=choose_links(template,args)
localhas_brackets=args.brackets
localtitle_arg=get_title_arg(is_collapsible,template)
localtitle_text=args[title_arg]or(':'..mw.getCurrentFrame():getParent():getTitle())
locallist=make_list(title_text,has_brackets,displayed_links,is_mini,font_style)
div:node(list)

ifis_collapsiblethen
localtitle_text_class
ifis_minithen
title_text_class=cfg.classes.collapsible_title_mini
else
title_text_class=cfg.classes.collapsible_title_full
end
div:done()
:tag('div')
:addClass(title_text_class)
:cssText(font_style)
:wikitext(args[1])
end

returnmw.getCurrentFrame():extensionTag{
name='templatestyles',args={src=cfg.templatestyles}
}..tostring(div:done())
end

functionp.navbar(frame)
returnp._navbar(require('Module:Arguments').getArgs(frame))
end

returnp