If you find this page useful and would like to be notified of changes made to this page, start by inputting your email below.
powered by ChangeDetection
Documentation for this module may be created at Module:Unbulleted list/doc
-- This module implements {{unbulleted list}} and {{hlist}}. local function getListItem( data, style, itemStyle ) if not data then return nil end if style or itemStyle then style = style or '' itemStyle = itemStyle or '' return mw.ustring.format( '<li style="%s%s">%s</li>', style, itemStyle, data ) else return mw.ustring.format( '<li>%s</li>', data ) end end local function getArgNums( args ) -- Returns an array containing the keys of all positional arguments -- that contain data (i.e. non-whitespace values). local nums = {} for k, v in pairs( args ) do if type( k ) == 'number' and k >= 1 and math.floor( k ) == k and mw.ustring.match( v, '%S' ) then table.insert( nums, k ) end end table.sort( nums ) return nums end local function getClass( listType, class ) local classes = {} if listType == 'hlist' then table.insert( classes, 'hlist' ) end table.insert( classes, 'plainlist' ) table.insert( classes, class ) local ret if #classes == 0 then return nil end return mw.ustring.format( ' class="%s"', table.concat( classes, ' ' ) ) end local function getStyle( listType, indent, style ) local styles = {} if listType == 'hlist' then indent = indent and tonumber( indent ) indent = tostring( ( indent and indent * 1.6 ) or 0 ) table.insert( styles, 'margin-left: ' .. indent .. 'em;' ) end table.insert( styles, style ) if #styles == 0 then return nil end return mw.ustring.format( ' style="%s"', table.concat( styles, ' ' ) ) end local function buildList( args, listType ) local listItems = {} local argNums = getArgNums( args ) for i, num in ipairs( argNums ) do local item = getListItem( args[ num ], args.li_style, args[ 'li_style' .. tostring( num ) ] ) table.insert( listItems, item ) end if #listItems == 0 then return '' end local class = getClass( listType, args.class ) or '' local style = getStyle( listType, args.indent, args.style ) or '' local ulStyle = ( args.ul_style and ( ' style="' .. args.ul_style .. '"' ) ) or '' return mw.ustring.format( '<div%s%s><ul%s>%s</ul></div>', class, style, ulStyle, table.concat( listItems ) ) end local function makeWrapper( listType ) return function( frame ) local origArgs if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args for k, v in pairs( frame.args ) do origArgs = frame.args break end else origArgs = frame end local args = {} for k, v in pairs( origArgs ) do if type( k ) == 'number' or v ~= '' then args[ k ] = v end end return buildList( args, listType ) end end return { hlist = makeWrapper( 'hlist' ), unbulleted = makeWrapper( 'unbulleted' ) }