|
|
(One intermediate revision by one other user not shown) |
Line 10: |
Line 10: |
| local mHatlist = require('Module:Hatnote list') | | local mHatlist = require('Module:Hatnote list') |
| local mArguments --initialize lazily | | local mArguments --initialize lazily |
| | local yesno --initialize lazily |
| local p = {} | | local p = {} |
|
| |
|
Line 18: |
Line 19: |
| prefixes = {'label', 'label ', 'l'}, | | prefixes = {'label', 'label ', 'l'}, |
| template = 'Module:Labelled list hatnote' | | template = 'Module:Labelled list hatnote' |
| | } |
| | |
| | -- Localizable message strings |
| | local msg = { |
| | errorSuffix = '#Errors', |
| | noInputWarning = 'no page names specified', |
| | noOutputWarning = |
| | "'''[[%s]] — no output: none of the target pages exist.'''" |
| } | | } |
|
| |
|
Line 26: |
Line 35: |
| -- They each have numbers auto-appended, e.g. 'label1', 'label 1', & 'l1' | | -- They each have numbers auto-appended, e.g. 'label1', 'label 1', & 'l1' |
| prefixes = prefixes or defaults.prefixes | | prefixes = prefixes or defaults.prefixes |
| local pages = {} | | local indices = {} |
| | local sparsePages = {} |
| for k, v in pairs(args) do | | for k, v in pairs(args) do |
| if type(k) == 'number' then | | if type(k) == 'number' then |
| | indices[#indices + 1] = k |
| local display | | local display |
| for i = 1, #prefixes do | | for i = 1, #prefixes do |
Line 34: |
Line 45: |
| if display then break end | | if display then break end |
| end | | end |
| local page = display and | | sparsePages[k] = display and |
| string.format('%s|%s', string.gsub(v, '|.*$', ''), display) or v | | string.format('%s|%s', string.gsub(v, '|.*$', ''), display) or v |
| pages[#pages + 1] = page
| |
| end | | end |
| end | | end |
| | table.sort(indices) |
| | local pages = {} |
| | for k, v in ipairs(indices) do pages[#pages + 1] = sparsePages[v] end |
| return pages | | return pages |
| | end |
| | |
| | --Helper function to get a page target from a processed page string |
| | --e.g. "Page|Label" → "Page" or "Target" → "Target" |
| | local function getTarget(pagename) |
| | local pipe = string.find(pagename, '|') |
| | return string.sub(pagename, 0, pipe and pipe - 1 or nil) |
| end | | end |
|
| |
|
Line 49: |
Line 69: |
| function p.labelledList (frame) | | function p.labelledList (frame) |
| mArguments = require('Module:Arguments') | | mArguments = require('Module:Arguments') |
| | yesno = require('Module:Yesno') |
| local labels = {frame.args[1] or defaults.label} | | local labels = {frame.args[1] or defaults.label} |
| labels[2] = frame.args[2] or labels[1] | | labels[2] = frame.args[2] or labels[1] |
Line 57: |
Line 78: |
| local pages = p.preprocessDisplays(args) | | local pages = p.preprocessDisplays(args) |
| local options = { | | local options = { |
| | category = yesno(args.category), |
| extraclasses = frame.args.extraclasses, | | extraclasses = frame.args.extraclasses, |
| category = args.category, | | ifexists = yesno(frame.args.ifexists), |
| selfref = frame.args.selfref or args.selfref, | | namespace = frame.args.namespace or args.namespace, |
| | selfref = yesno(frame.args.selfref or args.selfref), |
| template = template | | template = template |
| } | | } |
Line 66: |
Line 89: |
|
| |
|
| function p._labelledList (pages, labels, options) | | function p._labelledList (pages, labels, options) |
| | if options.ifexists then |
| | for k = #pages, 1, -1 do --iterate backwards to allow smooth removals |
| | local v = pages[k] |
| | local title = mw.title.new(getTarget(v), namespace) |
| | if (v == '') or title == nil or not title.exists then |
| | table.remove(pages, k) |
| | end |
| | end |
| | end |
| labels = labels or {} | | labels = labels or {} |
| if #pages == 0 then
| |
| return mHatnote.makeWikitextError(
| |
| 'no page names specified',
| |
| (options.template or defaults.template) .. '#Errors',
| |
| options.category
| |
| )
| |
| end
| |
| label = (#pages == 1 and labels[1] or labels[2]) or defaults.label | | label = (#pages == 1 and labels[1] or labels[2]) or defaults.label |
| for k, v in pairs(pages) do | | for k, v in pairs(pages) do |
Line 83: |
Line 108: |
| (labels[4] or labels[2] or defaults.label) | | (labels[4] or labels[2] or defaults.label) |
| ) or defaults.label | | ) or defaults.label |
| | end |
| | end |
| | if #pages == 0 then |
| | if options.ifexists then |
| | mw.addWarning( |
| | string.format( |
| | msg.noOutputWarning, options.template or defaults.template |
| | ) |
| | ) |
| | return '' |
| | else |
| | return mHatnote.makeWikitextError( |
| | msg.noInputWarning, |
| | (options.template or defaults.template) .. msg.errorSuffix, |
| | options.category |
| | ) |
| end | | end |
| end | | end |