Jump to content

Module:SmartMobLinks: Difference between revisions

From Drifters Almanac
No edit summary
Tag: Reverted
No edit summary
Tags: Manual revert Reverted
Line 1: Line 1:
local p = {}
local p = {}


-- Return a fully rendered <ul> of mob links or form links
-- Returns a table of rows { target, label, exists, form } separated by :::
function p.linkOrForm(frame)
function p.parseMobList(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 result = {}
 
    table.insert(output, '<ul style="margin-left: 1em;">')


     for _, fullPath in ipairs(items) do
     for _, fullPath in ipairs(items) do
Line 35: Line 33:
             end
             end


             local pageTitle = mw.title.new(fullPath)
             local exists = false
            local title = mw.title.new(fullPath)
            if title and title.exists then
                exists = true
            end


             if pageTitle and pageTitle.exists then
             local form = (prefix == "Named Mob") and "NamedMob" or "Mob"
                table.insert(output, string.format('<li>[[%s|%s]]</li>', fullPath, label))
            else
                local form = prefix == "Named Mob" and "NamedMob" or "Mob"
                local preload = "Template:" .. form .. "/preload"
                local editintro = "Contributing/Creating_" .. form


                local redlink = string.format('{{#formredlink:form=%s|link text=%s|target=%s|preload=%s|query string=editintro=%s}}',
            table.insert(result, string.format("%s:::%s:::%s:::%s", fullPath, label, tostring(exists), form))
                    form, label, fullPath, preload, editintro)
 
                table.insert(output, '<li>' .. redlink .. '</li>')
            end
         end
         end
     end
     end


    table.insert(output, '</ul>')
     return table.concat(result, "\n")
     return table.concat(output, "\n")
end
end


return p
return p

Revision as of 23:28, 12 May 2025

Documentation for this module may be created at Module:SmartMobLinks/doc

local p = {}

-- Returns a table of rows { target, label, exists, form } separated by :::
function p.parseMobList(frame)
    local raw = frame.args[1] or ""
    local delimiter = frame.args.delimiter or ","
    local items = mw.text.split(raw, delimiter)
    local result = {}

    for _, fullPath in ipairs(items) do
        fullPath = mw.text.trim(fullPath)

        if fullPath ~= "" then
            local prefix, rest = string.match(fullPath, "^(.-)/(.+)$")
            local label = fullPath

            if not prefix or not rest then
                prefix = nil
                rest = fullPath
            end

            if prefix == "Mob" then
                local base, zone = string.match(rest, "^(.-)/(.+)$")
                if base and zone then
                    label = base .. " (" .. zone .. ")"
                else
                    label = rest
                end
            elseif prefix == "Named Mob" then
                label = rest
            else
                label = rest
            end

            local exists = false
            local title = mw.title.new(fullPath)
            if title and title.exists then
                exists = true
            end

            local form = (prefix == "Named Mob") and "NamedMob" or "Mob"

            table.insert(result, string.format("%s:::%s:::%s:::%s", fullPath, label, tostring(exists), form))
        end
    end

    return table.concat(result, "\n")
end

return p