Module:List: Difference between revisions

Jump to navigation Jump to search
m>Mr. Stradivarius
m Protected Module:List: High-risk Lua module: ~1,100 transclusions ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite))
m>Mr. Stradivarius
add fix to make the start parameter work with horizontal ordered lists, and switch to Module:Arguments for argument processing
Line 4: Line 4:
local p = {}
local p = {}


local getArgs = require('Module:Arguments').getArgs
local htmlBuilder = require('Module:HtmlBuilder')
local htmlBuilder = require('Module:HtmlBuilder')


Line 22: Line 23:


local function getArgNums(args)
local function getArgNums(args)
-- Returns an array containing the keys of all positional arguments
-- Returns an array containing the keys of all positional arguments that contain data (i.e. non-whitespace values).
-- that contain data (i.e. non-whitespace values).
local nums = {}
local nums = {}
for k, v in pairs(args) do
for k, v in pairs(args) do
Line 84: Line 84:
-- Build the list tags and list items.
-- Build the list tags and list items.
local list = root.tag((listType == 'ordered' or listType == 'horizontal_ordered') and 'ol' or 'ul')
local list = root.tag((listType == 'ordered' or listType == 'horizontal_ordered') and 'ol' or 'ul')
local start = args.start
list
.attr('start', start)
if listType == 'horizontal_ordered' then
-- Apply fix to get start numbers working with horizontal ordered lists.
local startNum = tonumber(start)
if startNum then
list.css('counter-reset', 'listitem ' .. tostring(startNum - 1))
end
end
list
list
.attr('start', args.start)
.attr('type', typeAttr)
.attr('type', typeAttr)
.css('list-style-type', listStyleType)
.css('list-style-type', listStyleType)
Line 95: Line 104:
local function makeWrapper(listType)
local function makeWrapper(listType)
return function(frame)
return function(frame)
local origArgs
local args = getArgs(frame, {
if frame == mw.getCurrentFrame() then
valueFunc = function (key, value)
origArgs = frame:getParent().args
if type(key) == 'number' or value ~= '' then
for k, v in pairs(frame.args) do
return value
origArgs = frame.args
end
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
end
})
return p.makeList(listType, args)
return p.makeList(listType, args)
end
end