Module:Tl

-- local tl = {} local getArgs = require("Dev:Arguments").getArgs local data = mw.loadData("Module:Tl/data")

function tl._new(title, parameters) title = title or "" parameters = parameters or {}

local invoke = false local pref = "" local ns = "Template" local nsdisplay = "" local page = "" local pagedisplay ="" local pagefollow = ""

local prefixes = { {"", ""},       {"int", "MediaWiki"}, {"Sunflowerverse Wiki", "Project"}, {"User", "User"}, {"Etymology", "Etymology"}, {"MediaWiki", "MediaWiki"}, {"Template", "Template"}, {"Project", "Project"} }

if title:lower:sub(1, 6) == "subst:" then pref = pref .. title:sub(1, 6) title = title:sub(7) end

if title:lower:sub(1, 8) == "#invoke:" then invoke = true pref = pref .. title:sub(1, 8) ns = "Module" title = title:sub(9) end

if title:find(":") then local spl = mw.text.split(title, ":")

nsdisplay = table.remove(spl, 1)

for _, prefix in ipairs(prefixes) do           if nsdisplay:lower == prefix[1]:lower then pagedisplay = table.concat(spl, ":") ns = prefix[2]

if ns == "" then nsdisplay = ":" end

break end end

if pagedisplay == "" then pagedisplay = nsdisplay nsdisplay = "" ns = "Template" pagefollow = ":" .. table.concat(spl, ":") end end

if pagedisplay == "" then pagedisplay = title end

page = pagedisplay

if nsdisplay == "" and not invoke then local ucfirst = pagedisplay:sub(1, 1):upper .. pagedisplay:sub(2)

for target, list in pairs(data) do           if list[ucfirst] then if target == "" then page = "" else local split = mw.text.split(target, ":")

page = split[2] .. "#" .. pagedisplay ns = split[1] end

break end end end

local link = page ~= "" and (ns .. (ns == "" and "" or ":") .. page) or "" local text = nsdisplay .. ((nsdisplay == "" or nsdisplay == ":") and "" or ":") .. pagedisplay

local out = pref .. (link ~= "" and ("" .. text .. "") or text) .. pagefollow

for _, param in ipairs(parameters) do       out = out .. "|" .. param end

return " " end

function tl.new(frame) local args = getArgs(frame) local title = args[1] local skipFirst = true local parameters = {}

-- handle = if (frame:getParent.args[""] or frame.args[""]) == "" then title = "=" skipFirst = false end

for i, param in ipairs(args) do       if i > (skipFirst and 1 or 0) then table.insert(parameters, param) end end

return tl._new(title, parameters) end

return tl --