Module:List: Difference between revisions
From Mariopedia, a wiki on Mario, Yoshi, Wario, Donkey Kong, Super Smash Bros., and more!
Jump to navigationJump to search
Content deleted Content added
change the "type" parameter to the slightly less generic "marker" |
Undid revision 581617993 by Mr. Stradivarius (talk) actually, this is no longer necessary due to changes in Module:Random |
||
Line 67: | Line 67: | ||
list |
list |
||
.attr('start', args.start) |
.attr('start', args.start) |
||
.attr('type', args. |
.attr('type', args.type) |
||
.css('list-style-type', args.list_style_type or args['list-style-type']) |
.css('list-style-type', args.list_style_type or args['list-style-type']) |
||
.cssText(args.list_style or args.ul_style or args.ol_style) -- ul_style and ol_style are included for backwards compatibility. No distinction is made for ordered or unordered lists. |
.cssText(args.list_style or args.ul_style or args.ol_style) -- ul_style and ol_style are included for backwards compatibility. No distinction is made for ordered or unordered lists. |
Revision as of 13:23, November 14, 2013
Documentation for this module may be created at Module:List/doc
-- This module outputs different kinds of lists. At the moment, bulleted, unbulleted,
-- horizontal, ordered, and horizontal ordered lists are supported.
local p = {}
local htmlBuilder = require('Module:HtmlBuilder')
local function getListItem(data, style, itemStyle)
if not data then
return nil
end
local item = htmlBuilder.create('li')
item
.cssText(style)
.cssText(itemStyle)
.wikitext(data)
return tostring(item)
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
function p.makeList(listType, args)
-- This is the main function to be called from other Lua modules.
-- First, get the list items.
local listItems = {}
local argNums = getArgNums(args)
for i, num in ipairs(argNums) do
local item = getListItem(
args[num],
args.item_style or args.li_style, -- li_style is included for backwards compatibility. item_style was included to be easier to understand for non-coders.
args['item_style' .. tostring(num)] or args['li_style' .. tostring(num)]
)
table.insert(listItems, item)
end
if #listItems == 0 then
return ''
end
-- Build the list html.
local root = htmlBuilder.create('div')
if listType == 'horizontal' or listType == 'horizontal_ordered' then
root.addClass('hlist')
elseif listType == 'unbulleted' then
root.addClass('plainlist')
end
root.addClass(args.class)
if listType == 'horizontal' or listType == 'horizontal_ordered' then
local indent = tonumber(args.indent)
indent = tostring((indent and indent * 1.6) or 0)
root.css('margin-left', indent .. 'em')
end
root.cssText(args.style)
local list = root.tag((listType == 'ordered' or listType == 'horizontal_ordered') and 'ol' or 'ul')
list
.attr('start', args.start)
.attr('type', args.type)
.css('list-style-type', args.list_style_type or args['list-style-type'])
.cssText(args.list_style or args.ul_style or args.ol_style) -- ul_style and ol_style are included for backwards compatibility. No distinction is made for ordered or unordered lists.
.wikitext(table.concat(listItems))
return tostring(root)
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 p.makeList(listType, args)
end
end
local funcNames = {'bulleted', 'unbulleted', 'horizontal', 'ordered', 'horizontal_ordered'}
for _, funcName in ipairs(funcNames) do
p[funcName] = makeWrapper(funcName)
end
return p