| Latest revision |
Your text |
| Line 16: |
Line 16: |
| wrapper = {'Template:Nested Lists'} | | wrapper = {'Template:Nested Lists'} |
| }) | | }) |
| | |
| return p._main(args) | | return p._main(args) |
| end | | end |
| Line 22: |
Line 23: |
| local input = args[1] or '' | | local input = args[1] or '' |
| local link = args.link == '1' | | local link = args.link == '1' |
| local iconFormat = args.icon
| |
| local iconMain = args.icon_main == '1'
| |
| local iconSize = args.icon_size or '25'
| |
|
| |
| -- Allow icon_size to be written as either 25 or 25px.
| |
| iconSize = mw.text.trim(tostring(iconSize))
| |
| iconSize = mw.ustring.gsub(iconSize, '[pP][xX]$', '')
| |
| if iconSize == '' then
| |
| iconSize = '25'
| |
| end
| |
|
| |
|
| local output = {} | | local output = {} |
| Line 43: |
Line 34: |
| local text = item | | local text = item |
|
| |
|
| -- Determine indentation marker. | | -- Check for indentation marker. |
| local prefix = mw.ustring.sub(item, 1, 2) | | local prefix = mw.ustring.sub(item, 1, 2) |
| if levels[prefix] ~= nil then | | |
| | if levels[prefix] then |
| marker = prefix | | marker = prefix |
| text = mw.text.trim(mw.ustring.sub(item, 3)) | | text = mw.text.trim(mw.ustring.sub(item, 3)) |
| Line 52: |
Line 44: |
| local level = levels[marker] or 0 | | local level = levels[marker] or 0 |
|
| |
|
| -- [no] disables the icon for this item. | | -- Link the item if requested and the page exists. |
| local noIcon = false
| | if link and exists.checkExists(text) then |
| local customIcon = nil
| | text = '[[' .. text .. ']]' |
| | |
| if mw.ustring.sub(text, 1, 4) == '[no]' then
| |
| noIcon = true
| |
| text = mw.text.trim(mw.ustring.sub(text, 5))
| |
| else
| |
| -- [Icon Name.png] specifies a custom icon.
| |
| local customIconName, remainingText =
| |
| mw.ustring.match(text, '^%[([^%]]+)%]%s*(.*)$')
| |
| | |
| if customIconName then
| |
| customIcon = mw.text.trim(customIconName)
| |
| text = mw.text.trim(remainingText)
| |
| end
| |
| end
| |
| | |
| -- Separate page target and display label.
| |
| local target = text
| |
| local label = text
| |
| local separator = mw.ustring.find(text, '|', 1, true)
| |
| | |
| if separator then
| |
| target = mw.text.trim(mw.ustring.sub(text, 1, separator - 1))
| |
| label = mw.text.trim(mw.ustring.sub(text, separator + 1))
| |
| end
| |
| | |
| -- Check whether the target page exists.
| |
| local pageExists = false
| |
| | |
| if link and target ~= '' then | |
| pageExists = exists.checkExists(target)
| |
| end
| |
| | |
| -- Generate the icon.
| |
| local icon = ''
| |
| | |
| if not noIcon then
| |
| local iconName = customIcon
| |
| | |
| -- Use the global icon format unless icon_main is enabled
| |
| -- and this is not a level 0 item.
| |
| if not iconName and iconFormat and iconFormat ~= '' and (not iconMain or level == 0) then
| |
| iconName = mw.ustring.gsub(
| |
| iconFormat,
| |
| '{item}',
| |
| function()
| |
| return target
| |
| end
| |
| )
| |
| end
| |
| | |
| if iconName and iconName ~= '' then
| |
| -- Check whether the requested icon exists.
| |
| if not exists.checkExists('File:' .. iconName) then
| |
| iconName = 'Unknown.png'
| |
| end
| |
| | |
| -- Link the icon to the item page if it exists.
| |
| if pageExists then
| |
| icon = string.format(
| |
| '[[File:%s|%spx|link=%s]]',
| |
| iconName,
| |
| iconSize,
| |
| target
| |
| )
| |
| else
| |
| icon = string.format(
| |
| '[[File:%s|%spx]]',
| |
| iconName,
| |
| iconSize
| |
| )
| |
| end
| |
| end | |
| end
| |
| | |
| -- Generate the text.
| |
| local displayText = label
| |
| | |
| if pageExists then
| |
| displayText = '[[' .. target .. '|' .. label .. ']]'
| |
| end
| |
| | |
| -- Combine icon and text.
| |
| local content = displayText
| |
| | |
| if icon ~= '' then
| |
| content = icon .. ' ' .. displayText
| |
| end | | end |
|
| |
|
| table.insert( | | table.insert( |
| output, | | output, |
| string.rep('*', level + 1) .. ' ' .. content | | string.rep('*', level + 1) .. ' ' .. text |
| ) | | ) |
| end | | end |