Line 2: |
Line 2: |
| local Utils = {} | | local Utils = {} |
| | | |
− | function Utils.method(frame)
| + | -- * Collection functions. |
− | local m = require("Module:" .. frame.args[1])
| |
− | local f = frame.args[2]
| |
− | local args = {}
| |
− | for k, v in ipairs(frame.args) do
| |
− | if type(k) == "number" and k >= 3 and type(v) == "string" then
| |
− | table.insert(args, v)
| |
− | end
| |
− | end
| |
− | return m[f](m, unpack(args))
| |
− | end
| |
| | | |
| function Utils.find(tbl, v_, k_) | | function Utils.find(tbl, v_, k_) |
Line 52: |
Line 42: |
| end | | end |
| end | | end |
| + | |
| + | -- * Calling arbitrary Lua functions using #invoke. |
| + | |
| + | -- Used to call Formatting:tooltip in Template:Tooltip, mainly because Lua code properly escapes characters, |
| + | -- so that span's title attribute always works. |
| + | function Utils.method(frame) |
| + | local m = require("Module:" .. frame.args[1]) |
| + | local f = frame.args[2] |
| + | local args = {} |
| + | for k, v in ipairs(frame.args) do |
| + | if type(k) == "number" and k >= 3 and type(v) == "string" then |
| + | table.insert(args, v) |
| + | end |
| + | end |
| + | return m[f](m, unpack(args)) |
| + | end |
| + | |
| + | -- * Frame functions. |
| | | |
| local getArgs = require("Module:GetArgs") | | local getArgs = require("Module:GetArgs") |
| | | |
| + | -- Unused. |
| function Utils.getContext(frame) | | function Utils.getContext(frame) |
| local frame1 = frame:getParent() | | local frame1 = frame:getParent() |
Line 69: |
Line 78: |
| end | | end |
| | | |
− | function Utils.test_context(frame) | + | -- getParent -> getArgs |
− | local context = Utils.getContext(frame) | + | function Utils.getParentArgs(frame) |
− | return "arg = " .. (context.args.arg or "?") .. " @ " .. (context.pagename or "?") | + | local frame1 = frame:getParent() |
| + | if frame1 then |
| + | return getArgs{ frame = frame1 } |
| + | else |
| + | return nil |
| + | end |
| + | end |
| + | |
| + | -- getArgs + getParent -> getArgs, "implicit" args can be defined in the template (e.g. pagename={{PAGENAME}}) |
| + | -- "explicit" args are user defined. |
| + | function Utils.getTemplateArgs(frame) |
| + | local frame1 = frame:getParent() |
| + | if frame1 then |
| + | return { implicit = getArgs{ frame = frame }, explicit = getArgs{ frame = frame1 } } |
| + | else |
| + | return { implicit = getArgs{ frame = frame }, explicit = {} } |
| + | end |
| end | | end |
| | | |
| return Utils | | return Utils |