Module:Unbulleted list

From Sapphire Wiki
Revision as of 06:30, 1 November 2013 by Bryan (talk | contribs) (1 revision)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

-- This module implements and .

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(

'

  • %s
  • ', style, itemStyle, data ) else return mw.ustring.format( '

  • %s
  • ', 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',

           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' )
    

    }