Module:SmartMobLinks: Difference between revisions
Appearance
No edit summary |
No edit summary |
||
| (3 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
-- Always return a <ul> of wiki links from a delimited list | -- Always return a <ul> of wiki links from a comma-delimited list of mob paths | ||
function p.fromDelimited(frame) | function p.fromDelimited(frame) | ||
local raw = frame.args[1] or "" | local raw = frame.args[1] or "" | ||
local delimiter = frame.args.delimiter or "," | local delimiter = frame.args.delimiter or "," | ||
local items = mw.text.split(raw, delimiter) | local items = mw.text.split(raw, delimiter) | ||
local output = { | local output = { '<ul style="margin-left: 1em;">' } | ||
for _, entry in ipairs(items) do | |||
local fullPath = mw.text.trim(entry) | |||
if fullPath ~= "" then | if fullPath ~= "" then | ||
-- Parse prefix (Mob or Named Mob) and path remainder | |||
local prefix, rest = string.match(fullPath, "^(.-)/(.+)$") | local prefix, rest = string.match(fullPath, "^(.-)/(.+)$") | ||
if not rest then | |||
if | |||
prefix = nil | prefix = nil | ||
rest = fullPath | rest = fullPath | ||
end | end | ||
if | -- Separate name and zone if present | ||
local base, zone = string.match(rest, "^(.-)/(.+)$") | |||
local label = rest | |||
if base and zone then | |||
label = base .. " (" .. zone .. ")" | |||
end | |||
-- Star marker for named mobs, appended after the link | |||
local marker = "" | |||
if prefix == "Named Mob" then | |||
marker = " ★" | |||
end | end | ||
table.insert(output, string.format('<li>[[%s|%s]]</li>', fullPath, label)) | -- Generate list item with default bullet and optional marker | ||
table.insert(output, string.format('<li>[[%s|%s]]%s</li>', fullPath, label, marker)) | |||
end | end | ||
end | end | ||
Latest revision as of 07:39, 28 May 2025
Documentation for this module may be created at Module:SmartMobLinks/doc
local p = {}
-- Always return a <ul> of wiki links from a comma-delimited list of mob paths
function p.fromDelimited(frame)
local raw = frame.args[1] or ""
local delimiter = frame.args.delimiter or ","
local items = mw.text.split(raw, delimiter)
local output = { '<ul style="margin-left: 1em;">' }
for _, entry in ipairs(items) do
local fullPath = mw.text.trim(entry)
if fullPath ~= "" then
-- Parse prefix (Mob or Named Mob) and path remainder
local prefix, rest = string.match(fullPath, "^(.-)/(.+)$")
if not rest then
prefix = nil
rest = fullPath
end
-- Separate name and zone if present
local base, zone = string.match(rest, "^(.-)/(.+)$")
local label = rest
if base and zone then
label = base .. " (" .. zone .. ")"
end
-- Star marker for named mobs, appended after the link
local marker = ""
if prefix == "Named Mob" then
marker = " ★"
end
-- Generate list item with default bullet and optional marker
table.insert(output, string.format('<li>[[%s|%s]]%s</li>', fullPath, label, marker))
end
end
table.insert(output, '</ul>')
return table.concat(output, "\n")
end
return p