Module:List: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
(Undid revision 581617993 by Mr. Stradivarius (talk) actually, this is no longer necessary due to changes in Module:Random) |
(optional item_valueX for Brigadoon (The Ancestors album)) |
||
Line 6: | Line 6: | ||
local htmlBuilder = require('Module:HtmlBuilder') |
local htmlBuilder = require('Module:HtmlBuilder') |
||
local function getListItem(data, style, itemStyle) |
local function getListItem(data, style, itemStyle, itemValue) |
||
if not data then |
if not data then |
||
return nil |
return nil |
||
Line 15: | Line 15: | ||
.cssText(itemStyle) |
.cssText(itemStyle) |
||
.wikitext(data) |
.wikitext(data) |
||
if(itemValue) then |
|||
item.attr(value,itemValue) |
|||
end |
|||
return tostring(item) |
return tostring(item) |
||
end |
end |
||
Line 43: | Line 46: | ||
args[num], |
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 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)] |
args['item_style' .. tostring(num)] or args['li_style' .. tostring(num)], |
||
args['item_value' .. tostring(num)] |
|||
) |
) |
||
table.insert(listItems, item) |
table.insert(listItems, item) |
Revision as of 16:33, 14 November 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, itemValue)
if not data then
return nil
end
local item = htmlBuilder.create('li')
item
.cssText(style)
.cssText(itemStyle)
.wikitext(data)
if(itemValue) then
item.attr(value,itemValue)
end
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)],
args['item_value' .. 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