Modul:Unbulleted list
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. |
-- 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' )
}