Modul:Navbox with collapsible groups
Modul ini dilindungi. Modul ini sangat mencolok yang digunakan oleh banyak halaman, atau sangat sering disubstitusikan. Karena vandalisme atau kesalahan akan mempengaruhi banyak halaman, dan suntingan kecil dapat memberi beban besar pada server, modul ini dilindungi dari penyuntingan. |
Modul Lua ini digunakan pada sekitar 137.000 halaman. Untuk mencegah suntingan mengganggu skala besar dan beban peladen, setiap perubahan perlu diuji di subhalaman /bak pasir atau /kasus uji modul, atau bak pasir modul Anda. Perubahan yang diuji dapat ditambahkan ke halaman ini dalam satu suntingan. Pertimbangkan untuk mendiskusikan perubahan di halaman pembicaraan sebelum mengimplementasikannya. |
Penggunaan
Lihat {{navbox with collapsible groups}}.
-- This module implements {{Navbox with collapsible groups}} local q = {} local Navbox = require('Module:Navbox') -- helper functions local function concatstrings(s) local r = table.concat(s, '') if r:match('^%s*$') then r = nil end return r end local function concatstyles(s) local r = table.concat(s, ';') while r:match(';%s*;') do r = mw.ustring.gsub(r, ';%s*;', ';') end if r:match('^%s*;%s*$') then r = nil end return r end function q._navbox(pargs) -- table for args passed to navbox local targs = {} -- process args local passthrough = { ['name']=true,['navbar']=true,['state']=true,['border']=true, ['bodyclass']=true,['groupclass']=true,['listclass']=true, ['style']=true,['bodystyle']=true,['basestyle']=true, ['title']=true,['titleclass']=true,['titlestyle']=true, ['above']=true,['aboveclass']=true,['abovestyle']=true, ['below']=true,['belowclass']=true,['belowstyle']=true, ['image']=true,['imageclass']=true,['imagestyle']=true, ['imageleft']=true,['imageleftstyle']=true } for k,v in pairs(pargs) do if k and type(k) == 'string' then if passthrough[k] then targs[k] = v elseif (k:match('^list[0-9][0-9]*$') or k:match('^content[0-9][0-9]*$') ) then local n = mw.ustring.gsub(k, '^[a-z]*([0-9]*)$', '%1') if (targs['list' .. n] == nil and pargs['group' .. n] == nil and pargs['sect' .. n] == nil and pargs['section' .. n] == nil) then targs['list' .. n] = concatstrings( {pargs['list' .. n] or '', pargs['content' .. n] or ''}) end elseif (k:match('^group[0-9][0-9]*$') or k:match('^sect[0-9][0-9]*$') or k:match('^section[0-9][0-9]*$') ) then local n = mw.ustring.gsub(k, '^[a-z]*([0-9]*)$', '%1') if targs['list' .. n] == nil then local titlestyle = concatstyles( {pargs['groupstyle'] or '',pargs['secttitlestyle'] or '', pargs['group' .. n .. 'style'] or '', pargs['section' .. n ..'titlestyle'] or ''}) local liststyle = concatstyles( {pargs['liststyle'] or '', pargs['contentstyle'] or '', pargs['list' .. n .. 'style'] or '', pargs['content' .. n .. 'style'] or ''}) local title = concatstrings( {pargs['group' .. n] or '', pargs['sect' .. n] or '', pargs['section' .. n] or ''}) local list = concatstrings( {pargs['list' .. n] or '', pargs['content' .. n] or ''}) local state = (pargs['abbr' .. n] and pargs['abbr' .. n] == pargs['selected']) and 'uncollapsed' or pargs['state' .. n] or 'collapsed' targs['list' .. n] = Navbox._navbox( {'child', navbar = 'plain', state = state, basestyle = pargs['basestyle'], title = title, titlestyle = titlestyle, list1 = list, liststyle = liststyle, listclass = pargs['list' .. n .. 'class'], image = pargs['image' .. n], imageleft = pargs['imageleft' .. n], listpadding = pargs['listpadding']}) end end end end -- ordering of style and bodystyle targs['style'] = concatstyles({targs['style'] or '', targs['bodystyle'] or ''}) targs['bodystyle'] = nil -- child or subgroup if targs['border'] == nil then targs['border'] = pargs[1] end return Navbox._navbox(targs) end function q.navbox(frame) local pargs = require('Module:Arguments').getArgs(frame, {wrappers = {'Template:Navbox with collapsible groups'}}) -- Read the arguments in the order they'll be output in, to make references number in the right order. local _ _ = pargs.title _ = pargs.above for i = 1, 20 do _ = pargs["group" .. tostring(i)] _ = pargs["list" .. tostring(i)] end _ = pargs.below return q._navbox(pargs) end return q