Implementa {{ Navbox con grupos colapsables }}
{{#invoke:Navbox with collapsible groups|navbox}}
Consulte Plantilla:Navbox con grupos colapsables para obtener un uso más detallado.
-- Este módulo implementa {{Navbox con grupos colapsables}} require ( 'strict' ) local p = {} local parentCfg = mw . loadData ( 'Módulo:Navbox/configuración' ) local thisCfg = mw . loadData ( 'Módulo:Navbox con grupos colapsables/configuración' ) local cfg = {} para k , v en pares ( thisCfg ) hacer si tipo ( v ) == 'tabla' entonces cfg [ k ] = {} si tipo ( parentCfg [ k ]) == 'tabla' entonces para kk , vv en pares ( parentCfg [ k ]) hacer cfg [ k ][ kk ] = vv fin fin para kk , vv en pares ( v ) hacer cfg [ k ][ kk ] = vv fin fin fin local inArray = require ( "Módulo:TableTools" ). inArray local getArgs -- inicializado de forma diferida -- funciones auxiliares local andnum = function ( s , n ) return string.format ( cfg . arg [ s .. '_and_num' ], n ) end local isblank = function ( v ) return ( v o '' ) == '' end local function concatstrings ( s ) local r = table.concat ( s , '' ) if r : match ( '^%s*$' ) entonces devuelve nil fin devuelve r fin de la función local concatstyles ( s ) local r = '' para _ , v en ipairs ( s ) hacer v = mw . text . trim ( v , "%s;" ) si no está en blanco ( v ) entonces r = r .. v .. ';' fin fin si está en blanco ( r ) entonces devuelve nil fin devuelve r fin de la función local obtenerSubgrupo ( args , listnum , listText ) local subArgs = { [ cfg . arg . border ] = cfg . keyword . border_subgroup , [ cfg . arg . navbar ] = cfg . keyword . navbar_plain } local hasSubArgs = false para k , v en pares ( args ) hacer k = tostring ( k ) para _ , w en ipairs ( cfg . keyword . subgroups ) hacer w = w .. listnum .. "_" si ( # k > # w ) y ( k : sub ( 1 , # w ) == w ) entonces subArgs [ k : sub ( # w + 1 )] = v hasSubArgs = true end end end return hasSubArgs y p . _navbox ( subArgs ) o listText end -- Funciones principales p . _navbox = require ( 'Module:Navbox' ). Función _navbox p . _withCollapsibleGroups ( pargs ) -- tabla para los argumentos pasados a navbox local targs = {} -- procesar argumentos local passthrough = { [ cfg . arg . above ] = true ,[ cfg . arg . aboveclass ] = true ,[ cfg . arg . abovestyle ] = true , [ cfg . arg . basestyle ] = true , [ cfg . arg . below ] = true ,[ cfg . arg . belowclass ] = true ,[ cfg . arg . belowstyle ] = true , [ cfg . arg . bodyclass ] = true ,[ cfg . arg . bodystyle ] = verdadero , [ cfg.arg.border ] = verdadero , [ cfg.arg.groupclass ] = verdadero , [ cfg.arg.image ] = verdadero , [ cfg.arg.imageclass ] = verdadero , [ cfg.arg.imagestyle ] = verdadero , [ cfg.arg.imageleft ] = verdadero , [ cfg.arg.imageleftstyle ] = verdadero , [ cfg.arg.listclass ] = verdadero , [ cfg.arg.name ] = verdadero , [ cfg.arg.navbar ] = verdadero , [ cfg.arg.state ] = verdadero , [ cfg.arg.style ] = verdadero , [ cfg.arg.title ] = verdadero , [ cfg.arg.titleclass ] = verdadero , [ cfg.arg . titlestyle ] = true } para k , v en pares ( pargs ) hacer si k y type ( k ) == 'string' entonces si passthrough [ k ] entonces targs [ k ] = v elseif ( k : match ( cfg . pattern . num )) entonces local n = k : match ( cfg . pattern . num ) local list_and_num = andnum ( 'list' , n ) si (( k : match ( cfg . pattern . listnum ) o k : match ( cfg . pattern . contentnum )) y targs [ list_and_num ] == nil y pargs [ andnum ( 'grupo' , n )] == nulo y pargs [ andnum ( 'sección' , n )] == nulo y pargs [ andnum ( 'sección' , n )] == nulo ) entonces targs [ lista_y_num ] = concatstrings ({ pargs [ lista_y_num ] o '' , pargs [ andnum ( 'contenido' , n )] o '' }) si ( targs [ lista_y_num ] y inArray ( cfg . palabra clave . subgrupos , targs [ lista_y_num ])) entonces targs [ lista_y_num ] = getSubgroup ( pargs , n , targs [ lista_y_num ]) fin elseif (( k : match ( cfg . patrón . número_grupo ) o k : match ( cfg . patrón . número_sección ) o k : match ( cfg . patrón . sectionnum )) y targs [ list_and_num ] == nil ) entonces estilo_título local = concatstyles ({ pargs [ cfg . arg . groupstyle ] o '' , pargs [ cfg . arg . secttitlestyle ] o '' , pargs [ andnum ( 'groupstyle' , n )] o '' , pargs [ andnum ( 'sectiontitlestyle' , n )] o '' }) estilo de lista local = concatenar estilos ({ pargs [ cfg . arg . liststyle ] o '' , pargs [ cfg . arg . contentstyle ] o '' , pargs [ andnum ( 'liststyle' , n )] o '' , pargs [ andnum ( 'contentstyle' , n )] o '' }) título local = concatenar cadenas ({ pargs [ andnum ( 'grupo' , n )] o '' , pargs [ andnum ( 'secta' , n )] o '' , pargs [ andnum ( 'sección' , n )] o '' }) lista local = concatenar cadenas ({ pargs [ list_and_num ] o '' , pargs [ andnum ( 'contenido' , n )] o '' }) si lista y inArray ( cfg . keyword . subgroups , lista ) entonces lista = obtenerSubgrupo ( pargs , n , lista ) fin local abbr_and_num = andnum ( 'abbr' , n ) estado local = ( pargs [ abbr_and_num ] y pargs [ abbr_and_num ] == pargs [ cfg . arg . selected ]) y cfg . keyword .estado_sin_colgar o ( pargs [ andnum ( 'estado' , n )] o cfg . palabra clave . estado_collapsed ) targs [ lista_y_num ] = p . _navbox ({ cfg . keyword . border_child , [ cfg . arg . navbar ] = cfg . keyword . navbar_plain , [ cfg . arg . state ] = state , [ cfg . arg . basestyle ] = pargs [ cfg . arg . basestyle ], [ cfg . arg . title ] = title , [ cfg . arg . titlestyle ] = titlestyle , [ andnum ( 'lista' , 1 )] = lista , [ cfg . arg . liststyle ] = liststyle , [ cfg . arg . listclass ] = pargs [ andnum ( 'clase de lista' , n )], [ cfg . arg . image ] = pargs [ andnum ( 'imagen' , n )], [ cfg . arg . imageleft ] = pargs [ andnum ( 'imageleft' , n )], [ cfg . arg . listpadding ] = pargs [ cfg . arg . listpadding ] }) end end end end -- orden de estilo y bodystyle targs [ cfg . arg . style ] = concatstyles ({ targs [ cfg . arg . style ] o '' , targs [ cfg . arg . bodystyle ] o '' }) targs [ cfg . arg . bodystyle ] = nil -- hijo o subgrupo si targs [ cfg . arg . border ] == nil entonces targs [ cfg . arg . border ] = pargs [ 1 ] fin de retorno p . _navbox ( targs ) fin -- Puntos de entrada de plantilla función p . navbox ( frame , boxtype ) función local readArgs ( args , prefix ) -- Lee los argumentos en el orden en que se mostrarán, para hacer referencias -- numera en el orden correcto. local _ _ = args [ prefijo .. cfg . arg . title ] _ = args [ prefijo .. cfg . arg . arriba ] - Limite esto a 20 ya que cubre 'la mayoría' de los casos (eso es un SWAG) y porque - el enfoque del iterador no funcionará aquí para i = 1 , 20 do _ = args [ prefijo .. andnum ( 'grupo' , i )] if inArray ( cfg . keyword . subgroups , args [ prefijo .. andnum ( 'lista' , i )]) then for _ , v in ipairs ( cfg . keyword . subgroups ) do readArgs ( args , prefijo .. v .. i .. "_" ) fin fin fin _ = args [ prefijo .. cfg . arg . debajo ] fin si no getArgs entonces getArgs = require ( 'Módulo:Argumentos' ). getArgs fin local args = getArgs ( frame , { wrappers = { cfg . pattern [ boxtype o 'navbox' ]}}) readArgs ( args , "" ) return p [ '_' .. ( boxtype o 'navbox' )]( args ) fin p [ 'con grupos colapsables' ] = function ( frame ) return p . navbox ( frame , 'conGruposColapsables' ) fin local q = {} q . _navbox = p . _conGruposColapsables q . navbox = p [ 'con grupos colapsables' ] return q