Module:List: Difference between revisions

    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