m>Mr. Stradivarius |
m>Mr. Stradivarius |
Line 3: |
Line 3: |
|
| |
|
| local p = {} | | local p = {} |
| | |
| | local htmlBuilder = require('Module:HtmlBuilder') |
|
| |
|
| local function getListItem(data, style, itemStyle) | | local function getListItem(data, style, itemStyle) |
Line 8: |
Line 10: |
| return nil | | return nil |
| end | | end |
| if style or itemStyle then | | local item = htmlBuilder.create('li') |
| style = style or ''
| | item |
| itemStyle = itemStyle or ''
| | .cssText(style) |
| return mw.ustring.format( | | .cssText(itemStyle) |
| '<li style="%s%s">%s</li>',
| | .wikitext(data) |
| style, itemStyle, data
| | return tostring(item) |
| )
| |
| else
| |
| return mw.ustring.format( | |
| '<li>%s</li>',
| |
| data
| |
| )
| |
| end | |
| end | | end |
|
| |
|
Line 37: |
Line 32: |
| table.sort(nums) | | table.sort(nums) |
| return nums | | return nums |
| end
| |
|
| |
| local function getClass(listType, args)
| |
| local classes = {}
| |
| if listType == 'horizontal' or listType == 'horizontal_ordered' then
| |
| table.insert(classes, 'hlist')
| |
| elseif listType == 'unbulleted' then
| |
| table.insert(classes, 'plainlist')
| |
| end
| |
| table.insert(classes, args.class)
| |
| local ret
| |
| if #classes == 0 then
| |
| return nil
| |
| end
| |
| return mw.ustring.format(' class="%s"', table.concat(classes, ' '))
| |
| end
| |
|
| |
| local function getStyle(listType, args)
| |
| local styles = {}
| |
| if listType == 'horizontal' or listType == 'horizontal_ordered' then
| |
| local indent = args.indent and tonumber(indent)
| |
| indent = tostring((indent and indent * 1.6) or 0)
| |
| table.insert(styles, 'margin-left: ' .. indent .. 'em;')
| |
| end
| |
| local listStyleType = args['list-style-type']
| |
| if listStyleType then
| |
| table.insert(styles, 'list-style-type: ' .. listStyleType .. ';')
| |
| end
| |
| table.insert(styles, args.style)
| |
| if #styles == 0 then
| |
| return nil
| |
| end
| |
| return mw.ustring.format(' style="%s"', table.concat(styles, ' '))
| |
| end | | end |
|
| |
|
Line 88: |
Line 50: |
| return '' | | return '' |
| end | | end |
| -- Check if we need a ul tag or an ol tag, and get the start and type attributes for ordered lists. | | -- Build the list html. |
| local listTag = 'ul' | | local root = htmlBuilder.create('div') |
| local startAttr, typeAttr
| | if listType == 'horizontal' or listType == 'horizontal_ordered' then |
| if listType == 'ordered' or listType == 'horizontal_ordered' then | | root.addClass('hlist') |
| listTag = 'ol' | | elseif listType == 'unbulleted' then |
| startAttr = args.start | | root.addClass('plainlist') |
| if startAttr then
| | end |
| startAttr = ' start="' .. startAttr .. '"'
| | root.addClass(args.class) |
| end | | if listType == 'horizontal' or listType == 'horizontal_ordered' then |
| typeAttr = args.type | | local indent = args.indent and tonumber(indent) |
| if typeAttr then | | indent = tostring((indent and indent * 1.6) or 0) |
| typeAttr = ' type="' .. typeAttr .. '"'
| | root.css('margin-left', indent .. 'em') |
| end
| |
| end | | end |
| startAttr = startAttr or '' | | root.cssText(args.style) |
| typeAttr = typeAttr or ''
| | local list = root.tag((listType == 'ordered' or listType == 'horizontal_ordered') and 'ol' or 'ul') |
| -- Get the classes and styles and output the list. | | list |
| local class = getClass(listType, args) or ''
| | .attr('start', args.start) |
| local style = getStyle(listType, args) or ''
| | .attr('type', args.type) |
| local list_style = 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.
| | .css('list-style-type', args['list-style-type']) |
| list_style = list_style and (' style="' .. list_style .. '"') or ''
| | .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. |
| return mw.ustring.format(
| | .wikitext(table.concat(listItems)) |
| '<div%s%s><%s%s%s%s>%s</%s></div>',
| | return tostring(root) |
| class, style, listTag, startAttr, typeAttr, list_style, table.concat(listItems), listTag
| |
| ) | |
| end | | end |
|
| |
|